LUACN论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
热搜: YJWOW MagicStone BoL
查看: 21|回复: 1

[综合] 请大佬帮忙看下面一段代码是哪里出了问题

[复制链接]
发表于 昨天 07:13 PM | 显示全部楼层 |阅读模式
最近在学习NI,写了一段净化图腾解毒的代码,但是遇到一个非常奇怪的问题,代码片段如下:
[Lua] 纯文本查看 复制代码
ocal function Auto_Detox()
    local _,auto_detox_enabled=GetSetting("Detox")
    local detox_option_value=GetSetting("Detox_option")   
   local numDetox=GetSetting("Num_member_detox") 
        if numDetox=="" then numDetox=0 end
    local numMemberPoison=0
    local numMemberDisease=0
   for i=1,#ni.members do
        local member_guid=ni.members[i]["guid"]
        if ni.unit.debufftype(member_guid, "Poison") then 
            numMemberPoison=numMemberPoison+1
        elseif ni.unit.debufftype(member_guid, "Disease") then 
            numMemberDisease=numMemberDisease+1
        end
   end
    local multiplePoison=false
    local multipleDisease=false 
print("测试1")
    if numMemberPoison<=numDetox then 
        multiplePoison=true
        end
print("测试2")
if numMemberDisease>=numDetox then
         multipleDisease=true 
end
print("测试3")


如上图,这段代码没有贴完整,实际格式都是正确的,进到游戏后按F1,并没有lua报错,但是按F1后,实际只有“测试1”被打印了出来,测试2和测试3并不会打印。我把这段代码赋值粘贴到bee里面(当然auto_detox_enabled,detox_option_value,numDetox原来是读取GUI中的key对应的值,在WBE里面分别直接赋值为true,2,2),神奇的发生了,测试1、测试2和测试3均能打印
然后在游戏里测试下,从if numMemberPoison<=numDetox then multiplePoison=true end 这段代码后,所有print均不能正常运行。于是我在测试1的位置上将print("测试1")更换为print(numMemberPoison<=numDetox),同样不能打印,但是在bee又可以打印。

为了确认会不会是auto_detox_enabled,detox_option_value,numDetox的赋值出了问题,因此我在测试1的位置更换为print(auto_detox_enabled,detox_option_value,numDetox),重载后按F1执行脚本,可以正常显示正确的赋值,即true,2,2,但是测试2和测试3仍然不能打印

WBE和NI脚本里差异只有auto_detox_enabled,detox_option_value,numDetox这3个变量的赋值方式,为了彻底搞清这个问题,我把脚本中auto_detox_enabled,detox_option_value,numDetox这3个变量读取GetSetting的赋值全部改为直接赋值,即true,2,2,结果测试1、测试2和测试3都能打印了

看起来似乎的确是auto_detox_enabled,detox_option_value,numDetox这3个变量读取设置值出了问题,但是我检查了下key,完全没有问题,而且上面红色标记段落的测试也证明了在测试2前的if then end语句前,这3个变量赋值是完全没有问题了

最后我再做了一个测试,在测试1的位置,即将print("测试1")更换为2个print语句:print(numMemberPoison,numDetox)和print(numMemberPoison<=numDetox),重载后按F1执行,print(numMemberPoison,numDetox)可以正确打印出结果即0,2,但是print(numMemberPoison<=numDetox)无法打印,这段代码复制黏贴到魔蜂里面,print(numMemberPoison<=numDetox)可以正确的打印出true

那么可以确定问题出现在条件判断上了,即numMemberPoison<=numDetox或numMemberPoison<=numDetox这2个条件出问题,但是为什么在bee里面能正确运行,NI里面就不行了,百思不得解啊

跪求大佬解惑

回复

使用道具 举报

 楼主| 发表于 昨天 07:19 PM | 显示全部楼层
好吧,上面打了这么多字,自己倒是把思路理清楚了
既然是numMemberPoison<=numDetox或numMemberPoison<=numDetox这2个判断条件出错,那么最常见的就是变量类型不同,用了type(numDetox)看了下,果然是string,因此把local numDetox=GetSetting("Num_member_detox") 改为local numDetox=tonumber(GetSetting("Num_member_detox") )就解决了
上面的描述我就不删除了,供和我一样小白,写脚本同样摸不着头脑的人参考
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

小黑屋|手机版|Archiver|LUACN论坛

GMT+8, 2025-9-14 05:55 AM , Processed in 0.036244 second(s), 14 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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