Skip to content

Commit

Permalink
Reimplement IsUpgradeCompatible function
Browse files Browse the repository at this point in the history
  • Loading branch information
znvjder committed Feb 19, 2024
1 parent d2f3aba commit 38d9630
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 534 deletions.
312 changes: 9 additions & 303 deletions Client/mods/deathmatch/logic/CVehicleUpgrades.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

#include <StdInc.h>

#include "VehicleUpgrades.h"

char szUpgradeNameEmpty[] = "";

struct SUpgradeName
Expand Down Expand Up @@ -50,314 +52,18 @@ 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)
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;
eClientVehicleType vehicleType = m_pVehicle->GetVehicleType();

// No nitro or other upgrades for planes
if (vehicleType == CLIENTVEHICLE_PLANE)
// 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;

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(), us);

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))
{
Expand Down
Loading

0 comments on commit 38d9630

Please sign in to comment.