传奇天下第一人称号脚本与充值奖励金刚石倍攻脚本编写

来源: 作者: 点击:
这两块属于不同的系统,别混在一个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命令写法不完全一样。
[顶部]