diff mm7_4.cpp @ 964:d7f0572335ec

Слияние
author Ritor1
date Sat, 04 May 2013 18:19:08 +0600
parents cbf623f00e6c e9292c58644a
children c8a0f6d89c70
line wrap: on
line diff
--- a/mm7_4.cpp	Sat May 04 18:18:47 2013 +0600
+++ b/mm7_4.cpp	Sat May 04 18:19:08 2013 +0600
@@ -6839,14 +6839,14 @@
 //----- (004B254D) --------------------------------------------------------
 char *__thiscall _4B254D_SkillMasteryTeacher(int _this)
 {
-  Player *v1; // esi@1
+  //Player *v1; // esi@1
   int v2; // edx@1
   int v3; // ecx@1
   int v4; // edi@1
-  int v5; // eax@7
+  int pClassType; // eax@7
   int v6; // eax@7
   int v7; // ebx@7
-  int v8; // ebx@8
+  //int v8; // ebx@8
   signed int v9; // esi@8
   int v10; // eax@8
   char *v11; // ecx@8
@@ -6854,27 +6854,26 @@
   char *v13; // edx@9
   signed int v14; // edi@10
   unsigned int v16; // eax@29
-  int v17; // eax@36
+  //int v17; // eax@36
   char v18; // cl@46
   __int16 v19; // dx@56
   int v20; // eax@60
-  char *v21; // [sp-Ch] [bp-38h]@82
-  const char *v22; // [sp-8h] [bp-34h]@21
-  unsigned int v23; // [sp-8h] [bp-34h]@38
-  char *v24; // [sp-8h] [bp-34h]@82
+  //char *v21; // [sp-Ch] [bp-38h]@82
+  //const char *v22; // [sp-8h] [bp-34h]@21
+  //unsigned int v23; // [sp-8h] [bp-34h]@38
+  //char *v24; // [sp-8h] [bp-34h]@82
   char *v25; // [sp-4h] [bp-30h]@14
-  int v26; // [sp-4h] [bp-30h]@38
-  int v27; // [sp-4h] [bp-30h]@82
+  //int v26; // [sp-4h] [bp-30h]@38
+  //int v27; // [sp-4h] [bp-30h]@82
   char v28[4]; // [sp+Ch] [bp-20h]@9
   int v29; // [sp+10h] [bp-1Ch]@13
   int v30; // [sp+14h] [bp-18h]@15
   int v31; // [sp+18h] [bp-14h]@16
   unsigned __int16 a1[2]; // [sp+1Ch] [bp-10h]@7
-  int v33; // [sp+20h] [bp-Ch]@7
+  //int v33; // [sp+20h] [bp-Ch]@7
   int v34; // [sp+24h] [bp-8h]@7
   char *v35; // [sp+28h] [bp-4h]@1
 
-  v1 = pPlayers[uActiveCharacter];
   contract_approved = 0;
   v2 = (_this - 200) % 3;
   v3 = (_this - 200) / 3;
@@ -6902,18 +6901,18 @@
     gold_transaction_amount = 2000;
     dword_F8B1B0 = 2;
   }
-  v5 = v1->classType;
-  v33 = v5;
-  v6 = byte_4ED970_skill_learn_ability_by_class_table[v5][v3];
-  *(int *)a1 = v1->pActiveSkills[v3];
+  pClassType = pPlayers[uActiveCharacter]->classType;
+  //v33 = pClassType;
+  v6 = byte_4ED970_skill_learn_ability_by_class_table[pClassType][v3];
+  *(int *)a1 = pPlayers[uActiveCharacter]->pActiveSkills[v3];
   v7 = a1[0] & 0x3F;
   v34 = v2 + 2;
   if ( v6 < v2 + 2 )
   {
-    v8 = v33;
+    //v8 = v33;
     v9 = 0;
-    v10 = v33 - v33 % 4;
-    v11 = &byte_4ED970_skill_learn_ability_by_class_table[v33 - v33 % 4][v3];
+    v10 = pClassType - pClassType % 4;
+    v11 = &byte_4ED970_skill_learn_ability_by_class_table[pClassType - pClassType % 4][v3];
     do
     {
       v12 = (unsigned __int8)*v11;
@@ -6938,11 +6937,11 @@
     }
     else
     {
-      if ( v30 == v14 )
+      if ( v30 == v14 )//crash
       {
         if ( v31 == v14 )
         {
-          sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[634], pClassNames[v10 + 2], pClassNames[v10 + 3]);
+          sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[634], pClassNames[v10 + 2], pClassNames[v10 + 3]);//    %s  %s     .
           return pTmpBuf;
         }
         v25 = pClassNames[v10 + 2];
@@ -6951,19 +6950,16 @@
       {
         if ( v31 != v14 )
         {
-          v25 = pClassNames[v8];
-          v22 = pGlobalTXT_LocalizationStrings[632];
-          goto LABEL_23;
+          sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[632], pClassNames[pClassType]);//        %s.
+          return pTmpBuf;
         }
         v25 = pClassNames[v10 + 3];
       }
     }
