123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336 |
- void() SUB_Null = {};
- void() SUB_Remove = {remove(self);};
- vector() SetMovedir =
- {
- if (self.angles == '0 -1 0')
- self.movedir = '0 0 1';
- else if (self.angles == '0 -2 0')
- self.movedir = '0 0 -1';
- else
- {
- makevectors (self.angles);
- self.movedir = v_forward;
- }
-
- self.angles = '0 0 0';
- };
- void() InitTrigger =
- {
- if (self.angles != '0 0 0')
- SetMovedir ();
- self.solid = SOLID_TRIGGER;
- setmodel (self, self.model);
- self.movetype = MOVETYPE_NONE;
- self.modelindex = 0;
- self.model = "";
- };
- void(entity ent, vector tdest, float tspeed, void() func) SUB_CalcMoveEnt =
- {
- local entity stemp;
- stemp = self;
- self = ent;
- SUB_CalcMove (tdest, tspeed, func);
- self = stemp;
- };
- void(vector tdest, float tspeed, void() func) SUB_CalcMove =
- {
- local vector vdestdelta;
- local float len, traveltime;
- if (!tspeed)
- objerror("No speed is defined!");
- self.think1 = func;
- self.finaldest = tdest;
- self.think = SUB_CalcMoveDone;
- if (tdest == self.origin)
- {
- self.velocity = '0 0 0';
- self.nextthink = self.ltime + 0.1;
- return;
- }
-
- vdestdelta = tdest - self.origin;
-
- len = vlen (vdestdelta);
-
- traveltime = len / tspeed;
- if (traveltime < 0.1)
- {
- self.velocity = '0 0 0';
- self.nextthink = self.ltime + 0.1;
- return;
- }
-
- self.nextthink = self.ltime + traveltime;
- self.velocity = vdestdelta * (1/traveltime);
- };
- void() SUB_CalcMoveDone =
- {
- setorigin(self, self.finaldest);
- self.velocity = '0 0 0';
- self.nextthink = -1;
- if (self.think1)
- self.think1();
- };
- void(entity ent, vector destangle, float tspeed, void() func) SUB_CalcAngleMoveEnt =
- {
- local entity stemp;
- stemp = self;
- self = ent;
- SUB_CalcAngleMove (destangle, tspeed, func);
- self = stemp;
- };
- void(vector destangle, float tspeed, void() func) SUB_CalcAngleMove =
- {
- local vector destdelta;
- local float len, traveltime;
- if (!tspeed)
- objerror("No speed is defined!");
-
- destdelta = destangle - self.angles;
-
- len = vlen (destdelta);
-
- traveltime = len / tspeed;
- self.nextthink = self.ltime + traveltime;
- self.avelocity = destdelta * (1 / traveltime);
-
- self.think1 = func;
- self.finalangle = destangle;
- self.think = SUB_CalcAngleMoveDone;
- };
- void() SUB_CalcAngleMoveDone =
- {
- self.angles = self.finalangle;
- self.avelocity = '0 0 0';
- self.nextthink = -1;
- if (self.think1)
- self.think1();
- };
- void() DelayThink =
- {
- activator = self.enemy;
- SUB_UseTargets ();
- remove(self);
- };
- void() SUB_UseTargets =
- {
- local entity t, stemp, otemp, act;
- if (self.delay)
- {
-
- t = spawn();
- t.classname = "DelayedUse";
- t.nextthink = time + self.delay;
- t.think = DelayThink;
- t.enemy = activator;
- t.message = self.message;
- t.killtarget = self.killtarget;
- t.target = self.target;
- return;
- }
-
-
- if (activator.classname == "player" && self.message != "")
- {
- centerprint (activator, self.message);
- if (!self.noise)
- sound (activator, CHAN_VOICE, "misc/talk.wav", 1, ATTN_NORM);
- }
- if (self.killtarget)
- {
- t = world;
- do
- {
- t = find (t, targetname, self.killtarget);
- if (!t)
- return;
- remove (t);
- } while ( 1 );
- }
-
- if (self.target)
- {
- act = activator;
- t = world;
- do
- {
- t = find (t, targetname, self.target);
- if (!t)
- {
- return;
- }
- stemp = self;
- otemp = other;
- self = t;
- other = stemp;
- if (self.use != SUB_Null)
- {
- if (self.use)
- self.use ();
- }
- self = stemp;
- other = otemp;
- activator = act;
- } while ( 1 );
- }
-
- };
- void(float normal) SUB_AttackFinished =
- {
- self.cnt = 0;
-
- self.attack_finished = time + normal;
- };
- float (entity targ) visible;
- void (void() thinkst) SUB_CheckRefire =
- {
- if (skill != 3)
- return;
- if (self.cnt == 1)
- return;
- if (!visible (self.enemy))
- return;
- self.cnt = 1;
- self.think = thinkst;
- };
|