在传奇GOM引擎中实现使用元宝锻造金刚石功能,需通过QFunction脚本调用物品生成、元宝扣除及界面交互逻辑。该功能通常以NPC对话形式触发,支持指定数量兑换,具备输入校验与反馈提示。
一、准备基础素材
确保以下内容已配置:
金刚石物品存在于StdItems.db中,记录其ItemIndex(如5001)。
游戏内元宝为绑定或非绑定货币,系统变量为GAMEGOLD(部分版本为CREDITPOINT)。
NPC文件(如FusionNPC.txt)已添加至EnvirMarket_def目录,并在Npc_def.ini注册。
二、编写NPC对话入口
在FusionNPC.txt中定义主菜单:
[@main]
SAY
欢迎使用元宝锻造服务!\
(100元宝/个)\
三、实现锻造逻辑脚本
在QFunction.txt中添加处理分支:
[@ForgeDiamond]
IF
EQUAL PARAM1 ""
ACT
SENDMSG 7 请输入要锻造的金刚石数量(最少1个):
WAITING_INPUT [ForgeCount] 30 @InputDiamondCount
BREAK
[@InputDiamondCount]
IF
ISDIGIT
SMALL 1
ACT
SENDMSG 7 输入无效,请输入大于0的数字。
CLOSE
BREAK
IF
LARGE 100
ACT
SENDMSG 7 单次最多锻造100个。
CLOSE
BREAK
ELSEACT
MOV S0
CALC S1 S0 * 100
IF
SMALL GAMEGOLD S1
ACT
SENDMSG 7 元宝不足,无法完成锻造。
CLOSE
BREAK
ELSEACT
CALC S2 GAMEGOLD - S1
GAMEGOLD S2
GIVE 5001 S0
SENDMSG 7 成功锻造个金刚石,消耗元宝。
CLOSE
四、关键命令说明
WAITING_INPUT:弹出输入框,等待玩家输入,超时30秒自动关闭。
ISDIGIT:校验输入是否为纯数字,防止脚本注入。
GAMEGOLD:直接修改玩家元宝数值,无需调用数据库。
GIVE 5001 S0:发放物品,5001为金刚石ItemIndex,S0为数量。
五、增强体验细节
动态价格显示
在主菜单实时显示当前元宝余额:
#SAY
当前元宝:\
(100元宝/个)
背包容量检查
避免因背包满导致物品丢失:
#IF
CHECKBAGSIZE 5001
#ACT
SENDMSG 7 背包空间不足,请清理后再试。
CLOSE
BREAK
日志记录
在M2Server日志中记录操作:
LOGGING DiamondForge: forged pieces.
六、完整脚本整合
将以下内容加入QFunction.txt:
[@ForgeDiamond]
IF
EQUAL PARAM1 ""
ACT
SENDMSG 7 请输入要锻造的金刚石数量(1-100):
WAITING_INPUT [ForgeCount] 30 @InputDiamondCount
BREAK
[@InputDiamondCount]
IF
ISDIGIT == FALSE
ACT
SENDMSG 7 请输入有效数字。
CLOSE
BREAK
IF
SMALL 1
LARGE 100
ACT
SENDMSG 7 数量需在1-100之间。
CLOSE
BREAK
ELSEACT
MOV S0
CALC S1 S0 * 100
IF
SMALL GAMEGOLD S1
ACT
SENDMSG 7 元宝不足,当前余额:。
CLOSE
BREAK
IF
CHECKBAGSIZE 5001 S0 == FALSE
ACT
SENDMSG 7 背包空间不足,无法领取个金刚石。
CLOSE
BREAK
ELSEACT
CALC S2 GAMEGOLD - S1
GAMEGOLD S2
GIVE 5001 S0
SENDMSG 7 锻造成功!获得个金刚石,剩余元宝:。
LOGGING ForgeDiamond: count: cost:
CLOSE
七、测试与调试
使用GM命令@givegold 1000充值元宝。
与NPC对话,输入不同数值(0、1、100、101)验证边界条件。
检查MirServerLog目录下日志是否记录操作。
确认物品ID与StdItems.db一致,避免发放错误道具。
此脚本严格遵循GOM引擎语法,无外部依赖,可直接部署。核心在于输入校验、资源扣减与物品发放的原子性操作,确保流程完整且反馈明确。

