changeset 958:9c2d08e42ed3

GivePartyExp
author Ritor1
date Thu, 02 May 2013 17:58:32 +0600
parents 1a47a988c0b8
children f8dd764fb7d7
files mm7_6.cpp mm7_data.h
diffstat 2 files changed, 21 insertions(+), 58 deletions(-) [+]
line wrap: on
line diff
--- a/mm7_6.cpp	Thu May 02 15:37:16 2013 +0600
+++ b/mm7_6.cpp	Thu May 02 17:58:32 2013 +0600
@@ -1196,74 +1196,37 @@
 // 50C998: using guessed type int dword_50C998_turnbased_icon_1A;
 
 //----- (004269A2) --------------------------------------------------------
-int __fastcall GivePartyExp(unsigned int a1)
+void __fastcall GivePartyExp(unsigned int pEXPNum)
 {
-  //unsigned __int64 v1; // qax@1
-  Player *v1;
-  int v1b;
-  signed int v2; // ecx@1
-  int *v3; // esi@1
-  bool v4; // edi@6
-  int *v5; // edi@10
-  Player *v6; // esi@10
-  int v7; // eax@13
-  unsigned __int8 v8; // cf@13
-  int v10[4]; // [sp+Ch] [bp-14h]@1
-  int v11; // [sp+1Ch] [bp-4h]@10
-
-  //v1 = __PAIR__((int)((char *)&pParty + 2620), a1);
-  v1 = pParty->pPlayers;
-  v1b = a1;
-  v2 = 0;
-  v3 = v10;
-  do
+  signed int pActivePlayerCount; // ecx@1
+  int pLearningPercent; // eax@13
+
+  pActivePlayerCount = 0;
+  for ( uint i = 0; i < 4; ++i )
+  {
+    if ( !pParty->pPlayers[i].pConditions[13] && !pParty->pPlayers[i].pConditions[14] && !pParty->pPlayers[i].pConditions[15] && !pParty->pPlayers[i].pConditions[16] )
+      pActivePlayerCount ++;
+  }
+  if ( pActivePlayerCount )
   {
-    /*v4 = !(*(int *)(HIDWORD(v1) - 4) | *(int *)(HIDWORD(v1) - 8))
-      && !*(int *)HIDWORD(v1)
-      && !*(_QWORD *)(HIDWORD(v1) + 8)
-      && !*(_QWORD *)(HIDWORD(v1) + 16);*/
-	v4 = !(HIDWORD(v1->pConditions[13]) | LODWORD(v1->pConditions[13]))
-	  && !v1->pConditions[14]
-	  && !v1->pConditions[15]
-	  && !v1->pConditions[16];
-    *v3 = v4;
-    //HIDWORD(v1) += 6972;
-	++v1;
-    v2 += v4;
-    ++v3;
-  }
-  while ( v1 <= &pParty->pPlayers[3] );
-  if ( v2 )
-  {
-    v1b = v1b / v2;
-    v5 = v10;
-    v6 = pParty->pPlayers;//[0].uExperience;
-    v11 = v1b;
-    do
+    pEXPNum = pEXPNum / pActivePlayerCount;
+    for ( uint i = 0; i < 4; ++i )
     {
-      if ( *v5 )
+      if ( !pParty->pPlayers[i].pConditions[13] && !pParty->pPlayers[i].pConditions[14] && !pParty->pPlayers[i].pConditions[15] && !pParty->pPlayers[i].pConditions[16] )
       {
-        if ( v11 )
+        if ( pEXPNum )
         {
-          LOBYTE(v7) = v6->GetLearningPercent();
-          v1b = v11 + v11 * (char)v7 / 100;
-          //v8 = __CFADD__((int)v1, LODWORD(v6->uExperience));
-		  //need review
-          LODWORD(v6->uExperience) += v1b;
-          //HIDWORD(v6->uExperience) += HIDWORD(v1) + v8;
-          if ( v6->uExperience > 4000000000i64 )
+          pLearningPercent = pParty->pPlayers[i].GetLearningPercent();
+          pEXPNum = pEXPNum + pEXPNum * pLearningPercent / 100;
+          pParty->pPlayers[i].uExperience += pEXPNum;
+          if ( pParty->pPlayers[i].uExperience > 4000000000i64 )
           {
-            HIDWORD(v6->uExperience) = 0;
-            LODWORD(v6->uExperience) = -294967296;
+            pParty->pPlayers[i].uExperience = 0;
           }
         }
       }
-      ++v6;
-      ++v5;
     }
-	while ( v6 <= &pParty->pPlayers[3] );
   }
-  return v1b;
 }
 
 //----- (00426A5A) --------------------------------------------------------
--- a/mm7_data.h	Thu May 02 15:37:16 2013 +0600
+++ b/mm7_data.h	Thu May 02 17:58:32 2013 +0600
@@ -1653,7 +1653,7 @@
 int __fastcall _4268E3_smthn_to_a1r5g5b5(unsigned int uColor); // idb
 int __fastcall _42690D_colors_cvt(unsigned int a1);
 void __cdecl sub_426947();
-int __fastcall GivePartyExp(unsigned int a1);
+void __fastcall GivePartyExp(unsigned int pEXPNum);
 bool __fastcall sub_427769_spell(unsigned int uSpellID);
 void _42777D_CastSpell_UseWand_ShootArrow(int a1, unsigned int uPlayerID, unsigned int a4, __int16 a5, int a6);
 int __fastcall sub_42EBBE(int, int); // weak