Mercurial > mm7
diff mm7_4.cpp @ 263:8cf4fe6b4941
Слияние
author | Ritor1 |
---|---|
date | Mon, 18 Feb 2013 12:38:38 +0600 |
parents | 2d6dda2e0405 0a37a56e9f02 |
children | fb890fb66cad |
line wrap: on
line diff
--- a/mm7_4.cpp Mon Feb 18 12:38:07 2013 +0600 +++ b/mm7_4.cpp Mon Feb 18 12:38:38 2013 +0600 @@ -3530,7 +3530,7 @@ v45 = 0; v48 = 0; v46 = 0; - if ( v44 && v21->classType == PLAYER_CLASS_31 ) + if ( v44 && v21->classType == PLAYER_CLASS_WARLOCK ) v50 = 1; if ( v21->classType == PLAYER_CLASS_LICH ) v48 = 1; @@ -4836,18 +4836,18 @@ } //----- (00495461) -------------------------------------------------------- -char *__fastcall sub_495461(char *lpsz, unsigned __int8 uPlayerID, ItemGen *a3, char *a4, int a5, __int64 *a6) +char *BuilDialogueString(char *lpsz, unsigned __int8 uPlayerID, ItemGen *a3, char *a4, int a5, __int64 *a6) { unsigned __int8 v6; // bl@1 Player *pPlayer; // ebx@3 - NPCData *v9; // eax@4 + //NPCData *v9; // eax@4 //size_t v10; // eax@6 char *v11; // esi@7 - int v12; // edx@7 - ItemGen *v13; // edi@7 - char v14; // cl@8 - char *v15; // ecx@10 - int v16; // edx@10 + //int v12; // edx@7 + //ItemGen *v13; // edi@7 + //char v14; // cl@8 + //char *v15; // ecx@10 + //int v16; // edx@10 int v17; // eax@10 signed __int64 v18; // qax@18 unsigned int v19; // edi@32 @@ -4891,76 +4891,74 @@ stru351 v57; // [sp+9Ch] [bp-9Ch]@115 char a1[100]; // [sp+B8h] [bp-80h]@3 unsigned int v59; // [sp+11Ch] [bp-1Ch]@3 - size_t v60; // [sp+120h] [bp-18h]@3 + //size_t v60; // [sp+120h] [bp-18h]@3 //Player *v61; // [sp+124h] [bp-14h]@3 //char *Str; // [sp+128h] [bp-10h]@1 int v63; // [sp+12Ch] [bp-Ch]@32 - int v64; // [sp+130h] [bp-8h]@6 - NPCData *v65; // [sp+134h] [bp-4h]@6 + //int v64; // [sp+130h] [bp-8h]@6 + //NPCData *v65; // [sp+134h] [bp-4h]@6 + //int packed; + + v6 = uPlayerID; //Str = lpsz; if ( IsBadStringPtrA(lpsz, 1u) ) return "Invalid String Passed"; - v60 = strlen(lpsz); + a1[0] = 0; pPlayer = &pParty->pPlayers[v6]; v59 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(255, 255, 155); //v61 = pPlayer; - memset(pTmpBuf2, 0, 0x7D0u); + memset(pTmpBuf2, 0, sizeof(pTmpBuf2)); + + NPCData *npc = nullptr; if ( dword_5C35D4 ) { __debugbreak(); // fix - v9 = array_5913D8[(unsigned int)((char *)array_5913D8[6] + -(dword_591080 != 0) - 1)]; - } - else - v9 = GetNPCData(uDialogue_SpeakingActorNPC_ID); - v65 = v9; + npc = array_5913D8[(unsigned int)((char *)array_5913D8[6] + -(dword_591080 != 0) - 1)]; + } + else + npc = GetNPCData(uDialogue_SpeakingActorNPC_ID); + //v65 = v9; //v10 = 0; - v64 = 0; - - int i = 0; - if ( (signed int)v60 > 0 ) - { - v11 = a4; - v12 = v64; - v13 = a3; - while ( 1 ) - { - v14 = lpsz[v12]; - if ( v14 == '%' ) - break; - pTmpBuf2[i++] = v14; -LABEL_119: - ++v12; - v64 = v12; - if ( v12 >= (signed int)v60 ) - return pTmpBuf2; - } - v15 = &lpsz[v12 + 1]; - v16 = (unsigned __int8)lpsz[v12 + 2]; - v17 = v16 + 10 * (unsigned __int8)*v15 - 528; - - if ( v17 <= 15 ) - { - if ( v17 != 15 ) - { - switch ( v16 + 10 * (unsigned __int8)*v15 ) - { - case 0x211: - v11 = v65->pName; - goto LABEL_118; - case 0x212: + //v64 = 0; + + //int i = 0; + //if ( (signed int)v60 > 0 ) + v11 = a4; + + auto len = strlen(lpsz); + for (int i = 0, dst = 0; i < len; ++i) + { + //v12 = v64; + //v13 = a3; + //while ( 1 ) + //{ + char c = lpsz[i]; + if (c != '%') + pTmpBuf2[dst++] = c; + else + { + //v15 = &lpsz[v12 + 1]; + //v16 = (unsigned __int8)lpsz[v12 + 2]; + //packed = 10 * (int)lpsz[v12 + 1] + lpsz[v12 + 2]; + //v17 = packed - 528;// 10 * '0' + '0' + v17 = 10 * (int)(lpsz[i + 1] - '0') + lpsz[i + 2] - '0'; + + switch ( v17 ) + { + case 1: + v11 = npc->pName; + goto _continue_strcat; + case 2: v11 = pPlayer->pName; - goto LABEL_118; - case 0x213: - case 0x219: - if ( v65->uSex ) - v11 = pGlobalTXT_LocalizationStrings[384];// "her" - else - v11 = pGlobalTXT_LocalizationStrings[383];// "his" - goto LABEL_118; - case 0x215: + goto _continue_strcat; + case 3: + case 4: + v11 = a1; + goto _continue_strcat; + case 5: v18 = (signed __int64)((double)(signed __int64)pParty->uTimePlayed * 0.234375) / 60 / 60 % 24; v11 = pGlobalTXT_LocalizationStrings[397];// "evening" if ( SHIDWORD(v18) <= 0 && SHIDWORD(v18) >= 0 && (unsigned int)v18 >= 5 && SHIDWORD(v18) <= 0 ) @@ -4975,19 +4973,20 @@ v11 = pGlobalTXT_LocalizationStrings[395];// "morning" } } - goto LABEL_118; - case 0x216: + goto _continue_strcat; + case 6: if ( pPlayer->uSex ) v11 = pGlobalTXT_LocalizationStrings[387];// "lady" else v11 = pGlobalTXT_LocalizationStrings[385];// "sir" - goto LABEL_118; - case 0x217: + goto _continue_strcat; + case 7: if ( pPlayer->uSex ) - goto LABEL_43; - v11 = pGlobalTXT_LocalizationStrings[386];// "Sir" - goto LABEL_118; - case 0x218: + v11 = pGlobalTXT_LocalizationStrings[389];// "Lady" + else + v11 = pGlobalTXT_LocalizationStrings[386];// "Sir" + goto _continue_strcat; + case 8: v19 = 0; v63 = 0; v20 = (unsigned __int8 *)pPlayer->field_152; @@ -5019,20 +5018,25 @@ v11 = (char *)pNPCTopics[55].pText; } //pPlayer = v61; - v13 = a3; - goto LABEL_118; - case 0x21A: + //v13 = a3; + goto _continue_strcat; + case 9: + if ( npc->uSex ) + v11 = pGlobalTXT_LocalizationStrings[384];// "her" + else + v11 = pGlobalTXT_LocalizationStrings[383];// "his" + goto _continue_strcat; + case 10: if ( pPlayer->uSex ) -LABEL_43: v11 = pGlobalTXT_LocalizationStrings[389];// "Lady" else v11 = pGlobalTXT_LocalizationStrings[388];// "Lord" - goto LABEL_118; - case 0x21B: + goto _continue_strcat; + case 11: v25 = GetPartyReputation(); goto LABEL_46; - case 0x21C: - v25 = v65->rep; + case 12: + v25 = npc->rep; LABEL_46: if ( v25 >= 25 ) { @@ -5059,79 +5063,91 @@ v11 = pGlobalTXT_LocalizationStrings[392]; } } - goto LABEL_118; - case 0x21D: + goto _continue_strcat; + case 13: v11 = sub_495366(pPlayer->pName[0], pPlayer->uSex); - goto LABEL_118; - case 0x21E: - goto LABEL_93; - case 0x214: + goto _continue_strcat; + case 14: + { + if ( npc->uSex ) + v11 = pGlobalTXT_LocalizationStrings[391];// "sister" + else + v11 = pGlobalTXT_LocalizationStrings[390];// "brother" + goto _continue_strcat; + } + + case 15: + { + v11 = pGlobalTXT_LocalizationStrings[393];// "daughter" +_continue_strcat: + strcat(pTmpBuf2, v11); + dst = strlen(pTmpBuf2); + //v64 += 2; + i += 2; + } + break; + + case 16: + { + if ( npc->uSex ) + v11 = pGlobalTXT_LocalizationStrings[391];// "sister" + else + v11 = pGlobalTXT_LocalizationStrings[390];// "brother" + goto _continue_strcat; + } + case 17: + { + auto pay_percentage = pNPCStats->pProfessions[npc->uProfession - 1].uHirePrice / 100; + if (!pay_percentage) + pay_percentage = 1; + + sprintf(a1, "%lu", pay_percentage); v11 = a1; - goto LABEL_118; - default: - goto LABEL_108; - } - goto LABEL_108; - } - v11 = pGlobalTXT_LocalizationStrings[393];// "daughter" -LABEL_118: - strcat(pTmpBuf2, v11); - i = strlen(pTmpBuf2); - v64 += 2; - v12 = v64; - goto LABEL_119; - } - if ( v17 <= 29 ) - { - if ( v17 == 29 ) - { - //v34 = p2DEvents_minus1__20[13 * (signed int)a4]; - v34 = p2DEvents[(signed int)a4 - 1].fPriceMultiplier; - } - else - { - if ( v16 + 10 * (unsigned __int8)*v15 == 544 ) - { -LABEL_93: - if ( v65->uSex ) - v11 = pGlobalTXT_LocalizationStrings[391];// "sister" - else - v11 = pGlobalTXT_LocalizationStrings[390];// "brother" - goto LABEL_118; - } - if ( v16 + 10 * (unsigned __int8)*v15 == 545 ) - { - v29 = *(&pNPCStats->field_13A58 + 5 * v65->uProfession) / 100; - goto LABEL_91; - } - if ( v16 + 10 * (unsigned __int8)*v15 == 551 ) - { - v47 = pMapStats->GetMapInfo(pCurrentMapName); - if ( v47 ) - v11 = pMapStats->pInfos[v47].pName; - else - v11 = pGlobalTXT_LocalizationStrings[394];// "Unknown" - goto LABEL_118; - } - if ( v16 + 10 * (unsigned __int8)*v15 == 552 ) - { - v46 = v13->GetDisplayName(); - sprintf(a1, format_4E2D80, v59, v46); + goto _continue_strcat; + } + + case 18: + case 19: + case 20: + case 21: + case 22: + case 26: +_continue_strncpy: + strncpy(a1, lpsz + i + 1, 2); + v51 = atoi(a1); + sprintf(a1, "%lu", v51); v11 = a1; - goto LABEL_118; - } - if ( v16 + 10 * (unsigned __int8)*v15 == 553 ) - { - //v37 = &p2DEvents_minus1__20[13 * (signed int)a4]; - v37 = &p2DEvents[(signed int)a4 - 1].fPriceMultiplier; - v38 = *v37; - v39 = v13->GetValue(); - v29 = pPlayer->_4B8233(v39, v38); + goto _continue_strcat; + + case 23: + { + v47 = pMapStats->GetMapInfo(pCurrentMapName); + if ( v47 ) + v11 = pMapStats->pInfos[v47].pName; + else + v11 = pGlobalTXT_LocalizationStrings[394];// "Unknown" + goto _continue_strcat; + } + case 24: + { + v46 = a3->GetDisplayName(); + sprintf(a1, format_4E2D80, v59, v46); + v11 = a1; + goto _continue_strcat; + } + + + case 25: + { + v37 = &p2DEvents[(signed int)a4 - 1].fPriceMultiplier; + v38 = *v37; + v39 = a3->GetValue(); + v29 = pPlayer->_4B8233(v39, v38); switch ( a5 ) { case 3: v44 = *v37; - v45 = v13->GetValue(); + v45 = a3->GetValue(); v29 = pPlayer->_4B8213(v45, v44); break; case 4: @@ -5139,55 +5155,39 @@ break; case 5: v42 = *v37; - v43 = v13->GetValue(); + v43 = a3->GetValue(); v29 = pPlayer->_4B8265(v43, v42); break; case 6: v40 = *v37; - v41 = v13->GetValue(); + v41 = a3->GetValue(); v29 = pPlayer->_4B8213(v41, v40) / 2; break; - } - goto LABEL_98; - } - if ( v16 + 10 * (unsigned __int8)*v15 != 555 ) - { - if ( v16 + 10 * (unsigned __int8)*v15 == 556 ) - { - //v11 = (char *)p2DEvents_minus1__10[13 * (signed int)a4]; - v11 = (char *)p2DEvents[(signed int)a4 - 1].pProprieterTitle; - goto LABEL_118; - } -LABEL_108: - strncpy(a1, v15, 2u); - v51 = atoi(a1); - sprintf(a1, "%lu", v51); - v11 = a1; - goto LABEL_118; - } - v26 = &p2DEvents[(signed int)a4 - 1].fPriceMultiplier; + } + goto _continue_sprintf; + } + + case 27: + { + v26 = &p2DEvents[(signed int)a4 - 1].fPriceMultiplier; v27 = *v26; - v28 = v13->GetValue(); + v28 = a3->GetValue(); v29 = pPlayer->_4B8142(v28, v27); if ( a5 == 3 ) { v35 = *v26; - v36 = v13->GetValue(); + v36 = a3->GetValue(); v29 = pPlayer->_4B8102(v36, v35); - if ( v13->uAttributes & 2 ) - { -LABEL_77: + if ( a3->uAttributes & 2 ) v29 = 1; - goto LABEL_98; - } - goto LABEL_98; + goto _continue_sprintf; } if ( a5 != 4 ) { if ( a5 == 5 ) { v32 = *v26; - v33 = v13->GetValue(); + v33 = a3->GetValue(); v29 = pPlayer->_4B81C3(v33, v32); } else @@ -5195,47 +5195,69 @@ if ( a5 == 6 ) { v30 = *v26; - v31 = v13->GetValue(); + v31 = a3->GetValue(); v29 = pPlayer->_4B8102(v31, v30) / 2; - if ( v13->uAttributes & 2 ) + if ( a3->uAttributes & 2 ) v29 = 1; -LABEL_91: - if ( v29 >= 1 ) - goto LABEL_98; - goto LABEL_77; + if (!v29) + v29 = 1; + goto _continue_sprintf; } } -LABEL_98: +_continue_sprintf: sprintf(a1, "%lu", v29); v11 = a1; - goto LABEL_118; + goto _continue_strcat; } v34 = *v26; - } + v48 = v34; v29 = pPlayer->_4B8179(v48); - goto LABEL_98; - } - if ( v17 != 30 ) - { - switch ( v17 ) - { - case 31: - v52 = pPlayers[1]; - break; - case 32: - v52 = pPlayers[2]; - break; - case 33: - v52 = pPlayers[3]; - break; - default: - if ( v17 != 34 ) - { + goto _continue_sprintf; + } + + case 28: + { + //v11 = (char *)p2DEvents_minus1__10[13 * (signed int)a4]; + v11 = (char *)p2DEvents[(signed int)a4 - 1].pProprieterTitle; + goto _continue_strcat; + } + + case 29: + { + //v34 = p2DEvents_minus1__20[13 * (signed int)a4]; + v34 = p2DEvents[(signed int)a4 - 1].fPriceMultiplier; + v48 = v34; + v29 = pPlayer->_4B8179(v48); + goto _continue_sprintf; + } + + case 30: + { + if ( !a6 ) + goto _continue_strcat; + sub_493F79(&v57, *a6); + v54 = v57.field_18; + v53 = v57.field_C + 1; + v50 = v57.field_14; + sprintf(a1, pGlobalTXT_LocalizationStrings[378], aMonthNames[v50], v53, v54); + v11 = a1; + goto _continue_strcat; + } + + case 31: + case 32: + case 33: + case 34: + v52 = &pParty->pPlayers[v17 - 31]; + v11 = v52->pName; + goto _continue_strcat; + + default: if ( v17 <= 50 || v17 > 70 ) - goto LABEL_108; - if ( v16 + 10 * (unsigned __int8)*v15 - 579 >= 20 ) - goto LABEL_118; + goto _continue_strncpy; + if ( v17 - 51 >= 20 ) + goto _continue_strcat; HIDWORD(v49) = pParty->field_3C.field_440[2 * v17 + 1]; LODWORD(v49) = pParty->field_3C.field_440[2 * v17]; sub_493F79(&v56, v49); @@ -5244,23 +5266,9 @@ v50 = v56.field_14; sprintf(a1, pGlobalTXT_LocalizationStrings[378], aMonthNames[v50], v53, v54); v11 = a1; - goto LABEL_118; - } - v52 = pPlayers[4]; - break; - } - v11 = v52->pName; - goto LABEL_118; - } - if ( !a6 ) - goto LABEL_118; - sub_493F79(&v57, *a6); - v54 = v57.field_18; - v53 = v57.field_C + 1; - v50 = v57.field_14; - sprintf(a1, pGlobalTXT_LocalizationStrings[378], aMonthNames[v50], v53, v54); - v11 = a1; - goto LABEL_118; + goto _continue_strcat; + } + } } return pTmpBuf2; } @@ -5617,7 +5625,7 @@ pTextCenter = pFontCreate->AlignText_Center(65, pClassNames[32]); pGUIWindow_CurrentMenu->DrawText(pFontCreate, pTextCenter + 388, 2 * v128 + 417, v80, pClassNames[32], 0, 0, 0); v85 = uColorTeal; - if ( uClassType != PLAYER_CLASS_SHOOTER ) + if ( uClassType != PLAYER_CLASS_ARCHER ) v85 = uColorWhite; pTextCenter = pFontCreate->AlignText_Center(65, pClassNames[16]); pGUIWindow_CurrentMenu->DrawText(pFontCreate, pTextCenter + 453, 417, v85, pClassNames[16], 0, 0, 0); @@ -9415,7 +9423,7 @@ if ( a1 == 13 ) { ptr_F8B1E8 = (char *)*(&pNPCStats->field_13A64 + 5 * v2->uProfession); - ptr_F8B1E8 = sub_495461((char *)ptr_F8B1E8, uActiveCharacter - 1, 0, 0, 0, 0); + ptr_F8B1E8 = BuilDialogueString((char *)ptr_F8B1E8, uActiveCharacter - 1, 0, 0, 0, 0); sub_4B40E6(); dialogue_show_profession_details = false; goto _return; @@ -9489,7 +9497,7 @@ else v17 = pNPCStats->pProfessions[v2->uProfession - 1].pBenefits; ptr_F8B1E8 = v17; - v18 = sub_495461(v17, uActiveCharacter - 1, 0, 0, 0, 0); + v18 = BuilDialogueString(v17, uActiveCharacter - 1, 0, 0, 0, 0); dialogue_show_profession_details = ~dialogue_show_profession_details; ptr_F8B1E8 = v18; } @@ -9616,7 +9624,7 @@ dialogue_show_profession_details = false; uDialogueType = 13; ptr_F8B1E8 = pNPCStats->pProfessions[v2->uProfession - 1].pJoinText; - ptr_F8B1E8 = sub_495461((char *)ptr_F8B1E8, uActiveCharacter - 1, 0, 0, 0, 0); + ptr_F8B1E8 = BuilDialogueString((char *)ptr_F8B1E8, uActiveCharacter - 1, 0, 0, 0, 0); if ( uActiveCharacter ) pPlayers[uActiveCharacter]->PlaySound(SPEECH_NotEnoughGold, 0); v19 = pGlobalTXT_LocalizationStrings[155]; @@ -12259,7 +12267,7 @@ v4 = (char *)&_this->pInventoryItems[result-1]; if ( v4[20] & 1 ) { - v5 = sub_495461("%24", uActiveCharacter - 1, (ItemGen *)v4, (char *)ptr_507BC0->ptr_1C, 4, 0); + v5 = BuilDialogueString("%24", uActiveCharacter - 1, (ItemGen *)v4, (char *)ptr_507BC0->ptr_1C, 4, 0); v97 = 3; v95 = v5; v92 = white; @@ -12303,7 +12311,7 @@ v9 = uPlayerID; v10 = (char *)pMerchantsSellPhrases[v13]; LABEL_35: - v30 = sub_495461(v10, v9, v90, (char *)v93, v94, v96); + v30 = BuilDialogueString(v10, v9, v90, (char *)v93, v94, v96); v97 = 3; v95 = v30; v92 = white; @@ -13052,7 +13060,7 @@ 3, v16, 2); - v18 = sub_495461((char *)pMerchantsBuyPhrases[v17], uPlayerID, v15, (char *)v14, 2, 0); + v18 = BuilDialogueString((char *)pMerchantsBuyPhrases[v17], uPlayerID, v15, (char *)v14, 2, 0); v44 = 3; v43 = v18; v42 = v56;