代码角度分析宠物成长转生

2018-04-10 17:40 石器新闻 石器时代

先寒暄两句
刚玩石器的时候,自己还是个学生,那时候漆黑都还没开;现在官服都挺尸好几次了,自己也做了几年游戏开发了,片片服也89年了
以前毛都不懂,毛乱敏双转放地练宠转生转宠,到底是怎毛回事;现在的思维方式,也是本文的主要观点:游戏都是代码跑的
我不知道我算片片服第几批玩家,反正0809年那会充个值还是转片片的银行卡,片片自己兼职GM/客服/网站/宣传/订盒饭送水洗衣服;现在的片片服已经小具规模,啥客服论坛有模有样的,群里也新人辈出。这么多年的成长,还是很值得欣喜的。官服挺尸了,还是感谢片片给了大家继续石器的机会。但黑锅总还是得有人来背,所以大家还是继续在群里轮片片吧
感谢不服全葬,哈吃那一批前辈,当年没少看他们的经验分享,就是不知道现在是不是还活着,还有很多名字,脑子不好使实在记不住了
本文引用资料均收集自网络,原作者不可考,我也就没办法列出一堆名字,但个人还是十分感谢原作者的研究及分享
正文会有点长,而且略微枯燥,都是计算和代码相关的,结论的话,文末可能会有。我尽量写得通俗易懂
我就一菜逼,我所做的就是收集和整理前辈的研究,整理成文,用尽量简单的方式分享出来,所以本文可能会告诉你500敏是怎么来的,但不会告诉你怎么撸出500敏来(自己去找片片做py交易)
从来没有正经写过什么,仅以此文纪念石器

正文
基础属性系统
先说一个大家都烂熟的东西:
角色出渔村门,啪啪了几只乌力,升级了获得3点红利(暂且这么叫吧):我要把3点加到速度上,敏捷就可以提高3点,我要把敏堆到60好去打大象;我要把3点加到体力上,血就会涨3*4点,我要把血堆上1000免得被地雷飞
这个大家太熟,好像我在废话了。但是越是熟悉的东西,越可能被大家忽略。我们要讨论的标题是宠,对,睡醒的同学可能已经反映过来了:宠也是体力/腕力/耐力/速度换算攻防敏的
石器的基础属性系统,是由体力/腕力/耐力/速度4个主属性,通过公式换算成攻防敏的
=体力*4+腕力+耐力+速度
=体力*0.1+腕力+耐力*0.1+速度*0.05
=体力*0.1+腕力*0.1+耐力+速度*0.05
=速度
基础属性系统,人和宠是一套算法,最后的小数截尾取整
对于人来说,攻防敏换算11,血换算14,常规的算法。0.10.05的部分常规计算都忽略了,但其实0腕力也不等于攻击就永远不变,对于敏人来说,虽然不关注攻击,但攻击还是缓慢在涨的,就是0.10.05起的作用。这里还牵涉到属性价值的计算,不是本文的重点,有兴趣的同学可以自己开个excel算算看。从程序功能模块来说,版面攻防=基础属性的红利加点换算+装备系统数据,这里就不展开了
对于宠来说,常规游戏只能看到计算后的攻防敏,但其实片片已经开放NPC查基础属性了,不要告诉我你从来没有和医院柜台角落那个npc说过话
验算一下:
 代码角度分析宠物成长转生 石器新闻 第1张石器时代图片石器so石器sf石器时代私服疯狂原始人
我自己角色的新鲜截图,红利316/100/100/200,四围1664/100/151/151/200带入公式计算
=体力*4+腕力+耐力+速度=316*4+100+100+200=1664
=体力*0.1+腕力+耐力*0.1+速度*0.05=316*0.1+100+100*0.1+200*0.05=151.6
=体力*0.1+腕力*0.1+耐力+速度*0.05=316*0.1+100*0.1+100+200*0.05=151.6
=速度=200


 代码角度分析宠物成长转生 石器新闻 第2张石器时代图片石器so石器sf石器时代私服疯狂原始人  代码角度分析宠物成长转生 石器新闻 第3张石器时代图片石器so石器sf石器时代私服疯狂原始人 代码角度分析宠物成长转生 石器新闻 第4张石器时代图片石器so石器sf石器时代私服疯狂原始人
