免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

[数据规律分析] 宠物设定集

本篇定位在新人仔细阅读理解后即可达到宠物能力大师的水平。

颜色规则
解说

基本设定

1.魔力的各种数值的显示都是对实际数值的取整(即略去小数点)

2.魔力的宠物的能力完全由其BP(Basic Point)决定(BP包括体力 力量 强度 敏捷 魔法 共计5个),之后再接受特殊情况的修正。
  2.1 宠物的能力包括:生命 魔力 攻击 防御 敏捷 回复 精神,总成7围;其中前5个又称5围,是现行流通的计算器所需要的数据。
   2.1.1各能力的基本数值分别为 20生命 20魔力 20攻击 20防御 20敏捷 100回复 100精神,这之上的改变完全依凭BP的变化。
  2.2 宠物的BP和能力的关系与人的这种关系不同

                                     表 2.1 宠物BP与能力的变化对应关系
生命魔力攻击防御敏捷回复精神
+1体力+8+1+0.2+0.2+0.1+0.8-0.3
+1力量+2+2+2.7+0.3+0.2-0.1-0.1
+1强度+3+2+0.3+3.0+0.2-0.1+0.2
+1敏捷+3+2+0.3+0.3+2.0+0.2-0.1
+1魔法+1+10+0.2+0.2+0.1-0.3+0.8


   2.2.1与人相比 宠物的BP增加对攻击和防御有着更大的提升效果 这其实是一种对于宠物没有武器、防具的弥补

                                   表 2.2 人物BP与能力的变化对应关系

生命魔力攻击防御敏捷回复精神
+1体力+8+1+0.1+0.1+0.1+0.8-0.3
+1力量+2+2+2.0+0.2+0.2-0.1-0.1
+1强度+3+2+0.2+2.0+0.2-0.1+0.2
+1敏捷+3+2+0.2+0.2+2.0+0.2-0.1
+1魔法+1+10+0.1+0.1+0.1-0.3+0.8


3.魔力中宠物升级时,BP会增长,表现在自然成长部分和玩家分配的1BP,其能力的变化完全由BP来决定。


  3.1魔力中的BP的增长是离散的(不是连续的),这些增长的不同的数值由TNT前辈首次提出,并对不同的增长值规定了名为“档次”的数值标准,档次和数值构成了一组有规律的数列。


下面就是TNT档次表
00 | 0    10   20   30   40

----|----------------------------------------------------

00 | 0.000 
01 | 0.040 0.460  0.88  1.30  1.72
02 | 0.080 0.500  0.92  1.34  1.76
03 | 0.120 0.540  0.96  1.38  1.80
04 | 0.160 0.580  1.00  1.42  1.84
05 | 0.205 0.625  1.045  1.465  1.885
06 | 0.250 0.670  1.09  1.51  1.93
07 | 0.290 0.710  1.13  1.55  1.97
08 | 0.330 0.750  1.17  1.59  2.01
09 | 0.370 0.790  1.21  1.63  2.05
10 | 0.415 0.835  1.255  1.675  2.095


表格中某个数字对应的横向和纵向的坐标加起来的数值就是其档次。例如,1.84的成长就是44档,或者说44档的成长是1.84。
除随机小量的影响因素外,TNT表是无误、精确的。
  3.2表格中简单的规律
   3.2.1同一横向的临近纵向的成长,差值都是0.42,一般的超过50的档次对应的成长也可由此推出
   3.2.2成长档尾数为 4 5 9 0(10)的四个档次和其高一档次的BP差值是0.045,其他的一档的差别是0.040
           因而,同样是“掉一档”,不同宠物的能力成长变化可能会不同

4.每一种宠物的5个BP的成长互相独立,并有档次范围。
  4.1 一般而言,这个档次范围是5,也就是这种宠物的某个BP的最高的成长档次-最低的成长档次=4,但是最低成长档不会是负数
  4.2现行流通的掉档的概念是指某个宠物的成长档次与最高成长档次的差值;
  4.3档次与星数的关连: 星数*10+-2=最高成长档的范围 例如4星对应的最高成长档的范围是38-42

       通过4.1可以知道,用掉档的概念来说,一种宠物最低的成长档次是“掉20档”,现在又简称为“20档”。


5.宠物的150定律
   对绝大部分魔力4.0之前有的宠物来说,如果将宠物技能栏的数目乘以5,再加上宠物的最高成长档,得到的数值会是150。
  可以理解为,1个技能栏的价值相当于5档的宠物能力。

例如所有的尸体类(非改造),除了木乃伊之外,都拥有9个技能栏,105档的最高成长档,而木乃伊拥有8个技能栏,最高成长档是110。

而不符合150定律的宠物也不少,他们是:
所有金卡类宠物,绝大部分的改造宠物,任务需要的特殊宠物(比如快枯死的树精),以及部分普通宠物(比如黑暗鸟人、水/火龙蜥、烈风/火焰哥布林、蓝/红色口臭鬼等)

不过大体来说,宠物的总能力评价值,也就是其技能栏*5+最高成长档会是150——螳螂是150,漂浮炸弹也是150。

