GM-爱好者

 找回密码
 立即注册

在线
客服

在线客服服务时间: 10:00-20:00{不定期回复}

选择下列客服马上在线沟通:

快速
发帖

客服
热线

290016403
7*24小时客服服务热线

关注
微信

关注Q群二维码
顶部
查看: 914|回复: 25

引擎使用相关注意事项

[复制链接]
等级头衔

等級:郡守

Rank: 13Rank: 13Rank: 13Rank: 13

积分成就
精华
0
G币
0
主题
33
帖子
548
金币
8837

建功勋章

最佳新人活跃会员

发表于 2022-9-2 08:32:52 | 显示全部楼层 |阅读模式

马上注册 立即下载

您需要 登录 才可以下载或查看,没有账号?立即注册

x
新手指引--------------注意事项

关于脚本安全相关,部分新手写脚本不严谨,导致游戏脚本被封包利用造成损失,再这里给大家举例说明几个脚本安全相关示例

首先涉及到GOTO,CALL,和非NPC界面使用鼠标点击的脚本,我们可以利用引擎禁止点击字符进行强化安全,下面我们就使用系统禁止点击触发命令 :PlayDie ,这个命令是死亡触发命令,引擎文档也提到只要脚本头前缀涉及包含PlayDie 那么不允许点击,这个可以搜索引擎文档进行了解,搜索关键词:为什么提示禁止点击该NPC触发字段   


风险脚本示例1
------------下面----------看讲解为什么是风险----------------------------------

;下面是NPC脚本:

[@main]

<点击开始一键回收/@正常开始回收>\


[@正常开始回收]
#IF
EQUAL U108 0
#ACT
#CALL [\回收元宝系列\装备回收价格.txt] @回收装备正常
CLOSE
break

;下面....QuestDiary\回收元宝系列\装备回收价格.txt脚本(因为上面NPC脚本已经将脚本CALL到这里了)  
;执行条件为  检测 U108变量不等于0则CALL到下面脚本执行



