[ZM-SCIPT] Help Restore lava script
BO2 Modding Support & Discussion
1
Posts
1
Posters
34
Views
1
Watching
-
Hi everyone, I'm trying to make this script work but I can't. Could someone who understands help me?
#include maps\mp\animscripts\zm_death; #include maps\mp\_visionset_mgr; #include maps\mp\zombies\_zm_utility; #include maps\mp\_utility; #include common_scripts\utility; init() { level thread lava_restore_fix(); thread lava_damage_init(); thread restore_lava_damage(); } lava_restore_fix() { wait 1; // da tempo de carregar mapa level.lava = getentarray("lava_damage", "targetname"); if (isdefined(level.lava) && level.lava.size > 0) { iprintlnbold(" Lava restaurada!"); array_thread(level.lava, ::lava_damage_think); } else { iprintlnbold(" nothing"); } } lava_damage_init() { level.lava = getentarray("lava_damage", "targetname"); if (!isdefined(level.lava) || level.lava.size < 1) return; array_thread(level.lava, ::lava_damage_think); } // ---------------------- // LAVA DAMAGE THINK // ---------------------- lava_damage_think(ent) { self._trap_type = ""; if (isdefined(self.script_noteworthy)) self._trap_type = self.script_noteworthy; if (isdefined(self.target)) self.volume = getent(self.target, "targetname"); while (1) { self waittill("trigger", ent); if (isdefined(ent.ignore_lava_damage) && ent.ignore_lava_damage) continue; if (isdefined(ent.is_burning)) continue; if (isdefined(self.target) && !ent istouching(self.volume)) continue; if (isplayer(ent)) { ent thread player_lava_damage(self); } else if (isdefined(ent.marked_for_death)) // zumbi { ent thread zombie_lava_damage(self); } } } // ---------------------- // PLAYER DAMAGE // ---------------------- player_lava_damage(trig) { self endon("zombified"); self endon("death"); self endon("disconnect"); max_dmg = 15; min_dmg = 15; burn_time = 15; if (isdefined(trig.script_float)) { max_dmg *= trig.script_float; min_dmg *= trig.script_float; burn_time *= trig.script_float; if (burn_time >= 1.5) burn_time = 1.5; } if (!isdefined(self.is_burning) && is_player_valid(self)) { self.is_burning = 1; maps\mp\_visionset_mgr::vsmgr_activate("overlay", "zm_transit_burn", self, burn_time, level.zm_transit_burn_max_duration); self notify("burned"); self thread player_burning_fx(); if (!self hasperk("specialty_armorvest") || self.health - 100 < 1) { radiusdamage(self.origin, 10, max_dmg, min_dmg); } else if (self hasperk("specialty_armorvest")) { self dodamage(15, self.origin); } else { self dodamage(1, self.origin); } wait(0.5); self.is_burning = undefined; } } player_burning_fx() { self endon("death"); if (isdefined(self.is_on_fire) && self.is_on_fire) return; self.is_on_fire = 1; self thread maps\mp\animscripts\zm_death::on_fire_timeout(); if (isdefined(level._effect) && isdefined(level._effect["character_fire_death_sm"])) playfxontag(level._effect["character_fire_death_sm"], self, "J_SpineLower"); } // ---------------------- // ZOMBIE DAMAGE // ---------------------- zombie_lava_damage(trap) { self endon("death"); zombie_dmg = 15; if (isdefined(trap.script_float)) zombie_dmg *= trap.script_float; if (isdefined(self.animname) && (!isdefined(self.is_on_fire) || !self.is_on_fire)) { if (level.burning_zombies.size < 6 && zombie_dmg >= 1) { level.burning_zombies[level.burning_zombies.size] = self; self playsound("ignite"); self thread zombie_burning_fx(); self thread zombie_burning_watch(); self thread zombie_burning_dmg(); self thread zombie_exploding_death(zombie_dmg, trap); } } if (self.health > level.zombie_health / 2 && self.health > zombie_dmg) self dodamage(zombie_dmg, self.origin, trap); } zombie_burning_fx() { self endon("death"); if (isdefined(self.is_on_fire) && self.is_on_fire) return; self.is_on_fire = 1; self thread maps\mp\animscripts\zm_death::on_fire_timeout(); if (isdefined(level._effect) && isdefined(level._effect["lava_burning"])) playfxontag(level._effect["lava_burning"], self, "J_SpineLower"); if (isdefined(level._effect) && isdefined(level._effect["character_fire_death_sm"])) { wait(1); tagarray = []; tagarray[0] = "J_Elbow_LE"; tagarray[1] = "J_Elbow_RI"; tagarray[2] = "J_Knee_RI"; tagarray[3] = "J_Knee_LE"; tagarray = randomize_array(tagarray); playfxontag(level._effect["character_fire_death_sm"], self, tagarray[0]); } } zombie_burning_watch() { self waittill_any("stop_flame_damage", "death"); arrayremovevalue(level.burning_zombies, self); } zombie_exploding_death(zombie_dmg, trap) { self endon("stop_flame_damage"); while (isdefined(self) && self.health >= zombie_dmg && isdefined(self.is_on_fire) && self.is_on_fire) wait(0.5); tag = "J_SpineLower"; if (isdefined(level._effect["zomb_gib"])) playfx(level._effect["zomb_gib"], self gettagorigin(tag)); self radiusdamage(self.origin, 128, 30, 15, undefined, "MOD_EXPLOSIVE"); self ghost(); self hide(); self delay_thread(1, ::self_delete); } zombie_burning_dmg() { self endon("death"); damageradius = 25; damage = 2; while (isdefined(self.is_on_fire) && self.is_on_fire) { eyeorigin = self geteye(); players = get_players(); for (i = 0; i < players.size; i++) { if (is_player_valid(players[i])) { playereye = players[i] geteye(); if (distancesquared(eyeorigin, playereye) < damageradius * damageradius) { players[i] dodamage(damage, self.origin, self); players[i] notify("burned"); } } } wait(1); } } restore_lava_damage() { level thread force_lava_damage(); } force_lava_damage() { for(;;) { wait 1; level.player foreach(player) { if (!isDefined(player.lastlavafix)) player thread restore_damage_logic(); } } } restore_damage_logic() { self.lastlavafix = true; for(;;) { wait 0.05; if (isTouchingLava(self.origin)) self DoDamage(15, self.origin, self, "lava"); } }