X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Ftriggers%2Ffunc%2Fdoor.qc;h=bb15503c7f801686a3a1ee3af473de786923fc3c;hp=2b3decf64ff3dcda89bf58bfeaaf8412de15e37f;hb=d865de7a9a17c5a1d9286aec40f68c3530697660;hpb=c6ebaefab2aca7df4648dac3ccdd4b52de45d0ed diff --git a/qcsrc/common/triggers/func/door.qc b/qcsrc/common/triggers/func/door.qc index 2b3decf64f..bb15503c7f 100644 --- a/qcsrc/common/triggers/func/door.qc +++ b/qcsrc/common/triggers/func/door.qc @@ -1,3 +1,4 @@ +#include "door.qh" /* Doors are similar to buttons, but can spawn a fat trigger field around them @@ -21,7 +22,7 @@ THINK FUNCTIONS */ void door_go_down(entity this); -void door_go_up(entity this); +void door_go_up(entity this, entity actor, entity trigger); void door_rotating_go_down(entity this); void door_rotating_go_up(entity this, entity oth); @@ -58,7 +59,7 @@ void door_blocked(entity this, entity blocker) if (this.state == STATE_DOWN) if (this.classname == "door") { - door_go_up (this); + door_go_up (this, NULL, NULL); } else { door_rotating_go_up(this, blocker); @@ -93,12 +94,12 @@ void door_hit_top(entity this) return; // don't come down automatically if (this.classname == "door") { - SUB_THINK(this, door_go_down); + setthink(this, door_go_down); } else { - SUB_THINK(this, door_rotating_go_down); + setthink(this, door_rotating_go_down); } - this.SUB_NEXTTHINK = this.SUB_LTIME + this.wait; + this.nextthink = this.ltime + this.wait; } void door_hit_bottom(entity this) @@ -122,14 +123,14 @@ void door_go_down(entity this) SUB_CalcMove (this, this.pos1, TSPEED_LINEAR, this.speed, door_hit_bottom); } -void door_go_up(entity this) +void door_go_up(entity this, entity actor, entity trigger) { if (this.state == STATE_UP) return; // already going up if (this.state == STATE_TOP) { // reset top wait time - this.SUB_NEXTTHINK = this.SUB_LTIME + this.wait; + this.nextthink = this.ltime + this.wait; return; } @@ -141,7 +142,7 @@ void door_go_up(entity this) string oldmessage; oldmessage = this.message; this.message = ""; - SUB_UseTargets(this, NULL, NULL); + SUB_UseTargets(this, actor, trigger); this.message = oldmessage; } @@ -168,7 +169,11 @@ bool door_check_keys(entity door, entity player) if(!IS_PLAYER(player)) return false; - int valid = (door.itemkeys & player.itemkeys); + entity store = player; +#ifdef SVQC + store = PS(player); +#endif + int valid = (door.itemkeys & store.itemkeys); door.itemkeys &= ~valid; // only some of the needed keys were given if(!door.itemkeys) @@ -232,7 +237,7 @@ void door_fire(entity this, entity actor, entity trigger) entity e = this; do { if (e.classname == "door") { - door_go_up(e); + door_go_up(e, actor, trigger); } else { // if the BIDIR spawnflag (==2) is set and the trigger has set trigger_reverse, reverse the opening direction if ((e.spawnflags & 2) && trigger.trigger_reverse!=0 && e.lip != 666 && e.state == STATE_BOTTOM) { @@ -352,8 +357,8 @@ void door_rotating_hit_top(entity this) this.state = STATE_TOP; if (this.spawnflags & DOOR_TOGGLE) return; // don't come down automatically - SUB_THINK(this, door_rotating_go_down); - this.SUB_NEXTTHINK = this.SUB_LTIME + this.wait; + setthink(this, door_rotating_go_down); + this.nextthink = this.ltime + this.wait; } void door_rotating_hit_bottom(entity this) @@ -389,7 +394,7 @@ void door_rotating_go_up(entity this, entity oth) if (this.state == STATE_TOP) { // reset top wait time - this.SUB_NEXTTHINK = this.SUB_LTIME + this.wait; + this.nextthink = this.ltime + this.wait; return; } if (this.noise2 != "") @@ -441,7 +446,7 @@ void door_spawnfield(entity this, vector fmins, vector fmaxs) vector t1 = fmins, t2 = fmaxs; trigger = new(doortriggerfield); - trigger.movetype = MOVETYPE_NONE; + set_movetype(trigger, MOVETYPE_NONE); trigger.solid = SOLID_TRIGGER; trigger.owner = this; #ifdef SVQC @@ -525,7 +530,7 @@ void LinkDoors(entity this) break; } } - LOG_TRACE("\n"); + LOG_TRACE(""); // collect health, targetname, message, size cmins = this.absmin; @@ -638,7 +643,7 @@ float door_send(entity this, entity to, float sf) WriteShort(MSG_ENTITY, this.speed); WriteByte(MSG_ENTITY, this.lip); WriteByte(MSG_ENTITY, this.state); - WriteCoord(MSG_ENTITY, this.SUB_LTIME); + WriteCoord(MSG_ENTITY, this.ltime); } if(sf & SF_TRIGGER_RESET) @@ -673,7 +678,7 @@ void door_link() void door_init_startopen(entity this) { - SUB_SETORIGIN(this, this.pos2); + setorigin(this, this.pos2); this.pos2 = this.pos1; this.pos1 = this.origin; @@ -684,11 +689,11 @@ void door_init_startopen(entity this) void door_reset(entity this) { - SUB_SETORIGIN(this, this.pos1); - this.SUB_VELOCITY = '0 0 0'; + setorigin(this, this.pos1); + this.velocity = '0 0 0'; this.state = STATE_BOTTOM; - SUB_THINK(this, func_null); - this.SUB_NEXTTHINK = 0; + setthink(this, func_null); + this.nextthink = 0; #ifdef SVQC this.SendFlags |= SF_TRIGGER_RESET; @@ -731,12 +736,13 @@ spawnfunc(func_door) if (this.sounds > 0) { - precache_sound ("plats/medplat1.wav"); - precache_sound ("plats/medplat2.wav"); this.noise2 = "plats/medplat1.wav"; this.noise1 = "plats/medplat2.wav"; } + if(this.noise1 && this.noise1 != "") { precache_sound(this.noise1); } + if(this.noise2 && this.noise2 != "") { precache_sound(this.noise2); } + if (!this.speed) this.speed = 100; if (!this.wait) @@ -744,7 +750,7 @@ spawnfunc(func_door) if (!this.lip) this.lip = 8; - this.pos1 = this.SUB_ORIGIN; + this.pos1 = this.origin; this.pos2 = this.pos1 + this.movedir*(fabs(this.movedir*this.size) - this.lip); if(this.spawnflags & DOOR_NONSOLID) @@ -759,6 +765,7 @@ spawnfunc(func_door) if (this.health) { + //this.canteamdamage = true; // TODO this.takedamage = DAMAGE_YES; this.event_damage = door_damage; } @@ -812,10 +819,10 @@ NET_HANDLE(ENT_CLIENT_DOOR, bool isnew) this.speed = ReadShort(); this.lip = ReadByte(); this.state = ReadByte(); - this.SUB_LTIME = ReadCoord(); + this.ltime = ReadCoord(); this.solid = SOLID_BSP; - this.movetype = MOVETYPE_PUSH; + set_movetype(this, MOVETYPE_PUSH); this.use = door_use; LinkDoors(this); @@ -824,10 +831,7 @@ NET_HANDLE(ENT_CLIENT_DOOR, bool isnew) door_init_startopen(this); this.move_time = time; - this.move_origin = this.origin; - this.move_movetype = MOVETYPE_PUSH; - this.move_angles = this.angles; - this.move_blocked = door_blocked; + set_movetype(this, MOVETYPE_PUSH); } if(sf & SF_TRIGGER_RESET) @@ -841,7 +845,6 @@ NET_HANDLE(ENT_CLIENT_DOOR, bool isnew) this.origin_y = ReadCoord(); this.origin_z = ReadCoord(); setorigin(this, this.origin); - this.move_origin = this.origin; this.pos1_x = ReadCoord(); this.pos1_y = ReadCoord();