传奇脚本中,包裹售价脚本与GM可控制价格、时间的NPC竞价拍卖脚本,是提升游戏互动性和道具流通性的核心脚本,编写需贴合传奇引擎常规语法,兼顾实用性和可操作性,以下是详细编写步骤、核心代码及调试技巧,适配主流传奇引擎,新手可直接参考套用。
先明确核心前提:传奇脚本编写需依托对应引擎的脚本命令,常见引擎(如Hero、GEE、GOM)核心命令通用,部分细节需根据引擎微调,脚本文件均需保存为TXT格式,编码设为ANSI,放入对应脚本目录(通常为mir200/envir/questdiary或market_def文件夹),编写完成后通过@reloadnpc命令刷新生效,无需额外工具,用记事本、Notepad++等文本编辑器即可编写。
一、传奇脚本包裹售价脚本编写(基础可直接套用)
包裹售价脚本核心功能是实现玩家包裹内指定物品的定价出售,可设置固定售价、按物品品质/数量定价,支持单个物品或批量物品定价,适配所有可交易道具,编写逻辑分为“定义触发条件”“设置售价规则”“执行出售反馈”三步,无复杂语法,全程直白易懂。
1. 脚本核心框架(通用版):包裹售价脚本需绑定NPC(通常为商人NPC),玩家与NPC对话后触发出售功能,可设置玩家自主选择出售物品,或自动出售包裹内指定物品,以下是两种常用模式的完整代码,可根据需求选择。
模式一:玩家自主选择包裹物品出售(适配所有引擎)
(@main)
#say
欢迎使用包裹物品出售功能,选择你要出售的物品类型:\
<普通装备(每件100金币)/@sell1>\
<高级装备(每件1000金币)/@sell2>\
<药品(每组50金币)/@sell3>\
<材料(每个10金币)/@sell4>\
<关闭/@exit>
(@sell1)
#IF
CHECKBAGITEM 布衣(男) 1
#ACT
TAKE 布衣(男) 1
GIVEGOLD 100
SENDMSG 6 成功出售布衣(男),获得100金币!
GOTO @main
#ELSEACT
#IF
CHECKBAGITEM 布衣(女) 1
#ACT
TAKE 布衣(女) 1
GIVEGOLD 100
SENDMSG 6 成功出售布衣(女),获得100金币!
GOTO @main
#ELSEACT
#IF
CHECKBAGITEM 木剑 1
#ACT
TAKE 木剑 1
GIVEGOLD 100
SENDMSG 6 成功出售木剑,获得100金币!
GOTO @main
#ELSEACT
SENDMSG 6 你的包裹内没有可出售的普通装备!
GOTO @main
(@sell2)
#IF
CHECKBAGITEM 沃玛戒指 1
#ACT
TAKE 沃玛戒指 1
GIVEGOLD 1000
SENDMSG 6 成功出售沃玛戒指,获得1000金币!
GOTO @main
#ELSEACT
#IF
CHECKBAGITEM 祖玛项链 1
#ACT
TAKE 祖玛项链 1
GIVEGOLD 1000
SENDMSG 6 成功出售祖玛项链,获得1000金币!
GOTO @main
#ELSEACT
SENDMSG 6 你的包裹内没有可出售的高级装备!
GOTO @main
(@sell3)
#IF
CHECKBAGITEM 强效太阳水 10
#ACT
TAKE 强效太阳水 10
GIVEGOLD 50
SENDMSG 6 成功出售1组强效太阳水,获得50金币!
GOTO @main
#ELSEACT
#IF
CHECKBAGITEM 疗伤药 10
#ACT
TAKE 疗伤药 10
GIVEGOLD 50
SENDMSG 6 成功出售1组疗伤药,获得50金币!
GOTO @main
#ELSEACT
SENDMSG 6 你的包裹内没有可出售的药品!
GOTO @main
(@sell4)
#IF
CHECKBAGITEM 铁矿石 1
#ACT
TAKE 铁矿石 1
GIVEGOLD 10
SENDMSG 6 成功出售铁矿石,获得10金币!
GOTO @main
#ELSEACT
#IF
CHECKBAGITEM 黑铁矿石 1
#ACT
TAKE 黑铁矿石 1
GIVEGOLD 10
SENDMSG 6 成功出售黑铁矿石,获得10金币!
GOTO @main
#ELSEACT
SENDMSG 6 你的包裹内没有可出售的材料!
GOTO @main
模式二:自动出售包裹内指定物品(适配GOM、Hero引擎),无需玩家手动选择,对话后自动检测包裹内对应物品并出售,适合批量清理道具,代码如下:
(@main)
#say
点击下方按钮,自动出售包裹内所有指定物品,立即到账!\
<自动出售全部可售物品/@auto_sell>\
<关闭/@exit>
(@auto_sell)
#ACT
;清空物品列表,避免重复出售
ClearItemList
;添加需要自动出售的物品,格式为“物品名称|数量”
AddItemList 布衣(男)|1
AddItemList 布衣(女)|1
AddItemList 木剑|1
AddItemList 铁矿石|1
;执行自动出售,设置售价(顺序与AddItemList一致,对应物品单价)
AutoSellItemList 100|100|100|10
;发送出售反馈,告知玩家出售结果
SENDMSG 6 自动出售完成!已将包裹内可售物品全部出售,金币已到账!
;统计出售数量,可选添加
GetItemListCount N1
SENDMSG 6 本次共出售<$STR(N1)>件物品
GOTO @main
2. 关键参数调整:包裹售价脚本可根据需求灵活调整,核心调整点有3个,无需修改整体框架,直接修改对应数值即可。
(1)售价调整:将代码中GIVEGOLD后的数值(如100、1000)改为目标售价,单位为游戏内货币(金币、元宝均可,元宝需将GIVEGOLD改为GAMEGOLD),例如将普通装备售价改为150金币,只需将GIVEGOLD 100改为GIVEGOLD 150。
(2)物品添加/删除:在对应出售段落(@sell1、@sell2等)添加或删除#IF CHECKBAGITEM和#ACT TAKE、GIVEGOLD组合,添加新物品时,格式为“#IF CHECKBAGITEM 物品名称 数量”“#ACT TAKE 物品名称 数量 GIVEGOLD 售价”,确保物品名称与游戏内物品名称完全一致(区分大小写、男女款)。
(3)触发方式调整:可将NPC对话触发改为命令触发,在脚本开头添加“(@cmdauto_sell)#ACT”,后续跟上自动出售代码,玩家输入@cmdauto_sell即可触发自动出售,无需与NPC对话。
3. 调试要点:编写完成后,先在测试服调试,重点检查3点:一是物品名称是否正确,避免因名称错误导致无法出售;二是售价与物品匹配是否正确,防止出现定价错误;三是反馈信息是否正常显示,确保玩家能及时了解出售结果,若出现无法触发,检查脚本文件是否放入正确目录,编码是否为ANSI,刷新NPC后重新测试。
二、GM控制价格、时间的NPC竞价拍卖脚本编写(核心重点)
此类脚本核心是实现“GM设置拍卖物品、起始价格、拍卖时长,玩家竞价,GM可实时调整价格和时间,拍卖结束后自动发放物品给最高价玩家”,全程由GM掌控核心参数,适配所有主流传奇引擎,编写逻辑分为“GM设置模块”“玩家竞价模块”“拍卖结束模块”“异常处理模块”,代码可直接套用,只需调整对应参数。
1. 脚本核心前提:需先创建拍卖NPC,在merchant.txt文件中添加NPC信息(格式:NPC名称 地图代码 坐标X 坐标Y 范围 人物代码 刷新时间),例如“竞价拍卖员 0 330 330 0 5 0”,其中0为比奇省地图代码,330 330为NPC坐标,5为人物代码,刷新时间设为0表示永久存在,添加后保存,刷新NPC即可显示。
2. 完整脚本代码(GM可控版):脚本包含GM专属设置入口、玩家竞价入口、实时显示竞价信息、GM调整价格/时间、拍卖结束结算等功能,代码如下,关键参数已标注,可直接修改:
;定义拍卖核心变量,存储拍卖物品、价格、时间、当前竞价人
;A499=拍卖物品名称,A498=拍卖物品属性,G499=当前竞价价格,G498=剩余时间(分钟),A497=当前竞价人
(@main)
#IF
;判断是否为GM,GM显示设置入口,普通玩家显示竞价入口
ISA DMIN
#say
【GM拍卖控制中心】\
当前拍卖物品:$STR(A499)\
当前起始价格:$STR(G499)元宝\
当前剩余时间:$STR(G498)分钟\
当前竞价人:$STR(A497)\
\
<设置拍卖物品/@set_item>\
<设置起始价格/@set_price>\
<设置拍卖时长/@set_time>\
<开启拍卖倒计时/@start_auction>\
<终止当前拍卖/@end_auction>\
<关闭/@exit>
#ELSEACT
#IF
;判断拍卖是否开启(剩余时间>0)
large G498 0
#say
【竞价拍卖中心】\
当前拍卖物品:$STR(A499)\
当前竞价价格:$STR(G499)元宝\
剩余竞价时间:$STR(G498)分钟\
当前最高竞价人:$STR(A497)\
规则:竞价需高于当前价格,失败返还元宝,成功获得物品!\
\
<输入竞价价格/@input_bid>\
<查看竞价规则/@rule>\
<关闭/@exit>
#ELSEACT
#say
【竞价拍卖中心】\
当前无正在进行的拍卖,请等待GM开启!\
<关闭/@exit>
;GM设置拍卖物品模块
(@set_item)
#ACT
;让GM输入拍卖物品名称,S81为输入变量
@@InPutString81
#say
请输入拍卖物品名称(与游戏内完全一致):\
当前已设置:$STR(A499)\
<确认设置/@confirm_item>\
<返回上一级/@main>
(@confirm_item)
#ACT
;将输入的物品名称赋值给A499变量,保存设置
mov A499 $STR(S81)
SENDMSG 0 【系统公告】GM已设置拍卖物品:$STR(A499)
messagebox 拍卖物品设置成功!当前物品:$STR(A499)
goto @main
;GM设置起始价格模块
(@set_price)
#ACT
;让GM输入起始价格(元宝),S84为输入变量
@@InPutString84
#say
请输入拍卖起始价格(单位:元宝):\
当前已设置:$STR(G499)元宝\
<确认设置/@confirm_price>\
<返回上一级/@main>
(@confirm_price)
#ACT
;将输入的价格赋值给G499变量,确保为数字
mov G499 $STR(S84)
SENDMSG 0 【系统公告】GM已设置拍卖起始价格:$STR(G499)元宝
messagebox 起始价格设置成功!当前价格:$STR(G499)元宝
goto @main
;GM设置拍卖时长模块
(@set_time)
#ACT
;让GM输入拍卖时长(分钟),S83为输入变量
@@InPutString83
#say
请输入拍卖时长(单位:分钟):\
当前已设置:$STR(G498)分钟\
<确认设置/@confirm_time>\
<返回上一级/@main>
(@confirm_time)
#ACT
;将输入的时长赋值给G498变量,确保为数字
mov G498 $STR(S83)
SENDMSG 0 【系统公告】GM已设置拍卖时长:$STR(G498)分钟
messagebox 拍卖时长设置成功!当前时长:$STR(G498)分钟
goto @main
;GM开启拍卖倒计时模块
(@start_auction)
#IF
;判断是否已设置物品、价格、时长,缺一不可
not equal A499 ""
not equal G499 0
not equal G498 0
#ACT
;重置竞价人,开启倒计时(G497为倒计时计数变量)
mov A497 无
mov G497 0
SENDMSG 0 【系统公告】竞价拍卖正式开启!拍卖物品:$STR(A499),起始价格:$STR(G499)元宝,时长:$STR(G498)分钟,欢迎竞价!
messagebox 拍卖已开启,倒计时开始!
goto @main
#ELSEACT
messagebox 请先设置拍卖物品、起始价格和拍卖时长,再开启拍卖!
goto @main
;GM终止当前拍卖模块
(@end_auction)
#IF
;判断是否有正在进行的拍卖
large G498 0
#ACT
;终止拍卖,重置所有变量
mov G498 0
SENDMSG 0 【系统公告】GM已终止当前拍卖,本次拍卖无效,所有竞价元宝将返还给竞价玩家!
;返还竞价玩家元宝(读取失败名单,批量返还)
GetRandomText .\QuestDiary\竞价中心\竞价名单\$USERNAME.txt S97
GAMEGOLD + $STR(S97)
DelNameList ..\QuestDiary\竞价中心\失败名单.txt
messagebox 拍卖已终止,竞价元宝已批量返还!
goto @main
#ELSEACT
messagebox 当前无正在进行的拍卖,无需终止!
goto @main
;玩家竞价输入模块
(@input_bid)
#ACT
;让玩家输入竞价价格,N97为输入变量
@@InPutInteger97
#say
当前最低竞价价格:$STR(G499)+1元宝\
请输入你的竞价价格(需高于当前价格):\
<确认竞价/@confirm_bid>\
<返回上一级/@main>
;玩家竞价确认模块
(@confirm_bid)
#IF
;判断拍卖是否已结束(剩余时间=0)
equal G498 0
#ACT
messagebox 竞价已经结束!无法进行竞价操作!
break
#ELSEACT
#IF
;判断玩家元宝是否充足
CHECKGAMEGOLD $STR(N97)
#ACT
;判断竞价价格是否高于当前价格
large N97 $STR(G499)
#ACT
;扣除玩家竞价元宝,更新当前竞价信息
GAMEGOLD - $STR(N97)
;记录竞价信息,用于失败返还
CreateFile QuestDiary\竞价中心\竞价名单\$STR(A497).txt
AddTextList .\QuestDiary\竞价中心\竞价名单\$STR(A497).txt $STR(G499)
AddTextList .\QuestDiary\竞价中心\失败名单.txt $STR(A497)
;更新当前竞价人、竞价价格
mov A497 $USERNAME
mov G499 $STR(N97)
;全服公告竞价信息
SENDMSG 0 【竞价公告】玩家($USERNAME)出价$STR(N97)元宝,竞价物品($STR(A499)),当前为最高竞价!
messagebox 竞价成功!当前你为最高竞价人,竞价价格:$STR(N97)元宝
goto @main
#ELSEACT
messagebox 你的出价太低了!当前最低竞价为$STR(G499)+1元宝,请重新输入!
goto @input_bid
#ELSEACT
messagebox 你的元宝不足$STR(N97),无法进行竞价,请补充元宝后再尝试!
goto @input_bid
;竞价规则显示模块
(@rule)
#say
【竞价拍卖规则】\
1. 竞价需高于当前最高竞价价格,否则竞价失败;\
2. 竞价成功后,若有其他玩家出价更高,你的竞价元宝将全额返还;\
3. 拍卖结束后,最高竞价人获得拍卖物品,竞价元宝不予返还;\
4. 拍卖期间,GM可调整拍卖价格和时长,以系统公告为准;\
5. 竞价失败后,需手动到NPC处取回返还的元宝。\
<返回上一级/@main>
;拍卖倒计时自动扣除模块(核心,无需手动触发)
(@timer)
#IF
;判断拍卖是否正在进行
large G498 0
#ACT
;每分钟扣除1分钟时长,G497为计数变量
mov G497 $STR(G497)+1
if equal G497 60
mov G498 $STR(G498)-1
mov G497 0
;剩余1分钟时,全服提醒
if equal G498 1
SENDMSG 0 【竞价提醒】当前拍卖剩余1分钟,请抓紧竞价!
;时长为0时,结束拍卖,发放物品
if equal G498 0
SENDMSG 0 【系统公告】竞价拍卖结束!物品($STR(A499))最终由玩家($STR(A497))以$STR(G499)元宝竞得!
;给最高竞价人发放拍卖物品
GIVE $STR(A499) 1
SENDMSG 6 恭喜你!成功竞得$STR(A499),物品已发放至你的包裹!
;重置所有拍卖变量,准备下一次拍卖
mov A499 ""
mov A497 无
mov G499 0
mov G497 0
#ELSEACT
break
3. GM核心控制操作说明:脚本编写完成后,GM只需与拍卖NPC对话,即可完成所有控制操作,无需修改脚本代码,具体操作如下:
(1)设置拍卖物品:点击“设置拍卖物品”,输入游戏内物品名称(如“屠龙刀”“麻痹戒指”),确认后系统会全服公告,确保物品名称与游戏内完全一致,否则无法发放物品。
(2)设置起始价格:点击“设置起始价格”,输入元宝数量(支持任意整数),确认后全服公告,起始价格可根据物品稀有度调整,后续玩家竞价需高于该价格。
(3)设置拍卖时长:点击“设置拍卖时长”,输入分钟数(如5、10、30),确认后全服公告,时长结束后自动终止拍卖,GM可在拍卖过程中重新设置时长,实时生效。
(4)开启/终止拍卖:点击“开启拍卖倒计时”,即可启动拍卖,玩家可开始竞价;点击“终止当前拍卖”,可随时结束拍卖,所有竞价玩家的元宝会自动返还,拍卖物品不发放。
(5)实时调整价格/时间:拍卖过程中,GM可再次点击“设置起始价格”“设置拍卖时长”,修改后的价格和时长会实时生效,系统会再次发送全服公告,告知所有玩家。
4. 脚本关键调整与适配:根据不同引擎,需微调2个核心点,确保脚本正常运行,无需修改整体逻辑。
(1)变量调整:部分引擎(如GEE)变量格式不同,可将脚本中A499、A498、G499等变量,改为引擎支持的变量(如S1、S2、G1),确保变量唯一,不与其他脚本冲突。
(2)命令调整:Hero引擎中,“GAMEGOLD”命令需改为“GIVEYuanBao”,“SENDMSG 0”改为“SENDMSG 255”,其他命令不变;GOM引擎无需调整,直接套用代码即可。
(3)路径调整:脚本中“QuestDiary\竞价中心”路径,需确保在mir200/envir文件夹下存在该目录,若不存在,手动创建“QuestDiary”文件夹,再在其下创建“竞价中心”文件夹,否则无法记录竞价名单和返还元宝。
5. 调试要点:此类脚本逻辑较复杂,调试需重点检查5点,避免出现异常:
(1)GM权限验证:确保ISA DMIN命令生效,普通玩家无法看到GM设置入口,仅GM可操作设置模块。
(2)变量赋值:检查变量赋值是否正确,确保拍卖物品、价格、时间能正常保存和显示,避免出现变量为空或数值错误。
(3)元宝扣除与返还:测试玩家竞价时,元宝是否正常扣除;竞价失败或拍卖终止时,元宝是否能正常返还,避免出现元宝丢失。
(4)倒计时功能:开启拍卖后,检查倒计时是否正常扣除,剩余1分钟是否有提醒,时长为0时是否能自动结束拍卖、发放物品。
(5)全服公告:所有操作(设置物品、价格、开启/终止拍卖、玩家竞价)是否能正常发送全服公告,确保所有玩家能及时了解拍卖状态。
三、两种脚本通用注意事项(必看)
1. 物品名称一致性:所有脚本中涉及的物品名称,必须与游戏内物品数据库中的名称完全一致,区分大小写、男女款、物品后缀(如“布衣(男)”不能写为“布衣男”),否则会导致脚本无法识别物品,出现无法出售、无法发放拍卖物品的问题。
2. 脚本保存规范:所有脚本文件需保存为TXT格式,编码设置为ANSI,若编码为UTF-8,会导致脚本乱码、无法生效;脚本文件名称需与NPC名称对应,格式为“NPC名称-地图代码”(如“竞价拍卖员-0”),放入对应脚本目录。
3. 引擎适配:不同传奇引擎的命令存在细微差异,编写前需确认自身使用的引擎,根据引擎调整对应命令(如元宝相关命令),避免出现命令无效的情况。
4. 批量操作适配:包裹售价脚本如需支持批量出售,可在TAKE命令后增加数量(如TAKE 铁矿石 10),对应GIVEGOLD改为批量售价(如GIVEGOLD 100);拍卖脚本如需支持多件物品拍卖,可增加变量(如A500、G500),复制对应模块修改即可。
5. 无异常报错:编写脚本时,避免出现语法错误,如遗漏#IF、#ACT、goto等命令,避免括号、符号缺失,脚本编写完成后,可先在文本编辑器中检查格式,再上传至服务器测试,若出现报错,根据报错提示修改对应代码。
以上两种脚本均为完整可套用版本,包裹售价脚本适合所有商人NPC,可根据游戏内道具定价灵活调整;GM控制的NPC竞价拍卖脚本,满足GM对拍卖流程的全程掌控,适配各类传奇游戏场景,新手可直接复制代码,修改物品名称、价格、时长等参数,即可快速生效,无需复杂的脚本编写基础。

