void CGameController_iLMS::OnCharacterSpawn(class CCharacter *pChr) { // default health and armor pChr->IncreaseHealth(10); if(g_Config.m_SvMode == 2) pChr->IncreaseArmor(10); // give default weapons switch(g_Config.m_SvMode) { case 1: /* Instagib - Only Riffle */ pChr->GiveWeapon(WEAPON_RIFLE, -1); break; case 2: /* All Weapons */ pChr->GiveWeapon(WEAPON_HAMMER, -1); pChr->GiveWeapon(WEAPON_GUN, g_Config.m_SvWeaponsAmmo); pChr->GiveWeapon(WEAPON_GRENADE, g_Config.m_SvWeaponsAmmo); pChr->GiveWeapon(WEAPON_SHOTGUN, g_Config.m_SvWeaponsAmmo); pChr->GiveWeapon(WEAPON_RIFLE, g_Config.m_SvWeaponsAmmo); break; case 3: /* Hammer */ pChr->GiveWeapon(WEAPON_HAMMER, -1); break; case 4: /* Grenade */ pChr->GiveWeapon(WEAPON_GRENADE, g_Config.m_SvGrenadeEndlessAmmo ? -1 : g_Config.m_SvWeaponsAmmo); break; case 5: /* Ninja */ pChr->GiveNinja(); break; } //Update color of spawning tees OnPlayerInfoChange(pChr->GetPlayer()); }
void CGameController_iLMS::CalcPlayerColor() { for(int i = 0; i < MAX_CLIENTS; i++) { CPlayer *pP = GameServer()->m_apPlayers[i]; if(!pP) continue; if(pP->GetTeam() != TEAM_SPECTATORS) OnPlayerInfoChange(pP); } }
void IGameController::DoTeamChange(CPlayer *pPlayer, int Team, bool DoChatMsg) { Team = ClampTeam(Team); if(Team == pPlayer->GetTeam()) return; int OldTeam = pPlayer->GetTeam(); pPlayer->SetTeam(Team); int ClientID = pPlayer->GetCID(); // notify clients CNetMsg_Sv_Team Msg; Msg.m_ClientID = ClientID; Msg.m_Team = Team; Msg.m_Silent = DoChatMsg ? 0 : 1; Msg.m_CooldownTick = pPlayer->m_TeamChangeTick; Server()->SendPackMsg(&Msg, MSGFLAG_VITAL, -1); char aBuf[128]; str_format(aBuf, sizeof(aBuf), "team_join player='%d:%s' m_Team=%d", ClientID, Server()->ClientName(ClientID), Team); GameServer()->Console()->Print(IConsole::OUTPUT_LEVEL_DEBUG, "game", aBuf); // update effected game settings if(OldTeam != TEAM_SPECTATORS) { --m_aTeamSize[OldTeam]; m_UnbalancedTick = TBALANCE_CHECK; } if(Team != TEAM_SPECTATORS) { ++m_aTeamSize[Team]; m_UnbalancedTick = TBALANCE_CHECK; if(m_GameState == IGS_WARMUP_GAME && HasEnoughPlayers()) SetGameState(IGS_WARMUP_GAME, 0); pPlayer->m_IsReadyToPlay = !IsPlayerReadyMode(); if(m_GameFlags&GAMEFLAG_SURVIVAL) pPlayer->m_RespawnDisabled = GetStartRespawnState(); } OnPlayerInfoChange(pPlayer); GameServer()->OnClientTeamChange(ClientID); }
void IGameController::DoTeamChange(CPlayer *pPlayer, int Team, bool DoChatMsg) { Team = ClampTeam(Team); if(Team == pPlayer->GetTeam()) return; int OldTeam = pPlayer->GetTeam(); pPlayer->SetTeam(Team); int ClientID = pPlayer->GetCID(); char aBuf[128]; if(DoChatMsg) { str_format(aBuf, sizeof(aBuf), "'%s' joined the %s", Server()->ClientName(ClientID), GetTeamName(Team)); GameServer()->SendChat(-1, CGameContext::CHAT_ALL, aBuf); } str_format(aBuf, sizeof(aBuf), "team_join player='%d:%s' m_Team=%d", ClientID, Server()->ClientName(ClientID), Team); GameServer()->Console()->Print(IConsole::OUTPUT_LEVEL_DEBUG, "game", aBuf); // update effected game settings if(OldTeam != TEAM_SPECTATORS) { --m_aTeamSize[OldTeam]; m_UnbalancedTick = TBALANCE_CHECK; } if(Team != TEAM_SPECTATORS) { ++m_aTeamSize[Team]; m_UnbalancedTick = TBALANCE_CHECK; if(m_GameState == IGS_WARMUP_GAME && HasEnoughPlayers()) SetGameState(IGS_WARMUP_GAME, 0); pPlayer->m_IsReadyToPlay = !IsPlayerReadyMode(); if(m_GameFlags&GAMEFLAG_SURVIVAL) pPlayer->m_RespawnDisabled = GetStartRespawnState(); } OnPlayerInfoChange(pPlayer); GameServer()->OnClientTeamChange(ClientID); }
int CGameController_iLMS::OnCharacterDeath(class CCharacter *pVictim, class CPlayer *pKiller, int WeaponID) { if(!pKiller) return 0; int VictimID = pVictim->GetPlayer()->GetCID(); pVictim->GetPlayer()->m_Score = m_points; m_points++; if(pKiller != pVictim->GetPlayer()) { pKiller->m_Kills++; if(pVictim->GetPlayer()->m_Wallshot && g_Config.m_SvWallshot == 1) pKiller->m_Kills += g_Config.m_SvWallshotBonus; //pKiller->m_Multiplier; pVictim->GetPlayer()->m_Deaths++; if(pVictim->GetPlayer()->m_Wallshot && g_Config.m_SvWallshot == 1) pVictim->GetPlayer()->m_Deaths += g_Config.m_SvWallshotBonus; //pKiller->m_Multiplier; //pKiller->m_Score++; //if(pVictim->GetPlayer()->m_Wallshot && g_Config.m_SvWallshot == 1) //pKiller->m_Score += g_Config.m_SvWallshotBonus; //pKiller->m_Multiplier; pVictim->GetPlayer()->m_Wallshot=false; /* Check if the killer is already killed and in spectator (victim may died through wallshot) */ if(pKiller->GetTeam() != TEAM_SPECTATORS) { pVictim->GetPlayer()->m_CaughtBy = pKiller->GetCID(); //pVictim->GetPlayer()->m_CaughtBy = CPlayer::ZCATCH_NOT_CAUGHT; pVictim->GetPlayer()->SetTeamDirect(TEAM_SPECTATORS); pVictim->GetPlayer()->m_SpectatorID = pKiller->GetCID(); // Let the victim follow his catcher char aBuf[256]; str_format(aBuf, sizeof(aBuf), "Killed by \"%s\".", Server()->ClientName(pKiller->GetCID())); GameServer()->SendChatTarget(VictimID, aBuf); } } else { //Punish selfkill/death if(WeaponID == WEAPON_SELF || WeaponID == WEAPON_WORLD) { //pVictim->GetPlayer()->m_Score -= g_Config.m_SvKillPenalty; } } for(int i = 0; i < MAX_CLIENTS; i++) { if(GameServer()->m_apPlayers[i]) { if(GameServer()->m_apPlayers[i]->m_CaughtBy == VictimID) { //GameServer()->m_apPlayers[i]->m_CaughtBy = CPlayer::ZCATCH_NOT_CAUGHT; //GameServer()->m_apPlayers[i]->SetTeamDirect(GameServer()->m_pController->ClampTeam(1)); GameServer()->m_apPlayers[i]->m_CaughtBy = pKiller->GetCID(); GameServer()->m_apPlayers[i]->m_SpectatorID = pKiller->GetCID(); // Let the victim follow his catcher if(pKiller != pVictim->GetPlayer()) { pVictim->GetPlayer()->m_Score = pVictim->GetPlayer()->m_Score; //m_points++; } } } } // Update colors OnPlayerInfoChange(pVictim->GetPlayer()); return 0; }