From a302ad371d354c5f65e244f0060c1710554ec6a4 Mon Sep 17 00:00:00 2001 From: Jbleezy Date: Mon, 24 Apr 2023 13:56:39 -0700 Subject: [PATCH] Who's Who: fix no free actor entities error --- README.md | 1 + scripts/zm/_zm_reimagined.gsc | 2 ++ scripts/zm/replaced/_zm_clone.gsc | 59 +++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 scripts/zm/replaced/_zm_clone.gsc diff --git a/README.md b/README.md index fb0c8015..1dcff522 100644 --- a/README.md +++ b/README.md @@ -367,6 +367,7 @@ * Added Who's Who mode duration bar on HUD * Changed revive waypoint icon to Who's Who perk icon * Revive waypoint shows offscreen +* Fixed an error that would crash the game when entering Who's Who mode ### Electric Cherry * Removed cooldown after being used multiple times in a row diff --git a/scripts/zm/_zm_reimagined.gsc b/scripts/zm/_zm_reimagined.gsc index b83e7362..2eb37657 100644 --- a/scripts/zm/_zm_reimagined.gsc +++ b/scripts/zm/_zm_reimagined.gsc @@ -22,6 +22,7 @@ #include scripts\zm\replaced\_zm_pers_upgrades_system; #include scripts\zm\replaced\_zm_traps; #include scripts\zm\replaced\_zm_equipment; +#include scripts\zm\replaced\_zm_clone; #include scripts\zm\replaced\_zm_spawner; #include scripts\zm\replaced\_zm_ai_basic; #include scripts\zm\replaced\_zm_melee_weapon; @@ -104,6 +105,7 @@ main() replaceFunc(maps\mp\zombies\_zm_traps::player_elec_damage, scripts\zm\replaced\_zm_traps::player_elec_damage); replaceFunc(maps\mp\zombies\_zm_equipment::show_equipment_hint, scripts\zm\replaced\_zm_equipment::show_equipment_hint); replaceFunc(maps\mp\zombies\_zm_equipment::placed_equipment_think, scripts\zm\replaced\_zm_equipment::placed_equipment_think); + replaceFunc(maps\mp\zombies\_zm_clone::spawn_player_clone, scripts\zm\replaced\_zm_clone::spawn_player_clone); replaceFunc(maps\mp\zombies\_zm_spawner::zombie_gib_on_damage, scripts\zm\replaced\_zm_spawner::zombie_gib_on_damage); replaceFunc(maps\mp\zombies\_zm_spawner::head_should_gib, scripts\zm\replaced\_zm_spawner::head_should_gib); replaceFunc(maps\mp\zombies\_zm_spawner::zombie_can_drop_powerups, scripts\zm\replaced\_zm_spawner::zombie_can_drop_powerups); diff --git a/scripts/zm/replaced/_zm_clone.gsc b/scripts/zm/replaced/_zm_clone.gsc new file mode 100644 index 00000000..09393dd6 --- /dev/null +++ b/scripts/zm/replaced/_zm_clone.gsc @@ -0,0 +1,59 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_clone; + +spawn_player_clone( player, origin = player.origin, forceweapon, forcemodel ) +{ + primaryweapons = player getweaponslistprimaries(); + + if ( isdefined( forceweapon ) ) + weapon = forceweapon; + else if ( primaryweapons.size ) + weapon = primaryweapons[0]; + else + weapon = player getcurrentweapon(); + + weaponmodel = getweaponmodel( weapon ); + spawner = getent( "fake_player_spawner", "targetname" ); + + if ( isdefined( spawner ) ) + { + while ( getfreeactorcount() < 1 ) + { + wait 0.05; + } + + clone = spawner spawnactor(); + clone.origin = origin; + clone.isactor = 1; + } + else + { + clone = spawn( "script_model", origin ); + clone.isactor = 0; + } + + if ( isdefined( forcemodel ) ) + clone setmodel( forcemodel ); + else + { + clone setmodel( self.model ); + + if ( isdefined( player.headmodel ) ) + { + clone.headmodel = player.headmodel; + clone attach( clone.headmodel, "", 1 ); + } + } + + if ( weaponmodel != "" && weaponmodel != "none" ) + clone attach( weaponmodel, "tag_weapon_right" ); + + clone.team = player.team; + clone.is_inert = 1; + clone.zombie_move_speed = "walk"; + clone.script_noteworthy = "corpse_clone"; + clone.actor_damage_func = ::clone_damage_func; + return clone; +} \ No newline at end of file