这两块属于不同的系统,别混在一个NPC里写。天下第一人走称号/排行榜/角色属性修改,充值奖励走充值回调+金刚石发放+倍攻倍数写入。下面按GOM/GEE系常见写法给,字段名和命令按你引擎版本对一下再套。
一、天下第一人称号脚本
需求拆解
称号显示「天下第一人」
顶头上显示或称号栏显示
给角色加属性
一人持有,顶号重新判定
下线/死亡/被顶要能卸掉
数据库准备
ChrName表加字段:
Titlevarchar(20)
TitleAttr记录属性加成
或在Mir200\Data\TitleList.txt里配称号
M2功能设置里看有没有「自定义称号」功能。
有就直接用M2加称号ID+名称+属性,脚本只负责SETTITLE。
没有就得自己写称号系统。
最简称号写法(QFunction-0.txt)
[@Login]
IF
EQUALG601
ACT
SETTITLE天下第一人
SENDMSG6你当前拥有称号:天下第一人
[@Logout]
IF
EQUALG601
ACT
SETTITLE
清掉称号,避免下线后顶号残留
判定谁是第一人
按等级、转生、战力都行,示例按等级:
[@顶号判定]
IF
CHECKLEVELEX>999
CHECKGUILDMASTER
ACT
SETG601
SETTITLE天下第一人
CHANGENAMECOLOR249
GIVEBUFF天下第一人3600100
SENDMSG6恭喜%s成为天下第一人!
[@卸号判定]
IF
CHECKLEVELEX<999
EQUALG601
ACT
SETG600
SETTITLE
CHANGENAMECOLOR255
SENDMSG6天下第一人称号已被卸除
属性加成
如果引擎不支持SETTITLE带属性,就得手动加:
CHANGEATT0攻击1010
CHANGEATT0魔法1010
CHANGEATT0道术1010
CHANGEATT0体力100
CHANGEATT0魔防1010
CHANGEATT0防御1010
卸称号时记得减回去,不然属性会叠。
推荐用临时属性命令,重登自动清:
ADDTEMPATTR攻击1010
卸号ADDTEMPATTR攻击-10-10
顶号防重复
用一个全局变量记录当前第一人:
GLOBALG100
顶号成功写GLOBALG100=角色名
新顶号先判GLOBALG100是否为空
不为空就卸掉原角色称号再给新人
示例:
IF
EQUALGLOBALG100
ACT
SETGLOBALG100%s
SETTITLE天下第一人
ELSEACT
SENDMSG6当前天下第一人:<$GLOBAL(G100)>
不能重复顶号
多人服务器建议用INCGAMEGOLD那种全局锁,避免并发顶号。
二、充值奖励金刚石脚本
需求拆解
玩家充值后发金刚石
按充值金额区间发不同档
充值倍数加成(倍攻)
记录已领取档位防重复领
充值回调入口
一般有两个地方:
1.充值成功后的GM命令回调
2.QFunction里@Recharge或@PaySuccess标签
先看引擎文档你这套端用的是哪个标签。
常见三种:
[@Recharge]
[@PaySuccess]
[@OnPay]
[@Recharge]示例
IF
CHECKPAY10
ACT
GIVEYUANBAO100
GIVE金刚石10
SENDMSG6充值成功,获得金刚石×10
SETG611
IF
CHECKPAY50
ACT
GIVEYUANBAO500
GIVE金刚石50
GIVE倍攻令牌1
SENDMSG6充值50元档,获得金刚石×50、倍攻令牌×1
多档用嵌套#IF或者分开写多个标签。
按金额区间发金刚石
[@充值奖励]
IF
CHECKPAY>=10
CHECKPAY<50
ACT
GIVE金刚石10
SETG611
IF
CHECKPAY>=50
CHECKPAY<100
ACT
GIVE金刚石50
GIVE倍攻令牌1
SETG612
IF
CHECKPAY>=100
ACT
GIVE金刚石120
GIVE倍攻令牌3
SETG613
防重复领取
用变量记录:
IF
EQUALG610
ACT
GIVE金刚石10
SETG611
ELSEACT
SENDMSG6充值奖励已领取,请勿重复操作
每天重置用:
IF
NOTEQUALDAY1
ACT
SETG610
SETDAY1
金刚石发放命令对照
GIVE金刚石数量
GIVE金刚石(绑定)数量
GIVE金刚石碎片数量
具体道具名字看Item.DB里的StandardName,别写错成「金钢石」。
三、倍攻倍数怎么写
倍攻不是单一命令,有三种实现方式,选一个用,别叠加。
方案1:直接改攻击上下限
CHANGEATT0攻击5050
适合简单服,重登可能丢,要用临时属性或存变量。
方案2:倍攻倍数变量
[@设置倍攻]
IF
EQUALG620
ACT
SETG622
SENDMSG6倍攻已开启,当前×2
伤害计算在QFunction的@OnAttack或伤害回调里:
IF
EQUALG622
ACT
MULTIPLYATT2
或者
CHANGEDAMAGE伤害值×2
方案3:BUFF方式(推荐)
GIVEMAGICBUFF倍攻36002
参数:BUFF名持续秒倍数
重登不丢,到期自动消失,不用手动减属性。
M2里先在列表信息-状态魔法建一个倍攻BUFF:
名称:倍攻
类型:属性
攻击倍率:2
持续时间:3600
四、充值倍攻完整示例
[@充值成功]
IF
CHECKPAY>=10
ACT
GIVE金刚石10
SETG611
SENDMSG6获得金刚石×10
IF
CHECKPAY>=50
EQUALG611
ACT
GIVE金刚石40
GIVEMAGICBUFF倍攻864002
SETG612
SENDMSG6累计充值50元,倍攻×2开启24小时
IF
CHECKPAY>=100
EQUALG612
ACT
GIVE金刚石70
GIVEMAGICBUFF倍攻03
SETG613
SENDMSG6累计充值100元,永久倍攻×3
BUFF持续时间0=永久,具体看你引擎,有的要写999999。
五、NPC对话入口
在Envir\MerChant\下建NPC脚本:
[@充值奖励]
IF
EQUALG610
ACT
OPENPAY
强制打开充值界面
ELSEACT
SENDMSG6当前充值档位:<$STR(G61)>
六、文件结构与加载
脚本文件放:
Envir\QuestDiary\充值系统\充值奖励.txt
Envir\QuestDiary\天下第一人\顶号系统.txt
MerChant.txt里加NPC指向:
充值大使3330330充值系统\充值奖励.txt
QFunction-0.txt里#INCLUDE进来:
INCLUDE\QuestDiary\天下第一人\顶号系统.txt
INCLUDE\QuestDiary\充值系统\充值奖励.txt
改完重载脚本或重启M2。
七、变量规划表
G60天下第一人持有标记
G61充值档位
G62倍攻倍数
G63称号属性是否已加
GLOBALG100当前天下第一人名字
GLOBALG101顶号时间戳
人物变量在QManage[@Login]里初始化:
IF
EQUALG600
ACT
SETG600
SETG610
SETG621
八、常见坑
称号顶号后原角色下线没卸→Logout标签漏写
属性加了不减→用临时属性或减回去
SETTITLE中文乱码→脚本存ANSI
充值回调标签名不对→查引擎文档
CHECKPAY单位不一致→有的是分有的是元
金刚石名字写错→去Item.DB对StandardName
倍攻叠加→先判G62再给,别重复GIVEMAGICBUFF
BUFF永久写0不生效→改成999999
IF#ACT结构断掉→中间插了空行
NPC不显示→MerChant.txt坐标超出地图
QFunction没#INCLUDE→脚本没加载
变量重复定义→VAR只写一次
九、调试方法
开M2控制台看ScriptError
用GM号手动触发标签:
CALL[充值系统\充值奖励.txt]@充值成功
看是否发金刚石
再看角色属性面板倍攻是否生效
顶号用两个号测,看旧称号是否卸掉
一句话总结
天下第一人走「变量标记+SETTITLE+临时属性/BUFF」,顶号卸旧号、下线清状态。
充值奖励走「充值回调标签+CHECKPAY区间+GIVE金刚石+防重领变量」。
倍攻优先用BUFF方式,别直接CHANGEATT堆攻击,容易叠属性和重登丢失。
字段名、命令名、标签名必须按你这套引擎的命令表对一遍再上线,GOM、GEE、HERO三家的充值回调和BUFF命令写法不完全一样。
一、天下第一人称号脚本
需求拆解
称号显示「天下第一人」
顶头上显示或称号栏显示
给角色加属性
一人持有,顶号重新判定
下线/死亡/被顶要能卸掉
数据库准备
ChrName表加字段:
Titlevarchar(20)
TitleAttr记录属性加成
或在Mir200\Data\TitleList.txt里配称号
M2功能设置里看有没有「自定义称号」功能。
有就直接用M2加称号ID+名称+属性,脚本只负责SETTITLE。
没有就得自己写称号系统。
最简称号写法(QFunction-0.txt)
[@Login]
IF
EQUALG601
ACT
SETTITLE天下第一人
SENDMSG6你当前拥有称号:天下第一人
[@Logout]
IF
EQUALG601
ACT
SETTITLE
清掉称号,避免下线后顶号残留
判定谁是第一人
按等级、转生、战力都行,示例按等级:
[@顶号判定]
IF
CHECKLEVELEX>999
CHECKGUILDMASTER
ACT
SETG601
SETTITLE天下第一人
CHANGENAMECOLOR249
GIVEBUFF天下第一人3600100
SENDMSG6恭喜%s成为天下第一人!
[@卸号判定]
IF
CHECKLEVELEX<999
EQUALG601
ACT
SETG600
SETTITLE
CHANGENAMECOLOR255
SENDMSG6天下第一人称号已被卸除
属性加成
如果引擎不支持SETTITLE带属性,就得手动加:
CHANGEATT0攻击1010
CHANGEATT0魔法1010
CHANGEATT0道术1010
CHANGEATT0体力100
CHANGEATT0魔防1010
CHANGEATT0防御1010
卸称号时记得减回去,不然属性会叠。
推荐用临时属性命令,重登自动清:
ADDTEMPATTR攻击1010
卸号ADDTEMPATTR攻击-10-10
顶号防重复
用一个全局变量记录当前第一人:
GLOBALG100
顶号成功写GLOBALG100=角色名
新顶号先判GLOBALG100是否为空
不为空就卸掉原角色称号再给新人
示例:
IF
EQUALGLOBALG100
ACT
SETGLOBALG100%s
SETTITLE天下第一人
ELSEACT
SENDMSG6当前天下第一人:<$GLOBAL(G100)>
不能重复顶号
多人服务器建议用INCGAMEGOLD那种全局锁,避免并发顶号。
二、充值奖励金刚石脚本
需求拆解
玩家充值后发金刚石
按充值金额区间发不同档
充值倍数加成(倍攻)
记录已领取档位防重复领
充值回调入口
一般有两个地方:
1.充值成功后的GM命令回调
2.QFunction里@Recharge或@PaySuccess标签
先看引擎文档你这套端用的是哪个标签。
常见三种:
[@Recharge]
[@PaySuccess]
[@OnPay]
[@Recharge]示例
IF
CHECKPAY10
ACT
GIVEYUANBAO100
GIVE金刚石10
SENDMSG6充值成功,获得金刚石×10
SETG611
IF
CHECKPAY50
ACT
GIVEYUANBAO500
GIVE金刚石50
GIVE倍攻令牌1
SENDMSG6充值50元档,获得金刚石×50、倍攻令牌×1
多档用嵌套#IF或者分开写多个标签。
按金额区间发金刚石
[@充值奖励]
IF
CHECKPAY>=10
CHECKPAY<50
ACT
GIVE金刚石10
SETG611
IF
CHECKPAY>=50
CHECKPAY<100
ACT
GIVE金刚石50
GIVE倍攻令牌1
SETG612
IF
CHECKPAY>=100
ACT
GIVE金刚石120
GIVE倍攻令牌3
SETG613
防重复领取
用变量记录:
IF
EQUALG610
ACT
GIVE金刚石10
SETG611
ELSEACT
SENDMSG6充值奖励已领取,请勿重复操作
每天重置用:
IF
NOTEQUALDAY1
ACT
SETG610
SETDAY1
金刚石发放命令对照
GIVE金刚石数量
GIVE金刚石(绑定)数量
GIVE金刚石碎片数量
具体道具名字看Item.DB里的StandardName,别写错成「金钢石」。
三、倍攻倍数怎么写
倍攻不是单一命令,有三种实现方式,选一个用,别叠加。
方案1:直接改攻击上下限
CHANGEATT0攻击5050
适合简单服,重登可能丢,要用临时属性或存变量。
方案2:倍攻倍数变量
[@设置倍攻]
IF
EQUALG620
ACT
SETG622
SENDMSG6倍攻已开启,当前×2
伤害计算在QFunction的@OnAttack或伤害回调里:
IF
EQUALG622
ACT
MULTIPLYATT2
或者
CHANGEDAMAGE伤害值×2
方案3:BUFF方式(推荐)
GIVEMAGICBUFF倍攻36002
参数:BUFF名持续秒倍数
重登不丢,到期自动消失,不用手动减属性。
M2里先在列表信息-状态魔法建一个倍攻BUFF:
名称:倍攻
类型:属性
攻击倍率:2
持续时间:3600
四、充值倍攻完整示例
[@充值成功]
IF
CHECKPAY>=10
ACT
GIVE金刚石10
SETG611
SENDMSG6获得金刚石×10
IF
CHECKPAY>=50
EQUALG611
ACT
GIVE金刚石40
GIVEMAGICBUFF倍攻864002
SETG612
SENDMSG6累计充值50元,倍攻×2开启24小时
IF
CHECKPAY>=100
EQUALG612
ACT
GIVE金刚石70
GIVEMAGICBUFF倍攻03
SETG613
SENDMSG6累计充值100元,永久倍攻×3
BUFF持续时间0=永久,具体看你引擎,有的要写999999。
五、NPC对话入口
在Envir\MerChant\下建NPC脚本:
[@充值奖励]
IF
EQUALG610
ACT
OPENPAY
强制打开充值界面
ELSEACT
SENDMSG6当前充值档位:<$STR(G61)>
六、文件结构与加载
脚本文件放:
Envir\QuestDiary\充值系统\充值奖励.txt
Envir\QuestDiary\天下第一人\顶号系统.txt
MerChant.txt里加NPC指向:
充值大使3330330充值系统\充值奖励.txt
QFunction-0.txt里#INCLUDE进来:
INCLUDE\QuestDiary\天下第一人\顶号系统.txt
INCLUDE\QuestDiary\充值系统\充值奖励.txt
改完重载脚本或重启M2。
七、变量规划表
G60天下第一人持有标记
G61充值档位
G62倍攻倍数
G63称号属性是否已加
GLOBALG100当前天下第一人名字
GLOBALG101顶号时间戳
人物变量在QManage[@Login]里初始化:
IF
EQUALG600
ACT
SETG600
SETG610
SETG621
八、常见坑
称号顶号后原角色下线没卸→Logout标签漏写
属性加了不减→用临时属性或减回去
SETTITLE中文乱码→脚本存ANSI
充值回调标签名不对→查引擎文档
CHECKPAY单位不一致→有的是分有的是元
金刚石名字写错→去Item.DB对StandardName
倍攻叠加→先判G62再给,别重复GIVEMAGICBUFF
BUFF永久写0不生效→改成999999
IF#ACT结构断掉→中间插了空行
NPC不显示→MerChant.txt坐标超出地图
QFunction没#INCLUDE→脚本没加载
变量重复定义→VAR只写一次
九、调试方法
开M2控制台看ScriptError
用GM号手动触发标签:
CALL[充值系统\充值奖励.txt]@充值成功
看是否发金刚石
再看角色属性面板倍攻是否生效
顶号用两个号测,看旧称号是否卸掉
一句话总结
天下第一人走「变量标记+SETTITLE+临时属性/BUFF」,顶号卸旧号、下线清状态。
充值奖励走「充值回调标签+CHECKPAY区间+GIVE金刚石+防重领变量」。
倍攻优先用BUFF方式,别直接CHANGEATT堆攻击,容易叠属性和重登丢失。
字段名、命令名、标签名必须按你这套引擎的命令表对一遍再上线,GOM、GEE、HERO三家的充值回调和BUFF命令写法不完全一样。

