在传奇服务端中实现角色首次登录自动发放装备,需通过QFunction脚本结合变量记录与物品检测逻辑。该功能适用于GOM、HERO等主流引擎,确保玩家创建角色后首次进入游戏即可获得预设武器、衣服、项链等基础装备。
一、判定首次上线条件
使用全局变量标记玩家是否已领取过装备。在[@LoginSuccess]或[@CreateRole]事件中判断:
[@LoginSuccess]
IF
EQUAL1
ACT
GOTO@FirstLoginGive
ELSEACT
GOTO@CheckAlreadyGot
[@CheckAlreadyGot]
IF
EXISTVARHUMANFirstLoginGift
ACT
;已领取,不处理
BREAK
ELSEACT
GOTO@FirstLoginGive
其中为部分引擎提供的新建角色标识(HERO引擎支持),若引擎不支持,可改用变量检测:
IF
EXISTVARHUMANFirstLoginGift==FALSE
ACT
GOTO@FirstLoginGive
二、装备发放前校验背包空间
避免因背包不足导致物品丢失,需逐件检查目标格子是否为空:
[@FirstLoginGive]
IF
CHECKBAGSIZE11
CHECKBAGSIZE21
CHECKBAGSIZE31
;假设1=武器2=衣服3=项链
ACT
GOTO@DoGiveEquip
ELSEACT
SENDMSG7背包空间不足,无法发放新手装备。
LOGGINGNewPlayerBagFull:
CLOSE
BREAK
CHECKBAGSIZEItemIndex数量用于检测指定物品能否放入背包。若引擎不支持此命令,可改用格子占用判断(如HERO引擎):
IF
CHECKBAGITEMEX00
CHECKBAGITEMEX10
...
三、执行装备发放与变量标记
确认空间充足后,依次发放装备并设置领取标记:
[@DoGiveEquip]
ACT
GIVE11;武器(ItemIndex=1)
GIVE21;衣服(ItemIndex=2)
GIVE31;项链(ItemIndex=3)
SETHUMANFirstLoginGift1
SENDMSG7欢迎新人玩家!已发放新手装备。
LOGGINGFirstLoginGift:success
注意:
GIVE命令按背包顺序填充,若需指定穿戴位置,需确保物品类型与角色职业匹配(如战士不可穿魔法长袍)
变量FirstLoginGift必须设为HUMAN类型,确保每个玩家独立记录
四、处理多职业差异化装备
若不同职业需发放不同装备,加入职业判断:
[@DoGiveEquip]
IF
EQUALJOB0;战士
ACT
GIVE101;战士武器
GIVE201;战士衣服
IF
EQUALJOB1;法师
ACT
GIVE111;法师武器
GIVE211;法师衣服
IF
EQUALJOB2;道士
ACT
GIVE121;道士武器
GIVE221;道士衣服
SETHUMANFirstLoginGift1
JOB为系统变量:0=战士,1=法师,2=道士。
五、防止重复触发机制
即使玩家断线重连,也不应重复发放。关键点:
变量FirstLoginGift在发放后立即设置
所有入口(登录、创建角色)均需校验该变量
避免在[@PlayStart]等高频事件中调用发放逻辑
六、完整脚本示例(GOM引擎)
在QFunction.txt末尾添加:
[@LoginSuccess]
IF
EXISTVARHUMANFirstLoginGift
ACT
;已领取,跳过
BREAK
ELSEACT
GOTO@CheckNewPlayer
[@CheckNewPlayer]
IF
CHECKITEM10
CHECKITEM20
CHECKITEM30
;确认无初始装备(可选)
ACT
GOTO@GiveStarterEquip
[@GiveStarterEquip]
IF
CHECKBAGSIZE11
CHECKBAGSIZE21
CHECKBAGSIZE31
ACT
GIVE11
GIVE21
GIVE31
SETHUMANFirstLoginGift1
SENDMSG7新手装备已发放,请查收。
ELSEACT
SENDMSG7背包空间不足,无法完成发放。
七、调试与验证步骤
创建新角色,观察是否收到装备
重新登录,确认不再重复发放
使用@delitem清空背包后重试,验证空间检测逻辑
检查MirServerLog日志,确认发放记录
通过上述脚本,可稳定实现新手上线自动送装备功能。核心在于首次登录识别、背包空间校验、职业适配及防重复机制四要素,缺一不可。
一、判定首次上线条件
使用全局变量标记玩家是否已领取过装备。在[@LoginSuccess]或[@CreateRole]事件中判断:
[@LoginSuccess]
IF
EQUAL1
ACT
GOTO@FirstLoginGive
ELSEACT
GOTO@CheckAlreadyGot
[@CheckAlreadyGot]
IF
EXISTVARHUMANFirstLoginGift
ACT
;已领取,不处理
BREAK
ELSEACT
GOTO@FirstLoginGive
其中为部分引擎提供的新建角色标识(HERO引擎支持),若引擎不支持,可改用变量检测:
IF
EXISTVARHUMANFirstLoginGift==FALSE
ACT
GOTO@FirstLoginGive
二、装备发放前校验背包空间
避免因背包不足导致物品丢失,需逐件检查目标格子是否为空:
[@FirstLoginGive]
IF
CHECKBAGSIZE11
CHECKBAGSIZE21
CHECKBAGSIZE31
;假设1=武器2=衣服3=项链
ACT
GOTO@DoGiveEquip
ELSEACT
SENDMSG7背包空间不足,无法发放新手装备。
LOGGINGNewPlayerBagFull:
CLOSE
BREAK
CHECKBAGSIZEItemIndex数量用于检测指定物品能否放入背包。若引擎不支持此命令,可改用格子占用判断(如HERO引擎):
IF
CHECKBAGITEMEX00
CHECKBAGITEMEX10
...
三、执行装备发放与变量标记
确认空间充足后,依次发放装备并设置领取标记:
[@DoGiveEquip]
ACT
GIVE11;武器(ItemIndex=1)
GIVE21;衣服(ItemIndex=2)
GIVE31;项链(ItemIndex=3)
SETHUMANFirstLoginGift1
SENDMSG7欢迎新人玩家!已发放新手装备。
LOGGINGFirstLoginGift:success
注意:
GIVE命令按背包顺序填充,若需指定穿戴位置,需确保物品类型与角色职业匹配(如战士不可穿魔法长袍)
变量FirstLoginGift必须设为HUMAN类型,确保每个玩家独立记录
四、处理多职业差异化装备
若不同职业需发放不同装备,加入职业判断:
[@DoGiveEquip]
IF
EQUALJOB0;战士
ACT
GIVE101;战士武器
GIVE201;战士衣服
IF
EQUALJOB1;法师
ACT
GIVE111;法师武器
GIVE211;法师衣服
IF
EQUALJOB2;道士
ACT
GIVE121;道士武器
GIVE221;道士衣服
SETHUMANFirstLoginGift1
JOB为系统变量:0=战士,1=法师,2=道士。
五、防止重复触发机制
即使玩家断线重连,也不应重复发放。关键点:
变量FirstLoginGift在发放后立即设置
所有入口(登录、创建角色)均需校验该变量
避免在[@PlayStart]等高频事件中调用发放逻辑
六、完整脚本示例(GOM引擎)
在QFunction.txt末尾添加:
[@LoginSuccess]
IF
EXISTVARHUMANFirstLoginGift
ACT
;已领取,跳过
BREAK
ELSEACT
GOTO@CheckNewPlayer
[@CheckNewPlayer]
IF
CHECKITEM10
CHECKITEM20
CHECKITEM30
;确认无初始装备(可选)
ACT
GOTO@GiveStarterEquip
[@GiveStarterEquip]
IF
CHECKBAGSIZE11
CHECKBAGSIZE21
CHECKBAGSIZE31
ACT
GIVE11
GIVE21
GIVE31
SETHUMANFirstLoginGift1
SENDMSG7新手装备已发放,请查收。
ELSEACT
SENDMSG7背包空间不足,无法完成发放。
七、调试与验证步骤
创建新角色,观察是否收到装备
重新登录,确认不再重复发放
使用@delitem清空背包后重试,验证空间检测逻辑
检查MirServerLog日志,确认发放记录
通过上述脚本,可稳定实现新手上线自动送装备功能。核心在于首次登录识别、背包空间校验、职业适配及防重复机制四要素,缺一不可。

