cgmsv引擎论坛

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

[LUA] 远程观战,支持按需观战,修复只能观战1场bug

[复制链接]

Rank: 1

发表于 2021-4-24 03:37:39 | 显示全部楼层 |阅读模式
感谢http://bbs.cgmsv.com/thread-871-1-1.html的帖子

用了之后发现battle变量没有声明,修复后发现哪怕用了table依然无法同时多人发送各自自己的战斗id,然后实现多人、多场战斗
被玩家有选择性的观战功能

所以我重做了...最让我裂开的是!原先几百行代码都是失败,最后待我优化成功的代码,才几行就可以了...


以下代码加入到ng.lua中如:/5之后即可

  1. if msg == "/15" or msg == "、15" then
  2.                 local gzzt = Char.GetBattleIndex(player);--获取自己战斗状态
  3.                 local gzmz = Char.GetData(player,%对象_名字%)
  4.                 local gzcdk = Char.GetData(player,%对象_CDK%)
  5.                 local players = nil--被观战玩家
  6.                 if gzzt == -1 then
  7.                         NLG.SystemMessage(player,"你目前没有在战斗中!");
  8.                 else
  9.                         players = player
  10.                         NLG.Say(-1,-1,""..gzmz.."邀请您输入/16"..players.."观战!",1,3)--通告全服你的专属观战编号
  11.                 end
  12.         end
  13.        
  14.         if check_msg(msg,"/16") then
  15.                 local gzmsg = string.sub(msg,4)--从第4个字节开始收入变量
  16.                 local gzzt2 = Char.GetBattleIndex(player);--获取自己战斗状态
  17.                 local gzzt3 = Char.GetBattleIndex(tonumber(gzmsg));--获取目标玩家战斗状态
  18.                 --print (gzmsg)
  19.                 --NLG.SystemMessage(player,"调试参数:"..gzmsg.."")
  20.                 if gzzt2 ~= -1 then
  21.                 NLG.SystemMessage(player,"你当前正在观战或战斗中,退出后可以继续观战!");
  22.                 elseif gzzt3 == -1 then
  23.                 NLG.SystemMessage(player,"目标玩家战斗已经结束!");
  24.                 else
  25.                 NLG.WatchBattle(player,tonumber(gzmsg))
  26.                 end
  27.         elseif check_msg(msg,"、16") then
  28.                 local gzmsg = string.sub(msg,5)--从第5个字节开始收入变量
  29.                 local gzzt2 = Char.GetBattleIndex(player);--获取自己战斗状态
  30.                 local gzzt3 = Char.GetBattleIndex(tonumber(gzmsg));--获取目标玩家战斗状态
  31.                 --print (gzmsg)
  32.                 --NLG.SystemMessage(player,"调试参数:"..gzmsg.."")
  33.                 if gzzt2 ~= -1 then
  34.                 NLG.SystemMessage(player,"你当前正在观战或战斗中,退出后可以继续观战!");
  35.                 elseif gzzt3 == -1 then
  36.                 NLG.SystemMessage(player,"目标玩家战斗已经结束!");
  37.                 else
  38.                 NLG.WatchBattle(player,tonumber(gzmsg))
  39.                 end
  40.         end
复制代码


值得注意的是,之前总是写不出,是因为自己被数字坑了
变量=player的时候,哪怕print调试显示是数字,它tm其实是字符
花了我好几个小时才想明白,原来需要用tonumber把字符变成真正的数字

由于我内挂已经做到/十几了。。。所以如果你搬运到你sf的话
若改为/单数(如:/8),那么string.sub(msg,4)中的4要改为3

Rank: 1

发表于 2021-4-24 08:21:55 | 显示全部楼层
谢谢大佬分享
您需要登录后才可以回帖 登录 | 注册/Sign up

本版积分规则

手机版|cgmsv引擎论坛

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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