diff mm7_4.cpp @ 1457:9dc33590f93e

Merge
author Gloval
date Wed, 14 Aug 2013 00:40:51 +0400
parents dfc9484ed94c
children 934074e7fcc1 ff2118028c71
line wrap: on
line diff
--- a/mm7_4.cpp	Wed Aug 14 00:40:23 2013 +0400
+++ b/mm7_4.cpp	Wed Aug 14 00:40:51 2013 +0400
@@ -1906,459 +1906,378 @@
 //----- (00495461) --------------------------------------------------------
 char *BuildDialogueString(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
-  //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
+  char *pText; // esi@7
   int v17; // eax@10
   signed __int64 v18; // qax@18
-  unsigned int v19; // edi@32
   unsigned __int8 *v20; // ebx@32
   int v21; // ecx@34
-  __int16 v22; // ax@34
-  int v23; // edx@39
-  int v24; // eax@39
-  int v25; // eax@45
-  float *v26; // esi@68
-  float v27; // ST18_4@68
-  signed int v28; // eax@68
+  int pReputation; // eax@45
   int v29; // eax@68
-  float v30; // ST18_4@72
-  signed int v31; // eax@72
-  float v32; // ST18_4@74
-  signed int v33; // eax@74
-  double v34; // st7@75
-  float v35; // ST18_4@76
-  signed int v36; // eax@76
-  float *v37; // esi@78
-  float v38; // ST18_4@78
-  int v39; // eax@78
-  float v40; // ST18_4@82
-  int v41; // eax@82
-  float v42; // ST18_4@83
-  int v43; // eax@83
-  float v44; // ST18_4@85
-  int v45; // eax@85
-  const char *v46; // eax@86
-  unsigned int v47; // eax@87
-  float v48; // ST18_4@97
-  __int64 v49; // ST14_8@107
-  int v50; // eax@107
-  int v51; // eax@108
-  Player *v52; // eax@109
-  int v53; // [sp-4h] [bp-13Ch]@107
-  int v54; // [sp+0h] [bp-138h]@107
   __int16 v55[56]; // [sp+10h] [bp-128h]@34
   stru351_summoned_item v56; // [sp+80h] [bp-B8h]@107
-  stru351_summoned_item 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
-  //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 packed;
 
-
-
-  v6 = uPlayerID;
-  //Str = lpsz;
-  if ( IsBadStringPtrA(lpsz, 1u) )
+  if ( IsBadStringPtrA(lpsz, 1) )
     return "Invalid String Passed";
 
   a1[0] = 0;
-  pPlayer = &pParty->pPlayers[v6];
-  v59 = TargetColor(255, 255, 155);
-  //v61 = pPlayer;
+  pPlayer = &pParty->pPlayers[uPlayerID];
   memset(pTmpBuf2.data(), 0, sizeof(pTmpBuf2));
 
   NPCData *npc = nullptr;
   if ( dword_5C35D4 )
-  {
-    //__debugbreak(); // fix  
     npc = HouseNPCData[(unsigned int)((char *)pDialogueNPCCount + -(dword_591080 != 0))]; //- 1
-  }
   else
     npc = GetNPCData(sDialogue_SpeakingActorNPC_ID);
-  //v65 = v9;
-  //v10 = 0;
-  //v64 = 0;
 
-  //int i = 0;
-  //if ( (signed int)v60 > 0 )
-  v11 = a4;
-
+  //pText = 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 _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 )
-            {
-              if ( SHIDWORD(v18) >= 0 && (unsigned int)v18 >= 0xB )
-              {
-                if ( v18 < 20 )
-                  v11 = pGlobalTXT_LocalizationStrings[396];// "day"
-              }
-              else
-              {
-                v11 = pGlobalTXT_LocalizationStrings[395];// "morning"
-              }
-            }
-            goto _continue_strcat;
-          case 6:
-            if ( pPlayer->uSex )
-              v11 = pGlobalTXT_LocalizationStrings[387];// "lady"
-            else
-              v11 = pGlobalTXT_LocalizationStrings[385];// "sir"
-            goto _continue_strcat;
-          case 7:
-            if ( pPlayer->uSex )
-              v11 = pGlobalTXT_LocalizationStrings[389];// "Lady"
-            else
-              v11 = pGlobalTXT_LocalizationStrings[386];// "Sir"
-            goto _continue_strcat;
-          case 8:
-            v19 = 0;
-            v63 = 0;
-            v20 = (unsigned __int8 *)pPlayer->_guilds_member_bits;
-            do
-            {
-              if ( (unsigned __int16)_449B57_test_bit(v20, word_4EE150[v19]) )
-              {
-                v21 = v63;
-                v22 = word_4EE150[v19];
-                ++v63;
-                v55[v21] = v22;
-              }
-              ++v19;
-            }
-            while ( v19 < 28 );
-            if ( v63 )
+        case 1://Подробнее
+          strcat(pTmpBuf2.data(), npc->pName);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 2:
+          strcat(pTmpBuf2.data(), pPlayer->pName);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 3:
+        case 4:
+          strcat(pTmpBuf2.data(), a1);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 5:
+          v18 = (signed __int64)((double)(signed __int64)pParty->uTimePlayed * 0.234375) / 60 / 60 % 24;
+          pText = pGlobalTXT_LocalizationStrings[397];// "evening"
+          if ( SHIDWORD(v18) <= 0 && SHIDWORD(v18) >= 0 && (unsigned int)v18 >= 5 && SHIDWORD(v18) <= 0 )
+          {
+            if ( SHIDWORD(v18) >= 0 && (unsigned int)v18 >= 11 )
             {
-              v23 = rand() % v63;
-              v24 = dword_A74CDC;
-              if ( dword_A74CDC == -1 )
-              {
-                v24 = v23;
-                dword_A74CDC = v23;
-              }
-              v11 = (char *)pAwards[v55[v24]].pText;//(char *)dword_723E80_award_related[2 * v55[v24]];
-            }
-            else
-            {
-              v11 = (char *)pNPCTopics[55].pText;
-            }
-            //pPlayer = v61;
-            //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 )
-              v11 = pGlobalTXT_LocalizationStrings[389];// "Lady"
-            else
-              v11 = pGlobalTXT_LocalizationStrings[388];// "Lord"
-            goto _continue_strcat;
-          case 11:
-            v25 = GetPartyReputation();
-                        if ( v25 >= 25 )
-            {
-              v11 = pGlobalTXT_LocalizationStrings[379];
-            }
-            else
-            {
-              if ( v25 < 6 )
-              {
-                if ( v25 >= -5 )
-                {
-                  v11 = pGlobalTXT_LocalizationStrings[399];
-                }
-                else
-                {
-                  if ( v25 < -24 )
-                    v11 = pGlobalTXT_LocalizationStrings[434];
-                  else
-                    v11 = pGlobalTXT_LocalizationStrings[402];
-                }
-              }
-              else
-              {
-                v11 = pGlobalTXT_LocalizationStrings[392];
-              }
-            }
-            goto _continue_strcat;
-          case 12:
-            v25 = npc->rep;
-            if ( v25 >= 25 )
-            {
-              v11 = pGlobalTXT_LocalizationStrings[379];
+              if ( v18 < 20 )
+                pText = pGlobalTXT_LocalizationStrings[396];// "day"
             }
             else
             {
-              if ( v25 < 6 )
+              pText = pGlobalTXT_LocalizationStrings[395];// "morning"
+            }
+          }
+          strcat(pTmpBuf2.data(), pText);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 6:
+          if ( pPlayer->uSex )
+            pText = pGlobalTXT_LocalizationStrings[387];// "lady"
+          else
+            pText = pGlobalTXT_LocalizationStrings[385];// "sir"
+          strcat(pTmpBuf2.data(), pText);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 7:
+          if ( pPlayer->uSex )
+            pText = pGlobalTXT_LocalizationStrings[389];// "Lady"
+          else
+            pText = pGlobalTXT_LocalizationStrings[386];// "Sir"
+          strcat(pTmpBuf2.data(), pText);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 8:
+          v63 = 0;
+          v20 = (unsigned __int8 *)pPlayer->_guilds_member_bits;
+          for ( uint i = 0; i < 28; ++i )
+          {
+            if ( (unsigned __int16)_449B57_test_bit(v20, word_4EE150[i]) )
+            {
+              v21 = v63;
+              ++v63;
+              v55[v63] = word_4EE150[i];
+            }
+          }
+          if ( v63 )
+          {
+            if ( dword_A74CDC == -1 )
+              dword_A74CDC = rand() % v63;
+            pText = (char *)pAwards[v55[dword_A74CDC]].pText;//(char *)dword_723E80_award_related[2 * v55[v24]];
+          }
+          else
+            pText = (char *)pNPCTopics[55].pText;
+          strcat(pTmpBuf2.data(), pText);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 9:
+          if ( npc->uSex )
+            pText = pGlobalTXT_LocalizationStrings[384];// "her"
+          else
+            pText = pGlobalTXT_LocalizationStrings[383];// "his"
+          strcat(pTmpBuf2.data(), pText);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 10:
+          if ( pPlayer->uSex )
+            pText = pGlobalTXT_LocalizationStrings[389];// "Lady"
+          else
+            pText = pGlobalTXT_LocalizationStrings[388];// "Lord"
+          strcat(pTmpBuf2.data(), pText);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 11:
+          pReputation = GetPartyReputation();
+          if ( pReputation >= 25 )
+            pText = pGlobalTXT_LocalizationStrings[379];
+          else//v25 < 25
+          {
+            if ( pReputation < 6 )
+            {
+              if ( pReputation >= -5 )//6 >= v25 >= -5
+                pText = pGlobalTXT_LocalizationStrings[399];
+              else// v25 < -5
               {
-                if ( v25 >= -5 )
-                {
-                  v11 = pGlobalTXT_LocalizationStrings[399];
-                }
-                else
-                {
-                  if ( v25 < -24 )
-                    v11 = pGlobalTXT_LocalizationStrings[434];
-                  else
-                    v11 = pGlobalTXT_LocalizationStrings[402];
-                }
+                if ( pReputation < -24 )//-24 > v25
+                  pText = pGlobalTXT_LocalizationStrings[434];
+                else// -5 > v25 > -24
+                  pText = pGlobalTXT_LocalizationStrings[402];
               }
+            }
+            else//25 > v25 > 6
+              pText = pGlobalTXT_LocalizationStrings[392];
+          }
+          strcat(pTmpBuf2.data(), pText);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 12:
+          pReputation = npc->rep;
+          if ( pReputation >= 25 )
+            pText = pGlobalTXT_LocalizationStrings[379];
+          else
+          {
+            if ( pReputation < 6 )
+            {
+              if ( pReputation >= -5 )
+                pText = pGlobalTXT_LocalizationStrings[399];
               else
               {
-                v11 = pGlobalTXT_LocalizationStrings[392];
+                if ( pReputation < -24 )
+                  pText = pGlobalTXT_LocalizationStrings[434];
+                else
+                  pText = pGlobalTXT_LocalizationStrings[402];
               }
             }
-            goto _continue_strcat;
-          case 13:
-            v11 = sub_495366(pPlayer->pName[0], pPlayer->uSex);
-            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.data(), v11);
-            dst = strlen(pTmpBuf2.data());
-            //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 _continue_strcat;
+              pText = pGlobalTXT_LocalizationStrings[392];
           }
