comparison Items.cpp @ 598:f8a4a2e0b4c9

fixed random iten generator, chest generator
author Gloval
date Wed, 06 Mar 2013 22:46:40 +0400
parents f54481c85df8
children e39702f35283
comparison
equal deleted inserted replaced
570:f54481c85df8 598:f8a4a2e0b4c9
923 } 923 }
924 //ChanceByTreasureLvl Summ - anti cheating? 924 //ChanceByTreasureLvl Summ - anti cheating?
925 memset(&uChanceByTreasureLvlSumm, 0, 24); 925 memset(&uChanceByTreasureLvlSumm, 0, 24);
926 for(i=0;i<6;++i) 926 for(i=0;i<6;++i)
927 { 927 {
928 for (j=0;j<800;++j) 928 for (j=1;j<item_counter;++j)
929 uChanceByTreasureLvlSumm[i]+=pItems[j].uChanceByTreasureLvl[i]; 929 uChanceByTreasureLvlSumm[i]+=pItems[j].uChanceByTreasureLvl[i];
930 } 930 }
931 931
932 strtok(NULL, "\r"); 932 strtok(NULL, "\r");
933 strtok(NULL, "\r"); 933 strtok(NULL, "\r");
1721 v18 = rand() % v5->uChanceByTreasureLvlSumm[treasure_level - 1]; 1721 v18 = rand() % v5->uChanceByTreasureLvlSumm[treasure_level - 1];
1722 out_item->uItemID = 0; 1722 out_item->uItemID = 0;
1723 if ( v18 > 0 ) 1723 if ( v18 > 0 )
1724 { 1724 {
1725 do 1725 do
1726 v57 += pItems[out_item->uItemID++ + 1].uChanceByTreasureLvl[v6]; 1726 {
1727 v57 += pItems[out_item->uItemID + 1].uChanceByTreasureLvl[v6];
1728 ++out_item->uItemID;
1729 }
1727 while ( v57 < v18 ); 1730 while ( v57 < v18 );
1728 } 1731 }
1729 1732
1730 if ( !v18 ) 1733 if ( !v18 )
1731 out_item->uItemID = 1; 1734 out_item->uItemID = 1;
2017 pParty->InTheShopFlags[shop_index] = 0; 2020 pParty->InTheShopFlags[shop_index] = 0;
2018 } 2021 }
2019 2022
2020 2023
2021 //----- (00450218) -------------------------------------------------------- 2024 //----- (00450218) --------------------------------------------------------
2022 void sub_450218_prolly_generate_chests_loot() 2025 void GenerateItemsInChest()
2023 { 2026 {
2024 unsigned int v0; // eax@1 2027 unsigned int v0; // eax@1
2025 Chest *v1; // ebx@1 2028 Chest *v1; // ebx@1
2026 MapInfo *v2; // esi@1 2029 MapInfo *v2; // esi@1
2027 ItemGen *v3; // ebx@2 2030 ItemGen *v3; // ebx@2
2028 int v4; // ebp@4 2031 int v4; // ebp@4
2029 int v5; // edi@4 2032 int v5; // edi@4
2030 int v6; // esi@4 2033 int v6; // esi@4
2031 int v7; // eax@4 2034 int v7; // eax@4
2032 signed int v8; // esi@4 2035 signed int v8; // esi@4
2033 int v9; // edx@4 2036 int v9; // edx@4
2034 int v10; // esi@8 2037 int v10; // esi@8
2035 int v11; // ebp@25 2038 int v11; // ebp@25
2036 int v12; // esi@25 2039 int v12; // esi@25
2037 signed int v13; // ebp@27 2040 signed int v13; // ebp@27
2038 ItemGen *v14; // edi@28 2041 ItemGen *v14; // edi@28
2039 signed int v15; // edx@32 2042 signed int v15; // edx@32
2040 signed __int64 v16; // qtt@32 2043 signed __int64 v16; // qtt@32
2041 int v17; // esi@34 2044 int v17; // esi@34
2042 signed int v18; // [sp+10h] [bp-18h]@1 2045 signed int v18; // [sp+10h] [bp-18h]@1
2043 int v19; // [sp+14h] [bp-14h]@4 2046 int v19; // [sp+14h] [bp-14h]@4
2044 MapInfo *v20; // [sp+18h] [bp-10h]@1 2047 MapInfo *v20; // [sp+18h] [bp-10h]@1
2045 Chest *v21; // [sp+1Ch] [bp-Ch]@1 2048 Chest *v21; // [sp+1Ch] [bp-Ch]@1
2046 int v22; // [sp+20h] [bp-8h]@26 2049 int v22; // [sp+20h] [bp-8h]@26
2047 signed int v23; // [sp+24h] [bp-4h]@2 2050 signed int v23; // [sp+24h] [bp-4h]@2
2048 2051
2049 v18 = rand() % 100; 2052 v18 = rand() % 100; //main random
2050 v0 = pMapStats->GetMapInfo(pCurrentMapName); 2053 v0 = pMapStats->GetMapInfo(pCurrentMapName);
2051 v1 = pChests; 2054 // v1 = pChests;
2052 v2 = &pMapStats->pInfos[v0]; 2055 v2 = &pMapStats->pInfos[v0];
2053 v21 = pChests; 2056 //v21 = pChests;
2054 v20 = &pMapStats->pInfos[v0]; 2057 //v20 = &pMapStats->pInfos[v0];
2055 for(int i=0; i<20;++i) 2058 for(int i=1; i<20;++i)
2056 { 2059 {
2057 for(int j=0; j<140;++j) 2060 for(int j=0; j<140;++j)
2058 { 2061 {
2062
2059 v3 = &pChests[i].igChestItems[j]; 2063 v3 = &pChests[i].igChestItems[j];
2060 if ( v3->uItemID < 0 ) 2064 if ( v3->uItemID < 0 )
2061 { 2065 {
2062 v4 = rand() % 5 + 1; 2066 v4 = rand() % 5; //additional items in chect
2063 v5 = (unsigned __int8)byte_4E8168[abs((int)v3->uItemID)-1][2*v2->Treasure_prob];//[2 * (v2->Treasure_prob + 7 * abs((int)v3->uItemID)) + 2]; 2067 v5 = (unsigned __int8)byte_4E8168[abs((int)v3->uItemID)-1][2*v2->Treasure_prob];
2064 v6 = (unsigned __int8)byte_4E8168[abs((int)v3->uItemID)-1][2*v2->Treasure_prob+1];//[2 * (v2->Treasure_prob + 7 * abs((int)v3->uItemID)) + 3]; 2068 v6 = (unsigned __int8)byte_4E8168[abs((int)v3->uItemID)-1][2*v2->Treasure_prob+1];
2065 v7 = rand(); 2069 v8 = v6 - v5 + 1;
2066 v8 = v6 - v5 + 1; 2070 v9 = v5 + rand() % v8; //treasure level
2067 v9 = v5 + v7 % v8; 2071 if (v9<7)
2068 v19 = v5 + v7 % v8; 2072 {
2069 /* switch (v9) 2073 if (v18<20)
2070 { 2074 {
2071 default: 2075 v3->Reset();
2072 2076 }
2073 }*/ 2077 else if (v18<60) //generate gold
2074 2078 {
2075 2079 v10=0;
2076 if ( v9 < 7 ) 2080 v3->Reset();
2077 { 2081 switch (v9)
2078 if ( v18 < 20 ) 2082 {
2079 { 2083 case 1: //small gold
2080 v3->Reset(); 2084 v10 = rand() % 51 + 50;
2081 goto LABEL_25; 2085 v3->uItemID = 197;
2082 } 2086 break;
2083 if ( v18 < 60 ) 2087 case 2://small gold
2084 { 2088 v10 = rand() % 101 + 100;
2085 v10 = 0; 2089 v3->uItemID = 197;
2086 v3->Reset(); 2090 break;
2087 if ( v19 == 1 ) 2091 case 3: //medium
2088 { 2092 v10 = rand() % 301 + 200;
2089 v10 = rand() % 51 + 50; 2093 v3->uItemID = 198;
2090 } 2094 break;
2091 else 2095 case 4: //medium
2092 { 2096 v10 = rand() % 501 + 500;
2093 if ( v19 != 2 ) 2097 v3->uItemID = 198;
2094 { 2098 break;
2095 if ( v19 == 3 ) 2099 case 5: //big
2096 { 2100 v10 = rand() % 1001 + 1000;
2097 v10 = rand() % 301 + 200; 2101 v3->uItemID = 199;
2098 } 2102 break;
2099 else 2103 case 6: //big
2100 { 2104 v10 = rand() % 3001 + 2000;
2101 if ( v19 != 4 ) 2105 v3->uItemID = 199;
2102 { 2106 break;
2103 if ( v19 == 5 ) 2107 }
2104 { 2108 v3->SetIdentified();
2105 v10 = rand() % 1001 + 1000; 2109 v3->uSpecEnchantmentType = v10;
2106 LABEL_15: 2110 }
2107 v3->uItemID = 199; 2111 else
2108 } 2112 {
2109 else 2113 pItemsTable->GenerateItem(v9, 0, v3);
2110 { 2114 }
2111 if ( v19 == 6 ) 2115
2112 { 2116 v12 = 0;
2113 v10 = rand() % 3001 + 2000; 2117 //generate more items
2114 goto LABEL_15; 2118 for (v11=0; v11<v4; ++v11)
2115 } 2119 {
2116 } 2120
2117 LABEL_23: 2121 if ( v12 >= 140 )
2118 v3->SetIdentified(); 2122 break;
2119 v3->uSpecEnchantmentType = v10; 2123 while ( !(pChests[i].igChestItems[v12].uItemID==0) &&(v12<140))
2120 LABEL_25: 2124 {
2121 v11 = v4 - 1; 2125 ++v12;
2122 v12 = 0; 2126 }
2123 if ( v11 > 0 ) 2127 v14=&pChests[i].igChestItems[v12];
2124 { 2128 v18 = rand() % 100;
2125 v22 = v11; 2129 if (v18<20)
2126 while ( 1 ) 2130 {
2127 { 2131 v3->Reset();
2128 v13 = v12; 2132 }
2129 if ( v12 >= 140 ) 2133 else if (v18<60) //generate gold
2130 goto LABEL_52; 2134 {
2131 v14 = &v21->igChestItems[v12]; 2135 v10=0;
2132 while ( v14->uItemID ) 2136 v3->Reset();
2133 { 2137 switch (v9)
2134 ++v13; 2138 {
2135 ++v14; 2139 case 1: //small gold
2136 if ( v13 >= 140 ) 2140 v10 = rand() % 51 + 50;
2137 goto LABEL_52; 2141 v14->uItemID = 197;
2138 } 2142 break;
2139 v16 = rand(); 2143 case 2://small gold
2140 v15 = v16 % 100; 2144 v10 = rand() % 101 + 100;
2141 v18 = v16 % 100; 2145 v14->uItemID = 197;
2142 if ( v15 < 20 ) 2146 break;
2143 goto LABEL_52; 2147 case 3: //medium
2144 if ( v15 >= 60 ) 2148 v10 = rand() % 301 + 200;
2145 { 2149 v14->uItemID = 198;
2146 pItemsTable->GenerateItem(v19, 0, v14); 2150 break;
2147 goto LABEL_51; 2151 case 4: //medium
2148 } 2152 v10 = rand() % 501 + 500;
2149 v17 = 0; 2153 v14->uItemID = 198;
2150 v14->Reset(); 2154 break;
2151 if ( v19 == 1 ) 2155 case 5: //big
2152 { 2156 v10 = rand() % 1001 + 1000;
2153 v17 = rand() % 51 + 50; 2157 v14->uItemID = 199;
2154 goto LABEL_48; 2158 break;
2155 } 2159 case 6: //big
2156 if ( v19 == 2 ) 2160 v10 = rand() % 3001 + 2000;
2157 { 2161 v14->uItemID = 199;
2158 v17 = rand() % 101 + 100; 2162 break;
2159 LABEL_48: 2163 }
2160 v14->uItemID = 197; 2164 v14->SetIdentified();
2161 goto LABEL_49; 2165 v14->uSpecEnchantmentType = v10;
2162 } 2166 }
2163 if ( v19 == 3 ) 2167 else
2164 { 2168 {
2165 v17 = rand() % 301 + 200; 2169 pItemsTable->GenerateItem(v9, 0, v14);
2166 goto LABEL_44; 2170 }
2167 } 2171 ++v12;
2168 if ( v19 == 4 ) 2172 }
2169 { 2173 }
2170 v17 = rand() % 501 + 500; 2174 else
2171 LABEL_44: 2175 v3->GenerateArtifact();
2172 v14->uItemID = 198;
2173 goto LABEL_49;
2174 }
2175 if ( v19 == 5 )
2176 break;
2177 if ( v19 == 6 )
2178 {
2179 v17 = rand() % 3001 + 2000;
2180 LABEL_41:
2181 v14->uItemID = 199;
2182 }
2183 LABEL_49:
2184 v14->uSpecEnchantmentType = v17;
2185 LABEL_51:
2186 v12 = v13 + 1;
2187 LABEL_52:
2188 --v22;
2189 if ( !v22 )
2190 goto LABEL_55;
2191 }
2192 v17 = rand() % 1001 + 1000;
2193 goto LABEL_41;
2194 }
2195 goto LABEL_55;
2196 }
2197 v10 = rand() % 501 + 500;
2198 }
2199 v3->uItemID = 198;
2200 goto LABEL_23;
2201 }
2202 v10 = rand() % 101 + 100;
2203 }
2204 v3->uItemID = 197;
2205 goto LABEL_23;
2206 }
2207 pItemsTable->GenerateItem(v9, 0, v3);
2208 goto LABEL_25;
2209 }
2210 v3->GenerateArtifact();
2211
2212 LABEL_55:
2213 v2 = v20;
2214 LABEL_56: ;
2215 } 2176 }
2216 } 2177 }
2217 } 2178 }
2218 2179
2219 } 2180 }
2220 2181
2221 2182
2222 2183
2223 2184
2224 // 4505CC: using guessed type int var_A0[32]; 2185 // 4505CC: using guessed type int var_A0[32];