public static bool _OnDealDamage_Prefix(BaseEnchantment __instance, string ____displayName, Monster monster, GameLocation location, Farmer who, ref int amount) { if (!(__instance is BaseWeaponEnchantment) || ____displayName == null || ____displayName == "" || !ModEntry.advancedEnchantments.ContainsKey(____displayName) || (ModEntry.EnchantmentTriggers.ContainsKey(who.uniqueMultiplayerID + ____displayName) && ModEntry.EnchantmentTriggers[who.uniqueMultiplayerID + ____displayName] == Game1.ticks)) { return(true); } AdvancedEnchantmentData enchantment = ModEntry.advancedEnchantments[____displayName]; if (enchantment?.parameters?.ContainsKey("trigger") != true) { return(true); } if (enchantment.parameters["trigger"] == "damage" || (enchantment.parameters["trigger"] == "crit" && amount > (who.CurrentTool as MeleeWeapon).maxDamage) && !Environment.StackTrace.Contains("OnCalculateDamage")) { context.Monitor.Log($"Triggered enchantment {enchantment.name} on {enchantment.parameters["trigger"]} {amount} {(who.CurrentTool as MeleeWeapon).enchantments.Count}"); ModEntry.EnchantmentTriggers[who.uniqueMultiplayerID + ____displayName] = Game1.ticks; if (enchantment.type == "heal") { if (Game1.random.NextDouble() < float.Parse(enchantment.parameters["chance"]) / 100f) { int heal = Math.Max(1, (int)(amount * float.Parse(enchantment.parameters["amountMult"]))); who.health = Math.Min(who.maxHealth, Game1.player.health + heal); location.debris.Add(new Debris(heal, new Vector2((float)Game1.player.getStandingX(), (float)Game1.player.getStandingY()), Color.Lime, 1f, who)); if (enchantment.parameters.ContainsKey("sound")) { Game1.playSound(enchantment.parameters["sound"]); } } } else if (enchantment.type == "coins") { if (Game1.random.NextDouble() < float.Parse(enchantment.parameters["chance"]) / 100f) { float mult = float.Parse(enchantment.parameters["amountMult"]); int coins = (int)Math.Round(mult * amount); who.Money += coins; if (enchantment.parameters.ContainsKey("sound")) { Game1.playSound(enchantment.parameters["sound"]); } } } } return(false); }
public static bool _OnMonsterSlay_Prefix(BaseEnchantment __instance, string ____displayName, Monster m, GameLocation location, Farmer who) { if (!(__instance is BaseWeaponEnchantment) || ____displayName == null || !ModEntry.advancedEnchantments.ContainsKey(____displayName) || (ModEntry.EnchantmentTriggers.ContainsKey(who.uniqueMultiplayerID + ____displayName) && ModEntry.EnchantmentTriggers[who.uniqueMultiplayerID + ____displayName] == Game1.ticks)) { return(true); } AdvancedEnchantmentData enchantment = ModEntry.advancedEnchantments[____displayName]; if (enchantment.parameters["trigger"] == "slay") { context.Monitor.Log($"Triggered enchantment {enchantment.name} on slay"); ModEntry.EnchantmentTriggers[who.uniqueMultiplayerID + ____displayName] = Game1.ticks; if (enchantment.type == "heal") { if (Game1.random.NextDouble() < float.Parse(enchantment.parameters["chance"]) / 100f) { int heal = Math.Max(1, (int)(m.Health * float.Parse(enchantment.parameters["amountMult"]))); who.health = Math.Min(who.maxHealth, Game1.player.health + heal); location.debris.Add(new Debris(heal, new Vector2((float)Game1.player.getStandingX(), (float)Game1.player.getStandingY()), Color.Lime, 1f, who)); if (enchantment.parameters.ContainsKey("sound")) { Game1.playSound(enchantment.parameters["sound"]); } } } else if (enchantment.type == "loot") { if (Game1.random.NextDouble() < float.Parse(enchantment.parameters["chance"]) / 100f) { if (enchantment.parameters.ContainsKey("extraDropChecks")) { int extraChecks = Math.Max(1, int.Parse(enchantment.parameters["extraDropChecks"])); for (int i = 0; i < extraChecks; i++) { location.monsterDrop(m, m.GetBoundingBox().Center.X, m.GetBoundingBox().Center.Y, who); } } else if (enchantment.parameters.ContainsKey("extraDropItems")) { string[] items = enchantment.parameters["extraDropItems"].Split(','); foreach (string item in items) { string[] ic = item.Split('_'); if (ic.Length == 1) { Game1.createItemDebris(new Object(int.Parse(item), 1, false, -1, 0), m.Position, Game1.random.Next(4), m.currentLocation, -1); } else if (ic.Length == 2) { float chance = int.Parse(ic[1]) / 100f; if (Game1.random.NextDouble() < chance) { Game1.createItemDebris(new Object(int.Parse(ic[0]), 1, false, -1, 0), m.Position, Game1.random.Next(4), m.currentLocation, -1); } } else if (ic.Length == 4) { float chance = int.Parse(ic[3]) / 100f; if (Game1.random.NextDouble() < chance) { Game1.createItemDebris(new Object(int.Parse(ic[0]), Game1.random.Next(int.Parse(ic[1]), int.Parse(ic[2]))), m.Position, Game1.random.Next(4), m.currentLocation, -1); } } } } if (enchantment.parameters.ContainsKey("sound")) { Game1.playSound(enchantment.parameters["sound"]); } } } else if (enchantment.type == "coins") { if (Game1.random.NextDouble() < float.Parse(enchantment.parameters["chance"]) / 100f) { float mult = float.Parse(enchantment.parameters["amountMult"]); int amount = (int)Math.Round(mult * m.maxHealth); who.Money += amount; if (enchantment.parameters.ContainsKey("sound")) { Game1.playSound(enchantment.parameters["sound"]); } } } } return(false); }
public AdvancedEnchantment(MeleeWeapon w, AdvancedMeleeWeapon amw, AdvancedEnchantmentData aed) { weapon = w; advancedWeapon = amw; enchantment = aed; }