NPC抓个片片试试
=体力*4+腕力+耐力+速度=6*4+9.8+5.2+6.2=45.2
=体力*0.1+腕力+耐力*0.1+速度*0.05=6*0.1+9.8+5.2*0.1+6.2*0.05=11.23
=体力*0.1+腕力*0.1+耐力+速度*0.05=6*0.1+9.8*0.1+5.2+6.2*0.05=7.09
=速度=6.2
成长档
人的红利是我加上去的,那宠的红利体力/腕力/耐力/速度是哪来的呢,这里就要引入成长档的概念了。成长档是网上普遍的叫法,这里就沿用这个名字,其实我个人更倾向于这个东西叫宠物的种族值。简单来说:
=>基础属性红利加点=>换算攻防敏
=>成长档=>换算基础属性=>换算攻防敏
这一部分会有大量的计算和程序概念,我只能尽量说的通俗易懂一些
宠物的属性(这里都是程序概念上的属性,不是说攻防敏)主要是在2个配置:enemy1enemybase。刷宠改牛逼变态宠加新宠,主要都是改这2个配置
enemy1是一个34位的一维数组,参数主要控制宠的战斗设置,掉落等属性。调用enemybase
enemybase是一个56位的一维数组,参数基本决定了所有宠物本身的相关属性。成长档相关的在这个数组第813
GM命令petmake是调用enemy1id,别问我GM命令,网上一搜一大把,拿着也没用,需要权限的
我们关心的其实是 enemybase的参数。enemybase是一个很有意思的东西,里面的每个字段弄清楚意思以后,基本可以解释所有和宠物相关的东西,例如捕捉难度,克制属性,精灵抗性,暴击反击(npc可查,你说命中闪避,那个在战斗代码部分),合成能力(我很诧异威威竟然合成能力和修宝一样!),可融合(片片你敢不敢把-1都改成0…)。这里不再展开了,因为这里都是相关系统功能的配置,每个参数都能展开到相关功能……
创建1级宠
成长档到底怎么换算到基础属性,我们还是实际举个栗子来说好了,还是那只片片。流程和公式会先给出,相关代码附在后面,有兴趣的也可以看一看
1Enemybase1文件,查找是史卡鲁,第813位为20,4.50,28,43,22,28,六个参数的意义顺序为:
20,初始能力系数
4.50,成长系数(计算用参数,和外挂算的成长没关系)
28,体力成长档
43,腕力成长档
22,耐力成长档
28,速度成长档
2)对四个成长档进行+RANDOM(-2,2)(随机加一个-2+2的整数上去)
假设我们的片片是无敌极品,每一个随机都摇到+2,那么四围成长档就是30/45/24/30
3)保存,很重要。2)影响成长,可以理解为这只宠的0级基础属性,4)只影响初始1级,本质上它是0=>1级的升级属性。后面会详细讲
4)把10个点数随机的增加到四围上
我们考虑一般的均匀情况(纯概统问题,别我为啥不是10/0/0/0),+3/+3/+2/+2,那么我们的无敌片片四围就是33/48/26/32
5公式:初始单项数值=((等级-1)*单项成长档+初始单项变量)*初始能力系数/100
因为我们只考虑1级的情况,所以公式化简为:
初始单项数值=初始单项变量*初始能力系数/100
体力=20*33/100=6.6
腕力=20*48/100=9.6
耐力=20*26/100=5.2
速度=20*32/100=6.4
6)套用基础属性部分的公式
=体力*4+腕力+耐力+速度=6.6*4+9.6+5.2+6.4=47.6
=体力*0.1+腕力+耐力*0.1+速度*0.05=6.6*0.1+9.6+5.2*0.1+6.4*0.05=11.1
=体力*0.1+腕力*0.1+耐力+速度*0.05=6.6*0.1+9.6*0.1+5.2+6.4*0.05=7.14
=速度=6.4
取整后我们的无敌片片四围为47/11/7/6,老玩家有没有觉得这个四围很亲切,原版片片的极品四围
再回头看看我们第一部分临时抓的片片,反推可得成长档四围为30/49/26/31,其实已经是相当不错的片片了
附代码:
/* パラメータ指数から実際の基本パラメータへの計算式 */
#if 1
#define        PARAM_CAL( l)     ( ( level -1)*ET_PAR( E_T_LVUPPOINT)+ET_PAR(E_T_INITNUM)) * ET_PAR( (l))
#else
#define        PARAM_CAL( l)     ( (E_PAR(ENEMY_LV) -1)*ET_PAR(E_T_LVUPPOINT)+ ET_PAR(E_T_INITNUM)) * ET_PAR( (l))
#endif
   /* 先ず基本割り振りポイントに±2をランダムで行う */
   tp[E_T_BASEVITAL] += RAND( 0, 4 ) - 2;
   tp[E_T_BASESTR] += RAND( 0, 4 ) - 2;
   tp[E_T_BASETGH] += RAND( 0, 4 ) - 2;
   tp[E_T_BASEDEX] += RAND( 0, 4 ) - 2;
   /* この時点で割り振りポイントを保存しておく */
   CharNew.data[CHAR_ALLOCPOINT]
    =( tp[E_T_BASEVITAL] << 24 )
    +( tp[E_T_BASESTR] << 16 )
    +( tp[E_T_BASETGH] << 8 )
    +( tp[E_T_BASEDEX] << 0 );
   /* その後、ランダムでポイントを1づつ加算。これを10回繰り返す。*/
   for( i = 0; i < 10; i ++ ){
       int work = RAND( 0, 3 );
       if( work == 0 )tp[E_T_BASEVITAL]++;
       if( work == 1 )tp[E_T_BASESTR]++;
       if( work == 2 )tp[E_T_BASETGH]++;
       if( work == 3 )tp[E_T_BASEDEX]++;
    }
   /* パラメータセット */
   CharNew.data[CHAR_VITAL]    =PARAM_CAL(E_T_BASEVITAL);
   CharNew.data[CHAR_STR]      =PARAM_CAL(E_T_BASESTR);
   CharNew.data[CHAR_TOUGH]    =PARAM_CAL(E_T_BASETGH);
   CharNew.data[CHAR_DEX]      =PARAM_CAL(E_T_BASEDEX);
