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)); } }
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); }