传奇脚本变量问题解析:check [100] 0 与 set [100] 1 含义及脚本逻辑

来源: 作者: 点击:
在编写或修改传奇脚本时,很多玩家会对check [100] 0和set [100] 1这类变量指令感到困惑,不清楚它们的作用和脚本整体逻辑。以下结合你提供的脚本片段,详细拆解变量含义、各指令功能及完整执行流程。
一、先看懂脚本基础结构:[@main]、#if、#act 是什么?
你给出的脚本片段是传奇常用的 “触发型脚本”,核心结构分三部分:
[@main]:脚本触发入口,通常是玩家与 NPC 对话、点击特定道具或进入指定地图时触发,相当于脚本的 “启动开关”。
#if:条件判断模块,后面跟的是 “执行要求”,只有所有条件都满足,#act模块里的内容才会生效。
#act:动作执行模块,是满足#if条件后,游戏给玩家反馈的具体操作,比如给道具、加技能、发提示等。
二、核心变量指令解析:[100]、check [100] 0、set [100] 1
这三个是脚本里的 “变量控制指令”,[100]是自定义变量名,check和set是对变量的操作指令,具体含义如下:
1. [100]:脚本里的 “标记变量”
[100]不是系统固定变量,而是脚本编写者自定义的 “状态标记”,类似给玩家打 “标签”。变量名可以是 100、200、task1 等数字或字母组合,作用是记录玩家的特定状态 —— 比如是否领取过奖励、是否完成某步任务、是否触发过某个事件。
比如这个脚本里,[100]就用来标记 “玩家是否已经领取过本次技能和金币奖励”。
2. check [100] 0:判断变量状态是否符合条件
check是 “检查” 指令,check [100] 0的意思是:检查玩家当前的 [100] 变量值是否等于 0。
这是#if条件里的关键判断,用来确认 “玩家是否首次触发这个脚本”。因为变量初始值默认是 0,只有没领过奖励的玩家,[100] 值才是 0,满足这个条件才能继续判断其他要求。
如果玩家已经领过奖励,[100] 值会被改成 1(后面会讲),这时check [100] 0就会判断失败,#act里的内容就不会执行,避免玩家重复领取。
3. set [100] 1:修改变量状态,标记 “已完成”
set是 “设置” 指令,set [100] 1的意思是:把玩家的 [100] 变量值设置为 1。
这是#act里的核心操作,作用是 “更新玩家状态”。当玩家满足所有条件(战士职业、7 级、[100] 为 0)并领取奖励后,脚本会把 [100] 改成 1,相当于给玩家打上 “已领过奖励” 的标签。
后续玩家再触发这个脚本时,#if里的check [100] 0会因为变量值是 1 而不满足,无法再次执行#act,从而实现 “奖励只能领一次” 的效果。
三、完整脚本逻辑拆解:一步一步看执行流程
结合所有指令,这个脚本的完整作用是 “给 7 级以上战士玩家发放首次奖励”,具体执行步骤如下:
玩家触发脚本(比如和 NPC 对话),进入[@main]入口;
进入#if条件判断,同时检查三个要求:
checkjob warrior:判断玩家职业是否为战士(非战士直接跳过后续操作);
check [100] 0:判断玩家是否没领过奖励([100] 值为 0);
CHECKLEVELEX = 7:判断玩家等级是否等于 7 级(部分版本也支持 “≥7 级”,具体看脚本引擎);
三个条件都满足时,执行#act里的操作:
set [100] 1:标记玩家已领奖励,防止重复领取;
ADDSKILL 基本剑术 3:给玩家添加 3 级 “基本剑术” 技能;
give 金币 50000:给玩家发放 50000 金币;
SENDMSG 7 恭喜你获得金币50000!你已经修炼新技能了,要加油哦!:用黄色字体(传奇里 SENDMSG 7 对应黄色)在玩家聊天栏发提示;
break:结束当前脚本,避免继续执行其他多余指令。
四、脚本变量常见问题:新手容易踩的坑
变量名可以随便改吗?
可以,比如把 [100] 改成 [warrior_reward]、[skill_get] 等,只要check和set里的变量名一致就行,建议用有意义的名称,方便后续修改脚本时识别。
变量值只能是 0 和 1 吗?
不是,0 和 1 常用于 “是否型” 判断(是 / 否、领过 / 没领过),也可以用其他数字标记多状态,比如 [task_step] 1 代表 “任务第一步”、[task_step] 2 代表 “任务第二步”。
怎么查看玩家当前的变量值?
部分传奇脚本引擎支持 “调试指令”,比如在游戏里输入@getvar [100],就能看到当前 [100] 的数值,方便排查脚本是否生效。