public static void UseItem(VapePlayer modPlayer, Item item) { if (item.magic && modPlayer.HasSkill("Leftover Supply") && rnd.Next(0, 101) <= modPlayer.SkillLevels["Leftover Supply"] * 2f) { modPlayer.player.statMana += item.mana; } }
public static void UpdateStatBonuses(VapePlayer modPlayer) { if (modPlayer.HasSkill("Warmth")) { modPlayer.player.lifeRegen += (int)Math.Ceiling(modPlayer.player.lifeRegen * 0.1f * modPlayer.SkillLevels["Warmth"]); modPlayer.player.manaRegen += (int)Math.Ceiling(modPlayer.player.manaRegen * 0.1f * modPlayer.SkillLevels["Warmth"]); } if (modPlayer.HasSkill("Damage to Defense")) { float amount = modPlayer.SkillLevels["Damage to Defense"] * 0.1f; modPlayer.player.meleeDamage -= amount; modPlayer.player.magicDamage -= amount; modPlayer.player.rangedDamage -= amount; modPlayer.player.minionDamage -= amount; modPlayer.player.thrownDamage -= amount; modPlayer.player.statDefense += (int)Math.Ceiling(modPlayer.player.statDefense * amount); if (modPlayer.HasSkill("Vital Supplies")) { modPlayer.player.statLifeMax2 += (int)Math.Ceiling(modPlayer.player.statLifeMax * amount); } } if (modPlayer.HasSkill("Longer Flight")) { modPlayer.player.wingTimeMax += (int)Math.Ceiling(modPlayer.player.wingTimeMax * 0.3f * modPlayer.SkillLevels["Longer Flight"]); } if (modPlayer.HasSkill("Angel") && modPlayer.player.wingTime < modPlayer.player.wingTimeMax) { float amount = modPlayer.SkillLevels["Angel"] * 0.05f; modPlayer.player.meleeDamage += amount; modPlayer.player.rangedDamage += amount; modPlayer.player.magicDamage += amount; modPlayer.player.minionDamage += amount; modPlayer.player.thrownDamage += amount; } }
internal static void Load(VapePlayer modPlayer, TagCompound tag) { TagCompound stats = tag.GetCompound("BaseStats"); TagCompound skillLevels = tag.GetCompound("SkillLevels"); TagCompound chaosBonuses = tag.GetCompound("ChaosBonuses"); string key; modPlayer.statPoints = tag.GetAsInt("StatPoints"); modPlayer.skillPoints = tag.GetAsInt("SkillPoints"); modPlayer.chaosPoints = tag.GetAsInt("ChaosPoints"); // Unboxing values into the proper dictionary foreach (var stat in stats) { key = stat.Key; // Intellect was removed in v0.3.1 if (key == "Intellect") { modPlayer.statPoints += (int)stat.Value; continue; } // Agility was renamed to Haste in v0.3.1 else if (key == "Agility") { key = "Haste"; } modPlayer.BaseStats[key] = (int)stat.Value; } foreach (var skillLevel in skillLevels) { modPlayer.SkillLevels[skillLevel.Key] = (int)skillLevel.Value; } foreach (var chaosBonus in chaosBonuses) { key = chaosBonus.Key; // Movement Speed as a chaos bonus was replaced with Max Run Speed in v0.3.1 if (key == "Movement Speed") { key = "Max Run Speed"; } modPlayer.ChaosBonuses[key] = (float)chaosBonus.Value; } modPlayer.chaosRank = tag.GetAsInt("ChaosRank"); modPlayer.chaosXp = tag.GetAsLong("ChaosXp"); modPlayer.xp = tag.GetAsLong("Xp"); Vector2 expUIPos = tag.Get <Vector2>("expUIPos"); VapeRPG vapeMod = (modPlayer.mod as VapeRPG); vapeMod.ExpUI.SetPanelPosition(expUIPos); }
public static void ModifyHitByNPC(VapePlayer modPlayer, NPC npc, ref int damage, ref bool crit) { if (modPlayer.HasSkill("Reflection")) { npc.StrikeNPC((int)Math.Ceiling(damage * 0.05f * modPlayer.SkillLevels["Reflection"]), 30, npc.direction); } if (modPlayer.HasSkill("Hardened Skin")) { damage -= (int)Math.Ceiling(damage * 0.05f * modPlayer.SkillLevels["Hardened Skin"]); } }
public override void UpdateEquip(Item item, Player player) { VapePlayer vp = player.GetModPlayer <VapePlayer>(); this.tooltipVisible = true; vp.blockChance += this.blockChance; if (this.statBonus.Count > 0) { foreach (var x in this.statBonus) { vp.EffectiveStats[x.Key] += x.Value; } } }
public static void ModifyHitNPC(VapePlayer modPlayer, Item item, Projectile proj, NPC target, ref int damage, ref float knockback, ref bool crit) { if (!crit) { if (modPlayer.HasSkill("Kickstart") && target.life >= target.lifeMax * 0.7f && rnd.Next(0, 101) <= modPlayer.SkillLevels["Kickstart"] * 50) { crit = true; } if (modPlayer.HasSkill("Hawk Eye")) { float distance = Vector2.Distance(modPlayer.player.position, target.position); float chance = distance * 0.025f; if (rnd.Next(0, 101) <= chance) { crit = true; } } } else { if (modPlayer.HasSkill("Titan Grip")) { knockback += knockback * modPlayer.SkillLevels["Titan Grip"] * 0.2f; } } if (modPlayer.HasSkill("Close Combat Specialist")) { float distance = Vector2.Distance(modPlayer.player.position, target.position); if (distance < 15) { distance = 15; } damage += (int)Math.Ceiling(damage * 1500 / distance); } if (modPlayer.HasSkill("Execution") && target.life <= target.lifeMax * 0.2f) { damage += (int)Math.Ceiling(damage * 0.1f * modPlayer.SkillLevels["Execution"]); } if (modPlayer.HasSkill("First Touch") && target.life == target.lifeMax) { int amount = (int)Math.Ceiling(target.life * 0.1f); target.life -= amount; CombatText.NewText(new Rectangle((int)target.position.X, (int)target.position.Y - 50, 100, 100), Color.Cyan, amount); } }
public override bool CheckDead(NPC npc) { if (!IsIgnoredType(npc) && !npc.SpawnedFromStatue && !npc.friendly) { double gainedXp; if (npc.boss) { foreach (Player player in Main.player.ToList().FindAll(x => x.active)) { VapePlayer vp = player.GetModPlayer <VapePlayer>(); gainedXp = npc.lifeMax / 2; vp.GainExperience((int)gainedXp); } } else { // If it isn't a boss, only nearby players gain experience based on the npc's HP foreach (Player player in Main.player.ToList().FindAll(x => x.active)) { if (Vector2.Distance(player.position, npc.position) <= expGainDistance) { VapePlayer vp = player.GetModPlayer <VapePlayer>(); gainedXp = 0.5 * Math.Pow(2, Math.Sqrt((2 * (1 + npc.defDamage / (2 * npc.lifeMax)) * npc.lifeMax) / Math.Pow(npc.lifeMax, 1 / 2.6))); if (npc.lifeMax >= 1000) { gainedXp = npc.lifeMax / 2; } else if (npc.lifeMax <= 20) { gainedXp /= 2; } if (this.isChaos) { vp.GainExperience(1 + (int)(gainedXp / 3), true); gainedXp *= (2 - 1 / this.chaosMultiplier); } vp.GainExperience((int)gainedXp); } } } } return(base.CheckDead(npc)); }
public override void HandlePacket(BinaryReader reader, int whoAmI) { VapeRPGMessageType msgType = (VapeRPGMessageType)reader.ReadByte(); switch (msgType) { case VapeRPGMessageType.ServerTransformChaosNPC: int chaosMultiplier = reader.ReadInt32(); int index = reader.ReadInt32(); NPC npc = Main.npc[index]; VapeGlobalNpc global = npc.GetGlobalNPC <VapeGlobalNpc>(); global.chaosMultiplier = chaosMultiplier; global.isChaos = true; break; case VapeRPGMessageType.ClientSyncStats: Player player = Main.player[reader.ReadInt32()]; if (!player.Equals(Main.LocalPlayer) || Main.netMode == NetmodeID.Server) { VapePlayer modPlayer = player.GetModPlayer <VapePlayer>(); for (int i = 0; i < BaseStats.Length; i++) { string[] keyValuePair = reader.ReadString().Split(' '); modPlayer.BaseStats[keyValuePair[0]] = int.Parse(keyValuePair[1]); } for (int i = 0; i < BaseStats.Length; i++) { string[] keyValuePair = reader.ReadString().Split(' '); modPlayer.EffectiveStats[keyValuePair[0]] = int.Parse(keyValuePair[1]); } } break; case VapeRPGMessageType.ClientSyncXp: player = Main.player[reader.ReadInt32()]; if (Main.netMode == NetmodeID.Server || !player.Equals(Main.LocalPlayer)) { VapePlayer modPlayer = player.GetModPlayer <VapePlayer>(); modPlayer.xp = reader.ReadInt32(); modPlayer.chaosXp = reader.ReadInt32(); } break; case VapeRPGMessageType.ClientSyncLevel: player = Main.player[reader.ReadInt32()]; if (Main.netMode == NetmodeID.Server || !player.Equals(Main.LocalPlayer)) { VapePlayer modPlayer = player.GetModPlayer <VapePlayer>(); modPlayer.level = reader.ReadInt32(); } break; } }
public static void ModifyHitByProjectile(VapePlayer modPlayer, Projectile proj, ref int damage, ref bool crit) { }
public static void Hurt(VapePlayer modPlayer, bool pvp, bool quiet, double damage, int hitDirection, bool crit) { }
public static void Shoot(VapePlayer modPlayer, Item item, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack) { }
public static void OnHitNPC(VapePlayer modPlayer, Item item, Projectile proj, NPC target, int damage, float knockback, bool crit) { // On Kill if (target.life <= 0) { if (modPlayer.HasSkill("Excitement")) { modPlayer.player.AddBuff(11, 360); } if (modPlayer.HasSkill("Bloodlust")) { modPlayer.player.AddBuff(2, 600); } if (modPlayer.HasSkill("Exploding Rage") && (proj == null ? item.melee : proj.melee) && rnd.Next(101) <= modPlayer.SkillLevels["Exploding Rage"] * 10) { int dustCount = 20; int bloodRange = 15; for (int i = 0; i < dustCount; i++) { for (int j = 0; j < dustCount; j++) { double angle = rnd.Next(1, 360) * Math.PI / 180; Vector2 bloodTarget = new Vector2(target.position.X + bloodRange * (float)Math.Cos(angle), target.position.Y + bloodRange * (float)Math.Sin(angle)); Vector2 bloodVelocity = target.position - bloodTarget; int v = 10; float speedMul = v / bloodVelocity.Length(); bloodVelocity.X = speedMul * bloodVelocity.X; bloodVelocity.Y = speedMul * bloodVelocity.Y; //Dust.NewDustPerfect(target.position, 5, bloodVelocity, Scale: 3.0f).noGravity = true; //perfect circle Main.dust[Dust.NewDust(target.position, 60, 30, 5, bloodVelocity.X, bloodVelocity.Y, Scale: 3.0f)].noGravity = true; } } foreach (NPC npc in Main.npc) { if (npc != target && Vector2.Distance(npc.position, target.position) <= 150) { npc.StrikeNPC((int)Math.Ceiling(target.lifeMax * 0.1f), 0, 0); } } } if (modPlayer.HasSkill("Rage")) { modPlayer.player.AddBuff(modPlayer.mod.BuffType <Rage>(), 600); } if (modPlayer.HasSkill("Mana Addict")) { modPlayer.player.AddBuff(6, 600); } if (modPlayer.HasSkill("Magic Sparks") && (proj == null ? item.magic : proj.magic) && rnd.Next(0, 101) <= modPlayer.SkillLevels["Magic Sparks"] * 10) { int dustCount = 20; int sparkRange = 30; for (int i = 0; i < dustCount; i++) { for (int j = 0; j < dustCount; j++) { double angle = rnd.Next(1, 360) * Math.PI / 180; Vector2 sparkTarget = new Vector2(target.position.X + sparkRange * (float)Math.Cos(angle), target.position.Y + sparkRange * (float)Math.Sin(angle)); Vector2 sparkVelocity = target.position - sparkTarget; int v = 15; float speedMul = v / sparkVelocity.Length(); sparkVelocity.X = speedMul * sparkVelocity.X; sparkVelocity.Y = speedMul * sparkVelocity.Y; Dust dust = Dust.NewDustPerfect(target.position, 130 + j % 5, sparkVelocity); dust.noGravity = true; } } foreach (NPC npc in Main.npc) { if (npc != target && Vector2.Distance(npc.position, target.position) <= 180) { int amount = (int)Math.Ceiling(npc.lifeMax * modPlayer.SkillLevels["Magic Sparks"] * 0.05f); npc.life -= amount; CombatText.NewText(new Rectangle((int)npc.position.X, (int)npc.position.Y - 50, 100, 100), Color.Cyan, amount); if (modPlayer.HasSkill("Spectral Sparks")) { npc.defense -= (int)Math.Ceiling(npc.defense * 0.15f); } } } } if (modPlayer.HasSkill("Energizing Kills") && !modPlayer.energized && (proj == null ? item.magic : proj.magic)) { if (modPlayer.energizedStacks <= 0) { modPlayer.energizedStacks = 1; } modPlayer.player.AddBuff(modPlayer.mod.BuffType <Energized>(), 60); } if (modPlayer.HasSkill("Static Field") && rnd.Next(0, 101) <= modPlayer.SkillLevels["Static Field"] * 5 && (proj == null ? item.magic : proj.magic)) { int duration = 600; if (modPlayer.HasSkill("High-Voltage Field")) { duration *= 2; modPlayer.player.AddBuff(12, duration); } Main.PlaySound(modPlayer.mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/Custom/StaticFieldApply"), modPlayer.player.position); modPlayer.player.AddBuff(modPlayer.mod.BuffType <StaticField>(), duration); } // On Crit Kill if (crit) { if (modPlayer.HasSkill("Overkill")) { int amount = (int)Math.Ceiling(modPlayer.player.statLifeMax * modPlayer.SkillLevels["Overkill"] * 0.03f); modPlayer.player.HealEffect(amount); modPlayer.player.statLife += amount; } if (modPlayer.HasSkill("Overkill Charge")) { int amount = (int)Math.Ceiling(modPlayer.player.statLifeMax * modPlayer.SkillLevels["Overkill Charge"] * 0.04f); modPlayer.player.ManaEffect(amount); modPlayer.player.statMana += amount; } } } //On Hit if (modPlayer.HasSkill("One Above All") && rnd.Next(0, 101) <= 3 && target.type != NPCID.TargetDummy && !target.boss && !target.TypeName.ToLower().Contains("pillar") && !target.GivenName.ToLower().Contains("pillar")) { CombatText.NewText(new Rectangle((int)target.position.X, (int)target.position.Y - 20, 50, 50), Color.Red, "One Above All"); target.StrikeNPC(target.lifeMax * 2, 0, 0); } if ((proj == null ? item.magic : proj.magic) && modPlayer.HasSkill("Bounce") && rnd.Next(0, 101) <= modPlayer.SkillLevels["Bounce"] * 10) { NPC closest = null; float closestDistance = 500; foreach (NPC npc in Main.npc) { if (npc != target) { float distance = Vector2.Distance(npc.position, target.position); if (distance < closestDistance) { closestDistance = distance; closest = npc; } } } if (closest != null) { Vector2 sparkVelocity = closest.position - target.position; int v = 5; float speedMul = v / sparkVelocity.Length(); sparkVelocity.X = speedMul * sparkVelocity.X; sparkVelocity.Y = speedMul * sparkVelocity.Y; float sparkDamage = (proj == null ? item.damage : proj.damage) * modPlayer.SkillLevels["Bounce"] * 0.1f; Projectile spark = Projectile.NewProjectileDirect(new Vector2(target.position.X + target.width / 2, target.position.Y + target.height / 2), sparkVelocity, modPlayer.mod.ProjectileType <ElectricSpark>(), (int)Math.Ceiling(sparkDamage), 20, modPlayer.player.whoAmI); Main.PlaySound(modPlayer.mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/Custom/Electricity"), modPlayer.player.position); } } if (modPlayer.HasSkill("Confusion") && rnd.Next(0, 101) <= modPlayer.SkillLevels["Confusion"] * 5) { target.AddBuff(31, 300); CombatText.NewText(new Rectangle((int)target.position.X, (int)target.position.Y - 20, 50, 50), Color.OrangeRed, "Confused"); if (modPlayer.HasSkill("Confusion Field")) { float confusionDistance = 200; foreach (NPC npc in Main.npc) { if (npc != target && Vector2.Distance(target.position, npc.position) <= confusionDistance) { npc.AddBuff(31, 300); CombatText.NewText(new Rectangle((int)npc.position.X, (int)npc.position.Y - 20, 50, 50), Color.OrangeRed, "Confused"); } } } } if (!crit) { if (modPlayer.highfiveStacks > 0) { modPlayer.player.ClearBuff(modPlayer.mod.BuffType <HighFive>()); modPlayer.highfiveStacks = 0; } } else { if (modPlayer.HasSkill("High Five")) { if (modPlayer.highfiveStacks <= 0) { modPlayer.highfiveStacks = 1; } modPlayer.player.AddBuff(modPlayer.mod.BuffType <HighFive>(), 60); } } }