10 [
Attribute(
"#AR-CharacterIdentity_DateFormating",
desc:
"Date formatting %1 = day %2 = month %3 = year %4 = age", uiwidget:
UIWidgets.LocaleEditBox,
category:
"Settings")]
13 [
Attribute(
"#AR-Date_Format_MonthFull",
desc:
"Date formatting %1 = day %2 = month %3 = year", uiwidget:
UIWidgets.LocaleEditBox,
category:
"Settings")]
16 [
Attribute(
"{6075C04F05460FB4}Configs/Identities/BloodTypes.conf",
desc:
"Holds an array of all possible bloodtypes with randomization weight. Keep combined randomization weight at 100 for ease of use",
params:
"conf class=SCR_BloodTypeHolderConfig",
category:
"Data")]
19 [
Attribute(
desc:
"Holds Identity groups for each type. Create one entry for each type. ONLY ONE HOLDER PER INDENTIY TYPE!",
params:
"conf class=SCR_IdentityBioTypeHolderConfig",
category:
"Data")]
25 [
Attribute(
"1",
desc:
"If true the identity item will be added to a special slot. (m_eIdentityItemGenerationType on Possession flags needs to be set to enable the slot). The identity item cannot be removed unless the player dies.",
category:
"Settings")]
28 [
Attribute(
"0",
desc:
"If true valuable intel will be generated on identity documentation which can be exchanged at arsenals (Will only generate the intel when taken it from arsenal if m_bAddIdentityItemToInventories is false)",
category:
"Settings")]
31 [
Attribute(
"1",
desc:
"If true will show player name instead of Bio name on the identity item of players",
category:
"Settings")]
38 [
Attribute(
"-1",
desc:
"Workbench only. Seed overwrite forces all generated Identities to use the same given seed for debugging purposes. Set to any value greater than -1 to enable overwrite",
category:
"Debug")]
40 [
Attribute(
"-1",
desc:
"Workbench only. Forced all assigned bio's to use this value as bio group index for debugging purposes. Set to any value that is greater than -1 to enable overwrite",
category:
"Debug")]
42 [
Attribute(
"-1",
desc:
"Workbench only. Forced all assigned bio's to use this value as bio index for debugging purposes. Set to any value that is greater than -1 to enable overwrite",
category:
"Debug")]
73 if (bioTypeHolder && bioTypeHolder.m_eIdentityType == identityType)
87 if (bioGroupID.IsEmpty())
92 if (!foundBioTypeHolder || foundBioTypeHolder.m_aIdentityBioGroups.IsEmpty())
101 PrintFormat(
"'SCR_CharacterIdentityManagerComponent' bio group '%1' could not be found in 'm_aIdentityBioGroups' for type '%2'", bioGroupID,
typename.EnumToString(
SCR_EIdentityType, identityType), level:
LogLevel.WARNING);
114 if (bioGroupIndex < 0)
118 if (!foundBioTypeHolder)
121 if (bioGroupIndex >= foundBioTypeHolder.m_aIdentityBioGroups.Count())
124 return foundBioTypeHolder.m_aIdentityBioGroups[bioGroupIndex].GetIdentityBio(entity, bioIndex);
157 validBioGroups.Clear();
160 if (!foundBioTypeHolder)
168 if (extendedCharIdentity && extendedCharIdentity.
GetPlayerID() > 0)
180 validBioGroups.Insert(bioGroup);
184 if (!validBioGroups.IsEmpty())
185 return validBioGroups.Count();
195 validBioGroups.Insert(bioGroup);
198 return validBioGroups.Count();
216 array<ref SCR_IdentityBioGroupConfig> validBioGroups = {};
217 int count =
GetValidBioGroups(entity, identityType, factionIndex, validBioGroups);
219 if (validBioGroups.IsEmpty())
222 int randomValidBioIndex = -1;
225 if (useRandomWeighted)
232 totalWeight+= bioGroup.GetWeight();
236 int randomWeight = randomizer.RandIntInclusive(0, totalWeight);
237 int checkedWeight = 0;
240 for(
int i = 0; i < count; i++)
245 randomValidBioIndex = i;
249 checkedWeight += validBioGroups[i].GetWeight();
250 if (randomWeight <= checkedWeight)
252 randomValidBioIndex = i;
260 randomValidBioIndex = randomizer.RandInt(0, count);
263 bioGroupIndex =
GetBioGroupIndexFromID(identityType, validBioGroups[randomValidBioIndex].GetBioGroupID());
266 if (!foundBioTypeHolder)
270 foundBioTypeHolder.m_aIdentityBioGroups[bioGroupIndex].AssignRandomAvailableBio(randomizer, entity, bioIndex, bio);
286 if (!foundBioTypeHolder)
289 if (bioGroupIndex < 0 || bioGroupIndex >= foundBioTypeHolder.m_aIdentityBioGroups.Count())
292 return foundBioTypeHolder.m_aIdentityBioGroups[bioGroupIndex].OnCharacterBioAssigned(entity, bioIndex);
311 if (!extendedIdentity)
318 age = extendedIdentity.
GetAge().ToString();
320 return !(day.IsEmpty() && month.IsEmpty() && year.IsEmpty() && age.IsEmpty());
333 if (!extendedIdentity)
349 if (!extendedIdentity)
368 if (!extendedIdentity)
385 if (!identityComponent)
389 if (!charExtendedIdentity)
392 int day, month, year, hour, minute;
400 dayString = day.ToString();
402 yearString = year.ToString();
419 array<SCR_CharacterIdentityBloodType> bloodTypes = {};
422 if (!useWeightedRandom)
429 return randomizer.RandInt(0, count);
433 return Math.RandomInt(0, count);
442 totalWeight += bloodtype.GetWeight();
449 randomWeight = randomizer.RandIntInclusive(0, totalWeight);
451 randomWeight =
Math.RandomIntInclusive(0, totalWeight);
453 int checkedWeight = 0;
462 checkedWeight += bloodtype.GetWeight();
463 if (randomWeight <= checkedWeight)
488 if (extendedIdentity)
489 extendedIdentity.
SetPlayerID(requestComponent.GetPlayerId());
491 return super.PreparePlayerEntity_S(requestComponent, handlerComponent,
data, entity);
511 if (checkIfHadSpawnedIdentityItem)
520 if (!inventoryManager)
524 SCR_EntityCatalogManagerComponent catalogManager = SCR_EntityCatalogManagerComponent.GetInstance();
529 ResourceName identityItemPrefab = catalogManager.GetIdentityItemForCharacter(character);
530 if (identityItemPrefab.IsEmpty())
534 if (!inventoryManager.CanInsertResource(identityItemPrefab))
539 character.GetTransform(
params.Transform);
549 if (characterStorage)
552 if (jacket && inventoryManager.TryInsertItemInStorage(identityItem, BaseInventoryStorageComponent.Cast(jacket.
FindComponent(BaseInventoryStorageComponent))))
558 if (!inventoryManager.TryInsertItem(identityItem))
617 if (!playerController)
630 if (!playerController)
645 int playerID = playerController.GetPlayerId();
671 SCR_HintManagerComponent hintManager = SCR_HintManagerComponent.GetInstance();
680 hintManager.Show(hint);
692 Print(
"'SCR_CharacterIdentityManagerComponent' could not find 'TimeAndWeatherManagerEntity' which it needs to function!",
LogLevel.ERROR);
697 Print(
"'SCR_CharacterIdentityManagerComponent' could not find 'SCR_FactionManager' which it needs to function!",
LogLevel.ERROR);
710 Print(
"Multiple instances of SCR_IdentityManagerComponent detected! Only one is allowed!",
LogLevel.WARNING);
728 Print(
"'SCR_IdentityManagerComponent' failed to load one of the Identity Configs!",
LogLevel.ERROR);
742 Print(
string.Format(
"'SCR_IdentityManagerComponent' Bio group holder has '%1' entity type! This should not happen!",
typename.EnumToString(
SCR_EIdentityType, holder.m_eIdentityType)),
LogLevel.ERROR);
746 if (holderCheck != holder && holderCheck.m_eIdentityType == holder.m_eIdentityType)
748 Print(
string.Format(
"'SCR_IdentityManagerComponent' one or more bio group holder of the same Identity type: '%1' in array. Each Identity Type can only have one holder!",
typename.EnumToString(
SCR_EIdentityType, holder.m_eIdentityType)),
LogLevel.ERROR);
759 Print(
string.Format(
"'SCR_IdentityManagerComponent' Identity group in type '%1' has empty ID string!",
typename.EnumToString(
SCR_EIdentityType, holder.m_eIdentityType)),
LogLevel.WARNING);
765 Print(
string.Format(
"'SCR_IdentityManagerComponent' Identity group in type '%1' has duplicate or empty ID: '%2' in array. Each Identity group needs to have an unique ID!",
typename.EnumToString(
SCR_EIdentityType, holder.m_eIdentityType), identityBioGroupCheck.
GetBioGroupID()),
LogLevel.ERROR);
772 super.OnPostInit(owner);
ArmaReforgerScripted GetGame()
enum EAIGroupCombatMode ComponentEditorProps(category:"GameScripted/AI", description:"Component for utility AI system for groups")
SCR_BaseGameMode GetGameMode()
void SCR_BaseGameModeComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
SCR_ECharacterDeathStatusRelations
Get all prefabs that have the spawner data
void SCR_FactionManager(IEntitySource src, IEntity parent)
SCR_EIdentityItemGenerationType
When will the identity item be generated on the character.
@ ON_DEATH
When an character dies an identity item will be added to his/her inventory. If no Identity item was e...
@ ON_UNCONSCIOUS
When an character falls unconscious an identity item will be added to his/her inventory....
@ ON_POSSESSION
When an character is possessed by a player (On player spawned or GM possessing) and it has never had ...
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
proto external Managed FindComponent(typename typeName)
Object holding reference to resource. In destructor release the resource.
void OnCharacterDeath()
Called by SCR_CharacterIdentityManagerComponent when character dies (Server Only).
void SetPlayerID(int playerId)
Set this character player ID. Handled in the preparing of this character by the SCR_IdentityManagerCo...
bool WasIdentityItemAddedOnce_S()
bool GetDeathDateAndTime(out int deathDay, out int deathMonth, out int deathYear, out int deathHour, out int deathMinute)
SCR_ExtendedIdentity GetExtendedIdentity()
bool IsValidForRandomization(IEntity entity, SCR_ExtendedIdentityComponent extendedIdentity)
bool IsValidFaction(string factionKey)
static const int MAX_IDENTITY_ENTRIES
bool IsCreationDay(SCR_ExtendedIdentityComponent identityComponent)
bool GetCreationdayString(SCR_ExtendedIdentityComponent identityComponent, out string format, out string day, out string month, out string year, out string age)
void OnCharacterBecomeUnconscious(IEntity character)
LocalizedString m_sDateDeathFormat
SCR_UIInfo GetBloodTypeUIInfo(SCR_EBloodType bloodType)
void OnValuableIntelHandIn_RPL(int playerID)
int m_DebugBioIndexOverwrite
static SCR_IdentityManagerComponent GetInstance()
override void OnPostInit(IEntity owner)
SCR_IdentityBio GetBioFromIndexes(IEntity entity, SCR_EIdentityType identityType, int bioGroupIndex, int bioIndex)
int GetValidBioGroups(IEntity entity, SCR_EIdentityType identityType, int factionIndex, notnull array< ref SCR_IdentityBioGroupConfig > validBioGroups)
ref SCR_GeneralHintStorage m_ExtendedIdentityHints
ref array< ref SCR_IdentityBioTypeHolderConfig > m_aIdentityBioTypeHolders
static SCR_IdentityManagerComponent m_sInstance
void OnCharacterPossessed(IEntity entity)
override void OnPlayerDisconnected(int playerId, KickCauseCode cause, int timeout)
static bool Static_IsGenerateValuableIntelEnabled()
bool m_bEnableIdentityItemSlot
bool IsIdentityItemSlotEnabled()
int GetBioGroupIndexFromID(SCR_EIdentityType identityType, string bioGroupID)
LocalizedString m_sBirthDateFormat
static const int MAX_IDENTITY_GROUPS
void ShowHint(EHint hintType)
Show Extended Identity specific hints.
override void EOnInit(IEntity owner)
bool IsGenerateValuableIntelEnabled()
override void OnPlayerConnected(int playerId)
void OnValuableIntelHandIn_S(notnull PlayerController playerController)
SCR_IdentityBio AssignRandomAvailableBio(RandomGenerator randomizer, IEntity entity, SCR_EIdentityType identityType, int factionIndex, out int bioGroupIndex, out int bioIndex, bool useRandomWeighted=true)
ref array< ResourceName > m_aIdentityBioTypeHoldersConfigs
int m_DebugRandomizeSeedOverwrite
override void OnControllableDestroyed(notnull SCR_InstigatorContextData instigatorContextData)
override bool PreparePlayerEntity_S(SCR_SpawnRequestComponent requestComponent, SCR_SpawnHandlerComponent handlerComponent, SCR_SpawnData data, IEntity entity)
SCR_EIdentityItemGenerationType m_eIdentityItemGenerationType
bool ShowPlayerNameOnIdentityItem()
ResourceName m_sCharacterIdentityBloodTypeConfig
int GetRandomBloodTypeIndex(RandomGenerator randomizer=null, bool useWeightedRandom=true)
ref SCR_BloodTypeHolderConfig m_BloodTypeHolder
int CombineBioIndexes(int bioGroupIndex, int bioIndex)
void SpawnIdentityItemInInventory_S(ChimeraCharacter character, bool checkIfHadSpawnedIdentityItem=true)
int GetYearOfCreation(SCR_ExtendedIdentityComponent identityComponent)
SCR_FactionManager m_FactionManager
int m_DebugBioGroupIndexOverwrite
const string HAND_IN_VALUABLE_INTEL_SOUNDEVENT
void GetBioIndexesFromCombined(int combinedIndexes, out int bioGroupIndex, out int bioIndex)
SCR_IdentityBio AssignBioManually(IEntity entity, SCR_EIdentityType identityType, int bioGroupIndex, int bioIndex)
SCR_IdentityBioTypeHolderConfig GetIdentityBioHolder(SCR_EIdentityType identityType)
TimeAndWeatherManagerEntity m_TimeAndWeatherManager
bool HasIdentityItemGenerationType(SCR_EIdentityItemGenerationType type)
bool m_bGenerateValuableIntel
bool GetDeathDateAndTimeString(SCR_ExtendedCharacterIdentityComponent identityComponent, out string formatDate, out string dayString, out string monthString, out string yearString, out string time)
bool m_bShowPlayerNameOnIdentityItem
ref OnPossessedInvoker m_OnPossessed
static int GetLocalPlayerId()
Returns either a valid ID of local player or 0.
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
proto void PrintFormat(string fmt, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL, LogLevel level=LogLevel.NORMAL)
SCR_FieldOfViewSettings Attribute
EntityEvent
Various entity events.
proto external PlayerController GetPlayerController()
void RplRpc(RplChannel channel, RplRcver rcver, RplCondition condition=RplCondition.None, string customConditionName="")
RplChannel
Communication channel. Reliable is guaranteed to be delivered. Unreliable not.