GM-爱好者

 找回密码
 立即注册

在线
客服

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

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

快速
发帖

客服
热线

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

关注
微信

关注Q群二维码
顶部
查看: 483|回复: 16

脚本优化—新手GM必看

[复制链接]
等级头衔

等級:郡王

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
精华
0
G币
0
主题
37
帖子
916
金币
6032

建功勋章

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

发表于 2022-12-25 05:25:38 | 显示全部楼层 |阅读模式

马上注册 立即下载

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

x
上次说了一些版本优化的东西,这次以我的方式简单举一个例子,目的只有一个,简化脚本,省去不必要的GOTO,减轻引擎负担!

应该说很多坛友们都碰到过脚本死循环的例子。除了很意外的错误之外,一般的解决方法都是修改setup文件里的goto循环次数,可是这个方法有时候并不能彻底解决问题,往往是看似解决了但是M2会不定时的出现脚本死循环,此时M2应该是一种假死的状态,对报错的脚本应该是无法执行了,我们此时按照路径去查找怎么看都看不出哪里出错了。包括脚本的一些逻辑什么的都很正确,这该怎么办呢?这就需要我们平时编写的时候养成一个良好的习惯,也可以说是一个良好的手法!下面我会举例说明!


首先来看一段转生的脚本,这是我之前玩传奇写过的,因为平时没事了我们几个朋友都会聚一块儿玩内服,租个便宜简单的服务器或者自己电脑开一个

[@一转]
#IF
CHECKLEVELEX > 54
#ACT
goto @一转一
#ELSESAY
哦!你的等级还没有55级哦!先升级再说吧

[@一转一]
#IF
CHECKRENEWLEVEL < 1
#ACT
goto @一转二
#ELSESAY
哦!你都进行过一转了还来干吗?

[@一转二]
#IF
CHECKGAMEGOLD > 999
#ACT
gamegold - 1000
RENEWLEVEL 1 0 100
#CALL [\封号系统\封号系统.txt] @封号系统
#CALL [\封号系统\名字变色.txt] @名字变色
SendCenterMsg 253 180 恭喜<$USERNAME>一转成功,奖励可自由分配属性点100个!
#ELSESAY
哦!你连1000个元宝都没有!等凑足了元宝再说吧!


[@二转]
#IF
CHECKLEVELEX > 59
#ACT
goto @二转一
#ELSESAY
哦!你的等级还没有60级哦!先升级再说吧

[@二转一]
#IF
CHECKRENEWLEVEL = 1
#ACT
goto @二转二
#ELSESAY
哦!你还没进行一转就来二转呀!先一转了再说吧!

[@二转二]
#IF
CHECKRENEWLEVEL > 1
#ACT
Messagebox 错误:你都进行过二转了还来干吗?有病呀你!
#ELSEACT
goto @二转三

[@二转三]
#IF
CHECKGAMEGOLD > 1999
#ACT
gamegold - 2000
RENEWLEVEL 1 0 200
#CALL [\封号系统\封号系统.txt] @封号系统
#CALL [\封号系统\名字变色.txt] @名字变色
SendCenterMsg 253 180 恭喜<$USERNAME>二转成功,奖励可自由分配属性点200个!
#ELSESAY
哦!你连2000个元宝都没有!等凑足了元宝再说吧!


大家有木有发现这个脚本有什么漏洞,一般来说没什么问题,各种逻辑什么的都是正确的,但是这里用到了5个goto,因为一转要符合55级以上加1000个元宝,二转要符合60级以上加2000个元宝,并且都要一级级来转,5个goto就代表了5个检测条件,思路很正确,但是何必要用5个goto呢?一定程度上加大了引擎的负荷以及为死循环创造了条件!因为还有另外一种方式,看看是不是更简单一些

[@一转]
#IF
CHECKLEVELEX < 55
#ACT
Messagebox:哦!你的等级还没有55级哦!先升级再说吧
break

#IF
CHECKRENEWLEVEL > 0
#ACT
Messagebox:哦!你都进行过一转了还来干吗?
break

#IF
CHECKGAMEGOLD > 999
#ACT
gamegold - 1000
RENEWLEVEL 1 0 100
#CALL [\封号系统\封号系统.txt] @封号系统
#CALL [\封号系统\名字变色.txt] @名字变色
SendCenterMsg 253 180 恭喜<$USERNAME>一转成功,奖励可自由分配属性点100个!
#ELSESAY
哦!你连1000个元宝都没有!等凑足了元宝再说吧!


