免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖
本帖最后由 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

圖鑑星星數計算公式

本帖最后由 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

返回列表