changeset 658:cec42951eda0

Merge
author Nomad
date Wed, 13 Mar 2013 01:30:53 +0200
parents 7747161ea5b5 (current diff) 6abf5b610585 (diff)
children c10163a6d946 c508daac2c07
files
diffstat 3 files changed, 216 insertions(+), 216 deletions(-) [+]
line wrap: on
line diff
--- a/Party.cpp	Wed Mar 13 01:29:33 2013 +0200
+++ b/Party.cpp	Wed Mar 13 01:30:53 2013 +0200
@@ -757,7 +757,7 @@
 
   memcpy(pNPCStats->pNewNPCData, pNPCStats->pNPCData, 0x94BCu);
   memcpy(pNPCStats->pGroups_copy, pNPCStats->pGroups, 0x66u);
-  pNPCStats->pNewNPCData[3].uFlags = 128;//|= 0x80u; Lady Margaret
+  pNPCStats->pNewNPCData[3].uFlags |= 128;//|= 0x80u; Lady Margaret
   _494035_timed_effects__water_walking_damage__etc();
   pEventTimer->Pause();
   return 0;
--- a/Player.cpp	Wed Mar 13 01:29:33 2013 +0200
+++ b/Player.cpp	Wed Mar 13 01:30:53 2013 +0200
@@ -3391,7 +3391,7 @@
     return 1;
   }
   if ( HasItemEquipped((ITEM_EQUIP_TYPE)a2)
-    && *(int *)&v4->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * *(&v4->pEquipment.uOffHand + v3) + 5] == a1 )
+    && *(int *)&this->pInventoryItems[*(&v4->pEquipment.uOffHand + v3)-1] == a1 )
     return 1;
   return 0;
 }
@@ -4010,7 +4010,7 @@
             goto LABEL_84;
         }
         v28 = v47;
-        memcpy(v27, &v5->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * v5->pInventoryIndices[v47] + 5], 0x24u);
+        memcpy(v27, &v5->pInventoryItems[v5->pInventoryIndices[v47]-1], 0x24u);
         RemoveItemAtInventoryIndex(v28);
 LABEL_79:
         v42 = 0;
