cgmsv引擎论坛

 找回密码
 注册/Sign up
搜索
查看: 3145|回复: 3

[LUA] 天降宝箱 优化版

[复制链接]

Rank: 1

发表于 2021-4-26 22:23:43 | 显示全部楼层 |阅读模式
根据自带的tjbx.lua做的小修改

主要是右键打开的不再是物品宝箱,而是随机道具,道具可以自定义


  1. --参数定义
  2. tbl_TJBX_areaset = {};        --随机掉落的区域设定
  3. --TJBX_itemid = 18002;        --宝箱ID
  4. TJBX_itemid = {};--天降宝箱随机品类
  5. TJBX_outtime = 300;        --宝箱无人捡取自动消失时间,单位秒
  6. TJBX_limit_playerlevel = 1;        --玩家等级限制
  7. TJBX_count = 50;        --宝箱个数
  8. TJBX_DEBUG = 1;
  9. --天降宝箱范围
  10. TJBX_itemid[0] = 18771--水精的福袋
  11. TJBX_itemid[1] = 18804--风精的福袋
  12. TJBX_itemid[2] = 18932--火精的福袋
  13. TJBX_itemid[3] = 18960--地精的福袋
  14. TJBX_itemid[4] = 40839--武神福袋
  15. TJBX_itemid[5] = 40840--精灵福袋
  16. TJBX_itemid[6] = 41257--祭典福袋
  17. TJBX_itemid[7] = 41335--圣诞福袋
  18. TJBX_itemid[8] = 45989--运气满点的福袋
  19. TJBX_itemid[9] = 46318--种子福袋
  20. TJBX_itemid[10] = 46434--彩券福袋
  21. TJBX_itemid[11] = 47192--法兰福袋
  22. TJBX_itemid[12] = 47563--新春吉祥福袋
  23. TJBX_itemid[13] = 47680--雪人福袋
  24. TJBX_itemid[14] = 47738--女神福袋
  25. TJBX_itemid[15] = 47739--惜福福袋
  26. TJBX_itemid[16] = 47740--鼠王福袋
  27. TJBX_itemid[17] = 47764--趴踢的福袋
  28. TJBX_itemid[18] = 18699--o零件
  29. TJBX_itemid[19] = 18658--q零件
  30. --坐标范围设定
  31. tbl_TJBX_areaset[1] = {227,72,247,98};
  32. tbl_TJBX_areaset[2] = {214,82,226,92};
  33. Delegate.RegInit("TJBX_Init");
  34. function TJBX_Init()       
  35.         for i=1,TJBX_count do
  36.                 TJBXNpc_id101_Create(i);
  37.         end
  38. end
  39. function Myinit(index)
  40.         return true;
  41. end
  42. Delegate.RegDelTalkEvent("TJBX_TalkEvent");
  43. function TJBX_TalkEvent(player,msg,color,range,size)
  44.         if(TJBX_DEBUG == 1)then
  45.         if(msg == "[sexbody kaiqibaoxiang]") then
  46.                 for i=1,TJBX_count do
  47.                         TJBXNpc_id101_show(tbl_TJBX_npc[i]);
  48.                 end
  49.         end
  50.         end
  51. end
  52. function TJBXNpc_id101_Create(id)
  53.         if (tbl_TJBX_npc[id] == nil) then
  54.                 tbl_TJBX_npc[id] = NL.CreateNpc("lua/Module/TJBX.lua", "Myinit");
  55.                 Char.SetData(tbl_TJBX_npc[id],%对象_形象%,27899);
  56.                 Char.SetData(tbl_TJBX_npc[id],%对象_原形%,27899);
  57.                 Char.SetData(tbl_TJBX_npc[id],%对象_X%,2);
  58.                 Char.SetData(tbl_TJBX_npc[id],%对象_Y%,52);
  59.                 Char.SetData(tbl_TJBX_npc[id],%对象_地图%,777);
  60.                 Char.SetData(tbl_TJBX_npc[id],%对象_方向%,5);
  61.                 Char.SetData(tbl_TJBX_npc[id],%对象_名字%,"天降宝箱");
  62.                 --Char.SetData(tbl_TJBX_npc[id],%对象_名色%,%颜色_绿色%);
  63.                 NLG.UpChar(tbl_TJBX_npc[id]);
  64.                 Char.SetTalkedEvent("lua/Module/TJBX.lua","TJBXNpc_id101_Talked", tbl_TJBX_npc[id]);
  65.                 Char.SetWindowTalkedEvent("lua/Module/TJBX.lua","TJBXNpc_id101_WTalked", tbl_TJBX_npc[id]);
  66.                 Char.SetLoopEvent("lua/Module/TJBX.lua","TJBXNpc_id101_LoopEvent", tbl_TJBX_npc[id],1000);
  67.         end
  68. end
  69. --天降宝箱——TJBXNpc_id101——Lua脚本
  70. function TJBXNpc_id101_Talked(_npc,_player)
  71.         local sjnum = math.random(0,19)--生成天降宝箱随机掉落编号
  72.         local sjnum2 = TJBX_itemid[sjnum]
  73.         if(NLG.CanTalk(_npc,_player)==false)then
  74.                 return;
  75.         end
  76.         if Char.GetData(_player,%对象_等级%) < TJBX_limit_playerlevel then
  77.                 NLG.SystemMessage(_player,"[系统提示] 以您的能力,无法拾取这个宝箱");
  78.                 return;
  79.         end
  80.         if Char.ItemSlot(_player) == 20 then
  81.                 NLG.SystemMessage(_player,"[系统提示] 您的背包太满,拿不了宝箱!");
  82.                 return;
  83.         else
  84.                 Char.SetData(_npc,%对象_X%,52);
  85.                 Char.SetData(_npc,%对象_Y%,50);
  86.                 Char.SetData(_npc,%对象_地图%,555);
  87.                 NLG.UpChar(_npc);
  88.                 NLG.SystemMessage(-1,"[系统公告] 恭喜玩家“"..Char.GetData(_player,%对象_名字%).."”捡到天降宝箱,获得神秘宝物!");
  89.                 Char.GiveItem(_player,sjnum2,1);
  90.                 return;
  91.         end
  92. end
  93. function TJBXNpc_id101_WTalked(_npc,_player,_seqno,_select,_data)
  94.         if (NLG.CanTalk(_npc,_player)==false) then
  95.                 return;
  96.         end
  97.         if (tonumber(_seqno)==1) then
  98.                 if (tonumber(_select) == %按钮_是%) then
  99.                         return;
  100.                 else
  101.                         return;
  102.                 end
  103.                 return;
  104.         end
  105.         return;
  106. end
  107. --注意:对象_经验字段,被用来缓存宝箱已出现的时间了,这里判断超过了时限,会回到555地图
  108. function TJBXNpc_id101_LoopEvent(_npc)
  109.         if Char.GetData(_npc,%对象_地图%) ~= 555 then
  110.                 if (os.time() - Char.GetData(_npc,%对象_经验%)) >= TJBX_outtime then
  111.                         --NLG.SystemMessage(-1,"[系统公告] 在("..Char.GetData(_npc,%对象_X%)..","..Char.GetData(_npc,%对象_Y%)..")坐标的天降宝箱,因为无人拾取,已自动消失!");
  112.                         Char.SetData(_npc,%对象_X%,51);
  113.                         Char.SetData(_npc,%对象_Y%,50);
  114.                         Char.SetData(_npc,%对象_地图%,555);
  115.                         NLG.UpChar(_npc);
  116.                 end
  117.         end
  118.        
  119.         --自动刷新
  120.         if (os.date("%X",os.time())=="12:00:00") or (os.date("%X",os.time())=="13:00:00") or (os.date("%X",os.time())=="14:00:00") or (os.date("%X",os.time())=="15:00:00") or (os.date("%X",os.time())=="16:00:00") or (os.date("%X",os.time())=="17:00:00") or (os.date("%X",os.time())=="18:00:00") or (os.date("%X",os.time())=="19:00:00") or (os.date("%X",os.time())=="20:00:00") or (os.date("%X",os.time())=="21:00:00") or (os.date("%X",os.time())=="22:00:00") or (os.date("%X",os.time())=="23:00:00") or (os.date("%X",os.time())=="23:59:00") then
  121.         --if (os.date("%X",os.time())=="08:00:00") or (os.date("%X",os.time())=="09:00:00") or (os.date("%X",os.time())=="10:00:00") or (os.date("%X",os.time())=="11:00:00") or (os.date("%X",os.time())=="12:00:00") or (os.date("%X",os.time())=="13:00:00") or (os.date("%X",os.time())=="14:00:00") or (os.date("%X",os.time())=="17:00:00") then
  122.         --if Char.GetData(_npc,%对象_地图%) == 555 then
  123.         --if (os.date("%X",os.time())=="00:05:00") or (os.date("%X",os.time())=="00:10:00")  or (os.date("%X",os.time())=="00:15:00")  or (os.date("%X",os.time())=="00:20:00") then
  124.                 TJBXNpc_id101_show(_npc);
  125.         end
  126. end
  127. function myrandom(a1,a2)
  128.         local b1;
  129.         if(a1>=a2)then
  130.                 b1 = math.random(a2,a1);
  131.         else
  132.                 b1 = math.random(a1,a2);
  133.         end
  134.         return b1;
  135. end
  136. function TJBXNpc_id101_show(_npc)
  137.         local _k1 = myrandom(1,#tbl_TJBX_areaset);
  138.         local _x = myrandom(tbl_TJBX_areaset[_k1][1],tbl_TJBX_areaset[_k1][3]);
  139.         local _y = myrandom(tbl_TJBX_areaset[_k1][2],tbl_TJBX_areaset[_k1][4]);
  140.         Char.SetData(_npc,%对象_X%,_x);
  141.         Char.SetData(_npc,%对象_Y%,_y);
  142.         Char.SetData(_npc,%对象_地图%,1000);
  143.         Char.SetData(_npc,%对象_经验%,os.time());
  144.         NLG.UpChar(_npc);
  145.         if(TJBX_DEBUG == 1)then
  146.                 --NLG.SystemMessage(-1,"[坐标] (".._x..",".._y..")");
  147.         end
  148.         NLG.SystemMessage(-1,"[系统公告] 神秘宝箱已出现在某个位置,请勇者们尽快前往搜寻。");
  149.         --NLG.SystemMessage(-1,"[系统公告] 神秘宝箱已出现在某个位置,请勇者们尽快前往搜寻。".._x..",".._y);
  150. end
复制代码



比如增加第20号
TJBX_itemid[20] = 88888--钻
那么记得搜索修改代码,为
math.random(0,20)

Rank: 1

发表于 2021-4-28 09:58:30 | 显示全部楼层
隨機掉落的寶箱會掉到玩家不能進的位置 ( 例如: 房屋中間 )

Rank: 1

 楼主| 发表于 2021-4-28 20:29:33 | 显示全部楼层
weweaa 发表于 2021-4-28 09:58
隨機掉落的寶箱會掉到玩家不能進的位置 ( 例如: 房屋中間 )

改范围即可


搜索代码
  1. Char.SetLoopEvent("lua/Module/TJBX.lua","TJBXNpc_id101_LoopEvent", tbl_TJBX_npc[id],1000);
复制代码
里面1000为地图编号,1000=法兰城



搜索代码

  1. --坐标范围设定
  2. tbl_TJBX_areaset[1] = {56,83,93,93};--左下右上
  3. tbl_TJBX_areaset[2] = {93,83,56,93};--左上右下
复制代码


56,83指的是左下坐标

93,93指的是右上坐标
93,83指的是左下坐标
56,93指的是右下坐标
4个坐标组成了一个方块区域
自己改范围即可

Rank: 1

发表于 2021-4-29 16:17:20 | 显示全部楼层

謝謝教導~感覺越來越多好玩的功能~
您需要登录后才可以回帖 登录 | 注册/Sign up

本版积分规则

手机版|cgmsv引擎论坛

GMT+8, 2024-11-21 21:52 , Processed in 0.172432 second(s), 7 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表