diff --git a/scripts/zm/_zm_reimagined.gsc b/scripts/zm/_zm_reimagined.gsc index 7938fb40..e193b619 100644 --- a/scripts/zm/_zm_reimagined.gsc +++ b/scripts/zm/_zm_reimagined.gsc @@ -110,6 +110,7 @@ main() replaceFunc(maps\mp\zombies\_zm_melee_weapon::init, scripts\zm\replaced\_zm_melee_weapon::init); replaceFunc(maps\mp\zombies\_zm_melee_weapon::change_melee_weapon, scripts\zm\replaced\_zm_melee_weapon::change_melee_weapon); replaceFunc(maps\mp\zombies\_zm_melee_weapon::give_melee_weapon, scripts\zm\replaced\_zm_melee_weapon::give_melee_weapon); + replaceFunc(maps\mp\zombies\_zm_melee_weapon::melee_weapon_think, scripts\zm\replaced\_zm_melee_weapon::melee_weapon_think); replaceFunc(maps\mp\zombies\_zm_weap_ballistic_knife::init, scripts\zm\replaced\_zm_weap_ballistic_knife::init); replaceFunc(maps\mp\zombies\_zm_weap_ballistic_knife::watch_use_trigger, scripts\zm\replaced\_zm_weap_ballistic_knife::watch_use_trigger); replaceFunc(maps\mp\zombies\_zm_weap_ballistic_knife::pick_up, scripts\zm\replaced\_zm_weap_ballistic_knife::pick_up); diff --git a/scripts/zm/replaced/_zm_melee_weapon.gsc b/scripts/zm/replaced/_zm_melee_weapon.gsc index c1bbc025..1af3126a 100644 --- a/scripts/zm/replaced/_zm_melee_weapon.gsc +++ b/scripts/zm/replaced/_zm_melee_weapon.gsc @@ -265,4 +265,132 @@ do_melee_weapon_flourish_end(gun, flourish_weapon_name, weapon_name, ballistic_w if (!self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !(isdefined(self.intermission) && self.intermission)) self decrement_is_drinking(); +} + +melee_weapon_think(weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name) +{ + self.first_time_triggered = 0; + + if (isdefined(self.stub)) + { + self endon("kill_trigger"); + + if (isdefined(self.stub.first_time_triggered)) + self.first_time_triggered = self.stub.first_time_triggered; + + weapon_name = self.stub.weapon_name; + cost = self.stub.cost; + flourish_fn = self.stub.flourish_fn; + vo_dialog_id = self.stub.vo_dialog_id; + flourish_weapon_name = self.stub.flourish_weapon_name; + ballistic_weapon_name = self.stub.ballistic_weapon_name; + ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; + players = getplayers(); + + if (!(isdefined(level._allow_melee_weapon_switching) && level._allow_melee_weapon_switching)) + { + for (i = 0; i < players.size; i++) + { + if (!players[i] player_can_see_weapon_prompt(weapon_name)) + self setinvisibletoplayer(players[i]); + } + } + } + + for (;;) + { + self waittill("trigger", player); + + if (!is_player_valid(player)) + { + player thread ignore_triggers(0.5); + continue; + } + + if (player in_revive_trigger()) + { + wait 0.1; + continue; + } + + if (player isthrowinggrenade()) + { + wait 0.1; + continue; + } + + if (player.is_drinking > 0) + { + wait 0.1; + continue; + } + + if (player hasweapon(weapon_name) || player hasweapon("held_" + weapon_name) || player has_powerup_weapon()) + { + wait 0.1; + continue; + } + + if (player isswitchingweapons()) + { + wait 0.1; + continue; + } + + current_weapon = player getcurrentweapon(); + + if (is_placeable_mine(current_weapon) || is_equipment(current_weapon) || player has_powerup_weapon()) + { + wait 0.1; + continue; + } + + if (player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined(player.intermission) && player.intermission) + { + wait 0.1; + continue; + } + + player_has_weapon = player hasweapon(weapon_name); + + if (!player_has_weapon) + { + cost = self.stub.cost; + + if (player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active()) + cost = int(cost / 2); + + if (player.score >= cost) + { + if (self.first_time_triggered == 0) + { + model = getent(self.target, "targetname"); + + if (isdefined(model)) + model thread melee_weapon_show(player); + else if (isdefined(self.clientfieldname)) + level setclientfield(self.clientfieldname, 1); + + self.first_time_triggered = 1; + + if (isdefined(self.stub)) + self.stub.first_time_triggered = 1; + } + + player maps\mp\zombies\_zm_score::minus_to_player_score(cost, 1); + bbprint("zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon"); + player thread give_melee_weapon(vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self); + } + else + { + play_sound_on_ent("no_purchase"); + player maps\mp\zombies\_zm_audio::create_and_play_dialog("general", "no_money_weapon", undefined, 1); + } + + continue; + } + + if (!(isdefined(level._allow_melee_weapon_switching) && level._allow_melee_weapon_switching)) + self setinvisibletoplayer(player); + } } \ No newline at end of file