成长
公式平均单项成长率=(单项成长档+2.5)*档次补正係数/100
档次补正係数=
(4.75(当宠物平均总成长档不低于100;或转生后的宠物总成长档不低于130)
4.95(当宠物平均总成长档在95~99间;或转生后的宠物总成长档在100~129)
5.15(当宠物平均总成长档在90~94间;或转生后的宠物总成长档在95~99)
5.35(当宠物平均总成长档或转生后的宠物总成长档在在85~89)
5.55(当宠物平均总成长档或转生后的宠物总成长档在在80~84)
5.75(当宠物平均总成长档或转生后的宠物总成长档小于80)
说明:上面的2.5/4.75/4.95等均为期望。原公式推导过程中,2.5的部分实际代码上的操作和创建一级宠的部分相同,是把10个点数随机分到4项成长档里面。档次补正为上面的值+-2.5(意思就是说你可能每次升级都随机到4.75+2.5,有这运气你还玩什么片片,去买彩票吧少年)
成长档的成长率到攻防敏的成长率的换算,同成长档到攻防敏的换算
我们引用两个栗子来说明这部分:
1)红人的平均成长档为24/38/16/20,总成长档为98,档次补正係数为4.95
极限极品的0转红人成长档为26/40/18/22,则
体力成长率=28.5*4.95/100=1.41(不四捨五入保留两位小数)
腕力成长率=42.5*4.95/100=2.10
耐力成长率=20.5*4.95/100=1.01
速度成长率=24.5*4.95/100=1.21
血成长率=1.41*4+2.10+1.01+1.21=9.96
攻成长率=1.41*0.1+2.10+1.01*0.1+1.21*0.05=2.4025
防成长率=1.41*0.1+2.10*0.1+1.01+1.21*0.05=1.4215
敏成长率=1.21
三围成长率=2.4025+1.4215+1.21=5.034
这就是极限极品的红人的平均成长,1.21的敏乘以119级,2.4的攻乘以119级,150的敏捷线,300的极限攻,1.82时代的老玩家有木有很熟悉的感觉
2)再举一下满石mm的栗子,女宠的平均成长档为25/25/25/25,算出来的总成长档为100,档次补正係数为4.75
石头=加成长档
满石女宠的成长档为50/50/50/50
所以体力成长率=52.5*4.75/100=2.49
腕力成长率=52.5*4.75/100=2.49
耐力成长率=52.5*4.75/100=2.49
速度成长率=52.5*4.75/100=2.49
血成长率=2.49*4+2.49+2.49+2.49=17.43
攻成长率=2.49*0.1+2.49+2.49*0.1+2.49*0.05=3.1125
防成长率=2.49*0.1+2.49*0.1+2.49+2.49*0.05=3.1125
敏成长率=2.49
三围成长率=3.1125+3.1125+2.49=8.715
和我们知道的满石mm成长率基本一致
档次补正解释了很多事情,由于档次线的划分,卡在档次线附近的宠很容易发生转爆和神转的事情,后面转生还要再说它,附上原版5色人龙的数据,算下就会豁然开朗(后面有详细计算):
红人(邦奇诺)24/38/16/20 98
蓝人(扬奇洛斯)27/36/16/20 99
黄人(布鲁顿)25/35/14/24 98
绿人(利泽诺顿)27/37/19/17 100
灰人(邦浦洛斯)25/37/15/21 98
还是附个代码:
int CHAR_PetLevelUp( int petindex )
{
   struct _RankRandTbl{
       int min;
       int max;
   }RankRandTbl[] = {
       { 450, 500 },
       { 470, 520 },
       { 490, 540 },
       { 510, 560 },
       { 530, 580 },
       { 550, 600 },
   };
    floatParam[4] = { 0.0, 0.0, 0.0, 0.0 };
   int LevelUpPoint, petrank;
   float str, vital, dex, tgh, fRand, i;
#ifdef _TEACHER_SYSTEM
    intiGetFame = 0;
#endif   
   // 引数チェック
   if( CHAR_CHECKINDEX( petindex ) == FALSE )    return -1;
   if( CHAR_getInt( petindex, CHAR_WHICHTYPE ) != CHAR_TYPEPET )return -1;
   LevelUpPoint = CHAR_getInt( petindex, CHAR_ALLOCPOINT );
   // ペットのランク
   petrank = CHAR_getInt( petindex, CHAR_PETRANK );
   if( petrank < 0 || petrank > 5 ) petrank = 0;
   vital = (float)(( LevelUpPoint >> 24 ) & 0xFF);
   str = (float)(( LevelUpPoint >> 16 ) & 0xFF);
   tgh = (float)(( LevelUpPoint >> 8 ) & 0xFF);
   dex = (float)(( LevelUpPoint >> 0 ) & 0xFF);
   // 10回4面体サイコロを振って各项目に1足す
   for( i = 0; i < 10; i ++ ){
       Param[RAND( 0, 3 )] += 1.0;
    }
   // ランクによる范囲のランダム
   fRand = (float)RAND( RankRandTbl[petrank].min, RankRandTbl[petrank].max)
        * 0.01;
   // 割り振りポイントより计算
   vital = (float)vital * fRand + Param[0] * fRand;
   str = (float)str   * fRand +Param[1] * fRand;
   tgh = (float)tgh   * fRand +Param[2] * fRand;
   dex = (float)dex   * fRand +Param[3] * fRand;
   CHAR_setInt( petindex, CHAR_VITAL,
       CHAR_getInt( petindex, CHAR_VITAL ) + (int)vital );
   CHAR_setInt( petindex, CHAR_STR,
       CHAR_getInt( petindex, CHAR_STR ) + (int)str );
   CHAR_setInt( petindex, CHAR_TOUGH,
       CHAR_getInt( petindex, CHAR_TOUGH ) + (int)tgh );
   CHAR_setInt( petindex, CHAR_DEX,
       CHAR_getInt( petindex, CHAR_DEX ) + (int)dex );
转宠
恩终于到重点了,我们还是用几个栗子来说明公式
  
0转平均成长档,
  or装后成长总档
  
档次补正系数
转生增幅系数
>=100,>=130
4.75
11
95~99,100~129
4.95
12
90~94,95~99
5.15
12
85~89,85~94
5.35
13
80~84
5.55
14
<80
5.75
15
平均转后单项档=(转生增幅系数+转前总成长档)*(50+4*单项档)/(150+4*转前总成长档)
转后单项成长档=平均转后成长档+随机[-2~+2]
一转时,转生增幅系数+转前总成长档若超过150,则按150计算
二转时,转生增幅系数+转前总成长档若超过200,则按200计算
说明:这个公式是化简过的,完整的在后面。公式中的50150,都是mm参数,这里直接取了最大值,mm相关会在最后说明,增幅系数实际上也是算出来的。简单的说就是可控的参数公式都取了最大值。这里把mm参数作为一个常数来处理,正常情况下我想没人会用残废mm去转吧…….
这个公式说明了很多问题:mm实际上只取了成长档(50150的计算过程,后面有),宠的单项提高是受所占总比例限制的(所以我们的老虎他喵的不长敏,全在长防),宠的极限成长也是由这里控制。数学好的直接撸这个公式都能撸出很多东西来
随手拉了个表,我们先看看这公式,提示500/160=3.125,可怕不
 代码角度分析宠物成长转生 石器新闻 第5张石器时代图片石器so石器sf石器时代私服疯狂原始人
栗子就直接引用两个前辈的栗子,已经说得很详细了:
######2轉頂級機暴
翻看成長檔庫,可知0轉頂級機暴成長檔分別為25,37,27,21,總成長檔112,種族成長檔104
查表格,可知104對應的轉生增幅係數為11
則轉後平均體力檔=(112+11)*(50+4*25)/(150+4*112)=30.85→去小數點得到30
平均腕力檔=(112+11)*(50+4*37)/(150+4*112)=40.72→去小數點得到40
同理可算出平均耐力檔、平均速度檔為3229
則極限成長檔即轉後平均檔的基礎上各+2,可以得到32/42/34/31,總139
來計算一下成長率,查表可知轉後139成長檔對應的檔次補正係數為4.75,可以算出血攻防敏成長率大概為:11.944/2.531/2.189/1.591;總6.311
繼續套用公式計算2轉頂級成長,139檔對應的轉生增幅係數是11,所以轉後平均體力檔=(139+11)*(50+4*32)/(150+4*139)=37
同理算出平均腕力檔、耐力檔、速度檔分別為:463936
頂級成長檔即在這基礎上各+2、得到39,48,41,38
換算為成長率即14.274/2.9/2.6/1.9247.424
######2轉頂級紅人
查成長檔庫可得知頂級紅人成長檔:26,40,18,22,總106;種族成長檔98,所以增幅係數為12
用同樣的方法算出1轉後平均成長檔:31,43,25,28;則頂級1轉紅人成長檔為33,45,27,30135
對應成長率:11.946/2.642/1.873/1.544 6.059(一轉頂成長檔不代表一轉頂成長率,後面我會解釋原因)
用同樣的方法繼續可以計算出2轉頂級成長檔:40,50,35,37
換算成成長率即14.226/2.968/2.326/1.8767.17
上面說的成長率只是理論最高,實際上是很難達到的
可以簡單的計算一下,0轉挑到頂級檔次寵的概率是1/625,在這基礎上,如果還要轉出頂級檔次的寵,那就要再乘上1/625;這樣已經是萬中無一了
如果再算上2轉,還要再這基礎上再乘以1/625
算出來結果是0.0000004096%的概率可以拿到一隻頂級2轉寵,去抽獎都更實際一點...
这一部分我没搞到上面那种日版代码,附上我这里的资料:
附錄:
(寵物轉生源碼太多太冗長,在這裡就不再列出)
完整轉生公式(想進一步研究殘轉的朋友可以看一下):
total1=女寵總成長檔,若超過150則按150
total=(total1/100)5次方 (也就是說暴女的total1值是1.55次方)
算出來的total值如果小於1,則total0,否則total變成1.3
暴女的total即為7.59375乘以1.3,去小數點後得到9;殘女的total值為0
Fix=((5-rank)*1.2)+5  (無條件捨去小數點)
rank值由總成長檔決定,我簡單點說,4.75檔次補正係數對應04.95對應15.15對應2……一直到5.75對應5
轉前等級,若高於130,則按130
轉生增幅係數=total(無條件捨去小數點)  + (轉前等級-100)/fix(無條件捨去小數點)
平均轉後單項檔=(轉生增幅係數+轉前總成長檔)*(女寵對應單項檔+4*單項檔)/(total1+4*轉前總成長檔)
几个栗子
上面那么多字,可以用来解释很多曾几何时困扰我们的问题
我手上的资料一些资料,虽然原作者不可考,但还是感谢原作者
1请看这两隻机暴
28/40/29/30 总:127
31/40/29/30 总:130
这两隻都是一转机暴,只看成长档的话,后面那只多3体力,按理来说成长不会比前面那只低,
但是计算出来的实际成长率是怎样的呢?
我们先看第一隻机暴,28/40/29/30,总127,查档次补正係数为4.95
那麽体力成长率=30.5*4.95/100=1.50
腕力成长率=42.5*4.95/100=2.10
耐力成长率=31.5*4.95/100=1.55
速度成长率=32.5*4.95/100=1.60
血成长率=1.50*4+2.10+1.55+1.60=11.25
攻成长率=1.50*0.1+2.10+1.55*0.1+1.60*0.05=2.485
防成长率=1.50*0.1+2.10*0.1+1.55+1.60*0.05=1.99
敏成长率=1.60
三围成长率=2.485+1.99+1.60=6.075
再看第二隻机暴,31/40/29/30,总130,查档次补正係数为4.75
那麽体力成长率=33.5*4.75/100=1.59
腕力成长率=42.5*4.75/100=2.01
耐力成长率=31.5*4.75/100=1.49
速度成长率=32.5*4.75/100=1.54
血成长率=1.59*4+2.01+1.49+1.54=11.4
攻成长率=1.50*0.1+2.10+1.55*0.1+1.60*0.05=2.395
防成长率=1.50*0.1+2.10*0.1+1.55+1.60*0.05=1.927
敏成长率=1.54
三围成长率=2.395+1.927+1.54=5.862
看到问题了吗??明明第2隻机暴成长档比第1双多3体力档,但是实际成长率却是前者要高0.2
究竟是为什麽?
罪魁祸首是档次补正係数,因为大于130成长档的宠,和100129成长档的宠,
它的档次补正係数不一样。这样的话是不是说转生后成长档不要太高比较好?不是的,
且听我跟你慢慢解释
关键是现在这两隻机暴都是1转,也就是说,还可以2转,而2只机暴的成长档一个是127一个是130
2转以后只要女宠没问题,它们的成长档都将必定超过130。所以2转以后,
它们的档次补正係数也肯定是一样的,都是最低的4.75所以说把两隻机暴都拿去二转的话,
转后平均成长第2只不会低于第一隻!
2档次补正係数可以解决我们以前想破脑袋都想不通的事情,例如为什麽绿人特别容易神转?
我把5色人龙的平均成长档都列出给大家看一下
红人(邦奇诺)24/38/16/20 98
蓝人(扬奇洛斯)27/36/16/20 99
黄人(布鲁顿)25/35/14/24 98
绿人(利泽诺顿)27/37/19/17 100
灰人(邦浦洛斯)25/37/15/21 98
聪明的同学肯定很快就明白问题出在哪裡了,没错,5色人龙裡面,只有绿人的平均总成长档达到了100
而达到100或以上,就意味著它的成长要被打折扣,其他四色人龙的档次补正係数都是4.95
就只有它的是4.75,所以0转时绿人的成长很难超过4.8,就是这个原因
而一转的时候,无论是哪一色人龙成长档大多都落在100~129这个区间(有可能
达到130或以上,但很难),他们的成长补正係数都将会是4.95
这就是为什麽绿人转前成长比其他的人龙都差一个档次,转后却和其他人龙到达同个档次的原因了。
3【是什麼原因造成一些寵一轉容易神轉,二轉容易轉爛】
以這類寵的典型代表,機暴為例,機暴轉前平均成長檔為104,所以對應圖中成長檔在100以後的藍線。
因為機暴的平均成長檔即代表可能性最大的情況,我就用104平均檔的機暴來給大家做計算
機暴平均成長檔為23,35,25,21 轉前成長率用4.75係數算出結果為:9.049/2.089/1.661/1.116,總4.866
把這雙機暴拿去1轉,平均轉出來會是怎麼樣呢,我們可以用公式計算以後可以得到轉後平均成長檔28,38,30,27,總123,對應檔次補正係數為4.95,計算出成長率為11.113/2.39/2.033/1.46,總5.883。很多寵物神轉才有+1的加成,但是為什麼機暴平均就可以+1?罪魁禍首就是檔次補正係數,檔次補正係數高,相當於整體拔高了成長率
1轉以後,因為總成長檔落在100~129這個區間,所有對應成長率和成長檔的關係就會由圖中的藍色線變成紅色線,成長率自然會高一些
那為什麼2轉又容易轉爛呢?我們繼續拿這隻5.883的機暴做分析
成長檔為28,38,30,27,算出來的轉後平均成長檔為33,42,35,32,總142,對應檔次補正係數為4.75,計算出成長率為12.279/2.542/2.243/1.639,總6.424
6.424-5.883=0.541
為什麼1轉平均可以加1、但2轉平均只能加0.54?原因還是檔次補正係數在搞鬼,1轉的時候,總成長檔為123,落在100~129這個區間,所以檔次補正係數是4.95;但2轉的時候成長檔為142,落在>=130這個區間,所以檔次補正係數變回了4.75
如果從圖表看的話,那就是由100129區間的紅線轉到了>=130的紅線,也就是說,增加了成長檔,但是平均成長率被檔次補正係數拖垮了
總結:造成一部分寵1轉容易神轉,2轉容易轉爛的原因,是因為檔次補正係數經歷了4.754.954.75的變化,讓我們有了一種1轉神轉的錯覺,其實他們的轉生規律和其他寵是一致的
2(6.424-4.866)/2算一下2次轉生平均加點就知道,平均加點是0.779;也就是說,0轉到一轉神轉可以說是透支了1轉到2轉的一部分轉生點數,然後1轉進行2轉的話,效果就不那麼明顯了
會有這種現象的寵物為種族成長檔在100出頭的寵,例如紅暴、機暴、綠人龍
主要的都说完,说点其他的
有同学会说,这些都是官服的数据,片片会改数据
**本质上来说,是非官方的运营,从部门职能上定位来说是运营,不是研发。就我个人在研发混的认识来说,和运营打的交道,基本上来说运营只会去修改配置。而且片片也没必要去改核心代码。一,工作量巨大,成本高。核心代码一动都是一发全身的事情,没有专人维护基本不可能搞定。程序猿圈子有这么一个冷笑话:今天有100bug,我们改了10个,还剩103bug。二,没有意义,直白来说就是不创收。我把白虎美术资源拿来p一下,enemybase加一行配置,出个斑点虎/彩虹虎/闪光虎/地狱虎,又可以卖998,多愉快。三,石器本身有一定的编辑功能,加一层楼加一套装备加一套宠加一套技能加一张地图,足以满足和维持游戏,干蛋还去整麻烦的?
其实通过游戏内老宠的测试,和mm的数据等,侧面也可以说明,片片也只是改配置,没动过太多代码。改配置,和改代码,完全两回事。其实就我个人来说,我只在意代码逻辑,配置多少行在我看来都是一回事。我在逛**服务器论坛的时候,还经常看见那种,有了GM命令,只知道把宠四围改成999/999/999/999的那种,然后各种问哎呀怎么还是不成长,怎么一转就没了,等等。这种就是典型不知道配置参数意义的栗子
简单的总结一下,我不敢保证我看到的代码和片片跑的代码完全一致,但大致上结论是一致的:
宠的初始高直接决定成长高,但只是单项高却不一定,还记得生成1级时随机加的那10个点数么,这10点不影响成长,但是会造成单项高的假象
宠转后数据是用转前数据算出来的,所以一个好的初始是极品宠的基础,对,只是基础
3 mm。转宠详细公式部分可以看出,转宠实际上只调用了mm的成长档,和攻防敏三围半毛钱关系都没有,对,半毛钱关系都没有。我自己实际使用的mm都是手动练的200出头的mm,但是满石一样也能转出好宠,我也测试过248的残废mm,我保证只转0.1/0.2…其实mm的影响也没有想象中那么大,这个“大”是指可控性方面,讨论上甚至可以直接设成常量计算
宠物升级代码部分,没有关于“死”“跳级”“满血升级”的代码。实际上除了mm吃石头,成长档都是出生就定死了。
从宠生成1级,到升级,到转,都没有发现[运气]字段(但是全程都写着一个字“看脸”)。战斗计算里面有这个字段,恩
想提高宠物单项,最科学的方法是提高总值….
代码有明确写,转生等级大于130130计算
什么,字还是太多?那再说简单一点:
50%:宠天生就决定是不是苗子了
50%mm是可控的,你需要挑战的敌人是0/1/2转一共三次概率1/625的随机[-2~+2]
50+50=选苗子,大力转,完了!


石器时代历史  PC端石器任务  石器时代俱乐部  石器cc  石器时代7.5