Mercurial > mm7
changeset 656:6abf5b610585
OnSelectNPCDialogueOption clean
author | zipi |
---|---|
date | Tue, 12 Mar 2013 21:58:10 +0000 |
parents | 6a2d29c21d09 |
children | cec42951eda0 |
files | mm7_4.cpp |
diffstat | 1 files changed, 204 insertions(+), 202 deletions(-) [+] |
line wrap: on
line diff
--- a/mm7_4.cpp Tue Mar 12 21:07:57 2013 +0000 +++ b/mm7_4.cpp Tue Mar 12 21:58:10 2013 +0000 @@ -10811,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 @@ -10828,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; +}