30 protected const ref set<Man> m_AlreadyReportedDead =
new set<Man>();
53 if ( m_PlayerListFilter == 1 )
56 m_Timer.Run( TIMER_PLAYERLIST ,
this,
"PlayerList", NULL,
true );
75 for (
int i = 0; i < 3; i++ )
77 m_DotIndex = m_PosArray[i].
IndexOf(
".");
78 if ( m_DotIndex != -1 )
80 m_PosArray[i] = m_PosArray[i].
Substring( 0, m_DotIndex + 2 );
86 return "Player \"" +
"Unknown/Dead Entity" +
"\" (id=" +
"Unknown" +
" pos=<" + m_PosArray[0] +
", " + m_PosArray[1] +
", " + m_PosArray[2] +
">)";
89 m_PlayerName =
"\"" + identity.
GetName() +
"\"";
90 m_Pid = identity.
GetId();
92 if ( !player.IsAlive() )
94 m_PlayerName = m_PlayerName +
" (DEAD)";
97 return "Player " + m_PlayerName +
" (id=" + m_Pid +
" pos=<" + m_PosArray[0] +
", " + m_PosArray[1] +
", " + m_PosArray[2] +
">)";
105 return " into " + zone +
"(" +
component.ToString() +
") for " + dmg.
ToString() +
" damage (" + ammo +
")";
109 return " into Block" +
"(" +
component.ToString() +
") for 0 damage ";
116 if (!player || !source)
118 LogPrint(
"DEBUG: PlayerKilled() player/source does not exist");
128 string playerPrefix, playerPrefix2;
131 playerPrefix2 =
GetPlayerPrefix( playerSource , playerSource.GetIdentity() );
135 if (player == source)
137 m_StatWater = player.GetStatWater();
138 m_StatEnergy = player.GetStatEnergy();
139 m_BleedMgr = player.GetBleedingManagerServer();
141 if ( m_StatWater && m_StatEnergy && m_BleedMgr )
143 LogPrint( playerPrefix +
" died. Stats> Water: " + m_StatWater.
Get().
ToString() +
" Energy: " + m_StatEnergy.
Get().
ToString() +
" Bleed sources: " + m_BleedMgr.GetBleedingSourcesCount().
ToString() );
145 else if ( m_StatWater && m_StatEnergy && !m_BleedMgr )
151 LogPrint( playerPrefix +
" died. Stats> could not fetch");
154 else if (source.IsWeapon() || source.IsMeleeWeapon())
157 if (source.IsMeleeWeapon())
159 LogPrint( playerPrefix +
" killed by " + playerPrefix2 +
" with " + source.GetDisplayName() );
163 m_Distance =
vector.
Distance( player.GetPosition(), playerSource.GetPosition() );
164 LogPrint( playerPrefix +
" killed by " + playerPrefix2 +
" with " + source.GetDisplayName() +
" from " + m_Distance +
" meters " );
172 LogPrint( playerPrefix +
" killed by " + playerPrefix2 +
" with (MeleeFist)" );
177 LogPrint( playerPrefix +
" killed by " + source.GetType());
181 m_AlreadyReportedDead.Insert(player);
186 if ( player && source )
188 if (m_AlreadyReportedDead.Find(player) != -1)
190 string playerPrefix =
GetPlayerPrefix( player , player.GetIdentity() ) +
"[HP: " + player.GetHealth().ToString() +
"]";
191 string playerPrefix2;
194 switch ( damageType )
198 if ( m_HitFilter != 1 && ( source.IsZombie() || source.IsAnimal() ) )
200 m_DisplayName = source.GetDisplayName();
202 LogPrint( playerPrefix +
" hit by " + m_DisplayName + m_HitMessage );
204 else if ( source.IsPlayer() )
207 playerPrefix2 =
GetPlayerPrefix( playerSource , playerSource.GetIdentity() );
209 LogPrint( playerPrefix +
" hit by " + playerPrefix2 + m_HitMessage );
213 m_ItemInHands = source.GetDisplayName();
214 playerSource =
PlayerBase.Cast( source.GetHierarchyParent() );
215 playerPrefix2 =
GetPlayerPrefix( playerSource , playerSource.GetIdentity() );
217 LogPrint( playerPrefix +
" hit by " + playerPrefix2 + m_HitMessage +
" with " + m_ItemInHands );
221 m_DisplayName = source.GetType();
223 LogPrint( playerPrefix +
" hit by " + m_DisplayName + m_HitMessage );
229 if ( source.IsWeapon() )
231 m_ItemInHands = source.GetDisplayName();
232 playerSource =
PlayerBase.Cast( source.GetHierarchyParent() );
233 playerPrefix2 =
GetPlayerPrefix( playerSource , playerSource.GetIdentity() );
234 m_Distance =
vector.
Distance( player.GetPosition(), playerSource.GetPosition() );
236 LogPrint( playerPrefix +
" hit by " + playerPrefix2 + m_HitMessage +
" with " + m_ItemInHands +
" from " + m_Distance +
" meters ");
240 m_DisplayName = source.GetType();
242 LogPrint( playerPrefix +
" hit by " + m_DisplayName + m_HitMessage );
248 LogPrint( playerPrefix +
" hit by explosion (" + ammo +
")" );
253 LogPrint( playerPrefix +
" stunned by " + ammo );
257 float globalHealthDamage = damageResult.
GetDamage(
"",
"Health");
260 if (globalHealthDamage > 0.0)
261 LogPrint(playerPrefix +
" hit by " + ammo);
263 else if ( source.GetType() ==
"AreaDamageManager" )
268 LogPrint( playerPrefix +
" hit by " + parent.GetType() +
" with " + ammo );
273 m_DisplayName = source.GetType();
275 LogPrint( playerPrefix +
" hit by " + m_DisplayName +
" with " + ammo );
281 LogPrint(
"DEBUG: PlayerHitBy() unknown damageType: " + ammo );
287 LogPrint(
"DEBUG: player/source does not exist");
295 LogPrint( m_PlayerPrefix +
" is unconscious" );
300 if ( player.IsAlive() )
304 LogPrint( m_PlayerPrefix +
" regained consciousness" );
310 if ( m_PlacementFilter == 1 )
314 m_DisplayName = item.GetDisplayName();
316 if ( m_DisplayName ==
"" )
318 LogPrint( m_PlayerPrefix +
" placed unknown object" );
322 LogPrint( m_PlayerPrefix +
" placed " + m_DisplayName );
329 if ( m_ActionsFilter == 1 )
331 m_Message = action_data.
m_Action.GetAdminLogMessage(action_data);
338 LogPrint( m_PlayerPrefix + m_Message );
346 LogPrint( m_PlayerPrefix +
" committed suicide" );
353 LogPrint( m_PlayerPrefix +
" bled out" );
359 if (m_ActionsFilter !=1)
363 string flagType = totem.FindAttachmentBySlotName(
"Material_FPole_Flag").ClassName();
371 LogPrint( prefix +
" has " + action + flagType +
" on " + totem.ClassName() +
" at " + totem.GetPosition());
378 if ( m_PlayerArray.Count() != 0 )
380 LogPrint(
"##### PlayerList log: " + m_PlayerArray.Count().ToString() +
" players" );
401 m_AlreadyReportedDead.RemoveItem(player);
DamageType
exposed from C++ (do not change)
void DayZPlayerImplementFallDamage(DayZPlayer pPlayer)
protected vector m_Position
Cached world position.
class BoxCollidingParams component
ComponentInfo for BoxCollidingResult.
proto native int ServerConfigGetInt(string name)
Server config parsing. Returns 0 if not found.
proto native void GetPlayers(out array< Man > players)
proto native void AdminLog(string text)
override bool IsMeleeWeapon()
proto owned string GetId()
unique id of player (hashed steamID, database Xbox id...) can be used in database or logs
proto owned string GetName()
nick (short) name of player
The class that will be instanced (moddable)
void LogPrint(string message)
void Suicide(PlayerBase player)
void TotemFlagChange(bool top, notnull PlayerBase player, notnull EntityAI totem)
protected int m_ActionsFilter
autoptr array< Man > m_PlayerArray
protected int m_PlayerListFilter
string GetPlayerPrefix(PlayerBase player, PlayerIdentity identity)
void UnconStop(PlayerBase player)
void OnContinouousAction(ActionData action_data)
protected int m_HitFilter
void OnPlacementComplete(Man player, ItemBase item)
protected int m_PlacementFilter
void PlayerHitBy(TotalDamageResult damageResult, int damageType, PlayerBase player, EntityAI source, int component, string dmgZone, string ammo)
void UnconStart(PlayerBase player)
PlayerStat< float > m_StatEnergy
static int GetPlayerListTimer()
PlayerStat< float > m_StatWater
void BleedingOut(PlayerBase player)
void PlayerKilled(PlayerBase player, Object source)
void PlayerCorpseDestroyed(Man player)
void DirectAdminLogPrint(string str)
BleedingSourcesManagerServer m_BleedMgr
string GetHitMessage(TotalDamageResult damageResult, int component, string zone, string ammo)
proto native float GetDamage(string zoneName, string healthType)
proto native float GetHighestDamage(string healthType)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static proto native float Distance(vector v1, vector v2)
Returns the distance between tips of two 3D vectors.
proto string ToString(bool beautify=true)
Vector to string.
proto native CGame GetGame()
proto string Substring(int start, int len)
Substring of 'str' from 'start' position 'len' number of characters.
string Get(int index)
Gets n-th character from string.
proto native int IndexOf(string sample)
Finds 'sample' in 'str'. Returns -1 when not found.
static proto string ToString(void var, bool type=false, bool name=false, bool quotes=true)
Return string representation of variable.