从这里就可以看出,宠物掉20档和不掉档的差别不是“0和20”的差别,而是“130和150”的差别——这两个意义是不一样的


宠物BP分布和增长规律-宠物计算器基础

a) 未饲养时,宠物BP分布规律

1级宠物的BP分布规律的最终形态是由BOX玩家诸神在TNT的猜想下最先提出来的,并且通过大量的BOX其他玩家的验证通过。
宠物的BP分布规律是预测还没有饲养的宠物的好坏的基础。


对于未饲养的宠物,其BP分布与成长档次有直接关联,并且同时有一个随机数掩盖了这种直接的关联。我们叫这个随机数为“随机10档”。
BP分布与成长档次的关系使得对于没有养过的宠物的预测变的可能,而随机10档的影响,使得在通常情况下,无法得知宠物准确的掉档情况。

未饲养升级的n级宠物的BP是按照(0.2+(n-1)*seed)为单位进行分配的。宠物的某项BP上的成长档是多少,该BP上就会分到多少个单位的(0.2+(n-1)*seed),之外,还有10个单位的(0.2+(n-1)*seed)会被随机分配到五项BP上,这10个单位的(0.2+(n-1)*seed)就是随机10档。

式中seed被我们称为“系”,取值范围是0.040和0.045之间的6个步差为0.001的数。
其中0.045被我们成为0系(0X),0.040被我们称为5系(5X)。
从式中可以看出,对同表观档次高等级的野生宠物,0系和5系的BP差别在数值上是8:9

随机10档不会为负值,在参与计算未饲养升级的宠物的BP时,效果与档次无异,因而我用表观档次来表示两者的复合值。
对于一个确定的宠物,其某项能力的表观档次的所有取值可能与其最高成长档的差值范围是 -4~+10

绝大部分宠物都满足上述设定。
例外的情况出现于BP分配式中数值0.2的变化,这些例外包括:绝大部分的boss,王宫给的小蝙蝠和使魔,改造大炸弹,牛鬼系列宠物等
定义这个0.2的数值为BP倍率,把符合0.2的宠物的BP倍率规定为20,那么:
不同宠物的BP倍率
王宫给的小蝙蝠和使魔 30
牛鬼系列 30
改造大炸弹 35
boss 20 50-100
具体的资料不在这里列出。





b) 饲养宠物升级时,宠物的能力增长规律

首先要明确的是,随机10档和系这两个参数完全不会参与宠物饲养升级时的能力增长计算中,因而可以对比1级练的同成长档的宠物的BP,对野生的宠物做能力损失评测。进而将这部分损失的能力对应到不同等级的影响折算为折合掉档

宠物被饲养升级后,其BP增长完全参照TNT档次表计算,与宠物的种族、属性、是否受伤完全无关。

比如掉3攻2魔的黄蝎和掉4防1敏的蓝蝎的档次都是20 27 43 12 8,对应到TNT档次表中的同一套数值。
若这样掉档的黄蝎和蓝蝎未饲养时的表观档次一致,则在加点方法也一致的情况下,这两个宠物的BP和能力会永远一致。

为方便对比不同宠物的能力情况,我用实际档次来表示宠物掉档后的档次。

那么,对于任何一个宠物,其某个BP值的计算公式为
(BP倍率/100+(入手等级-1)*seed)*表观档次+bp增长值*(当前等级-入手等级)+玩家加点

考察TNT档次表,把每一个档次对应的BP增长值与档次相除,可以发现结果在0.0418附近,于是上面一个计算公式可以近似表达
(BP倍率/100+(入手等级-1)*seed)*表观档次+0.0418*档次*(当前等级-入手等级)+玩家加点

如果是1级入手的一般宠物,那么上述公式可以进一步粗略表达
(0.2+0.0418*(当前等级-1))*档次+玩家加点

这个表达式中省略了随机10档,但是在猜宠游戏中非常有效。


另外,宠物的的“暴点”判定与玩家人物的判定不同:
1.宠物的自然成长最优先完成,暴点判定仅在加点时才出现;
2.暴点判定的条件是每个BP的整数部分不能大于其他四个BP整数部分的总和;
  2.1当加点会造成2所述情况的相反情况时,玩家将不能把能力点加在那个能力上。



宠物BP的细节问题

宠物BP只精确到小数点后第2位,第三位直接舍掉。
3系和4系的宠物,当BP本身精度就只有小数点后2位时,会再舍掉0.01BP。
宠物入手时能力没有任何其他偏差。
除5余1的成长档在升级时有一定概率减少0.01BP,可整除5(不包括0)的成长档对应的TNT表中成长为.xx5,有较大的几率浮动变化,但每级变化范围不超过+-0.005。



回顾一下本篇提出的部分概念
表观档次:未饲养升级的宠物的实际档次与随机10档的复合结果,用表观档次和最小BP分配单位可以直接算出宠物能力
实际档次:取代“掉档”的一种档次表达方法,数值上为最高成长档与掉档情况的加和,可以方便对比不同宠物
折合掉档:通过对比不同成长档下,某BP到某一等级的数值而计算出的折中的野生宠物档次。折合掉档的思路同样可以粗略运用到评估宠物能力,替代繁杂的宠物枚举分析。

