| 1000 | } |
| 1001 | |
| 1002 | void CCharacter::Die(int Killer, int Weapon, bool SendKillMsg) |
| 1003 | { |
| 1004 | if(Killer != WEAPON_GAME && m_SetSavePos[RESCUEMODE_AUTO]) |
| 1005 | GetPlayer()->m_LastDeath = m_RescueTee[RESCUEMODE_AUTO]; |
| 1006 | StopRecording(); |
| 1007 | int ModeSpecial = GameServer()->m_pController->OnCharacterDeath(this, GameServer()->m_apPlayers[Killer], Weapon); |
| 1008 | |
| 1009 | log_info("game", "kill killer='%d:%s' victim='%d:%s' weapon=%d special=%d", |
| 1010 | Killer, Server()->ClientName(Killer), |
| 1011 | m_pPlayer->GetCid(), Server()->ClientName(m_pPlayer->GetCid()), Weapon, ModeSpecial); |
| 1012 | |
| 1013 | if(SendKillMsg) |
| 1014 | { |
| 1015 | SendDeathMessageIfNotInLockedTeam(Killer, Weapon, ModeSpecial); |
| 1016 | } |
| 1017 | |
| 1018 | // a nice sound, and bursting tee death effect |
| 1019 | GameServer()->CreateSound(m_Pos, SOUND_PLAYER_DIE, TeamMask()); |
| 1020 | GameServer()->CreateDeath(m_Pos, m_pPlayer->GetCid(), TeamMask()); |
| 1021 | |
| 1022 | // this is to rate limit respawning to 3 secs |
| 1023 | m_pPlayer->m_PreviousDieTick = m_pPlayer->m_DieTick; |
| 1024 | m_pPlayer->m_DieTick = Server()->Tick(); |
| 1025 | |
| 1026 | m_Alive = false; |
| 1027 | SetSolo(false); |
| 1028 | |
| 1029 | GameServer()->m_World.RemoveEntity(this); |
| 1030 | GameServer()->m_World.m_Core.m_apCharacters[m_pPlayer->GetCid()] = nullptr; |
| 1031 | Teams()->OnCharacterDeath(GetPlayer()->GetCid(), Weapon); |
| 1032 | CancelSwapRequests(); |
| 1033 | } |
| 1034 | |
| 1035 | bool CCharacter::TakeDamage(vec2 Force, int Dmg, int From, int Weapon) |
| 1036 | { |
no test coverage detected