当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇服务端功能脚本编写指南:GOM/GEE引擎NPC对话、变量系统与全局触发核心教程

热度:
传奇写功能主要围绕服务端脚本展开,常见引擎包括GOM、GEE、BLUE、996等。不同引擎命令略有差异,但基础结构基本一致。功能脚本通常放在MirServerMir200Envir目录下,NPC配置在merchant.txt,对话脚本放在Market_def或Market_Def,全局触发写在QFunction-0.txt,登录触发写在QManage.txt,定时活动写在Robot_def。

一个最简单的NPC对话脚本结构如下:

[@main]
say
你好,勇士。\
<领取奖励/@getgift>\
<离开/@exit>

[@getgift]
if
checklevelex>29
checkgold1000
act
takegold1000
give裁决之杖1
sendmsg7奖励已发放。
goto@main

elseact
sendmsg7等级不足或金币不够。
goto@main

[@exit]
act
close

这段脚本表示玩家与NPC对话后,如果等级大于29且金币达到1000,就扣除金币并发放物品;条件不满足则提示失败。

常用条件命令包括checklevelex检测等级、checkgold检测金币、checkgamegold检测元宝、checkitem检测物品、checkjob检测职业、checkhum检测地图人数、isadmin检测管理员权限。

常用执行命令包括give给予物品、take收回物品、map随机传送、mapmove定点传送、changelevel调整等级、addskill添加技能、delskill删除技能、monclear清除地图怪物、mongen刷怪、gamemaster开启GM权限。

变量系统分为内置变量和自定义变量。GOM/GEE引擎中,P0-P9、D0-D9属于早期内置变量;自定义数字变量常用N0-N999、U0-U99,自定义字符变量常用S0-S999、T0-T99;全局变量可用G0-G999、A0-A999。

变量操作命令包括mov赋值、inc自增、dec自减、mul乘法、div整除、sum求和、movr随机赋值、small判断小于、large判断大于、equal判断等于。

例如写一个签到功能:

[@sign]
if
equalN100
act
movN101
give金币50000
sendmsg7今日签到已完成。
elseact
sendmsg7今日已签到。

这里N10用来记录是否已签到。如果要保存玩家数据,需要使用自定义变量并配合loadvar、savevar或引擎提供的自定义变量命令。

自定义变量写法示例:

[@initvar]
if
act
varintegerhumansigncount
loadvarhumansigncount..QuestDiary签到sign.txt

[@dailysign]
if
checkvarhumansigncount<1
act
calcvarhumansigncount+1
savevarhumansigncount..QuestDiary签到sign.txt
give金币10000
sendmsg7签到成功。
elseact
sendmsg7今日已签到。

全局触发功能写在QFunction-0.txt,常见标签包括@PlayLevelUp升级触发、@OnKillMob击杀怪物触发、@PickUpItemX拾取物品触发、@UserCmdX自定义命令触发、@MagSelfFuncX技能触发。

例如玩家升级自动发奖励:

[@PlayLevelUp]
if
checklevelex=35
act
give沃玛装备1
sendmsg7恭喜达到35级,获得奖励。

定时活动写在Robot_defAutoRunRobot.txt:

AutoRunNPCMIN60@每小时活动

在RobotManage.txt中写触发内容:

[@每小时活动]
if
act
sendmsg0活动开启,请前往盟重安全区领取奖励。

写功能时需要注意文件编码。GOM、GEE等引擎的脚本文件通常必须保存为ANSI编码,使用UTF-8容易出现中文乱码或脚本解析失败。修改NPC或脚本后,需要通过M2重载NPC、重载脚本或重启服务端使改动生效。

调试功能时建议先复制一份已有脚本,再逐步修改命令和变量。每次改动后先测试条件是否生效、物品是否正确扣除、变量是否保存、提示是否准确。避免一次性写太多功能,否则出现问题后难以排查。

如果是996三端引擎,部分功能会使用LUA脚本,语法更接近客户端自动化脚本,变量和函数写法与GOM/GEE的文本脚本不同。传统GOM/GEE服务端则以文本脚本为主,结构由[@段名]、#if、#act、#say、goto、close组成。

实际开发中,可以先从简单NPC开始,例如传送、领取奖励、回收装备、签到、转生、称号激活,再逐步加入变量判断、全局触发和定时活动。脚本逻辑保持清晰,条件写在#if下面,执行写在#act下面,对话写在#say下面,失败分支用#elseact或#elsesay处理,这样后期维护会更方便。
[顶部]