internal bool InvokeNpcStrike( NPC npc, ref int damage, ref float knockback, ref int hitDirection, ref bool crit, ref bool noEffect, ref bool fromNet, Player player) { NpcStrikeEventArgs args = new NpcStrikeEventArgs { Npc = npc, Damage = damage, KnockBack = knockback, HitDirection = hitDirection, Critical = crit, NoEffect = noEffect, FromNet = fromNet, Player = player }; this.NpcStrike.Invoke(args); damage = args.Damage; knockback = args.KnockBack; hitDirection = args.HitDirection; crit = args.Critical; noEffect = args.NoEffect; fromNet = args.FromNet; player = args.Player; return(args.Handled); }
internal bool InvokeNpcStrike( NPC npc, ref int damage, ref float knockback, ref int hitDirection, ref bool crit, ref bool noEffect, ref double returnDamage) { NpcStrikeEventArgs args = new NpcStrikeEventArgs { Npc = npc, Damage = damage, KnockBack = knockback, HitDirection = hitDirection, Critical = crit, NoEffect = noEffect, ReturnDamage = returnDamage }; this.NpcStrike.Invoke(args); damage = args.Damage; knockback = args.KnockBack; hitDirection = args.HitDirection; crit = args.Critical; noEffect = args.NoEffect; returnDamage = args.ReturnDamage; return(args.Handled); }
public static void run(NpcStrikeEventArgs e) { if (e.Handled == true) { return; } if (e.Player == null) { return; } if (!(Variables.playersData.ContainsKey(e.Player.name))) { return; } if (Variables.blockedNPCs.ContainsKey(e.Npc.netID)) { if (Variables.blockedNPCs[e.Npc.netID] == true) { return; } } Color c = new Color(255, 120, 0); if (Variables.playersData[e.Player.name].ActualClass == "warrior") { int neededExpForLevelUp = Variables.playersData[e.Player.name].Warrior.level * (896 + (896 * 43 / 100)); int addedExp = ((e.Damage * 147 / 100) / 2); Variables.playersData[e.Player.name].Warrior.exprience += ((e.Damage * 147 / 100) / 2); if (Variables.playersData[e.Player.name].Warrior.exprience >= neededExpForLevelUp) { Variables.playersData[e.Player.name].Warrior.level++; Variables.playersData[e.Player.name].Warrior.exprience = 0; Variables.playersData[e.Player.name].Warrior.statsPoints++; string levelUp = Variables.levelUp.Replace("%level%", Variables.playersData[e.Player.name].Warrior.level + ""); NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, levelUp, (int)c.PackedValue, TShock.Players[e.Player.whoAmI].X, TShock.Players[e.Player.whoAmI].Y, 0, 0, 0, 0); } else { int change = new Random().Next(0, 100); if (change <= Variables.Chance) { NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, "[" + Variables.playersData[e.Player.name].Warrior.level + "LVL] " + Variables.playersData[e.Player.name].Warrior.exprience + "|" + neededExpForLevelUp + "] " + ((Variables.playersData[e.Player.name].Warrior.exprience * 100) / neededExpForLevelUp) + "% +[" + addedExp + "xp]", (int)c.PackedValue, TShock.Players[e.Player.whoAmI].X, TShock.Players[e.Player.whoAmI].Y, 0, 0, 0, 0); } } } if (Variables.playersData[e.Player.name].ActualClass == "paladin") { int neededExpForLevelUp = Variables.playersData[e.Player.name].Paladin.level * (896 + (896 * 43 / 100)); int addedExp = ((e.Damage * 147 / 100) / 2); Variables.playersData[e.Player.name].Paladin.exprience += ((e.Damage * 147 / 100) / 2); if (Variables.playersData[e.Player.name].Paladin.exprience >= neededExpForLevelUp) { Variables.playersData[e.Player.name].Paladin.level++; Variables.playersData[e.Player.name].Paladin.exprience = 0; Variables.playersData[e.Player.name].Paladin.statsPoints++; string levelUp = Variables.levelUp.Replace("%level%", Variables.playersData[e.Player.name].Warrior.level + ""); NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, levelUp, (int)c.PackedValue, TShock.Players[e.Player.whoAmI].X, TShock.Players[e.Player.whoAmI].Y, 0, 0, 0, 0); } else { int change = new Random().Next(0, 100); if (change <= Variables.Chance) { NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, "[" + Variables.playersData[e.Player.name].Paladin.level + "LVL] " + Variables.playersData[e.Player.name].Paladin.exprience + "|" + neededExpForLevelUp + "] " + ((Variables.playersData[e.Player.name].Paladin.exprience * 100) / neededExpForLevelUp) + "% +[" + addedExp + "xp]", (int)c.PackedValue, TShock.Players[e.Player.whoAmI].X, TShock.Players[e.Player.whoAmI].Y, 0, 0, 0, 0); } } } if (Variables.playersData[e.Player.name].ActualClass == "wizard") { int neededExpForLevelUp = Variables.playersData[e.Player.name].Wizard.level * (896 + (896 * 43 / 100)); int addedExp = ((e.Damage * 147 / 100) / 2); Variables.playersData[e.Player.name].Wizard.exprience += ((e.Damage * 147 / 100) / 2); if (Variables.playersData[e.Player.name].Wizard.exprience >= neededExpForLevelUp) { Variables.playersData[e.Player.name].Wizard.level++; Variables.playersData[e.Player.name].Wizard.exprience = 0; Variables.playersData[e.Player.name].Wizard.statsPoints++; string levelUp = Variables.levelUp.Replace("%level%", Variables.playersData[e.Player.name].Warrior.level + ""); NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, levelUp, (int)c.PackedValue, TShock.Players[e.Player.whoAmI].X, TShock.Players[e.Player.whoAmI].Y, 0, 0, 0, 0); } else { int change = new Random().Next(0, 100); if (change <= Variables.Chance) { NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, "[" + Variables.playersData[e.Player.name].Wizard.level + "LVL] " + Variables.playersData[e.Player.name].Wizard.exprience + "|" + neededExpForLevelUp + "] " + ((Variables.playersData[e.Player.name].Wizard.exprience * 100) / neededExpForLevelUp) + "% +[" + addedExp + "xp]", (int)c.PackedValue, TShock.Players[e.Player.whoAmI].X, TShock.Players[e.Player.whoAmI].Y, 0, 0, 0, 0); } } } if (TShock.Players[e.Player.whoAmI].SelectedItem.melee) { if (Variables.playersData[e.Player.name].ActualClass == "warrior") { if (e.Damage >= e.Npc.life) { return; } int Damage = (Variables.playersData[e.Player.name].Warrior.statMeleeDamage * 3); if (Damage > 0) { NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, "+" + Damage, (int)c.PackedValue, e.Npc.position.X, e.Npc.position.Y, 0, 0, 0, 0); } e.Damage = e.Damage + Damage; return; } if (Variables.playersData[e.Player.name].ActualClass == "paladin") { if (e.Damage >= e.Npc.life) { return; } int Damage = (Variables.playersData[e.Player.name].Paladin.statMeleeDamage); if (Damage > 0) { NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, "+" + Damage, (int)c.PackedValue, e.Npc.position.X, e.Npc.position.Y, 0, 0, 0, 0); } e.Damage = e.Damage + Damage; return; } if (Variables.playersData[e.Player.name].ActualClass == "wizard") { if (e.Damage >= e.Npc.life) { return; } int Damage = (Variables.playersData[e.Player.name].Wizard.statMeleeDamage); if (Damage > 0) { NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, "+" + Damage, (int)c.PackedValue, e.Npc.position.X, e.Npc.position.Y, 0, 0, 0, 0); } e.Damage = e.Damage + Damage; return; } } if (TShock.Players[e.Player.whoAmI].SelectedItem.ranged) { if (Variables.playersData[e.Player.name].ActualClass == "warrior") { if (e.Damage >= e.Npc.life) { return; } int Damage = (Variables.playersData[e.Player.name].Warrior.statRangedDamage); if (Damage > 0) { NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, "+" + Damage, (int)c.PackedValue, e.Npc.position.X, e.Npc.position.Y, 0, 0, 0, 0); } e.Damage = e.Damage + Damage; return; } if (Variables.playersData[e.Player.name].ActualClass == "paladin") { if (e.Damage >= e.Npc.life) { return; } int Damage = (Variables.playersData[e.Player.name].Paladin.statRangedDamage * 3); if (Damage > 0) { NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, "+" + Damage, (int)c.PackedValue, e.Npc.position.X, e.Npc.position.Y, 0, 0, 0, 0); } e.Damage = e.Damage + Damage; return; } if (Variables.playersData[e.Player.name].ActualClass == "wizard") { if (e.Damage >= e.Npc.life) { return; } int Damage = (Variables.playersData[e.Player.name].Wizard.statRangedDamage); if (Damage > 0) { NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, "+" + Damage, (int)c.PackedValue, e.Npc.position.X, e.Npc.position.Y, 0, 0, 0, 0); } e.Damage = e.Damage + Damage; return; } } if (TShock.Players[e.Player.whoAmI].SelectedItem.magic) { if (Variables.playersData[e.Player.name].ActualClass == "warrior") { if (e.Damage >= e.Npc.life) { return; } int Damage = (Variables.playersData[e.Player.name].Warrior.statMagicDamage); if (Damage > 0) { NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, "+" + Damage, (int)c.PackedValue, e.Npc.position.X, e.Npc.position.Y, 0, 0, 0, 0); } e.Damage = e.Damage + Damage; return; } if (Variables.playersData[e.Player.name].ActualClass == "paladin") { if (e.Damage >= e.Npc.life) { return; } int Damage = (Variables.playersData[e.Player.name].Paladin.statMagicDamage); if (Damage > 0) { NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, "+" + Damage, (int)c.PackedValue, e.Npc.position.X, e.Npc.position.Y, 0, 0, 0, 0); } e.Damage = e.Damage + Damage; return; } if (Variables.playersData[e.Player.name].ActualClass == "wizard") { if (e.Damage >= e.Npc.life) { return; } int Damage = (Variables.playersData[e.Player.name].Wizard.statMagicDamage * 3); if (Damage > 0) { NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, "+" + Damage, (int)c.PackedValue, e.Npc.position.X, e.Npc.position.Y, 0, 0, 0, 0); } e.Damage = e.Damage + Damage; return; } } }
internal bool InvokeNpcStrike( NPC npc, ref int damage, ref float knockback, ref int hitDirection, ref bool crit, ref bool noEffect, ref bool fromNet, Player player) { NpcStrikeEventArgs args = new NpcStrikeEventArgs { Npc = npc, Damage = damage, KnockBack = knockback, HitDirection = hitDirection, Critical = crit, NoEffect = noEffect, FromNet = fromNet, Player = player }; this.NpcStrike.Invoke(args); damage = args.Damage; knockback = args.KnockBack; hitDirection = args.HitDirection; crit = args.Critical; noEffect = args.NoEffect; fromNet = args.FromNet; return args.Handled; }
/// <summary>NpcHooks_OnStrikeNpc - Fired when an NPC strike packet happens.</summary> /// <param name="e">e - The NpcStrikeEventArgs object.</param> private void NpcHooks_OnStrikeNpc(NpcStrikeEventArgs e) { if (Config.InfiniteInvasion) { if (Main.invasionSize < 10) { Main.invasionSize = 20000000; } } }
internal bool InvokeNpcStrike( NPC npc, ref int damage, ref float knockback, ref int hitDirection, ref bool crit, ref bool noEffect, ref double returnDamage) { NpcStrikeEventArgs args = new NpcStrikeEventArgs { Npc = npc, Damage = damage, KnockBack = knockback, HitDirection = hitDirection, Critical = crit, NoEffect = noEffect, ReturnDamage = returnDamage }; this.NpcStrike.Invoke(args); damage = args.Damage; knockback = args.KnockBack; hitDirection = args.HitDirection; crit = args.Critical; noEffect = args.NoEffect; returnDamage = args.ReturnDamage; return args.Handled; }
/// <summary> /// NpcStrike callback. /// </summary> /// <param name="args"></param> private void OnNpcStrike(NpcStrikeEventArgs args) { lock (this.m_AddonsLock) { this.m_Addons.ForEach(a => { var ret = a.Value.InvokeEvent("NpcStrike", args); if (ret != null && ret.Length >= 1) { bool result; if (bool.TryParse(ret[0].ToString(), out result) && result) args.Handled = true; } }); } }
public static void OnDamage(NpcStrikeEventArgs args) { if (args.Handled) return; TSPlayer player = TShock.Players[args.Player.whoAmI]; int index = Plugin.Config.Warrior.FindIndex(p => p.PlayerName == player.Name); if (index == -1) return; Vocation character = Vocation.getVocation(index, Plugin.Config.settings[index].currentVocation); // Can only get XP from non-prohibited NPCs if (!NoXpTargets.Contains(args.Npc.netID)) { character.XP += Vocation.getDamageXp(args.Damage); if (character.XP >= Vocation.getLevelXp(character.Level + 1)) { character.Level++; character.XP = 0; player.SendInfoMessage(VocationPlugin.Resources.INFO_LEVELUP, character.Level); } } character.InflictDamage(player, args); }
public void InflictDamage(TSPlayer player, NpcStrikeEventArgs args) { int bonusdmg = Level / 5; if (player.SelectedItem.melee) { melee.XP++; bonusdmg += melee.Level; if (melee.XP >= melee.getAttackLevelXp(MeleeAttackMultiplier, XpFormat.Integer)) { melee.XP = 0; melee.Level++; player.SendInfoMessage(VocationPlugin.Resources.INFO_LEVELUP_ATTACK, "melee", melee.Level); } } else if (player.SelectedItem.magic) { magic.XP++; bonusdmg += magic.Level; if (magic.XP >= magic.getAttackLevelXp(MagicAttackMultiplier, XpFormat.Integer)) { magic.XP = 0; magic.Level++; player.SendInfoMessage(VocationPlugin.Resources.INFO_LEVELUP_ATTACK, "magic", magic.Level); } } else if (player.SelectedItem.ranged) { ranged.XP++; bonusdmg += ranged.Level; if (ranged.XP >= ranged.getAttackLevelXp(RangedAttackMultiplier, XpFormat.Integer)) { ranged.XP = 0; ranged.Level++; player.SendInfoMessage(VocationPlugin.Resources.INFO_LEVELUP_ATTACK, "ranged", ranged.Level); } } if (bonusdmg > 0) { args.Damage += bonusdmg; var color = Convert.ToInt32(Color.Gold.PackedValue); var msgType = Convert.ToInt32(PacketTypes.CreateCombatText); NetMessage.SendData(msgType, -1, -1, "+" + bonusdmg, color, args.Npc.position.X, args.Npc.position.Y); } }