88 string config_name =
"CfgVehicles";
94 for ( i = 0; i < config_count; i++ )
96 string survivor_name =
"";
99 if ( survivor_name !=
"" && survivor_name !=
"access" )
101 if (
GetGame().IsKindOf(survivor_name,
"SurvivorMale_Base") ||
GetGame().IsKindOf(survivor_name,
"SurvivorFemale_Base") )
103 string survivor_path = config_name +
" " + survivor_name;
107 for ( j = 0; j < survivor_lifespan_count; j++ )
109 string survivor_lifespan_name =
"";
112 string survivor_lifespan_path = survivor_path +
" " + survivor_lifespan_name;
114 if ( survivor_lifespan_name ==
"Lifespan" )
118 for ( k = 0; k < survivor_lifespan_beard_count; k++ )
120 string survivor_lifespan_beard_name =
"";
123 string survivor_lifespan_beard_path = survivor_lifespan_path +
" " + survivor_lifespan_beard_name;
125 if ( survivor_lifespan_beard_name ==
"Beard" )
130 for ( l = 0; l < cfg_class_member_member_variable_count; l++ )
132 string survivor_lifespan_beard_material_name =
"";
134 string survivor_lifespan_beard_material_path = survivor_lifespan_beard_path +
" " + survivor_lifespan_beard_material_name;
136 if ( survivor_lifespan_beard_material_name ==
"mat" )
142 int level_count = materials.Count() / 2;
143 for ( m = 0; m < level_count; m++ )
147 if ( mat < materials.Count() )
150 lifespan_levels.Insert(
new LifespanLevel(m, threshold, materials.Get(tex), materials.Get(mat)) );
155 if ( lifespan_levels.Count() > 0 )
164 else if ( survivor_lifespan_name ==
"BloodyHands" )
166 string bloody_material, normal_material;
167 string path_normal = survivor_lifespan_path +
" mat_normal";
168 string path_bloody = survivor_lifespan_path +
" mat_blood";
209 if ( !
GetGame().IsMultiplayer() )
222 if ( player != NULL )
227 float player_playtime = player.StatGet(
"playtime");
234 float player_beard = player_playtime - player.GetLastShavedSeconds();
235 player_beard = player_beard / 60.0;
243 if ( !player.IsAlive() )
250 if ( player_beard > current_level.
GetThreshold() || force_update )
254 if ( next_level != NULL )
280 if ( lifespan_levels != NULL )
282 for (
int i = lifespan_levels.Count() - 1; i >= 0; i-- )
298 if (player.m_CorpseState != 0)
301 EntityAI players_head = player.GetInventory().FindPlaceholderForSlot( slot_id );
307 case LifeSpanState.BEARD_NONE:
309 players_head.SetObjectTexture( 0,
"");
310 players_head.SetObjectMaterial( 0,
"");
315 player.SetLifeSpanStateVisible(LifeSpanState.BEARD_NONE);
319 case LifeSpanState.BEARD_MEDIUM:
321 players_head.SetObjectTexture( 0,
"");
322 players_head.SetObjectMaterial( 0,
"");
327 player.SetLifeSpanStateVisible(LifeSpanState.BEARD_MEDIUM);
332 case LifeSpanState.BEARD_LARGE:
334 players_head.SetObjectTexture( 0,
"");
335 players_head.SetObjectMaterial( 0,
"");
340 player.SetLifeSpanStateVisible(LifeSpanState.BEARD_LARGE);
345 case LifeSpanState.BEARD_EXTRA:
351 LifespanLevel prev_level = lifespan_levels.Get(LifeSpanState.BEARD_LARGE);
356 player.SetLifeSpanStateVisible(LifeSpanState.BEARD_EXTRA);
363 Print(
"Lifespan state missing");
376 case LifeSpanState.BEARD_NONE:
382 case LifeSpanState.BEARD_MEDIUM:
389 case LifeSpanState.BEARD_LARGE:
396 case LifeSpanState.BEARD_EXTRA:
405 Print(
"Lifespan state missing");
441 player.SetBloodyHandsEx( type );
456 player.SetBloodyHands( show );
470 string player_class = player.GetPlayerClass();
477 eai = player.GetInventory().FindPlaceholderForSlot( slot_id );
481 eai.SetObjectMaterial( 0,
m_BloodyHands.Get(player_class).GetMaterial(material_type) );
492 return !player.FindAttachmentBySlotName(
"Gloves" ) );
501 player.SetBloodTypeVisible( show );
505 player.m_Hud.UpdateBloodName();
511 player.SetBloodType( blood_type );
protected int m_FakePlaytime
void UpdateBloodyHandsVisibility(PlayerBase player, bool show)
void SynchShowBloodTypeVisual(PlayerBase player, bool show)
protected void SetPlayerLifespanLevel(PlayerBase player, LifespanLevel level)
enum eBloodyHandsTypes COUNT
void UpdateLifespan(PlayerBase player, bool force_update=false)
void SynchBloodyHandsVisual(PlayerBase player, bool has_bloody_hands)
void SetBloodyHandsEx(PlayerBase player, eBloodyHandsTypes type)
protected ref map< string, ref BloodyHands > m_BloodyHands
void SynchLifespanVisual(PlayerBase player, int beard_state_visible, bool bloody_hands_visible, bool blood_type_visible, int blood_type)
void SynchBeardVisual(PlayerBase player, int state)
void UpdateBloodTypeVisibility(PlayerBase player, bool show)
void UpdateBloodType(PlayerBase player, int blood_type)
static protected const int LIFESPAN_MAX
enum eBloodyHandsTypes BEARD_MEDIUM
enum eBloodyHandsTypes BEARD_NONE
void ChangeFakePlaytime(PlayerBase player, int change)
string GetCurrentHeadMaterial(PlayerBase player)
enum eBloodyHandsTypes BEARD_LARGE
enum eBloodyHandsTypes LIFESPAN_MIN
string GetCurrentHeadTexture(PlayerBase player)
protected void UpdateLifespanLevel(PlayerBase player, float player_beard, bool force_update=false)
enum eBloodyHandsTypes BEARD_EXTRA
protected ref map< PlayerBase, ref LifespanLevel > m_PlayerCurrentLevel
protected LifespanLevel GetLifespanLevel(string player_class, float age=0)
protected ref map< PlayerBase, int > m_BloodType
void SetBloodyHands(PlayerBase player, bool show)
bool CanMakeHandsBloody(PlayerBase player)
protected void SetHandsMaterial(PlayerBase player, int material_type)
void UpdateBloodyHandsVisibilityEx(PlayerBase player, eBloodyHandsTypes type)
protected ref map< string, ref array< ref LifespanLevel > > m_LifespanLevels
void SynchShowBloodType(PlayerBase player, int blood_type)
PluginBase GetPlugin(typename plugin_type)
const int MATERIAL_TYPE_BLOODY
const int MATERIAL_TYPE_NORMAL
proto native int ConfigGetChildrenCount(string path)
Get count of subclasses in config class on path.
proto bool ConfigGetText(string path, out string value)
Get string value from config on path.
proto native void ConfigGetTextArray(string path, out TStringArray values)
Get array of strings from config on path.
proto bool ConfigGetChildName(string path, int index, out string name)
Get name of subclass in config class on path.
provides access to slot configuration
static proto native int GetSlotIdFromString(string slot_name)
converts string to slot_id
static PluginCameraTools GetInstance()
proto native CGame GetGame()
proto void Print(void var)
Prints content of variable to console/log.
array< string > TStringArray