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

来源: 作者: 点击:
这两块属于不同的系统,别混在一个NPC里写。天下第一人走称号/排行榜/角色属性修改,充值奖励走充值回调+金刚石发放+倍攻倍数写入。下面按GOM/GEE系常见写法给,字段名和命令按你引擎版本对一下再套。

一、天下第一人称号脚本

需求拆解
称号显示「天下第一人」
顶头上显示或称号栏显示
给角色加属性
一人持有,顶号重新判定
下线/死亡/被顶要能卸掉

数据库准备
ChrName 表加字段:
Title varchar(20)
TitleAttr 记录属性加成
或在 Mir200\Data\TitleList.txt 里配称号

M2功能设置里看有没有「自定义称号」功能。
有就直接用M2加称号ID+名称+属性,脚本只负责 SETTITLE。
没有就得自己写称号系统。

最简称号写法(QFunction-0.txt)
[@Login]
IF

EQUAL G60 1
ACT

SETTITLE 天下第一人
SENDMSG 6 你当前拥有称号:天下第一人

[@Logout]
IF

EQUAL G60 1
ACT

SETTITLE
清掉称号,避免下线后顶号残留

判定谁是第一人
按等级、转生、战力都行,示例按等级:
[@顶号判定]
IF

CHECKLEVELEX > 999
CHECKGUILDMASTER
ACT

SET G60 1
SETTITLE 天下第一人
CHANGENAMECOLOR 249
GIVEBUFF 天下第一人 3600 100
SENDMSG 6 恭喜 %s 成为天下第一人!

[@卸号判定]
IF

CHECKLEVELEX < 999
EQUAL G60 1
ACT

SET G60 0
SETTITLE
CHANGENAMECOLOR 255
SENDMSG 6 天下第一人称号已被卸除

属性加成
如果引擎不支持SETTITLE带属性,就得手动加:
CHANGEATT 0 攻击 10 10
CHANGEATT 0 魔法 10 10
CHANGEATT 0 道术 10 10
CHANGEATT 0 体力 100
CHANGEATT 0 魔防 10 10
CHANGEATT 0 防御 10 10

卸称号时记得减回去,不然属性会叠。
推荐用临时属性命令,重登自动清:
ADDTEMPATTR 攻击 10 10
卸号 ADDTEMPATTR 攻击 -10 -10

顶号防重复
用一个全局变量记录当前第一人:
GLOBAL G100
顶号成功写 GLOBAL G100 = 角色名
新顶号先判 GLOBAL G100 是否为空
不为空就卸掉原角色称号再给新人

示例:
IF

EQUAL GLOBAL G100
ACT

SET GLOBAL G100 %s
SETTITLE 天下第一人
ELSEACT

SENDMSG 6 当前天下第一人:<$GLOBAL(G100)>
不能重复顶号

多人服务器建议用 INCGAMEGOLD 那种全局锁,避免并发顶号。

二、充值奖励金刚石脚本

需求拆解
玩家充值后发金刚石
按充值金额区间发不同档
充值倍数加成(倍攻)
记录已领取档位防重复领

充值回调入口
一般有两个地方:
1. 充值成功后的GM命令回调
2. QFunction 里 @Recharge 或 @PaySuccess 标签

先看引擎文档你这套端用的是哪个标签。
常见三种:
[@Recharge]
[@PaySuccess]
[@OnPay]

[@Recharge] 示例
IF

CHECKPAY 10
ACT

GIVE YUANBAO 100
GIVE 金刚石 10
SENDMSG 6 充值成功,获得金刚石×10
SET G61 1

IF

CHECKPAY 50
ACT

GIVE YUANBAO 500
GIVE 金刚石 50
GIVE 倍攻令牌 1
SENDMSG 6 充值50元档,获得金刚石×50、倍攻令牌×1

多档用嵌套 #IF 或者分开写多个标签。

按金额区间发金刚石
[@充值奖励]
IF

