[ZM-BO2 script help] Why doesn't my script work?
-
#include common_scripts/utility; #include maps/mp/_utility; #include maps/mp/zombies/_zm_utility; #include maps/mp/zombies/_zm_pers_upgrades_system; #include maps/mp/zombies/_zm_pers_upgrades; #include maps/mp/zombies/_zm_stats; #include maps/mp/zombies/_zm_powerups; #include maps/mp/zombies/_zm_perks; #include maps/mp/zombies/_zm_pers_upgrades_functions; init() { level.clientid = 0; level thread onplayerconnect(); } onplayerconnect() { level endon("game_ended"); for(;;) { level waittill( "connecting", player ); player.clientid = level.clientid; level.clientid++; player thread onplayerspawned(); } } onplayerspawned() { level endon("game_ended"); self endon("disconnect"); for(;;) { self waittill("spawned_player"); applyTombstonePerk(self); } } applyTombstonePerk(player) { player endon("disconnect"); level endon("game_ended"); if (player HasPerk("specialty_scavenger")) { self.pers_upgrades_awarded["perk_lose"] = 1; } } main() { replacefunc( ::main_start, ::modified_main_start ); replacefunc( ::is_pers_system_active, ::always_pers_system_active ); replacefunc( ::is_pers_system_disabled, ::never_pers_system_disabled ); } modified_main_start() { level.pers_upgrade_boards = 1; level.pers_upgrade_revive = 1; level.pers_upgrade_multi_kill_headshots = 1; level.pers_upgrade_cash_back = 1; level.pers_upgrade_insta_kill = 1; level.pers_upgrade_jugg = 1; level.pers_upgrade_carpenter = 1; level.pers_upgrade_flopper = 1; level.divetonuke_precache_override_func = ::divetonuke_precache_override_func; level.pers_flopper_divetonuke_func = ::pers_flopper_explode; level.pers_flopper_network_optimized = 1; level.pers_upgrade_sniper = 1; level.pers_upgrade_pistol_points = 1; level.pers_upgrade_perk_lose = 1; level.pers_upgrade_double_points = 1; level.pers_upgrade_box_weapon = 1; level.pers_magic_box_firesale = 1; level.pers_upgrade_nube = 1; } always_pers_system_active() { return 1; } never_pers_system_disabled() { return 0; }
-
#include common_scripts/utility; #include maps/mp/_utility; #include maps/mp/zombies/_zm_utility; #include maps/mp/zombies/_zm_pers_upgrades_system; #include maps/mp/zombies/_zm_pers_upgrades; #include maps/mp/zombies/_zm_stats; #include maps/mp/zombies/_zm_powerups; #include maps/mp/zombies/_zm_perks; #include maps/mp/zombies/_zm_pers_upgrades_functions; init() { level.clientid = 0; level thread onplayerconnect(); } onplayerconnect() { level endon("game_ended"); for(;;) { level waittill( "connecting", player ); player.clientid = level.clientid; level.clientid++; player thread onplayerspawned(); } } onplayerspawned() { level endon("game_ended"); self endon("disconnect"); for(;;) { self waittill("spawned_player"); applyTombstonePerk(self); } } applyTombstonePerk(player) { player endon("disconnect"); level endon("game_ended"); if (player HasPerk("specialty_scavenger")) { self.pers_upgrades_awarded["perk_lose"] = 1; } } main() { replacefunc( ::main_start, ::modified_main_start ); replacefunc( ::is_pers_system_active, ::always_pers_system_active ); replacefunc( ::is_pers_system_disabled, ::never_pers_system_disabled ); } modified_main_start() { level.pers_upgrade_boards = 1; level.pers_upgrade_revive = 1; level.pers_upgrade_multi_kill_headshots = 1; level.pers_upgrade_cash_back = 1; level.pers_upgrade_insta_kill = 1; level.pers_upgrade_jugg = 1; level.pers_upgrade_carpenter = 1; level.pers_upgrade_flopper = 1; level.divetonuke_precache_override_func = ::divetonuke_precache_override_func; level.pers_flopper_divetonuke_func = ::pers_flopper_explode; level.pers_flopper_network_optimized = 1; level.pers_upgrade_sniper = 1; level.pers_upgrade_pistol_points = 1; level.pers_upgrade_perk_lose = 1; level.pers_upgrade_double_points = 1; level.pers_upgrade_box_weapon = 1; level.pers_magic_box_firesale = 1; level.pers_upgrade_nube = 1; } always_pers_system_active() { return 1; } never_pers_system_disabled() { return 0; }
You're trying to award the Tombstone persistent upgrade but you have the script first check if the player at the time of spawning has the Tombstone perk to determine if they should be awarded with the persistent upgrade. Players don’t spawn in with the Tombstone perk and without mods the perk only exists on TranZit co-op.
I suggested to you on Discord to look up how the persistent upgrade is earned as persistent upgrades work on Plutonium. https://callofduty.fandom.com/wiki/Persistent_Upgrades
Alternatively, you have the option of setting the required stats through the console to unlock the persistent upgrade. https://forum.plutonium.pw/topic/34450/bo2-victios-easter-egs-cheat/2
-
You're trying to award the Tombstone persistent upgrade but you have the script first check if the player at the time of spawning has the Tombstone perk to determine if they should be awarded with the persistent upgrade. Players don’t spawn in with the Tombstone perk and without mods the perk only exists on TranZit co-op.
I suggested to you on Discord to look up how the persistent upgrade is earned as persistent upgrades work on Plutonium. https://callofduty.fandom.com/wiki/Persistent_Upgrades
Alternatively, you have the option of setting the required stats through the console to unlock the persistent upgrade. https://forum.plutonium.pw/topic/34450/bo2-victios-easter-egs-cheat/2
Hadi77KSA Thanks!! i made it:
#include common_scripts/utility; #include maps/mp/_utility; #include maps/mp/zombies/_zm_utility; #include maps/mp/zombies/_zm_pers_upgrades_system; #include maps/mp/zombies/_zm_pers_upgrades; #include maps/mp/zombies/_zm_stats; #include maps/mp/zombies/_zm_powerups; #include maps/mp/zombies/_zm_perks; #include maps/mp/zombies/_zm_pers_upgrades_functions; init() { level.clientid = 0; level thread onPlayerConnect(); } onPlayerConnect() { level endon("game_ended"); for (;;) { level waittill("connecting", player); player.clientid = level.clientid; level.clientid++; if (!isdefined(player.pers_upgrades_awarded)) player.pers_upgrades_awarded = []; player.revived_flag = 0; player thread monitorTombstone(); player thread monitorReviveFlag(); } } onPlayerSpawned() { level endon("game_ended"); self endon("disconnect"); for (;;) { self waittill("spawned_player"); } } monitorTombstone() { self endon("disconnect"); level endon("game_ended"); for (;;) { wait 0.5; if (self HasPerk("specialty_scavenger") && !isdefined(self.pers_upgrades_awarded["perk_lose"])) { self.pers_upgrades_awarded["perk_lose"] = 1; } if (isdefined(self.pers_upgrades_awarded["perk_lose"]) && self.revived_flag == 1) { self.pers_upgrades_awarded["perk_lose"] = undefined; self.revived_flag = 0; } } } monitorReviveFlag() { self endon("disconnect"); level endon("game_ended"); for (;;) { self waittill_any("player_revived", "revive_complete"); self.revived_flag = 1; } } main() { replacefunc(::is_pers_system_active, ::always_pers_system_active); replacefunc(::is_pers_system_disabled, ::never_pers_system_disabled); } always_pers_system_active() { return 1; } never_pers_system_disabled() { return 0; }
But now the problem is that I get infinite tombstone and I don't know how to create a code that removes the tombstone and the permaperk after being revived.
could you help me with this?
-
Hadi77KSA Thanks!! i made it:
#include common_scripts/utility; #include maps/mp/_utility; #include maps/mp/zombies/_zm_utility; #include maps/mp/zombies/_zm_pers_upgrades_system; #include maps/mp/zombies/_zm_pers_upgrades; #include maps/mp/zombies/_zm_stats; #include maps/mp/zombies/_zm_powerups; #include maps/mp/zombies/_zm_perks; #include maps/mp/zombies/_zm_pers_upgrades_functions; init() { level.clientid = 0; level thread onPlayerConnect(); } onPlayerConnect() { level endon("game_ended"); for (;;) { level waittill("connecting", player); player.clientid = level.clientid; level.clientid++; if (!isdefined(player.pers_upgrades_awarded)) player.pers_upgrades_awarded = []; player.revived_flag = 0; player thread monitorTombstone(); player thread monitorReviveFlag(); } } onPlayerSpawned() { level endon("game_ended"); self endon("disconnect"); for (;;) { self waittill("spawned_player"); } } monitorTombstone() { self endon("disconnect"); level endon("game_ended"); for (;;) { wait 0.5; if (self HasPerk("specialty_scavenger") && !isdefined(self.pers_upgrades_awarded["perk_lose"])) { self.pers_upgrades_awarded["perk_lose"] = 1; } if (isdefined(self.pers_upgrades_awarded["perk_lose"]) && self.revived_flag == 1) { self.pers_upgrades_awarded["perk_lose"] = undefined; self.revived_flag = 0; } } } monitorReviveFlag() { self endon("disconnect"); level endon("game_ended"); for (;;) { self waittill_any("player_revived", "revive_complete"); self.revived_flag = 1; } } main() { replacefunc(::is_pers_system_active, ::always_pers_system_active); replacefunc(::is_pers_system_disabled, ::never_pers_system_disabled); } always_pers_system_active() { return 1; } never_pers_system_disabled() { return 0; }
But now the problem is that I get infinite tombstone and I don't know how to create a code that removes the tombstone and the permaperk after being revived.
could you help me with this?
AndreTOQU3 the logic of the
perk_lose
persistent upgrade is handled by the vanilla game where it will remove either Quick Revive or the latest obtained perk if QR is not in the perk list. Additionally, theperk_lose
persistent upgrade is almost impossible to lose in vanilla gameplay. Sorry, but I won't help further with this. You're trying to modify existing behaviour to one that is significantly different than the one players are used to and I don't see the point of such modification.