-    v22 = pGlobalTXT_LocalizationStrings[633];
-LABEL_23:
-    sprintf(pTmpBuf, v22, v25);
+    sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[633], v25);//    %s     .
     return pTmpBuf;
   }
-  if ( !v1->CanAct() )
+  if ( !pPlayers[uActiveCharacter]->CanAct() )
     return (char *)pNPCTopics[122].pText;
   if ( !v7 )
     return (char *)pNPCTopics[131].pText;
@@ -6976,11 +6972,8 @@
     {
       if ( (signed int)v16 >= 2 && v7 >= 7 )
       {
-        v17 = dword_F8B1AC_award_bit_number;
         switch ( dword_F8B1AC_award_bit_number )
         {
-          default:
-            goto LABEL_41;
           case 12:
           case 13:
           case 14:
@@ -6992,26 +6985,40 @@
             goto LABEL_42;
           case 19:
             v19 = 114;
-            goto LABEL_57;
+            if ( !(unsigned __int16)_449B57_test_bit(pParty->_quest_bits, v19) )
+              return v35;
+            if ( !gold_transaction_amount )
+              goto LABEL_79;
+            goto LABEL_42;
           case 20:
             v19 = 110;
-LABEL_57:
             if ( !(unsigned __int16)_449B57_test_bit(pParty->_quest_bits, v19) )
               return v35;
-            goto LABEL_40;
+            if ( !gold_transaction_amount )
+              goto LABEL_79;
+            goto LABEL_42;
           case 22:
-            v20 = v1->GetBaseWillpower();
-            goto LABEL_61;
+            v20 = pPlayers[uActiveCharacter]->GetBaseWillpower();
+            if ( v20 < 50 )
+              return v35;
+            if ( !gold_transaction_amount )
+              goto LABEL_79;
+            goto LABEL_42;
           case 24:
             gold_transaction_amount = 2500;
-            v20 = v1->GetBaseEndurance();
-            goto LABEL_61;
-          case 36:
-            v20 = v1->GetBaseIntelligence();
-LABEL_61:
+            v20 = pPlayers[uActiveCharacter]->GetBaseEndurance();
             if ( v20 < 50 )
               return v35;
-            goto LABEL_40;
+            if ( !gold_transaction_amount )
+              goto LABEL_79;
+            goto LABEL_42;
+          case 36:
+            v20 = pPlayers[uActiveCharacter]->GetBaseIntelligence();
+            if ( v20 < 50 )
+              return v35;
+            if ( !gold_transaction_amount )
+              goto LABEL_79;
+            goto LABEL_42;
           case 21:
           case 23:
           case 25:
@@ -7029,50 +7036,75 @@
             gold_transaction_amount = 3000;
             goto LABEL_42;
           case 7:
-            goto LABEL_67;
+            gold_transaction_amount = 0;
+            if ( !gold_transaction_amount )
+              goto LABEL_79;
+            goto LABEL_42;
+          default:
+            if ( !gold_transaction_amount )
+              goto LABEL_79;
+            goto LABEL_42;
         }
-        goto LABEL_67;
+        gold_transaction_amount = 0;
+        if ( !gold_transaction_amount )
+          goto LABEL_79;
+        goto LABEL_42;
       }
     }
     else
     {
       if ( v34 != 4 )
       {
-LABEL_40:
-        v17 = dword_F8B1AC_award_bit_number;
-        goto LABEL_41;
+        if ( !gold_transaction_amount )
+          goto LABEL_79;
+        goto LABEL_42;
       }
       if ( (signed int)v16 >= 3 && v7 >= 10 )
       {
-        v17 = dword_F8B1AC_award_bit_number;
         switch ( dword_F8B1AC_award_bit_number )
         {
           case 19:
-            if ( v1->_49327B(0x22u, 1) == 1 )
-              goto LABEL_40;
-            v26 = 1;
-            v23 = 26;
-            goto LABEL_39;
-          default:
-            goto LABEL_41;
+            if ( pPlayers[uActiveCharacter]->_49327B(0x22u, 1) == 1 )
+            {
+              if ( !gold_transaction_amount )
+                goto LABEL_79;
+              goto LABEL_42;
+            }
+            if ( pPlayers[uActiveCharacter]->_49327B(26, 1) == 1 )
+            {
+              if ( !gold_transaction_amount )
+                goto LABEL_79;
+              goto LABEL_42;
+            }
+            return v35;
           case 20:
-            if ( v1->_49327B(0x23u, 1) == 1 )
-              goto LABEL_40;
-            v26 = 1;
-            v23 = 27;
-LABEL_39:
-            if ( v1->_49327B(v23, v26) == 1 )
-              goto LABEL_40;
+            if ( pPlayers[uActiveCharacter]->_49327B(0x23u, 1) == 1 )
+            {
+              if ( !gold_transaction_amount )
+                goto LABEL_79;
+              goto LABEL_42;
+            }
+            if ( pPlayers[uActiveCharacter]->_49327B(27, 1) == 1 )
+            {
+              if ( !gold_transaction_amount )
+                goto LABEL_79;
+              goto LABEL_42;
+            }
             return v35;
           case 30:
-            v18 = LOBYTE(v1->pActiveSkills[31]);
-            goto LABEL_47;
-          case 31:
-            v18 = LOBYTE(v1->pActiveSkills[30]);
-LABEL_47:
+            v18 = LOBYTE(pPlayers[uActiveCharacter]->pActiveSkills[31]);
             if ( (v18 & 0x3Fu) < 0xA )
               return v35;
-            goto LABEL_41;
+            if ( !gold_transaction_amount )
+              goto LABEL_79;
+            goto LABEL_42;
+          case 31:
+            v18 = LOBYTE(pPlayers[uActiveCharacter]->pActiveSkills[30]);
+            if ( (v18 & 0x3Fu) < 0xA )
+              return v35;
+            if ( !gold_transaction_amount )
+              goto LABEL_79;
+            goto LABEL_42;
           case 21:
           case 23:
           case 24:
@@ -7092,46 +7124,66 @@
             goto LABEL_42;
           case 7:
             break;
+          default:
+            if ( !gold_transaction_amount )
+              goto LABEL_79;
+            goto LABEL_42;
         }
-LABEL_67:
         gold_transaction_amount = 0;
-        goto LABEL_41;
+        if ( !gold_transaction_amount )
+          goto LABEL_79;
+        goto LABEL_42;
       }
     }
     return v35;
   }
   if ( v7 < 4 )
     return v35;