[@回收装备正常]
{
#IF
check [100] 1
#ACT
goto @战狂回收检测A
#IF
check [101] 1
#ACT
goto @神武回收检测B
#IF
check [102] 1
#ACT
goto @烈火回收检测C
break


;--下面是上方GOTO执行脚本,
;执行条件为  分别检测个人标识100  101  102等于1则GOTO进行执行下面对应脚本


[@战狂回收检测A]
#OR
Checkitem 战狂精铁剑 1
Checkitem 战狂精铁铠 1
Checkitem 战狂头盔 1
Checkitem 战狂项链 1
Checkitem 战狂手镯 1
Checkitem 战狂护腕 1
Checkitem 战狂戒指 1
Checkitem 战狂指环 1
Checkitem 战狂腰带 1
Checkitem 战狂靴子 1
#ACT
TakeBagItem 战狂头盔|战狂项链|战狂手镯|战狂护腕|战狂戒指|战狂指环|战狂腰带|战狂靴子 46 20 0 0 38000 N0 1
TakeBagItem 战狂精铁剑|战狂精铁铠 46 40 0 0 76000 N1 1
MOV N$回收金额A <$STR(n0)>
MUL N$回收金额A 20
MOV N$回收金额B <$STR(n1)>
MUL N$回收金额B 40
INC U89 <$STR(N$回收金额A)>
INC U89 <$STR(N$回收金额B)>
SENDMSG 0 【装备回收】:恭喜{[<$USERNAME>]|250:0:1}成功回收{战狂套装|254:0:1},获得海量[{元宝,经验|254:0:255}]...!!! 31 0
break

[@神武回收检测B]
#OR
Checkitem 神武嗜血剑 1
Checkitem 神武嗜血铠 1
Checkitem 神武头盔 1
Checkitem 神武项链 1
Checkitem 神武手镯 1
Checkitem 神武护腕 1
Checkitem 神武戒指 1
Checkitem 神武指环 1
Checkitem 神武腰带 1
Checkitem 神武靴子 1
#ACT
TakeBagItem 神武头盔|神武项链|神武手镯|神武护腕|神武戒指|神武指环|神武腰带|神武靴子 46 40 0 0 40000 N0 1
TakeBagItem 神武嗜血剑|神武嗜血铠 46 80 0 0 80000 N1 1
MOV N$回收金额A <$STR(n0)>
MUL N$回收金额A 40
MOV N$回收金额B <$STR(n1)>
MUL N$回收金额B 80
INC U89 <$STR(N$回收金额A)>
INC U89 <$STR(N$回收金额B)>
SENDMSG 0 【装备回收】:恭喜{[<$USERNAME>]|250:0:1}成功回收{神武套装|254:0:1},获得海量[{元宝,经验|254:0:255}]...!!! 31 0
break

[@烈火回收检测C]
#OR
Checkitem 烈火焚天剑 1
Checkitem 烈火焚天铠 1
Checkitem 烈火头盔 1
Checkitem 烈火项链 1
Checkitem 烈火手镯 1
Checkitem 烈火护腕 1
Checkitem 烈火戒指 1
Checkitem 烈火指环 1
Checkitem 烈火腰带 1
Checkitem 烈火靴子 1
#ACT
TakeBagItem 烈火头盔|烈火项链|烈火手镯|烈火护腕|烈火戒指|烈火指环|烈火腰带|烈火靴子 46 60 0 0 45000 N0 1
TakeBagItem 烈火焚天剑|烈火焚天铠 46 120 0 0 90000 N1 1
MOV N$回收金额A <$STR(n0)>
MUL N$回收金额A 60
MOV N$回收金额B <$STR(n1)>
MUL N$回收金额B 120
INC U89 <$STR(N$回收金额A)>
INC U89 <$STR(N$回收金额B)>
SENDMSG 0 【装备回收】:恭喜{[<$USERNAME>]|250:0:1}成功回收{烈火套装|254:0:1},获得海量[{元宝,经验|254:0:255}]...!!! 31 0
break

讲解风险:以上脚本可以使用封包工具直接执行@回收装备正常  @MAIN  和 @战狂回收检测A  @神武回收检测B @烈火回收检测C ,因为这才是整段脚本的核心,前面所做一切检测就是为了这段核心执行脚本所准备,反而到了执行脚本可以忽略前面所做的一切检测,如果在执行脚本or下执行检测好像又不好做,那么我们就可以利用引擎禁用点击字段进行设置,比如上面所说的死亡触发字段PlayDie,因为这段执行脚本是不需要NPC点击,所以可以使用禁止点击字符来进行规避风险

下面修正脚本进行讲解,

               风险2.CALL过来的脚本第一个字段是[@回收装备正常] ,再QFunction-0.txt 是有检测U108变量值的,但是封包可以无视NPC脚本中的[@正常开始回收]检测字段,依然可以直接点击@回收装备正常],解决方式有2个,第一个就是把检测U108放入到@回收装备正常]内如下:

