传奇创建或加入队伍前触发QFunction的361引擎写法:StartGroup等级地图变量校验中止组

来源: 作者: 点击:
361引擎在Mir200\Envir\Market_Def\QFunction-0.txt里处理组队前逻辑,创建队伍和加入队伍都可走[@StartGroup]。该段在玩家点创建、被邀请同意入队、主动申请入队之前执行;不满足条件用CreateGroupFail中止操作,再SendMsg提示。不同361子版本对“加入队伍”是否单独走[@JoinGroup]、对“邀请”是否走[@InviteGroup]支持程度不同,先按[@StartGroup]做总拦截最稳,分段补充按所用M2命令帮助开启。

一、QFunction组队相关段名

创建或加入前总触发:

[@StartGroup]

创建成功之后触发:

[@GroupCreate]

添加队员成功触发,S0可取被加队员名:

[@GroupAddMember]

离队触发:

[@LeaveGroup]

删除队员触发:

[@GroupDelMember]

组队杀怪触发:

[@GroupKillMon]

361老资料示例只用[@StartGroup]即可拦创建和加入;若M2另提供[@InviteGroup]用于邀请前、[@JoinGroup]用于对方同意前,再单独写,不要凭空假设两个段都生效。

二、最小可用:等级不足禁止组队

QFunction-0.txt:

[@StartGroup]
if

CheckLevelEx < 25
act

CreateGroupFail
SendMsg 5 25级之后才可以创建或加入队伍。
Break

CheckLevelEx按实际等级字段替换,部分版本用CHECKLEVELEX、部分用CheckLevel。CreateGroupFail用于中止本次创建或加入;后面SendMsg给操作者提示,Break防止继续向下执行其他组队逻辑。

三、已组队禁止再次创建

防止已在某些活动队、测试队里重复建队:

[@StartGroup]
if

CHECKGROUPCOUNT > 0
act

CreateGroupFail
SendMsg 5 你已在队伍中,先退出再创建新队。
Break
if

CheckLevelEx < 25
act

CreateGroupFail
SendMsg 5 25级之后才可以创建或加入队伍。
Break

CHECKGROUPCOUNT取当前已组人数,大于0表示已组队。若只拦“创建”不拦“加入”,把已组队判断放到创建NPC或其他段;[@StartGroup]若同时拦加入,已组队直接Fail会导致无法被邀,按需求删这段。

四、按地图限制组队

活动图、单人副本图禁止组队:

[@StartGroup]
if

CHECKMEMMAP 活动单人图号
act

CreateGroupFail
SendMsg 5 当前地图禁止组队。
Break
if

CheckLevelEx < 25
act

CreateGroupFail
SendMsg 5 等级不足,禁止组队。
Break

CHECKMEMMAP命令名按361子版本替换,部分用CHECKINMAP、部分用ISINMAP。地图号写MapInfo已加载的编号;不可走图、未加载图判断会失效。

五、按会员或变量限制入队

会员专用队、任务队可用变量:

[@StartGroup]
if

CHECK [800] 0
act

CreateGroupFail
SendMsg 5 未开通组队权限,请联系管理员开通。
Break
if

CheckLevelEx < 25
act

CreateGroupFail
SendMsg 5 等级不足,禁止组队。
Break

[800]仅作个人变量示例,0表示未授权、1表示已授权。开通时在会员NPC写MOV [800] 1并SAVEVAR;QFunction读取用CHECK [800] 1。若用名单文件:

[@StartGroup]
if

CHECKNAMELIST ..\QuestDiary\组队白名单.txt
act

SendMsg 6 白名单校验通过,继续组队。
elsesay

CreateGroupFail
SendMsg 5 不在组队白名单,禁止创建或加入。
Break

名单路径按Envir\QuestDiary实际子目录改;相对路径错层会导致永远Fail。

六、按队伍人数上限前拦

M2游戏选项里设组队成员数量后,[@StartGroup]可再做软拦截,避免特殊活动超限:

[@StartGroup]
if

CHECKGROUPMEMBERCOUNT > 5
act

CreateGroupFail
SendMsg 5 当前队伍已超过5人,无法继续加入。
Break

CHECKGROUPMEMBERCOUNT运算符按版本支持=、>、<、>=、<=;加入新队员前判断旧人数,若设最大6人可写>5拦第7人。M2本身上限优先,脚本只做活动提示和附加规则。

七、加入队伍单独处理新队员名

若所用361在[@StartGroup]拿不到入队者名,而[@GroupAddMember]在成功后才触发,需要做“入队前审新人的属性”就要看是否支持[@JoinGroup]或[@InviteGroup]。支持时写:

[@JoinGroup]
if

CheckLevelEx < 25
act

CreateGroupFail
SendMsg 5 对方等级低于25,拒绝加入。
Break
if

CHECKNAMELIST ..\QuestDiary\组队黑名单.txt
act

CreateGroupFail
SendMsg 5 对方在组队黑名单,拒绝加入。
Break

