在传奇服务端脚本中,判断玩家是否为沙巴克城主行会成员,需使用特定条件指令。标准引擎支持通过 CHECKCASTLESTATE 和 CHECKGUILD 指令组合实现精准识别。
一、基础判断指令
在 QFunction.txt 或自定义标签中使用以下结构:
IF
CHECKCASTLESTATE 1 1
ACT
; 当前玩家属于沙巴克占领行会
SENDMSG 7 您是沙巴克成员!
ELSEACT
SENDMSG 7 您不是沙巴克成员。
CHECKCASTLESTATE 1 1 中第一个“1”代表沙巴克城堡(CastleIndex=1),第二个“1”表示“已占领状态”。
该指令直接检测玩家所在行会是否为当前沙巴克城主行会,无需手动比对行会名称。
二、结合行会名称二次验证(可选)
若需同时确认行会名称(如防止异常状态误判),可补充:
IF
CHECKCASTLESTATE 1 1
STRCMP GUILDNAME
ACT
; 确保行会名一致
SENDMSG 7 身份验证通过。
其中 为系统变量,代表当前沙巴克城主行会名称。
三、用于NPC权限控制示例
在沙巴克专属NPC脚本中限制访问:
[@Main]
IF
CHECKCASTLESTATE 1 1
ACT
GOTO @CastleMemberMenu
ELSEACT
SENDMSG 7 此功能仅限沙巴克成员使用。
CLOSE
[@CastleMemberMenu]
四、注意事项
该判断仅对已加入行会的玩家有效,无行会者自动视为非成员。
城堡索引“1”为沙巴克默认值,若服务端修改过MapInfo或Castle定义,需对应调整索引号。
行会战期间若未正式占领(即未完成攻城倒计时),即使击败守方,CHECKCASTLESTATE 1 1 仍返回失败。
五、常见错误写法
避免使用 CHECKITEM 或 CHECKMAP 等间接方式判断,例如:
; 错误:仅凭持有令牌判断
IF
CHECKITEM 400001 1
因令牌可交易或掉落,无法真实反映成员身份。正确方式必须依赖 CHECKCASTLESTATE 指令。
以上脚本可直接嵌入任务、传送、奖励等场景,确保功能仅对合法沙巴克成员开放。

