public static void Say_f(edict_t ent, Boolean team, Boolean arg0) { Int32 i, j; edict_t other; String text; gclient_t cl; if (Cmd.Argc() < 2 && !arg0) { return; } if (0 == (( Int32 )(GameBase.dmflags.value) & (Defines.DF_MODELTEAMS | Defines.DF_SKINTEAMS))) { team = false; } if (team) { text = "(" + ent.client.pers.netname + "): "; } else { text = "" + ent.client.pers.netname + ": "; } if (arg0) { text += Cmd.Argv(0); text += " "; text += Cmd.Args(); } else { if (Cmd.Args().StartsWith("\\\"")) { text += Cmd.Args().Substring(1, Cmd.Args().Length - 1); } else { text += Cmd.Args(); } } if (text.Length > 150) { text = text.Substring(0, 150); } text += "\\n"; if (GameBase.flood_msgs.value != 0) { cl = ent.client; if (GameBase.level.time < cl.flood_locktill) { SV_GAME.PF_cprintfhigh(ent, "You can't talk for " + ( Int32 )(cl.flood_locktill - GameBase.level.time) + " more seconds\\n"); return; } i = ( Int32 )(cl.flood_whenhead - GameBase.flood_msgs.value + 1); if (i < 0) { i = (10) + i; } if (cl.flood_when[i] != 0 && GameBase.level.time - cl.flood_when[i] < GameBase.flood_persecond.value) { cl.flood_locktill = GameBase.level.time + GameBase.flood_waitdelay.value; SV_GAME.PF_cprintf(ent, Defines.PRINT_CHAT, "Flood protection: You can't talk for " + ( Int32 )GameBase.flood_waitdelay.value + " seconds.\\n"); return; } cl.flood_whenhead = (cl.flood_whenhead + 1) % 10; cl.flood_when[cl.flood_whenhead] = GameBase.level.time; } if (Globals.dedicated.value != 0) { SV_GAME.PF_cprintf(null, Defines.PRINT_CHAT, "" + text + ""); } for (j = 1; j <= GameBase.game.maxclients; j++) { other = GameBase.g_edicts[j]; if (!other.inuse) { continue; } if (other.client == null) { continue; } if (team) { if (!GameUtil.OnSameTeam(ent, other)) { continue; } } SV_GAME.PF_cprintf(other, Defines.PRINT_CHAT, "" + text + ""); } }
public static void T_Damage(edict_t targ, edict_t inflictor, edict_t attacker, float[] dir, float[] point, float[] normal, int damage, int knockback, int dflags, int mod) { gclient_t client; int take; int save; int asave; int psave; int te_sparks; if (targ.takedamage == 0) { return; } if ((targ != attacker) && ((GameBase.deathmatch.value != 0 && 0 != ((int)(GameBase.dmflags.value) & (Defines.DF_MODELTEAMS | Defines.DF_SKINTEAMS))) || GameBase.coop.value != 0)) { if (GameUtil.OnSameTeam(targ, attacker)) { if (((int)(GameBase.dmflags.value) & Defines.DF_NO_FRIENDLY_FIRE) != 0) { damage = 0; } else { mod |= Defines.MOD_FRIENDLY_FIRE; } } } GameBase.meansOfDeath = mod; if (GameBase.skill.value == 0 && GameBase.deathmatch.value == 0 && targ.client != null) { damage = ( Int32 )(damage * 0.5); if (damage == 0) { damage = 1; } } client = targ.client; if ((dflags & Defines.DAMAGE_BULLET) != 0) { te_sparks = Defines.TE_BULLET_SPARKS; } else { te_sparks = Defines.TE_SPARKS; } Math3D.VectorNormalize(dir); if (0 == (dflags & Defines.DAMAGE_RADIUS) && (targ.svflags & Defines.SVF_MONSTER) != 0 && (attacker.client != null) && (targ.enemy == null) && (targ.health > 0)) { damage *= 2; } if ((targ.flags & Defines.FL_NO_KNOCKBACK) != 0) { knockback = 0; } if (0 == (dflags & Defines.DAMAGE_NO_KNOCKBACK)) { if ((knockback != 0) && (targ.movetype != Defines.MOVETYPE_NONE) && (targ.movetype != Defines.MOVETYPE_BOUNCE) && (targ.movetype != Defines.MOVETYPE_PUSH) && (targ.movetype != Defines.MOVETYPE_STOP)) { float[] kvel = new float[] { 0, 0, 0 }; float mass; if (targ.mass < 50) { mass = 50; } else { mass = targ.mass; } if (targ.client != null && attacker == targ) { Math3D.VectorScale(dir, 1600F * (float)knockback / mass, kvel); } else { Math3D.VectorScale(dir, 500F * (float)knockback / mass, kvel); } Math3D.VectorAdd(targ.velocity, kvel, targ.velocity); } } take = damage; save = 0; if ((targ.flags & Defines.FL_GODMODE) != 0 && 0 == (dflags & Defines.DAMAGE_NO_PROTECTION)) { take = 0; save = damage; SpawnDamage(te_sparks, point, normal, save); } if ((client != null && client.invincible_framenum > GameBase.level.framenum) && 0 == (dflags & Defines.DAMAGE_NO_PROTECTION)) { if (targ.pain_debounce_time < GameBase.level.time) { GameBase.gi.Sound(targ, Defines.CHAN_ITEM, GameBase.gi.Soundindex("items/protect4.wav"), 1, Defines.ATTN_NORM, 0); targ.pain_debounce_time = GameBase.level.time + 2; } take = 0; save = damage; } psave = CheckPowerArmor(targ, point, normal, take, dflags); take -= psave; asave = CheckArmor(targ, point, normal, take, te_sparks, dflags); take -= asave; asave += save; if (0 == (dflags & Defines.DAMAGE_NO_PROTECTION) && CheckTeamDamage(targ, attacker)) { return; } if (take != 0) { if (0 != (targ.svflags & Defines.SVF_MONSTER) || (client != null)) { SpawnDamage(Defines.TE_BLOOD, point, normal, take); } else { SpawnDamage(te_sparks, point, normal, take); } targ.health = targ.health - take; if (targ.health <= 0) { if ((targ.svflags & Defines.SVF_MONSTER) != 0 || (client != null)) { targ.flags |= Defines.FL_NO_KNOCKBACK; } Killed(targ, inflictor, attacker, take, point); return; } } if ((targ.svflags & Defines.SVF_MONSTER) != 0) { M_ReactToDamage(targ, attacker); if (0 == (targ.monsterinfo.aiflags & Defines.AI_DUCKED) && (take != 0)) { targ.pain.Pain(targ, attacker, knockback, take); if (GameBase.skill.value == 3) { targ.pain_debounce_time = GameBase.level.time + 5; } } } else if (client != null) { if (((targ.flags & Defines.FL_GODMODE) == 0) && (take != 0)) { targ.pain.Pain(targ, attacker, knockback, take); } } else if (take != 0) { if (targ.pain != null) { targ.pain.Pain(targ, attacker, knockback, take); } } if (client != null) { client.damage_parmor += psave; client.damage_armor += asave; client.damage_blood += take; client.damage_knockback += knockback; Math3D.VectorCopy(point, client.damage_from); } }