-
-          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 _continue_strcat;
-
-          case 23:
-          {
-            v47 = pMapStats->GetMapInfo(pCurrentMapName.data());
-            if ( v47 )
-              v11 = pMapStats->pInfos[v47].pName;
-            else
-              v11 = pGlobalTXT_LocalizationStrings[394];// "Unknown"
-            goto _continue_strcat;
-          }
-          case 24:
-          {
-            v46 = a3->GetDisplayName();
-            sprintfex(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->GetBaseBuyingPrice(v39, v38);
+          strcat(pTmpBuf2.data(), pText);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 13:
+          strcat(pTmpBuf2.data(), sub_495366(pPlayer->pName[0], pPlayer->uSex));
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 14:
+          if ( npc->uSex )
+            pText = pGlobalTXT_LocalizationStrings[391];// "sister"
+          else
+            pText = pGlobalTXT_LocalizationStrings[390];// "brother"
+          strcat(pTmpBuf2.data(), pText);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 15:
+          strcat(pTmpBuf2.data(), pGlobalTXT_LocalizationStrings[393]);// "daughter"
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 16:
+          if ( npc->uSex )
+            pText = pGlobalTXT_LocalizationStrings[391];// "sister"
+          else
+            pText = pGlobalTXT_LocalizationStrings[390];// "brother"
+          strcat(pTmpBuf2.data(), pText);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 17://текст наёмного НПС
+        {
+          auto pay_percentage = pNPCStats->pProfessions[npc->uProfession - 1].uHirePrice / 100;
+          if ( !pay_percentage )
+            pay_percentage = 1;
+          sprintf(a1, "%lu", pay_percentage);
+          strcat(pTmpBuf2.data(), a1);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        }
+        case 18:
+        case 19:
+        case 20:
+        case 21:
+        case 22:
+        case 26:
+          strncpy(a1, lpsz + i + 1, 2);
+          sprintf(a1, "%lu", atoi(a1));
+          strcat(pTmpBuf2.data(), a1);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 23:
+          if ( pMapStats->GetMapInfo(pCurrentMapName.data()) )
+            pText = pMapStats->pInfos[pMapStats->GetMapInfo(pCurrentMapName.data())].pName;
+          else
+            pText = pGlobalTXT_LocalizationStrings[394];// "Unknown"
+          strcat(pTmpBuf2.data(), pText);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 24://название товара в продаже
+          sprintfex(a1, format_4E2D80, TargetColor(255, 255, 155), a3->GetDisplayName());
+          strcat(pTmpBuf2.data(), a1);
+          dst = strlen(pTmpBuf2.data());
+          i += 2;
+          break;
+        case 25:
+          v29 = pPlayer->GetBaseBuyingPrice(a3->GetValue(), p2DEvents[(signed int)a4 - 1].fPriceMultiplier);
           switch ( a5 )
-          {
-            case 3:
-              v44 = *v37;
-              v45 = a3->GetValue();
-              v29 = pPlayer->GetBaseSellingPrice(v45, v44);
-              break;
-            case 4:
-              v29 = pPlayer->GetBaseIdentifyPrice(*v37);
-              break;
-            case 5:
-              v42 = *v37;
-              v43 = a3->GetValue();
-              v29 = pPlayer->GetBaseRepairPrice(v43, v42);
-              break;
-            case 6:
-              v40 = *v37;
-              v41 = a3->GetValue();
-              v29 = pPlayer->GetBaseSellingPrice(v41, v40) / 2;
+            {
+              case 3:
+                v29 = pPlayer->GetBaseSellingPrice(a3->GetValue(), p2DEvents[(signed int)a4 - 1].fPriceMultiplier);
+                break;
+              case 4:
+                v29 = pPlayer->GetBaseIdentifyPrice(p2DEvents[(signed int)a4 - 1].fPriceMultiplier);
+                break;
+              case 5:
+                v29 = pPlayer->GetBaseRepairPrice(a3->GetValue(), p2DEvents[(signed int)a4 - 1].fPriceMultiplier);
+                break;
+              case 6:
+                v29 = pPlayer->GetBaseSellingPrice(a3->GetValue(), p2DEvents[(signed int)a4 - 1].fPriceMultiplier) / 2;
+                break;
+            }
+            sprintfex(a1, "%lu", v29);
+            strcat(pTmpBuf2.data(), a1);
+            dst = strlen(pTmpBuf2.data());
+            i += 2;
+            break;
+          case 27://текст продажи
+            v29 = pPlayer->GetBuyingPrice(a3->GetValue(), p2DEvents[(signed int)a4 - 1].fPriceMultiplier);
+            if ( a5 == 3 )
+            {
+              v29 = pPlayer->GetPriceSell(a3->GetValue(), p2DEvents[(signed int)a4 - 1].fPriceMultiplier);
+              if (a3->Broken())
+                v29 = 1;
+              sprintfex(a1, "%lu", v29);
+              strcat(pTmpBuf2.data(), a1);
+              dst = strlen(pTmpBuf2.data());
+              i += 2;
               break;
             }
-            goto _continue_sprintf;
-          }
-
-          case 27:
-          {
-                    v26 = &p2DEvents[(signed int)a4 - 1].fPriceMultiplier;
-        v27 = *v26;
-        v28 = a3->GetValue();
-        v29 = pPlayer->GetBuyingPrice(v28, v27);
-        if ( a5 == 3 )
-        {
-          v35 = *v26;
-          v36 = a3->GetValue();
-          v29 = pPlayer->GetPriceSell(v36, v35);
-          if (a3->Broken())
-            v29 = 1;
-          goto _continue_sprintf;
-        }
-        if ( a5 != 4 )
-        {
-          if ( a5 == 5 )
-          {
-            v32 = *v26;
-            v33 = a3->GetValue();
-            v29 = pPlayer->GetPriceRepair(v33, v32);
-          }
-          else
-          {
-            if ( a5 == 6 )
+            if ( a5 != 4 )
             {
-              v30 = *v26;
-              v31 = a3->GetValue();
-              v29 = pPlayer->GetPriceSell(v31, v30) / 2;
-              if (a3->Broken())
-                v29 = 1;
-              if (!v29)
-                v29 = 1;
-              goto _continue_sprintf;
+              if ( a5 == 5 )
+                v29 = pPlayer->GetPriceRepair(a3->GetValue(), p2DEvents[(signed int)a4 - 1].fPriceMultiplier);
+              else
+              {
+                if ( a5 == 6 )
+                {
+                  v29 = pPlayer->GetPriceSell(a3->GetValue(), p2DEvents[(signed int)a4 - 1].fPriceMultiplier) / 2;
+                  if (a3->Broken())
+                    v29 = 1;
+                  if (!v29)
+                    v29 = 1;
+                  sprintfex(a1, "%lu", v29);
+                  strcat(pTmpBuf2.data(), a1);
+                  dst = strlen(pTmpBuf2.data());
+                  i += 2;
+                  break;
+                }
+              }
+              sprintfex(a1, "%lu", v29);
+              strcat(pTmpBuf2.data(), a1);
+              dst = strlen(pTmpBuf2.data());
+              i += 2;
+              break;
             }
-          }
-_continue_sprintf:
-          sprintfex(a1, "%lu", v29);
-          v11 = a1;
-          goto _continue_strcat;
-        }
-        v34 = *v26;
-
-      v48 = v34;
-      v29 = pPlayer->GetPriceIdentification(v48);
-      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;
-          }
-
+            sprintfex(a1, "%lu", pPlayer->GetPriceIdentification(p2DEvents[(signed int)a4 - 1].fPriceMultiplier));
+            strcat(pTmpBuf2.data(), a1);
+            dst = strlen(pTmpBuf2.data());
+            i += 2;
+            break;
+          case 28://профессия
+            strcat(pTmpBuf2.data(), (char *)p2DEvents[(signed int)a4 - 1].pProprieterTitle);
+            dst = strlen(pTmpBuf2.data());
+            i += 2;
+            break;
           case 29:
-          {
-            //v34 = p2DEvents_minus1__20[13 * (signed int)a4];
-            v34 = p2DEvents[(signed int)a4 - 1].fPriceMultiplier;
-            v48 = v34;
-            v29 = pPlayer->GetPriceIdentification(v48);
-            goto _continue_sprintf;
-          }
-
+            sprintfex(a1, "%lu", pPlayer->GetPriceIdentification(p2DEvents[(signed int)a4 - 1].fPriceMultiplier));
+            strcat(pTmpBuf2.data(), a1);
+            dst = strlen(pTmpBuf2.data());
+            i += 2;
+            break;
           case 30:
-          {
-                if ( !a6 )
-      goto _continue_strcat;
-    sub_493F79(&v57, *a6);
-    v54 = v57.field_18_expire_year;
-    v53 = v57.field_C_expire_day + 1;
-    v50 = v57.field_14_exprie_month;
-    sprintfex(a1, pGlobalTXT_LocalizationStrings[378], aMonthNames[v50], v53, v54);
-    v11 = a1;
-    goto _continue_strcat;
-          }
-
+            if ( !a6 )
+            {
+              strcat(pTmpBuf2.data(), a4);
+              dst = strlen(pTmpBuf2.data());
+              i += 2;
+              break;
+            }
+            sub_493F79(&v56, *a6);
+            sprintfex(a1, pGlobalTXT_LocalizationStrings[378], aMonthNames[v56.field_14_exprie_month], v56.field_C_expire_day + 1, v56.field_18_expire_year);
+            strcat(pTmpBuf2.data(), a1);
+            dst = strlen(pTmpBuf2.data());
+            i += 2;
+            break;
           case 31:
           case 32:
           case 33:
           case 34:
-            v52 = &pParty->pPlayers[v17 - 31];
-            v11 = v52->pName;
-            goto _continue_strcat;
-
+            strcat(pTmpBuf2.data(), pParty->pPlayers[v17 - 31].pName);
+            dst = strlen(pTmpBuf2.data());
+            i += 2;
+            break;
           default:
             if ( v17 <= 50 || v17 > 70 )
-              goto _continue_strncpy;
+            {
+              strncpy(a1, lpsz + i + 1, 2);
+              sprintf(a1, "%lu", atoi(a1));
+              strcat(pTmpBuf2.data(), a1);
+              dst = strlen(pTmpBuf2.data());
+              i += 2;
+              break;
+            }
             if ( v17 - 51 >= 20 )
-              goto _continue_strcat;
-            v49 = pParty->field_3C._s_times[v17-51];
-            
-            sub_493F79(&v56, v49);
-            v54 = v56.field_18_expire_year;
-            v53 = v56.field_C_expire_day + 1;
-            v50 = v56.field_14_exprie_month;
-            sprintfex(a1, pGlobalTXT_LocalizationStrings[378], aMonthNames[v50], v53, v54);
-            v11 = a1;
-            goto _continue_strcat;
+            {
+              strcat(pTmpBuf2.data(), a4);
+              dst = strlen(pTmpBuf2.data());
+              i += 2;
+              break;
+            }
+            sub_493F79(&v56, pParty->field_3C._s_times[v17-51]);
+            sprintfex(a1, pGlobalTXT_LocalizationStrings[378], aMonthNames[v56.field_14_exprie_month], v56.field_C_expire_day + 1, v56.field_18_expire_year);
+            strcat(pTmpBuf2.data(), a1);
+            dst = strlen(pTmpBuf2.data());
+            i += 2;
+          break;
         }
       }
   }