X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcheats.qc;h=aa87763ca360441eb5268efca18ed2eb922c3818;hb=f40d50ebdbbfc5c65f0e75cdfa3bd176501e8d4a;hp=0c6fc7f39d483e7b0b931e18f25360fbc4730392;hpb=1e85850478a0174700ab365d6a642a2a420d78f8;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/cheats.qc b/qcsrc/server/cheats.qc index 0c6fc7f39..aa87763ca 100644 --- a/qcsrc/server/cheats.qc +++ b/qcsrc/server/cheats.qc @@ -64,7 +64,7 @@ void CheatShutdownClient() } float CheatsAllowed(float i, float argc, float fr) // the cheat gets passed as argument for possible future ACL checking -{ +{SELFPARAM(); // dead people cannot cheat if(self.deadflag != DEAD_NO) return 0; @@ -114,7 +114,7 @@ float CheatsAllowed(float i, float argc, float fr) // the cheat gets passed as a float num_autoscreenshot; void info_autoscreenshot_findtarget() -{ +{SELFPARAM(); entity e; e = find(world, targetname, self.target); if(!e) @@ -128,7 +128,7 @@ void info_autoscreenshot_findtarget() self.angles_y = a.y; // we leave Rick Roll alone } -void spawnfunc_info_autoscreenshot() +spawnfunc(info_autoscreenshot) { if(++num_autoscreenshot > autocvar_g_max_info_autoscreenshot) { @@ -141,7 +141,7 @@ void spawnfunc_info_autoscreenshot() } float CheatImpulse(float i) -{ +{SELFPARAM(); BEGIN_CHEAT_FUNCTION(); switch(i) { @@ -212,7 +212,7 @@ float CheatImpulse(float i) self.angles = self.personal.v_angle; self.fixangle = true; - MUTATOR_CALLHOOK(AbortSpeedrun); + MUTATOR_CALLHOOK(AbortSpeedrun, self); } self.ammo_rockets = self.personal.ammo_rockets; @@ -281,15 +281,15 @@ float CheatImpulse(float i) else e = self; - pointparticles(particleeffectnum("rocket_explode"), e.origin, '0 0 0', 1); - sound(e, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM); + 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, e); remove(e2); - print("404 Sportsmanship not found.\n"); + LOG_INFO("404 Sportsmanship not found.\n"); DID_CHEAT(); break; } @@ -300,13 +300,12 @@ float CheatImpulse(float i) void DragBox_Think(); float drag_lastcnt; float CheatCommand(float argc) -{ +{SELFPARAM(); BEGIN_CHEAT_FUNCTION(); string cmd; cmd = argv(0); switch(cmd) { - entity e; float effectnum, f; vector start, end; entity oldself; @@ -320,13 +319,12 @@ float CheatCommand(float argc) // origin (0..1, on crosshair line) // velocity // howmany - effectnum = particleeffectnum(argv(1)); f = stof(argv(2)); crosshair_trace(self); start = (1-f) * self.origin + f * trace_endpos; end = stov(argv(3)); f = stof(argv(4)); - pointparticles(effectnum, start, end, f); + Send_Effect_(argv(1), start, end, f); DID_CHEAT(); break; } @@ -338,7 +336,7 @@ float CheatCommand(float argc) { // arguments: // effectname - effectnum = particleeffectnum(argv(1)); + effectnum = _particleeffectnum(argv(1)); W_SetupShot(self, false, false, "", CH_WEAPON_A, 0); traceline(w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, MOVE_NORMAL, self); trailparticles(self, effectnum, w_shotorg, trace_endpos); @@ -362,7 +360,7 @@ float CheatCommand(float argc) } else { - e = spawn(); + entity e = spawn(); e.model = strzone(argv(1)); e.mdl = "rocket_explode"; e.health = 1000; @@ -373,10 +371,7 @@ 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 } - oldself = self; - self = e; - spawnfunc_func_breakable(); - self = oldself; + WITH(entity, self, e, spawnfunc_func_breakable(e)); // now, is it valid? if(f == 0) { @@ -406,14 +401,14 @@ float CheatCommand(float argc) } sprint(self, "Usage: sv_cheats 1; restart; cmd penalty 5.0 AHAHAHAHAHAHAH))\n"); break; - case "dragbox_spawn": + case "dragbox_spawn": { IS_CHEAT(0, argc, 0); - e = spawn(); + entity e = spawn(); e.classname = "dragbox_box"; e.think = DragBox_Think; e.nextthink = time; e.solid = -1; // black - setmodel(e, "null"); // network it + setmodel(e, MDL_Null); // network it if(argc == 4) e.cnt = stof(argv(1)); else @@ -422,7 +417,7 @@ float CheatCommand(float argc) e.aiment = spawn(); e.aiment.classname = "dragbox_corner_1"; e.aiment.owner = e; - setmodel(e.aiment, "models/marker.md3"); + setmodel(e.aiment, MDL_MARKER); e.aiment.skin = 0; setsize(e.aiment, '0 0 0', '0 0 0'); if(argc == 4) @@ -436,7 +431,7 @@ float CheatCommand(float argc) e.enemy = spawn(); e.enemy.classname = "dragbox_corner_2"; e.enemy.owner = e; - setmodel(e.enemy, "models/marker.md3"); + 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); @@ -460,14 +455,15 @@ float CheatCommand(float argc) setorigin(e.killindicator.killindicator, '0 0 8'); DID_CHEAT(); break; - case "dragpoint_spawn": + } + case "dragpoint_spawn": { IS_CHEAT(0, argc, 0); - e = spawn(); + entity e = spawn(); e.classname = "dragpoint"; e.think = DragBox_Think; e.nextthink = time; e.solid = 0; // nothing special - setmodel(e, "models/marker.md3"); + setmodel(e, MDL_MARKER); setsize(e, PL_MIN, PL_MAX); e.skin = 2; if(argc == 3) @@ -495,13 +491,14 @@ float CheatCommand(float argc) setorigin(e.killindicator.killindicator, '0 0 56'); DID_CHEAT(); break; + } case "drag_remove": IS_CHEAT(0, argc, 0); RandomSelection_Init(); crosshair_trace(self); - for(e = world; (e = find(e, classname, "dragbox_box")); ) + 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(e = world; (e = find(e, classname, "dragpoint")); ) + 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)); if(RandomSelection_chosen_ent) { @@ -521,9 +518,9 @@ float CheatCommand(float argc) { RandomSelection_Init(); crosshair_trace(self); - for(e = world; (e = find(e, classname, "dragbox_box")); ) + 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(e = world; (e = find(e, classname, "dragpoint")); ) + 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)); if(RandomSelection_chosen_ent) { @@ -543,11 +540,11 @@ float CheatCommand(float argc) { f = fopen(argv(1), FILE_WRITE); fputs(f, "cmd drag_clear\n"); - for(e = world; (e = find(e, classname, "dragbox_box")); ) + for(entity e = world; (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(e = world; (e = find(e, classname, "dragpoint")); ) + for(entity e = world; (e = find(e, classname, "dragpoint")); ) { fputs(f, strcat("cmd dragpoint_spawn ", ftos(e.cnt), " \"", vtos(e.origin), "\"\n")); } @@ -562,7 +559,7 @@ float CheatCommand(float argc) if(argc == 2) { f = fopen(argv(1), FILE_WRITE); - for(e = world; (e = find(e, classname, "dragbox_box")); ) + for(entity e = world; (e = find(e, classname, "dragbox_box")); ) { fputs(f, "{\n"); fputs(f, "\"classname\" \"trigger_race_checkpoint\"\n"); @@ -572,7 +569,7 @@ float CheatCommand(float argc) fputs(f, strcat("\"targetname\" \"checkpoint", ftos(e.cnt), "\"\n")); fputs(f, "}\n"); } - for(e = world; (e = find(e, classname, "dragpoint")); ) + for(entity e = world; (e = find(e, classname, "dragpoint")); ) { start = '0 0 0'; effectnum = 0; @@ -628,15 +625,15 @@ float CheatCommand(float argc) break; case "drag_clear": IS_CHEAT(0, argc, 0); - for(e = world; (e = find(e, classname, "dragbox_box")); ) + for(entity e = world; (e = find(e, classname, "dragbox_box")); ) remove(e); - for(e = world; (e = find(e, classname, "dragbox_corner_1")); ) + for(entity e = world; (e = find(e, classname, "dragbox_corner_1")); ) remove(e); - for(e = world; (e = find(e, classname, "dragbox_corner_2")); ) + for(entity e = world; (e = find(e, classname, "dragbox_corner_2")); ) remove(e); - for(e = world; (e = find(e, classname, "dragpoint")); ) + for(entity e = world; (e = find(e, classname, "dragpoint")); ) remove(e); - for(e = world; (e = find(e, classname, "drag_digit")); ) + for(entity e = world; (e = find(e, classname, "drag_digit")); ) remove(e); DID_CHEAT(); break; @@ -697,43 +694,38 @@ float CheatCommand(float argc) break; case "usetarget": IS_CHEAT(0, argc, 0); - e = self; - self = spawn(); + setself(spawn()); self.target = argv(1); - activator = e; + activator = this; SUB_UseTargets(); remove(self); - self = e; + setself(this); DID_CHEAT(); break; case "killtarget": IS_CHEAT(0, argc, 0); - e = self; - self = spawn(); + setself(spawn()); self.killtarget = argv(1); - activator = e; + activator = this; SUB_UseTargets(); remove(self); - self = e; + setself(this); DID_CHEAT(); break; case "teleporttotarget": IS_CHEAT(0, argc, 0); - e = self; - self = spawn(); + setself(spawn()); setorigin(self, self.origin); self.classname = "cheattriggerteleport"; self.target = argv(1); teleport_findtarget(); if(!wasfreed(self)) { - Simple_TeleportPlayer(self, e); + Simple_TeleportPlayer(self, this); remove(self); - self = e; DID_CHEAT(); } - else - self = e; + setself(this); break; } @@ -755,7 +747,7 @@ void Drag_MoveDrag(entity from, entity to); .entity dragentity; float CheatFrame() -{ +{SELFPARAM(); BEGIN_CHEAT_FUNCTION(); // Dragging can be used as either a cheat, or a function for some objects. If sv_cheats is active, @@ -799,7 +791,7 @@ float CheatFrame() .float dragmovetype; float Drag(float force_allow_pick, float ischeat) -{ +{SELFPARAM(); BEGIN_CHEAT_FUNCTION(); // returns true when an entity has been picked up @@ -1033,7 +1025,13 @@ void Drag_Update(entity dragger) draggee.ltime = max(servertime + serverframetime, draggee.ltime); // fixes func_train breakage - te_lightning1(dragger, dragger.origin + dragger.view_ofs, curorigin); + vector vecs = '0 0 0'; + if(dragger.weaponentity.movedir_x > 0) + vecs = dragger.weaponentity.movedir; + + vector dv = v_right * -vecs_y + v_up * vecs_z; + + te_lightning1(draggee, dragger.origin + dragger.view_ofs + dv, curorigin); } float Drag_CanDrag(entity dragger) @@ -1069,7 +1067,7 @@ void Drag_MoveDrag(entity from, entity to) } void DragBox_Think() -{ +{SELFPARAM(); if(self.aiment && self.enemy) { self.origin_x = (self.aiment.origin.x + self.enemy.origin.x) * 0.5; @@ -1085,19 +1083,19 @@ void DragBox_Think() if(self.cnt == -1) // actually race_place -1 { // show "10 10" for qualifying spawns - setmodel(self.killindicator, "models/sprites/10.spr32"); - setmodel(self.killindicator.killindicator, "models/sprites/10.spr32"); + setmodel(self.killindicator, MDL_NUM(10)); + setmodel(self.killindicator.killindicator, MDL_NUM(10)); } else if(self.cnt == -2) // actually race_place 0 { // show "10 0" for loser spawns - setmodel(self.killindicator, "models/sprites/10.spr32"); - setmodel(self.killindicator.killindicator, "models/sprites/0.spr32"); + setmodel(self.killindicator, MDL_NUM(10)); + setmodel(self.killindicator.killindicator, MDL_NUM(0)); } else { - setmodel(self.killindicator, strcat("models/sprites/", ftos(self.cnt % 10), ".spr32")); - setmodel(self.killindicator.killindicator, strcat("models/sprites/", ftos(floor(self.cnt / 10)), ".spr32")); + setmodel(self.killindicator, MDL_NUM(self.cnt % 10)); + setmodel(self.killindicator.killindicator, MDL_NUM(floor(self.cnt / 10))); } self.nextthink = time;