X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fg_triggers.qc;h=717a19b09f09e17165ed9de426b7179b30f05d5a;hb=754e6b0083895315729a0d0ba42a2e798f61d365;hp=359bf84a362e3ce7d73dbc6e33f0bbd372cacbf3;hpb=e2ddf7d153328e3f2398d62d07c9e72badd89374;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/g_triggers.qc b/qcsrc/server/g_triggers.qc index 359bf84a3..717a19b09 100644 --- a/qcsrc/server/g_triggers.qc +++ b/qcsrc/server/g_triggers.qc @@ -1,10 +1,11 @@ +#include "g_triggers.qh" +#include "t_jumppads.qh" + void SUB_DontUseTargets() { } -void() SUB_UseTargets; - void DelayThink() { activator = self.enemy; @@ -61,14 +62,13 @@ void SUB_UseTargets() // // print the message // - if (IS_PLAYER(activator) && self.message != "") + if(self) + if(IS_PLAYER(activator) && self.message != "") + if(IS_REAL_CLIENT(activator)) { - if(IS_REAL_CLIENT(activator)) - { - centerprint (activator, self.message); - if (self.noise == "") - play2(activator, "misc/talk.wav"); - } + centerprint(activator, self.message); + if (self.noise == "") + play2(activator, "misc/talk.wav"); } // @@ -103,6 +103,9 @@ void SUB_UseTargets() } if (s != "") { + // Flag to set func_clientwall state + // 1 == deactivate, 2 == activate, 0 == do nothing + float aw_flag = self.antiwall_flag; for(t = world; (t = find(t, targetname, s)); ) if(t.use) { @@ -112,6 +115,8 @@ void SUB_UseTargets() } else { + if (t.classname == "func_clientwall" || t.classname == "func_clientillusionary") + t.antiwall_flag = aw_flag; self = t; other = stemp; activator = act; @@ -137,9 +142,6 @@ void SUB_UseTargets() //============================================================================= -const float SPAWNFLAG_NOMESSAGE = 1; -const float SPAWNFLAG_NOTOUCH = 1; - // the wait time has passed, so set back up for another activation void multi_wait() { @@ -164,7 +166,7 @@ void multi_trigger() if (self.classname == "trigger_secret") { - if not(IS_PLAYER(self.enemy)) + if (!IS_PLAYER(self.enemy)) return; found_secrets = found_secrets + 1; WriteByte (MSG_ALL, SVC_FOUNDSECRET); @@ -205,8 +207,8 @@ void multi_use() void multi_touch() { - if not(self.spawnflags & 2) - if not(other.iscreature) + if(!(self.spawnflags & 2)) + if(!other.iscreature) return; if(self.team) @@ -228,7 +230,7 @@ void multi_touch() multi_trigger (); } -void multi_eventdamage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) +void multi_eventdamage (entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) { if (!self.takedamage) return; @@ -378,32 +380,26 @@ void spawnfunc_trigger_delay() void counter_use() { - self.count = self.count - 1; + self.count -= 1; if (self.count < 0) return; - if (self.count != 0) + if (self.count == 0) { - if (IS_PLAYER(activator) - && (self.spawnflags & SPAWNFLAG_NOMESSAGE) == 0) - { - if (self.count >= 4) - centerprint (activator, "There are more to go..."); - else if (self.count == 3) - centerprint (activator, "Only 3 more to go..."); - else if (self.count == 2) - centerprint (activator, "Only 2 more to go..."); - else - centerprint (activator, "Only 1 more to go..."); - } - return; - } + if(IS_PLAYER(activator) && (self.spawnflags & SPAWNFLAG_NOMESSAGE) == 0) + Send_Notification(NOTIF_ONE, activator, MSG_CENTER, CENTER_SEQUENCE_COMPLETED); - if (IS_PLAYER(activator) - && (self.spawnflags & SPAWNFLAG_NOMESSAGE) == 0) - centerprint(activator, "Sequence completed!"); - self.enemy = activator; - multi_trigger (); + self.enemy = activator; + multi_trigger (); + } + else + { + if(IS_PLAYER(activator) && (self.spawnflags & SPAWNFLAG_NOMESSAGE) == 0) + if(self.count >= 4) + Send_Notification(NOTIF_ONE, activator, MSG_CENTER, CENTER_SEQUENCE_COUNTER); + else + Send_Notification(NOTIF_ONE, activator, MSG_CENTER, CENTER_SEQUENCE_COUNTER_FEWMORE, self.count); + } } void counter_reset() @@ -438,10 +434,9 @@ void trigger_hurt_use() self.enemy = world; // let's just destroy it, if taking over is too much work } -.float triggerhurttime; void trigger_hurt_touch() { - if (self.active != ACTIVE_ACTIVE) + if (self.active != ACTIVE_ACTIVE) return; if(self.team) @@ -459,7 +454,7 @@ void trigger_hurt_touch() entity own; own = self.enemy; - if not(IS_PLAYER(own)) + if (!IS_PLAYER(own)) { own = self; self.enemy = world; // I still hate you all @@ -485,9 +480,6 @@ Any object touching this will be hurt set dmg to damage amount defalt dmg = 5 */ -.entity trigger_hurt_next; -entity trigger_hurt_last; -entity trigger_hurt_first; void spawnfunc_trigger_hurt() { EXACTTRIGGER_INIT; @@ -516,9 +508,9 @@ float tracebox_hits_trigger_hurt(vector start, vector mi, vector ma, vector end) for(th = trigger_hurt_first; th; th = th.trigger_hurt_next) if(tracebox_hits_box(start, mi, ma, end, th.absmin, th.absmax)) - return TRUE; + return true; - return FALSE; + return false; } ////////////////////////////////////////////////////////////// @@ -529,12 +521,11 @@ float tracebox_hits_trigger_hurt(vector start, vector mi, vector ma, vector end) // ////////////////////////////////////////////////////////////// -.float triggerhealtime; void trigger_heal_touch() { - if (self.active != ACTIVE_ACTIVE) + if (self.active != ACTIVE_ACTIVE) return; - + // only do the EXACTTRIGGER_TOUCH checks when really needed (saves some cpu) if (other.iscreature) { @@ -544,7 +535,7 @@ void trigger_heal_touch() { EXACTTRIGGER_TOUCH; other.triggerhealtime = time + 1; - + if (other.health < self.max_health) { other.health = min(other.health + self.health, self.max_health); @@ -558,7 +549,7 @@ void trigger_heal_touch() void spawnfunc_trigger_heal() { self.active = ACTIVE_ACTIVE; - + EXACTTRIGGER_INIT; self.touch = trigger_heal_touch; if (!self.health) @@ -579,7 +570,6 @@ void spawnfunc_trigger_heal() // ////////////////////////////////////////////////////////////// -.entity trigger_gravity_check; void trigger_gravity_remove(entity own) { if(own.trigger_gravity_check.owner == own) @@ -621,14 +611,14 @@ void trigger_gravity_touch() { float g; - if(self.state != TRUE) + if(self.state != true) return; EXACTTRIGGER_TOUCH; g = self.gravity; - if not(self.spawnflags & 1) + if (!(self.spawnflags & 1)) { if(other.trigger_gravity_check) { @@ -675,23 +665,21 @@ void spawnfunc_trigger_gravity() if(self.noise != "") precache_sound(self.noise); - self.state = TRUE; + self.state = true; IFTARGETED { self.use = trigger_gravity_use; if(self.spawnflags & 2) - self.state = FALSE; + self.state = false; } } //============================================================================= // TODO add a way to do looped sounds with sound(); then complete this entity -.float volume, atten; -void target_speaker_use_off(); void target_speaker_use_activator() { - if not(IS_REAL_CLIENT(activator)) + if (!IS_REAL_CLIENT(activator)) return; string snd; if(substring(self.noise, 0, 1) == "*") @@ -824,11 +812,6 @@ void spawnfunc_func_stardust() { self.effects = EF_STARDUST; } -.string bgmscript; -.float bgmscriptattack; -.float bgmscriptdecay; -.float bgmscriptsustain; -.float bgmscriptrelease; float pointparticles_SendEntity(entity to, float fl) { WriteByte(MSG_ENTITY, ENT_CLIENT_POINTPARTICLES); @@ -854,9 +837,9 @@ float pointparticles_SendEntity(entity to, float fl) } if(fl & 4) { - WriteCoord(MSG_ENTITY, self.origin_x); - WriteCoord(MSG_ENTITY, self.origin_y); - WriteCoord(MSG_ENTITY, self.origin_z); + WriteCoord(MSG_ENTITY, self.origin.x); + WriteCoord(MSG_ENTITY, self.origin.y); + WriteCoord(MSG_ENTITY, self.origin.z); } if(fl & 1) { @@ -865,12 +848,12 @@ float pointparticles_SendEntity(entity to, float fl) WriteShort(MSG_ENTITY, self.modelindex); if(fl & 0x80) { - WriteCoord(MSG_ENTITY, self.mins_x); - WriteCoord(MSG_ENTITY, self.mins_y); - WriteCoord(MSG_ENTITY, self.mins_z); - WriteCoord(MSG_ENTITY, self.maxs_x); - WriteCoord(MSG_ENTITY, self.maxs_y); - WriteCoord(MSG_ENTITY, self.maxs_z); + WriteCoord(MSG_ENTITY, self.mins.x); + WriteCoord(MSG_ENTITY, self.mins.y); + WriteCoord(MSG_ENTITY, self.mins.z); + WriteCoord(MSG_ENTITY, self.maxs.x); + WriteCoord(MSG_ENTITY, self.maxs.y); + WriteCoord(MSG_ENTITY, self.maxs.z); } } else @@ -878,9 +861,9 @@ float pointparticles_SendEntity(entity to, float fl) WriteShort(MSG_ENTITY, 0); if(fl & 0x80) { - WriteCoord(MSG_ENTITY, self.maxs_x); - WriteCoord(MSG_ENTITY, self.maxs_y); - WriteCoord(MSG_ENTITY, self.maxs_z); + WriteCoord(MSG_ENTITY, self.maxs.x); + WriteCoord(MSG_ENTITY, self.maxs.y); + WriteCoord(MSG_ENTITY, self.maxs.z); } } WriteShort(MSG_ENTITY, self.cnt); @@ -942,7 +925,7 @@ void spawnfunc_func_pointparticles() setmodel(self, self.model); if(self.noise != "") precache_sound (self.noise); - + if(!self.bgmscriptsustain) self.bgmscriptsustain = 1; else if(self.bgmscriptsustain < 0) @@ -1010,12 +993,12 @@ float rainsnow_SendEntity(entity to, float sf) { WriteByte(MSG_ENTITY, ENT_CLIENT_RAINSNOW); WriteByte(MSG_ENTITY, self.state); - WriteCoord(MSG_ENTITY, self.origin_x + self.mins_x); - WriteCoord(MSG_ENTITY, self.origin_y + self.mins_y); - WriteCoord(MSG_ENTITY, self.origin_z + self.mins_z); - WriteCoord(MSG_ENTITY, self.maxs_x - self.mins_x); - WriteCoord(MSG_ENTITY, self.maxs_y - self.mins_y); - WriteCoord(MSG_ENTITY, self.maxs_z - self.mins_z); + WriteCoord(MSG_ENTITY, self.origin.x + self.mins.x); + WriteCoord(MSG_ENTITY, self.origin.y + self.mins.y); + WriteCoord(MSG_ENTITY, self.origin.z + self.mins.z); + WriteCoord(MSG_ENTITY, self.maxs.x - self.mins.x); + WriteCoord(MSG_ENTITY, self.maxs.y - self.mins.y); + WriteCoord(MSG_ENTITY, self.maxs.z - self.mins.z); WriteShort(MSG_ENTITY, compressShortVector(self.dest)); WriteShort(MSG_ENTITY, self.count); WriteByte(MSG_ENTITY, self.cnt); @@ -1047,7 +1030,7 @@ void spawnfunc_func_rain() self.cnt = 12; if (!self.count) self.count = 2000; - self.count = 0.01 * self.count * (self.size_x / 1024) * (self.size_y / 1024); + self.count = 0.01 * self.count * (self.size.x / 1024) * (self.size.y / 1024); if (self.count < 1) self.count = 1; if(self.count > 65535) @@ -1056,7 +1039,7 @@ void spawnfunc_func_rain() self.state = 1; // 1 is rain, 0 is snow self.Version = 1; - Net_LinkEntity(self, FALSE, 0, rainsnow_SendEntity); + Net_LinkEntity(self, false, 0, rainsnow_SendEntity); } @@ -1085,7 +1068,7 @@ void spawnfunc_func_snow() self.cnt = 12; if (!self.count) self.count = 2000; - self.count = 0.01 * self.count * (self.size_x / 1024) * (self.size_y / 1024); + self.count = 0.01 * self.count * (self.size.x / 1024) * (self.size.y / 1024); if (self.count < 1) self.count = 1; if(self.count > 65535) @@ -1094,13 +1077,9 @@ void spawnfunc_func_snow() self.state = 0; // 1 is rain, 0 is snow self.Version = 1; - Net_LinkEntity(self, FALSE, 0, rainsnow_SendEntity); + Net_LinkEntity(self, false, 0, rainsnow_SendEntity); } - -void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, float mindist, float maxdist, float halflifedist, float forcehalflifedist, float deathtype); - -.float modelscale; void misc_laser_aim() { vector a; @@ -1117,7 +1096,7 @@ void misc_laser_aim() else { a = vectoangles(self.enemy.origin - self.origin); - a_x = -a_x; + a.x = -a.x; if(a != self.mangle) { self.mangle = a; @@ -1146,7 +1125,6 @@ void misc_laser_init() self.enemy = find(world, targetname, self.target); } -.entity pusher; void misc_laser_think() { vector o; @@ -1164,7 +1142,7 @@ void misc_laser_think() if(self.enemy) { o = self.enemy.origin; - if not(self.spawnflags & 2) + if (!(self.spawnflags & 2)) o = self.origin + normalize(o - self.origin) * 32768; } else @@ -1236,15 +1214,15 @@ float laser_SendEntity(entity to, float fl) WriteByte(MSG_ENTITY, fl); if(fl & 1) { - WriteCoord(MSG_ENTITY, self.origin_x); - WriteCoord(MSG_ENTITY, self.origin_y); - WriteCoord(MSG_ENTITY, self.origin_z); + WriteCoord(MSG_ENTITY, self.origin.x); + WriteCoord(MSG_ENTITY, self.origin.y); + WriteCoord(MSG_ENTITY, self.origin.z); } if(fl & 8) { - WriteByte(MSG_ENTITY, self.colormod_x * 255.0); - WriteByte(MSG_ENTITY, self.colormod_y * 255.0); - WriteByte(MSG_ENTITY, self.colormod_z * 255.0); + WriteByte(MSG_ENTITY, self.colormod.x * 255.0); + WriteByte(MSG_ENTITY, self.colormod.y * 255.0); + WriteByte(MSG_ENTITY, self.colormod.z * 255.0); if(fl & 0x40) WriteByte(MSG_ENTITY, self.alpha * 255.0); if(fl & 0x20) @@ -1259,14 +1237,14 @@ float laser_SendEntity(entity to, float fl) { if(fl & 0x80) { - WriteCoord(MSG_ENTITY, self.enemy.origin_x); - WriteCoord(MSG_ENTITY, self.enemy.origin_y); - WriteCoord(MSG_ENTITY, self.enemy.origin_z); + WriteCoord(MSG_ENTITY, self.enemy.origin.x); + WriteCoord(MSG_ENTITY, self.enemy.origin.y); + WriteCoord(MSG_ENTITY, self.enemy.origin.z); } else { - WriteAngle(MSG_ENTITY, self.mangle_x); - WriteAngle(MSG_ENTITY, self.mangle_y); + WriteAngle(MSG_ENTITY, self.mangle.x); + WriteAngle(MSG_ENTITY, self.mangle.y); } } if(fl & 4) @@ -1344,7 +1322,7 @@ void spawnfunc_misc_laser() self.mangle = self.angles; - Net_LinkEntity(self, FALSE, 0, laser_SendEntity); + Net_LinkEntity(self, false, 0, laser_SendEntity); IFTARGETED { @@ -1357,10 +1335,6 @@ void spawnfunc_misc_laser() } // tZorks trigger impulse / gravity -.float radius; -.float falloff; -.float strength; -.float lastpushtime; // targeted (directional) mode void trigger_impulse_touch1() @@ -1369,7 +1343,7 @@ void trigger_impulse_touch1() float pushdeltatime; float str; - if (self.active != ACTIVE_ACTIVE) + if (self.active != ACTIVE_ACTIVE) return; if (!isPushable(other)) @@ -1409,7 +1383,7 @@ void trigger_impulse_touch2() { float pushdeltatime; - if (self.active != ACTIVE_ACTIVE) + if (self.active != ACTIVE_ACTIVE) return; if (!isPushable(other)) @@ -1433,7 +1407,7 @@ void trigger_impulse_touch3() float pushdeltatime; float str; - if (self.active != ACTIVE_ACTIVE) + if (self.active != ACTIVE_ACTIVE) return; if (!isPushable(other)) @@ -1736,11 +1710,6 @@ void spawnfunc_trigger_gamestart() { -.entity voicescript; // attached voice script -.float voicescript_index; // index of next voice, or -1 to use the randomized ones -.float voicescript_nextthink; // time to play next voice -.float voicescript_voiceend; // time when this voice ends - void target_voicescript_clear(entity pl) { pl.voicescript = world; @@ -1766,7 +1735,7 @@ void target_voicescript_next(entity pl) return; if(vs.message == "") return; - if not(IS_PLAYER(pl)) + if (!IS_PLAYER(pl)) return; if(gameover) return; @@ -1781,7 +1750,7 @@ void target_voicescript_next(entity pl) if(pl.voicescript_index < vs.cnt) i = pl.voicescript_index * 2; else if(n > vs.cnt * 2) - i = mod(pl.voicescript_index - vs.cnt, (n - vs.cnt * 2 - 1) / 2) * 2 + vs.cnt * 2 + 1; + i = ((pl.voicescript_index - vs.cnt) % ((n - vs.cnt * 2 - 1) / 2)) * 2 + vs.cnt * 2 + 1; else i = -1; @@ -1819,7 +1788,7 @@ void spawnfunc_target_voicescript() // added after this message // wait: average time between messages // delay: initial delay before the first message - + float i, n; self.use = target_voicescript_use; @@ -1904,8 +1873,6 @@ void spawnfunc_trigger_disablerelay() self.use = trigger_disablerelay_use; } -float magicear_matched; -float W_Tuba_HasPlayed(entity pl, string melody, float instrument, float ignorepitch, float mintempo, float maxtempo); string trigger_magicear_processmessage(entity ear, entity source, float teamsay, entity privatesay, string msgin) { float domatch, dotrigger, matchstart, l; @@ -1913,24 +1880,24 @@ string trigger_magicear_processmessage(entity ear, entity source, float teamsay, entity oldself; string savemessage; - magicear_matched = FALSE; + magicear_matched = false; dotrigger = ((IS_PLAYER(source)) && (source.deadflag == DEAD_NO) && ((ear.radius == 0) || (vlen(source.origin - ear.origin) <= ear.radius))); domatch = ((ear.spawnflags & 32) || dotrigger); - if not(domatch) + if (!domatch) return msgin; - if not(msgin) + if (!msgin) { // we are in TUBA mode! - if not(ear.spawnflags & 256) + if (!(ear.spawnflags & 256)) return msgin; - if(!W_Tuba_HasPlayed(source, ear.message, ear.movedir_x, !(ear.spawnflags & 512), ear.movedir_y, ear.movedir_z)) + if(!W_Tuba_HasPlayed(source, ear.message, ear.movedir.x, !(ear.spawnflags & 512), ear.movedir.y, ear.movedir.z)) return msgin; - magicear_matched = TRUE; + magicear_matched = true; if(dotrigger) { @@ -1970,7 +1937,7 @@ string trigger_magicear_processmessage(entity ear, entity source, float teamsay, if(ear.spawnflags & 8) return msgin; } - + matchstart = -1; l = strlen(ear.message); @@ -2021,7 +1988,7 @@ string trigger_magicear_processmessage(entity ear, entity source, float teamsay, if(matchstart == -1) // no match return msgin; - magicear_matched = TRUE; + magicear_matched = true; if(dotrigger) { @@ -2054,7 +2021,6 @@ string trigger_magicear_processmessage(entity ear, entity source, float teamsay, return msgin; } -entity magicears; string trigger_magicear_processmessage_forallears(entity source, float teamsay, entity privatesay, string msgin) { entity ear; @@ -2062,9 +2028,9 @@ string trigger_magicear_processmessage_forallears(entity source, float teamsay, for(ear = magicears; ear; ear = ear.enemy) { msgout = trigger_magicear_processmessage(ear, source, teamsay, privatesay, msgin); - if not(ear.spawnflags & 64) - if(magicear_matched) - return msgout; + if(!(ear.spawnflags & 64)) + if(magicear_matched) + return msgout; msgin = msgout; } return msgin; @@ -2110,9 +2076,9 @@ void spawnfunc_trigger_magicear() void relay_activators_use() { entity trg, os; - + os = self; - + for(trg = world; (trg = find(trg, targetname, os.target)); ) { self = trg; @@ -2124,11 +2090,11 @@ void relay_activators_use() if(os.cnt == ACTIVE_TOGGLE) if(trg.active == ACTIVE_ACTIVE) trg.active = ACTIVE_NOT; - else + else trg.active = ACTIVE_ACTIVE; else trg.active = os.cnt; - } + } } self = os; } @@ -2142,16 +2108,15 @@ void spawnfunc_relay_activate() void spawnfunc_relay_deactivate() { self.cnt = ACTIVE_NOT; - self.use = relay_activators_use; + self.use = relay_activators_use; } void spawnfunc_relay_activatetoggle() { self.cnt = ACTIVE_TOGGLE; - self.use = relay_activators_use; + self.use = relay_activators_use; } -.string chmap, gametype; void spawnfunc_target_changelevel_use() { if(self.gametype != "")