传奇包裹售价脚本与GM控制的NPC竞价拍卖脚本,均属于传奇游戏中高频使用的脚本类型,核心用于实现物品交易、竞价交互及GM权限管控,编写逻辑围绕传奇脚本固有指令展开,无需复杂编程基础,掌握核心指令和编写框架即可完成,以下分两部分详细拆解编写方法,每一步均贴合实际应用场景,可直接参考调试。
先明确核心前提:两种脚本均需放置在传奇服务端对应脚本目录,不同传奇引擎(GOM、GEE等)的指令略有差异,核心逻辑一致,编写前需确认自身服务端引擎类型,避免指令不兼容。包裹售价脚本核心是定义包裹内物品的固定售价,支持玩家直接出售包裹内指定物品;GM控制的NPC竞价拍卖脚本,核心是通过NPC触发拍卖、GM设定拍卖参数(物品、价格、时间)、玩家竞价、拍卖结束结算,全程可由GM灵活管控。
第一部分:传奇包裹售价脚本编写方法。包裹售价脚本主要实现玩家点击包裹内物品,按照设定价格出售给系统或指定NPC,核心依赖物品ID、售价指令及触发逻辑,编写步骤清晰,无需额外配置,具体如下。
第一步,确定脚本存放路径。传奇包裹相关脚本需放置在服务端MirServer\Mir200\Envir\MapQuest_def目录下的QFunction-0.txt文件中,该文件是传奇核心功能触发脚本目录,可直接在该文件内新增包裹售价相关脚本,无需创建新文件,若文件不存在可自行创建,确保命名无误以免无法触发。同时,包裹按钮的触发需依赖该文件内的@ItemBagButtonClickX指令(X范围1-5),用于触发包裹内物品的出售操作。
第二步,编写核心脚本框架。包裹售价脚本的核心是“物品ID匹配+售价设定+出售触发”,脚本开头需用(@main)定义触发入口,后续用#IF、#ACT指令匹配物品、执行出售操作,常用指令包括CheckItem(检测物品)、GameGold(增加/扣除元宝)、TakeItem(扣除物品)、SENDMSG(发送提示信息),以下是通用编写模板,可直接替换物品ID和售价。
通用模板示例(以出售“疗伤药”为例,物品ID为123,售价为10元宝/个):
(@ItemBagButtonClick1) ;触发包裹按钮1,可替换为1-5之间的数字,对应包裹内5个自定义按钮
#IF
CheckItem 123 1 ;检测包裹内是否有1个ID为123的疗伤药
#ACT
TakeItem 123 1 ;扣除包裹内1个疗伤药
GameGold + 10 ;给玩家增加10元宝(售价)
SENDMSG 5 出售成功!获得10元宝 ;向玩家发送出售成功提示,5代表提示颜色
#ELSEACT
SENDMSG 5 包裹内无足够疗伤药,无法出售 ;检测失败时发送提示
第三步,灵活调整脚本参数。可根据需求增加多物品售价设置,只需在同一触发指令下新增#IF、#ACT判断即可,例如同时出售疗伤药和强效太阳水,可在上述脚本后新增:
#IF
CheckItem 124 1 ;强效太阳水物品ID为124
#ACT
TakeItem 124 1
GameGold + 15 ;强效太阳水售价15元宝
SENDMSG 5 出售成功!获得15元宝
#ELSEACT
SENDMSG 5 包裹内无足够强效太阳水,无法出售
第四步,调试脚本。脚本编写完成后,保存文件并重启传奇服务端,进入游戏后,需先通过登陆器配置器开启包裹按钮可见性,在界面UI编辑中找到DItemBagButton1(对应脚本中的按钮1),设置可见并添加素材,之后点击包裹内对应物品,触发出售操作,查看是否正常扣除物品、增加元宝及发送提示,若提示不显示或操作无效,检查物品ID是否正确、脚本路径是否有误、指令是否符合当前引擎要求。
补充说明:包裹售价脚本可设置批量出售,只需将CheckItem和TakeItem后的数量改为对应批量数值(如5个),同时调整GameGold增加数量(如50元宝),指令为CheckItem 123 5、TakeItem 123 5、GameGold + 50,满足玩家批量出售需求;若需设置不同物品不同售价,可重复上述模板,替换物品ID和元宝数量即可,无需修改核心框架。
第二部分:GM控制拍卖物品价格、时间的NPC竞价拍卖脚本编写方法。该脚本核心是NPC触发拍卖流程,GM可通过指令设定拍卖物品、起拍价、加价幅度、拍卖时长,玩家通过NPC参与竞价,拍卖结束后自动结算给最高价玩家,全程由GM灵活管控,编写分为NPC配置、拍卖核心脚本、GM控制指令三部分,具体如下。
第一步,配置拍卖NPC。首先需在传奇服务端MirServer\Mir200\Envir\Merchant.txt文件中添加NPC参数,确定NPC所在地图、坐标、名称及外观,例如添加“拍卖使者”NPC,参数格式为:0 333 333 拍卖使者 0 8 1 0 0 1 2000 0,其中0为地图编号、333 333为NPC坐标、拍卖使者为NPC名称、8为外观代码,具体参数可根据自身需求调整。NPC配置完成后,在MirServer\Mir200\Envir\Market_Def目录下创建对应NPC的脚本文件,用于存放拍卖相关脚本。
第二步,编写拍卖核心脚本框架。拍卖脚本核心分为三个模块:拍卖开启(GM触发)、玩家竞价、拍卖结束结算,核心指令包括SetVariable(设置变量,存储拍卖参数)、CheckVariable(检测变量)、SendBroad(全服广播)、GiveItem(发放物品)、GameGold(扣除竞价元宝),以下是完整通用模板,可直接修改参数使用。
首先编写NPC对话脚本(触发入口):
(@main)
#SAY
当前拍卖状态:<$STR(拍卖状态)> ;显示当前拍卖是否开启
起拍价:<$STR(起拍价)>元宝 ;显示当前起拍价
剩余时间:<$STR(拍卖剩余时间)>秒 ;显示剩余拍卖时间
当前最高价:<$STR(当前最高价)>元宝 ;显示当前最高价
当前出价玩家:<$STR(当前出价玩家)> ;显示当前出价玩家
【我要竞价】/@竞价
【查看拍卖物品】/@查看物品
第二步,编写GM开启拍卖指令脚本(GM专属触发,用于设定拍卖参数):
(@GM开启拍卖)
#IF
IsGM ;检测是否为GM账号,确保只有GM可触发
#ACT
SetVariable 拍卖状态 开启 ;设置拍卖状态为开启
SetVariable 起拍价 100 ;设置起拍价为100元宝(可修改)
SetVariable 当前最高价 100 ;初始最高价等于起拍价
SetVariable 拍卖剩余时间 300 ;设置拍卖时长300秒(5分钟,可修改)
SetVariable 当前出价玩家 无 ;初始无出价玩家
SetVariable 拍卖物品ID 1001 ;设置拍卖物品ID(如屠龙刀,可修改)
SetVariable 拍卖物品数量 1 ;设置拍卖物品数量
SendBroad 2 【全服拍卖】GM开启竞价拍卖,物品:<$ITEMNAME(1001)>,起拍价100元宝,时长5分钟! ;全服广播拍卖信息
SetScTimer 拍卖计时 1 ;开启拍卖计时器,每秒触发一次
#ELSEACT
SENDMSG 5 权限不足,仅GM可开启拍卖 ;非GM触发时提示
第三步,编写玩家竞价脚本:
(@竞价)
#IF
CheckVariable 拍卖状态 开启 ;检测拍卖是否开启
CheckVariable 拍卖剩余时间 > 0 ;检测拍卖是否未结束
CheckGameGold > <$STR(当前最高价)> ;检测玩家元宝是否超过当前最高价
#ACT
SetVariable 当前最高价 <$STR($GAMEGOLD)> ;将玩家当前元宝数设为新最高价
SetVariable 当前出价玩家 <$USERNAME> ;记录当前出价玩家名称
GameGold - <$STR(当前最高价)> ;扣除玩家对应元宝(竞价成功扣除)
SendBroad 2 【竞价通知】玩家<$USERNAME>出价<$STR(当前最高价)>元宝,成为当前最高价! ;全服广播竞价信息
SENDMSG 5 竞价成功!当前最高价:<$STR(当前最高价)>元宝 ;向出价玩家发送提示
#ELSEACT
SENDMSG 5 竞价失败!请检查拍卖状态、剩余时间或元宝数量 ;竞价失败提示
第四步,编写拍卖计时器脚本(控制拍卖时长,自动结束拍卖):
(@OnTimer拍卖计时)
#IF
CheckVariable 拍卖剩余时间 > 0 ;检测剩余时间是否大于0
#ACT
SetVariable 拍卖剩余时间 <$STR($V(拍卖剩余时间)-1)> ;每秒减少1秒
#IF
CheckVariable 拍卖剩余时间 = 60 ;剩余1分钟时提示
#ACT
SendBroad 2 【拍卖提醒】拍卖剩余1分钟,请有意向玩家抓紧竞价! ;全服提醒
#IF
CheckVariable 拍卖剩余时间 = 0 ;剩余时间为0,拍卖结束
#ACT
SetVariable 拍卖状态 关闭 ;设置拍卖状态为关闭
KillScTimer 拍卖计时 ;关闭计时器
#IF
CheckVariable 当前出价玩家 无 ;检测是否有玩家出价
#ACT
SendBroad 2 【拍卖结束】本次拍卖无人出价,拍卖物品收回! ;全服通知
#ELSEACT
GiveItem <$STR(拍卖物品ID)> <$STR(拍卖物品数量)> ;向最高价玩家发放拍卖物品
SendBroad 2 【拍卖结束】玩家<$USERNAME>以<$STR(当前最高价)>元宝竞得<$ITEMNAME(拍卖物品ID)>! ;全服通知
SENDMSG 5 恭喜你,成功竞得<$ITEMNAME(拍卖物品ID)>! ;向最高价玩家发送提示
第五步,编写查看拍卖物品脚本:
(@查看物品)
#IF
CheckVariable 拍卖状态 开启 ;检测拍卖是否开启
#ACT
ShowItem <$STR(拍卖物品ID)> ;显示拍卖物品详情
SENDMSG 5 本次拍卖物品:<$ITEMNAME(拍卖物品ID)>,数量:<$STR(拍卖物品数量)> ;发送物品信息
#ELSEACT
SENDMSG 5 当前无正在进行的拍卖 ;无拍卖时提示
第三步,GM控制参数调整方法。GM可通过触发对应指令,随时修改拍卖价格、时间、物品,无需修改脚本核心内容,便捷高效,常用控制指令如下:
1. 修改起拍价:GM在游戏内输入指令/@修改起拍价 数值(如/@修改起拍价 200),脚本需新增对应触发:
(@修改起拍价)
#IF
IsGM
#ACT
SetVariable 起拍价 <$STR($PARAM1)> ;$PARAM1为GM输入的数值
SetVariable 当前最高价 <$STR($PARAM1)> ;同步修改当前最高价
SendBroad 2 【拍卖调整】GM将起拍价调整为<$STR($PARAM1)>元宝! ;全服通知
2. 修改拍卖时长:GM输入指令/@修改拍卖时长 秒数(如/@修改拍卖时长 600),脚本新增触发:
(@修改拍卖时长)
#IF
IsGM
#ACT
SetVariable 拍卖剩余时间 <$STR($PARAM1)> ;修改剩余时间
SendBroad 2 【拍卖调整】GM将拍卖剩余时长调整为<$STR($PARAM1)>秒! ;全服通知
3. 更换拍卖物品:GM输入指令/@更换拍卖物品 物品ID 数量(如/@更换拍卖物品 1002 1),脚本新增触发:
(@更换拍卖物品)
#IF
IsGM
#ACT
SetVariable 拍卖物品ID <$STR($PARAM1)> ;修改物品ID
SetVariable 拍卖物品数量 <$STR($PARAM2)> ;修改物品数量
SendBroad 2 【拍卖调整】GM将拍卖物品更换为<$ITEMNAME($PARAM1)>,数量:<$STR($PARAM2)>! ;全服通知
4. 强制结束拍卖:GM输入指令/@强制结束拍卖,脚本新增触发:
(@强制结束拍卖)
#IF
IsGM
#ACT
SetVariable 拍卖剩余时间 0 ;将剩余时间设为0,触发结束逻辑
SendBroad 2 【拍卖结束】GM强制结束本次拍卖! ;全服通知
第四步,拍卖脚本调试。脚本编写完成后,将NPC脚本文件放入对应Market_Def目录,重启服务端,GM登录游戏后输入/@GM开启拍卖,查看全服广播是否正常、拍卖状态是否显示正确;玩家点击拍卖NPC,尝试竞价,检查元宝扣除、最高价更新、广播提示是否正常;等待拍卖时长结束,查看物品是否正常发放给最高价玩家,无人出价时是否正常收回物品;测试GM控制指令,确认修改起拍价、时长、物品等操作是否生效,若出现异常,检查变量名称是否一致、指令是否正确、物品ID是否存在。
常见问题解决:1. 包裹售价脚本无法触发,需检查QFunction-0.txt文件路径是否正确,包裹按钮是否设置可见,物品ID是否与游戏内一致;2. 拍卖NPC不显示,需检查Merchant.txt中NPC参数是否正确,Market_Def目录下是否有对应NPC脚本文件;3. 竞价后元宝扣除但未成为最高价,需检查变量名称是否统一,当前最高价变量是否正确更新;4. 拍卖结束后物品未发放,需检查GiveItem指令是否正确,物品ID和数量是否无误。
两种脚本的通用注意事项:编写时所有指令需区分大小写(传奇脚本指令均为大写),变量名称需统一(如“拍卖状态”不可随意修改为“拍卖开启状态”);不同引擎的部分指令可能存在差异,例如GOM引擎的ShowItem指令,在GEE引擎中可能为ShowItemEx,需根据自身引擎调整;脚本编写完成后,需保存为ANSI编码,避免出现乱码导致无法触发;GM控制指令需确保只有GM可触发,避免普通玩家误操作,核心是通过IsGM指令检测权限。
综上,传奇包裹售价脚本和GM控制的NPC竞价拍卖脚本,核心均围绕传奇固有指令展开,包裹售价脚本侧重物品出售的触发和结算,拍卖脚本侧重NPC交互、GM管控和玩家竞价流程,按照上述步骤编写、调试,即可实现对应功能,无需复杂编程技巧,可根据自身游戏需求,灵活调整物品ID、价格、时长等参数,适配不同的游戏玩法。