[@二转]
#IF
CHECKLEVELEX < 60
#ACT
Messagebox:哦!你的等级还没有60级哦!先升级再说吧
break

#IF
CHECKRENEWLEVEL > 1
#ACT
Messagebox 错误:你都进行过二转了还来干吗?有病呀你!
break

#IF
CHECKGAMEGOLD < 2000
#ACT
Messagebox:哦!你连2000个元宝都没有!等凑足了元宝再说吧!
break

#IF
CHECKRENEWLEVEL = 1
#ACT
gamegold - 2000
RENEWLEVEL 1 0 200
#CALL [\封号系统\封号系统.txt] @封号系统
#CALL [\封号系统\名字变色.txt] @名字变色
SendCenterMsg 253 180 恭喜<$USERNAME>二转成功,奖励可自由分配属性点200个!
#ELSESAY
哦!你都还没一转呢,一转了再来吧!


好了来看看这样是不是很简单,一个goto都没有又少了很多个段落,当然这是一个很简单的例子,但是他的实际用途是非常广泛的,这里尤其要是注意的是在一些每秒执行的定时器或者机器人脚本里面这么来写非常重要,每秒执行的脚本如果goto太多的话对引擎的负荷是很明显的,也是最容易出现脚本死循环的地方!包括站里我以前发的一些脚本或者最近有坛友也提出这么个问题,毕竟我也是一腔热血嘛!希望用到之前脚本的来看看这个帖子!

最后我们来总结一下,要简化一个脚本应该注意什么!我认为我的脑袋瓜子应该是挺好使的!但是真的我文采不好,说不出个一二三来,我也只能说如果检测条件多的话难检测的条件应该是在最上面的,因为脚本都是一级一级往下执行的!同时要善于运用break,少用#ELSEACT+@goto!希望碎痕斑斑和walk斑斑或者站内的高手们能补充一下
等级头衔

等級:什长

Rank: 3Rank: 3Rank: 3

积分成就
精华
0
G币
0
主题
0
帖子
71
金币
673

建功勋章

最佳新人活跃会员

发表于 2022-12-25 05:26:34 | 显示全部楼层
支持屌丝大作 很牛X
等级头衔

等級:什长

Rank: 3Rank: 3Rank: 3

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

建功勋章

最佳新人活跃会员

发表于 2022-12-25 07:48:49 | 显示全部楼层
我看不错噢 谢谢楼主!GM爱好者:www.gmahz.com越来越好!
等级头衔

等級:知府

Rank: 12Rank: 12Rank: 12

积分成就
精华
0
G币
0
主题
34
帖子
556
金币
8975

建功勋章

最佳新人活跃会员

发表于 2022-12-25 09:13:41 | 显示全部楼层
努力赚币中。。。
等级头衔

等級:郡王

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
精华
0
G币
0
主题
0
帖子
10043
金币
170694

建功勋章

热心会员推广达人宣传达人灌水之王突出贡献最佳新人活跃会员

发表于 2022-12-25 09:13:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
等级头衔

等級:郡王

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
精华
0
G币
0
主题
0
帖子
9985
金币
169464

建功勋章

热心会员推广达人宣传达人灌水之王突出贡献最佳新人活跃会员

发表于 2023-3-31 18:35:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
等级头衔

等級:里正

Rank: 4

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

建功勋章

最佳新人活跃会员

发表于 2023-4-4 18:40:08 | 显示全部楼层
楼主,我太崇拜你了!我想我是一天也不能离开GM爱好者:www.gmahz.com
等级头衔

等級:知府

Rank: 12Rank: 12Rank: 12

积分成就
精华
0
G币
0
主题
35
帖子
535
金币
8617

建功勋章

最佳新人活跃会员

发表于 2023-5-3 10:44:01 | 显示全部楼层
其实我一直觉得楼主的品味不错!呵呵!GM爱好者:www.gmahz.com太棒了!
等级头衔

等級:郡王

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
精华
0
G币
0
主题
40
帖子
1509
金币
12326

建功勋章

热心会员突出贡献最佳新人活跃会员

发表于 2023-5-4 17:22:23 | 显示全部楼层
路过支持一下
等级头衔

等級:郡王

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
精华
0
G币
0
主题
1
帖子
5560
金币
94519

建功勋章

发表于 2023-5-5 09:22:10 | 显示全部楼层
拿币走人。。。。
*滑块验证:
懒得打字嘛,点击右侧快捷回复 【GM爱好者:www.gmahz.com】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-8 00:33 , Processed in 0.169376 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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