From 9906b31c74399ee5da432d5dd82aba6c217250d1 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 16 Nov 2010 02:25:28 -0500 Subject: [PATCH] Update code slightly (Compiles now!), go with "keepaway" instead of "ka" whenever possible, fix some other stuff.. Still a huge issue though: Game mode doesn't START. --- qcsrc/common/mapinfo.qc | 8 +- .../menu/xonotic/dialog_multiplayer_create.c | 2 +- qcsrc/server/defs.qh | 2 +- qcsrc/server/g_world.qc | 2 +- qcsrc/server/mutators/gamemode_keepaway.qc | 132 +++++++++--------- qcsrc/server/mutators/mutators.qh | 1 + qcsrc/server/progs.src | 1 + qcsrc/server/scores_rules.qc | 15 ++ qcsrc/server/teamplay.qc | 8 +- 9 files changed, 95 insertions(+), 76 deletions(-) diff --git a/qcsrc/common/mapinfo.qc b/qcsrc/common/mapinfo.qc index 95301c95c..863862c87 100644 --- a/qcsrc/common/mapinfo.qc +++ b/qcsrc/common/mapinfo.qc @@ -469,7 +469,7 @@ void _MapInfo_Map_ApplyGametype(string s, float pWantedType, float pThisType, fl sa = car(s); if(sa != "") cvar_set("fraglimit", sa); - s = cdr(s) + s = cdr(s); } // rc = timelimit timelimit_qualification laps laps_teamplay @@ -1147,7 +1147,7 @@ float MapInfo_CurrentGametype() return MAPINFO_TYPE_NEXBALL; else if(cvar("g_cts")) return MAPINFO_TYPE_CTS; - else if(cvar("g_ka")) + else if(cvar("g_keepaway")) return MAPINFO_TYPE_KEEPAWAY; else return MAPINFO_TYPE_DEATHMATCH; @@ -1190,7 +1190,7 @@ string MapInfo_GetGameTypeCvar(float t) case MAPINFO_TYPE_RACE: return "g_race"; case MAPINFO_TYPE_NEXBALL: return "g_nexball"; case MAPINFO_TYPE_CTS: return "g_cts"; - case MAPINFO_TYPE_KEEPAWAY: return "g_ka"; + case MAPINFO_TYPE_KEEPAWAY: return "g_keepaway"; default: return ""; } } @@ -1212,7 +1212,7 @@ void MapInfo_SwitchGameType(float t) cvar_set("g_race", (t == MAPINFO_TYPE_RACE) ? "1" : "0"); cvar_set("g_nexball", (t == MAPINFO_TYPE_NEXBALL) ? "1" : "0"); cvar_set("g_cts", (t == MAPINFO_TYPE_CTS) ? "1" : "0"); - cvar_set("g_ka", (t == MAPINFO_TYPE_KEEPAWAY) ? "1" : "0"); + cvar_set("g_keepaway", (t == MAPINFO_TYPE_KEEPAWAY) ? "1" : "0"); } void MapInfo_LoadMap(string s) diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_create.c b/qcsrc/menu/xonotic/dialog_multiplayer_create.c index ad810068b..81e0969dc 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_create.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_create.c @@ -41,7 +41,7 @@ void XonoticServerCreateTab_fill(entity me) if(e.checked) e0 = NULL; me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_runematch", "Runematch")); if(e.checked) e0 = NULL; - me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_ka", "Keepaway")); + me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_keepaway", "Keepaway")); if(e.checked) e0 = NULL; me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_race", "Race")); if(e.checked) e0 = NULL; diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index 83b3b7fdf..bb278ce2b 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -17,7 +17,7 @@ float require_spawnfunc_prefix; // if this float exists, only functions with spa float ctf_score_value(string parameter); -float g_dm, g_domination, g_ctf, g_tdm, g_keyhunt, g_onslaught, g_assault, g_arena, g_ca, g_lms, g_runematch, g_race, g_nexball, g_cts, g_ka; +float g_dm, g_domination, g_ctf, g_tdm, g_keyhunt, g_onslaught, g_assault, g_arena, g_ca, g_lms, g_runematch, g_race, g_nexball, g_cts, g_keepaway; float g_cloaked, g_footsteps, g_jump_grunt, g_grappling_hook, g_midair, g_minstagib, g_pinata, g_norecoil, g_minstagib_invis_alpha, g_bloodloss; float g_warmup_limit; float g_warmup_allguns; diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index bdadbdccc..cb9b6cc1c 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -329,7 +329,7 @@ void cvar_changes_init() BADCVAR("g_runematch"); BADCVAR("g_tdm"); BADCVAR("g_nexball"); - BADCVAR("g_ka"); + BADCVAR("g_keepaway"); BADCVAR("teamplay"); // long diff --git a/qcsrc/server/mutators/gamemode_keepaway.qc b/qcsrc/server/mutators/gamemode_keepaway.qc index eb1bc4bb0..607705384 100644 --- a/qcsrc/server/mutators/gamemode_keepaway.qc +++ b/qcsrc/server/mutators/gamemode_keepaway.qc @@ -1,4 +1,22 @@ +void ka_SpawnBall(void); +void ka_TouchEvent(entity); +void ka_RespawnBall(void); + void ka_Initialize() +{ + if(!g_keepaway) + return; + + precache_sound("keepaway/pickedup.wav"); + precache_sound("keepaway/dropped.wav"); + + entity e; + e = spawn(); + e.think = ka_SpawnBall; + e.nextthink = time; +} + +void ka_SpawnBall() { if(!g_keepaway) { remove(self); @@ -18,17 +36,17 @@ void ka_Initialize() self.effects = self.effects | EF_FULLBRIGHT; self.movetype = MOVETYPE_BOUNCE; self.touch = ka_TouchEvent; - self.think = ka_SpawnBall; + self.think = ka_RespawnBall; self.nextthink = time; self.flags = FL_ITEM; - self.reset = ka_Reset; + //self.reset = ka_Reset; self.owner = world; // todo: Waypoints and radar //WaypointSprite_AttachCarrier(); } -void ka_SpawnBall() +void ka_RespawnBall() { if(MoveToRandomMapLocation(self, DPCONTENTS_SOLID | DPCONTENTS_CORPSE | DPCONTENTS_PLAYERCLIP, DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_BODY | DPCONTENTS_DONOTENTER, Q3SURFACEFLAG_SKY, 10, 1024, 256)) { @@ -38,13 +56,13 @@ void ka_SpawnBall() self.angles = '0 0 0'; self.solid = SOLID_TRIGGER; //self.touch = ka_TouchEvent; - self.think = ka_SpawnBall; + self.think = ka_RespawnBall; self.nextthink = time + cvar("g_keepawayball_respawntime"); } else { // sorry, can't spawn, better luck next frame - self.think = ka_SpawnBall; + self.think = ka_RespawnBall; self.nextthink = time; } } @@ -80,9 +98,9 @@ void ka_TouchEvent(entity plyr) self.nextthink = 0; self.glow_color = cvar("g_keepawayball_trail_color"); - self.glowtrail = TRUE; + self.glow_trail = TRUE; plyr.effects |= 8; - plyr.alpha = 0.6 + plyr.alpha = 0.6; bprint(other.netname, "^7 has picked up the ball!\n"); WriteByte(MSG_BROADCAST, SVC_CENTERPRINT); @@ -94,6 +112,43 @@ void ka_TouchEvent(entity plyr) // todo: Waypoints and radar } +MUTATOR_HOOKFUNCTION(ka_RemovePlayer) +{ + entity ball; + ball = self.ballcarried; + + setattachment(ball, world, ""); + ball.movetype = MOVETYPE_BOUNCE; + ball.solid = SOLID_TRIGGER; + ball.wait = time + 1; + ball.ctf_droptime = time; + ball.think = ka_SpawnBall; + ball.nextthink = time + cvar("g_keepawayball_respawntime"); + ball.touch = ka_TouchEvent; + self.effects = EF_LOWPRECISION; + self.alpha = 1.0; + ball.alpha = 1.0; + setorigin(ball, self.origin + '0 0 10'); + ball.velocity = '0 0 200' + '0 100 0'*crandom() + '100 0 0'*crandom(); + + bprint(self.netname, "^7 has dropped the ball!\n"); + WriteByte(MSG_BROADCAST, SVC_CENTERPRINT); + WriteString(MSG_BROADCAST, strcat("\n\n", self.netname, "^7 has dropped the ball!\n")); + sound(other, CHAN_AUTO, "keepaway/dropped.wav", VOL_BASE, ATTN_NORM); + + PlayerScore_Add(self, SP_KEEPAWAY_DROPS, 1); + + // todo + //WaypointSprite_AttachCarrier("ka-ball", ball); + //WaypointSprite_Kill(plyr.waypointsprite_attachedforcarrier); + + ball.owner.ballcarried = world; + ball.owner = world; + + return 1; +} + +/* void ka_DropEvent(entity plyr, entity ball) { setattachment(ball, world, ""); @@ -125,7 +180,7 @@ void ka_DropEvent(entity plyr, entity ball) ball.owner = world; } -/* + void ka_CheckWinner() { @@ -186,59 +241,6 @@ MUTATOR_HOOKFUNCTION(ka_PlayerDies) MUTATOR_HOOKFUNCTION(tag_RemovePlayer) { - if(self.tag_playernum == -1) - return 0; // nothing to remove - - float i, j; - /*for (i = self.tag_playernum; i < tag_players_count; ++i) - { - tag_players[i] = tag_players[i+1]; - tag_players[i].tag_playernum = tag_players[i].tag_playernum - 1; - } - */ - - tag_players[self.tag_playernum] = world; - tag_players_count = tag_players_count - 1; - - // if other players have our color, randomize their color - entity e, random_player; - float temp_tag_players_count; - temp_tag_players_count = tag_players_count; - - if(!next_round) // ... but ONLY if next_round isn't set. We don't care about the colors if the round has already ended - for(i = 0; i < temp_tag_players_count; ++i) // check other players... - { - e = tag_players[i]; - if(e == world) // empty slot, skip to next - { - if(temp_tag_players_count < TAGCOLOR_MAX - 1) // just in case - ++temp_tag_players_count; - continue; - } - - if(e.tagcolor == self.tagcolor_original) // and see if they have our original tag color - { - for(j = 0; j < 100; ++j) // try 100 times to find a color that isn't the same as our color. If this fails we are either damn unlucky, or there are really only players left of our color - { - random_player = tag_players[floor(random() * (TAGCOLOR_MAX - 1))]; - - if(random_player == world) // hit empty slot, try again - continue; - - if(random_player.tagcolor != self.tagcolor_original) // break if we found another color - { - break; - } - } - e.tagcolor = random_player.tagcolor; - setcolor(e, 16 * e.tagcolor + e.tagcolor); - } - } - - self.tag_playernum = -1; - - if(tag_players_count > 1 && time > warmup) - tag_CheckWinner(); return 1; } @@ -257,11 +259,11 @@ MUTATOR_HOOKFUNCTION(tag_PlayerPreThink) */ -MUTATOR_DEFINITION(gamemode_ka) +MUTATOR_DEFINITION(gamemode_keepaway) { MUTATOR_HOOK(MakePlayerObserver, ka_RemovePlayer, CBC_ORDER_ANY); MUTATOR_HOOK(ClientDisconnect, ka_RemovePlayer, CBC_ORDER_ANY); - MUTATOR_HOOK(PlayerDies, ka_PlayerDies, CBC_ORDER_ANY); + //MUTATOR_HOOK(PlayerDies, ka_PlayerDies, CBC_ORDER_ANY); //MUTATOR_HOOK(PlayerSpawn, ka_PlayerSpawn, CBC_ORDER_ANY); //MUTATOR_HOOK(GiveFragsForKill, ka_GiveFragsForKill, CBC_ORDER_FIRST); //MUTATOR_HOOK(PlayerPreThink, ka_PlayerPreThink, CBC_ORDER_FIRST); @@ -270,13 +272,13 @@ MUTATOR_DEFINITION(gamemode_ka) { if(time > 1) // game loads at time 1 error("This is a game type and it cannot be added at runtime."); - g_ka = 1; + g_keepaway = 1; ka_Initialize(); } MUTATOR_ONREMOVE { - g_ka = 0; + g_keepaway = 0; error("This is a game type and it cannot be removed at runtime."); } diff --git a/qcsrc/server/mutators/mutators.qh b/qcsrc/server/mutators/mutators.qh index 542014e86..d0cf0f721 100644 --- a/qcsrc/server/mutators/mutators.qh +++ b/qcsrc/server/mutators/mutators.qh @@ -1,4 +1,5 @@ MUTATOR_DECLARATION(gamemode_keyhunt); +MUTATOR_DECLARATION(gamemode_keepaway); MUTATOR_DECLARATION(mutator_nix); MUTATOR_DECLARATION(mutator_dodging); diff --git a/qcsrc/server/progs.src b/qcsrc/server/progs.src index c2718d4e8..93f9bf56d 100644 --- a/qcsrc/server/progs.src +++ b/qcsrc/server/progs.src @@ -177,6 +177,7 @@ cheats.qc mutators/base.qc mutators/gamemode_keyhunt.qc +mutators/gamemode_keepaway.qc mutators/mutator_nix.qc mutators/mutator_dodging.qc mutators/mutator_rocketflying.qc diff --git a/qcsrc/server/scores_rules.qc b/qcsrc/server/scores_rules.qc index 4db1b4493..dcfad174d 100644 --- a/qcsrc/server/scores_rules.qc +++ b/qcsrc/server/scores_rules.qc @@ -187,3 +187,18 @@ void ScoreRules_nexball(float teams) ScoreInfo_SetLabel_PlayerScore(SP_NEXBALL_FAULTS, "faults", SFL_SORT_PRIO_SECONDARY | SFL_LOWER_IS_BETTER); ScoreRules_basics_end(); } + +// Keep Away stuff +#define SP_KEEPAWAY_PICKUPS 4 +#define SP_KEEPAWAY_CARRIERKILLS 5 +#define SP_KEEPAWAY_DROPS 6 +#define SP_KEEPAWAY_SCORE 7 +void ScoreRules_keepaway() +{ + ScoreRules_basics(0, SFL_SORT_PRIO_PRIMARY, 0, FALSE); + ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_SCORE, "score", SFL_SORT_PRIO_PRIMARY); + ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_PICKUPS, "pickups", 0); + ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_CARRIERKILLS, "bckills", 0); + ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_DROPS, "drops", SFL_LOWER_IS_BETTER); + ScoreRules_basics_end(); +} diff --git a/qcsrc/server/teamplay.qc b/qcsrc/server/teamplay.qc index 88485d8ee..7e73bc142 100644 --- a/qcsrc/server/teamplay.qc +++ b/qcsrc/server/teamplay.qc @@ -101,7 +101,7 @@ void WriteGameCvars() cvar_set("g_race", ftos(g_race)); cvar_set("g_nexball", ftos(g_nexball)); cvar_set("g_cts", ftos(g_cts)); - cvar_set("g_ka", ftos(g_ka)); + cvar_set("g_keepaway", ftos(g_keepaway)); } void ReadGameCvars() @@ -128,7 +128,7 @@ void ReadGameCvars() found += (g_race = (!found && (prev != GAME_RACE) && cvar("g_race"))); found += (g_nexball = (!found && (prev != GAME_NEXBALL) && cvar("g_nexball"))); found += (g_cts = (!found && (prev != GAME_CTS) && cvar("g_cts"))); - found += (g_ka = (!found && (prev != GAME_KEEPAWAY) && cvar("g_ka"))); + found += (g_keepaway = (!found && (prev != GAME_KEEPAWAY) && cvar("g_keepaway"))); if(found) break; @@ -375,11 +375,11 @@ void InitGameplayMode() have_team_spawns = -1; // request team spawns } - if(g_ka) + if(g_keepaway) { game = GAME_KEEPAWAY; gamemode_name = "Keepaway"; - MUTATOR_ADD(gamemode_ka); + MUTATOR_ADD(gamemode_keepaway); } if(teams_matter) -- 2.39.2