-  v17 = dword_F8B1AC_award_bit_number;
   if ( dword_F8B1AC_award_bit_number > 27 )
   {
     if ( dword_F8B1AC_award_bit_number != 29
       && dword_F8B1AC_award_bit_number != 32
       && (dword_F8B1AC_award_bit_number <= 33 || dword_F8B1AC_award_bit_number > 35) )
     {
-LABEL_41:
       if ( !gold_transaction_amount )
         goto LABEL_79;
       goto LABEL_42;
     }
-LABEL_87:
     gold_transaction_amount = 500;
-    goto LABEL_41;
+    if ( !gold_transaction_amount )
+      goto LABEL_79;
+    goto LABEL_42;
   }
   if ( dword_F8B1AC_award_bit_number >= 23 )
-    goto LABEL_87;
+  {
+    gold_transaction_amount = 500;
+    if ( !gold_transaction_amount )
+      goto LABEL_79;
+    goto LABEL_42;
+  }
   if ( dword_F8B1AC_award_bit_number == 7 )
   {
     gold_transaction_amount = 0;
     goto LABEL_79;
   }
   if ( dword_F8B1AC_award_bit_number <= 7 )
-    goto LABEL_41;
+  {
+    if ( !gold_transaction_amount )
+      goto LABEL_79;
+    goto LABEL_42;
+  }
   if ( dword_F8B1AC_award_bit_number > 18 )
   {
     if ( dword_F8B1AC_award_bit_number != 21 )
-      goto LABEL_41;
-    goto LABEL_87;
+    {
+      if ( !gold_transaction_amount )
+        goto LABEL_79;
+      goto LABEL_42;
+    }
+    gold_transaction_amount = 500;
+    if ( !gold_transaction_amount )
+      goto LABEL_79;
+    goto LABEL_42;
   }
   gold_transaction_amount = 1000;
 LABEL_42:
@@ -7141,26 +7193,19 @@
   contract_approved = 1;
   if ( v34 == 2 )
   {
-    v27 = gold_transaction_amount;
-    v24 = pSkillNames[v17];
-    v21 = pGlobalTXT_LocalizationStrings[433];
-    goto LABEL_90;
+    sprintfex(pTmpBuf2, pGlobalTXT_LocalizationStrings[534],//  ^Pr[%s]   ^Pr[%s]  ^I[%lu] ^L[;;]
+              pGlobalTXT_LocalizationStrings[433], pSkillNames[dword_F8B1AC_award_bit_number], gold_transaction_amount);//
+    return pTmpBuf2;
   }
   if ( v34 == 3 )
   {
-    v27 = gold_transaction_amount;
-    v24 = pSkillNames[v17];
-    v21 = pGlobalTXT_LocalizationStrings[432];
-    goto LABEL_90;
+    sprintfex(pTmpBuf2, pGlobalTXT_LocalizationStrings[534],
+              pGlobalTXT_LocalizationStrings[432], pSkillNames[dword_F8B1AC_award_bit_number], gold_transaction_amount);//
+    return pTmpBuf2;
   }
   if ( v34 == 4 )
-  {
-    v27 = gold_transaction_amount;
-    v24 = pSkillNames[v17];
-    v21 = pGlobalTXT_LocalizationStrings[225];
-LABEL_90:
-    sprintfex(pTmpBuf2, pGlobalTXT_LocalizationStrings[534], v21, v24, v27);
-  }
+    sprintfex(pTmpBuf2, pGlobalTXT_LocalizationStrings[534],
+              pGlobalTXT_LocalizationStrings[225], pSkillNames[dword_F8B1AC_award_bit_number], gold_transaction_amount);// 
   return pTmpBuf2;
 }