[@InviteGroup]同理用于队长邀请前拦对方条件。若子版本无这俩段,所有入队前条件都堆[@StartGroup],但[@StartGroup]未必能区别“谁是申请人、谁是队长”,此时只做操作者自身等级、地图、变量校验,新人属性改到[@GroupAddMember]成功后再踢人或不发奖励,不算严格“之前”。

八、S0取被加队员名做成功后续

[@GroupAddMember]
if

act

SendMsg 5 <$S0>加入了队伍。
SendMsg 5 你加入了队伍。
elsesay

SendMsg 5 添加队员失败。

S0在添加队员触发里取被加角色名,用于公告、记录、发组队BUFF。创建成功发队长奖励写[@GroupCreate],离队清BUFF写[@LeaveGroup]。

九、组队前扣费或扣材料示例

创建收费队:

[@StartGroup]
if

CheckGold 10000
act

Gold - 10000
SendMsg 6 扣除1万金币作为建队费。
if

CheckLevelEx < 25
act

CreateGroupFail
SendMsg 5 等级不足,禁止组队。
Break

先扣费再判断等级会有“等级不够钱已扣”的问题;正式写应先判断等级、地图、已组队,最后再扣费:

[@StartGroup]
if

CheckLevelEx < 25
act

CreateGroupFail
SendMsg 5 25级之后才可以创建或加入队伍。
Break
if

CHECKGROUPCOUNT > 0
act

CreateGroupFail
SendMsg 5 已在队伍中,无法重复创建。
Break
if

CheckGold 10000
act

Gold - 10000
SendMsg 6 已扣建队费,继续组队。
elsesay

CreateGroupFail
SendMsg 5 建队需要1万金币。
Break

十、活动队前校验完整示例

需求:仅会员变量[800]=1可建队,等级≥30,非单人活动图,队伍不超过6人,建队扣5元宝,入队也走同一规则。

QFunction-0.txt:

[@StartGroup]
if

CHECK [800] 0
act

CreateGroupFail
SendMsg 5 仅开通组队会员可创建或加入队伍。
Break
if

CheckLevelEx < 30
act

CreateGroupFail
SendMsg 5 30级以后才允许组队。
Break
if

CHECKMEMMAP 9001
act

CreateGroupFail
SendMsg 5 单人活动图禁止组队。
Break
if

CHECKGROUPMEMBERCOUNT > 5
act

CreateGroupFail
SendMsg 5 队伍已满6人,无法加入。
Break
if

CHECKGAMEGOLD 5
act

GAMEGOLD - 5
SendMsg 6 扣除5元宝,组队已建立或加入。
elsesay

CreateGroupFail
SendMsg 5 组队需要5元宝。
Break

CHECKGAMEGOLD、GAMEGOLD按所用361货币命令替换;点卡币用CheckGold/Gold,元宝用GameGold相关命令。地图9001、变量[800]、人数6都按版本改。

十一、M2配套设置

选项、参数设置、游戏选项里设组队成员数量上限,[@StartGroup]只做附加规则,不替代M2硬上限。若M2有“允许邀请组队”“允许申请组队”“队长审批”等开关,先按运营要求开启,再让QFunction做等级/会员/地图拦截。改完QFunction在M2重载功能脚本或重启;用记事本存ANSI,中文段名乱码会导致[@StartGroup]不触发。

十二、排错

点创建完全不进[@StartGroup]:QFunction-0.txt未重载、文件编码非ANSI、所用361子版本组队前钩子不叫[@StartGroup]而叫其他名。先用最简单等级判断写段,M2重载后小号低于等级点创建,能提示说明钩子通;仍不提示查M2功能脚本路径。

CreateGroupFail不中止:命令名拼写错,部分版本用CreateGroupFail、部分变体用CancelGroup/GroupFail。先查所用M2命令帮助;老361帖示例用CreateGroupFail可直接试。

只拦创建不拦加入:[@StartGroup]若版本仅创建前触发,需要再加入[@JoinGroup]/[@InviteGroup]或把入队改成NPC审批。NPC审批思路是关闭自由组队,玩家用NPC申请,脚本判断双方条件后再执行引擎加人命令。

S0取不到新队员名:添加队员成功段才给S0,入队前段不一定有。要做入队前审新人属性,优先用独立入队NPC或确认子版本是否有[@JoinGroup]前触发;没有就用成功段补判,不合格发消息并踢人。

变量不生效:CHECK [800]前未SAVEVAR,小退丢失;用名单就用CHECKNAMELIST并确认相对路径。会员NPC开通和QFunction读取必须同一变量名、同一文件路径。

地图判断误拦:CHECKMEMMAP图号写错、目标图未加载、安全区和活动图混淆。先用GM传目标图,再在[@StartGroup]单独写该图判断测试,通了再合并其他条件。

按[@StartGroup]做创建与加入前总拦,配合CreateGroupFail、等级、已组人数、地图、会员变量、货币扣费四层条件,可覆盖361组队前大部分自定义规则;若子版本支持[@JoinGroup]、[@InviteGroup]再拆分新人属性校验,不支持就用NPC审批替代自由组队。