TOP

楼上的没别的话说了吗
另外楼主随机小量可以加进来说一下吗?

TOP

楼上的没别的话说了吗
另外楼主随机小量可以加进来说一下吗?
KING 发表于 2014-1-8 14:07



    好像新开帖子了 可以关注一下 ……

TOP

随机小量的原因未知,但量的范围和概率是测算过了

TOP

本帖最后由 2221818966 于 2017-11-19 21:04 编辑

回复 5# Lifeator
關於隨機小量 和朋友討論出來下列的結果 不保證準確 供參考
攜帶一隻寵物時 寵物升級能力增加值為: ((rand_r(gmsv_pid) % 40 + 1) -20) *0.01 // 修正範圍是-0.2~0.19之間
攜帶兩隻寵物時 寵物升級能力增加值為: ((rand_r(gmsv_pid) % 60 + 1) -30) *0.01 // 修正範圍是-0.3~0.29之間
攜帶三隻寵物時 寵物升級能力增加值為: ((rand_r(gmsv_pid) % 80 + 1) -40) *0.01 // 修正範圍是-0.4~0.39之間
攜帶四隻寵物時 寵物升級能力增加值為: ((rand_r(gmsv_pid) % 100 + 1) -50) *0.01 // 修正範圍是-0.5~0.49之間
攜帶五隻寵物時 寵物升級能力增加值為: ((rand_r(gmsv_pid) % 120 + 1) -60) *0.01 // 修正範圍是-0.6~0.59之間
rand_r函數是官方自訂的一個隨機函數 使用的隨機種子為服務器線程號
由於一般服務器一個禮拜維護一次 在大部分情況下: rand_r(gmsv_pid)值一個禮拜僅改變一次
另外我們有一個共識即:  這個設置最大的價值在於, 玩家近乎不可能取得任意兩隻能力完全相同的寵物, 即使它們的檔次相同(甚至1級隨機檔相同),



下面是我找到的有關Linux服務器線程號的資料

32768 by default, you can read the value on your system in /proc/sys/kernel/pid_max.

And you can set the value higher (up to 222 = 4,194,304 on 32-bit machines) with:
  1. echo 4194303 > /proc/sys/kernel/pid_max
复制代码
The minimum is 1 and usually the maximum is 2^15

上述分析不一定精確 僅供參考

TOP

回复 6# 2221818966
随机小量有两种模式,5*n 档次的随机小量看起来像是这种感觉,而5*n+1的随机小量是单向只能变少的。。。

TOP

回复 6# 2221818966


   哇 这层有点意思

TOP

圖鑑星星數計算公式

本帖最后由 2221818966 于 2017-11-19 21:04 编辑

do
  {
    v6 = (ENEMYTEMP_getInt(v4, v5) - 1) / 5;    // EnemyBase div 5 = 半星數目
                                                // 比如腐屍體力檔遊戲數據40 實際檔數38
                                                // 40 div 5 = 8, 8顆的半星, 即是4顆星
    v27[v5] = v6;                      // (如果像是14這種數字除以5就是2)
    if ( v6 > 9 )
      v27[v5] = 9;
    ++v5;
  }
  while ( v5 != 9 );                            // 4走到8(五個欄位)

TOP

本帖最后由 2221818966 于 2017-11-27 03:13 编辑

客戶端顯示部分

_DWORD *__cdecl sub_488610(_DWORD *a1, int a2)
{
  signed int v2; // edx
  int v3; // eax
  int v4; // ecx
  _DWORD *result; // eax
  int v6; // edi
  int v7; // eax

  v2 = 5;
  v3 = 36 * a2;
  v4 = 0;
  do
  {
    v3 += 36;
    --v2;
    *(_DWORD *)(*(_DWORD *)(dword_C718A4 + 44) + v3 - 12) = 0;
  }
  while ( v2 );
  result = a1;
  v6 = (int)a1 + 1;
  if ( (signed int)a1 + 1 >= 1 && v6 <= 10 && v6 > 0 )
  {
    do
    {
      if ( !(v4 % 2) )
      {
        v7 = 36 * (a2 + v4 / 2);
        *(_DWORD *)(*(_DWORD *)(dword_C718A4 + 44) + v7 + 24) = 1;
        result = *(_DWORD **)(*(_DWORD *)(dword_C718A4 + 44) + v7 + 28);
        *result = 244492;                       // 一星圖片
      }
      if ( (_DWORD *)v4 == a1 && v6 % 2 == 1 )  // 有任何餘數補上半星
      {
        result = *(_DWORD **)(*(_DWORD *)(dword_C718A4 + 44) + 36 * (a2 + v4 / 2) + 28);
        *result = 244493;                       // 半星圖片
      }
      ++v4;
    }
    while ( v4 < v6 );
  }
  return result;
} // 利用 0, 244492, 244493 三個圖片來構造星星數組合
// 每一次循環就是給定一個星星的位置的圖片 檢測是否滿足給一顆星 或者有沒有剩下的要給半顆星 最後v4 < v6剩下的都是0了(無圖片)

TOP

返回列表