public override void Use(edict_t ent, edict_t other, edict_t activator) { GameBase.gi.Sound(ent, Defines.CHAN_VOICE, ent.noise_index, 1, Defines.ATTN_NORM, 0); GameBase.level.found_secrets++; GameUtil.G_UseTargets(ent, activator); GameUtil.G_FreeEdict(ent); }
public override void Touch(edict_t self, edict_t other, cplane_t plane, csurface_t surf) { if (Lib.Strcmp(other.classname, "grenade") == 0) { Math3D.VectorScale(self.movedir, self.speed * 10, other.velocity); } else if (other.health > 0) { Math3D.VectorScale(self.movedir, self.speed * 10, other.velocity); if (other.client != null) { Math3D.VectorCopy(other.velocity, other.client.oldvelocity); if (other.fly_sound_debounce_time < GameBase.level.time) { other.fly_sound_debounce_time = GameBase.level.time + 1.5F; GameBase.gi.Sound(other, Defines.CHAN_AUTO, windsound, 1, Defines.ATTN_NORM, 0); } } } if ((self.spawnflags & PUSH_ONCE) != 0) { GameUtil.G_FreeEdict(self); } }
public static void SP_target_lightramp(edict_t self) { if (self.message == null || self.message.Length != 2 || self.message[0] < 'a' || self.message[0] > 'z' || self.message[1] < 'a' || self.message[1] > 'z' || self.message[0] == self.message[1]) { GameBase.gi.Dprintf("target_lightramp has bad ramp (" + self.message + ") at " + Lib.Vtos(self.s.origin) + "\\n"); GameUtil.G_FreeEdict(self); return; } if (GameBase.deathmatch.value != 0) { GameUtil.G_FreeEdict(self); return; } if (self.target == null) { GameBase.gi.Dprintf(self.classname + " with no target at " + Lib.Vtos(self.s.origin) + "\\n"); GameUtil.G_FreeEdict(self); return; } self.svflags |= Defines.SVF_NOCLIENT; self.use = target_lightramp_use; self.think = target_lightramp_think; self.movedir[0] = self.message[0] - 'a'; self.movedir[1] = self.message[1] - 'a'; self.movedir[2] = (self.movedir[1] - self.movedir[0]) / (self.speed / Defines.FRAMETIME); }
public override void Touch(edict_t self, edict_t other, cplane_t plane, csurface_t surf) { int mod; if (other == self.owner) { return; } if (surf != null && (surf.flags & Defines.SURF_SKY) != 0) { GameUtil.G_FreeEdict(self); return; } if (self.owner.client != null) { PlayerWeapon.PlayerNoise(self.owner, self.s.origin, Defines.PNOISE_IMPACT); } if (other.takedamage != 0) { if ((self.spawnflags & 1) != 0) { mod = Defines.MOD_HYPERBLASTER; } else { mod = Defines.MOD_BLASTER; } float[] normal; if (plane == null) { normal = new float[3]; } else { normal = plane.normal; } GameCombat.T_Damage(other, self, self.owner, self.velocity, self.s.origin, normal, self.dmg, 1, Defines.DAMAGE_ENERGY, mod); } else { GameBase.gi.WriteByte(Defines.svc_temp_entity); GameBase.gi.WriteByte(Defines.TE_BLASTER); GameBase.gi.WritePosition(self.s.origin); if (plane == null) { GameBase.gi.WriteDir(Globals.vec3_origin); } else { GameBase.gi.WriteDir(plane.normal); } GameBase.gi.Multicast(self.s.origin, Defines.MULTICAST_PVS); } GameUtil.G_FreeEdict(self); }
public override Boolean Think(edict_t self) { if (self.spawnflags == (GameBase.game.serverflags & Defines.SFL_CROSS_TRIGGER_MASK & self.spawnflags)) { GameUtil.G_UseTargets(self, self); GameUtil.G_FreeEdict(self); } return(true); }
public override void Use(edict_t ent, edict_t other, edict_t activator) { GameBase.gi.Sound(ent, Defines.CHAN_VOICE, ent.noise_index, 1, Defines.ATTN_NORM, 0); GameBase.level.found_goals++; if (GameBase.level.found_goals == GameBase.level.total_goals) { GameBase.gi.Configstring(Defines.CS_CDTRACK, "0"); } GameUtil.G_UseTargets(ent, activator); GameUtil.G_FreeEdict(ent); }
public override void Touch(edict_t ent, edict_t other, cplane_t plane, csurface_t surf) { float[] origin = new float[] { 0, 0, 0 }; int n; if (other == ent.owner) { return; } if (surf != null && (surf.flags & Defines.SURF_SKY) != 0) { GameUtil.G_FreeEdict(ent); return; } if (ent.owner.client != null) { PlayerWeapon.PlayerNoise(ent.owner, ent.s.origin, Defines.PNOISE_IMPACT); } Math3D.VectorMA(ent.s.origin, -0.02F, ent.velocity, origin); if (other.takedamage != 0) { GameCombat.T_Damage(other, ent, ent.owner, ent.velocity, ent.s.origin, plane.normal, ent.dmg, 0, 0, Defines.MOD_ROCKET); } else { if (GameBase.deathmatch.value == 0 && 0 == GameBase.coop.value) { if ((surf != null) && 0 == (surf.flags & (Defines.SURF_WARP | Defines.SURF_TRANS33 | Defines.SURF_TRANS66 | Defines.SURF_FLOWING))) { n = Lib.Rand() % 5; while (n-- > 0) { GameMisc.ThrowDebris(ent, "models/objects/debris2/tris.md2", 2, ent.s.origin); } } } } GameCombat.T_RadiusDamage(ent, ent.owner, ent.radius_dmg, other, ent.dmg_radius, Defines.MOD_R_SPLASH); GameBase.gi.WriteByte(Defines.svc_temp_entity); if (ent.waterlevel != 0) { GameBase.gi.WriteByte(Defines.TE_ROCKET_EXPLOSION_WATER); } else { GameBase.gi.WriteByte(Defines.TE_ROCKET_EXPLOSION); } GameBase.gi.WritePosition(origin); GameBase.gi.Multicast(ent.s.origin, Defines.MULTICAST_PHS); GameUtil.G_FreeEdict(ent); }
public static void SP_trigger_gravity(edict_t self) { if (GameBase.st.gravity == null) { GameBase.gi.Dprintf("trigger_gravity without gravity set at " + Lib.Vtos(self.s.origin) + "\\n"); GameUtil.G_FreeEdict(self); return; } InitTrigger(self); self.gravity = Lib.Atoi(GameBase.st.gravity); self.touch = trigger_gravity_touch; }
public static bool Monster_start(edict_t self) { if (GameBase.deathmatch.value != 0) { GameUtil.G_FreeEdict(self); return(false); } if ((self.spawnflags & 4) != 0 && 0 == (self.monsterinfo.aiflags & Defines.AI_GOOD_GUY)) { self.spawnflags &= ~4; self.spawnflags |= 1; } if (0 == (self.monsterinfo.aiflags & Defines.AI_GOOD_GUY)) { GameBase.level.total_monsters++; } self.nextthink = GameBase.level.time + Defines.FRAMETIME; self.svflags |= Defines.SVF_MONSTER; self.s.renderfx |= Defines.RF_FRAMELERP; self.takedamage = Defines.DAMAGE_AIM; self.air_finished = GameBase.level.time + 12; self.use = GameUtil.monster_use; self.max_health = self.health; self.clipmask = Defines.MASK_MONSTERSOLID; self.s.skinnum = 0; self.deadflag = Defines.DEAD_NO; self.svflags &= ~Defines.SVF_DEADMONSTER; if (null == self.monsterinfo.checkattack) { self.monsterinfo.checkattack = GameUtil.M_CheckAttack; } Math3D.VectorCopy(self.s.origin, self.s.old_origin); if (GameBase.st.item != null && GameBase.st.item.Length > 0) { self.item = GameItems.FindItemByClassname(GameBase.st.item); if (self.item == null) { GameBase.gi.Dprintf("monster_start:" + self.classname + " at " + Lib.Vtos(self.s.origin) + " has bad item: " + GameBase.st.item + "\\n"); } } if (self.monsterinfo.currentmove != null) { self.s.frame = self.monsterinfo.currentmove.firstframe + (Lib.Rand() % (self.monsterinfo.currentmove.lastframe - self.monsterinfo.currentmove.firstframe + 1)); } return(true); }
public static void SP_target_changelevel(edict_t ent) { if (ent.map == null) { GameBase.gi.Dprintf("target_changelevel with no map at " + Lib.Vtos(ent.s.origin) + "\\n"); GameUtil.G_FreeEdict(ent); return; } if ((Lib.Q_stricmp(GameBase.level.mapname, "fact1") == 0) && (Lib.Q_stricmp(ent.map, "fact3") == 0)) { ent.map = "fact3$secret1"; } ent.use = use_target_changelevel; ent.svflags = Defines.SVF_NOCLIENT; }
public static void SP_target_help(edict_t ent) { if (GameBase.deathmatch.value != 0) { GameUtil.G_FreeEdict(ent); return; } if (ent.message == null) { GameBase.gi.Dprintf(ent.classname + " with no message at " + Lib.Vtos(ent.s.origin) + "\\n"); GameUtil.G_FreeEdict(ent); return; } ent.use = Use_Target_Help; }
public static void SP_target_goal(edict_t ent) { if (GameBase.deathmatch.value != 0) { GameUtil.G_FreeEdict(ent); return; } ent.use = use_target_goal; if (GameBase.st.noise == null) { GameBase.st.noise = "misc/secret.wav"; } ent.noise_index = GameBase.gi.Soundindex(GameBase.st.noise); ent.svflags = Defines.SVF_NOCLIENT; GameBase.level.total_goals++; }
public override bool Think(edict_t self) { if (self.target == null) { GameBase.gi.Dprintf(self.classname + " at " + Lib.Vtos(self.s.origin) + " needs a target\\n"); } else { self.target_ent = GameBase.G_PickTarget(self.target); Math3D.VectorSubtract(self.target_ent.s.origin, self.s.origin, self.move_origin); GameUtil.G_FreeEdict(self.target_ent); } self.teammaster.dmg = self.dmg; self.think = turret_breach_think; self.think.Think(self); return(true); }
public static void SP_turret_driver(edict_t self) { if (GameBase.deathmatch.value != 0) { GameUtil.G_FreeEdict(self); return; } self.movetype = Defines.MOVETYPE_PUSH; self.solid = Defines.SOLID_BBOX; self.s.modelindex = GameBase.gi.Modelindex("models/monsters/infantry/tris.md2"); Math3D.VectorSet(self.mins, -16, -16, -24); Math3D.VectorSet(self.maxs, 16, 16, 32); self.health = 100; self.gib_health = 0; self.mass = 200; self.viewheight = 24; self.die = turret_driver_die; self.monsterinfo.stand = M_Infantry.infantry_stand; self.flags |= Defines.FL_NO_KNOCKBACK; GameBase.level.total_monsters++; self.svflags |= Defines.SVF_MONSTER; self.s.renderfx |= Defines.RF_FRAMELERP; self.takedamage = Defines.DAMAGE_AIM; self.use = GameUtil.monster_use; self.clipmask = Defines.MASK_MONSTERSOLID; Math3D.VectorCopy(self.s.origin, self.s.old_origin); self.monsterinfo.aiflags |= Defines.AI_STAND_GROUND | Defines.AI_DUCKED; if (GameBase.st.item != null) { self.item = GameItems.FindItemByClassname(GameBase.st.item); if (self.item == null) { GameBase.gi.Dprintf(self.classname + " at " + Lib.Vtos(self.s.origin) + " has bad item: " + GameBase.st.item + "\\n"); } } self.think = turret_driver_link; self.nextthink = GameBase.level.time + Defines.FRAMETIME; GameBase.gi.Linkentity(self); }
public static void SP_target_secret(edict_t ent) { if (GameBase.deathmatch.value != 0) { GameUtil.G_FreeEdict(ent); return; } ent.use = use_target_secret; if (GameBase.st.noise == null) { GameBase.st.noise = "misc/secret.wav"; } ent.noise_index = GameBase.gi.Soundindex(GameBase.st.noise); ent.svflags = Defines.SVF_NOCLIENT; GameBase.level.total_secrets++; if (0 == Lib.Q_stricmp(GameBase.level.mapname, "mine3") && ent.s.origin[0] == 280 && ent.s.origin[1] == -2048 && ent.s.origin[2] == -624) { ent.message = "You have found a secret area."; } }
public override void Touch(edict_t self, edict_t other, cplane_t plane, csurface_t surf) { if (other == self.owner) { return; } if (surf != null && (surf.flags & Defines.SURF_SKY) != 0) { GameUtil.G_FreeEdict(self); return; } if (self.owner.client != null) { PlayerWeapon.PlayerNoise(self.owner, self.s.origin, Defines.PNOISE_IMPACT); } if (other.takedamage != 0) { GameCombat.T_Damage(other, self, self.owner, self.velocity, self.s.origin, plane.normal, 200, 0, 0, Defines.MOD_BFG_BLAST); } GameCombat.T_RadiusDamage(self, self.owner, 200, other, 100, Defines.MOD_BFG_BLAST); GameBase.gi.Sound(self, Defines.CHAN_VOICE, GameBase.gi.Soundindex("weapons/bfg__x1b.wav"), 1, Defines.ATTN_NORM, 0); self.solid = Defines.SOLID_NOT; self.touch = null; Math3D.VectorMA(self.s.origin, -1 * Defines.FRAMETIME, self.velocity, self.s.origin); Math3D.VectorClear(self.velocity); self.s.modelindex = GameBase.gi.Modelindex("sprites/s_bfg3.sp2"); self.s.frame = 0; self.s.sound = 0; self.s.effects &= ~Defines.EF_ANIM_ALLFAST; self.think = bfg_explode; self.nextthink = GameBase.level.time + Defines.FRAMETIME; self.enemy = other; GameBase.gi.WriteByte(Defines.svc_temp_entity); GameBase.gi.WriteByte(Defines.TE_BFG_BIGEXPLOSION); GameBase.gi.WritePosition(self.s.origin); GameBase.gi.Multicast(self.s.origin, Defines.MULTICAST_PVS); }
public override void Use(edict_t self, edict_t other, edict_t activator) { if (self.enemy == null) { edict_t e; e = null; EdictIterator es = null; while (true) { es = GameBase.G_Find(es, GameBase.findByTarget, self.target); if (es == null) { break; } e = es.o; if (Lib.Strcmp(e.classname, "light") != 0) { GameBase.gi.Dprintf(self.classname + " at " + Lib.Vtos(self.s.origin)); GameBase.gi.Dprintf("target " + self.target + " (" + e.classname + " at " + Lib.Vtos(e.s.origin) + ") is not a light\\n"); } else { self.enemy = e; } } if (null == self.enemy) { GameBase.gi.Dprintf(self.classname + " target " + self.target + " not found at " + Lib.Vtos(self.s.origin) + "\\n"); GameUtil.G_FreeEdict(self); return; } } self.timestamp = GameBase.level.time; target_lightramp_think.Think(self); }
public override void Touch(edict_t ent, edict_t other, cplane_t plane, csurface_t surf) { if (other == ent.owner) { return; } if (surf != null && 0 != (surf.flags & Defines.SURF_SKY)) { GameUtil.G_FreeEdict(ent); return; } if (other.takedamage == 0) { if ((ent.spawnflags & 1) != 0) { if (Lib.Random() > 0.5F) { GameBase.gi.Sound(ent, Defines.CHAN_VOICE, GameBase.gi.Soundindex("weapons/hgrenb1a.wav"), 1, Defines.ATTN_NORM, 0); } else { GameBase.gi.Sound(ent, Defines.CHAN_VOICE, GameBase.gi.Soundindex("weapons/hgrenb2a.wav"), 1, Defines.ATTN_NORM, 0); } } else { GameBase.gi.Sound(ent, Defines.CHAN_VOICE, GameBase.gi.Soundindex("weapons/grenlb1b.wav"), 1, Defines.ATTN_NORM, 0); } return; } ent.enemy = other; Grenade_Explode.Think(ent); }
public override bool Think(edict_t ent) { float[] origin = new float[] { 0, 0, 0 }; int mod; if (ent.owner.client != null) { PlayerWeapon.PlayerNoise(ent.owner, ent.s.origin, Defines.PNOISE_IMPACT); } if (ent.enemy != null) { float points = 0; float[] v = new float[] { 0, 0, 0 }; float[] dir = new float[] { 0, 0, 0 }; Math3D.VectorAdd(ent.enemy.mins, ent.enemy.maxs, v); Math3D.VectorMA(ent.enemy.s.origin, 0.5F, v, v); Math3D.VectorSubtract(ent.s.origin, v, v); points = ent.dmg - 0.5F * Math3D.VectorLength(v); Math3D.VectorSubtract(ent.enemy.s.origin, ent.s.origin, dir); if ((ent.spawnflags & 1) != 0) { mod = Defines.MOD_HANDGRENADE; } else { mod = Defines.MOD_GRENADE; } GameCombat.T_Damage(ent.enemy, ent, ent.owner, dir, ent.s.origin, Globals.vec3_origin, (int)points, (int)points, Defines.DAMAGE_RADIUS, mod); } if ((ent.spawnflags & 2) != 0) { mod = Defines.MOD_HELD_GRENADE; } else if ((ent.spawnflags & 1) != 0) { mod = Defines.MOD_HG_SPLASH; } else { mod = Defines.MOD_G_SPLASH; } GameCombat.T_RadiusDamage(ent, ent.owner, ent.dmg, ent.enemy, ent.dmg_radius, mod); Math3D.VectorMA(ent.s.origin, -0.02F, ent.velocity, origin); GameBase.gi.WriteByte(Defines.svc_temp_entity); if (ent.waterlevel != 0) { if (ent.groundentity != null) { GameBase.gi.WriteByte(Defines.TE_GRENADE_EXPLOSION_WATER); } else { GameBase.gi.WriteByte(Defines.TE_ROCKET_EXPLOSION_WATER); } } else { if (ent.groundentity != null) { GameBase.gi.WriteByte(Defines.TE_GRENADE_EXPLOSION); } else { GameBase.gi.WriteByte(Defines.TE_ROCKET_EXPLOSION); } } GameBase.gi.WritePosition(origin); GameBase.gi.Multicast(ent.s.origin, Defines.MULTICAST_PHS); GameUtil.G_FreeEdict(ent); return(true); }
public override void Use(edict_t self, edict_t other, edict_t activator) { GameBase.game.serverflags |= self.spawnflags; GameUtil.G_FreeEdict(self); }
public override void Ai(edict_t self, float dist) { float[] v = new float[] { 0, 0, 0 }; edict_t tempgoal; edict_t save; bool new1; edict_t marker; float d1, d2; trace_t tr; float[] v_forward = new float[] { 0, 0, 0 }, v_right = new float[] { 0, 0, 0 }; float left, center, right; float[] left_target = new float[] { 0, 0, 0 }, right_target = new float[] { 0, 0, 0 }; if ((self.monsterinfo.aiflags & Defines.AI_COMBAT_POINT) != 0) { M.M_MoveToGoal(self, dist); return; } if ((self.monsterinfo.aiflags & Defines.AI_SOUND_TARGET) != 0) { Math3D.VectorSubtract(self.s.origin, self.enemy.s.origin, v); if (Math3D.VectorLength(v) < 64) { self.monsterinfo.stand.Think(self); self.spawnflags &= ~1; self.enemy = null; } else { M.M_MoveToGoal(self, dist); } if (!GameUtil.FindTarget(self)) { return; } } if (Ai_checkattack(self, dist)) { return; } if (self.monsterinfo.attack_state == Defines.AS_SLIDING) { Ai_run_slide(self, dist); return; } if (enemy_vis) { M.M_MoveToGoal(self, dist); self.monsterinfo.aiflags &= ~Defines.AI_LOST_SIGHT; Math3D.VectorCopy(self.enemy.s.origin, self.monsterinfo.last_sighting); self.monsterinfo.trail_time = GameBase.level.time; return; } if (GameBase.coop.value != 0) { if (GameUtil.FindTarget(self)) { return; } } if ((self.monsterinfo.search_time != 0) && (GameBase.level.time > (self.monsterinfo.search_time + 20))) { M.M_MoveToGoal(self, dist); self.monsterinfo.search_time = 0; return; } save = self.goalentity; tempgoal = GameUtil.G_Spawn(); self.goalentity = tempgoal; new1 = false; if (0 == (self.monsterinfo.aiflags & Defines.AI_LOST_SIGHT)) { self.monsterinfo.aiflags |= (Defines.AI_LOST_SIGHT | Defines.AI_PURSUIT_LAST_SEEN); self.monsterinfo.aiflags &= ~(Defines.AI_PURSUE_NEXT | Defines.AI_PURSUE_TEMP); new1 = true; } if ((self.monsterinfo.aiflags & Defines.AI_PURSUE_NEXT) != 0) { self.monsterinfo.aiflags &= ~Defines.AI_PURSUE_NEXT; self.monsterinfo.search_time = GameBase.level.time + 5; if ((self.monsterinfo.aiflags & Defines.AI_PURSUE_TEMP) != 0) { self.monsterinfo.aiflags &= ~Defines.AI_PURSUE_TEMP; marker = null; Math3D.VectorCopy(self.monsterinfo.saved_goal, self.monsterinfo.last_sighting); new1 = true; } else if ((self.monsterinfo.aiflags & Defines.AI_PURSUIT_LAST_SEEN) != 0) { self.monsterinfo.aiflags &= ~Defines.AI_PURSUIT_LAST_SEEN; marker = PlayerTrail.PickFirst(self); } else { marker = PlayerTrail.PickNext(self); } if (marker != null) { Math3D.VectorCopy(marker.s.origin, self.monsterinfo.last_sighting); self.monsterinfo.trail_time = marker.timestamp; self.s.angles[Defines.YAW] = self.ideal_yaw = marker.s.angles[Defines.YAW]; new1 = true; } } Math3D.VectorSubtract(self.s.origin, self.monsterinfo.last_sighting, v); d1 = Math3D.VectorLength(v); if (d1 <= dist) { self.monsterinfo.aiflags |= Defines.AI_PURSUE_NEXT; dist = d1; } Math3D.VectorCopy(self.monsterinfo.last_sighting, self.goalentity.s.origin); if (new1) { tr = GameBase.gi.Trace(self.s.origin, self.mins, self.maxs, self.monsterinfo.last_sighting, self, Defines.MASK_PLAYERSOLID); if (tr.fraction < 1) { Math3D.VectorSubtract(self.goalentity.s.origin, self.s.origin, v); d1 = Math3D.VectorLength(v); center = tr.fraction; d2 = d1 * ((center + 1) / 2); self.s.angles[Defines.YAW] = self.ideal_yaw = Math3D.Vectoyaw(v); Math3D.AngleVectors(self.s.angles, v_forward, v_right, null); Math3D.VectorSet(v, d2, -16, 0); Math3D.G_ProjectSource(self.s.origin, v, v_forward, v_right, left_target); tr = GameBase.gi.Trace(self.s.origin, self.mins, self.maxs, left_target, self, Defines.MASK_PLAYERSOLID); left = tr.fraction; Math3D.VectorSet(v, d2, 16, 0); Math3D.G_ProjectSource(self.s.origin, v, v_forward, v_right, right_target); tr = GameBase.gi.Trace(self.s.origin, self.mins, self.maxs, right_target, self, Defines.MASK_PLAYERSOLID); right = tr.fraction; center = (d1 * center) / d2; if (left >= center && left > right) { if (left < 1) { Math3D.VectorSet(v, d2 * left * 0.5F, -16F, 0F); Math3D.G_ProjectSource(self.s.origin, v, v_forward, v_right, left_target); } Math3D.VectorCopy(self.monsterinfo.last_sighting, self.monsterinfo.saved_goal); self.monsterinfo.aiflags |= Defines.AI_PURSUE_TEMP; Math3D.VectorCopy(left_target, self.goalentity.s.origin); Math3D.VectorCopy(left_target, self.monsterinfo.last_sighting); Math3D.VectorSubtract(self.goalentity.s.origin, self.s.origin, v); self.s.angles[Defines.YAW] = self.ideal_yaw = Math3D.Vectoyaw(v); } else if (right >= center && right > left) { if (right < 1) { Math3D.VectorSet(v, d2 * right * 0.5F, 16F, 0F); Math3D.G_ProjectSource(self.s.origin, v, v_forward, v_right, right_target); } Math3D.VectorCopy(self.monsterinfo.last_sighting, self.monsterinfo.saved_goal); self.monsterinfo.aiflags |= Defines.AI_PURSUE_TEMP; Math3D.VectorCopy(right_target, self.goalentity.s.origin); Math3D.VectorCopy(right_target, self.monsterinfo.last_sighting); Math3D.VectorSubtract(self.goalentity.s.origin, self.s.origin, v); self.s.angles[Defines.YAW] = self.ideal_yaw = Math3D.Vectoyaw(v); } } } M.M_MoveToGoal(self, dist); GameUtil.G_FreeEdict(tempgoal); if (self != null) { self.goalentity = save; } }
public static void Give_f(edict_t ent) { String name; gitem_t it; Int32 index; Int32 i; Boolean give_all; edict_t it_ent; if (GameBase.deathmatch.value != 0 && GameBase.sv_cheats.value == 0) { SV_GAME.PF_cprintfhigh(ent, "You must run the server with '+set cheats 1' to enable this command.\\n"); return; } name = Cmd.Args(); if (0 == Lib.Q_stricmp(name, "all")) { give_all = true; } else { give_all = false; } if (give_all || 0 == Lib.Q_stricmp(Cmd.Argv(1), "health")) { if (Cmd.Argc() == 3) { ent.health = Lib.Atoi(Cmd.Argv(2)); } else { ent.health = ent.max_health; } if (!give_all) { return; } } if (give_all || 0 == Lib.Q_stricmp(name, "weapons")) { for (i = 1; i < GameBase.game.num_items; i++) { it = GameItemList.itemlist[i]; if (null == it.pickup) { continue; } if (0 == (it.flags & Defines.IT_WEAPON)) { continue; } ent.client.pers.inventory[i] += 1; } if (!give_all) { return; } } if (give_all || 0 == Lib.Q_stricmp(name, "ammo")) { for (i = 1; i < GameBase.game.num_items; i++) { it = GameItemList.itemlist[i]; if (null == it.pickup) { continue; } if (0 == (it.flags & Defines.IT_AMMO)) { continue; } GameItems.Add_Ammo(ent, it, 1000); } if (!give_all) { return; } } if (give_all || Lib.Q_stricmp(name, "armor") == 0) { gitem_armor_t info; it = GameItems.FindItem("Jacket Armor"); ent.client.pers.inventory[GameItems.ITEM_INDEX(it)] = 0; it = GameItems.FindItem("Combat Armor"); ent.client.pers.inventory[GameItems.ITEM_INDEX(it)] = 0; it = GameItems.FindItem("Body Armor"); info = ( gitem_armor_t )it.info; ent.client.pers.inventory[GameItems.ITEM_INDEX(it)] = info.max_count; if (!give_all) { return; } } if (give_all || Lib.Q_stricmp(name, "Power Shield") == 0) { it = GameItems.FindItem("Power Shield"); it_ent = GameUtil.G_Spawn(); it_ent.classname = it.classname; GameItems.SpawnItem(it_ent, it); GameItems.Touch_Item(it_ent, ent, GameBase.dummyplane, null); if (it_ent.inuse) { GameUtil.G_FreeEdict(it_ent); } if (!give_all) { return; } } if (give_all) { for (i = 1; i < GameBase.game.num_items; i++) { it = GameItemList.itemlist[i]; if (it.pickup != null) { continue; } if ((it.flags & (Defines.IT_ARMOR | Defines.IT_WEAPON | Defines.IT_AMMO)) != 0) { continue; } ent.client.pers.inventory[i] = 1; } return; } it = GameItems.FindItem(name); if (it == null) { name = Cmd.Argv(1); it = GameItems.FindItem(name); if (it == null) { SV_GAME.PF_cprintf(ent, Defines.PRINT_HIGH, "unknown item\\n"); return; } } if (it.pickup == null) { SV_GAME.PF_cprintf(ent, Defines.PRINT_HIGH, "non-pickup item\\n"); return; } index = GameItems.ITEM_INDEX(it); if ((it.flags & Defines.IT_AMMO) != 0) { if (Cmd.Argc() == 3) { ent.client.pers.inventory[index] = Lib.Atoi(Cmd.Argv(2)); } else { ent.client.pers.inventory[index] += it.quantity; } } else { it_ent = GameUtil.G_Spawn(); it_ent.classname = it.classname; GameItems.SpawnItem(it_ent, it); GameItems.Touch_Item(it_ent, ent, GameBase.dummyplane, null); if (it_ent.inuse) { GameUtil.G_FreeEdict(it_ent); } } }