Mercurial > mm7
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]; |