diff --git a/Client/mods/deathmatch/logic/CVehicleUpgrades.cpp b/Client/mods/deathmatch/logic/CVehicleUpgrades.cpp index da592b41ef..79221376a5 100644 --- a/Client/mods/deathmatch/logic/CVehicleUpgrades.cpp +++ b/Client/mods/deathmatch/logic/CVehicleUpgrades.cpp @@ -9,6 +9,7 @@ *****************************************************************************/ #include +#include "VehicleUpgrades.hpp" char szUpgradeNameEmpty[] = ""; @@ -49,317 +50,19 @@ bool CVehicleUpgrades::IsUpgrade(unsigned short usModel) bool CVehicleUpgrades::IsUpgradeCompatible(unsigned short usUpgrade) { - unsigned short us = usUpgrade; eClientVehicleType vehicleType = m_pVehicle->GetVehicleType(); - // No upgrades for trains/boats - if (vehicleType == CLIENTVEHICLE_TRAIN || vehicleType == CLIENTVEHICLE_BOAT) + // No upgrades for trains/boats/bike/bmx/heli/plane + if (vehicleType == CLIENTVEHICLE_TRAIN || vehicleType == CLIENTVEHICLE_BOAT || vehicleType == CLIENTVEHICLE_BIKE || + vehicleType == CLIENTVEHICLE_BMX || vehicleType == CLIENTVEHICLE_HELI || vehicleType == CLIENTVEHICLE_PLANE) return false; - // In MTA every vehicle has a radio... - if (us == 1086) - return true; - - if (vehicleType == CLIENTVEHICLE_BIKE || vehicleType == CLIENTVEHICLE_BMX || vehicleType == CLIENTVEHICLE_HELI) - return false; - - unsigned short usModel = m_pVehicle->GetModel(); - // Wheels should be compatible with any vehicle which have wheels, except - // bike/bmx (they're buggy). Vortex is technically a car, but it has no - // wheels. - if ((us == 1025 || us == 1073 || us == 1074 || us == 1075 || us == 1076 || us == 1077 || us == 1078 || us == 1079 || us == 1080 || us == 1081 || - us == 1082 || us == 1083 || us == 1084 || us == 1085 || us == 1096 || us == 1097 || us == 1098) && - usModel != 539) - return true; - - // No nitro or other upgrades for planes - if (vehicleType == CLIENTVEHICLE_PLANE) - return false; - - if (us == VEHICLEUPGRADE_NITRO_5X || us == VEHICLEUPGRADE_NITRO_2X || us == VEHICLEUPGRADE_NITRO_10X || us == VEHICLEUPGRADE_HYDRAULICS) - return true; - - bool bReturn = false; - switch (usModel) - { - case 400: - bReturn = (us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1013 || us == 1024 || us == 1008 || us == 1009 || us == 1010); - break; - case 401: - bReturn = (us == 1005 || us == 1004 || us == 1142 || us == 1143 || us == 1144 || us == 114 || us == 1020 || us == 1019 || us == 1013 || - us == 1008 || us == 1009 || us == 1010 || us == 1006 || us == 1001 || us == 1003 || us == 1017 || us == 1007); - break; - case 402: - bReturn = (us == 1009 || us == 1010); - break; - case 404: - bReturn = (us == 1020 || us == 1021 || us == 1019 || us == 1013 || us == 1008 || us == 1009 || us == 1010 || us == 1002 || us == 1016 || - us == 1000 || us == 1017 || us == 1007); - break; - case 405: - bReturn = (us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1001 || us == 1014 || - us == 1023 || us == 1000); - break; - case 409: - bReturn = (us == 1009); - break; - case 410: - bReturn = (us == 1019 || us == 1021 || us == 1020 || us == 1013 || us == 1024 || us == 1008 || us == 1009 || us == 1010 || us == 1001 || - us == 1023 || us == 1003 || us == 1017 || us == 1007); - break; - case 411: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 412: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 415: - bReturn = - (us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1001 || us == 1023 || us == 1003 || us == 1017 || us == 1007); - break; - case 418: - bReturn = (us == 1020 || us == 1021 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || us == 1002 || us == 1016); - break; - case 419: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 420: - bReturn = (us == 1005 || us == 1004 || us == 1021 || us == 1019 || us == 1008 || us == 1009 || us == 1010 || us == 1001 || us == 1003); - break; - case 421: - bReturn = (us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1014 || us == 1023 || - us == 1016 || us == 1000); - break; - case 422: - bReturn = (us == 1020 || us == 1021 || us == 1019 || us == 1013 || us == 1008 || us == 1009 || us == 1010 || us == 1017 || us == 1007); - break; - case 426: - bReturn = - (us == 1005 || us == 1004 || us == 1021 || us == 1019 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || us == 1001 || us == 1003); - break; - case 429: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 436: - bReturn = (us == 1020 || us == 1021 || us == 1022 || us == 1019 || us == 1013 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || - us == 1001 || us == 1003 || us == 1017 || us == 1007); - break; - case 438: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 439: - bReturn = (us == 1003 || us == 1023 || us == 1001 || us == 1008 || us == 1009 || us == 1010 || us == 1017 || us == 1007 || us == 1142 || - us == 1143 || us == 1144 || us == 1145 || us == 1013); - break; - case 442: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 445: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 451: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 458: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 466: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 467: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 474: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 475: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 477: - bReturn = - (us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || us == 1017 || us == 1007); - break; - case 478: - bReturn = (us == 1005 || us == 1004 || us == 1012 || us == 1020 || us == 1021 || us == 1022 || us == 1013 || us == 1024 || us == 1008 || - us == 1009 || us == 1010); - break; - case 479: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 480: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 489: - bReturn = (us == 1005 || us == 1004 || us == 1020 || us == 1019 || us == 1018 || us == 1013 || us == 1024 || us == 1008 || us == 1009 || - us == 1010 || us == 1006 || us == 1002 || us == 1016 || us == 1000); - break; - case 491: - bReturn = (us == 1142 || us == 1143 || us == 1144 || us == 1145 || us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1008 || - us == 1009 || us == 1010 || us == 1014 || us == 1023 || us == 1003 || us == 1017 || us == 1007); - break; - case 492: - bReturn = (us == 1005 || us == 1004 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || us == 1016 || us == 1000); - break; - case 496: - bReturn = (us == 1006 || us == 1017 || us == 1007 || us == 1011 || us == 1019 || us == 1023 || us == 1001 || us == 1008 || us == 1009 || - us == 1010 || us == 1003 || us == 1002 || us == 1142 || us == 1143 || us == 1020); - break; - case 500: - bReturn = (us == 1020 || us == 1021 || us == 1019 || us == 1013 || us == 1024 || us == 1008 || us == 1009 || us == 1010); - break; - case 506: - bReturn = (us == 1009); - break; - case 507: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 516: - bReturn = (us == 1004 || us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1002 || - us == 1015 || us == 1016 || us == 1000 || us == 1017 || us == 1007); - break; - case 517: - bReturn = (us == 1142 || us == 1143 || us == 1144 || us == 1145 || us == 1020 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || - us == 1010 || us == 1002 || us == 1023 || us == 1016 || us == 1003 || us == 1017 || us == 1007); - break; - case 518: - bReturn = (us == 1005 || us == 1142 || us == 1143 || us == 1144 || us == 1145 || us == 1020 || us == 1018 || us == 1013 || us == 1008 || - us == 1009 || us == 1010 || us == 1006 || us == 1001 || us == 1023 || us == 1003 || us == 1017 || us == 1007); - break; - case 526: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 527: - bReturn = (us == 1021 || us == 1020 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1001 || us == 1014 || us == 1015 || - us == 1017 || us == 1007); - break; - case 529: - bReturn = (us == 1012 || us == 1011 || us == 1020 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || - us == 1001 || us == 1023 || us == 1003 || us == 1017 || us == 1007); - break; - case 533: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 534: - bReturn = (us == 1126 || us == 1127 || us == 1179 || us == 1185 || us == 1100 || us == 1123 || us == 1125 || us == 1008 || us == 1009 || - us == 1010 || us == 1180 || us == 1178 || us == 1101 || us == 1122 || us == 1124 || us == 1106); - break; - case 535: - bReturn = (us == 1109 || us == 1110 || us == 1113 || us == 1114 || us == 1115 || us == 1116 || us == 1117 || us == 1008 || us == 1009 || - us == 1010 || us == 1120 || us == 1118 || us == 1121 || us == 1119); - break; - case 536: - bReturn = (us == 1104 || us == 1105 || us == 1182 || us == 1181 || us == 1008 || us == 1009 || us == 1010 || us == 1184 || us == 1183 || - us == 1128 || us == 1103 || us == 1107 || us == 1108); - break; - case 540: - bReturn = (us == 1004 || us == 1142 || us == 1143 || us == 1144 || us == 1145 || us == 1020 || us == 1019 || us == 1018 || us == 1024 || - us == 1008 || us == 1009 || us == 1010 || us == 1006 || us == 1001 || us == 1023 || us == 1017 || us == 1007); - break; - case 541: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 542: - bReturn = (us == 1144 || us == 1145 || us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || - us == 1014 || us == 1015); - break; - case 545: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 546: - bReturn = (us == 1004 || us == 1142 || us == 1143 || us == 1144 || us == 1145 || us == 1019 || us == 1018 || us == 1024 || us == 1008 || - us == 1009 || us == 1010 || us == 1006 || us == 1002 || us == 1001 || us == 1023 || us == 1017 || us == 1007); - break; - case 547: - bReturn = (us == 1142 || us == 1143 || us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || - us == 1016 || us == 1003 || us == 1000); - break; - case 549: - bReturn = (us == 1012 || us == 1011 || us == 1142 || us == 1143 || us == 1144 || us == 1145 || us == 1020 || us == 1019 || us == 1018 || - us == 1008 || us == 1009 || us == 1010 || us == 1001 || us == 1023 || us == 1003 || us == 1017 || us == 1007); - break; - case 550: - bReturn = (us == 1005 || us == 1004 || us == 1142 || us == 1143 || us == 1144 || us == 1145 || us == 1020 || us == 1019 || us == 1018 || - us == 1008 || us == 1009 || us == 1010 || us == 1006 || us == 1001 || us == 1023 || us == 1003); - break; - case 551: - bReturn = (us == 1005 || us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || - us == 1002 || us == 1023 || us == 1016 || us == 1003); - break; - case 555: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 558: - bReturn = (us == 1092 || us == 1089 || us == 1166 || us == 1165 || us == 1008 || us == 1009 || us == 1010 || us == 1168 || us == 1167 || - us == 1088 || us == 1091 || us == 1164 || us == 1163 || us == 1094 || us == 1090 || us == 1095 || us == 1093); - break; - case 559: - bReturn = (us == 1065 || us == 1066 || us == 1160 || us == 1173 || us == 1008 || us == 1009 || us == 1010 || us == 1159 || us == 1161 || - us == 1162 || us == 1158 || us == 1067 || us == 1068 || us == 1071 || us == 1069 || us == 1072 || us == 1070); - break; - case 560: - bReturn = (us == 1028 || us == 1029 || us == 1169 || us == 1170 || us == 1008 || us == 1009 || us == 1010 || us == 1141 || us == 1140 || - us == 1032 || us == 1033 || us == 1138 || us == 1139 || us == 1027 || us == 1026 || us == 1030 || us == 1031); - break; - case 561: - bReturn = (us == 1064 || us == 1059 || us == 1155 || us == 1157 || us == 1008 || us == 1009 || us == 1010 || us == 1154 || us == 1156 || - us == 1055 || us == 1061 || us == 1058 || us == 1060 || us == 1062 || us == 1056 || us == 1063 || us == 1057); - break; - case 562: - bReturn = (us == 1034 || us == 1037 || us == 1171 || us == 1172 || us == 1008 || us == 1009 || us == 1010 || us == 1149 || us == 1148 || - us == 1038 || us == 1035 || us == 1147 || us == 1146 || us == 1040 || us == 1036 || us == 1041 || us == 1039); - break; - case 565: - bReturn = (us == 1046 || us == 1045 || us == 1153 || us == 1152 || us == 1008 || us == 1009 || us == 1010 || us == 1150 || us == 1151 || - us == 1054 || us == 1053 || us == 1049 || us == 1050 || us == 1051 || us == 1047 || us == 1052 || us == 1048); - break; - case 566: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 567: - bReturn = (us == 1129 || us == 1132 || us == 1189 || us == 1188 || us == 1008 || us == 1009 || us == 1010 || us == 1187 || us == 1186 || - us == 1130 || us == 1131 || us == 1102 || us == 1133); - break; - case 575: - bReturn = (us == 1044 || us == 1043 || us == 1174 || us == 1175 || us == 1008 || us == 1009 || us == 1010 || us == 1176 || us == 1177 || - us == 1099 || us == 1042); - break; - case 576: - bReturn = (us == 1136 || us == 1135 || us == 1191 || us == 1190 || us == 1008 || us == 1009 || us == 1010 || us == 1192 || us == 1193 || - us == 1137 || us == 1134); - break; - case 579: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 580: - bReturn = - (us == 1020 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || us == 1001 || us == 1023 || us == 1017 || us == 1007); - break; - case 585: - bReturn = (us == 1142 || us == 1143 || us == 1144 || us == 1145 || us == 1020 || us == 1019 || us == 1018 || us == 1013 || us == 1008 || - us == 1009 || us == 1010 || us == 1006 || us == 1001 || us == 1023 || us == 1003 || us == 1017 || us == 1007); - break; - case 587: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 589: - bReturn = (us == 1005 || us == 1004 || us == 1144 || us == 1145 || us == 1020 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || - us == 1024 || us == 1013 || us == 1006 || us == 1016 || us == 1000 || us == 1017 || us == 1007); - break; - case 600: - bReturn = (us == 1005 || us == 1004 || us == 1020 || us == 1022 || us == 1018 || us == 1013 || us == 1008 || us == 1009 || us == 1010 || - us == 1006 || us == 1017 || us == 1007); - break; - case 602: - bReturn = (us == 1008 || us == 1009 || us == 1010); - break; - case 603: - bReturn = (us == 1144 || us == 1145 || us == 1142 || us == 1143 || us == 1020 || us == 1019 || us == 1018 || us == 1024 || us == 1008 || - us == 1009 || us == 1010 || us == 1006 || us == 1001 || us == 1023 || us == 1017 || us == 1007); - break; - } + bool bReturn = IsUpgradeCompatibleWithModel(m_pVehicle->GetModel(), usUpgrade); + unsigned char ucSlot = 0; + // Allow slot 2 to be upgraded regardless of ID and then check it has the required part - if (GetSlotFromUpgrade(us, ucSlot) && (bReturn || ucSlot == 2)) + if (GetSlotFromUpgrade(usUpgrade, ucSlot) && (bReturn || ucSlot == 2)) { // Get our model supported upgrades SVehicleSupportedUpgrades supportedUpgrades = m_pVehicle->GetModelInfo()->GetVehicleSupportedUpgrades(); @@ -371,7 +74,7 @@ bool CVehicleUpgrades::IsUpgradeCompatible(unsigned short usUpgrade) { if (supportedUpgrades.m_bBonnet == true) { - if (us == 1142 || us == 1144) + if (usUpgrade == 1142 || usUpgrade == 1144) { // We add both left and right for some reason seems to be SA doing it bReturn &= supportedUpgrades.m_bBonnet_Left; @@ -380,7 +83,7 @@ bool CVehicleUpgrades::IsUpgradeCompatible(unsigned short usUpgrade) bReturn &= supportedUpgrades.m_bBonnet_Right; bReturn &= supportedUpgrades.m_bBonnet_Right_dam; } - else if (us == 1004 || us == 1005 || us == 1011 || us == 1012) + else if (usUpgrade == 1004 || usUpgrade == 1005 || usUpgrade == 1011 || usUpgrade == 1012) { // Just needs m_bBonnet bReturn = true; diff --git a/Client/mods/deathmatch/premake5.lua b/Client/mods/deathmatch/premake5.lua index 07013f8d8d..6572098d37 100644 --- a/Client/mods/deathmatch/premake5.lua +++ b/Client/mods/deathmatch/premake5.lua @@ -29,6 +29,7 @@ project "Client Deathmatch" filter {} includedirs { "../../../Shared/sdk", + "../../../Shared/gta", ".", "./logic", "../../sdk/", diff --git a/Server/mods/deathmatch/logic/CVehicleUpgrades.cpp b/Server/mods/deathmatch/logic/CVehicleUpgrades.cpp index 0657e87eec..848bc2b1a5 100644 --- a/Server/mods/deathmatch/logic/CVehicleUpgrades.cpp +++ b/Server/mods/deathmatch/logic/CVehicleUpgrades.cpp @@ -11,6 +11,7 @@ #include "StdInc.h" #include "CVehicleUpgrades.h" +#include "VehicleUpgrades.hpp" char szUpgradeNameEmpty[] = ""; @@ -55,240 +56,14 @@ CVehicleUpgrades::CVehicleUpgrades(CVehicle* pVehicle, CVehicleUpgrades* pUpgrad bool CVehicleUpgrades::IsUpgradeCompatible(unsigned short usUpgrade) { - unsigned short us = usUpgrade; - eVehicleType vehicleType = m_pVehicle->GetVehicleType(); + eVehicleType vehicleType = m_pVehicle->GetVehicleType(); - // No upgrades for trains/boats - if (vehicleType == VEHICLE_TRAIN || vehicleType == VEHICLE_BOAT) + // No upgrades for trains/boats/bike/bmx/heli/plane + if (vehicleType == VEHICLE_TRAIN || vehicleType == VEHICLE_BOAT || vehicleType == VEHICLE_BIKE || + vehicleType == VEHICLE_BMX || vehicleType == VEHICLE_HELI || vehicleType == VEHICLE_PLANE) return false; - // In MTA every vehicle has a radio... - if (us == 1086) - return true; - - if (vehicleType == VEHICLE_BIKE || vehicleType == VEHICLE_BMX || vehicleType == VEHICLE_HELI) - return false; - - unsigned short usModel = m_pVehicle->GetModel(); - // Wheels should be compatible with any vehicle which have wheels, except - // bike/bmx (they're buggy). Vortex is technically a car, but it has no - // wheels. - if ((us == 1025 || us == 1073 || us == 1074 || us == 1075 || us == 1076 || us == 1077 || us == 1078 || us == 1079 || us == 1080 || us == 1081 || - us == 1082 || us == 1083 || us == 1084 || us == 1085 || us == 1096 || us == 1097 || us == 1098) && - usModel != 539) - return true; - - // No nitro or other upgrades for planes/helicopters - if (vehicleType == VEHICLE_PLANE) - return false; - - if (us == VEHICLEUPGRADE_NITRO_5X || us == VEHICLEUPGRADE_NITRO_2X || us == VEHICLEUPGRADE_NITRO_10X || us == VEHICLEUPGRADE_HYDRAULICS) - return true; - - if (us == 1000 || us == 1001 || us == 1002 || us == 1003 || us == 1014 || /* spoiler */ - us == 1015 || us == 1016 || us == 1023 || us == 1049 || us == 1050 || us == 1058 || us == 1060 || us == 1138 || us == 1139 || us == 1146 || - us == 1147 || us == 1158 || us == 1162 || us == 1163 || us == 116) - { - return true; - } - - switch (usModel) - { - case 400: - return (us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1013 || us == 1024 || us == 1008 || us == 1009 || us == 1010); - case 401: - return (us == 1005 || us == 1004 || us == 1142 || us == 1143 || us == 1144 || us == 114 || us == 1020 || us == 1019 || us == 1013 || us == 1008 || - us == 1009 || us == 1010 || us == 1006 || us == 1001 || us == 1003 || us == 1017 || us == 1007); - case 402: - return (us == 1009 || us == 1010); - case 404: - return (us == 1020 || us == 1021 || us == 1019 || us == 1013 || us == 1008 || us == 1009 || us == 1010 || us == 1002 || us == 1016 || us == 1000 || - us == 1017 || us == 1007); - case 405: - return (us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1001 || us == 1014 || us == 1023 || - us == 1000); - case 409: - return (us == 1009); - case 410: - return (us == 1019 || us == 1021 || us == 1020 || us == 1013 || us == 1024 || us == 1008 || us == 1009 || us == 1010 || us == 1001 || us == 1023 || - us == 1003 || us == 1017 || us == 1007); - case 411: - return (us == 1008 || us == 1009 || us == 1010); - case 412: - return (us == 1008 || us == 1009 || us == 1010); - case 415: - return (us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1001 || us == 1023 || us == 1003 || us == 1017 || us == 1007); - case 418: - return (us == 1020 || us == 1021 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || us == 1002 || us == 1016); - case 419: - return (us == 1008 || us == 1009 || us == 1010); - case 420: - return (us == 1005 || us == 1004 || us == 1021 || us == 1019 || us == 1008 || us == 1009 || us == 1010 || us == 1001 || us == 1003); - case 421: - return (us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1014 || us == 1023 || us == 1016 || - us == 1000); - case 422: - return (us == 1020 || us == 1021 || us == 1019 || us == 1013 || us == 1008 || us == 1009 || us == 1010 || us == 1017 || us == 1007); - case 426: - return (us == 1005 || us == 1004 || us == 1021 || us == 1019 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || us == 1001 || us == 1003); - case 429: - return (us == 1008 || us == 1009 || us == 1010); - case 436: - return (us == 1020 || us == 1021 || us == 1022 || us == 1019 || us == 1013 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || us == 1001 || - us == 1003 || us == 1017 || us == 1007); - case 438: - return (us == 1008 || us == 1009 || us == 1010); - case 439: - return (us == 1003 || us == 1023 || us == 1001 || us == 1008 || us == 1009 || us == 1010 || us == 1017 || us == 1007 || us == 1142 || us == 1143 || - us == 1144 || us == 1145 || us == 1013); - case 442: - return (us == 1008 || us == 1009 || us == 1010); - case 445: - return (us == 1008 || us == 1009 || us == 1010); - case 451: - return (us == 1008 || us == 1009 || us == 1010); - case 458: - return (us == 1008 || us == 1009 || us == 1010); - case 466: - return (us == 1008 || us == 1009 || us == 1010); - case 467: - return (us == 1008 || us == 1009 || us == 1010); - case 474: - return (us == 1008 || us == 1009 || us == 1010); - case 475: - return (us == 1008 || us == 1009 || us == 1010); - case 477: - return (us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || us == 1017 || us == 1007); - case 478: - return (us == 1005 || us == 1004 || us == 1012 || us == 1020 || us == 1021 || us == 1022 || us == 1013 || us == 1024 || us == 1008 || us == 1009 || - us == 1010); - case 479: - return (us == 1008 || us == 1009 || us == 1010); - case 480: - return (us == 1008 || us == 1009 || us == 1010); - case 489: - return (us == 1005 || us == 1004 || us == 1020 || us == 1019 || us == 1018 || us == 1013 || us == 1024 || us == 1008 || us == 1009 || us == 1010 || - us == 1006 || us == 1002 || us == 1016 || us == 1000); - case 491: - return (us == 1142 || us == 1143 || us == 1144 || us == 1145 || us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || - us == 1010 || us == 1014 || us == 1023 || us == 1003 || us == 1017 || us == 1007); - case 492: - return (us == 1005 || us == 1004 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || us == 1016 || us == 1000); - case 496: - return (us == 1006 || us == 1017 || us == 1007 || us == 1011 || us == 1019 || us == 1023 || us == 1001 || us == 1008 || us == 1009 || us == 1010 || - us == 1003 || us == 1002 || us == 1142 || us == 1143 || us == 1020); - case 500: - return (us == 1020 || us == 1021 || us == 1019 || us == 1013 || us == 1024 || us == 1008 || us == 1009 || us == 1010); - case 506: - return (us == 1009); - case 507: - return (us == 1008 || us == 1009 || us == 1010); - case 516: - return (us == 1004 || us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1002 || us == 1015 || - us == 1016 || us == 1000 || us == 1017 || us == 1007); - case 517: - return (us == 1142 || us == 1143 || us == 1144 || us == 1145 || us == 1020 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || - us == 1002 || us == 1023 || us == 1016 || us == 1003 || us == 1017 || us == 1007); - case 518: - return (us == 1005 || us == 1142 || us == 1143 || us == 1144 || us == 1145 || us == 1020 || us == 1018 || us == 1013 || us == 1008 || us == 1009 || - us == 1010 || us == 1006 || us == 1001 || us == 1023 || us == 1003 || us == 1017 || us == 1007); - case 526: - return (us == 1008 || us == 1009 || us == 1010); - case 527: - return (us == 1021 || us == 1020 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1001 || us == 1014 || us == 1015 || us == 1017 || - us == 1007); - case 529: - return (us == 1012 || us == 1011 || us == 1020 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || us == 1001 || - us == 1023 || us == 1003 || us == 1017 || us == 1007); - case 533: - return (us == 1008 || us == 1009 || us == 1010); - case 534: - return (us == 1126 || us == 1127 || us == 1179 || us == 1185 || us == 1100 || us == 1123 || us == 1125 || us == 1008 || us == 1009 || us == 1010 || - us == 1180 || us == 1178 || us == 1101 || us == 1122 || us == 1124 || us == 1106); - case 535: - return (us == 1109 || us == 1110 || us == 1113 || us == 1114 || us == 1115 || us == 1116 || us == 1117 || us == 1008 || us == 1009 || us == 1010 || - us == 1120 || us == 1118 || us == 1121 || us == 1119); - case 536: - return (us == 1104 || us == 1105 || us == 1182 || us == 1181 || us == 1008 || us == 1009 || us == 1010 || us == 1184 || us == 1183 || us == 1128 || - us == 1103 || us == 1107 || us == 1108); - case 540: - return (us == 1004 || us == 1142 || us == 1143 || us == 1144 || us == 1145 || us == 1020 || us == 1019 || us == 1018 || us == 1024 || us == 1008 || - us == 1009 || us == 1010 || us == 1006 || us == 1001 || us == 1023 || us == 1017 || us == 1007); - case 541: - return (us == 1008 || us == 1009 || us == 1010); - case 542: - return (us == 1144 || us == 1145 || us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1014 || - us == 1015); - case 545: - return (us == 1008 || us == 1009 || us == 1010); - case 546: - return (us == 1004 || us == 1142 || us == 1143 || us == 1144 || us == 1145 || us == 1019 || us == 1018 || us == 1024 || us == 1008 || us == 1009 || - us == 1010 || us == 1006 || us == 1002 || us == 1001 || us == 1023 || us == 1017 || us == 1007); - case 547: - return (us == 1142 || us == 1143 || us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1016 || - us == 1003 || us == 1000); - case 549: - return (us == 1012 || us == 1011 || us == 1142 || us == 1143 || us == 1144 || us == 1145 || us == 1020 || us == 1019 || us == 1018 || us == 1008 || - us == 1009 || us == 1010 || us == 1001 || us == 1023 || us == 1003 || us == 1017 || us == 1007); - case 550: - return (us == 1005 || us == 1004 || us == 1142 || us == 1143 || us == 1144 || us == 1145 || us == 1020 || us == 1019 || us == 1018 || us == 1008 || - us == 1009 || us == 1010 || us == 1006 || us == 1001 || us == 1023 || us == 1003); - case 551: - return (us == 1005 || us == 1020 || us == 1021 || us == 1019 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || us == 1002 || - us == 1023 || us == 1016 || us == 1003); - case 555: - return (us == 1008 || us == 1009 || us == 1010); - case 558: - return (us == 1092 || us == 1089 || us == 1166 || us == 1165 || us == 1008 || us == 1009 || us == 1010 || us == 1168 || us == 1167 || us == 1088 || - us == 1091 || us == 1164 || us == 1163 || us == 1094 || us == 1090 || us == 1095 || us == 1093); - case 559: - return (us == 1065 || us == 1066 || us == 1160 || us == 1173 || us == 1008 || us == 1009 || us == 1010 || us == 1159 || us == 1161 || us == 1162 || - us == 1158 || us == 1067 || us == 1068 || us == 1071 || us == 1069 || us == 1072 || us == 1070); - case 560: - return (us == 1028 || us == 1029 || us == 1169 || us == 1170 || us == 1008 || us == 1009 || us == 1010 || us == 1141 || us == 1140 || us == 1032 || - us == 1033 || us == 1138 || us == 1139 || us == 1027 || us == 1026 || us == 1030 || us == 1031); - case 561: - return (us == 1064 || us == 1059 || us == 1155 || us == 1157 || us == 1008 || us == 1009 || us == 1010 || us == 1154 || us == 1156 || us == 1055 || - us == 1061 || us == 1058 || us == 1060 || us == 1062 || us == 1056 || us == 1063 || us == 1057); - case 562: - return (us == 1034 || us == 1037 || us == 1171 || us == 1172 || us == 1008 || us == 1009 || us == 1010 || us == 1149 || us == 1148 || us == 1038 || - us == 1035 || us == 1147 || us == 1146 || us == 1040 || us == 1036 || us == 1041 || us == 1039); - case 565: - return (us == 1046 || us == 1045 || us == 1153 || us == 1152 || us == 1008 || us == 1009 || us == 1010 || us == 1150 || us == 1151 || us == 1054 || - us == 1053 || us == 1049 || us == 1050 || us == 1051 || us == 1047 || us == 1052 || us == 1048); - case 566: - return (us == 1008 || us == 1009 || us == 1010); - case 567: - return (us == 1129 || us == 1132 || us == 1189 || us == 1188 || us == 1008 || us == 1009 || us == 1010 || us == 1187 || us == 1186 || us == 1130 || - us == 1131 || us == 1102 || us == 1133); - case 575: - return (us == 1044 || us == 1043 || us == 1174 || us == 1175 || us == 1008 || us == 1009 || us == 1010 || us == 1176 || us == 1177 || us == 1099 || - us == 1042); - case 576: - return (us == 1136 || us == 1135 || us == 1191 || us == 1190 || us == 1008 || us == 1009 || us == 1010 || us == 1192 || us == 1193 || us == 1137 || - us == 1134); - case 579: - return (us == 1008 || us == 1009 || us == 1010); - case 580: - return (us == 1020 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || us == 1001 || us == 1023 || us == 1017 || us == 1007); - case 585: - return (us == 1142 || us == 1143 || us == 1144 || us == 1145 || us == 1020 || us == 1019 || us == 1018 || us == 1013 || us == 1008 || us == 1009 || - us == 1010 || us == 1006 || us == 1001 || us == 1023 || us == 1003 || us == 1017 || us == 1007); - case 587: - return (us == 1008 || us == 1009 || us == 1010); - case 589: - return (us == 1005 || us == 1004 || us == 1144 || us == 1145 || us == 1020 || us == 1018 || us == 1008 || us == 1009 || us == 1010 || us == 1024 || - us == 1013 || us == 1006 || us == 1016 || us == 1000 || us == 1017 || us == 1007); - case 600: - return (us == 1005 || us == 1004 || us == 1020 || us == 1022 || us == 1018 || us == 1013 || us == 1008 || us == 1009 || us == 1010 || us == 1006 || - us == 1017 || us == 1007); - case 602: - return (us == 1008 || us == 1009 || us == 1010); - case 603: - return (us == 1144 || us == 1145 || us == 1142 || us == 1143 || us == 1020 || us == 1019 || us == 1018 || us == 1024 || us == 1008 || us == 1009 || - us == 1010 || us == 1006 || us == 1001 || us == 1023 || us == 1017 || us == 1007); - } - return false; + return IsUpgradeCompatibleWithModel(m_pVehicle->GetModel(), usUpgrade); } bool CVehicleUpgrades::GetSlotFromUpgrade(unsigned short us, unsigned char& ucSlot) diff --git a/Shared/gta/VehicleUpgrades.hpp b/Shared/gta/VehicleUpgrades.hpp new file mode 100644 index 0000000000..29ce313255 --- /dev/null +++ b/Shared/gta/VehicleUpgrades.hpp @@ -0,0 +1,223 @@ +/***************************************************************************** + * + * PROJECT: Multi Theft Auto + * LICENSE: See LICENSE in the top level directory + * PURPOSE: Data file containing vehicle upgrades + * + * Multi Theft Auto is available from http://www.multitheftauto.com/ + * + *****************************************************************************/ + +#pragma once + +#include +#include + +using UpgradeList = std::vector; + +static const std::unordered_map g_upgradesCompatiblityList = { + {400, {1086, 1018, 1019, 1020, 1021, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, + 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1013, 1024, 1087, 1008, 1009, 1010}}, + {401, {1142, 1143, 1144, 1000, 1001, 1002, 1003, 1014, 1015, 1016, 1023, 1049, 1050, 1058, 1060, 1138, 1139, 1146, + 1147, 1158, 1162, 1163, 1164, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, + 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1004, 1005, 1006, 1019, 1020, 1013, 1086, 1007, 1017}}, + {402, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {403, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {404, {1007, 1017, 1000, 1001, 1002, 1003, 1014, 1015, 1016, 1023, 1049, 1050, 1058, 1060, 1138, 1139, 1146, 1147, 1158, 1162, 1163, 1164, 1025, 1073, + 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1019, 1020, 1021, 1013, 1086}}, + {405, {1000, 1001, 1002, 1003, 1014, 1015, 1016, 1023, 1049, 1050, 1058, 1060, 1138, 1139, 1146, 1147, 1158, 1162, 1163, 1164, 1018, 1019, 1020, + 1021, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1086}}, + {407, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {408, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {409, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {410, {1007, 1017, 1001, 1003, 1023, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, + 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1019, 1020, 1021, 1013, 1024, 1086}}, + {411, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {412, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {413, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {414, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {415, {1007, 1017, 1001, 1003, 1023, 1018, 1019, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, + 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1086}}, + {416, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {418, {1006, 1002, 1016, 1020, 1021, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, + 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1086}}, + {419, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {420, {1004, 1005, 1001, 1003, 1019, 1021, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, + 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1086}}, + {421, {1000, 1014, 1016, 1023, 1018, 1019, 1020, 1021, 1025, 1073, 1074, 1075, 1076, 1077, 1078, + 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1086}}, + {422, {1007, 1017, 1086, 1019, 1020, 1021, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, + 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1013, 1087, 1008, 1009, 1010}}, + {423, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {424, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {426, {1001, 1003, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, + 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1004, 1005, 1006, 1019, 1021, 1086}}, + {427, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {428, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {429, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {431, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {432, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {433, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {434, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {436, {1007, 1017, 1001, 1003, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, + 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1006, 1019, 1020, 1021, 1022, 1013, 1086}}, + {437, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {438, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {439, {1142, 1143, 1144, 1145, 1001, 1003, 1023, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, + 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1013, 1086, 1007, 1017}}, + {440, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {441, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {442, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {443, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {445, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {451, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {455, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {456, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {457, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {458, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {459, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {466, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {467, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {470, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {474, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {475, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {477, {1006, 1086, 1018, 1019, 1020, 1021, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, + 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1007, 1017}}, + {478, {1012, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, + 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1004, 1005, 1020, 1021, 1022, 1013, 1024, 1086}}, + {479, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {480, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {482, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {483, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {485, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {486, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {489, {1000, 1002, 1016, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, + 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1004, 1005, 1006, 1018, 1019, 1020, 1013, 1024, 1086}}, + {490, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {491, {1007, 1017, 1003, 1014, 1023, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, + 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1018, 1019, 1020, 1021, 1086, 1142, 1143, 1144, 1145}}, + {492, {1004, 1005, 1006, 1000, 1016, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, + 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1086}}, + {494, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {495, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {496, {1011, 1142, 1143, 1001, 1002, 1003, 1023, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, + 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1006, 1019, 1020, 1086, 1007, 1017}}, + {498, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {499, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {500, {1086, 1019, 1020, 1021, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, + 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1013, 1024, 1087, 1008, 1009, 1010}}, + + {502, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {503, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {504, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {505, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {506, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {507, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {508, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {514, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {515, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {516, {1007, 1017, 1000, 1002, 1015, 1016, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, + 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1004, 1018, 1019, 1020, 1021, 1086}}, + {517, {1007, 1017, 1002, 1003, 1016, 1023, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, + 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1018, 1019, 1020, 1086, 1142, 1143, 1144, 1145}}, + {518, {1142, 1143, 1144, 1145, 1001, 1003, 1023, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, + 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1005, 1006, 1018, 1020, 1013, 1086, 1007, 1017}}, + {524, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {525, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {526, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {527, {1007, 1017, 1001, 1014, 1015, 1018, 1020, 1021, 1025, 1073, 1074, 1075, 1076, 1077, 1078, + 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1086}}, + {528, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {529, {1011, 1012, 1001, 1003, 1023, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, + 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1006, 1018, 1019, 1020, 1086, 1007, 1017}}, + {530, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {531, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {532, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {533, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {534, {1100, 1123, 1125, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, + 1097, 1098, 1008, 1009, 1010, 1087, 1179, 1185, 1126, 1127, 1178, 1180, 1086, 1101, 1106, 1122, 1124}}, + {535, {1118, 1119, 1120, 1121, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, + 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1115, 1116, 1117, 1113, 1114, 1086, 1109, 1110}}, + {536, {1107, 1108, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, + 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1181, 1182, 1103, 1128, 1104, 1105, 1183, 1184, 1086}}, + {540, {1142, 1143, 1144, 1145, 1001, 1023, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, + 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1004, 1006, 1018, 1019, 1020, 1024, 1086, 1007, 1017}}, + {541, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {542, {1144, 1145, 1014, 1015, 1018, 1019, 1020, 1021, 1025, 1073, 1074, 1075, 1076, 1077, 1078, + 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1086}}, + {543, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {545, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {546, {1142, 1143, 1144, 1145, 1001, 1002, 1023, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, + 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1004, 1006, 1018, 1019, 1024, 1086, 1007, 1017}}, + {547, {1142, 1143, 1000, 1003, 1016, 1018, 1019, 1020, 1021, 1025, 1073, 1074, 1075, 1076, 1077, 1078, + 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1086}}, + {549, {1007, 1017, 1001, 1003, 1023, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, + 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1018, 1019, 1020, 1086, 1011, 1012, 1142, 1143, 1144, 1145}}, + {550, {1142, 1143, 1144, 1145, 1001, 1003, 1023, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, + 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1004, 1005, 1006, 1018, 1019, 1020, 1086}}, + {551, {1002, 1003, 1016, 1023, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, + 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1005, 1006, 1018, 1019, 1020, 1021, 1086}}, + {552, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {554, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {555, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {558, {1090, 1093, 1094, 1095, 1163, 1164, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, + 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1165, 1166, 1088, 1091, 1089, 1092, 1167, 1168, 1086}}, + {559, {1069, 1070, 1071, 1072, 1158, 1162, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, + 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1160, 1173, 1067, 1068, 1065, 1066, 1159, 1161, 1086}}, + {560, {1026, 1027, 1030, 1031, 1138, 1139, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, + 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1169, 1170, 1032, 1033, 1028, 1029, 1140, 1141, 1086}}, + {561, {1056, 1057, 1062, 1063, 1058, 1060, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, + 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1155, 1157, 1055, 1061, 1059, 1064, 1154, 1156, 1086}}, + {562, {1036, 1039, 1040, 1041, 1146, 1147, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, + 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1171, 1172, 1035, 1038, 1034, 1037, 1148, 1149, 1086}}, + {564, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {565, {1047, 1048, 1051, 1052, 1049, 1050, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, + 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1152, 1153, 1053, 1054, 1045, 1046, 1150, 1151, 1086}}, + {566, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {567, {1102, 1133, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, + 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1188, 1189, 1130, 1131, 1129, 1132, 1186, 1187, 1086}}, + {568, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {571, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {572, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {574, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {575, {1042, 1099, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, + 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1174, 1175, 1043, 1044, 1176, 1177, 1086}}, + {576, {1134, 1137, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, + 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1190, 1191, 1135, 1136, 1192, 1193, 1086}}, + {578, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {579, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {580, {1007, 1017, 1001, 1023, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, + 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1006, 1018, 1020, 1086}}, + {582, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {583, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {585, {1142, 1143, 1144, 1145, 1001, 1003, 1023, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, + 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1006, 1018, 1019, 1020, 1013, 1086, 1007, 1017}}, + {587, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {588, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {589, {1144, 1145, 1000, 1016, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, + 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1004, 1005, 1006, 1018, 1020, 1013, 1024, 1086, 1007, 1017}}, + {594, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {596, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {597, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {598, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {599, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {600, {1007, 1017, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, + 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1004, 1005, 1006, 1018, 1020, 1022, 1013, 1086}}, + {601, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {602, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {603, {1142, 1143, 1144, 1145, 1001, 1023, 1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, + 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1087, 1006, 1018, 1019, 1020, 1024, 1086, 1007, 1017}}, + {604, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {605, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, + {609, {1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1096, 1097, 1098, 1008, 1009, 1010, 1086, 1087}}, +}; + +inline bool IsUpgradeCompatibleWithModel(unsigned short model, unsigned short upgrade) +{ + if (const auto it = g_upgradesCompatiblityList.find(model); it != g_upgradesCompatiblityList.end()) + { + const UpgradeList& upgrades = it->second; + return std::any_of(upgrades.begin(), upgrades.end(), [&](unsigned short us) { return us == upgrade; }); + } + return false; +}