一、脚本基础框架与核心语法规则
传奇脚本核心由条件判断、执行动作、对话提示三类指令构成,基础格式以#if(条件判断)、#act(满足条件执行)、#say(对话显示)为核心,配套#elsesay(不满足条件提示)、#elseif(多条件判断)拓展逻辑,适配Hero、GOM、GEE主流引擎,语法通用无差异。
核心规则:1. 指令区分大小写(部分引擎不严格,但建议统一大写核心命令);2. 条件判断需放在#if/#elseif后,多个条件同时满足需依次罗列;3. #act后紧跟执行动作,无条件时不可单独使用;4. 注释用“()”包裹,不影响脚本执行,便于后期维护。
二、核心条件判断命令(#IF)及代码实例
条件判断命令用于检测玩家状态、道具数量、元宝金币、等级等,是脚本逻辑触发的核心,以下为高频命令及完整代码示例,可直接复制修改使用。
1. 元宝/金币检测(最常用)
命令格式:CheckGameGold 数值(检测元宝,部分引擎为CheckYB)、CheckGold 数值(检测金币),支持>、<、=等逻辑符号。
实操代码(元宝兑换道具):
(@main)
#say
消耗100元宝可兑换高级药水1瓶!\“
确认兑换/@exchange
取消/@exit
(@exchange)
#if
CheckGameGold >= 100 (检测元宝是否大于等于100)
#act
TakeGameGold 100 (扣除100元宝)
Give 强效太阳水 1 (发放道具)
Say 兑换成功!已为你发放强效太阳水。
#elsesay
你的元宝不足100,无法兑换!
补充代码(金币检测,购买道具):
(@buy)
#if
CheckGold > 5000 (检测金币是否大于5000)
#act
TakeGold 5000 (扣除5000金币)
Give 疗伤药 2 (发放2个疗伤药)
#elsesay
金币不足5000,无法购买疗伤药!
2. 等级/职业检测
命令格式:CheckLevel 数值(等级检测)、CheckJob 职业编号(1=战士,2=法师,3=道士)。
实操代码(等级达标领取奖励):
(@getReward)
#if
CheckLevel >= 50 (检测等级是否达标50级)
CheckJob 3 (检测是否为道士职业)
#act
AddExp 50000 (发放5万经验)
Give 道士头盔 1 (发放职业装备)
Say 恭喜道士玩家达到50级,领取专属奖励!
#elseif
CheckLevel >= 50
CheckJob 1
#act
AddExp 50000
Give 战士头盔 1
Say 恭喜战士玩家达到50级,领取专属奖励!
#elseif
CheckLevel >= 50
CheckJob 2
#act
AddExp 50000
Give 法师头盔 1
Say 恭喜法师玩家达到50级,领取专属奖励!
#elsesay
等级未达到50级,无法领取奖励!
3. 道具数量/持有状态检测
命令格式:CheckItem 道具名称 数量(检测持有道具及数量)、CheckItemEx 道具名称(检测是否持有该道具,不计数量)。
实操代码(道具兑换奖励):
(@itemExchange)
#say
提交5个赤月结晶可兑换赤月装备一件!\“
提交兑换/@submit
(@submit)
#if
CheckItem 赤月结晶 5 (检测是否持有5个赤月结晶)
#act
Take 赤月结晶 5 (扣除5个道具)
RandomGive 赤月头盔 1 赤月项链 1 (随机发放一件装备)
Say 兑换成功!获得随机赤月装备一件。
#elsesay
你未持有5个赤月结晶,无法兑换!
4. 变量状态检测(全局/个人变量)
命令格式:CheckVar Human 变量名 数值(个人变量)、CheckVar Global 变量名 数值(全局变量),适用于任务进度、状态标记等。
实操代码(任务状态检测):
(@taskSubmit)
#if
CheckVar Human task1 1 (检测个人变量task1是否为1,标记任务已完成)
#act
SetVar Human task1 0 (重置变量)
AddExp 100000
Give 金币 10000
Say 任务完成!已发放奖励。
#elsesay
你尚未完成任务,无法提交!
5. 地图/怪物状态检测
命令格式:CheckMap 地图代码(检测当前地图)、CheckMonster 地图代码 怪物名称 0 0(检测怪物是否存活)。
实操代码(地图内击杀怪物触发奖励):
(@killBoss)
#if
CheckMap 101 (检测是否在101号地图)
CheckMonster 101 祖玛教主 0 0 (检测祖玛教主是否死亡)
#act
Give 祖玛裁决 1 (发放专属掉落)
SendMsg 6 恭喜你击杀祖玛教主,获得稀有装备!
#elsesay
请先前往101号地图击杀祖玛教主!
三、执行动作命令(#ACT)及代码实例
#ACT后紧跟满足条件的执行动作,涵盖道具发放/扣除、经验增减、传送、变量修改等高频操作,以下为核心命令及组合代码。
1. 道具/元宝/金币操作
核心命令:Give(发放道具)、Take(扣除道具)、GiveGameGold(发放元宝)、TakeGameGold(扣除元宝)、AddGold(增加金币)、TakeGold(扣除金币)。
实操代码(多动作组合):
(@reward)
#if
CheckLevel >= 60
#act
AddExp 200000 (增加20万经验)
GiveGameGold 500 (发放500元宝)
AddGold 50000 (增加5万金币)
Give 雷霆战甲 1 (发放装备)
Say 等级达标60级,领取豪华奖励!
2. 传送与地图操作
核心命令:MapMove 地图代码 X坐标 Y坐标(传送至指定地图坐标)、BackMap(返回上一地图)。
实操代码(元宝传送地图):
(@enterMap)
#say
消耗50元宝可进入高级打宝地图!\“
确认进入/@go
(@go)
#if
CheckGameGold >= 50
#act
TakeGameGold 50
MapMove 105 300 300 (传送至105号地图,坐标300,300)
Say 已为你传送至高级打宝地图,祝你好运!
#elsesay
元宝不足50,无法进入!
3. 变量与状态修改
核心命令:SetVar(设置变量值)、IncVar(变量值递增)、DecVar(变量值递减)、ClearVar(清空变量)。
实操代码(任务进度累计):
(@killMonster)
#if
CheckItem 怪物掉落物 1
#act
Take 怪物掉落物 1
IncVar Human killCount 1 (击杀计数+1)
Say 已收集1个掉落物,当前进度:<$HUMAN(killCount)>/10
#if
CheckVar Human killCount = 10
#act
SetVar Human killCount 0
Give 奖励道具 1
Say 收集完成!获得奖励。
4. 技能与属性操作
核心命令:AddSkill 技能名称 等级(学习技能)、AddStrength 数值(增加力量属性)、AddMagic 数值(增加魔法属性)。
实操代码(属性提升):
(@addAttr)
#if
CheckGameGold >= 1000
#act
TakeGameGold 1000
AddStrength 5 (增加5点力量)
AddMagic 5 (增加5点魔法)
AddAgility 5 (增加5点敏捷)
Say 属性提升成功!力量、魔法、敏捷各+5。
#elsesay
元宝不足1000,无法提升属性!
三、完整脚本实例(多条件+多动作组合)
实例1:NPC任务脚本(条件判断+变量+奖励)
(@main)
#if
CheckVar Human task2 0
#say
请帮我收集10个狼皮,我将给予你奖励!\“
接受任务/@accept
取消/@exit
(@accept)
#act
SetVar Human task2 1
Say 狼皮可在102号地图击杀狼获得,快去行动吧!
(@submit)
#if
CheckVar Human task2 1
CheckItem 狼皮 10
#act
SetVar Human task2 0
Take 狼皮 10
AddExp 80000
Give 金币 8000
Say 任务完成!这是你的奖励。
#elsesay
你尚未收集10个狼皮,或未接受任务!
实例2:元宝购买属性脚本(多条件判断)
(@buyAttr)
#say
每次消耗200元宝,随机提升一项属性!\“
确认购买/@buy
(@buy)
#if
CheckGameGold >= 200
CheckLevel >= 40
#act
TakeGameGold 200
RandomAct AddStrength 3 AddMagic 3 AddAgility 3 (随机提升一项属性+3)
SendMsg 6 属性提升成功!
#elsesay
元宝不足200或等级未达40级,无法购买!
四、脚本编写注意事项
1. 命令一致性:不同引擎部分命令名称略有差异,如GEE引擎发放元宝用“GiveYB”,Hero引擎用“GiveGameGold”,需结合引擎手册调整。
2. 路径存放:所有NPC交互脚本放入Envir\Market_def文件夹,命名格式为“NPC名称-地图代码.txt”;核心逻辑脚本放入Envir\QuestDiary文件夹,Hero引擎需在QManage.txt中添加引用。
3. 重载生效:脚本修改后,输入GM命令“@reloadnpc all”(重载NPC脚本)、“@reloadquest all”(重载Quest脚本),无需重启服务端。
4. 避免冲突:变量命名需唯一,建议添加前缀(如task_、kill_),避免与其他脚本变量冲突;道具、怪物名称需与服务端配置文件一致。