@@ -7922,7 +7922,7 @@
         return v4 >= pValue;
     }
     while ( !v3->HasItemEquipped(v26)
-         || *(int *)&v3->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * *(int *)v27 + 5] != pValue )
+         || *(int *)&v3->pInventoryItems[*(int *)v27-1] != pValue )
     {
       v26 = (ITEM_EQUIP_TYPE)((int)v26 + 1);
       v27 += 4;
--- a/mm7_4.cpp	Wed Mar 13 01:29:33 2013 +0200
+++ b/mm7_4.cpp	Wed Mar 13 01:30:53 2013 +0200
@@ -3027,7 +3027,7 @@
 //----- (00491F87) --------------------------------------------------------
 void __cdecl DrawHiredNPCs()
 {
-  int v6; // eax@15
+  //int v6; // eax@15
   char v7; // al@17
   unsigned int v8; // eax@18
   int v9; // esi@18
@@ -3040,7 +3040,7 @@
   char pContainer[20]; // [sp+Ch] [bp-30h]@18
   unsigned int v17; // [sp+20h] [bp-1Ch]@19
   signed int uFrameID; // [sp+24h] [bp-18h]@19
-  int i; // [sp+28h] [bp-14h]@15
+  //int i; // [sp+28h] [bp-14h]@15
   unsigned int v20; // [sp+2Ch] [bp-10h]@20
   unsigned int v21; // [sp+30h] [bp-Ch]@19
   int v22; // [sp+34h] [bp-8h]@2
@@ -3062,7 +3062,7 @@
 
     for (uint i = 0; i < pNPCStats->uNumNewNPCs; ++i)
     {
-      if (pNPCStats->pNewNPCData[i].uFlags == 128)
+      if (pNPCStats->pNewNPCData[i].uFlags & 128)
       {
         if (!pParty->pHirelings[0].pName || strcmp(pNPCStats->pNewNPCData[i].pName, pParty->pHirelings[0].pName))
         {
@@ -3072,12 +3072,10 @@
       }
     }
 
-    v6 = (unsigned __int8)pParty->field_709;
-    for ( i = (unsigned __int8)pParty->field_709; i < v22; v6 = i++ + 1 )
-    {
-      if ( v23 >= 2 )
-        break;
-      v7 = pTmpBuf[v6];
+    //v6 = (unsigned __int8)pParty->field_709;
+	for ( int i = (unsigned __int8)pParty->field_709; i < v22 && v23 < 2; i++ )
+    {
+      v7 = pTmpBuf[i];
       if ( (unsigned __int8)v7 >= 2 )
       {
         sprintf(pContainer, "NPC%03d", pNPCStats->pNPCData[(unsigned __int8)v7 + 499].uPortraitID);
@@ -9590,7 +9588,7 @@
     Party::TakeGold(pPrice);
   }
   //LOBYTE(v2->uFlags) |= 0x80u;
-  pCurrentNPCInfo->uFlags = 128;
+  pCurrentNPCInfo->uFlags |= 128;
   pParty->field_709 = 0;
   sub_44A56A();
   if ( pParty->pHirelings[0].pName )
@@ -10813,7 +10811,7 @@
 //----- (004BC49B) --------------------------------------------------------
 void OnSelectNPCDialogueOption(DIALOGUE_TYPE newDialogueType)
 {
-    //unsigned int v1; // esi@1
+	//unsigned int v1; // esi@1
     NPCData *speakingNPC; // ebp@1
     //unsigned int v3; // eax@1
     int npc_event_id; // ecx@10
@@ -10830,208 +10828,210 @@
     const char *v15; // [sp-4h] [bp-14h]@60
 
     //v1 = _this;
-  speakingNPC = GetNPCData(sDialogue_SpeakingActorNPC_ID);
+	speakingNPC = GetNPCData(sDialogue_SpeakingActorNPC_ID);
     //v3 = v1;
-  uDialogueType = newDialogueType;
-  if (!speakingNPC->uFlags)
-  {
-    speakingNPC->uFlags = 1;
-        //v3 = uDialogueType;
-  }
-  if ((newDialogueType > DIALOGUE_24) || (newDialogueType < DIALOGUE_19))
-  {
-        if (newDialogueType != DIALOGUE_76)
-            {
-            if (newDialogueType == DIALOGUE_PROFESSION_DETAILS)
-                {
-                dialogue_show_profession_details = ~dialogue_show_profession_details;
-                }
-            else
-                {
-                if ( (signed int)newDialogueType > 84 && (signed int)newDialogueType <= 88 )
-                    {
-                    ArenaFight();
-                    return;
-                    }
-                }
-            goto LABEL_87;
-            }
-        if (speakingNPC->Hired())
-            {
-            v8 = 0;
-            if ( (signed int)pNPCStats->uNumNewNPCs > 0 )
-                {
-                v6 = (char *)pNPCStats->pNewNPCData;
-                while ( !(v6[8] & 0x80) || strcmp(speakingNPC->pName, *(const char **)v6) )
-                    {
-                    ++v8;
-                    v6 += 76;
-                    if ( v8 >= (signed int)pNPCStats->uNumNewNPCs )
-                        goto LABEL_44;
-                    }
-                goto LABEL_43;
-                }
-LABEL_44:
-            if ( !pParty->pHirelings[0].pName || _strcmpi(pParty->pHirelings[0].pName, speakingNPC->pName) )
-                {
-                if ( !pParty->pHirelings[1].pName || _strcmpi(pParty->pHirelings[1].pName, speakingNPC->pName) )
-                    {
-LABEL_51:
-                    pParty->field_709 = 0;
-                    sub_44A56A();
-                    dword_591084 = 0;
-                    pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
-
-                    goto LABEL_89;
-                    }
-                v11 = &pParty->pHirelings[1];
-                }
-            else
-                {
-                v11 = pParty->pHirelings;
-                }
-            memset(v11, 0, sizeof(NPCData));
-            goto LABEL_51;
-            }
-        if ( pParty->pHirelings[0].pName && pParty->pHirelings[1].pName )
-            {
-            v7 = pGlobalTXT_LocalizationStrings[533]; // ""I cannot join you, you're party is full""
-LABEL_64:
-            ShowStatusBarString(v7, 2u);
-            goto LABEL_87;
-            }
-        //v9 = v2->uProfession;
-        if ( speakingNPC->uProfession != 51 )
-            {
-            v10 = pNPCStats->pProfessions[speakingNPC->uProfession - 1].uHirePrice;
-            if ( pParty->uNumGold < v10 )
-                {
-                ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);// "You don't have enough gold"
-                dialogue_show_profession_details = false;
-                uDialogueType = 13;
-                if ( uActiveCharacter )
-                    pPlayers[uActiveCharacter]->PlaySound(SPEECH_NotEnoughGold, 0);
-                v7 = pGlobalTXT_LocalizationStrings[155];
-                ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);
-                goto LABEL_87;
-                }
-            Party::TakeGold(v10);
-            }
-        LOBYTE(speakingNPC->uFlags) |= 0x80u;
-        if ( pParty->pHirelings[0].pName )
-            {
-            memcpy(&pParty->pHirelings[1], speakingNPC, sizeof(pParty->pHirelings[1]));
-            v15 = speakingNPC->pName;
-            v13 = pParty->pHireling2Name;
-            }
-        else
-            {
-            memcpy(pParty->pHirelings, speakingNPC, 0x4Cu);
-            v15 = speakingNPC->pName;
-            v13 = pParty->pHireling1Name;
-            }
-        strcpy(v13, v15);
-        pParty->field_709 = 0;
-        sub_44A56A();
-
-        pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
-
-        if ( (sDialogue_SpeakingActorNPC_ID & 0x80000000u) == 0 )
-            pDialogue_SpeakingActor->uAIState = Removed;
-        if ( uActiveCharacter )
-            pPlayers[uActiveCharacter]->PlaySound(SPEECH_61, 0);
-        goto LABEL_87;
-        if (newDialogueType == DIALOGUE_9)
-            {
-            if ( !sub_4BB756(speakingNPC->uProfession) )
-                {
-                if ( speakingNPC->uProfession != 41 )
-                    speakingNPC->bHasUsedTheAbility = 1;
-
-                pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
-                }
-            else
-                {
-                ShowStatusBarString(pGlobalTXT_LocalizationStrings[140], 2u); //"Your packs are already full!"
-                }
-
-            goto LABEL_87;
-            }
-        if (newDialogueType == DIALOGUE_13)
-            {
-            if (!speakingNPC->Hired())
-                {
-                sub_4B3E1E();
-                dialogue_show_profession_details = false;
-                goto LABEL_87;
-                }
-            else
-                {
-                v5 = 0;
-                if ( (signed int)pNPCStats->uNumNewNPCs > 0 )
-                    {
-                    v6 = (char *)pNPCStats->pNewNPCData;
-                    while ( !(v6[8] & 0x80) || strcmp(speakingNPC->pName, *(const char **)v6) )
-                        {
-                        ++v5;
-                        v6 += 76;
-                        if ( v5 >= (signed int)pNPCStats->uNumNewNPCs )
-                            goto LABEL_44;
-                        }
-LABEL_43:
-                    v6[8] &= 0x7Fu;
-                    goto LABEL_44;
-                    }
-                goto LABEL_44;
-                }
-            }
-        }
-    else
-        {
-        switch(newDialogueType)
-            {
-        case DIALOGUE_19:  npc_event_id = speakingNPC->evt_A; break;
-        case DIALOGUE_20:  npc_event_id = speakingNPC->evt_B; break;
-        case DIALOGUE_21:  npc_event_id = speakingNPC->evt_C; break;
-        case DIALOGUE_22:	 npc_event_id = speakingNPC->evt_D; break;
-        case DIALOGUE_23:  npc_event_id = speakingNPC->evt_E; break;
-        case DIALOGUE_24:	 npc_event_id = speakingNPC->evt_F; break;
-            }
-        if ( (npc_event_id >= 200) && (npc_event_id <= 310) )
-            sub_4B3FE5(npc_event_id); //200-310
-        else if (( npc_event_id >= 400) && (npc_event_id <= 410) )
-            { //400-410
-            dword_F8B1D8 = newDialogueType;
-            DrawJoinGuildWindow(npc_event_id - 400);
-            }
-        else
-            {
-            switch ( npc_event_id )
-                {
-            case 139:
-                sub_4B1ECE();
-                break;
-            case 311:
-                sub_4BBA85_bounties();
-                break;
-            case 399:
-                sub_4BBCDD();
-                break;
-            default:
-                activeLevelDecoration = (LevelDecoration*)1;
-                ptr_F8B1E8 = 0;
-                EventProcessor(npc_event_id, 0, 1);
-                activeLevelDecoration = NULL;
-                break;
-                }
-            }
-        }
-LABEL_87:
-    if ( !dword_7241C8 )
-        pGame->Draw();
-LABEL_89:
-    dword_7241C8 = 0;
-    }
+	uDialogueType = newDialogueType;
+	if (!speakingNPC->uFlags)
+	{
+		speakingNPC->uFlags = 1;
+		//v3 = uDialogueType;
+	}
+
+	if(newDialogueType == DIALOGUE_PROFESSION_DETAILS)
+	{
+		dialogue_show_profession_details = ~dialogue_show_profession_details;
+	}
+	else if(newDialogueType == DIALOGUE_76)
+	{
+		if (speakingNPC->Hired())
+		{
+			v8 = 0;
+			if ( (signed int)pNPCStats->uNumNewNPCs > 0 )
+			{
+				v6 = (char *)pNPCStats->pNewNPCData;
+				while ( !(v6[8] & 0x80) || strcmp(speakingNPC->pName, *(const char **)v6) )
+				{
+					++v8;
+					v6 += 76;
+					if ( v8 >= (signed int)pNPCStats->uNumNewNPCs )
+						break;
+				}
+				if( v8 < (signed int)pNPCStats->uNumNewNPCs )
+					v6[8] &= 0x7Fu;
+			}
+			if ( pParty->pHirelings[0].pName && !_strcmpi(pParty->pHirelings[0].pName, speakingNPC->pName) )
+			{
+				v11 = pParty->pHirelings;
+				memset(v11, 0, sizeof(NPCData));
+			}
+			else if ( pParty->pHirelings[1].pName && !_strcmpi(pParty->pHirelings[1].pName, speakingNPC->pName) )
+			{
+				v11 = &pParty->pHirelings[1];
+				memset(v11, 0, sizeof(NPCData));
+			}
+			pParty->field_709 = 0;
+			sub_44A56A();
+			dword_591084 = 0;
+			pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+			dword_7241C8 = 0;
+			return;
+		}
+		if ( pParty->pHirelings[0].pName && pParty->pHirelings[1].pName )
+		{
+			v7 = pGlobalTXT_LocalizationStrings[533]; // ""I cannot join you, you're party is full""
+			ShowStatusBarString(v7, 2u);
+		}
+		else
+		{
+			//v9 = v2->uProfession;
+			if ( speakingNPC->uProfession != 51 )
+			{
+				v10 = pNPCStats->pProfessions[speakingNPC->uProfession - 1].uHirePrice;
+																	if ( pParty->uNumGold < v10 )
+			{
+				ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);// "You don't have enough gold"
+				dialogue_show_profession_details = false;
+				uDialogueType = 13;
+				if ( uActiveCharacter )
+					pPlayers[uActiveCharacter]->PlaySound(SPEECH_NotEnoughGold, 0);
+				v7 = pGlobalTXT_LocalizationStrings[155];
+				ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);
+				if ( !dword_7241C8 )
+					pGame->Draw();
+				dword_7241C8 = 0;
+				return;
+			}
+				Party::TakeGold(v10);
+			}
+			LOBYTE(speakingNPC->uFlags) |= 0x80u;
+			if ( pParty->pHirelings[0].pName )
+			{
+				memcpy(&pParty->pHirelings[1], speakingNPC, sizeof(pParty->pHirelings[1]));
+				v15 = speakingNPC->pName;
+				v13 = pParty->pHireling2Name;
+			}
+			else
+			{
+				memcpy(pParty->pHirelings, speakingNPC, 0x4Cu);
+				v15 = speakingNPC->pName;
+				v13 = pParty->pHireling1Name;
+			}
+			strcpy(v13, v15);
+			pParty->field_709 = 0;
+			sub_44A56A();
+
+			pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+
+			if ( (sDialogue_SpeakingActorNPC_ID & 0x80000000u) == 0 )
+				pDialogue_SpeakingActor->uAIState = Removed;
+			if ( uActiveCharacter )
+				pPlayers[uActiveCharacter]->PlaySound(SPEECH_61, 0);
+		}
+	}
+	else if ( (signed int)newDialogueType > 84 && (signed int)newDialogueType <= 88 )
+	{
+		ArenaFight();
+		return;
+	}
+	else if(newDialogueType == DIALOGUE_9)
+	{
+		if ( !sub_4BB756(speakingNPC->uProfession) )
+		{
+			if ( speakingNPC->uProfession != 41 )
+				speakingNPC->bHasUsedTheAbility = 1;
+
+			pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+		}
+		else
+		{
+			ShowStatusBarString(pGlobalTXT_LocalizationStrings[140], 2u); //"Your packs are already full!"
+		}
+	}
+	else if(newDialogueType == DIALOGUE_13)
+	{
+		if (!speakingNPC->Hired())
+		{
+			sub_4B3E1E();
+			dialogue_show_profession_details = false;
+		}
+		else
+		{
+			v5 = 0;
+			if ( (signed int)pNPCStats->uNumNewNPCs > 0 )
+			{
+				v6 = (char *)pNPCStats->pNewNPCData;
+				while ( !(v6[8] & 0x80) || strcmp(speakingNPC->pName, *(const char **)v6) )
+				{
+					++v5;
+					v6 += 76;
+					if ( v5 >= (signed int)pNPCStats->uNumNewNPCs )
+						break;
+				}
+				if ( v5 < (signed int)pNPCStats->uNumNewNPCs )
+					v6[8] &= 0x7Fu;
+			}
+			if ( pParty->pHirelings[0].pName && !_strcmpi(pParty->pHirelings[0].pName, speakingNPC->pName) )
+			{
+				v11 = pParty->pHirelings;
+				memset(v11, 0, sizeof(NPCData));
+			}
+			else if ( pParty->pHirelings[1].pName && !_strcmpi(pParty->pHirelings[1].pName, speakingNPC->pName) )
+			{
+				v11 = &pParty->pHirelings[1];
+				memset(v11, 0, sizeof(NPCData));
+			}
+			pParty->field_709 = 0;
+			sub_44A56A();
+			dword_591084 = 0;
+			pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+			dword_7241C8 = 0;
+			return;
+		}
+	}
+	else if(newDialogueType >= 19 && newDialogueType <= 24)
+	{
+		switch(newDialogueType)
+		{
+			case DIALOGUE_19:  npc_event_id = speakingNPC->evt_A; break;
+			case DIALOGUE_20:  npc_event_id = speakingNPC->evt_B; break;
+			case DIALOGUE_21:  npc_event_id = speakingNPC->evt_C; break;
+			case DIALOGUE_22:	 npc_event_id = speakingNPC->evt_D; break;
+			case DIALOGUE_23:  npc_event_id = speakingNPC->evt_E; break;
+			case DIALOGUE_24:	 npc_event_id = speakingNPC->evt_F; break;
+		}
+		if ( (npc_event_id >= 200) && (npc_event_id <= 310) )
+			sub_4B3FE5(npc_event_id); //200-310
+		else if (( npc_event_id >= 400) && (npc_event_id <= 410) )
+		{ //400-410
+			dword_F8B1D8 = newDialogueType;
+			DrawJoinGuildWindow(npc_event_id - 400);
+		}
+		else
+		{
+			switch ( npc_event_id )
+			{
+				case 139:
+					sub_4B1ECE();
+					break;
+				case 311:
+					sub_4BBA85_bounties();
+					break;
+				case 399:
+					sub_4BBCDD();
+					break;
+				default:
+					activeLevelDecoration = (LevelDecoration*)1;
+					ptr_F8B1E8 = 0;
+					EventProcessor(npc_event_id, 0, 1);
+					activeLevelDecoration = NULL;
+					break;
+			}
+		}
+	}
+	if ( !dword_7241C8 )
+		pGame->Draw();
+	dword_7241C8 = 0;
+}