📄 gametarget.java
字号:
* set for crucial voiceovers. * * Looped sounds are always atten 3 / vol 1, and the use function toggles it * on/off. Multiple identical looping sounds will just increase volume * without any speed cost. */ public static EntUseAdapter Use_Target_Speaker = new EntUseAdapter() { public String getID() { return "Use_Target_Speaker"; } public void use(edict_t ent, edict_t other, edict_t activator) { int chan; if ((ent.spawnflags & 3) != 0) { // looping sound toggles if (ent.s.sound != 0) ent.s.sound = 0; // turn it off else ent.s.sound = ent.noise_index; // start it } else { // normal sound if ((ent.spawnflags & 4) != 0) chan = Defines.CHAN_VOICE | Defines.CHAN_RELIABLE; else chan = Defines.CHAN_VOICE; // use a positioned_sound, because this entity won't normally be // sent to any clients because it is invisible GameBase.gi.positioned_sound(ent.s.origin, ent, chan, ent.noise_index, ent.volume, ent.attenuation, 0); } } }; public static EntUseAdapter Use_Target_Help = new EntUseAdapter() { public String getID() { return "Use_Target_Help"; } public void use(edict_t ent, edict_t other, edict_t activator) { if ((ent.spawnflags & 1) != 0) GameBase.game.helpmessage1 = ent.message; else GameBase.game.helpmessage2 = ent.message; GameBase.game.helpchanged++; } }; /** * QUAKED target_secret (1 0 1) (-8 -8 -8) (8 8 8) Counts a secret found. * These are single use targets. */ static EntUseAdapter use_target_secret = new EntUseAdapter() { public String getID() { return "use_target_secret"; } public 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); } }; /** * QUAKED target_goal (1 0 1) (-8 -8 -8) (8 8 8) Counts a goal completed. * These are single use targets. */ static EntUseAdapter use_target_goal = new EntUseAdapter() { public String getID() { return "use_target_goal"; } public 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); } }; /** * QUAKED target_explosion (1 0 0) (-8 -8 -8) (8 8 8) Spawns an explosion * temporary entity when used. * * "delay" wait this long before going off "dmg" how much radius damage * should be done, defaults to 0 */ static EntThinkAdapter target_explosion_explode = new EntThinkAdapter() { public String getID() { return "target_explosion_explode"; } public boolean think(edict_t self) { float save; GameBase.gi.WriteByte(Defines.svc_temp_entity); GameBase.gi.WriteByte(Defines.TE_EXPLOSION1); GameBase.gi.WritePosition(self.s.origin); GameBase.gi.multicast(self.s.origin, Defines.MULTICAST_PHS); GameCombat.T_RadiusDamage(self, self.activator, self.dmg, null, self.dmg + 40, Defines.MOD_EXPLOSIVE); save = self.delay; self.delay = 0; GameUtil.G_UseTargets(self, self.activator); self.delay = save; return true; } }; static EntUseAdapter use_target_explosion = new EntUseAdapter() { public String getID() { return "use_target_explosion"; } public void use(edict_t self, edict_t other, edict_t activator) { self.activator = activator; if (0 == self.delay) { target_explosion_explode.think(self); return; } self.think = target_explosion_explode; self.nextthink = GameBase.level.time + self.delay; } }; /** * QUAKED target_changelevel (1 0 0) (-8 -8 -8) (8 8 8) Changes level to * "map" when fired */ static EntUseAdapter use_target_changelevel = new EntUseAdapter() { public String getID() { return "use_target_changelevel"; } public void use(edict_t self, edict_t other, edict_t activator) { if (GameBase.level.intermissiontime != 0) return; // already activated if (0 == GameBase.deathmatch.value && 0 == GameBase.coop.value) { if (GameBase.g_edicts[1].health <= 0) return; } // if noexit, do a ton of damage to other if (GameBase.deathmatch.value != 0 && 0 == ((int) GameBase.dmflags.value & Defines.DF_ALLOW_EXIT) && other != GameBase.g_edicts[0] /* world */ ) { GameCombat.T_Damage(other, self, self, Globals.vec3_origin, other.s.origin, Globals.vec3_origin, 10 * other.max_health, 1000, 0, Defines.MOD_EXIT); return; } // if multiplayer, let everyone know who hit the exit if (GameBase.deathmatch.value != 0) { if (activator != null && activator.client != null) GameBase.gi.bprintf(Defines.PRINT_HIGH, activator.client.pers.netname + " exited the level.\n"); } // if going to a new unit, clear cross triggers if (self.map.indexOf('*') > -1) GameBase.game.serverflags &= ~(Defines.SFL_CROSS_TRIGGER_MASK); PlayerHud.BeginIntermission(self); } }; /** * QUAKED target_splash (1 0 0) (-8 -8 -8) (8 8 8) Creates a particle splash * effect when used. * * Set "sounds" to one of the following: 1) sparks 2) blue water 3) brown * water 4) slime 5) lava 6) blood * * "count" how many pixels in the splash "dmg" if set, does a radius damage * at this location when it splashes useful for lava/sparks */ static EntUseAdapter use_target_splash = new EntUseAdapter() { public String getID() { return "use_target_splash"; } public void use(edict_t self, edict_t other, edict_t activator) { GameBase.gi.WriteByte(Defines.svc_temp_entity); GameBase.gi.WriteByte(Defines.TE_SPLASH); GameBase.gi.WriteByte(self.count); GameBase.gi.WritePosition(self.s.origin); GameBase.gi.WriteDir(self.movedir); GameBase.gi.WriteByte(self.sounds); GameBase.gi.multicast(self.s.origin, Defines.MULTICAST_PVS); if (self.dmg != 0) GameCombat.T_RadiusDamage(self, activator, self.dmg, null, self.dmg + 40, Defines.MOD_SPLASH); } }; /** * QUAKED target_spawner (1 0 0) (-8 -8 -8) (8 8 8) Set target to the type * of entity you want spawned. Useful for spawning monsters and gibs in the * factory levels. * * For monsters: Set direction to the facing you want it to have. * * For gibs: Set direction if you want it moving and speed how fast it * should be moving otherwise it will just be dropped */ static EntUseAdapter use_target_spawner = new EntUseAdapter() { public String getID() { return "use_target_spawner"; } public void use(edict_t self, edict_t other, edict_t activator) { edict_t ent; ent = GameUtil.G_Spawn(); ent.classname = self.target; Math3D.VectorCopy(self.s.origin, ent.s.origin); Math3D.VectorCopy(self.s.angles, ent.s.angles); GameSpawn.ED_CallSpawn(ent); GameBase.gi.unlinkentity(ent); GameUtil.KillBox(ent); GameBase.gi.linkentity(ent); if (self.speed != 0) Math3D.VectorCopy(self.movedir, ent.velocity); } }; /** * QUAKED target_blaster (1 0 0) (-8 -8 -8) (8 8 8) NOTRAIL NOEFFECTS Fires * a blaster bolt in the set direction when triggered. * * dmg default is 15 speed default is 1000 */ public static EntUseAdapter use_target_blaster = new EntUseAdapter() { public String getID() { return "use_target_blaster"; } public void use(edict_t self, edict_t other, edict_t activator) { int effect; if ((self.spawnflags & 2) != 0) effect = 0; else if ((self.spawnflags & 1) != 0) effect = Defines.EF_HYPERBLASTER; else effect = Defines.EF_BLASTER; GameWeapon.fire_blaster(self, self.s.origin, self.movedir, self.dmg, (int) self.speed, Defines.EF_BLASTER, Defines.MOD_TARGET_BLASTER != 0 /* true */ ); GameBase.gi.sound(self, Defines.CHAN_VOICE, self.noise_index, 1, Defines.ATTN_NORM, 0); } }; /** * QUAKED target_crosslevel_trigger (.5 .5 .5) (-8 -8 -8) (8 8 8) trigger1 * trigger2 trigger3 trigger4 trigger5 trigger6 trigger7 trigger8 Once this * trigger is touched/used, any trigger_crosslevel_target with the same * trigger number is automatically used when a level is started within the * same unit. It is OK to check multiple triggers. Message, delay, target, * and killtarget also work. */ public static EntUseAdapter trigger_crosslevel_trigger_use = new EntUseAdapter() { public String getID() { return "trigger_crosslevel_trigger_use"; } public void use(edict_t self, edict_t other, edict_t activator) { GameBase.game.serverflags |= self.spawnflags; GameUtil.G_FreeEdict(self); } }; /** * QUAKED target_crosslevel_target (.5 .5 .5) (-8 -8 -8) (8 8 8) trigger1 * trigger2 trigger3 trigger4 trigger5 trigger6 trigger7 trigger8 Triggered * by a trigger_crosslevel elsewhere within a unit. If multiple triggers are * checked, all must be true. Delay, target and killtarget also work. * * "delay" delay before using targets if the trigger has been activated * (default 1) */ static EntThinkAdapter target_crosslevel_target_think = new EntThinkAdapter() { public String getID() { return "target_crosslevel_target_think"; } public boolean think(edict_t self) { if (self.spawnflags == (GameBase.game.serverflags & Defines.SFL_CROSS_TRIGGER_MASK & self.spawnflags)) { GameUtil.G_UseTargets(self, self);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -