传奇和平模式强制切换攻击模式失效排查教程之MapInfo安全区与M2脚本解除和平限制

来源: 作者: 点击:
和平模式切不到全体、行会、编组,先分是玩家自己操作被限制,还是服务端规则强制锁和平。授权服务端只处理后者,不提供任何修改客户端、内存注入、第三方脱机工具的做法。

一、玩家端先排除正常限制

游戏内切模式常用Ctrl+H循环,或在角色界面点模式按钮选全体、行会、夫妻、师徒、编组、善恶。安全区多数版本默认锁和平,站在安全点按Ctrl+H无反应属正常,走出安全区再切。 部分版本新人上线强制和平,M2参数里若勾了新人上线和平,会在登录脚本之后把模式压回和平,需要到M2取消相关勾选再让脚本控制。

二、MapInfo地图参数排查

EnvirMapInfo.txt按地图号查目标地图。和平相关参数主要看两个方向。

整图安全区写法:
[0 比奇省] Safe
Safe表示安全区域、不允许PK,玩家通常不能切攻击模式。

禁止切换攻击模式写法:
[行会战地图] NOSWITCHATTACKMODE
加了这个标志后,进入地图不允许切换攻击模式,脚本强制切也可能被地图规则拦。

想让某图可PK、可自由切模式,去掉Safe,按版本写FIGHT或非安全参数;若只想允许切但不希望玩家乱切回和平,可保留NOSWITCHATTACKMODE并用进入脚本强制设目标模式。改完在M2重载地图信息,部分引擎重启M2和DBServer更稳。

三、安全区坐标覆盖问题

整图没写Safe但仍强制和平,可能是安全区坐标文件覆盖。不同引擎文件不同:

Hero看SafePoint.txt或SafeZone.txt,格式大致为地图号 X1 Y1 X2 Y2 名称 属性码,属性0为默认安全区禁止PK。
GOM/GEE在M2游戏配置、地图配置里勾启用安全区,或配合SafePoint.txt。
老版用StartPoint.txt做安全点,格式含地图号、中心坐标、半径、光环、PK区域等。

排查时把目标PK地图号在对应安全区文件里搜一遍,若坐标范围把整个地图包住,玩家进图也相当于安全区。缩小坐标或删除该行后重载,再测试切模式。

四、M2攻击模式全局开关

M2选项、参数设置、状态控制或攻击模式控制里,先确认要切到的模式被允许。例如想强切全体,必须允许全体攻击模式;想切行会,必须允许行会模式。只写脚本不发M2开关,命令会被忽略。

Hero类查M2选项、参数设置里是否勾允许脚本强制修改攻击模式;不勾则QFunction用ChangeAttackMode、SetHumAttackMode都不生效。 M2列表信息、消息过滤里若把模式切换相关关键字过滤,客户端收不到提示或指令,清空过滤再测。

新人上线和平、红名强制模式、攻城期间模式覆盖,都在M2相关参数处理。Setup.txt里若有限制攻击模式字段,按本引擎说明改;例如部分资料用RedModeAttack控制红名是否强制全体,参数含义以本服M2帮助为准。

五、脚本强制切模式命令

Blue/Legend常用:
CHECKATTACKMODE 数值,0全体、1和平、2夫妻、3师徒、4编组、5行会、6善恶。
CHANGEATTACKMODE 数值,切换对应模式。
进入PK图强制全体示例:

[@EnterPKMap]
IF

CHECKATTACKMODE = 1
ACT

CHANGEATTACKMODE 0
SendMsg 6 已强制切换全体模式

只给非和平玩家切全体,和平玩家不改动就把条件改成CHECKATTACKMODE = 1再执行。想进图统一行会模式把0换成5,编组换4,夫妻换2,师徒换3,善恶换6。

GOM/GEE部分版本用ChangeAttackMode、SetHumAttackMode或ChangeMode类命令,参数名可能不同;Hero看本引擎攻击模式命令表。脚本写错模式数字、漏强制参数、在QFunction未被重载,都会看起来像和平解不开。

进入地图触发放在QFunction-0的@EnterMap或直接用MapQuest/区域触发;NPC手动切换放在Market_Def,玩家点菜单执行CHANGEATTACKMODE。示例NPC:

