X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fctf.qc;h=6f7198c2a9f225e803fe7f63d5faa557063262a6;hb=8e028a69736a7cf6b72da7810d2a6b974f554144;hp=a54ee6a8ac68ced40bc09fa337f0a80cf1dddcf0;hpb=8b3142364603ea77d9514d20be020370102da9fc;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/ctf.qc b/qcsrc/server/ctf.qc index a54ee6a8a..6f7198c2a 100644 --- a/qcsrc/server/ctf.qc +++ b/qcsrc/server/ctf.qc @@ -66,12 +66,12 @@ void ctf_captureshield_update(entity p, float dir) { if(should) { - centerprint_atprio(p, CENTERPRIO_SHIELDING, "^3You are now ^4shielded^3 from the flag\n^3for ^1too many unsuccessful attempts^3 to capture.\n\n^3Make some defensive scores before trying again."); + Send_CSQC_Centerprint_Generic(other, CPID_CTF_CAPTURESHIELD, "^3You are ^4shielded^3 from the flag\n^3for ^1too many unsuccessful attempts^3 to capture.\n\n^3Get some defensive scores before trying again.", 5, 0); // TODO csqc notifier for this } else { - centerprint_atprio(p, CENTERPRIO_SHIELDING, "^3You are now free.\n\n^3Feel free to ^1try to capture^3 the flag again\n^3if you think you will succeed."); + Send_CSQC_Centerprint_Generic(p, CPID_CTF_CAPTURESHIELD, "^3You are now free.\n\n^3Feel free to ^1try to capture^3 the flag again\n^3if you think you will succeed.", 5, 0); // TODO csqc notifier for this } p.ctf_captureshielded = should; @@ -88,6 +88,7 @@ float ctf_captureshield_customize() return TRUE; } +.float ctf_captureshield_touch_msgtime; void ctf_captureshield_touch() { if not(other.ctf_captureshielded) @@ -99,7 +100,9 @@ void ctf_captureshield_touch() mymid = (self.absmin + self.absmax) * 0.5; othermid = (other.absmin + other.absmax) * 0.5; Damage(other, self, self, 0, DEATH_HURTTRIGGER, mymid, normalize(othermid - mymid) * captureshield_force); - centerprint_atprio(other, CENTERPRIO_SHIELDING, "^3You are ^4shielded^3 from the flag\n^3for ^1too many unsuccessful attempts^3 to capture.\n\n^3Get some defensive scores before trying again."); + if (time - other.ctf_captureshield_touch_msgtime > 2) + Send_CSQC_Centerprint_Generic(other, CPID_CTF_CAPTURESHIELD, "^3You are ^4shielded^3 from the flag\n^3for ^1too many unsuccessful attempts^3 to capture.\n\n^3Get some defensive scores before trying again.", 5, 0); + other.ctf_captureshield_touch_msgtime = time; } void ctf_flag_spawnstuff() @@ -190,7 +193,7 @@ void place_flag() } InitializeEntity(self, ctf_flag_spawnstuff, INITPRIO_SETLOCATION); -}; +} void LogCTF(string mode, float flagteam, entity actor) { @@ -229,7 +232,7 @@ void RegenFlag(entity e) e.cnt = FLAG_BASE; e.owner = world; e.flags = FL_ITEM | FL_NOTARGET; // clear FL_ONGROUND and any other junk -}; +} void ReturnFlag(entity e) { @@ -250,11 +253,11 @@ void ReturnFlag(entity e) } e.owner = world; RegenFlag(e); -}; +} void DropFlag(entity e, entity penalty_receiver, entity attacker) { - local entity p; + entity p; if(e.classname != "item_flag_team") { @@ -326,11 +329,11 @@ void DropFlag(entity e, entity penalty_receiver, entity attacker) tracebox(e.origin, e.mins, e.maxs, e.origin, TRUE, e); if(trace_startsolid) dprint("FLAG FALLTHROUGH will happen SOON\n"); -}; +} void FlagThink() { - local entity e; + entity e; self.nextthink = time + 0.1; @@ -399,7 +402,7 @@ void FlagThink() DropFlag(self, world, world); return; } -}; +} float ctf_usekey() { @@ -414,15 +417,15 @@ float ctf_usekey() void flag_cap_ring_spawn(vector org) { shockwave_spawn("models/ctf/shockwavetransring.md3", org - '0 0 15', -0.8, 0, 1); -}; +} void FlagTouch() { if(gameover) return; - local float t; - local entity player; - local string s, s0, h0, h1; + float t; + entity player; + string s, s0, h0, h1; if (other.classname != "player") return; if (other.health < 1) // ignore dead players @@ -632,7 +635,7 @@ void FlagTouch() WaypointSprite_AttachCarrier("flagcarrier", other, RADARICON_FLAGCARRIER, '1 1 0'); } } -}; +} /*QUAKED spawnfunc_info_player_team1 (1 0 0) (-16 -16 -24) (16 16 24) CTF Starting point for a player @@ -651,8 +654,8 @@ void spawnfunc_info_player_team1() } self.team = COLOR_TEAM1; // red spawnfunc_info_player_deathmatch(); -}; -//self.team = 4;self.classname = "info_player_start";spawnfunc_info_player_start();}; +} +//self.team = 4;self.classname = "info_player_start";spawnfunc_info_player_start();} /*QUAKED spawnfunc_info_player_team2 (1 0 0) (-16 -16 -24) (16 16 24) CTF Starting point for a player in @@ -671,8 +674,8 @@ void spawnfunc_info_player_team2() } self.team = COLOR_TEAM2; // blue spawnfunc_info_player_deathmatch(); -}; -//self.team = 13;self.classname = "info_player_start";spawnfunc_info_player_start();}; +} +//self.team = 13;self.classname = "info_player_start";spawnfunc_info_player_start();} /*QUAKED spawnfunc_info_player_team3 (1 0 0) (-16 -16 -24) (16 16 24) CTF Starting point for a player in @@ -691,7 +694,7 @@ void spawnfunc_info_player_team3() } self.team = COLOR_TEAM3; // yellow spawnfunc_info_player_deathmatch(); -}; +} /*QUAKED spawnfunc_info_player_team4 (1 0 0) (-16 -16 -24) (16 16 24) @@ -711,7 +714,7 @@ void spawnfunc_info_player_team4() } self.team = COLOR_TEAM4; // purple spawnfunc_info_player_deathmatch(); -}; +} void item_flag_reset() { @@ -738,7 +741,7 @@ void item_flag_postspawn() self.glow_size = 25; self.glow_trail = 1; } -}; +} /*QUAKED spawnfunc_item_flag_team1 (0 0.5 0.8) (-48 -48 -37) (48 48 37) CTF flag for team one (Red). @@ -765,6 +768,7 @@ Keys: (default ctf/respawn.wav) */ +void spawnfunc_item_flag_team2(); void spawnfunc_item_flag_team1() { if (!g_ctf) @@ -773,21 +777,22 @@ void spawnfunc_item_flag_team1() return; } + if (g_ctf_reverse) + { + float old_g_ctf_reverse = g_ctf_reverse; + g_ctf_reverse = 0; // avoid an endless loop + spawnfunc_item_flag_team2(); + g_ctf_reverse = old_g_ctf_reverse; + return; + } + // link flag into ctf_worldflaglist self.ctf_worldflagnext = ctf_worldflaglist; ctf_worldflaglist = self; self.classname = "item_flag_team"; - if(g_ctf_reverse) - { - self.team = COLOR_TEAM2; // color 13 team (blue) - self.items = IT_KEY1; // silver key (bluish enough) - } - else - { - self.team = COLOR_TEAM1; // color 4 team (red) - self.items = IT_KEY2; // gold key (redish enough) - } + self.team = COLOR_TEAM1; // color 4 team (red) + self.items = IT_KEY2; // gold key (redish enough) self.netname = "^1RED^7 flag"; self.target = "###item###"; self.skin = autocvar_g_ctf_flag_red_skin; @@ -836,7 +841,7 @@ void spawnfunc_item_flag_team1() precache_model("models/ctf/shockwavetransring.md3"); self.reset = item_flag_reset; -}; +} /*QUAKED spawnfunc_item_flag_team2 (0 0.5 0.8) (-48 -48 -24) (48 48 64) CTF flag for team two (Blue). @@ -871,21 +876,22 @@ void spawnfunc_item_flag_team2() return; } + if (g_ctf_reverse) + { + float old_g_ctf_reverse = g_ctf_reverse; + g_ctf_reverse = 0; // avoid an endless loop + spawnfunc_item_flag_team1(); + g_ctf_reverse = old_g_ctf_reverse; + return; + } + // link flag into ctf_worldflaglist self.ctf_worldflagnext = ctf_worldflaglist; ctf_worldflaglist = self; self.classname = "item_flag_team"; - if(g_ctf_reverse) - { - self.team = COLOR_TEAM1; // color 4 team (red) - self.items = IT_KEY2; // gold key (redish enough) - } - else - { - self.team = COLOR_TEAM2; // color 13 team (blue) - self.items = IT_KEY1; // silver key (bluish enough) - } + self.team = COLOR_TEAM2; // color 13 team (blue) + self.items = IT_KEY1; // silver key (bluish enough) self.netname = "^4BLUE^7 flag"; self.target = "###item###"; self.skin = autocvar_g_ctf_flag_blue_skin; @@ -934,7 +940,7 @@ void spawnfunc_item_flag_team2() precache_model("models/ctf/shockwavetransring.md3"); self.reset = item_flag_reset; -}; +} /*QUAKED spawnfunc_ctf_team (0 .5 .8) (-16 -16 -24) (16 16 32) @@ -961,12 +967,12 @@ void spawnfunc_ctf_team() } self.classname = "ctf_team"; self.team = self.cnt + 1; -}; +} // code from here on is just to support maps that don't have control point and team entities void ctf_spawnteam (string teamname, float teamcolor) { - local entity oldself; + entity oldself; oldself = self; self = spawn(); self.classname = "ctf_team"; @@ -976,7 +982,7 @@ void ctf_spawnteam (string teamname, float teamcolor) spawnfunc_ctf_team(); self = oldself; -}; +} // spawn some default teams if the map is not set up for ctf void ctf_spawnteams() @@ -987,7 +993,7 @@ void ctf_spawnteams() ctf_spawnteam("Red", COLOR_TEAM1 - 1); ctf_spawnteam("Blue", COLOR_TEAM2 - 1); -}; +} void ctf_delayedinit() { @@ -996,7 +1002,7 @@ void ctf_delayedinit() ctf_spawnteams(); ScoreRules_ctf(); -}; +} void ctf_init() { @@ -1011,7 +1017,7 @@ void ctf_init() //#NO AUTOCVARS START g_ctf_win_mode = cvar("g_ctf_win_mode"); //#NO AUTOCVARS END -}; +} void ctf_setstatus2(entity flag, float shift) { @@ -1026,7 +1032,7 @@ void ctf_setstatus2(entity flag, float shift) { // no status bits } -}; +} void ctf_setstatus() { @@ -1036,7 +1042,7 @@ void ctf_setstatus() self.items &~= IT_BLUE_FLAG_LOST; self.items &~= IT_CTF_SHIELDED; - local entity flag; + entity flag; float redflags, blueflags; if(self.ctf_captureshielded) @@ -1072,9 +1078,9 @@ void ctf_setstatus() ctf_setstatus2(flag, IT_BLUE_FLAG_TAKEN); } } -}; +} /* -entity(float cteam) ctf_team_has_commander = +entity ctf_team_has_commander(float cteam) { entity pl; if(cteam != COLOR_TEAM1 || cteam != COLOR_TEAM2) @@ -1086,15 +1092,15 @@ entity(float cteam) ctf_team_has_commander = } } return world; -}; +} -void(entity e, float st) ctf_setstate = +void ctf_setstate(entity e, float st) { e.ctf_state = st; ++e.version; -}; +} -void(float cteam) ctf_new_commander = +void ctf_new_commander(float cteam) { entity pl, plmax; @@ -1117,9 +1123,9 @@ void(float cteam) ctf_new_commander = ctf_setstate(plmax, 3); sprint(plmax, "^3You're the commander now!\n"); centerprint(plmax, "^3You're the commander now!\n"); -}; +} -void() ctf_clientconnect = +void ctf_clientconnect() { self.iscommander = FALSE; @@ -1133,9 +1139,9 @@ void() ctf_clientconnect = if(self.team != 0 && self.classname == "player" && !ctf_team_has_commander(self.team)) { ctf_new_commander(self.team); } -}; +} -void() ctf_playerchanged = +void ctf_playerchanged() { if(!self.team || self.classname != "player") { ctf_setstate(self, -1); @@ -1158,18 +1164,18 @@ void() ctf_playerchanged = self.team_saved = self.team; ctf_new_commander(self.team); -}; +} -void() ctf_clientdisconnect = +void ctf_clientdisconnect() { if(self.iscommander) { ctf_new_commander(self.team); } -}; +} entity GetPlayer(string); -float() ctf_clientcommand = +float ctf_clientcommand() { entity e; if(argv(0) == "order") { @@ -1210,5 +1216,5 @@ float() ctf_clientcommand = return TRUE; } return FALSE; -}; +} */