mirror of
https://github.com/JezuzLizard/BO2-Reimagined.git
synced 2025-06-10 23:27:57 -05:00
Meat powerup: functions more similar to Meat game mode version
Meat powerup: bounces off walls Meat powerup: fix spectators getting meated from throw
This commit is contained in:
@ -300,10 +300,13 @@
|
||||
* Removed
|
||||
|
||||
### Meat
|
||||
* All zombies go after player holding the meat
|
||||
* 60% move speed while holding the meat
|
||||
* Decreased time on ground from 16 seconds to 10 seconds
|
||||
* Bounces off walls when thrown
|
||||
* Able to drop when players are down
|
||||
* Changed powerup fx color to blue
|
||||
* Decreased time on ground from 16 seconds to 10 seconds
|
||||
* Message shows when the meat is on a player
|
||||
* Message shows when the meat is grabbed and thrown on a player
|
||||
* Meleeing while the meat is moving no longer grabs the meat
|
||||
* Meleeing while the meat is moving throws the meat
|
||||
* Meleeing while the meat is moving activates more consistently
|
||||
@ -571,8 +574,6 @@
|
||||
* Gain score by being the team holding the meat
|
||||
* Gain 200 score to win the game
|
||||
* Meat powerup always spawns from the first zombie killed
|
||||
* All zombies go after the player holding the meat
|
||||
* Player holding the meat moves at 60% speed
|
||||
* Player holding the meat gains 100 points when their team gains score
|
||||
* Downing while holding the meat drops it as a powerup
|
||||
* Throwing the meat on the ground drops it as a powerup
|
||||
|
@ -18,27 +18,232 @@ game_mode_spawn_player_logic()
|
||||
return 0;
|
||||
}
|
||||
|
||||
meat_stink_on_ground(position_to_play)
|
||||
meat_bounce_override( pos, normal, ent, bounce )
|
||||
{
|
||||
if(level.scr_zm_ui_gametype_obj == "zmeat")
|
||||
if ( isdefined( ent ) && isplayer( ent ) )
|
||||
{
|
||||
if ( is_player_valid(ent) )
|
||||
{
|
||||
level thread meat_stink_player( ent );
|
||||
|
||||
if ( isdefined( self.owner ) )
|
||||
{
|
||||
maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), ent, self.owner, 0, self );
|
||||
self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" );
|
||||
}
|
||||
|
||||
self delete();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
players = getplayers();
|
||||
closest_player = undefined;
|
||||
closest_player_dist = 10000.0;
|
||||
|
||||
foreach (player in players)
|
||||
{
|
||||
if ( self.owner == player )
|
||||
continue;
|
||||
|
||||
if ( !is_player_valid(player) )
|
||||
continue;
|
||||
|
||||
distsq = distancesquared( pos, player.origin );
|
||||
|
||||
if ( distsq < closest_player_dist )
|
||||
{
|
||||
closest_player = player;
|
||||
closest_player_dist = distsq;
|
||||
}
|
||||
}
|
||||
|
||||
if ( isdefined( closest_player ) )
|
||||
{
|
||||
level thread meat_stink_player( closest_player );
|
||||
|
||||
if ( isdefined( self.owner ) )
|
||||
{
|
||||
maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), closest_player, self.owner, 0, self );
|
||||
self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" );
|
||||
}
|
||||
|
||||
self delete();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
playfx( level._effect["meat_impact"], self.origin );
|
||||
}
|
||||
|
||||
if (is_true(bounce))
|
||||
{
|
||||
if (isDefined(level.meat_powerup))
|
||||
landed_on = self getgroundent();
|
||||
|
||||
if (!isDefined(landed_on) || isAI(landed_on))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (is_true(level.meat_on_ground))
|
||||
valid_poi = check_point_in_enabled_zone( pos, undefined, undefined );
|
||||
|
||||
if ( valid_poi )
|
||||
{
|
||||
self hide();
|
||||
|
||||
if (level.scr_zm_ui_gametype_obj == "zmeat")
|
||||
{
|
||||
return;
|
||||
level.meat_powerup = maps\mp\zombies\_zm_powerups::specific_powerup_drop( "meat_stink", self.origin );
|
||||
}
|
||||
else
|
||||
{
|
||||
level thread meat_stink_on_ground( self.origin );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
level notify("meat_inactive");
|
||||
}
|
||||
|
||||
self delete();
|
||||
}
|
||||
|
||||
meat_stink( who )
|
||||
{
|
||||
weapons = who getweaponslist();
|
||||
has_meat = 0;
|
||||
|
||||
foreach ( weapon in weapons )
|
||||
{
|
||||
if ( weapon == "item_meat_zm" )
|
||||
has_meat = 1;
|
||||
}
|
||||
|
||||
if ( has_meat )
|
||||
return;
|
||||
|
||||
who.pre_meat_weapon = who getcurrentweapon();
|
||||
level notify( "meat_grabbed" );
|
||||
who notify( "meat_grabbed" );
|
||||
who playsound( "zmb_pickup_meat" );
|
||||
who increment_is_drinking();
|
||||
who giveweapon( "item_meat_zm" );
|
||||
who switchtoweapon( "item_meat_zm" );
|
||||
who setweaponammoclip( "item_meat_zm", 1 );
|
||||
who setMoveSpeedScale(0.6);
|
||||
level.meat_player = who;
|
||||
|
||||
players = get_players();
|
||||
foreach (player in players)
|
||||
{
|
||||
player thread maps\mp\gametypes_zm\zgrief::meat_stink_player_cleanup();
|
||||
if (player != who)
|
||||
{
|
||||
player.ignoreme = 1;
|
||||
}
|
||||
|
||||
level.meat_on_ground = 1;
|
||||
level.meat_powerup = maps\mp\zombies\_zm_powerups::specific_powerup_drop( "meat_stink", position_to_play );
|
||||
level.meat_on_ground = undefined;
|
||||
player print_meat_msg(who, "grabbed");
|
||||
|
||||
if (level.scr_zm_ui_gametype_obj == "zmeat")
|
||||
{
|
||||
if (player.team == who.team)
|
||||
{
|
||||
player thread scripts\zm\zgrief\zgrief_reimagined::show_grief_hud_msg(&"ZOMBIE_YOUR_TEAM_MEAT");
|
||||
}
|
||||
else
|
||||
{
|
||||
player thread scripts\zm\zgrief\zgrief_reimagined::show_grief_hud_msg(&"ZOMBIE_OTHER_TEAM_MEAT");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
who thread maps\mp\gametypes_zm\zgrief::meat_stink_player_create();
|
||||
|
||||
if (level.scr_zm_ui_gametype_obj == "zmeat")
|
||||
{
|
||||
who thread meat_powerup_drop_on_downed();
|
||||
who thread meat_powerup_reset_on_disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
meat_powerup_drop_on_downed()
|
||||
{
|
||||
self endon("disconnect");
|
||||
self endon("bled_out");
|
||||
self endon("meat_unstink_player");
|
||||
|
||||
self waittill("player_downed");
|
||||
|
||||
if (isDefined(level.item_meat))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (isDefined(level.meat_powerup))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
level.meat_player = undefined;
|
||||
|
||||
self setMoveSpeedScale(1);
|
||||
|
||||
players = get_players();
|
||||
foreach (player in players)
|
||||
{
|
||||
player thread maps\mp\gametypes_zm\zgrief::meat_stink_player_cleanup();
|
||||
|
||||
if (is_player_valid(player) && !is_true(player.spawn_protection) && !is_true(player.revive_protection))
|
||||
{
|
||||
player.ignoreme = 0;
|
||||
}
|
||||
}
|
||||
|
||||
valid_drop = check_point_in_enabled_zone( self.origin, undefined, undefined );
|
||||
|
||||
if (valid_drop)
|
||||
{
|
||||
players = get_players();
|
||||
foreach (player in players)
|
||||
{
|
||||
player thread scripts\zm\zgrief\zgrief_reimagined::show_grief_hud_msg("Meat dropped!");
|
||||
}
|
||||
|
||||
level.meat_powerup = maps\mp\zombies\_zm_powerups::specific_powerup_drop( "meat_stink", self.origin );
|
||||
}
|
||||
else
|
||||
{
|
||||
level notify("meat_inactive");
|
||||
}
|
||||
}
|
||||
|
||||
meat_powerup_reset_on_disconnect()
|
||||
{
|
||||
level endon("meat_thrown");
|
||||
self endon("player_downed");
|
||||
self endon("bled_out");
|
||||
|
||||
self waittill("disconnect");
|
||||
|
||||
level.meat_player = undefined;
|
||||
|
||||
players = get_players();
|
||||
foreach (player in players)
|
||||
{
|
||||
if (is_player_valid(player) && !is_true(player.spawn_protection) && !is_true(player.revive_protection))
|
||||
{
|
||||
player.ignoreme = 0;
|
||||
}
|
||||
}
|
||||
|
||||
level notify("meat_inactive");
|
||||
}
|
||||
|
||||
meat_stink_on_ground(position_to_play)
|
||||
{
|
||||
level.meat_on_ground = 1;
|
||||
attractor_point = spawn( "script_model", position_to_play );
|
||||
attractor_point setmodel( "tag_origin" );
|
||||
@ -62,7 +267,7 @@ meat_stink_player( who )
|
||||
|
||||
if(level.scr_zm_ui_gametype_obj == "zmeat")
|
||||
{
|
||||
level thread maps\mp\gametypes_zm\zgrief::meat_stink(who);
|
||||
level thread meat_stink(who);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -76,7 +281,7 @@ meat_stink_player( who )
|
||||
player.ignoreme = 1;
|
||||
}
|
||||
|
||||
print_meat_msg(player, who);
|
||||
player print_meat_msg(who, "has");
|
||||
}
|
||||
who thread maps\mp\gametypes_zm\zgrief::meat_stink_player_create();
|
||||
who waittill_any_or_timeout( 30, "disconnect", "player_downed", "bled_out" );
|
||||
@ -88,10 +293,10 @@ meat_stink_player( who )
|
||||
}
|
||||
}
|
||||
|
||||
print_meat_msg(player, meat_player)
|
||||
print_meat_msg(meat_player, verb)
|
||||
{
|
||||
color = "";
|
||||
if(player.team == meat_player.team)
|
||||
if(self.team == meat_player.team)
|
||||
{
|
||||
color = "^8";
|
||||
}
|
||||
@ -100,5 +305,5 @@ print_meat_msg(player, meat_player)
|
||||
color = "^9";
|
||||
}
|
||||
|
||||
player iprintln(color + meat_player.name + " has the meat");
|
||||
self iprintln(color + meat_player.name + " " + verb + " the meat");
|
||||
}
|
@ -150,6 +150,146 @@ spike_the_meat( meat )
|
||||
}
|
||||
}
|
||||
|
||||
create_item_meat_watcher()
|
||||
{
|
||||
wait 0.05;
|
||||
watcher = self maps\mp\gametypes_zm\_weaponobjects::createuseweaponobjectwatcher( "item_meat", get_gamemode_var( "item_meat_name" ), self.team );
|
||||
watcher.pickup = ::item_meat_on_pickup;
|
||||
watcher.onspawn = ::item_meat_spawned;
|
||||
watcher.onspawnretrievetriggers = ::play_item_meat_on_spawn_retrieve_trigger;
|
||||
watcher.headicon = 0;
|
||||
}
|
||||
|
||||
item_meat_on_spawn_retrieve_trigger( watcher, player, weaponname )
|
||||
{
|
||||
self endon( "death" );
|
||||
add_meat_event( "meat_spawn", self );
|
||||
|
||||
while ( isdefined( level.splitting_meat ) && level.splitting_meat )
|
||||
wait 0.15;
|
||||
|
||||
if ( isdefined( player ) )
|
||||
{
|
||||
self setowner( player );
|
||||
self setteam( player.pers["team"] );
|
||||
self.owner = player;
|
||||
self.oldangles = self.angles;
|
||||
|
||||
if ( player hasweapon( weaponname ) )
|
||||
{
|
||||
if ( !( isdefined( self._fake_meat ) && self._fake_meat ) )
|
||||
player thread player_wait_take_meat( weaponname );
|
||||
else
|
||||
{
|
||||
player takeweapon( weaponname );
|
||||
player decrement_is_drinking();
|
||||
}
|
||||
}
|
||||
|
||||
if ( !( isdefined( self._fake_meat ) && self._fake_meat ) )
|
||||
{
|
||||
if ( !( isdefined( self._respawned_meat ) && self._respawned_meat ) )
|
||||
{
|
||||
level notify( "meat_thrown", player );
|
||||
level._last_person_to_throw_meat = player;
|
||||
level._last_person_to_throw_meat_time = gettime();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
level.meat_player = undefined;
|
||||
|
||||
player setMoveSpeedScale(1);
|
||||
|
||||
players = get_players();
|
||||
foreach (other_player in players)
|
||||
{
|
||||
other_player thread maps\mp\gametypes_zm\zgrief::meat_stink_player_cleanup();
|
||||
|
||||
if (is_player_valid(other_player) && !is_true(other_player.spawn_protection) && !is_true(other_player.revive_protection))
|
||||
{
|
||||
other_player.ignoreme = 0;
|
||||
}
|
||||
|
||||
other_player thread scripts\zm\zgrief\zgrief_reimagined::show_grief_hud_msg("Meat thrown!");
|
||||
}
|
||||
|
||||
if ( !( isdefined( self._fake_meat ) && self._fake_meat ) )
|
||||
{
|
||||
level._meat_moving = 1;
|
||||
|
||||
if ( isdefined( level.item_meat ) && level.item_meat != self )
|
||||
level.item_meat cleanup_meat();
|
||||
|
||||
level.item_meat = self;
|
||||
}
|
||||
|
||||
self thread item_meat_watch_stationary();
|
||||
self thread item_meat_watch_bounce();
|
||||
self.item_meat_pick_up_trigger = spawn( "trigger_radius_use", self.origin, 0, 36, 72 );
|
||||
self.item_meat_pick_up_trigger setcursorhint( "HINT_NOICON" );
|
||||
self.item_meat_pick_up_trigger sethintstring( &"ZOMBIE_MEAT_PICKUP" );
|
||||
self.item_meat_pick_up_trigger enablelinkto();
|
||||
self.item_meat_pick_up_trigger linkto( self );
|
||||
self.item_meat_pick_up_trigger triggerignoreteam();
|
||||
level.item_meat_pick_up_trigger = self.item_meat_pick_up_trigger;
|
||||
self thread item_meat_watch_shutdown();
|
||||
self.meat_id = indexinarray( level._fake_meats, self );
|
||||
|
||||
if ( !isdefined( self.meat_id ) )
|
||||
self.meat_id = 0;
|
||||
|
||||
if ( isdefined( level.dont_allow_meat_interaction ) && level.dont_allow_meat_interaction )
|
||||
self.item_meat_pick_up_trigger setinvisibletoall();
|
||||
else
|
||||
{
|
||||
self thread item_meat_watch_trigger( self.meat_id, self.item_meat_pick_up_trigger, ::item_meat_on_pickup, level.meat_pickupsoundplayer, level.meat_pickupsound );
|
||||
self thread kick_meat_monitor();
|
||||
self thread last_stand_meat_nudge();
|
||||
}
|
||||
|
||||
self._respawned_meat = undefined;
|
||||
}
|
||||
|
||||
item_meat_watch_bounce()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "picked_up" );
|
||||
self.meat_is_flying = 1;
|
||||
|
||||
while (1)
|
||||
{
|
||||
self waittill( "grenade_bounce", pos, normal, ent );
|
||||
|
||||
playfxontag( level._effect["meat_marker"], self, "tag_origin" );
|
||||
|
||||
if ( isdefined( level.meat_bounce_override ) )
|
||||
{
|
||||
self thread [[ level.meat_bounce_override ]]( pos, normal, ent, true );
|
||||
}
|
||||
}
|
||||
|
||||
self.meat_is_flying = 0;
|
||||
}
|
||||
|
||||
item_meat_watch_stationary()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "picked_up" );
|
||||
self.meat_is_moving = 1;
|
||||
|
||||
self waittill( "stationary", pos, normal );
|
||||
|
||||
if ( isdefined( level.meat_bounce_override ) )
|
||||
{
|
||||
self thread [[ level.meat_bounce_override ]]( pos, normal, undefined, false );
|
||||
}
|
||||
|
||||
self.meat_is_moving = 0;
|
||||
|
||||
self delete();
|
||||
}
|
||||
|
||||
kick_meat_monitor()
|
||||
{
|
||||
// no kick
|
||||
|
@ -26,11 +26,14 @@ main()
|
||||
replaceFunc(maps\mp\gametypes_zm\_zm_gametype::onspawnplayer, scripts\zm\replaced\_zm_gametype::onspawnplayer);
|
||||
replaceFunc(maps\mp\gametypes_zm\_zm_gametype::onplayerspawned, scripts\zm\replaced\_zm_gametype::onplayerspawned);
|
||||
replaceFunc(maps\mp\gametypes_zm\_zm_gametype::hide_gump_loading_for_hotjoiners, scripts\zm\replaced\_zm_gametype::hide_gump_loading_for_hotjoiners);
|
||||
replaceFunc(maps\mp\gametypes_zm\zgrief::meat_stink, scripts\zm\replaced\zgrief::meat_stink);
|
||||
replaceFunc(maps\mp\gametypes_zm\zgrief::meat_stink_on_ground, scripts\zm\replaced\zgrief::meat_stink_on_ground);
|
||||
replaceFunc(maps\mp\gametypes_zm\zgrief::meat_stink_player, scripts\zm\replaced\zgrief::meat_stink_player);
|
||||
replaceFunc(maps\mp\gametypes_zm\zmeat::item_meat_watch_trigger, scripts\zm\replaced\zmeat::item_meat_watch_trigger);
|
||||
replaceFunc(maps\mp\gametypes_zm\zmeat::kick_meat_monitor, scripts\zm\replaced\zmeat::kick_meat_monitor);
|
||||
replaceFunc(maps\mp\gametypes_zm\zmeat::last_stand_meat_nudge, scripts\zm\replaced\zmeat::last_stand_meat_nudge);
|
||||
replaceFunc(maps\mp\gametypes_zm\zmeat::item_meat_on_spawn_retrieve_trigger, scripts\zm\replaced\zmeat::item_meat_on_spawn_retrieve_trigger);
|
||||
replaceFunc(maps\mp\gametypes_zm\zmeat::item_meat_watch_bounce, scripts\zm\replaced\zmeat::item_meat_watch_bounce);
|
||||
}
|
||||
|
||||
init()
|
||||
@ -70,6 +73,7 @@ init()
|
||||
|
||||
level.can_revive_game_module = ::can_revive;
|
||||
level._powerup_grab_check = ::powerup_can_player_grab;
|
||||
level.meat_bounce_override = scripts\zm\replaced\zgrief::meat_bounce_override;
|
||||
|
||||
level.is_respawn_gamemode_func = ::is_respawn_gamemode;
|
||||
level.round_start_wait_func = ::round_start_wait;
|
||||
@ -703,9 +707,10 @@ grief_onplayerconnect()
|
||||
self thread on_player_bleedout();
|
||||
self thread on_player_revived();
|
||||
self thread team_player_waypoint();
|
||||
self thread obj_waypoint();
|
||||
self thread headstomp_watcher();
|
||||
self thread smoke_grenade_cluster_watcher();
|
||||
self thread maps\mp\gametypes_zm\zmeat::create_item_meat_watcher();
|
||||
self thread scripts\zm\replaced\zmeat::create_item_meat_watcher();
|
||||
self.killsconfirmed = 0;
|
||||
|
||||
if(level.scr_zm_ui_gametype_obj == "zgrief" || level.scr_zm_ui_gametype_obj == "zcontainment" || level.scr_zm_ui_gametype_obj == "zmeat")
|
||||
@ -1014,6 +1019,34 @@ team_player_waypoint_origin_think()
|
||||
}
|
||||
}
|
||||
|
||||
obj_waypoint()
|
||||
{
|
||||
self.obj_waypoint = [];
|
||||
self.obj_waypoint = newClientHudElem(self);
|
||||
self.obj_waypoint.alignx = "center";
|
||||
self.obj_waypoint.aligny = "middle";
|
||||
self.obj_waypoint.horzalign = "user_center";
|
||||
self.obj_waypoint.vertalign = "user_center";
|
||||
self.obj_waypoint.alpha = 0;
|
||||
self.obj_waypoint.hidewheninmenu = 1;
|
||||
self.obj_waypoint.foreground = 1;
|
||||
self.obj_waypoint setWaypoint(1, "waypoint_revive");
|
||||
|
||||
self thread obj_waypoint_destroy_on_end_game();
|
||||
}
|
||||
|
||||
obj_waypoint_destroy_on_end_game()
|
||||
{
|
||||
self endon("disconnect");
|
||||
|
||||
level waittill("end_game");
|
||||
|
||||
if(isDefined(self.obj_waypoint))
|
||||
{
|
||||
self.obj_waypoint destroy();
|
||||
}
|
||||
}
|
||||
|
||||
headstomp_watcher()
|
||||
{
|
||||
level endon("end_game");
|
||||
@ -2454,21 +2487,6 @@ containment_init()
|
||||
level thread containment_think();
|
||||
}
|
||||
|
||||
containment_waypoint_init()
|
||||
{
|
||||
hud = [];
|
||||
hud = newClientHudElem(self);
|
||||
hud.alignx = "center";
|
||||
hud.aligny = "middle";
|
||||
hud.horzalign = "user_center";
|
||||
hud.vertalign = "user_center";
|
||||
hud.alpha = 1;
|
||||
hud.hidewheninmenu = 1;
|
||||
hud.foreground = 1;
|
||||
|
||||
return hud;
|
||||
}
|
||||
|
||||
containment_hud_destroy_on_end_game()
|
||||
{
|
||||
level waittill("end_game");
|
||||
@ -2476,15 +2494,6 @@ containment_hud_destroy_on_end_game()
|
||||
level.containment_zone_hud setText("");
|
||||
level.containment_time_hud setText("");
|
||||
|
||||
players = get_players();
|
||||
foreach(player in players)
|
||||
{
|
||||
if(isDefined(player.obj_waypoint))
|
||||
{
|
||||
player.obj_waypoint destroy();
|
||||
}
|
||||
}
|
||||
|
||||
level waittill("intermission");
|
||||
|
||||
level.containment_zone_hud destroy();
|
||||
@ -2556,11 +2565,6 @@ containment_think()
|
||||
|
||||
foreach(player in players)
|
||||
{
|
||||
if(!isDefined(player.obj_waypoint))
|
||||
{
|
||||
player.obj_waypoint = player containment_waypoint_init();
|
||||
}
|
||||
|
||||
if(player get_current_zone() == zone_name)
|
||||
{
|
||||
if(is_player_valid(player))
|
||||
@ -2886,10 +2890,9 @@ meat_init()
|
||||
{
|
||||
level._powerup_timeout_custom_time = ::meat_powerup_custom_time;
|
||||
|
||||
level thread meat_hud_destroy_on_end_game();
|
||||
level thread meat_powerup_drop_think();
|
||||
level thread meat_powerup_drop_watcher();
|
||||
level thread meat_think();
|
||||
level thread meat_thrown_hud_msg();
|
||||
}
|
||||
|
||||
meat_powerup_drop_think()
|
||||
@ -2936,104 +2939,40 @@ meat_powerup_drop_think()
|
||||
|
||||
level.meat_powerup = powerup;
|
||||
|
||||
meat_active = true;
|
||||
while (meat_active)
|
||||
{
|
||||
wait 0.05;
|
||||
|
||||
meat_active = false;
|
||||
|
||||
if (!meat_active)
|
||||
{
|
||||
if (isDefined(level.item_meat))
|
||||
{
|
||||
meat_active = true;
|
||||
|
||||
if (!isDefined(level.item_meat.obj_waypoint_origin))
|
||||
{
|
||||
level.item_meat.obj_waypoint_origin = spawn( "script_model", level.item_meat.origin );
|
||||
level.item_meat.obj_waypoint_origin setmodel( "tag_origin" );
|
||||
|
||||
level.item_meat thread meat_waypoint_origin_destroy_on_death();
|
||||
}
|
||||
|
||||
level.item_meat.obj_waypoint_origin.origin = level.item_meat.origin + (0, 0, 32);
|
||||
|
||||
players = get_players();
|
||||
foreach (player in players)
|
||||
{
|
||||
if (!isDefined(player.obj_waypoint))
|
||||
{
|
||||
player.obj_waypoint = player meat_waypoint_init();
|
||||
}
|
||||
|
||||
player.obj_waypoint.alpha = 1;
|
||||
player.obj_waypoint.color = (1, 1, 1);
|
||||
player.obj_waypoint setTargetEnt(level.item_meat.obj_waypoint_origin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!meat_active)
|
||||
{
|
||||
players = get_players();
|
||||
foreach(player in players)
|
||||
{
|
||||
if(player hasWeapon("item_meat_zm"))
|
||||
{
|
||||
meat_active = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!meat_active)
|
||||
{
|
||||
if (isDefined(level.meat_powerup))
|
||||
{
|
||||
meat_active = true;
|
||||
|
||||
if (!isDefined(level.meat_powerup.obj_waypoint_origin))
|
||||
{
|
||||
level.meat_powerup.obj_waypoint_origin = spawn( "script_model", level.meat_powerup.origin + (0, 0, 32) );
|
||||
level.meat_powerup.obj_waypoint_origin setmodel( "tag_origin" );
|
||||
|
||||
level.meat_powerup thread meat_waypoint_origin_destroy_on_death();
|
||||
}
|
||||
|
||||
players = get_players();
|
||||
foreach (player in players)
|
||||
{
|
||||
if (!isDefined(player.obj_waypoint))
|
||||
{
|
||||
player.obj_waypoint = player meat_waypoint_init();
|
||||
}
|
||||
|
||||
player.obj_waypoint.alpha = 1;
|
||||
player.obj_waypoint.color = (1, 1, 1);
|
||||
player.obj_waypoint setTargetEnt(level.meat_powerup.obj_waypoint_origin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!meat_active)
|
||||
{
|
||||
if (is_true(level.meat_on_ground))
|
||||
{
|
||||
meat_active = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
level waittill("meat_inactive");
|
||||
|
||||
players = get_players();
|
||||
foreach (player in players)
|
||||
{
|
||||
player thread show_grief_hud_msg("Meat reset!");
|
||||
}
|
||||
|
||||
level notify("meat_inactive");
|
||||
}
|
||||
}
|
||||
|
||||
meat_powerup_drop_watcher()
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
level waittill( "powerup_dropped", powerup );
|
||||
|
||||
if (powerup.powerup_name != "meat_stink")
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
powerup thread meat_powerup_reset_on_timeout();
|
||||
}
|
||||
}
|
||||
|
||||
meat_powerup_reset_on_timeout()
|
||||
{
|
||||
self endon("powerup_grabbed");
|
||||
|
||||
self waittill("powerup_timedout");
|
||||
|
||||
level notify("meat_inactive");
|
||||
}
|
||||
|
||||
meat_waypoint_origin_destroy_on_death()
|
||||
{
|
||||
self waittill("death");
|
||||
@ -3055,50 +2994,34 @@ meat_think()
|
||||
|
||||
while(1)
|
||||
{
|
||||
if (!isDefined(meat_player))
|
||||
if (isDefined(level.meat_player))
|
||||
{
|
||||
players = get_players();
|
||||
if (!isDefined(held_time))
|
||||
{
|
||||
held_time = getTime();
|
||||
|
||||
level.meat_player.player_waypoint.alpha = 0;
|
||||
level.meat_player.obj_waypoint.alpha = 0;
|
||||
|
||||
level.meat_player thread show_player_waypoint_on_meat_drop();
|
||||
}
|
||||
|
||||
foreach (player in players)
|
||||
{
|
||||
if (player hasWeapon("item_meat_zm"))
|
||||
if (player != level.meat_player)
|
||||
{
|
||||
meat_player = player;
|
||||
held_time = getTime();
|
||||
player.obj_waypoint.alpha = 1;
|
||||
|
||||
level thread meat_stink_player(meat_player);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isDefined(meat_player))
|
||||
{
|
||||
if (!meat_player hasWeapon("item_meat_zm"))
|
||||
{
|
||||
level thread meat_unstink_player(meat_player);
|
||||
|
||||
meat_player = undefined;
|
||||
held_time = undefined;
|
||||
|
||||
players = get_players();
|
||||
foreach (player in players)
|
||||
{
|
||||
if (!is_true(player.spawn_protection) && !is_true(player.revive_protection))
|
||||
if (player.team == level.meat_player.team)
|
||||
{
|
||||
player.ignoreme = 0;
|
||||
player.obj_waypoint.color = (0, 1, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.obj_waypoint.color = (1, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
players = get_players();
|
||||
foreach (player in players)
|
||||
{
|
||||
if (player != meat_player)
|
||||
{
|
||||
player.ignoreme = 1;
|
||||
player.obj_waypoint setTargetEnt(level.meat_player.player_waypoint_origin);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3106,10 +3029,63 @@ meat_think()
|
||||
{
|
||||
held_time = getTime();
|
||||
|
||||
score = 100 * maps\mp\zombies\_zm_score::get_points_multiplier(meat_player);
|
||||
meat_player maps\mp\zombies\_zm_score::add_to_player_score(score);
|
||||
score = 100 * maps\mp\zombies\_zm_score::get_points_multiplier(level.meat_player);
|
||||
level.meat_player maps\mp\zombies\_zm_score::add_to_player_score(score);
|
||||
|
||||
increment_score(meat_player.team);
|
||||
increment_score(level.meat_player.team);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
held_time = undefined;
|
||||
|
||||
if (isDefined(level.item_meat))
|
||||
{
|
||||
if (!isDefined(level.item_meat.obj_waypoint_origin))
|
||||
{
|
||||
level.item_meat.obj_waypoint_origin = spawn( "script_model", level.item_meat.origin );
|
||||
level.item_meat.obj_waypoint_origin setmodel( "tag_origin" );
|
||||
|
||||
level.item_meat thread meat_waypoint_origin_destroy_on_death();
|
||||
}
|
||||
|
||||
level.item_meat.obj_waypoint_origin.origin = level.item_meat.origin + (0, 0, 32);
|
||||
|
||||
players = get_players();
|
||||
foreach (player in players)
|
||||
{
|
||||
player.obj_waypoint.alpha = 1;
|
||||
player.obj_waypoint.color = (1, 1, 1);
|
||||
player.obj_waypoint setTargetEnt(level.item_meat.obj_waypoint_origin);
|
||||
}
|
||||
}
|
||||
else if (isDefined(level.meat_powerup))
|
||||
{
|
||||
meat_active = true;
|
||||
|
||||
if (!isDefined(level.meat_powerup.obj_waypoint_origin))
|
||||
{
|
||||
level.meat_powerup.obj_waypoint_origin = spawn( "script_model", level.meat_powerup.origin + (0, 0, 32) );
|
||||
level.meat_powerup.obj_waypoint_origin setmodel( "tag_origin" );
|
||||
|
||||
level.meat_powerup thread meat_waypoint_origin_destroy_on_death();
|
||||
}
|
||||
|
||||
players = get_players();
|
||||
foreach (player in players)
|
||||
{
|
||||
player.obj_waypoint.alpha = 1;
|
||||
player.obj_waypoint.color = (1, 1, 1);
|
||||
player.obj_waypoint setTargetEnt(level.meat_powerup.obj_waypoint_origin);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
players = get_players();
|
||||
foreach (player in players)
|
||||
{
|
||||
player.obj_waypoint.alpha = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3117,166 +3093,14 @@ meat_think()
|
||||
}
|
||||
}
|
||||
|
||||
meat_stink_player(meat_player)
|
||||
show_player_waypoint_on_meat_drop()
|
||||
{
|
||||
if (!isDefined(meat_player.obj_waypoint_origin))
|
||||
while (isDefined(level.meat_player))
|
||||
{
|
||||
meat_player.obj_waypoint_origin = spawn( "script_model", meat_player.origin + (0, 0, 72) );
|
||||
meat_player.obj_waypoint_origin setmodel( "tag_origin" );
|
||||
meat_player.obj_waypoint_origin linkto( meat_player );
|
||||
wait 0.05;
|
||||
}
|
||||
|
||||
meat_player setMoveSpeedScale(0.6);
|
||||
|
||||
meat_player.player_waypoint.alpha = 0;
|
||||
|
||||
players = get_players();
|
||||
foreach (player in players)
|
||||
{
|
||||
if (!isDefined(player.obj_waypoint))
|
||||
{
|
||||
player.obj_waypoint = player meat_waypoint_init();
|
||||
}
|
||||
|
||||
scripts\zm\replaced\zgrief::print_meat_msg(player, meat_player);
|
||||
|
||||
if (player.team == meat_player.team)
|
||||
{
|
||||
player thread show_grief_hud_msg(&"ZOMBIE_YOUR_TEAM_MEAT");
|
||||
}
|
||||
else
|
||||
{
|
||||
player thread show_grief_hud_msg(&"ZOMBIE_OTHER_TEAM_MEAT");
|
||||
}
|
||||
|
||||
if (player == meat_player)
|
||||
{
|
||||
player.obj_waypoint.alpha = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
player.obj_waypoint.alpha = 1;
|
||||
|
||||
if (player.team == meat_player.team)
|
||||
{
|
||||
player.obj_waypoint.color = (0, 1, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.obj_waypoint.color = (1, 0, 0);
|
||||
}
|
||||
|
||||
player.obj_waypoint setTargetEnt(meat_player.obj_waypoint_origin);
|
||||
}
|
||||
|
||||
player thread meat_stink_player_cleanup();
|
||||
}
|
||||
|
||||
meat_player thread meat_stink_player_create();
|
||||
|
||||
meat_player thread meat_powerup_drop_on_downed();
|
||||
}
|
||||
|
||||
meat_unstink_player(meat_player)
|
||||
{
|
||||
if (isDefined(meat_player.obj_waypoint_origin))
|
||||
{
|
||||
meat_player.obj_waypoint_origin unlink();
|
||||
meat_player.obj_waypoint_origin delete();
|
||||
}
|
||||
|
||||
meat_player setMoveSpeedScale(1);
|
||||
|
||||
if (is_player_valid(meat_player))
|
||||
{
|
||||
meat_player.player_waypoint.alpha = 1;
|
||||
}
|
||||
|
||||
players = get_players();
|
||||
foreach (player in players)
|
||||
{
|
||||
if(isDefined(player.obj_waypoint))
|
||||
{
|
||||
player.obj_waypoint.alpha = 0;
|
||||
}
|
||||
|
||||
player thread meat_stink_player_cleanup();
|
||||
}
|
||||
|
||||
meat_player notify("meat_unstink_player");
|
||||
}
|
||||
|
||||
meat_stink_player_create()
|
||||
{
|
||||
self maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_received" );
|
||||
self endon( "disconnect" );
|
||||
self endon( "death" );
|
||||
tagname = "J_SpineLower";
|
||||
self.meat_stink_3p = spawn( "script_model", self gettagorigin( tagname ) );
|
||||
self.meat_stink_3p setmodel( "tag_origin" );
|
||||
self.meat_stink_3p linkto( self, tagname );
|
||||
wait 0.5;
|
||||
playfxontag( level._effect["meat_stink_torso"], self.meat_stink_3p, "tag_origin" );
|
||||
self setclientfieldtoplayer( "meat_stink", 1 );
|
||||
}
|
||||
|
||||
meat_stink_player_cleanup()
|
||||
{
|
||||
if ( isdefined( self.meat_stink_3p ) )
|
||||
{
|
||||
self.meat_stink_3p unlink();
|
||||
self.meat_stink_3p delete();
|
||||
}
|
||||
|
||||
self setclientfieldtoplayer( "meat_stink", 0 );
|
||||
}
|
||||
|
||||
meat_powerup_drop_on_downed()
|
||||
{
|
||||
self endon("disconnect");
|
||||
self endon("bled_out");
|
||||
self endon("meat_unstink_player");
|
||||
|
||||
self waittill("player_downed");
|
||||
|
||||
if (isDefined(level.item_meat))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (isDefined(level.meat_powerup))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (is_true(level.meat_on_ground))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
valid_drop = 0;
|
||||
playable_area = getentarray("player_volume", "script_noteworthy");
|
||||
for (i = 0; i < playable_area.size; i++)
|
||||
{
|
||||
if (self isTouching(playable_area[i]))
|
||||
{
|
||||
valid_drop = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (valid_drop)
|
||||
{
|
||||
players = get_players();
|
||||
foreach (player in players)
|
||||
{
|
||||
player thread show_grief_hud_msg("Meat dropped!");
|
||||
}
|
||||
|
||||
level.meat_on_ground = 1;
|
||||
level.meat_powerup = maps\mp\zombies\_zm_powerups::specific_powerup_drop( "meat_stink", self.origin );
|
||||
level.meat_on_ground = undefined;
|
||||
}
|
||||
self.player_waypoint.alpha = 0;
|
||||
}
|
||||
|
||||
meat_powerup_custom_time(powerup)
|
||||
@ -3289,38 +3113,6 @@ meat_powerup_custom_time(powerup)
|
||||
return 15;
|
||||
}
|
||||
|
||||
meat_thrown_hud_msg()
|
||||
{
|
||||
level endon("end_game");
|
||||
|
||||
while (1)
|
||||
{
|
||||
level waittill("meat_thrown", player);
|
||||
|
||||
players = get_players();
|
||||
foreach (player in players)
|
||||
{
|
||||
player thread show_grief_hud_msg("Meat thrown!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
meat_waypoint_init()
|
||||
{
|
||||
hud = [];
|
||||
hud = newClientHudElem(self);
|
||||
hud.alignx = "center";
|
||||
hud.aligny = "middle";
|
||||
hud.horzalign = "user_center";
|
||||
hud.vertalign = "user_center";
|
||||
hud.alpha = 1;
|
||||
hud.hidewheninmenu = 1;
|
||||
hud.foreground = 1;
|
||||
hud setWaypoint(1, "waypoint_revive");
|
||||
|
||||
return hud;
|
||||
}
|
||||
|
||||
can_revive(revivee)
|
||||
{
|
||||
if (self hasweapon(get_gamemode_var("item_meat_name")))
|
||||
@ -3344,20 +3136,6 @@ powerup_can_player_grab(player)
|
||||
return true;
|
||||
}
|
||||
|
||||
meat_hud_destroy_on_end_game()
|
||||
{
|
||||
level waittill("end_game");
|
||||
|
||||
players = get_players();
|
||||
foreach(player in players)
|
||||
{
|
||||
if(isDefined(player.obj_waypoint))
|
||||
{
|
||||
player.obj_waypoint destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
increment_score(team)
|
||||
{
|
||||
level endon("end_game");
|
||||
|
Reference in New Issue
Block a user