cgmsv引擎论坛

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

[LUA] 自制一个客户端命令解析模板

[复制链接]

Rank: 1

发表于 2021-3-5 01:57:28 | 显示全部楼层 |阅读模式
  1. -- 步步遇敌开关
  2. isYD = {};
  3. -- 监测一级宠物开关
  4. isTS = {};
  5. -- 挂机战斗开关
  6. isZD = {};
  7. function Chat_Split( str, reps )
  8.     local resultStrList = {}
  9.     string.gsub(str,'[^'..reps..']+', function ( w )
  10.         table.insert(resultStrList, w)
  11.     end)
  12.     return resultStrList;
  13. end
  14. function Encount_Battle(_player)
  15.     if (not isYD[_player]) then
  16.         return;
  17.     end
  18.     if (Char.GetData(_player,%对象_战斗状态%) > 0) then
  19.         return;
  20.     end
  21.     if (Char.PartyNum(_player) > 1 and Char.GetPartyMember(_player,0) ~= _player) then
  22.         isYD[_player] = false;
  23.         NLG.SystemMessage(_player,"【步步遇敌】关闭,你不是队长!");
  24.         return;
  25.     end
  26.     Battle.Encount(_player,_player);
  27.     if (Char.GetData(_player,%对象_战斗状态%) > 0) then
  28.         return;
  29.     end
  30.     isYD[_player] = false;
  31.     NLG.SystemMessage(_player,"【步步遇敌】关闭,当前地图无法遇敌!");
  32.     return;
  33. end
  34. function Find_LevelOnePet(_battle)
  35.     if Battle.GetType(_battle) ~= %战斗_普通% then
  36.         return 0;
  37.     end
  38.     for _target=10,19 do
  39.         _pet = Battle.GetPlayer(_battle, _target);
  40.         if(_pet > -1) and Char.GetData(_pet, %对象_等级%) == 1 then
  41.             for _member=0,9 do
  42.                 _player = Battle.GetPlayer(_battle, _member);
  43.                 if(_player > -1 and isTS[_player]) then
  44.                     NLG.SystemMessage(_player,"战斗 " .. _battle .. "【出现一级宠物】" .. Char.GetData(_pet,%对象_名字%));
  45.                 end
  46.             end
  47.         end
  48.     end
  49.     return 0;
  50. end
  51. function Order_TalkEvent(_player, _msg, _color, _range, _size)
  52.     if string.byte(_msg) ~= 47 then
  53.         return;
  54.     end
  55.     local params = Chat_Split(_msg, ' ');
  56.     local cmd = string.sub(params[1], 2);
  57.     if type(tonumber(cmd)) == "number" then
  58.         return 0;
  59.     elseif string.len(cmd) == 0 then
  60.         return;
  61.     end
  62.     cmd = string.upper(cmd);
  63.     -- 步步遇敌
  64.     if cmd == 'YD' then
  65.         if (isYD[_player] == nil) then
  66.             Char.SetWalkPostEvent(nil,"Encount_Battle",_player);
  67.             isYD[_player] = false;
  68.         end
  69.         if (not isYD[_player]) then
  70.             if (Char.PartyNum(_player) > 1 and Char.GetPartyMember(_player,0) ~= _player) then
  71.                 NLG.SystemMessage(_player,"【步步遇敌】仅队长可开启!");
  72.                 return 0;
  73.             end
  74.             isYD[_player] = true;
  75.             NLG.SystemMessage(_player,"【步步遇敌】开启");
  76.         else
  77.             isYD[_player] = false;
  78.             NLG.SystemMessage(_player,"【步步遇敌】关闭");
  79.         end
  80.         return 0;
  81.     end
  82.     -- 提示1级宠物
  83.     if cmd == 'TS' then
  84.         if(isTS[_player] == nil) then
  85.             isTS[_player] = false;
  86.         end
  87.         if(isTS[_player]) then
  88.             isTS[_player] = false;
  89.             NLG.SystemMessage(_player,"【提示1级宠物】关闭");
  90.         else
  91.             isTS[_player] = true;
  92.             NLG.SystemMessage(_player,"【提示1级宠物】开启");
  93.         end
  94.         return 0;
  95.     end
  96.    
  97.     -- 观战
  98.     if cmd == 'GZ' then
  99.         local tName = params[2];
  100.         if(tName == nil or string.len(tName) < 1) then
  101.             NLG.SystemMessage(_player,"观战指令格式:/gz <name>");
  102.             return 0;
  103.         end
  104.         local select = string.format("SELECT CdKey FROM tbl_character WHERE Name=\'%s\' ", tName);
  105.         local rset = SQL.Run(select);
  106.         if (Char.PartyNum(_player) > 1 and Char.GetPartyMember(_player,0) ~= _player) then
  107.             NLG.SystemMessage(_player,"仅队长可开启观战!");
  108.             return 0;
  109.         end
  110.         if(type(rset) == "table" and rset["0_0"]) then
  111.             local tplayer = NLG.FindUser(rset["0_0"]);
  112.             if(_player == tplayer) then
  113.                 NLG.SystemMessage(_player,"无法观战自己。");
  114.                 return 0;
  115.             end
  116.             if(tplayer > -1) then
  117.                 NLG.WatchBattle(_player, tplayer);
  118.             else
  119.                 NLG.SystemMessage(_player,"该玩家不在线。");
  120.             end
  121.         else
  122.             NLG.SystemMessage(_player,"未查询到名为" ..tName.. "的玩家。");
  123.         end
  124.         return 0;
  125.     end
  126.     -- 查看声望
  127.     if cmd == 'SW'  then
  128.         local sw = Char.GetData(_player, %对象_声望%);
  129.         NLG.SystemMessage(_player,"您当前的声望为" ..sw.. ".");
  130.         return 0;
  131.     end
  132.     -- 测试
  133.     if cmd == 'TEST' then
  134.         local rand = NLG.Rand(0, 10);
  135.         NLG.SystemMessage(_player,"随机数" ..rand.. ".");
  136.         return 0;
  137.     end
  138. end
  139. function Init_isYD(_player)
  140.     if(isYD[_player]) then
  141.         NLG.SystemMessage(_player,"检测到登出,【步步遇敌】关闭。");
  142.         isYD[_player] = false;
  143.     end
  144.     return;
  145. end
  146. -- 注册事件
  147. NL.RegTalkEvent(nil,"Order_TalkEvent");
  148. NL.RegBattleStartEvent(nil, 'Find_LevelOnePet');
  149. -- 重置步步遇敌开关
  150. NL.RegLogoutEvent(nil, "Init_isYD");
  151. NL.RegLoginGateEvent(nil, "Init_isYD");
复制代码
您需要登录后才可以回帖 登录 | 注册/Sign up

本版积分规则

手机版|cgmsv引擎论坛

GMT+8, 2024-11-21 22:34 , Processed in 0.161548 second(s), 8 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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