Advertisement
Guest User

CNWSCreature__DoSpotDetection

a guest
Oct 19th, 2011
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.47 KB | None | 0 0
  1. bool __thiscall CNWSCreature__DoSpotDetection(int this, int a2, int a3)
  2. {
  3.   char v3; // cl@1
  4.   int v4; // ebx@1
  5.   int v5; // edi@1
  6.   int v6; // esi@1
  7.   int v7; // edx@1
  8.   float v8; // eax@1
  9.   long double v9; // fst7@1
  10.   int v10; // edx@1
  11.   int v11; // eax@1
  12.   float v12; // ecx@1
  13.   long double v13; // fst7@1
  14.   bool result; // eax@6
  15.   int v15; // eax@9
  16.   long double v16; // fst7@9
  17.   long double v17; // fst7@10
  18.   int v18; // ebx@18
  19.   int v19; // eax@18
  20.   int v20; // ebp@19
  21.   int v21; // eax@19
  22.   int v22; // eax@29
  23.   int v23; // ebp@29
  24.   int v24; // eax@29
  25.   int v25; // ebp@30
  26.   int v26; // eax@30
  27.   int v27; // ebx@31
  28.   int v28; // ecx@32
  29.   int v29; // ebp@32
  30.   unsigned __int16 **v30; // edx@33
  31.   unsigned __int16 v31; // ax@34
  32.   int v32; // ecx@39
  33.   int v33; // ebp@39
  34.   unsigned __int16 **v34; // edx@40
  35.   unsigned __int16 v35; // ax@41
  36.   int v36; // eax@46
  37.   int v37; // ebp@46
  38.   int v38; // eax@49
  39.   int v39; // edx@50
  40.   int v40; // eax@50
  41.   int v41; // eax@51
  42.   int v42; // ecx@51
  43.   int v43; // eax@51
  44.   int v44; // eax@59
  45.   float v45; // [sp+14h] [bp-24h]@1
  46.   float v46; // [sp+18h] [bp-20h]@1
  47.   float v47; // [sp+1Ch] [bp-1Ch]@1
  48.   int v48; // [sp+20h] [bp-18h]@9
  49.   int v49; // [sp+24h] [bp-14h]@9
  50.   int v50; // [sp+28h] [bp-10h]@9
  51.   float v51; // [sp+2Ch] [bp-Ch]@1
  52.   float v52; // [sp+30h] [bp-8h]@1
  53.   float v53; // [sp+34h] [bp-4h]@1
  54.   float v54; // [sp+3Ch] [bp+4h]@9
  55.  
  56.   v6 = this;
  57.   v7 = *(_DWORD *)(this + 124);
  58.   LODWORD(v8) = *(_DWORD *)(this + 128);
  59.   LODWORD(v51) = *(_DWORD *)(this + 120);
  60.   v5 = a2;
  61.   LODWORD(v52) = v7;
  62.   v53 = v8;
  63.   v9 = v8 + 1.0;
  64.   v10 = *(_DWORD *)(a2 + 120);
  65.   v11 = *(_DWORD *)(a2 + 124);
  66.   LODWORD(v12) = *(_DWORD *)(a2 + 128);
  67.   v53 = v9;
  68.   v47 = v12;
  69.   v13 = v12;
  70.   v3 = *(_BYTE *)(v6 + 2524);
  71.   LODWORD(v45) = v10;
  72.   v4 = 0;
  73.   v47 = v13 + 1.0;
  74.   LODWORD(v46) = v11;
  75.   if ( v3 & 4 || v3 & 0x20 || !(v3 & 0x10) && (!(v3 & 8) || v3 & 2) )
  76.   {
  77.     if ( a3 )
  78.     {
  79.       result = 0;
  80.     }
  81.     else
  82.     {
  83.       v15 = *(_DWORD *)(v6 + 1212);
  84.       *(float *)&v48 = v45 - v51;
  85.       *(float *)&v49 = v46 - v52;
  86.       v16 = v47 - v53;
  87.       *(float *)&v50 = v16;
  88.       v54 = v16 * *(float *)&v50 + *(float *)&v49 * *(float *)&v49 + *(float *)&v48 * *(float *)&v48;
  89.       if ( v15 )
  90.         v17 = *(float *)(v6 + 2584);
  91.       else
  92.         v17 = *(float *)(v6 + 2580);
  93.       if ( v54 <= v17 * v17 )
  94.       {
  95.         if ( v3 & 4 )
  96.           goto LABEL_73;
  97.         if ( v3 & 0x20 && v54 <= *(float *)(v6 + 2596) * *(float *)(v6 + 2596) )
  98.           goto LABEL_73;
  99.         if ( *(_BYTE *)(v5 + 1193) == 1 )
  100.         {
  101.           v18 = *(_DWORD *)(v5 + 3172);
  102.           v19 = (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 16))(v6);
  103.           v4 = -CNWSCreatureStats__GetSkillRank(v18, 5u, v19, 0) - *(_BYTE *)(v5 + 2600);
  104.         }
  105.         v20 = *(_DWORD *)(v5 + 3172);
  106.         v21 = (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 16))(v6);
  107.         if ( !CNWSCreatureStats__GetSkillRank(v20, 5u, v21, 0) || !*(_BYTE *)(v5 + 1193) )
  108.         {
  109. LABEL_73:
  110.           result = 1;
  111.         }
  112.         else
  113.         {
  114.           if ( CNWSCreatureStats__HasFeat(*(_DWORD *)(v6 + 3172), 240)
  115.             || (*(_DWORD *)(v6 + 172) || *(_BYTE *)(v6 + 1192) == 1) && *(_BYTE *)(v6 + 1192) == 1
  116.             || !CNWSCreatureStats__HasFeat(*(_DWORD *)(v6 + 3172), 240)
  117.             && (!*(_DWORD *)(v6 + 172) && *(_BYTE *)(v6 + 1192) != 1 || *(_BYTE *)(v6 + 1192) == 2) )
  118.           {
  119.             v25 = *(_DWORD *)(v6 + 3172);
  120.             v26 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 16))(v5);
  121.             v22 = CNWSCreatureStats__GetSkillRank(v25, 0x11u, v26, 0);
  122.           }
  123.           else
  124.           {
  125.             v23 = *(_DWORD *)(v6 + 3172);
  126.             v24 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 16))(v5);
  127.             v22 = CNWSCreatureStats__GetSkillRank(v23, 0x11u, v24, 0) / 2;
  128.           }
  129.           v27 = *(_BYTE *)(v6 + 2602) + *(_DWORD *)(CNWSObject__GetArea((void *)v6) + 328) + v22 + v4;
  130.           if ( *(_BYTE *)(CServerExoApp__GetModule(*(_DWORD *)(g_pAppManager + 4)) + 496) == 2 )
  131.           {
  132.             v29 = *(_DWORD *)(v6 + 248);
  133.             v28 = 0;
  134.             if ( v29 <= 0 )
  135.             {
  136. LABEL_38:
  137.               v27 -= 5;
  138.             }
  139.             else
  140.             {
  141.               v30 = *(unsigned __int16 ***)(v6 + 244);
  142.               while ( 1 )
  143.               {
  144.                 v31 = **v30;
  145.                 if ( v31 == 182 )
  146.                   break;
  147.                 if ( v31 >= 0x99u && v31 <= 0xB4u )
  148.                   break;
  149.                 ++v28;
  150.                 ++v30;
  151.                 if ( v28 >= v29 )
  152.                   goto LABEL_38;
  153.               }
  154.             }
  155.             v33 = *(_DWORD *)(v5 + 248);
  156.             v32 = 0;
  157.             if ( v33 > 0 )
  158.             {
  159.               v34 = *(unsigned __int16 ***)(v5 + 244);
  160.               while ( 1 )
  161.               {
  162.                 v35 = **v34;
  163.                 if ( v35 >= 0x99u )
  164.                 {
  165.                   if ( v35 <= 0xB4u )
  166.                     break;
  167.                 }
  168.                 ++v32;
  169.                 ++v34;
  170.                 if ( v32 >= v33 )
  171.                   goto LABEL_46;
  172.               }
  173.               v27 += 10;
  174.             }
  175.           }
  176. LABEL_46:
  177.           v37 = CServerExoApp__GetClientObjectByObjectId(*(_DWORD *)(g_pAppManager + 4), *(_DWORD *)(v6 + 4));
  178.           v36 = CServerExoApp__GetClientObjectByObjectId(*(_DWORD *)(g_pAppManager + 4), *(_DWORD *)(v5 + 4));
  179.           if ( !v37 )
  180.           {
  181.             if ( v36 )
  182.             {
  183.               LODWORD(v45) = v48;
  184.               LODWORD(v46) = v49;
  185.               LODWORD(v47) = v50;
  186.               if ( v54 <= 0.0 )
  187.               {
  188.                 v39 = *(_DWORD *)(v6 + 136);
  189.                 v40 = *(_DWORD *)(v6 + 140);
  190.                 LODWORD(v45) = *(_DWORD *)(v6 + 132);
  191.                 LODWORD(v46) = v39;
  192.                 LODWORD(v47) = v40;
  193.               }
  194.               else
  195.               {
  196.                 v38 = normalize((int)&v51, (int)&v45);
  197.                 LODWORD(v45) = *(_DWORD *)v38;
  198.                 LODWORD(v46) = *(_DWORD *)(v38 + 4);
  199.                 LODWORD(v47) = *(_DWORD *)(v38 + 8);
  200.               }
  201.               v41 = *(_DWORD *)(v6 + 136);
  202.               v42 = *(_DWORD *)(v6 + 140);
  203.               LODWORD(v51) = *(_DWORD *)(v6 + 132);
  204.               LODWORD(v52) = v41;
  205.               LODWORD(v53) = v42;
  206.               v43 = normalize((int)&v48, (int)&v51);
  207.               if ( v47 * *(float *)(v43 + 8) + v46 * *(float *)(v43 + 4) + v45 * *(float *)v43 <= -0.7070000171661377 )
  208.                 v27 -= 5;
  209.             }
  210.           }
  211.           if ( *(_DWORD *)(v6 + 1212) )
  212.             v27 -= 10;
  213.           if ( CNWSObject__AnimationStationary(*(_DWORD *)(v5 + 172)) )
  214.             v27 -= 5;
  215.           if ( CNWSObject__AnimationStationary(*(_DWORD *)(v6 + 172)) )
  216.             v27 += 5;
  217.           v44 = *(_DWORD *)(v5 + 1236) - *(_DWORD *)(v6 + 1236);
  218.           switch ( v44 )
  219.           {
  220.             case -2:
  221.               v27 -= 8;
  222.               break;
  223.             case -1:
  224.               v27 -= 4;
  225.               break;
  226.             case -4294967295:
  227.               v27 += 4;
  228.               break;
  229.             case -4294967294:
  230.               v27 += 8;
  231.               break;
  232.           }
  233.           result = CNWSCreatureStats__GetFavoredEnemyBonus(*(_DWORD *)(v6 + 3172), v5) + v27 > 0;
  234.         }
  235.       }
  236.       else
  237.       {
  238.         result = 0;
  239.       }
  240.     }
  241.   }
  242.   else
  243.   {
  244.     result = 0;
  245.   }
  246.   return result;
  247. }
  248.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement