private BSItemData GetRandomObject(List <BSItemData> list, ItemID matching_item = ItemID.None) { if (list.Count == 0) { return(null); } float time = Time.time; for (int i = 0; i < list.Count; i++) { if (matching_item == ItemID.None || matching_item == list[i].m_ItemID) { BSItemData bsitemData = list[i]; float chance = bsitemData.m_Chance; if (UnityEngine.Random.Range(1f, 2f) < chance) { if (matching_item == ItemID.None) { return(bsitemData); } if (matching_item == bsitemData.m_ItemID) { return(bsitemData); } } } } return(null); }
private BSItemData GetObjectToAttach(ref string group, List <string> item_id_names) { group = string.Empty; if (PlayerSanityModule.Get().m_ItemHallucinationsEnabled&& this.m_ObjectsInArea["Sanity"].Count < PlayerSanityModule.Get().GetWantedItemsHallucinationsCount() && this.m_AttachmentData.ContainsKey("Sanity")) { group = "Sanity"; BSItemData randomObject = this.GetRandomObject(this.m_AttachmentData[group]); if (randomObject != null && item_id_names.Contains(randomObject.m_ItemID.ToString())) { return(randomObject); } } foreach (string text in this.m_Groups.Keys) { if (!(text == "Sanity")) { if (this.m_ObjectsInArea[text].Count < this.m_Groups[text]) { group = text; BSItemData randomObject2 = this.GetRandomObject(this.m_AttachmentData[group]); if (randomObject2 != null && item_id_names.Contains(randomObject2.m_ItemID.ToString())) { return(randomObject2); } } } } return(null); }
private BSItemData GetObjectToAttach(ref string group, List <string> item_id_names) { group = string.Empty; if (PlayerSanityModule.Get().m_ItemHallucinationsEnabled&& this.m_ObjectsInArea["Sanity"].Count < PlayerSanityModule.Get().GetWantedItemsHallucinationsCount() && this.m_AttachmentData.ContainsKey("Sanity")) { group = "Sanity"; BSItemData randomObject = this.GetRandomObject(this.m_AttachmentData[group], ItemID.None); if (randomObject != null && item_id_names.Contains(randomObject.m_ItemID.ToString())) { return(randomObject); } } foreach (string text in this.m_AttachmentData.Keys) { if (!(text == "Sanity")) { for (int i = 0; i < item_id_names.Count; i++) { BSItemData randomObject2 = this.GetRandomObject(this.m_AttachmentData[text], (ItemID)Enum.Parse(typeof(ItemID), item_id_names[i])); if (randomObject2 != null) { group = text; return(randomObject2); } } } } return(null); }
public void OnBalanceSpawnerEnter(GameObject obj, BalanceSpawner bs) { BalanceSystemObject objectInPos = this.m_QuadTree.GetObjectInPos(obj.transform.position); if (objectInPos == null) { if (bs != null && Time.time - bs.m_LastSpawnObjectTime < BalanceSystem.s_BalanceSpawnerCooldown) { return; } string empty = string.Empty; BSItemData objectToSpawn = this.GetObjectToSpawn(ref empty); GameObject gameObject = null; if (objectToSpawn != null) { gameObject = objectToSpawn.m_Prefab; } if (gameObject != null) { objectToSpawn.m_LastSpawnTime = Time.time; GameObject gameObject2 = UnityEngine.Object.Instantiate <GameObject>(gameObject, obj.transform.position, obj.transform.rotation); Item component = gameObject2.GetComponent <Item>(); if (component) { component.m_CanSave = false; } BalanceSystemObject balanceSystemObject = new BalanceSystemObject(); balanceSystemObject.m_GameObject = gameObject2; balanceSystemObject.m_Group = empty; balanceSystemObject.m_BalanceSpawner = bs.gameObject; this.m_QuadTree.InsertObject(balanceSystemObject); this.m_ObjectsInArea[empty].Add(balanceSystemObject); if (empty == "Sanity") { CJObject[] componentsInChildren = gameObject2.GetComponentsInChildren <CJObject>(); for (int i = 0; i < componentsInChildren.Length; i++) { componentsInChildren[i].m_Hallucination = true; } } else { bs.m_LastSpawnObjectTime = Time.time; } bs.m_LastCheckSpawnTime = Time.time; } } else { this.m_ObjectsInArea[objectInPos.m_Group].Add(objectInPos); } }
private BSItemData GetRandomObject(List <BSItemData> list) { if (list.Count == 0) { return(null); } this.m_TempList.Clear(); this.m_TempConditionList.Clear(); float time = Time.time; for (int i = 0; i < list.Count; i++) { BSItemData bsitemData = list[i]; float num = 0f; if (time - bsitemData.m_LastSpawnTime > bsitemData.m_Cooldown) { num += bsitemData.m_Chance; } else { num += bsitemData.m_CooldownChance; } float num2 = 0f; bool flag = this.m_BSConditionNextTime.TryGetValue((int)bsitemData.m_Condition, out num2); if (this.IsBSCondition(bsitemData.m_Condition, bsitemData.m_ConditionValue) && flag && Time.time > num2) { num += bsitemData.m_ConditionChance; this.m_TempConditionList.Add((int)bsitemData.m_Condition); } if (UnityEngine.Random.Range(0f, 1f) < num) { this.m_TempList.Add(bsitemData); } } if (this.m_TempList.Count > 0) { BSItemData bsitemData2 = this.m_TempList[UnityEngine.Random.Range(0, this.m_TempList.Count)]; if (this.m_TempConditionList.Contains((int)bsitemData2.m_Condition)) { this.SetBSConditionCooldown((int)bsitemData2.m_Condition); } return(bsitemData2); } return(null); }
private BSItemData GetObjectToSpawn(ref string group, BalanceSystemObject bso = null) { group = string.Empty; if (bso != null && bso.m_ItemID != ItemID.None) { BSItemData bsitemData = null; foreach (string text in this.m_SpawnData.Keys) { if (!(text == "Sanity")) { for (int i = 0; i < this.m_SpawnData[text].Count; i++) { if (bso.m_ItemID == this.m_SpawnData[text][i].m_ItemID) { group = text; bsitemData = this.m_SpawnData[text][i]; break; } } } } if (bsitemData != null) { return(bsitemData); } } if (PlayerSanityModule.Get().m_ItemHallucinationsEnabled&& this.m_ObjectsInArea["Sanity"].Count < PlayerSanityModule.Get().GetWantedItemsHallucinationsCount()) { group = "Sanity"; return(this.GetRandomObject(this.m_SpawnData[group], ItemID.None)); } foreach (string text2 in this.m_SpawnData.Keys) { if (!(text2 == "Sanity")) { BSItemData randomObject = this.GetRandomObject(this.m_SpawnData[text2], ItemID.None); if (randomObject != null) { group = text2; return(randomObject); } } } return(null); }
private void TryToAttach(BalanceAttachmentSpawner bs, BalanceSystemObject bso) { string empty = string.Empty; BSItemData objectToAttach = this.GetObjectToAttach(ref empty, bs.m_ItemIDNamesList); if (objectToAttach != null) { int childNum = -1; GameObject gameObject = bs.TryToAttach(objectToAttach.m_ItemID, out childNum); if (gameObject != null) { objectToAttach.m_LastSpawnTime = Time.time; BalanceSystemObject balanceSystemObject = (bso != null) ? bso : new BalanceSystemObject(); balanceSystemObject.m_Group = empty; balanceSystemObject.m_ChildNum = childNum; balanceSystemObject.m_ItemID = objectToAttach.m_ItemID; balanceSystemObject.m_BalanceSpawner = bs.gameObject; balanceSystemObject.m_GameObject = gameObject; balanceSystemObject.m_Position = bs.transform.position; this.m_ObjectsInArea[empty].Add(balanceSystemObject); this.m_QuadTree.InsertObject(balanceSystemObject); if (empty == "Sanity") { CJObject[] componentsInChildren = gameObject.GetComponentsInChildren <CJObject>(); for (int i = 0; i < componentsInChildren.Length; i++) { componentsInChildren[i].m_Hallucination = true; } } else { balanceSystemObject.m_LastSpawnObjectTime = Time.time; } } } }
private void ParseScript() { ScriptParser scriptParser = new ScriptParser(); scriptParser.Parse("Balance/Balance.txt", true); for (int i = 0; i < scriptParser.GetKeysCount(); i++) { Key key = scriptParser.GetKey(i); if (key.GetName() == "Prefab") { BSItemData bsitemData = new BSItemData(); bsitemData.m_PrefabName = key.GetVariable(0).SValue; bsitemData.m_Prefab = GreenHellGame.Instance.GetPrefab(bsitemData.m_PrefabName); Item component = bsitemData.m_Prefab.GetComponent <Item>(); DebugUtils.Assert(component != null, true); string[] array = key.GetVariable(2).SValue.Split(new char[] { ';' }); foreach (string key2 in array) { if (!this.m_Groups.ContainsKey(key2)) { this.m_Groups.Add(key2, 3); } if (key.GetVariable(1).SValue == "Spawn") { if (!this.m_SpawnData.ContainsKey(key2)) { this.m_SpawnData.Add(key2, new List <BSItemData>()); } this.m_SpawnData[key2].Add(bsitemData); } else if (key.GetVariable(1).SValue == "Attachment") { if (!this.m_AttachmentData.ContainsKey(key2)) { this.m_AttachmentData.Add(key2, new List <BSItemData>()); } this.m_AttachmentData[key2].Add(bsitemData); } } for (int k = 0; k < key.GetKeysCount(); k++) { Key key3 = key.GetKey(k); if (key3.GetName() == "ItemID") { bsitemData.m_ItemID = (ItemID)Enum.Parse(typeof(ItemID), key3.GetVariable(0).SValue); } else if (key3.GetName() == "Chance") { bsitemData.m_Chance = key3.GetVariable(0).FValue; } else if (key3.GetName() == "Condition") { bsitemData.m_Condition = (BSCondition)Enum.Parse(typeof(BSCondition), key3.GetVariable(0).SValue); } else if (key3.GetName() == "ConditionValue") { bsitemData.m_ConditionValue = key3.GetVariable(0).FValue; } else if (key3.GetName() == "ConditionChance") { bsitemData.m_ConditionChance = key3.GetVariable(0).FValue; } else if (key3.GetName() == "Cooldown") { bsitemData.m_Cooldown = key3.GetVariable(0).FValue; } else if (key3.GetName() == "CooldownChance") { bsitemData.m_CooldownChance = key3.GetVariable(0).FValue; } } } } }
private void ParseScript() { ScriptParser scriptParser = new ScriptParser(); string text = "Balance/Balance_"; text += this.GetFilePostfix(); text += ".txt"; int num = 0; scriptParser.Parse(text, true); if (scriptParser.GetKeysCount() == 0 && (ChallengesManager.Get().m_ActiveChallengeName.Length > 0 || ChallengesManager.Get().m_ChallengeToActivate.Length > 0)) { text = "Balance/Balance_"; text += "Hard"; text += ".txt"; scriptParser.Parse(text, true); } for (int i = 0; i < scriptParser.GetKeysCount(); i++) { Key key = scriptParser.GetKey(i); if (key.GetName() == "Prefab") { BSItemData bsitemData = new BSItemData(); bsitemData.m_PrefabName = key.GetVariable(0).SValue; bsitemData.m_Prefab = GreenHellGame.Instance.GetPrefab(bsitemData.m_PrefabName); DebugUtils.Assert(bsitemData.m_Prefab.GetComponent <Item>() != null, true); string[] array = key.GetVariable(2).SValue.Split(new char[] { ';' }); foreach (string text2 in array) { if (!this.m_Groups.ContainsKey(text2)) { this.m_Groups.Add(text2, new BalanceSystem20.GroupProps(text2, 3, num++)); } if (key.GetVariable(1).SValue == "Spawn") { if (!this.m_SpawnData.ContainsKey(text2)) { this.m_SpawnData.Add(text2, new List <BSItemData>()); } this.m_SpawnData[text2].Add(bsitemData); } else if (key.GetVariable(1).SValue == "Attachment") { if (!this.m_AttachmentData.ContainsKey(text2)) { this.m_AttachmentData.Add(text2, new List <BSItemData>()); } this.m_AttachmentData[text2].Add(bsitemData); } } for (int k = 0; k < key.GetKeysCount(); k++) { Key key2 = key.GetKey(k); if (key2.GetName() == "ItemID") { bsitemData.m_ItemID = (ItemID)Enum.Parse(typeof(ItemID), key2.GetVariable(0).SValue); } else if (key2.GetName() == "BaseChance") { bsitemData.m_BaseChance = key2.GetVariable(0).FValue; } else if (key2.GetName() == "IncRate") { bsitemData.m_IncRate = key2.GetVariable(0).FValue; } else if (key2.GetName() == "Func") { bsitemData.m_Func = null; } else if (key2.GetName() == "WalkRange") { bsitemData.m_WalkRange = key2.GetVariable(0).FValue; } else if (key2.GetName() == "WalkRangeValue") { bsitemData.m_WalkRangeValue = key2.GetVariable(0).FValue; } else if (key2.GetName() == "HaveItem") { array = key2.GetVariable(0).SValue.Split(new char[] { ';' }); for (int l = 0; l < array.Length; l++) { bsitemData.m_HaveItemID.Add((int)Enum.Parse(typeof(ItemID), array[l])); } } else if (key2.GetName() == "HaveItemCount") { bsitemData.m_HaveItemCount = key2.GetVariable(0).IValue; } else if (key2.GetName() == "HaveItemNegativeEffect") { bsitemData.m_HaveItemNegativeEffect = key2.GetVariable(0).FValue; } } bsitemData.m_ChanceAccu = bsitemData.m_BaseChance; if (bsitemData.m_ItemID == ItemID.None) { EnumUtils <ItemID> .TryGetValue(bsitemData.m_PrefabName, out bsitemData.m_ItemID); } } } }
private void OnObjectSpawned(BSItemData data, BalanceSpawner bs) { data.m_LastSpawnPos = bs.transform.position; data.m_ChanceAccu = 0f; }
private void TryToAttach(BalanceAttachmentSpawner bs, BalanceSystemObject bso) { if (this.IsDeserializingNetworkData() && bso != null) { Item item = bs.Attach(bso.m_ItemID, bso.m_ChildNum, bso.m_ActiveChildrenMask); if (item) { bso.m_GameObject = item.gameObject; return; } } else { string empty = string.Empty; BSItemData bsitemData = (bso != null) ? this.GetObjectToAttach(ref empty, new List <string> { EnumUtils <ItemID> .GetName(bso.m_ItemID) }) : this.GetObjectToAttach(ref empty, bs.m_ItemIDNamesList); if (bsitemData != null) { int childNum = -1; GameObject gameObject = bs.TryToAttach(bsitemData.m_ItemID, out childNum); if (gameObject != null) { this.OnObjectSpawned(bsitemData, bs); bsitemData.m_LastSpawnTime = Time.time; BalanceSystemObject balanceSystemObject = bso ?? new BalanceSystemObject(); balanceSystemObject.m_Group = this.m_Groups[empty]; balanceSystemObject.m_ChildNum = childNum; balanceSystemObject.m_ItemID = bsitemData.m_ItemID; balanceSystemObject.m_BalanceSpawner = bs.gameObject; balanceSystemObject.m_GameObject = gameObject; balanceSystemObject.m_Position = bs.transform.position; balanceSystemObject.m_AllChildrenDestroyed = false; this.m_ObjectsInArea[empty].Add(balanceSystemObject); this.m_QuadTree.InsertObject(balanceSystemObject); if (bso == null) { this.DetachActiveRigidbodies(gameObject); this.SetupActiveChildrenMask(gameObject, ref balanceSystemObject.m_ActiveChildrenMask); } else { this.ApplyActiveChildrenMask(balanceSystemObject); } if (empty == "Sanity") { CJObject[] componentsInChildren = gameObject.GetComponentsInChildren <CJObject>(); for (int i = 0; i < componentsInChildren.Length; i++) { componentsInChildren[i].m_Hallucination = true; } } else { balanceSystemObject.m_LastSpawnObjectTime = Time.time; } if (!this.IsDeserializingNetworkData()) { ReplicatedBalanceObjects.OnObjectChanged(balanceSystemObject); return; } } } else { bs.m_LastNoSpawnObjectTime = Time.time; } } }
private void SpawnObject(GameObject spawner_obj, BalanceSpawner bs, BalanceSystemObject bso = null) { string empty = string.Empty; BSItemData objectToSpawn = this.GetObjectToSpawn(ref empty, bso); GameObject gameObject = null; if (objectToSpawn != null) { gameObject = objectToSpawn.m_Prefab; this.OnObjectSpawned(objectToSpawn, bs); } else { bs.m_LastNoSpawnObjectTime = Time.time; } if (gameObject != null) { objectToSpawn.m_LastSpawnTime = Time.time; GameObject gameObject2 = (bso != null) ? bso.m_GameObject : null; if (gameObject2 == null && spawner_obj != null) { gameObject2 = UnityEngine.Object.Instantiate <GameObject>(gameObject, spawner_obj.transform.position, spawner_obj.transform.rotation); Item component = gameObject2.GetComponent <Item>(); if (component) { component.m_CanSaveNotTriggered = false; Item[] componentsInChildren = component.GetComponentsInChildren <Item>(); for (int i = 0; i < componentsInChildren.Length; i++) { componentsInChildren[i].m_CanSaveNotTriggered = false; } } } BalanceSystemObject balanceSystemObject = bso ?? new BalanceSystemObject(); balanceSystemObject.m_GameObject = gameObject2; balanceSystemObject.m_Group = this.m_Groups[empty]; balanceSystemObject.m_BalanceSpawner = bs.gameObject; balanceSystemObject.m_Position = bs.transform.position; balanceSystemObject.m_ItemID = objectToSpawn.m_ItemID; this.m_QuadTree.InsertObject(balanceSystemObject); if (!this.m_ObjectsInArea[empty].Contains(balanceSystemObject)) { this.m_ObjectsInArea[empty].Add(balanceSystemObject); } if (empty == "Sanity") { CJObject[] array = (gameObject2 != null) ? gameObject2.GetComponentsInChildren <CJObject>() : null; for (int j = 0; j < array.Length; j++) { array[j].m_Hallucination = true; } } else { bs.m_LastSpawnObjectTime = Time.time; } this.ApplyActiveChildrenMask(balanceSystemObject); if (!this.IsDeserializingNetworkData() && bso == null) { ReplicatedBalanceObjects.OnObjectChanged(balanceSystemObject); } } }