|
|
|
Still, here it is... GameRules::GameRules() { // set to checking mode // wait 40 seconds before first check, // so ppl can join, choose team (what ever) m_RoundState = RND_CHECKING; m_RoundTime = gpGlobals->time + 40; // bla bal bla (rest of stuff) } add to GameRules::Think() if ((m_RoundState == RND_CHECKING) or (m_RoundState == RND_CHECK_RESTART)) { if (m_RoundTime < gpGlobals->time) CheckRoundStart (); } if (m_RoundState === RND_PRESTART) { SetupRound(); return; } if (m_RoundState == RND_START) { if (m_RoundTime < gpGlobals->time) { m_RoundTime = 0; float flRoundLimit = CVAR_GET_FLOAT("mp_roundtimelimit") * 60; m_RoundTime = gpGlobals->time + flRoundLimit; } m_RoundState = RND_DURING; } if (m_RoundState == RND_DURING) { if (m_RoundTime && (m_RoundTime < gpGlobals->time)) RoundOutOfTime (); } if (m_RoundState == MATCH_FINISHED) { if (m_RoundTime < gpGlobals->time) RoundWinner (); } >>> GameRules::CheckRoundStart () { // bla bla bla etc etc // Reasons for round starting. // Make sure teams are even and so on // no delay coz we don't want teams etc // to change before we start if (start) { m_RoundTime = 0; m_RoundState = RND_PRESTART; } else { // wait another 20 seconds before checking m_RoundTime = gpGlobals->time + 20; m_RoundState = RND_CHECKING; // might also wanna check for ppl // who can be spawned... kinda like // a practice time before the main event } } >>>> GameRules::SetupRound () { // bla bla bla etc etc // Respawn all the players // remove corpses etc // slight delay, so you can add spawn // protection, count down etc // eg. Lights! Camera! Action! in AHL m_RoundTime = gpGlobals->time + 4.0; m_RoundState = RND_START; // go through all the players and // see who is 'particpating' and record this // ppl who shouldn't be in, ghost em' m_particpants = 0; int living = 0; for (i = 1; i <= gpGlobals->maxClients; i++) { CBasePlayer *pPlayer = (CBasePlayer *)UTIL_PlayerByIndex (i); if (!pPlayer) continue; // remove weapons if (pPlayer->pev->weapons) pPlayer->RemoveAllItems (TRUE); // should they spawn? if (!pPlayer-> something somethin) { // ghost em' continue; } pPlayer->Spawn(); pPlayer->m_lives = 1; living++; } m_particpants = living; } >>> GameRules::RoundOutOfTime () { // add what ever you want // perhaps figure out who one by number // of kills in a row or something?? // tell ppl it ended? m_RoundState = RND_CHECK_RESTART; m_RoundTime = gpGlobals->time + 3.5; } >>> GameRules::RoundWinner () { // tell ppl who one // eg. Last person alive m_RoundState = RND_CHECK_RESTART; m_RoundTime = gpGlobals->time + 3.5; } >>> GameRules::PlayerKilled bla bla bla { // add something like this to it p_victim->m_lives--: if (p_victim->m_lives == 0) m_participants--; CheckRoundOver(); } >>> GameRules::Disconnected bla bla bla { // bla bla bla // one less player, so say so m_participants--; CheckRoundOver(); } >>> // call each frame possibly? // your choice GameRules::CheckRoundOver() { if (m_participants > 1) return; m_RoundTime = gpGlobals->time + 3.5; m_RoundState = RND_FINISHED; } >>> // this is where you stop them respawning GameRules::FPlayerCanRespawn ( bla bla ) { pPlayer->pev->nextthink = -1; pPlayer->pev->button = 0; pPlayer->m_iRespawnFrames = 0; if (gpGlobals->time < (pPlayer->m_fDeadTime + 4)) return FALSE; // make em' a ghost pPlayer->pev->movetype = MOVETYPE_NONE; pPlayer->pev->solid = SOLID_NOT; pPlayer->pev->takedamage = DAMAGE_NO; pPlayer->pev->deadflag = DEAD_NO; pPlayer->m_iHideHUD |= (HIDEHUD_WEAPONS | HIDEHUD_HEALTH); return FALSE; } >> GameRules::PlayerSpawn { if (m_RoundState >= RND_PRESTART) // make em' a ghost // bla bla bla // etc etc }
Any questions or suggestions should be sent to me:
mr_grim@telefragged.com