Пример #1
0
    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);
    }
Пример #2
0
 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);
 }
Пример #3
0
 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);
 }
Пример #4
0
    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);
        }
    }
Пример #5
0
    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);
    }
Пример #6
0
 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);
 }
Пример #7
0
    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;
                }
            }
        }
    }
Пример #8
0
    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;
                    }
                }
            }
        }
    }
Пример #9
0
    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);
                }
            }
        }
    }
Пример #10
0
 private void OnObjectSpawned(BSItemData data, BalanceSpawner bs)
 {
     data.m_LastSpawnPos = bs.transform.position;
     data.m_ChanceAccu   = 0f;
 }
Пример #11
0
 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;
         }
     }
 }
Пример #12
0
    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);
            }
        }
    }