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() )
229 float playerBeard = playerPlaytime - player.GetLastShavedSeconds();
230 playerBeard = playerBeard / 60.0;
238 if ( !player.IsAlive() )
245 if ( player_beard > current_level.
GetThreshold() || force_update )
249 if ( next_level != NULL )
275 if ( lifespan_levels != NULL )
277 for (
int i = lifespan_levels.Count() - 1; i >= 0; i-- )
293 if (player.m_CorpseState != 0)
296 EntityAI players_head = player.GetInventory().FindPlaceholderForSlot( slot_id );
302 case LifeSpanState.BEARD_NONE:
304 players_head.SetObjectTexture( 0,
"");
305 players_head.SetObjectMaterial( 0,
"");
310 player.SetLifeSpanStateVisible(LifeSpanState.BEARD_NONE);
314 case LifeSpanState.BEARD_MEDIUM:
316 players_head.SetObjectTexture( 0,
"");
317 players_head.SetObjectMaterial( 0,
"");
322 player.SetLifeSpanStateVisible(LifeSpanState.BEARD_MEDIUM);
327 case LifeSpanState.BEARD_LARGE:
329 players_head.SetObjectTexture( 0,
"");
330 players_head.SetObjectMaterial( 0,
"");
335 player.SetLifeSpanStateVisible(LifeSpanState.BEARD_LARGE);
340 case LifeSpanState.BEARD_EXTRA:
346 LifespanLevel prev_level = lifespan_levels.Get(LifeSpanState.BEARD_LARGE);
351 player.SetLifeSpanStateVisible(LifeSpanState.BEARD_EXTRA);
358 Print(
"Lifespan state missing");
371 case LifeSpanState.BEARD_NONE:
377 case LifeSpanState.BEARD_MEDIUM:
384 case LifeSpanState.BEARD_LARGE:
391 case LifeSpanState.BEARD_EXTRA:
400 Print(
"Lifespan state missing");
436 player.SetBloodyHandsEx( type );
451 player.SetBloodyHands( show );
465 string player_class = player.GetPlayerClass();
472 eai = player.GetInventory().FindPlaceholderForSlot( slot_id );
476 eai.SetObjectMaterial( 0,
m_BloodyHands.Get(player_class).GetMaterial(material_type) );
487 return !player.FindAttachmentBySlotName(
"Gloves" ) );
496 player.SetBloodTypeVisible( show );
500 player.m_Hud.UpdateBloodName();
506 player.SetBloodType( blood_type );
void SetPlayerLifespanLevel(PlayerBase player, LifespanLevel level)
void UpdateBloodyHandsVisibility(PlayerBase player, bool show)
void SynchShowBloodTypeVisual(PlayerBase player, bool show)
static const int LIFESPAN_MAX
void UpdateLifespan(PlayerBase player, bool force_update=false)
void SynchBloodyHandsVisual(PlayerBase player, bool has_bloody_hands)
void SetBloodyHandsEx(PlayerBase player, eBloodyHandsTypes type)
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)
ref map< PlayerBase, int > m_BloodType
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)
void SetHandsMaterial(PlayerBase player, int material_type)
ref map< string, ref BloodyHands > m_BloodyHands
void UpdateLifespanLevel(PlayerBase player, float player_beard, bool force_update=false)
enum eBloodyHandsTypes BEARD_EXTRA
void SetBloodyHands(PlayerBase player, bool show)
bool CanMakeHandsBloody(PlayerBase player)
LifespanLevel GetLifespanLevel(string player_class, float age=0)
ref map< string, ref array< ref LifespanLevel > > m_LifespanLevels
void UpdateBloodyHandsVisibilityEx(PlayerBase player, eBloodyHandsTypes type)
ref map< PlayerBase, ref LifespanLevel > m_PlayerCurrentLevel
void SynchShowBloodType(PlayerBase player, int blood_type)
PluginBase GetPlugin(typename plugin_type)
const string STAT_PLAYTIME
const int MATERIAL_TYPE_BLOODY
const int MATERIAL_TYPE_NORMAL
proto bool ConfigGetChildName(string path, int index, out string name)
Get name of subclass in config class on path.
proto native void ConfigGetTextArray(string path, out TStringArray values)
Get array of strings from config on path.
proto bool ConfigGetText(string path, out string value)
Get string value from config on path.
proto native int ConfigGetChildrenCount(string path)
Get count of subclasses in config class on path.
static proto native int GetSlotIdFromString(string slot_name)
converts string to slot_id
provides access to slot configuration
static PluginCameraTools GetInstance()
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto native CGame GetGame()
proto void Print(void var)
Prints content of variable to console/log.
array< string > TStringArray