void CCharacter::SetClass(int ClassChoosed) { ClassSpawnAttributes(); DestroyChildEntities(); GameServer()->CreatePlayerSpawn(m_Pos); }
void CCharacter::Die(int Killer, int Weapon) { /* INFECTION MODIFICATION START ***************************************/ DestroyChildEntities(); /* INFECTION MODIFICATION END *****************************************/ // we got to wait 0.5 secs before respawning m_pPlayer->m_RespawnTick = Server()->Tick()+Server()->TickSpeed()/2; int ModeSpecial = GameServer()->m_pController->OnCharacterDeath(this, GameServer()->m_apPlayers[Killer], Weapon); char aBuf[256]; str_format(aBuf, sizeof(aBuf), "kill killer='%d:%s' victim='%d:%s' weapon=%d special=%d", Killer, Server()->ClientName(Killer), m_pPlayer->GetCID(), Server()->ClientName(m_pPlayer->GetCID()), Weapon, ModeSpecial); GameServer()->Console()->Print(IConsole::OUTPUT_LEVEL_DEBUG, "game", aBuf); // send the kill message CNetMsg_Sv_KillMsg Msg; Msg.m_Killer = Killer; Msg.m_Victim = m_pPlayer->GetCID(); Msg.m_Weapon = Weapon; Msg.m_ModeSpecial = ModeSpecial; Server()->SendPackMsg(&Msg, MSGFLAG_VITAL, -1); // a nice sound GameServer()->CreateSound(m_Pos, SOUND_PLAYER_DIE); // this is for auto respawn after 3 secs m_pPlayer->m_DieTick = Server()->Tick(); m_Alive = false; GameServer()->m_World.RemoveEntity(this); GameServer()->m_World.m_Core.m_apCharacters[m_pPlayer->GetCID()] = 0; GameServer()->CreateDeath(m_Pos, m_pPlayer->GetCID()); /* INFECTION MODIFICATION START ***************************************/ if(GetClass() == PLAYERCLASS_BOOMER) { GameServer()->CreateSound(m_Pos, SOUND_GRENADE_EXPLODE); GameServer()->CreateExplosion(m_Pos, m_pPlayer->GetCID(), WEAPON_HAMMER, false); GameServer()->CreateExplosion(m_Pos + vec2(32, 0), m_pPlayer->GetCID(), WEAPON_HAMMER, false); GameServer()->CreateExplosion(m_Pos + vec2(-32, 0), m_pPlayer->GetCID(), WEAPON_HAMMER, false); GameServer()->CreateExplosion(m_Pos + vec2(0, 32), m_pPlayer->GetCID(), WEAPON_HAMMER, false); GameServer()->CreateExplosion(m_Pos + vec2(0, -32), m_pPlayer->GetCID(), WEAPON_HAMMER, false); } if(GetClass() == PLAYERCLASS_WITCH) { m_pPlayer->StartInfection(true); GameServer()->SendBroadcast("A witch is dead", -1); GameServer()->CreateSoundGlobal(SOUND_CTF_RETURN); } else { m_pPlayer->StartInfection(false); } /* INFECTION MODIFICATION END *****************************************/ }
void CCharacter::Destroy() { /* INFECTION MODIFICATION START ***************************************/ DestroyChildEntities(); /* INFECTION MODIFICATION END *****************************************/ GameServer()->m_World.m_Core.m_apCharacters[m_pPlayer->GetCID()] = 0; m_Alive = false; }
bool CCharacter::Spawn(CPlayer *pPlayer, vec2 Pos) { m_EmoteStop = -1; m_LastAction = -1; m_LastNoAmmoSound = -1; m_ActiveWeapon = WEAPON_GUN; m_LastWeapon = WEAPON_HAMMER; m_QueuedWeapon = -1; m_pPlayer = pPlayer; m_Pos = Pos; m_Core.Reset(); m_Core.Init(&GameServer()->m_World.m_Core, GameServer()->Collision()); m_Core.m_Pos = m_Pos; GameServer()->m_World.m_Core.m_apCharacters[m_pPlayer->GetCID()] = &m_Core; m_ReckoningTick = 0; mem_zero(&m_SendCore, sizeof(m_SendCore)); mem_zero(&m_ReckoningCore, sizeof(m_ReckoningCore)); GameServer()->m_World.InsertEntity(this); m_Alive = true; GameServer()->m_pController->OnCharacterSpawn(this); /* INFECTION MODIFICATION START ***************************************/ ClassSpawnAttributes(); DestroyChildEntities(); if(GetClass() == PLAYERCLASS_NONE) { OpenClassChooser(); } /* INFECTION MODIFICATION END *****************************************/ return true; }