function killplay(actor, player)
local attackingSand = castleinfo(5)
if attackingSand ~= true then ---检测玩家是否在攻沙
if checktitle(actor, "狂暴之力") and checktitle(player, "狂暴之力") then
changemoney(actor, 2, "+", 50000, "击杀狂暴玩家", t
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-10 15:12:27 |
👁️ 阅读: 15
我是Lua后端老师!
小仙,我仔细看了你的代码,发现了一个逻辑判断上的问题。你的代码中,`checktitle(actor, "狂暴之力") and checktitle(player, "狂暴之力")` 这个条件是**并且(and)** 关系。
这意味着,只有当**攻击者(actor)** 和**被击杀者(player)** **都拥有**“狂暴之力”称号时,整个`if`语句里的奖励和扣称号逻辑才会执行。
根据你的描述“如果我没有狂暴之力但是击杀了有狂暴之力的U10也+1”,这不符合你的预期。你的预期应该是,只要被击杀者(player)有“狂暴之力”称号,攻击者(actor)就应该获得奖励。
所以,你需要把判断条件从 **并且(and)** 改为 **或者(or)** 吗?不,更准确地说,应该只检查**被击杀者(player)** 是否拥有“狂暴之力”称号。
让我们修改一下代码,同时,我注意到你最后用了一个`p(attackingSand)`,在996引擎中,我们通常使用 `release_print()` 来打印调试信息。
这是修改后的代码:
```lua
function killplay(actor, player)
-- 检测攻沙状态
local attackingSand = castleinfo(5)
-- release_print("攻沙状态:" .. tostring(attackingSand)) -- 调试用
if attackingSand ~= true then -- 如果不在攻沙期间
-- 关键修改:只检查被击杀者是否拥有“狂暴之力”称号
if checktitle(player, "狂暴之力") then
-- 给攻击者奖励
changemoney(actor, 2, "+", 50000, "击杀狂暴玩家", true)
sendmsg(actor, 1,
'{"Msg":"你一击杀对方玩家,获得5万元宝!!!!","FColor":253,"BColor":0,"Type":9,"Time":3,"SendName":"xxx","SendId":"123"}')
-- 为攻击者叠加BUFF和计数
if getplaydef(actor, "U10") < 10 then
addbuff(actor, 10001)
setplaydef(actor, "U10", getplaydef(actor, "U10") + 1)
end
-- 剥夺被击杀者的称号和BUFF
deprivetitle(player, "狂暴之力")
delbuff(player, 10001)
end
end
-- release_print(attackingSand) -- 如果需要打印,请使用 release_print
end
```
**修改说明:**
1. 将判断条件 `checktitle(actor, "狂暴之力") and checktitle(player, "狂暴之力")` 改为 `checktitle(player, "狂暴之力")`。
2. 这样修改后,只要被杀的玩家(`player`)有“狂暴之力”称号,无论攻击者(`actor`)有没有这个称号,都会触发奖励逻辑。
3. 注释掉了 `p(attackingSand)`,并给出了使用 `release_print()` 的示例。记得在正式脚本中移除或注释掉调试打印语句。
下次写条件判断时要仔细想想“与(and)”和“或(or)”的关系哦!如果还有不明白的,随时可以问我,或者去请教浮生梦尊师!
我是Lua后端老师!
小仙,我仔细看了你的代码,发现了一个逻辑判断上的问题。你的代码中,`checktitle(actor, "狂暴之力") and checktitle(player, "狂暴之力")` 这个条件是**并且(and)** 关系。
这意味着,只有当**攻击者(actor)** 和**被击杀者(player)** **都拥有**“狂暴之力”称号时,整个`if`语句里的奖励和扣称号逻辑才会执行。
根据你的描述“如果我没有狂暴之力但是击杀了有狂暴之力的U10也+1”,这不符合你的预期。你的预期应该是,只要被击杀者(player)有“狂暴之力”称号,攻击者(actor)就应该获得奖励。
所以,你需要把判断条件从 **并且(and)** 改为 **或者(or)** 吗?不,更准确地说,应该只检查**被击杀者(player)** 是否拥有“狂暴之力”称号。
让我们修改一下代码,同时,我注意到你最后用了一个`p(attackingSand)`,在996引擎中,我们通常使用 `release_print()` 来打印调试信息。
这是修改后的代码:
```lua
function killplay(actor, player)
-- 检测攻沙状态
local attackingSand = castleinfo(5)
-- release_print("攻沙状态:" .. tostring(attackingSand)) -- 调试用
if attackingSand ~= true then -- 如果不在攻沙期间
-- 关键修改:只检查被击杀者是否拥有“狂暴之力”称号
if checktitle(player, "狂暴之力") then
-- 给攻击者奖励
changemoney(actor, 2, "+", 50000, "击杀狂暴玩家", true)
sendmsg(actor, 1,
'{"Msg":"你一击杀对方玩家,获得5万元宝!!!!","FColor":253,"BColor":0,"Type":9,"Time":3,"SendName":"xxx","SendId":"123"}')
-- 为攻击者叠加BUFF和计数
if getplaydef(actor, "U10") < 10 then
addbuff(actor, 10001)
setplaydef(actor, "U10", getplaydef(actor, "U10") + 1)
end
-- 剥夺被击杀者的称号和BUFF
deprivetitle(player, "狂暴之力")
delbuff(player, 10001)
end
end
-- release_print(attackingSand) -- 如果需要打印,请使用 release_print
end
```
**修改说明:**
1. 将判断条件 `checktitle(actor, "狂暴之力") and checktitle(player, "狂暴之力")` 改为 `checktitle(player, "狂暴之力")`。
2. 这样修改后,只要被杀的玩家(`player`)有“狂暴之力”称号,无论攻击者(`actor`)有没有这个称号,都会触发奖励逻辑。
3. 注释掉了 `p(attackingSand)`,并给出了使用 `release_print()` 的示例。记得在正式脚本中移除或注释掉调试打印语句。
下次写条件判断时要仔细想想“与(and)”和“或(or)”的关系哦!如果还有不明白的,随时可以问我,或者去请教浮生梦尊师!
← 返回问答库