CHECKPAY >= 10
CHECKPAY < 50
ACT

GIVE 金刚石 10
SET G61 1

IF

CHECKPAY >= 50
CHECKPAY < 100
ACT

GIVE 金刚石 50
GIVE 倍攻令牌 1
SET G61 2

IF

CHECKPAY >= 100
ACT

GIVE 金刚石 120
GIVE 倍攻令牌 3
SET G61 3

防重复领取
用变量记录:
IF

EQUAL G61 0
ACT

GIVE 金刚石 10
SET G61 1
ELSEACT

SENDMSG 6 充值奖励已领取,请勿重复操作

每天重置用:
IF

NOTEQUAL DAY 1
ACT

SET G61 0
SET DAY 1

金刚石发放命令对照
GIVE 金刚石 数量
GIVE 金刚石(绑定) 数量
GIVE 金刚石碎片 数量
具体道具名字看 Item.DB 里的 StandardName,别写错成「金钢石」。

三、倍攻倍数怎么写

倍攻不是单一命令,有三种实现方式,选一个用,别叠加。

方案1:直接改攻击上下限
CHANGEATT 0 攻击 50 50
适合简单服,重登可能丢,要用临时属性或存变量。

方案2:倍攻倍数变量
[@设置倍攻]
IF

EQUAL G62 0
ACT

SET G62 2
SENDMSG 6 倍攻已开启,当前×2

伤害计算在 QFunction 的 @OnAttack 或伤害回调里:
IF

EQUAL G62 2
ACT

MULTIPLYATT 2
或者
CHANGEDAMAGE 伤害值×2

方案3:BUFF方式(推荐)
GIVEMAGICBUFF 倍攻 3600 2
参数:BUFF名 持续秒 倍数
重登不丢,到期自动消失,不用手动减属性。

M2里先在 列表信息-状态魔法 建一个倍攻BUFF:
名称:倍攻
类型:属性
攻击倍率:2
持续时间:3600

四、充值倍攻完整示例

[@充值成功]
IF

CHECKPAY >= 10
ACT

GIVE 金刚石 10
SET G61 1
SENDMSG 6 获得金刚石×10

IF

CHECKPAY >= 50
EQUAL G61 1
ACT

GIVE 金刚石 40
GIVEMAGICBUFF 倍攻 86400 2
SET G61 2
SENDMSG 6 累计充值50元,倍攻×2开启24小时

IF

CHECKPAY >= 100
EQUAL G61 2
ACT

GIVE 金刚石 70
GIVEMAGICBUFF 倍攻 0 3
SET G61 3
SENDMSG 6 累计充值100元,永久倍攻×3

BUFF持续时间0=永久,具体看你引擎,有的要写999999。

五、NPC对话入口

在 Envir\MerChant\ 下建 NPC 脚本:
[@充值奖励]
IF

EQUAL G61 0
ACT

OPENPAY
强制打开充值界面

ELSEACT

SENDMSG 6 当前充值档位:<$STR(G61)>

六、文件结构与加载

脚本文件放:
Envir\QuestDiary\充值系统\充值奖励.txt
Envir\QuestDiary\天下第一人\顶号系统.txt

MerChant.txt 里加NPC指向:
充值大使 3 330 330 充值系统\充值奖励.txt

QFunction-0.txt 里 #INCLUDE 进来:
INCLUDE \QuestDiary\天下第一人\顶号系统.txt

INCLUDE \QuestDiary\充值系统\充值奖励.txt

改完重载脚本或重启M2。

七、变量规划表

G60 天下第一人持有标记
G61 充值档位
G62 倍攻倍数
G63 称号属性是否已加
GLOBAL G100 当前天下第一人名字
GLOBAL G101 顶号时间戳

人物变量在 QManage [@Login] 里初始化:
IF

EQUAL G60 0
ACT

SET G60 0
SET G61 0
SET G62 1

八、常见坑

称号顶号后原角色下线没卸 → 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命令写法不完全一样。