被偷袭死掉的怨气需要一个出口:仇人系统记录对自己下过杀手的人,仇人的位置在列表里可见,复仇的机制让恩怨有处可寻。仇人系统的要点是仇人的自动登记、追踪的边界与恩怨的了结——PVP 的江湖恩怨要有规则化的出口。
---playdie: 被杀触发,凶手进仇人列表
function playdie(self, hiter)
local player = class(self)
if not player then return end
if not hiter or not hiter:IsPlayer() then return end
-- 正当场景豁免:攻城战与切磋不记仇
if Siege.running and self.mapId == "shabake" then
return
end
if Duel.inDuel(self, hiter) then
return
end
-- 登记仇人:保留 7 天
setplayvar(self, "HUMAN",
"Foe_" .. hiter:GetUserId(), os.time(), 1)
sendmsg(self, 1, hiter:GetName() ..
" 已加入个人仇人列表(7 天)")
end
仇人的登记在死亡触发里自动完成:野外的伏杀、练级的恶意 PK 都会记账,攻城战与切磋的正当场景豁免——恩怨的登记有规则的边界,攻城的敌对是战场不是私仇。仇人的保留期 7 天:一周的时间足够复仇也足够淡忘,仇恨的清单不会无限膨胀。列表的容量 20 人:超出后最早的仇人自动移出,记仇的容量有限,优先记最近的恩怨。
---仇人的追踪:上线提醒与位置提示
setontimerex(115, 300)
function Foe.track(actor)
local player = class(actor)
if not player then return end
local foes = Foe.listOf(actor)
for uid, markedAt in pairs(foes) do
if os.time() - markedAt < 7 * 86400 then
local foe = getplayerbyname(uid)
if foe and foe:IsOnline() then
sendmsg(actor, 1, "宿敌 " ..
foe:GetName() .. " 正在线," ..
"位于 " .. foe.mapId)
return -- 每次只提示一位
end
end
end
end
复仇的追踪给线索不给坐标:仇人在线的提醒带地图的名字(不带精确坐标),复仇的hunt有方向但不是自动寻路的狙击——追踪的尺度在「找得到」与「秒杀」之间。复仇的奖励机制:击杀仇人后双方的恩怨清账(仇人条目移除),复仇成功的播报只对当事人可见——恩怨的了结是私人的事,公开的羞辱会把循环仇推向无限。误杀的解除通道:对方主动道歉(发送道歉的表情或申请好友)可从仇人列表移除,恩怨的解法不止刀一种。
仇人的登记量与复仇的成功率统计,复仇的完结率(登记后 7 天内完成击杀)反映机制的可用性;循环仇的识别(互相击杀超过 5 次)进风控的观察,无休止的仇杀需要调解的介入。
豁免的判定曾经漏了比武场,切磋的失利也记了仇,正当场景的名单补全。追踪的提示曾经带精确坐标,蹲点复仇变成自动狙击,位置的模糊化到地图级。仇人的条目曾经在对方改名后失效,改名的仇人从列表里消失,追踪的键用 userId 的不可变标识。
仇人的豁免场景清单与 PK 的规则体系对齐:正当的对抗不结仇,恶意的偷袭必记账。复仇的权益不越界:位置到地图级、无加成的属性,复仇靠实力不靠系统的馈赠。恩怨的调解入口挂客服,恶性循环的仇杀有官方的仲裁。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 强化连败七次是什么体验?幸运值机制给失败的玩家一个隐性的承诺:每次失败累加幸运值,幸运值越高下一次的成功…
实战应用:用在哪里 被偷袭死掉的怨气需要一个出口:仇人系统记录对自己下过杀手的人,仇人的位置在列表里可见,复仇的机制让恩怨有…
实战应用:用在哪里 拍卖行的出价是一场与时间的博弈:出价的按钮、倒计时的紧迫、截拍瞬间的悬念——拍卖界面的要点是出价的流程、…
实战应用:用在哪里 面对面的交易是传奇最经典的交互:两人面对面、各自放入物品与金币、双方确认后成交。交易的协议要点是会话的建…
实战应用:用在哪里 活动结束给 3 万玩家发奖励:一次性群发让邮件表瞬间多 3 万行、投递的队列堵塞正常的通信。批量邮件的分…
实战应用:用在哪里 审计日志的价值在于不可抵赖:被改过的日志比没有日志更危险——纠纷的追溯、内部的追责都建立在「日志没被动过…