コード例 #1
0
        public static void CheckTreeHatred(GameObject treeLogObject)
        {
            TreeLog treeLog = treeLogObject.GetComponent <TreeLog>();
            Player  player  = Player.GetClosestPlayer(treeLog.transform.position, 20f);

            if (!player)
            {
                return;
            }

            TreeHatredLevel level = GetTreeHatredLevel(player);

            if (level != null)
            {
                Debug.Log(string.Format("A{1} {0} tree is seeking vengence!", level.description, "aeiouAEIOU".IndexOf(level.description) >= 0 ? "n" : ""));

                VengefulTree vengefulTree = treeLogObject.AddComponent <VengefulTree>();
                vengefulTree.player = player;

                // Give it some fat 5x loot
                treeLog.m_dropWhenDestroyed.m_dropMin *= 5;
                treeLog.m_dropWhenDestroyed.m_dropMax *= 5;

                // Don't let it get stuck in the stump, move it up a bit
                treeLog.transform.position = treeLog.transform.position + .5f * Vector3.up;

                // Drop the velocity applied by the axe hit
                Rigidbody rigidbody = treeLog.GetComponent <Rigidbody>();
                rigidbody.ResetInertiaTensor();

                vengefulTree.StartCoroutine(vengefulTree.SeekVengence(forceMultiplier * level.force, level.duration));
            }
        }
コード例 #2
0
        public static TreeHatredLevel GetTreeHatredLevel(Player player)
        {
            float chanceOfVengence = .005f;

            if (Main.debugMode.Value)
            {
                chanceOfVengence = 99999f;
            }
            if (player.GetCurrentBiome() == Heightmap.Biome.BlackForest)
            {
                // Very spoopy envrionment, is only fitting that trees come alive more often there
                chanceOfVengence *= 2f;
            }
            if (Utility.TryParseAssemblyName("EasyTreesy", out AssemblyName asdfdsafads))
            {
                // Marks you as an enemy of treekind everywhere
                chanceOfVengence *= 5f;
            }
            string characterName = Game.instance.GetPlayerProfile().GetName().ToLower();

            if (characterName.Contains("steve") || characterName.StartsWith("ste"))
            {
                // Immortal legend that can destroy trees with his bare fists. Trees hate him.
                chanceOfVengence *= 5f;
            }

            if (Random.Range(0f, 1f) > chanceOfVengence)
            {
                return(null);
            }

            float totalChances = treeHatredLevels.Sum(item => item.chances);
            float chance       = Random.Range(0, totalChances);

            TreeHatredLevel selectedLevel = null;

            foreach (TreeHatredLevel level in treeHatredLevels)
            {
                selectedLevel = level;
                chance       -= level.chances;

                if (chance < 0)
                {
                    return(selectedLevel);
                }
            }
            return(selectedLevel);
        }