X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Ftriggers%2Ftrigger%2Fkeylock.qc;h=67db14421662c2d0c40483b328ee3dd30ee6babe;hp=311075aa0a0a0ed5c23cedc57d7194c4b6a0d937;hb=05d2779856eda44ed6c8779ab55380fa006cfcb4;hpb=42e255d014f2c6a1871177ea511f630624cdfb57 diff --git a/qcsrc/common/triggers/trigger/keylock.qc b/qcsrc/common/triggers/trigger/keylock.qc index 311075aa0..67db14421 100644 --- a/qcsrc/common/triggers/trigger/keylock.qc +++ b/qcsrc/common/triggers/trigger/keylock.qc @@ -1,9 +1,10 @@ +#include "keylock.qh" /** * trigger given targets */ void trigger_keylock_trigger(entity this, entity actor, string s) { - for(entity t = world; (t = find(t, targetname, s)); ) + for(entity t = NULL; (t = find(t, targetname, s)); ) if(t.use) t.use(t, actor, this); } @@ -14,67 +15,67 @@ void trigger_keylock_trigger(entity this, entity actor, string s) void trigger_keylock_kill(string s) { entity t; - for(t = world; (t = find(t, targetname, s)); ) - remove(t); + for(t = NULL; (t = find(t, targetname, s)); ) + delete(t); } -void trigger_keylock_touch() -{SELFPARAM(); +void trigger_keylock_touch(entity this, entity toucher) +{ bool key_used = false; bool started_delay = false; // only player may trigger the lock - if(!IS_PLAYER(other)) + if(!IS_PLAYER(toucher)) return; // check silver key - if(self.itemkeys) - key_used = item_keys_usekey(self, other); + if(this.itemkeys) + key_used = item_keys_usekey(this, toucher); - if(self.itemkeys) + if(this.itemkeys) { #ifdef SVQC // at least one of the keys is missing if(key_used) { // one or more keys were given, but others are still missing! - play2(other, self.noise1); - Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_DOOR_LOCKED_ALSONEED, item_keys_keylist(self.itemkeys)); - other.key_door_messagetime = time + 2; + play2(toucher, this.noise1); + Send_Notification(NOTIF_ONE, toucher, MSG_CENTER, CENTER_DOOR_LOCKED_ALSONEED, item_keys_keylist(this.itemkeys)); + toucher.key_door_messagetime = time + 2; } - else if(other.key_door_messagetime <= time) + else if(toucher.key_door_messagetime <= time) { // no keys were given - play2(other, self.noise2); - Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_DOOR_LOCKED_NEED, item_keys_keylist(self.itemkeys)); - other.key_door_messagetime = time + 2; + play2(toucher, this.noise2); + Send_Notification(NOTIF_ONE, toucher, MSG_CENTER, CENTER_DOOR_LOCKED_NEED, item_keys_keylist(this.itemkeys)); + toucher.key_door_messagetime = time + 2; } #endif // trigger target2 - if(self.delay <= time || started_delay == true) - if(self.target2) + if(this.delay <= time || started_delay == true) + if(this.target2) { - trigger_keylock_trigger(this, other, self.target2); + trigger_keylock_trigger(this, toucher, this.target2); started_delay = true; - self.delay = time + self.wait; + this.delay = time + this.wait; } } else { #ifdef SVQC // all keys were given! - play2(other, self.noise); - centerprint(other, self.message); + play2(toucher, this.noise); + centerprint(toucher, this.message); #endif - if(self.target) - trigger_keylock_trigger(this, other, self.target); + if(this.target) + trigger_keylock_trigger(this, toucher, this.target); - if(self.killtarget) - trigger_keylock_kill(self.killtarget); + if(this.killtarget) + trigger_keylock_kill(this.killtarget); - remove(self); + delete(this); } } @@ -82,22 +83,22 @@ void trigger_keylock_touch() REGISTER_NET_LINKED(ENT_CLIENT_KEYLOCK) #ifdef SVQC -bool trigger_keylock_send(entity to, int sf) -{SELFPARAM(); +bool trigger_keylock_send(entity this, entity to, int sf) +{ WriteHeader(MSG_ENTITY, ENT_CLIENT_KEYLOCK); - WriteInt24_t(MSG_ENTITY, self.itemkeys); - WriteByte(MSG_ENTITY, self.height); + WriteInt24_t(MSG_ENTITY, this.itemkeys); + WriteByte(MSG_ENTITY, this.height); - trigger_common_write(self, true); + trigger_common_write(this, true); return true; } -void trigger_keylock_link() +void trigger_keylock_link(entity this) { // uncomment to network keylocks - //Net_LinkEntity(self, false, 0, trigger_keylock_send); + //Net_LinkEntity(this, false, 0, trigger_keylock_send); } /*QUAKED trigger_keylock (.0 .5 .8) ? @@ -121,80 +122,66 @@ message2 and noise2 will be resent to the player every 2 seconds while he is in */ spawnfunc(trigger_keylock) { - if(!self.itemkeys) { remove(self); return; } + if(!this.itemkeys) { delete(this); return; } // set unlocked message - if(self.message == "") - self.message = "Unlocked!"; + if(this.message == "") + this.message = "Unlocked!"; // set default unlock noise - if(self.noise == "") + if(this.noise == "") { - if(self.sounds == 1) - self.noise = "misc/secret.wav"; - else if(self.sounds == 2) - self.noise = strzone(SND(TALK)); - else //if (self.sounds == 3) { - self.noise = "misc/trigger1.wav"; + if(this.sounds == 1) + this.noise = "misc/secret.wav"; + else if(this.sounds == 2) + this.noise = strzone(SND(TALK)); + else //if (this.sounds == 3) { + this.noise = "misc/trigger1.wav"; } // set default use key sound - if(self.noise1 == "") - self.noise1 = "misc/decreasevalue.wav"; + if(this.noise1 == "") + this.noise1 = "misc/decreasevalue.wav"; // set closed sourd - if(self.noise2 == "") - self.noise2 = SND(TALK); + if(this.noise2 == "") + this.noise2 = SND(TALK); // delay between triggering message2 and trigger2 - if(!self.wait) { self.wait = 5; } + if(!this.wait) { this.wait = 5; } // precache sounds - precache_sound(self.noise); - precache_sound(self.noise1); - precache_sound(self.noise2); + precache_sound(this.noise); + precache_sound(this.noise1); + precache_sound(this.noise2); EXACTTRIGGER_INIT; - self.touch = trigger_keylock_touch; + settouch(this, trigger_keylock_touch); - trigger_keylock_link(); + trigger_keylock_link(this); } #elif defined(CSQC) void keylock_remove(entity this) { - if(this.target) { strunzone(this.target); } - this.target = string_null; - - if(this.target2) { strunzone(this.target2); } - this.target2 = string_null; - - if(this.target3) { strunzone(this.target3); } - this.target3 = string_null; - - if(this.target4) { strunzone(this.target4); } - this.target4 = string_null; - - if(this.killtarget) { strunzone(this.killtarget); } - this.killtarget = string_null; - - if(this.targetname) { strunzone(this.targetname); } - this.targetname = string_null; + strfree(this.target); + strfree(this.target2); + strfree(this.target3); + strfree(this.target4); + strfree(this.killtarget); + strfree(this.targetname); } NET_HANDLE(ENT_CLIENT_KEYLOCK, bool isnew) { - self.itemkeys = ReadInt24_t(); - self.height = ReadByte(); + this.itemkeys = ReadInt24_t(); + this.height = ReadByte(); - trigger_common_read(true); + trigger_common_read(this, true); return = true; - self.classname = "trigger_keylock"; - self.drawmask = MASK_NORMAL; - self.draw = trigger_draw_generic; - self.trigger_touch = trigger_keylock_touch; - self.entremove = keylock_remove; + this.classname = "trigger_keylock"; + this.entremove = keylock_remove; } #endif