Fix dropping double ammo for dedicated backpack
Simon Volpert
4 years ago
995 | 995 | int CellCapacity = GetAmmoCapacity("Cell"); |
996 | 996 | int amount, multiplier, large, small, capacity; |
997 | 997 | int SelectedType = -1; |
998 | // Cache special backpack type (dedicated backpack only) | |
999 | str BackpackTypes[4] = {"RLBackpackClipChosen", "RLBackpackShellChosen", "RLBackpackRocketChosen", "RLBackpackCellChosen"}; | |
1000 | if (CheckInventory("RLBackpackType") == 4) { | |
1001 | for (SelectedType = 0; SelectedType < 4; SelectedType++) { | |
1002 | if (CheckInventory(BackpackTypes[SelectedType])) { | |
1003 | if (GetCvar("Debug")) { | |
1004 | Log(s:"dedicated backpack set to ", s:AmmoTypes[SelectedType]); | |
1005 | } | |
1006 | break; | |
1007 | } | |
1008 | } | |
1009 | } | |
998 | 1010 | while (TRUE) { |
999 | 1011 | // Capacities unchanged, update ammo counts |
1000 | 1012 | if (BulletCapacity == GetAmmoCapacity("Clip") && ShellCapacity == GetAmmoCapacity("Shell") && RocketCapacity == GetAmmoCapacity("RocketAmmo") && CellCapacity == GetAmmoCapacity("Cell")) { |
1007 | 1019 | } |
1008 | 1020 | // Lower capacity backpack, drop any extraneous ammo |
1009 | 1021 | else if (BulletCapacity > GetAmmoCapacity("Clip") || ShellCapacity > GetAmmoCapacity("Shell") || RocketCapacity > GetAmmoCapacity("RocketAmmo") || CellCapacity > GetAmmoCapacity("Cell")) { |
1010 | // Cache special backpack type (dedicated backpack only) | |
1011 | str BackpackTypes[4] = {"RLBackpackClipChosen", "RLBackpackShellChosen", "RLBackpackRocketChosen", "RLBackpackCellChosen"}; | |
1012 | if (CheckInventory("RLBackpackType") == 4) { | |
1013 | for (SelectedType = 0; SelectedType < 4; SelectedType++) { | |
1014 | if (CheckInventory(BackpackTypes[SelectedType])) { | |
1015 | if (GetCvar("Debug")) { | |
1016 | Log(s:"dedicated backpack is set to ", s:AmmoTypes[SelectedType]); | |
1017 | } | |
1018 | break; | |
1019 | } | |
1020 | } | |
1021 | } | |
1022 | 1022 | for (int ammo = 0; ammo < 4; ammo++) { |
1023 | 1023 | large = 0; |
1024 | 1024 | small = 0; |
1039 | 1039 | multiplier = 1; |
1040 | 1040 | if (SelectedType == ammo) { |
1041 | 1041 | multiplier = 2; |
1042 | Log(s:"double ammo for ", s:AmmoTypes[Ammo]); | |
1042 | 1043 | } |
1043 | 1044 | // Drop ammo packs until within maximum capacity |
1044 | 1045 | capacity = GetAmmoCapacity(AmmoTypes[ammo]); |
1048 | 1049 | SpawnProjectile(0, AmmoSpawns[ammo][0], random(0, 255), random(10, 40), random(40, 60), 1.0, 0); |
1049 | 1050 | amount -= AmmoPacks[ammo][0] * multiplier; |
1050 | 1051 | large++; |
1052 | if (GetCvar("Debug")) { | |
1053 | Log(s:"dropped ", i:AmmoPacks[ammo][0] * multiplier, s:" ", s:AmmoTypes[ammo], s:" ", i:amount, s:" left"); | |
1054 | } | |
1051 | 1055 | } |
1052 | 1056 | // Small packs |
1053 | 1057 | else if (amount - capacity >= AmmoPacks[ammo][1] * multiplier) { |
1054 | 1058 | SpawnProjectile(0, AmmoSpawns[ammo][1], random(0, 255), random(10, 40), random(40, 60), 1.0, 0); |
1055 | 1059 | amount -= AmmoPacks[ammo][1] * multiplier; |
1056 | 1060 | small++; |
1061 | if (GetCvar("Debug")) { | |
1062 | Log(s:"dropped ", i:AmmoPacks[ammo][0] * multiplier, s:" ", s:AmmoTypes[ammo], s:" ", i:amount, s:" left"); | |
1063 | } | |
1057 | 1064 | } |
1058 | 1065 | // Discard any leftovers |
1059 | 1066 | else { |