赛尔号对战c语言程序,赛尔号计算解析系列文章(第一期)

(注意:为了方便起见,本文所讨论能力值,仅由种族值、个体、性格、学习力这4个基础值决定,默认等级为100级,不计算刻印、战队加成、称号、套装、魂印、年费加成、特训、道具加成。)

为了方便大家对数据进行理解,首先请仔细阅读精灵能力计算公式的有关内容。

【精灵满级基础能力计算公式】

①五项能力值=Int[((种族值×2+学习力÷4+个体)+5)×性格修正]

②体力能力值= Int [(种族值×2+学习力÷4+100+个体)+10]

【计算公式备注】

1、精灵的攻击、特攻、防御、特防、速度这五项能力采用公式①计算,精灵的体力能力采用公式②计算。

2、精灵的除了体力之外的五项能力值受性格影响,即存在性格修正,其数值是这样的:提升项数值为1.1,平衡项为1.0,降低项为0.9。

3、公式中Int代表取整,在得出计算结果后,直接舍去小数部分进行取整,获得基础能力值(基础能力值是赛尔号精灵能力早期完善的能力值,仅由种族值、个体、性格、学习力、等级决定)。

对于精灵能力的计算公式有了一定了解,接下来,我们再来对精灵的学习力对于能力的影响进行分析。

【计算公式分析】

①平均来看,每4个学习力即可提升1个能力值。

②当性格修正为1.0或者无性格修正(体力)时,学习力刷252即可达到极限;

③当性格修正为1.1时,刷254或者255才可以达到极限,至于到底刷多少,需要做以下计算:

设种族值个位数为a,个体值个位数为b,令x=2a+

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以前分享过摩尔庄园、奥比岛等发包例子,后来官方更改了加密手段,这次分享个赛尔号的发送数据例子 切勿用于非法用途,本贴只用于技术交流与学习 赛尔号通信数据的逆向分析与还原(思路篇) 0x01 前言 flash游戏即将淘汰,被称为最强的as加密方式Alchemy被应用于一些主流的页游,很多游戏都转战h5或者手游端。今天闲来没事,就上手一款童年游戏。"赛尔号",应该是全网首发吧 0x02 准备工具 FFDEC(强大的免费开源swf反编译工具) 、 Chrome浏览器 、在线Hex编辑 0x03分析过程 使用 浏览器加载游戏并 通过 开发者工具抓取到数据包可以发现一个dll.xml的配置文件此游戏的习惯将核心数据存放于==TaomeeLibraryDLL.swf==文件当中。此时直接将swf文件拖入FFDec会发现,读取失败。需要拖入Hex编辑器搞一下==CWS== 是标识码 具体可以参考 Swf文件头信息,前面则是一些无关紧要的数据。可以看到在Client.swf里对于swf文件的加载是这样处理的 private function onComplete(e:Event) : void         {             var info:DLLInfo = this._dllList[0];             var byteArray:ByteArray = new ByteArray();             if(this._isRelease)             {                 this._stream.readBytes(new ByteArray(),0,7);//相当于设置了位置 前面可以看出到,标识码前面有7个字节是无用的数据 gt;gt;  this._stream.potion=7             }             this._stream.readBytes(byteArray);//             if(this._isRelease)             {                 byteArray.uncompress();//再进行Zlib解压处理             }             this._stream.close();//关闭字节流             //然后就加载             this._loader.loadBytes(byteArray,new LoaderContext(false,ApplicationDomain.currentDomain));         } 思路清晰,可以干代码,这里使用了易语言 导出文件 可以,再将其导入FFdec看看效果。解压后,开始找与通讯的类。一般搜索flash.net.Socke即可==send(param1, param2) #4CAF50==发送数据包的函数 public function send(param1:uint, param2:Array) : uint         {             var loc3_:* = null;             var loc4_:* = null;             if(this.connected)             {                 loc3_ = this.pack(this.userID,param1,param2);                 loc3_.position = 0;                 loc4_ = MessageEncrypt.encrypt(loc3_);//这里就开始加密了                 writeBytes(loc4_);//整个数据丢给                 flush();//这里就是发送数据出去了                 this.sendDataError(param1);                 DebugTrace.show("gt;gt;Socket[" + this.ip + ":" + this.port.toString() + "][cmdID:" + param1 + "]",getCmdLabel(param1),"[data length:" + this._sendBodyLen + "]");                 //这里可以清晰的看出 param1是数据包的命令码,param2为数据的整体                 retur

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值