Closed CairoLee closed 1 year ago
感谢 "差记性的小北" 反馈此问题
prontera,153,155,4 script testttttt 123,{ mes "很高兴为你服务!"; .@s = prompt("投注","兑奖","说明"); if(.@s == 3){ mes "3"; }else if(.@s == 1){ mes "1"; }else if(.@s == 2){ mes "2"; }else{ mes "其他"; } close; }
与测试 npc 对话,出来的菜单中直接点【取消】
各项功能一切正常
地图服务器跳出来一个调试信息:
[调试]: npc_scriptcont: testttttt (sd->npc_id=110026153) is not 'Unknown NPC' (id=0).
同样的脚本使用 select 菜单则不存在问题,因为当 select 被取消后脚本将中断。 但 prompt 菜单被取消后脚本依然会继续执行,执行到 close 脚本指令的时候,会暗示客户端: 关闭聊天窗口需要给我发一个 clif_parse_NpcCloseClicked 封包 但此时发现送来的封包中 npc_id 是 0(客户端内部可能把 npc_id 清理掉了)
关闭聊天窗口需要给我发一个 clif_parse_NpcCloseClicked 封包
为了避免对后续流程造成不可预期的其他影响,在菜单被取消的时候我们记录一下 npc_id;随后在出现 prompt 取消的这种情况时,将优先使用备份的 npc_id 来进行后续流程
感谢 "差记性的小北" 反馈此问题
测试脚本
重现方法
与测试 npc 对话,出来的菜单中直接点【取消】
预期表现
各项功能一切正常
实际情况
地图服务器跳出来一个调试信息:
分析一下
同样的脚本使用 select 菜单则不存在问题,因为当 select 被取消后脚本将中断。 但 prompt 菜单被取消后脚本依然会继续执行,执行到 close 脚本指令的时候,会暗示客户端:
关闭聊天窗口需要给我发一个 clif_parse_NpcCloseClicked 封包
但此时发现送来的封包中 npc_id 是 0(客户端内部可能把 npc_id 清理掉了)补丁方案
为了避免对后续流程造成不可预期的其他影响,在菜单被取消的时候我们记录一下 npc_id;随后在出现 prompt 取消的这种情况时,将优先使用备份的 npc_id 来进行后续流程