Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix getVehicleCompatibleUpgrades #3318

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
317 changes: 10 additions & 307 deletions Client/mods/deathmatch/logic/CVehicleUpgrades.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
*****************************************************************************/

#include <StdInc.h>
#include "VehicleUpgrades.hpp"

char szUpgradeNameEmpty[] = "";

Expand Down Expand Up @@ -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();
Expand All @@ -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;
Expand All @@ -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;
Expand Down
1 change: 1 addition & 0 deletions Client/mods/deathmatch/premake5.lua
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ project "Client Deathmatch"
filter {}
includedirs {
"../../../Shared/sdk",
"../../../Shared/gta",
".",
"./logic",
"../../sdk/",
Expand Down
Loading
Loading