[@main]
<切全体>/@all
<切行会>/@guild
<切编组>/@group

[@all]
IF

ACT

CHANGEATTACKMODE 0
SendMsg 6 已切换全体

[@guild]
IF

ACT

CHANGEATTACKMODE 5
SendMsg 6 已切行会

[@group]
IF

ACT

CHANGEATTACKMODE 4
SendMsg 6 已切编组

六、登录和战斗状态冲突

QManage或QFunction登录段若写了强制和平,例如新账号、低等级、未做主线就CHANGEATTACKMODE 1,玩家到PK图自己切也会被登录脚本下次覆盖。改法是对已进PK地图、已达到等级、已加入行会的条件跳过强制和平。

玩家被麻痹、禁锢、部分控制技能锁定,服务端可能临时锁模式,脚本强切前先解状态再发切换命令。 红名、监狱、新手保护、攻城预备状态也会覆盖手动模式,按M2对应菜单放权限。

七、攻城、副本、活动强制和平覆盖

沙巴克、行会战、副本、活动图常在脚本里强制模式。比如攻城期间用CHECKCASTLEWAR检测,进入皇城强制全体或行会;活动图用NOSWITCHATTACKMODE加进入脚本强制和平。若在这些图想解和平,先改活动脚本的模式分支,不要只改MapInfo,否则脚本每次进图又压回和平。

副本若要求可切全体,去掉进入段的CHANGEATTACKMODE 1,并在MapInfo取消NOSWITCHATTACKMODE;若只允行会内部互打、对怪物全体,用脚本按目标类型分别设模式,不靠玩家手动乱切。

八、排错顺序

1. 玩家站在目标图非安全坐标,按Ctrl+H,看是否仍无反应。安全区无反应先移出安全区。
2. 搜MapInfo目标地图行,看Safe、NOSWITCHATTACKMODE、FIGHT等参数。
3. 搜安全区文件SafePoint/SafeZone/StartPoint,看坐标是否全覆盖该图。
4. M2攻击模式权限里勾选全体、行会、编组等目标模式,开允许脚本强制修改。
5. QFunction搜CHANGEATTACKMODE、CHECKATTACKMODE、ChangeAttackMode、SetHumAttackMode,看是否有进入强制和平或登录强制和平。
6. 攻城脚本、副本脚本、活动NPC搜和平模式命令,确认是否被活动逻辑覆盖。
7. 改完重载地图、重载NPC、重载功能脚本;不确定就重启M2,用新角色进图测试全体、行会、编组分别能否切回。

九、授权GM常用解和平示例

某PK地图号100,要求进图非和平强制全体,离开不强制:

MapInfo:
[100 竞技场] FIGHT

QFunction进入段:
[@Enter100]
IF

CHECKMAPNAME 100
ACT

CHANGEATTACKMODE 0
SendMsg 6 竞技场已强制全体,可自由PK

若地图要求只允许全体且禁止切回和平,MapInfo加:
[100 竞技场] FIGHT NOSWITCHATTACKMODE
再配合进入段CHANGEATTACKMODE 0,玩家进图后不能切和平,离图到其他非NOSWITCH地图恢复自由切换。

某行会战图要求仅行会模式:
[200 行会战] NOSWITCHATTACKMODE
进入段CHANGEATTACKMODE 5,不写其他模式按钮逻辑,玩家只能行会互打,避免误切全体误伤友方。

十、风险处理

安全区误取消会导致主城随意PK,新手被秒、交易摆摊混乱。新图先小范围坐标做安全点,不整图去Safe。NOSWITCHATTACKMODE只用在行会战、竞技、攻城预备等明确场景,全服所有地图加该参数会影响正常打怪切怪模式。强制全体脚本不要对红名白名无差别执行,攻城、副本、安全区要分别写条件,避免玩家在主城被强制开全体。

按MapInfo参数、安全区坐标、M2模式权限、QFunction进入脚本、活动攻城脚本五层排查,和平切不了攻击基本都能定位;所有操作只在授权服务端进行,不修改客户端文件、不使用外部加速或强制攻击工具。