X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fcheats.qc;h=3d569222cd25d29238562501d6ae78a9633d7058;hp=add6d535564b5e9bd4a855cfede7582678436c24;hb=c5fcf672c473edef7139d4250398184b8ae17224;hpb=35528e99ccad9a20fbd6eed640a5bc1bda884acd diff --git a/qcsrc/server/cheats.qc b/qcsrc/server/cheats.qc index add6d53556..3d569222cd 100644 --- a/qcsrc/server/cheats.qc +++ b/qcsrc/server/cheats.qc @@ -4,7 +4,7 @@ #include "race.qh" #include "../common/triggers/teleporters.qh" -#include "mutators/all.qh" +#include "mutators/_mod.qh" #include "weapons/tracing.qh" @@ -14,9 +14,9 @@ #include -#include "../common/monsters/all.qh" +#include "../common/monsters/_mod.qh" -#include "../common/weapons/all.qh" +#include #include "../common/triggers/subs.qh" @@ -31,9 +31,9 @@ void CopyBody(entity this, float keepvelocity); #ifdef NOCHEATS -float CheatImpulse(int imp) { return 0; } -float CheatCommand(float argc) { return 0; } -float CheatFrame() { return 0; } +float CheatImpulse(entity this, int imp) { return 0; } +float CheatCommand(entity this, int argc) { return 0; } +float CheatFrame(entity this) { return 0; } void CheatInit() { cheatcount_total = world.cheatcount; } void CheatShutdown() { } void Drag_MoveDrag(entity from, entity to) { } @@ -54,21 +54,21 @@ void CheatShutdown() { } -float CheatsAllowed(float i, float argc, float fr) // the cheat gets passed as argument for possible future ACL checking -{SELFPARAM(); +float CheatsAllowed(entity this, float i, float argc, float fr) // the cheat gets passed as argument for possible future ACL checking +{ // dead people cannot cheat - if(IS_DEAD(self)) + if(IS_DEAD(this)) return 0; - if(gamestart_sv_cheats < 2 && !IS_PLAYER(self)) + if(gamestart_sv_cheats < 2 && !IS_PLAYER(this)) return 0; // sv_clones if(i == CHIMPULSE_CLONE_MOVING.impulse || i == CHIMPULSE_CLONE_STANDING.impulse) - if(self.lip < sv_clones) + if(this.lip < sv_clones) return 1; // haha - if(self.maycheat) + if(this.maycheat) return 1; // sv_cheats @@ -77,13 +77,13 @@ float CheatsAllowed(float i, float argc, float fr) // the cheat gets passed as a // if we get here, player is not allowed to cheat. Log it. if(i) - bprintf("Player %s^7 tried to use cheat 'impulse %d'\n", self.netname, i); + bprintf("Player %s^7 tried to use cheat 'impulse %d'\n", this.netname, i); else if(argc) - bprintf("Player %s^7 tried to use cheat '%s'\n", self.netname, argv(0)); + bprintf("Player %s^7 tried to use cheat '%s'\n", this.netname, argv(0)); else if(fr) - bprintf("Player %s^7 tried to use cheat frame %d\n", self.netname, fr); + bprintf("Player %s^7 tried to use cheat frame %d\n", this.netname, fr); else - bprintf("Player %s^7 tried to use an unknown cheat\n", self.netname); + bprintf("Player %s^7 tried to use an unknown cheat\n", this.netname); return 0; } @@ -99,40 +99,40 @@ float CheatsAllowed(float i, float argc, float fr) // the cheat gets passed as a #define END_CHEAT_FUNCTION() \ ADD_CHEATS(this, cheating); \ return attempting -#define IS_CHEAT(i,argc,fr) \ - if((++attempting, !CheatsAllowed(i,argc,fr))) \ +#define IS_CHEAT(ent,i,argc,fr) \ + if((++attempting, !CheatsAllowed(ent,i,argc,fr))) \ break float num_autoscreenshot; void info_autoscreenshot_findtarget(entity this) { entity e; - e = find(world, targetname, self.target); + e = find(NULL, targetname, this.target); if(!e) { - objerror("Missing target. FAIL!"); + objerror(this, "Missing target. FAIL!"); return; } - vector a = vectoangles(e.origin - self.origin); + vector a = vectoangles(e.origin - this.origin); a.x = -a.x; // don't ask - self.angles_x = a.x; - self.angles_y = a.y; + this.angles_x = a.x; + this.angles_y = a.y; // we leave Rick Roll alone } spawnfunc(info_autoscreenshot) { if(++num_autoscreenshot > autocvar_g_max_info_autoscreenshot) { - objerror("Too many info_autoscreenshot entitites. FAIL!"); + objerror(this, "Too many info_autoscreenshot entitites. FAIL!"); return; } - if(self.target != "") - InitializeEntity(self, info_autoscreenshot_findtarget, INITPRIO_FINDTARGET); + if(this.target != "") + InitializeEntity(this, info_autoscreenshot_findtarget, INITPRIO_FINDTARGET); // this one just has to exist } -float CheatImpulse(int imp) -{SELFPARAM(); +float CheatImpulse(entity this, int imp) +{ BEGIN_CHEAT_FUNCTION(); switch(imp) { @@ -140,141 +140,141 @@ float CheatImpulse(int imp) case CHIMPULSE_SPEEDRUN_INIT.impulse: // deploy personal waypoint // shared with regular waypoint init, so this is not a cheat by itself - if(!self.personal) + if(!this.personal) { - self.personal = new(personal_wp); + this.personal = new(personal_wp); } - self.personal.origin = self.origin; - self.personal.v_angle = self.v_angle; - self.personal.velocity = self.velocity; - self.personal.ammo_rockets = self.ammo_rockets; - self.personal.ammo_nails = self.ammo_nails; - self.personal.ammo_cells = self.ammo_cells; - self.personal.ammo_plasma = self.ammo_plasma; - self.personal.ammo_shells = self.ammo_shells; - self.personal.ammo_fuel = self.ammo_fuel; - self.personal.health = self.health; - self.personal.armorvalue = self.armorvalue; - self.personal.weapons = self.weapons; - self.personal.items = self.items; - self.personal.pauserotarmor_finished = self.pauserotarmor_finished; - self.personal.pauserothealth_finished = self.pauserothealth_finished; - self.personal.pauserotfuel_finished = self.pauserotfuel_finished; - self.personal.pauseregen_finished = self.pauseregen_finished; - self.personal.strength_finished = self.strength_finished; - self.personal.invincible_finished = self.invincible_finished; - self.personal.teleport_time = time; + this.personal.origin = this.origin; + this.personal.v_angle = this.v_angle; + this.personal.velocity = this.velocity; + this.personal.ammo_rockets = this.ammo_rockets; + this.personal.ammo_nails = this.ammo_nails; + this.personal.ammo_cells = this.ammo_cells; + this.personal.ammo_plasma = this.ammo_plasma; + this.personal.ammo_shells = this.ammo_shells; + this.personal.ammo_fuel = this.ammo_fuel; + this.personal.health = this.health; + this.personal.armorvalue = this.armorvalue; + this.personal.weapons = this.weapons; + this.personal.items = this.items; + this.personal.pauserotarmor_finished = this.pauserotarmor_finished; + this.personal.pauserothealth_finished = this.pauserothealth_finished; + this.personal.pauserotfuel_finished = this.pauserotfuel_finished; + this.personal.pauseregen_finished = this.pauseregen_finished; + this.personal.strength_finished = this.strength_finished; + this.personal.invincible_finished = this.invincible_finished; + this.personal.teleport_time = time; break; // this part itself doesn't cheat, so let's not count this case CHIMPULSE_CLONE_MOVING.impulse: - IS_CHEAT(imp, 0, 0); - makevectors (self.v_angle); - self.velocity = self.velocity + v_forward * 300; - CopyBody(self, 1); - self.lip += 1; - self.velocity = self.velocity - v_forward * 300; + IS_CHEAT(this, imp, 0, 0); + makevectors (this.v_angle); + this.velocity = this.velocity + v_forward * 300; + CopyBody(this, 1); + this.lip += 1; + this.velocity = this.velocity - v_forward * 300; DID_CHEAT(); break; case CHIMPULSE_CLONE_STANDING.impulse: - IS_CHEAT(imp, 0, 0); - CopyBody(self, 0); - self.lip += 1; + IS_CHEAT(this, imp, 0, 0); + CopyBody(this, 0); + this.lip += 1; DID_CHEAT(); break; case CHIMPULSE_GIVE_ALL.impulse: - IS_CHEAT(imp, 0, 0); - CheatCommand(tokenize_console("give all")); + IS_CHEAT(this, imp, 0, 0); + CheatCommand(this, tokenize_console("give all")); break; // already counted as cheat case CHIMPULSE_SPEEDRUN.impulse: - IS_CHEAT(imp, 0, 0); - if(self.personal) + IS_CHEAT(this, imp, 0, 0); + if(this.personal) { - self.speedrunning = true; - tracebox(self.personal.origin, self.mins, self.maxs, self.personal.origin, MOVE_WORLDONLY, self); + this.speedrunning = true; + tracebox(this.personal.origin, this.mins, this.maxs, this.personal.origin, MOVE_WORLDONLY, this); if(trace_startsolid) { - sprint(self, "Cannot move there, cheater - only waypoints set using g_waypointsprite_personal work\n"); + sprint(this, "Cannot move there, cheater - only waypoints set using g_waypointsprite_personal work\n"); } else { // Abort speedrun, teleport back - setorigin(self, self.personal.origin); - self.oldvelocity = self.velocity = self.personal.velocity; - self.angles = self.personal.v_angle; - self.fixangle = true; + setorigin(this, this.personal.origin); + this.oldvelocity = this.velocity = this.personal.velocity; + this.angles = this.personal.v_angle; + this.fixangle = true; - MUTATOR_CALLHOOK(AbortSpeedrun, self); + MUTATOR_CALLHOOK(AbortSpeedrun, this); } - self.ammo_rockets = self.personal.ammo_rockets; - self.ammo_nails = self.personal.ammo_nails; - self.ammo_cells = self.personal.ammo_cells; - self.ammo_plasma = self.personal.ammo_plasma; - self.ammo_shells = self.personal.ammo_shells; - self.ammo_fuel = self.personal.ammo_fuel; - self.health = self.personal.health; - self.armorvalue = self.personal.armorvalue; - self.weapons = self.personal.weapons; - self.items = self.personal.items; - self.pauserotarmor_finished = time + self.personal.pauserotarmor_finished - self.personal.teleport_time; - self.pauserothealth_finished = time + self.personal.pauserothealth_finished - self.personal.teleport_time; - self.pauserotfuel_finished = time + self.personal.pauserotfuel_finished - self.personal.teleport_time; - self.pauseregen_finished = time + self.personal.pauseregen_finished - self.personal.teleport_time; - self.strength_finished = time + self.personal.strength_finished - self.personal.teleport_time; - self.invincible_finished = time + self.personal.invincible_finished - self.personal.teleport_time; + this.ammo_rockets = this.personal.ammo_rockets; + this.ammo_nails = this.personal.ammo_nails; + this.ammo_cells = this.personal.ammo_cells; + this.ammo_plasma = this.personal.ammo_plasma; + this.ammo_shells = this.personal.ammo_shells; + this.ammo_fuel = this.personal.ammo_fuel; + this.health = this.personal.health; + this.armorvalue = this.personal.armorvalue; + this.weapons = this.personal.weapons; + this.items = this.personal.items; + this.pauserotarmor_finished = time + this.personal.pauserotarmor_finished - this.personal.teleport_time; + this.pauserothealth_finished = time + this.personal.pauserothealth_finished - this.personal.teleport_time; + this.pauserotfuel_finished = time + this.personal.pauserotfuel_finished - this.personal.teleport_time; + this.pauseregen_finished = time + this.personal.pauseregen_finished - this.personal.teleport_time; + this.strength_finished = time + this.personal.strength_finished - this.personal.teleport_time; + this.invincible_finished = time + this.personal.invincible_finished - this.personal.teleport_time; DID_CHEAT(); break; } - if(IS_DEAD(self)) - sprint(self, "UR DEAD AHAHAH))\n"); + if(IS_DEAD(this)) + sprint(this, "UR DEAD AHAHAH))\n"); else - sprint(self, "No waypoint set, cheater (use g_waypointsprite_personal to set one)\n"); + sprint(this, "No waypoint set, cheater (use g_waypointsprite_personal to set one)\n"); break; case CHIMPULSE_TELEPORT.impulse: - IS_CHEAT(imp, 0, 0); - if(self.movetype == MOVETYPE_NOCLIP) + IS_CHEAT(this, imp, 0, 0); + if(this.move_movetype == MOVETYPE_NOCLIP) { - e = find(world, classname, "info_autoscreenshot"); + e = find(NULL, classname, "info_autoscreenshot"); if(e) { - sprint(self, "Emergency teleport used info_autoscreenshot location\n"); - setorigin(self, e.origin); - self.angles = e.angles; - remove(e); - // should we? self.angles_x = -self.angles_x; - self.fixangle = true; - self.velocity = '0 0 0'; + sprint(this, "Emergency teleport used info_autoscreenshot location\n"); + setorigin(this, e.origin); + this.angles = e.angles; + delete(e); + // should we? this.angles_x = -this.angles_x; + this.fixangle = true; + this.velocity = '0 0 0'; DID_CHEAT(); break; } } - if(MoveToRandomMapLocation(self, DPCONTENTS_SOLID | DPCONTENTS_CORPSE | DPCONTENTS_PLAYERCLIP, DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_BODY | DPCONTENTS_DONOTENTER, Q3SURFACEFLAG_SKY, ((gamestart_sv_cheats < 2) ? 100 : 100000), 384, 384)) + if(MoveToRandomMapLocation(this, DPCONTENTS_SOLID | DPCONTENTS_CORPSE | DPCONTENTS_PLAYERCLIP, DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_BODY | DPCONTENTS_DONOTENTER, Q3SURFACEFLAG_SKY, ((gamestart_sv_cheats < 2) ? 100 : 100000), 384, 384)) { - sprint(self, "Emergency teleport used random location\n"); - self.angles_x = -self.angles.x; - self.fixangle = true; - self.velocity = '0 0 0'; + sprint(this, "Emergency teleport used random location\n"); + this.angles_x = -this.angles.x; + this.fixangle = true; + this.velocity = '0 0 0'; DID_CHEAT(); break; } - sprint(self, "Emergency teleport could not find a good location, forget it!\n"); + sprint(this, "Emergency teleport could not find a good location, forget it!\n"); break; case CHIMPULSE_R00T.impulse: - IS_CHEAT(imp, 0, 0); + IS_CHEAT(this, imp, 0, 0); RandomSelection_Init(); - FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it) && DIFF_TEAM(it, self), LAMBDA(RandomSelection_Add(it, 0, string_null, 1, 1))); + FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it) && DIFF_TEAM(it, this), LAMBDA(RandomSelection_AddEnt(it, 1, 1))); if(RandomSelection_chosen_ent) e = RandomSelection_chosen_ent; else - e = self; + e = this; Send_Effect(EFFECT_ROCKET_EXPLODE, e.origin, '0 0 0', 1); sound(e, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); e2 = spawn(); setorigin(e2, e.origin); - RadiusDamage(e2, self, 1000, 0, 128, world, world, 500, DEATH_CHEAT.m_id, e); - remove(e2); + RadiusDamage(e2, this, 1000, 0, 128, NULL, NULL, 500, DEATH_CHEAT.m_id, e); + delete(e2); LOG_INFO("404 Sportsmanship not found.\n"); DID_CHEAT(); @@ -284,10 +284,10 @@ float CheatImpulse(int imp) END_CHEAT_FUNCTION(); } -void DragBox_Think(); +void DragBox_Think(entity this); float drag_lastcnt; -float CheatCommand(float argc) -{SELFPARAM(); +float CheatCommand(entity this, int argc) +{ BEGIN_CHEAT_FUNCTION(); string cmd; cmd = argv(0); @@ -295,10 +295,9 @@ float CheatCommand(float argc) { float effectnum, f; vector start, end; - entity oldself; case "pointparticles": - IS_CHEAT(0, argc, 0); + IS_CHEAT(this, 0, argc, 0); if(argc == 5) { // arguments: @@ -307,43 +306,43 @@ float CheatCommand(float argc) // velocity // howmany f = stof(argv(2)); - crosshair_trace(self); - start = (1-f) * self.origin + f * trace_endpos; + crosshair_trace(this); + start = (1-f) * this.origin + f * trace_endpos; end = stov(argv(3)); f = stof(argv(4)); Send_Effect_(argv(1), start, end, f); DID_CHEAT(); break; } - sprint(self, "Usage: sv_cheats 1; restart; cmd pointparticles effectname position(0..1) velocityvector multiplier\n"); + sprint(this, "Usage: sv_cheats 1; restart; cmd pointparticles effectname position(0..1) velocityvector multiplier\n"); break; case "trailparticles": - IS_CHEAT(0, argc, 0); + IS_CHEAT(this, 0, argc, 0); if(argc == 2) { // arguments: // effectname effectnum = _particleeffectnum(argv(1)); - W_SetupShot(self, false, false, SND_Null, CH_WEAPON_A, 0); - traceline(w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, MOVE_NORMAL, self); - __trailparticles(self, effectnum, w_shotorg, trace_endpos); + W_SetupShot(this, weaponentities[0], false, false, SND_Null, CH_WEAPON_A, 0); + traceline(w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, MOVE_NORMAL, this); + __trailparticles(this, effectnum, w_shotorg, trace_endpos); DID_CHEAT(); break; } - sprint(self, "Usage: sv_cheats 1; restart; cmd trailparticles effectname\n"); + sprint(this, "Usage: sv_cheats 1; restart; cmd trailparticles effectname\n"); break; case "make": - IS_CHEAT(0, argc, 0); + IS_CHEAT(this, 0, argc, 0); if(argc == 3) { // arguments: // modelname mode f = stof(argv(2)); - W_SetupShot(self, false, false, SND_Null, CH_WEAPON_A, 0); - traceline(w_shotorg, w_shotorg + w_shotdir * 2048, MOVE_NORMAL, self); + W_SetupShot(this, weaponentities[0], false, false, SND_Null, CH_WEAPON_A, 0); + traceline(w_shotorg, w_shotorg + w_shotdir * 2048, MOVE_NORMAL, this); if((trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT) || trace_fraction == 1) { - sprint(self, "cannot make stuff there (bad surface)\n"); + sprint(this, "cannot make stuff there (bad surface)\n"); } else { @@ -358,15 +357,15 @@ float CheatCommand(float argc) e.angles = fixedvectoangles2(trace_plane_normal, v_forward); e.angles = AnglesTransform_ApplyToAngles(e.angles, '-90 0 0'); // so unrotated models work } - WITHSELF(e, spawnfunc_func_breakable(e)); + spawnfunc_func_breakable(e); // now, is it valid? if(f == 0) { tracebox(e.origin, e.mins, e.maxs, e.origin, MOVE_NORMAL, e); if(trace_startsolid) { - remove(e); - sprint(self, "cannot make stuff there (no space)\n"); + delete(e); + sprint(this, "cannot make stuff there (no space)\n"); } else DID_CHEAT(); @@ -376,22 +375,22 @@ float CheatCommand(float argc) } } else - sprint(self, "Usage: sv_cheats 1; restart; cmd make models/... 0/1/2\n"); + sprint(this, "Usage: sv_cheats 1; restart; cmd make models/... 0/1/2\n"); break; case "penalty": - IS_CHEAT(0, argc, 0); + IS_CHEAT(this, 0, argc, 0); if(argc == 3) { - race_ImposePenaltyTime(self, stof(argv(1)), argv(2)); + race_ImposePenaltyTime(this, stof(argv(1)), argv(2)); DID_CHEAT(); break; } - sprint(self, "Usage: sv_cheats 1; restart; cmd penalty 5.0 AHAHAHAHAHAHAH))\n"); + sprint(this, "Usage: sv_cheats 1; restart; cmd penalty 5.0 AHAHAHAHAHAHAH))\n"); break; case "dragbox_spawn": { - IS_CHEAT(0, argc, 0); + IS_CHEAT(this, 0, argc, 0); entity e = new(dragbox_box); - e.think = DragBox_Think; + setthink(e, DragBox_Think); e.nextthink = time; e.solid = -1; // black setmodel(e, MDL_Null); // network it @@ -409,7 +408,7 @@ float CheatCommand(float argc) setorigin(e.aiment, stov(argv(2))); else { - crosshair_trace(self); + crosshair_trace(this); setorigin(e.aiment, trace_endpos); } @@ -418,7 +417,7 @@ float CheatCommand(float argc) setmodel(e.enemy, MDL_MARKER); e.enemy.skin = 1; setsize(e.enemy, '0 0 0', '0 0 0'); - end = normalize(self.origin + self.view_ofs - e.aiment.origin); + end = normalize(this.origin + this.view_ofs - e.aiment.origin); end.x = (end.x > 0) * 2 - 1; end.y = (end.y > 0) * 2 - 1; end.z = (end.z > 0) * 2 - 1; @@ -439,13 +438,13 @@ float CheatCommand(float argc) break; } case "dragpoint_spawn": { - IS_CHEAT(0, argc, 0); + IS_CHEAT(this, 0, argc, 0); entity e = new(dragpoint); - e.think = DragBox_Think; + setthink(e, DragBox_Think); e.nextthink = time; e.solid = 0; // nothing special setmodel(e, MDL_MARKER); - setsize(e, STAT(PL_MIN, NULL), STAT(PL_MAX, NULL)); + setsize(e, STAT(PL_MIN, this), STAT(PL_MAX, this)); e.skin = 2; if(argc == 3) e.cnt = stof(argv(1)); @@ -455,8 +454,8 @@ float CheatCommand(float argc) setorigin(e, stov(argv(2))); else { - crosshair_trace(self); - setorigin(e, trace_endpos + normalize(self.origin + self.view_ofs - trace_endpos)); + crosshair_trace(this); + setorigin(e, trace_endpos + normalize(this.origin + this.view_ofs - trace_endpos)); move_out_of_solid(e); } @@ -472,35 +471,35 @@ float CheatCommand(float argc) break; } case "drag_remove": - IS_CHEAT(0, argc, 0); + IS_CHEAT(this, 0, argc, 0); RandomSelection_Init(); - crosshair_trace(self); - for(entity e = world; (e = find(e, classname, "dragbox_box")); ) - RandomSelection_Add(e, 0, string_null, 1, 1 / vlen(e.origin + (e.mins + e.maxs) * 0.5 - trace_endpos)); - for(entity e = world; (e = find(e, classname, "dragpoint")); ) - RandomSelection_Add(e, 0, string_null, 1, 1 / vlen(e.origin + (e.mins + e.maxs) * 0.5 - trace_endpos)); + crosshair_trace(this); + for(entity e = NULL; (e = find(e, classname, "dragbox_box")); ) + RandomSelection_AddEnt(e, 1, 1 / vlen(e.origin + (e.mins + e.maxs) * 0.5 - trace_endpos)); + for(entity e = NULL; (e = find(e, classname, "dragpoint")); ) + RandomSelection_AddEnt(e, 1, 1 / vlen(e.origin + (e.mins + e.maxs) * 0.5 - trace_endpos)); if(RandomSelection_chosen_ent) { - remove(RandomSelection_chosen_ent.killindicator.killindicator); - remove(RandomSelection_chosen_ent.killindicator); + delete(RandomSelection_chosen_ent.killindicator.killindicator); + delete(RandomSelection_chosen_ent.killindicator); if(RandomSelection_chosen_ent.aiment) - remove(RandomSelection_chosen_ent.aiment); + delete(RandomSelection_chosen_ent.aiment); if(RandomSelection_chosen_ent.enemy) - remove(RandomSelection_chosen_ent.enemy); - remove(RandomSelection_chosen_ent); + delete(RandomSelection_chosen_ent.enemy); + delete(RandomSelection_chosen_ent); } DID_CHEAT(); break; case "drag_setcnt": - IS_CHEAT(0, argc, 0); + IS_CHEAT(this, 0, argc, 0); if(argc == 2) { RandomSelection_Init(); - crosshair_trace(self); - for(entity e = world; (e = find(e, classname, "dragbox_box")); ) - RandomSelection_Add(e, 0, string_null, 1, 1 / vlen(e.origin + (e.mins + e.maxs) * 0.5 - trace_endpos)); - for(entity e = world; (e = find(e, classname, "dragpoint")); ) - RandomSelection_Add(e, 0, string_null, 1, 1 / vlen(e.origin + (e.mins + e.maxs) * 0.5 - trace_endpos)); + crosshair_trace(this); + for(entity e = NULL; (e = find(e, classname, "dragbox_box")); ) + RandomSelection_AddEnt(e, 1, 1 / vlen(e.origin + (e.mins + e.maxs) * 0.5 - trace_endpos)); + for(entity e = NULL; (e = find(e, classname, "dragpoint")); ) + RandomSelection_AddEnt(e, 1, 1 / vlen(e.origin + (e.mins + e.maxs) * 0.5 - trace_endpos)); if(RandomSelection_chosen_ent) { if(substring(argv(1), 0, 1) == "*") @@ -511,19 +510,19 @@ float CheatCommand(float argc) DID_CHEAT(); break; } - sprint(self, "Usage: sv_cheats 1; restart; cmd dragbox_setcnt cnt\n"); + sprint(this, "Usage: sv_cheats 1; restart; cmd dragbox_setcnt cnt\n"); break; case "drag_save": - IS_CHEAT(0, argc, 0); + IS_CHEAT(this, 0, argc, 0); if(argc == 2) { f = fopen(argv(1), FILE_WRITE); fputs(f, "cmd drag_clear\n"); - for(entity e = world; (e = find(e, classname, "dragbox_box")); ) + for(entity e = NULL; (e = find(e, classname, "dragbox_box")); ) { fputs(f, strcat("cmd dragbox_spawn ", ftos(e.cnt), " \"", vtos(e.aiment.origin), "\" \"", vtos(e.enemy.origin), "\"\n")); } - for(entity e = world; (e = find(e, classname, "dragpoint")); ) + for(entity e = NULL; (e = find(e, classname, "dragpoint")); ) { fputs(f, strcat("cmd dragpoint_spawn ", ftos(e.cnt), " \"", vtos(e.origin), "\"\n")); } @@ -531,14 +530,14 @@ float CheatCommand(float argc) DID_CHEAT(); break; } - sprint(self, "Usage: sv_cheats 1; restart; cmd dragbox_save filename\n"); + sprint(this, "Usage: sv_cheats 1; restart; cmd dragbox_save filename\n"); break; case "drag_saveraceent": - IS_CHEAT(0, argc, 0); + IS_CHEAT(this, 0, argc, 0); if(argc == 2) { f = fopen(argv(1), FILE_WRITE); - for(entity e = world; (e = find(e, classname, "dragbox_box")); ) + for(entity e = NULL; (e = find(e, classname, "dragbox_box")); ) { fputs(f, "{\n"); fputs(f, "\"classname\" \"trigger_race_checkpoint\"\n"); @@ -548,15 +547,15 @@ float CheatCommand(float argc) fputs(f, strcat("\"targetname\" \"checkpoint", ftos(e.cnt), "\"\n")); fputs(f, "}\n"); } - for(entity e = world; (e = find(e, classname, "dragpoint")); ) + for(entity e = NULL; (e = find(e, classname, "dragpoint")); ) { start = '0 0 0'; effectnum = 0; - for(oldself = world; (oldself = find(oldself, classname, "dragbox_box")); ) + for(entity ent = NULL; (ent = find(ent, classname, "dragbox_box")); ) { - if(e.cnt <= 0 && oldself.cnt == 0 || e.cnt == oldself.cnt) + if(e.cnt <= 0 && ent.cnt == 0 || e.cnt == ent.cnt) { - start = start + oldself.origin; + start = start + ent.origin; ++effectnum; } } @@ -583,12 +582,12 @@ float CheatCommand(float argc) // these need race_place // counting... effectnum = 1; - for(oldself = world; (oldself = find(oldself, classname, "dragpoint")); ) - if(oldself.cnt == 0) + for(entity ent = NULL; (ent = find(ent, classname, "dragpoint")); ) + if(ent.cnt == 0) { - if(vlen(oldself.origin - start) < vlen(e.origin - start)) + if(vlen2(ent.origin - start) < vlen2(e.origin - start)) ++effectnum; - else if(vlen(oldself.origin - start) == vlen(e.origin - start) && etof(oldself) < etof(e)) + else if(vlen2(ent.origin - start) == vlen2(e.origin - start) && etof(ent) < etof(e)) ++effectnum; } fputs(f, strcat("\"race_place\" \"", ftos(effectnum), "\"\n")); @@ -600,115 +599,112 @@ float CheatCommand(float argc) DID_CHEAT(); break; } - sprint(self, "Usage: sv_cheats 1; restart; cmd dragbox_save filename\n"); + sprint(this, "Usage: sv_cheats 1; restart; cmd dragbox_save filename\n"); break; case "drag_clear": - IS_CHEAT(0, argc, 0); - for(entity e = world; (e = find(e, classname, "dragbox_box")); ) - remove(e); - for(entity e = world; (e = find(e, classname, "dragbox_corner_1")); ) - remove(e); - for(entity e = world; (e = find(e, classname, "dragbox_corner_2")); ) - remove(e); - for(entity e = world; (e = find(e, classname, "dragpoint")); ) - remove(e); - for(entity e = world; (e = find(e, classname, "drag_digit")); ) - remove(e); + IS_CHEAT(this, 0, argc, 0); + for(entity e = NULL; (e = find(e, classname, "dragbox_box")); ) + delete(e); + for(entity e = NULL; (e = find(e, classname, "dragbox_corner_1")); ) + delete(e); + for(entity e = NULL; (e = find(e, classname, "dragbox_corner_2")); ) + delete(e); + for(entity e = NULL; (e = find(e, classname, "dragpoint")); ) + delete(e); + for(entity e = NULL; (e = find(e, classname, "drag_digit")); ) + delete(e); DID_CHEAT(); break; case "god": - IS_CHEAT(0, argc, 0); - BITXOR_ASSIGN(self.flags, FL_GODMODE); - if(self.flags & FL_GODMODE) + IS_CHEAT(this, 0, argc, 0); + BITXOR_ASSIGN(this.flags, FL_GODMODE); + if(this.flags & FL_GODMODE) { - sprint(self, "godmode ON\n"); + sprint(this, "godmode ON\n"); DID_CHEAT(); } else - sprint(self, "godmode OFF\n"); + sprint(this, "godmode OFF\n"); break; case "notarget": - IS_CHEAT(0, argc, 0); - BITXOR_ASSIGN(self.flags, FL_NOTARGET); - if(self.flags & FL_NOTARGET) + IS_CHEAT(this, 0, argc, 0); + BITXOR_ASSIGN(this.flags, FL_NOTARGET); + if(this.flags & FL_NOTARGET) { - sprint(self, "notarget ON\n"); + sprint(this, "notarget ON\n"); DID_CHEAT(); } else - sprint(self, "notarget OFF\n"); + sprint(this, "notarget OFF\n"); break; case "noclip": - IS_CHEAT(0, argc, 0); - if(self.movetype != MOVETYPE_NOCLIP) + IS_CHEAT(this, 0, argc, 0); + if(this.move_movetype != MOVETYPE_NOCLIP) { - self.movetype = MOVETYPE_NOCLIP; - sprint(self, "noclip ON\n"); + set_movetype(this, MOVETYPE_NOCLIP); + sprint(this, "noclip ON\n"); DID_CHEAT(); } else { - self.movetype = MOVETYPE_WALK; - sprint(self, "noclip OFF\n"); + set_movetype(this, MOVETYPE_WALK); + sprint(this, "noclip OFF\n"); } break; case "fly": - IS_CHEAT(0, argc, 0); - if(self.movetype != MOVETYPE_FLY) + IS_CHEAT(this, 0, argc, 0); + if(this.move_movetype != MOVETYPE_FLY) { - self.movetype = MOVETYPE_FLY; - sprint(self, "flymode ON\n"); + set_movetype(this, MOVETYPE_FLY); + sprint(this, "flymode ON\n"); DID_CHEAT(); } else { - self.movetype = MOVETYPE_WALK; - sprint(self, "flymode OFF\n"); + set_movetype(this, MOVETYPE_WALK); + sprint(this, "flymode OFF\n"); } break; case "give": - IS_CHEAT(0, argc, 0); - if(GiveItems(self, 1, argc)) + IS_CHEAT(this, 0, argc, 0); + if(GiveItems(this, 1, argc)) DID_CHEAT(); break; case "usetarget": - IS_CHEAT(0, argc, 0); - setself(spawn()); - self.target = argv(1); - SUB_UseTargets(self, this, NULL); - remove(self); - setself(this); + IS_CHEAT(this, 0, argc, 0); + entity e = spawn(); + e.target = argv(1); + SUB_UseTargets(e, this, NULL); + delete(e); DID_CHEAT(); break; case "killtarget": - IS_CHEAT(0, argc, 0); - setself(spawn()); - self.killtarget = argv(1); - SUB_UseTargets(self, this, NULL); - remove(self); - setself(this); + IS_CHEAT(this, 0, argc, 0); + entity e2 = spawn(); + e2.killtarget = argv(1); + SUB_UseTargets(e2, this, NULL); + delete(e2); DID_CHEAT(); break; case "teleporttotarget": - IS_CHEAT(0, argc, 0); - setself(new(cheattriggerteleport)); - setorigin(self, self.origin); - self.target = argv(1); - teleport_findtarget(self); - if(!wasfreed(self)) + IS_CHEAT(this, 0, argc, 0); + entity ent = new(cheattriggerteleport); + setorigin(ent, ent.origin); + ent.target = argv(1); + teleport_findtarget(ent); + if(!wasfreed(ent)) { - Simple_TeleportPlayer(self, this); - remove(self); + Simple_TeleportPlayer(ent, this); + delete(ent); DID_CHEAT(); } - setself(this); break; } END_CHEAT_FUNCTION(); } -float Drag(float force_allow_pick, float ischeat); +float Drag(entity this, float force_allow_pick, float ischeat); void Drag_Begin(entity dragger, entity draggee, vector touchpoint); void Drag_Finish(entity dragger); float Drag_IsDraggable(entity draggee); @@ -722,8 +718,8 @@ float Drag_IsDragging(entity dragger); void Drag_MoveDrag(entity from, entity to); .entity dragentity; -float CheatFrame() -{SELFPARAM(); +float CheatFrame(entity this) +{ BEGIN_CHEAT_FUNCTION(); // Dragging can be used as either a cheat, or a function for some objects. If sv_cheats is active, @@ -737,12 +733,13 @@ float CheatFrame() if(this.maycheat || (gamestart_sv_cheats && autocvar_sv_cheats)) { // use cheat dragging if cheats are enabled - crosshair_trace_plusvisibletriggers(this); - Drag(true, true); + //if(Drag_IsDragging(this)) + //crosshair_trace_plusvisibletriggers(this); + Drag(this, true, true); } else { - Drag(false, false); // execute dragging + Drag(this, false, false); // execute dragging } break; } @@ -766,8 +763,8 @@ float CheatFrame() .entity draggedby; .float dragmovetype; -float Drag(float force_allow_pick, float ischeat) -{SELFPARAM(); +float Drag(entity this, float force_allow_pick, float ischeat) +{ BEGIN_CHEAT_FUNCTION(); // returns true when an entity has been picked up @@ -823,7 +820,7 @@ float Drag(float force_allow_pick, float ischeat) // This also makes sure that an object can only pe picked up if in range, but does not get dropped if // it goes out of range while slinging it around. - if(vlen(this.origin - e.origin) <= autocvar_g_grab_range) + if(vdist(this.origin - e.origin, <=, autocvar_g_grab_range)) { switch(e.grab) { @@ -850,7 +847,7 @@ float Drag(float force_allow_pick, float ischeat) if(Drag_IsDraggable(e)) { if(ischeat) - IS_CHEAT(0, 0, CHRAME_DRAG); + IS_CHEAT(this, 0, 0, CHRAME_DRAG); if(e.draggedby) Drag_Finish(e.draggedby); if(e.tag_entity) @@ -871,9 +868,9 @@ void Drag_Begin(entity dragger, entity draggee, vector touchpoint) { float tagscale; - draggee.dragmovetype = draggee.movetype; + draggee.dragmovetype = draggee.move_movetype; draggee.draggravity = draggee.gravity; - draggee.movetype = MOVETYPE_WALK; + set_movetype(draggee, MOVETYPE_WALK); draggee.gravity = 0.00001; UNSET_ONGROUND(draggee); draggee.draggedby = dragger; @@ -896,12 +893,12 @@ void Drag_Finish(entity dragger) entity draggee; draggee = dragger.dragentity; if(dragger) - dragger.dragentity = world; - draggee.draggedby = world; - draggee.movetype = draggee.dragmovetype; + dragger.dragentity = NULL; + draggee.draggedby = NULL; + set_movetype(draggee, draggee.dragmovetype); draggee.gravity = draggee.draggravity; - switch(draggee.movetype) + switch(draggee.move_movetype) { case MOVETYPE_TOSS: case MOVETYPE_WALK: @@ -916,7 +913,7 @@ void Drag_Finish(entity dragger) break; } - if((draggee.flags & FL_ITEM) && (vlen(draggee.velocity) < 32)) + if((draggee.flags & FL_ITEM) && (vdist(draggee.velocity, <, 32))) { draggee.velocity = '0 0 0'; SET_ONGROUND(draggee); // floating items are FUN @@ -926,7 +923,7 @@ void Drag_Finish(entity dragger) float Drag_IsDraggable(entity draggee) { // TODO add more checks for bad stuff here - if(draggee == world) + if(draggee == NULL) return false; if(draggee.classname == "func_bobbing") return false; @@ -1022,7 +1019,7 @@ float Drag_IsDragging(entity dragger) return false; if(wasfreed(dragger.dragentity) || dragger.dragentity.draggedby != dragger) { - dragger.dragentity = world; + dragger.dragentity = NULL; return false; } if(!Drag_CanDrag(dragger) || !Drag_IsDraggable(dragger.dragentity)) @@ -1039,12 +1036,12 @@ void Drag_MoveDrag(entity from, entity to) { to.draggedby = from.draggedby; to.draggedby.dragentity = to; - from.draggedby = world; + from.draggedby = NULL; } } -void DragBox_Think() -{SELFPARAM(); +void DragBox_Think(entity this) +{ if(this.aiment && this.enemy) { this.origin_x = (this.aiment.origin.x + this.enemy.origin.x) * 0.5;