[@回收装备正常]
{
#IF

EQUAL U108 0
check [100] 1

#ACT

goto @战狂回收检测A
#IF

EQUAL U108 0
check [101] 1
#ACT
goto @神武回收检测B
#IF

EQUAL U108 0
check [102] 1
#ACT
goto @烈火回收检测C
break

这样处理就可以了,当时封包依然可以跳过上面的检测直接执行@战狂回收检测A @神武回收检测B @烈火回收检测C,因为这三段脚本都OR检测,所以不好做检测,我们我们可以利用禁止点击字符进行规避风险,因为@回收装备正常 属于引擎内部跳转脚本,也是不需要NPC点击的,所以我们可以使用禁止点击字符来进行规避(关于禁止点击字段,下面讲解)

讲解那么多现在来说如何正确使用系统禁止点击字段来规避风险,下面脚本演示

[@main]
<点击开始一键回收/@正常开始回收>\

[@正常开始回收]
#IF
EQUAL U108 0
#ACT
#CALL [\回收元宝系列\装备回收价格.txt] @PlayDie回收装备正常
CLOSE
break

[@PlayDie回收装备正常]
{

#IF
check [100] 1
#ACT
goto @PlayDie战狂回收检测A
#IF
check [101] 1
#ACT
goto @PlayDie神武回收检测B
#IF
check [102] 1
#ACT
goto @PlayDie烈火回收检测C
break



[@PlayDie战狂回收检测A]
#OR
Checkitem 战狂精铁剑 1
Checkitem 战狂精铁铠 1
Checkitem 战狂头盔 1
Checkitem 战狂项链 1
Checkitem 战狂手镯 1
Checkitem 战狂护腕 1
Checkitem 战狂戒指 1
Checkitem 战狂指环 1
Checkitem 战狂腰带 1
Checkitem 战狂靴子 1
#ACT
TakeBagItem 战狂头盔|战狂项链|战狂手镯|战狂护腕|战狂戒指|战狂指环|战狂腰带|战狂靴子 46 20 0 0 38000 N0 1
TakeBagItem 战狂精铁剑|战狂精铁铠 46 40 0 0 76000 N1 1
MOV N$回收金额A <$STR(n0)>
MUL N$回收金额A 20
MOV N$回收金额B <$STR(n1)>
MUL N$回收金额B 40
INC U89 <$STR(N$回收金额A)>
INC U89 <$STR(N$回收金额B)>
SENDMSG 0 【装备回收】:恭喜{[<$USERNAME>]|250:0:1}成功回收{战狂套装|254:0:1},获得海量[{元宝,经验|254:0:255}]...!!! 31 0
break

[@PlayDie神武回收检测B]
#OR
Checkitem 神武嗜血剑 1
Checkitem 神武嗜血铠 1
Checkitem 神武头盔 1
Checkitem 神武项链 1
Checkitem 神武手镯 1
Checkitem 神武护腕 1
Checkitem 神武戒指 1
Checkitem 神武指环 1
Checkitem 神武腰带 1
Checkitem 神武靴子 1
#ACT
TakeBagItem 神武头盔|神武项链|神武手镯|神武护腕|神武戒指|神武指环|神武腰带|神武靴子 46 40 0 0 40000 N0 1
TakeBagItem 神武嗜血剑|神武嗜血铠 46 80 0 0 80000 N1 1
MOV N$回收金额A <$STR(n0)>
MUL N$回收金额A 40
MOV N$回收金额B <$STR(n1)>
MUL N$回收金额B 80
INC U89 <$STR(N$回收金额A)>
INC U89 <$STR(N$回收金额B)>
SENDMSG 0 【装备回收】:恭喜{[<$USERNAME>]|250:0:1}成功回收{神武套装|254:0:1},获得海量[{元宝,经验|254:0:255}]...!!! 31 0
break

[@PlayDie烈火回收检测C]
#OR
Checkitem 烈火焚天剑 1
Checkitem 烈火焚天铠 1
Checkitem 烈火头盔 1
Checkitem 烈火项链 1
Checkitem 烈火手镯 1
Checkitem 烈火护腕 1
Checkitem 烈火戒指 1
Checkitem 烈火指环 1
Checkitem 烈火腰带 1
Checkitem 烈火靴子 1
#ACT
TakeBagItem 烈火头盔|烈火项链|烈火手镯|烈火护腕|烈火戒指|烈火指环|烈火腰带|烈火靴子 46 60 0 0 45000 N0 1
TakeBagItem 烈火焚天剑|烈火焚天铠 46 120 0 0 90000 N1 1
MOV N$回收金额A <$STR(n0)>
MUL N$回收金额A 60
MOV N$回收金额B <$STR(n1)>
MUL N$回收金额B 120
INC U89 <$STR(N$回收金额A)>
INC U89 <$STR(N$回收金额B)>
SENDMSG 0 【装备回收】:恭喜{[<$USERNAME>]|250:0:1}成功回收{烈火套装|254:0:1},获得海量[{元宝,经验|254:0:255}]...!!! 31 0
break


以上脚本为修复脚本,因为脚本前缀包含了系统禁止点击字段PlayDie,那么这脚本只能引擎内部跳转使用,严禁外部点击的,任何脚本字段只要不是靠NPC去点击的都可以使用引擎禁止点击字段作为前缀,当玩家使用封包工具进行点击时候,引擎上会显示日志:      用户:人物名称; NPCFunction 禁止点用该NPC触发字段playdie回收装备正常!反正只要不是需要鼠标点击的都可以使用禁止点击字符来做脚本头!!!!这样就无视封包工具刷包了,那么需要NPC点击的下面讲解!


--------------------------------------以上是脚本安全讲解1---------------------------------------------------------------------

下面讲解最传统的脚本安全,比如一些人写脚本领取金条,

[@main]

<金币换金条/@更换>
[@更换]
#if
checkgold 1000000
#act
GOTO @满足条件

[@满足条件]
#if
#act
give 金条 1
break


上面脚本只是举例, 这样的脚本封包可以直接刷@满足条件 无限领取金条,正确处理方式如下:


方式1:

[@main]

<金币换金条/@更换>


[@更换]
#if
checkgold 1000000
#act
give 金条 1
break



方式2:

[@main]

<金币换金条/@更换>


[@更换]
#if
checkgold 1000000
#act
GOTO @PlayDie满足条件

[@PlayDie满足条件]
#if
#act
give 金条 1
break

方式3:

[@main]

<金币换金条/@更换>


[@更换]
#if
checkgold 1000000
#act
SET [111] 1
GOTO @满足条件

[@满足条件]
#if
check [111] 1
#act
set [111] 0
give 金条 1
break

反正记住一点,检测条件必须和执行段一气呵成,或者使用个人标识进行检测,要么就在检测条件满足后跳转字段前缀比如包含禁止点击字符!!!!


关于脚本死循环

下面给大家说说脚本死循环问题(引擎-功能设置-其他控制内),很多GM习惯把脚本死循环设置到非常大,正常来说脚本循环次数设置不要超过999,一般来说200就足够使用,不要看到脚本死循环报错就一味的将循环次数设置超级大,甚至设置到99999,要知道死循环报错是需要达到并超过限制次数才会报错,设置太大后也许还没等报错引擎就崩溃了,比如一秒钟时间刷几十几百条报错,这个肯定是脚本问题,要解决问题根源,而不是掩耳盗铃!!!

设置循环次数的目的是给一些脚本本身需要比较大次数而用的,而不是让用来掩饰报错的!!!! 特别当循环次数设置200内那些一秒刷N条死循环报错的脚本就必须修复!!!!


关于定时器使用和游戏卡的问题

个人定时器最忌秒级执行大量复杂脚本,这样在线人越多引擎CPU占用就越大,服务器-任务管理器-进程中m2的CPU占用达到单核最大CPU占用游戏会卡,计算引擎最大CPU占用方式:比如任务管理器有8个格子,那么引擎最大CPU占用13%,算法为:100除以8 ,达到12%基本就很卡了,如果是16核CPU(16个格子),那么就是100除以16 大约7%也就是说达到6%就卡,引擎的负载能力取决CPU主频,主频越高承载能力越强,而不是多少核来决定的,因为目前市面上所有的引擎都是单核允许,当游戏出现卡的时候,首先排除网络,再排除引擎是否CPU满载,如果CPU满载人数没过千人,那么就是脚本引起的·脚本排查主要排查定时器,特别是秒级定时器,死循环等频繁执行和部分脚本命令使用问题(比如lockAbil和LOCKUPDATEABIL引用不当,相关功能命令文档下方有注意事项讲解)的脚本,如果确定是引起CPU满载造成的卡,可以进行排除,首先排除QM,其次排除QF,排除方式为,清空QM并重新加载,如果CPU下来了就表示是QM内的脚本造成,这个时候恢复QM脚本然后一段段的删除并重新加载,目的是找到是那段脚本造成,然后针对脚本修复优化,这就是排除方式,如果QM没问题就QF,反正造成引擎CPU高的原因只有大规模的频繁执行脚本才会导致,如果引擎的CPU有空闲依然卡的话,就需要更换IOCP多线程网关来解决卡的问题,多线程网关对游戏封包处理速度比普通网关高很多倍,流畅度也极大提升!!!如果引擎CPU没问题,网关也是多线程,游戏速度限制也没问题,还卡的话就换IDC吧。
等级头衔

等級:什长

Rank: 3Rank: 3Rank: 3

积分成就
精华
0
G币
0
主题
0
帖子
65
金币
583

建功勋章

发表于 2022-9-2 08:33:04 | 显示全部楼层
很干净的论坛,真心支持
等级头衔

等級:什长

Rank: 3Rank: 3Rank: 3

积分成就
精华
0
G币
0
主题
0
帖子
67
金币
645

建功勋章

最佳新人活跃会员

发表于 2022-9-2 08:33:59 | 显示全部楼层
确实是难得好帖啊,顶先!
等级头衔

等級:什长

Rank: 3Rank: 3Rank: 3

积分成就
精华
0
G币
0
主题
0
帖子
72
金币
758

建功勋章

发表于 2022-9-2 08:34:32 | 显示全部楼层
确实是难得好帖啊,顶先!
等级头衔

等級:什长

Rank: 3Rank: 3Rank: 3

积分成就
精华
0
G币
0
主题
0
帖子
67
金币
620

建功勋章

最佳新人活跃会员

发表于 2022-9-2 08:35:13 | 显示全部楼层
不错,楼主用心了,我等必须支持下
等级头衔

等級:什长

Rank: 3Rank: 3Rank: 3

积分成就
精华
0
G币
0
主题
0
帖子
75
金币
701

建功勋章

发表于 2022-9-2 08:35:54 | 显示全部楼层
确实是难得好帖啊,顶先!
等级头衔

等級:县令

Rank: 8Rank: 8

积分成就
精华
0
G币
0
主题
0
帖子
537
金币
1553

建功勋章

热心会员灌水之王最佳新人活跃会员

发表于 2022-9-2 08:36:18 | 显示全部楼层
呵呵。。。不错啊
等级头衔

等級:什长

Rank: 3Rank: 3Rank: 3

积分成就
精华
0
G币
0
主题
0
帖子
70
金币
743

建功勋章

最佳新人活跃会员

发表于 2022-9-2 08:37:07 | 显示全部楼层
相当不错,感谢无私分享精神!
等级头衔

等級:什长

Rank: 3Rank: 3Rank: 3

积分成就
精华
0
G币
0
主题
0
帖子
75
金币
646

建功勋章

发表于 2022-9-2 08:38:04 | 显示全部楼层
回的人少,我来小顶一下!
等级头衔

等級:伍长

Rank: 2Rank: 2

积分成就
精华
0
G币
0
主题
0
帖子
52
金币
566

建功勋章

发表于 2022-9-2 08:38:58 | 显示全部楼层
确实是难得好帖啊,顶先!
*滑块验证:
懒得打字嘛,点击右侧快捷回复 【GM爱好者:www.gmahz.com】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Download
本网站-正在清除各类 ---机器号--刷币号--僵尸号--永不解封 直接删库
x

QQ|Archiver|小黑屋|GM-爱好者 ( 赣ICP备20009465号-1 )|网站地图

GMT+8, 2024-7-1 05:00 , Processed in 0.227883 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表