/// <summary> /// Performs additional actions for projectiles. /// </summary> public void PerformProjectileAction() { if (CheckNull() || !OwnerProjectile.TPlayer.hostile) { return; } switch (type) { //Medusa Ray projectile case 536: var target = PvPUtils.FindClosestPlayer(OwnerProjectile.TPlayer.position, OwnerProjectile.Index, Constants.MedusaHeadRange); if (target != null) { if (Collision.CanHit(OwnerProjectile.TPlayer.position, OwnerProjectile.TPlayer.width, OwnerProjectile.TPlayer.height, target.TPlayer.position, target.TPlayer.width, target.TPlayer.height)) { if (target.CheckMedusa()) { string deathmessage = target.Name + " was petrified by " + target.Name + "'s Medusa Head."; target.DamagePlayer(PvPUtils.GetPvPDeathMessage(deathmessage, ItemOriginated), ItemOriginated, ItemOriginated.ConfigDamage, 0, false); target.SetBuff(Cache.Projectiles[535].InflictBuff); } } } break; } }
private void OnPlayerUpdated(object sender, PlayerUpdateArgs e) { e.player.TPlayer.vortexStealthActive = (e.pulley & 8) == 8; if (!PvPController.config.enablePlugin) { return; } if (e.player.previousSelectedItem != e.selectedSlot) { if (e.player.seeTooltip) { PvPItem item = PvPUtils.ConvertToPvPItem(e.player.TPlayer.inventory[e.selectedSlot]); int damage = TerrariaUtils.GetWeaponDamage(e.player, item); damage += PvPUtils.GetAmmoDamage(e.player, item); damage += PvPUtils.GetVortexDamage(e.player, item, damage); if (damage > 0) { string message = item.Name + ": " + damage + " damage"; PvPUtils.PlayerTextPopup(e.player, message, Color.Goldenrod); } } e.player.previousSelectedItem = e.selectedSlot; } }
/// <summary> /// Handles projectile creation. /// </summary> private void OnNewProjectile(object sender, ProjectileNewArgs e) { if (!PvPModifier.Config.EnablePlugin) { return; } var projectile = Main.projectile[e.Identity]; if (projectile.active && projectile.type == e.Type) { return; } if ((TShock.Players[e.Owner]?.TPlayer?.hostile ?? false) && PvPUtils.IsModifiedProjectile(e.Type)) { e.Args.Handled = true; DbProjectile proj = Cache.Projectiles[e.Type]; projectile.SetDefaults(proj.Shoot != -1 ? proj.Shoot : e.Type); projectile.velocity = e.Velocity * proj.VelocityMultiplier; projectile.damage = proj.Damage != -1 ? proj.Damage : e.Damage; projectile.active = true; projectile.identity = e.Identity; projectile.owner = e.Owner; projectile.position = e.Position; NetMessage.SendData(27, -1, -1, null, e.Identity); } e.Attacker.ProjTracker.InsertProjectile(e.Identity, e.Type, e.Owner, e.Weapon); e.Attacker.ProjTracker.Projectiles[e.Type].PerformProjectileAction(); }
/// <summary> /// Gets the first available ammo for a weapon. /// </summary> /// <param Name="weapon">The weapon to find ammo for.</param> /// <returns></returns> public PvPItem GetFirstAvailableAmmo(PvPItem weapon) { int useAmmo = weapon.useAmmo; if (useAmmo == AmmoID.None) { return(new PvPItem()); } for (int x = 54; x < NetItem.InventorySlots; x++) { if (this.TPlayer.inventory[x].ammo == useAmmo) { return(PvPUtils.ConvertToPvPItem(this.TPlayer.inventory[x])); } } for (int x = 0; x < NetItem.InventorySlots - 4; x++) { if (this.TPlayer.inventory[x].ammo == useAmmo) { return(PvPUtils.ConvertToPvPItem(this.TPlayer.inventory[x])); } } return(new PvPItem()); }
/// <summary> /// Damages players. Criticals and custom knockback will apply if enabled. /// </summary> public void DamagePlayer(PvPPlayer attacker, PvPItem weapon, int damage, int hitDirection, bool isCrit) { damage *= isCrit ? 2 : 1; string star = isCrit ? "!!" : "*"; var color = isCrit ? Color.SlateBlue : Color.DarkTurquoise; NetMessage.SendPlayerHurt(this.Index, PlayerDeathReason.ByCustomReason(PvPUtils.GetPvPDeathMessage(attacker, this, weapon)), damage, hitDirection, false, true, 5); Interface.PlayerTextPopup(attacker, this, star + TerrariaUtils.GetHurtDamage(this, damage) + star, color); }
private void OnPlayerSlotUpdated(object sender, PlayerSlotArgs e) { if (e.player.seeTooltip) { if (e.slotid >= 59 && e.slotid <= 67) { Task.Delay(50).ContinueWith(t => { PvPUtils.PlayerTextPopup(e.player, e.player.GetPlayerDefense() + " defense", Color.OrangeRed); }); } } }
public int GetDamageDealt(PvPPlayer attacker, PvPItem weapon, PvPProjectile projectile = null) { int damage = (projectile == null || PvPController.config.projectileInfo[projectile.type].damage < 1) ? weapon.GetPvPDamage(attacker) : projectile.GetConfigDamage(); damage += PvPUtils.GetAmmoDamage(attacker, weapon); damage += PvPUtils.GetDamageVariance(); damage += PvPUtils.GetVortexDamage(attacker, weapon, damage); damage -= (int)(this.GetDefenseDifferenceFromModded() * 0.5); return(damage); }
/// <summary> /// Handles pvp attacks. /// </summary> private void OnPlayerHurt(object sender, PlayerHurtArgs e) { if (!PvPModifier.Config.EnablePlugin) { return; } e.Args.Handled = true; if (e.Attacker.TPlayer.immune || !e.Target.CanBeHit()) { return; } if (PvPModifier.Config.EnableKnockback) { int direction = e.HitDirection; double angle; if (e.PlayerHitReason.SourceProjectileIndex != -1) { angle = Math.Atan2(e.Projectile.velocity.Y, e.Projectile.velocity.X); direction = e.Target.IsLeftFrom(e.Projectile.position) ? -direction : direction; } else { angle = e.Attacker.AngleFrom(e.Target.TPlayer.position); direction = e.Target.IsLeftFrom(e.Attacker.TPlayer.position) ? -direction : direction; } e.Target.KnockBack(e.Weapon.GetKnockback(e.Attacker), angle, direction); e.HitDirection = 0; } e.Target.DamagePlayer(PvPUtils.GetPvPDeathMessage(e.PlayerHitReason.GetDeathText(e.Target.Name).ToString(), e.Weapon, e.Projectile), e.Weapon, e.InflictedDamage, e.HitDirection, (e.Flag & 1) == 1); e.Attacker.ApplyPvPEffects(e.Target, e.Weapon, e.Projectile, e.InflictedDamage); if (PvPModifier.Config.EnableBuffs) { e.Target.SetBuff(Cache.Projectiles[e.PlayerHitReason.SourceProjectileType].InflictBuff); e.Attacker.SetBuff(Cache.Projectiles[e.PlayerHitReason.SourceProjectileType].ReceiveBuff); e.Target.SetBuff(Cache.Items[e.Attacker.HeldItem.netID].InflictBuff); e.Attacker.SetBuff(Cache.Items[e.Attacker.HeldItem.netID].ReceiveBuff); e.Target.ApplyBuffDebuffs(e.Attacker, e.Weapon); e.Attacker.ApplyReceiveBuff(); } }
/// <summary> /// Handles player updates. /// </summary> private void OnPlayerUpdate(object sender, PlayerUpdateArgs e) { if (!PvPModifier.Config.EnablePlugin) { return; } if (e.Player.TPlayer.dead) { return; } //If the player has their pvp turned on without sending a TogglePvP packet (ex. through a /pvp command), //The plugin will detect it here and send the modified items. if (e.Player.TPlayer.hostile && !e.Player.InvTracker.StartForcePvPInventoryCheck) { e.Player.InvTracker.StartForcePvPInventoryCheck = true; PvPUtils.SendCustomItems(e.Player); } if (!e.Player.TPlayer.hostile && e.Player.InvTracker.StartForcePvPInventoryCheck) { PvPUtils.RefreshInventory(e.Player); e.Player.InvTracker.Clear(); e.Player.InvTracker.StartForcePvPInventoryCheck = false; } //If the player tries to use a modified item in their hand, it will be dumped back into their inventory if ((e.PlayerAction & 32) == 32) { if (e.Player.TPlayer.hostile) { Item item = e.Player.TPlayer.inventory[58]; if (item.netID != 0 && PvPUtils.IsModifiedItem(item.netID) && e.Player.CanModInventory()) { SSCUtils.SetItem(e.Player, 58, 0); CustomWeaponDropper.DropItem(e.Player, new CustomWeapon { ItemNetId = (short)item.netID, Prefix = item.prefix, Stack = (short)item.stack, DropAreaWidth = short.MaxValue, DropAreaHeight = short.MaxValue }); e.Player.SendErrorMessage("You cannot use this weapon in your hand!"); } } } }
/// <summary> /// Handles homing projectiles. /// </summary> public static void UpdateProjectileHoming(ProjectileAiUpdateEventArgs args) { if (!PvPModifier.Config.EnableHoming) { return; } var projectile = args.Projectile; float homingRadius = Cache.Projectiles[projectile.type].HomingRadius; if (homingRadius < 0) { return; } float angularVelocity = Cache.Projectiles[projectile.type].AngularVelocity; PvPPlayer target = PvPUtils.FindClosestPlayer(projectile.position, projectile.owner, homingRadius * Constants.PixelToWorld); if (target != null) { projectile.velocity = MiscUtils.TurnTowards(projectile.velocity, projectile.position, target.TPlayer.Center, angularVelocity); foreach (var pvper in PvPModifier.ActivePlayers) { pvper.SendRawData(new PacketWriter() .SetType((short)PacketTypes.ProjectileNew) .PackInt16((short)projectile.identity) .PackSingle(projectile.position.X) .PackSingle(projectile.position.Y) .PackSingle(projectile.velocity.X) .PackSingle(projectile.velocity.Y) .PackSingle(projectile.knockBack) .PackInt16((short)projectile.damage) .PackByte((byte)projectile.owner) .PackInt16((short)projectile.type) .PackByte(0) .PackSingle(projectile.ai[0]) .GetByteData()); } } }
/// <summary> /// Mods the player's inventory when their pvp is turned on. /// Resets their inventory to Terraria's defaults when their pvp is turned off. /// </summary> private void OnPvPToggled(object sender, TogglePvPArgs e) { if (!PvPModifier.Config.EnablePlugin) { return; } if (e.Hostile) { e.Player.InvTracker.StartForcePvPInventoryCheck = true; PvPUtils.SendCustomItems(e.Player); } if (!e.Hostile) { PvPUtils.RefreshInventory(e.Player); e.Player.InvTracker.Clear(); e.Player.InvTracker.StartForcePvPInventoryCheck = false; } }
/// <summary> /// Replaces items placed into the inventory into the pvp versions. /// </summary> private void CheckIncomingItems(object sender, PlayerSlotArgs e) { if (!PvPModifier.Config.EnablePlugin) { return; } if (!e.Player.TPlayer.hostile) { return; } if (e.SlotId >= 58) { return; } //Only runs after initial pvp check if (e.Player.InvTracker.OnPvPInventoryChecked) { if (e.Player.InvTracker.LockModifications) { return; } //If the item is being consumed, don't modify the item if (Math.Abs(e.Player.TPlayer.inventory[e.SlotId].stack - e.Stack) <= 1 && e.Player.TPlayer.inventory[e.SlotId].netID == e.NetID) { return; } //If the item is modified, fill empty spaces and add it to queue if (PvPUtils.IsModifiedItem(e.NetID)) { SSCUtils.FillInventoryToIndex(e.Player, Constants.EmptyItem, Constants.JunkItem, e.SlotId); SSCUtils.SetItem(e.Player, e.SlotId, Constants.EmptyItem); e.Player.InvTracker.AddItem(PvPUtils.GetCustomWeapon(e.Player, e.NetID, e.Prefix, e.Stack)); e.Player.InvTracker.StartDroppingItems(); } } }
/// <summary> /// Mods the player's inventory when their pvp is turned on. /// Resets their inventory to Terraria's defaults when their pvp is turned off. /// </summary> private void OnPvPToggled(object sender, TogglePvPArgs e) { //TSPlayer.All.SendMessage(e.Player.Name + " has enabled/disabled pvp (fix 1)", new Microsoft.Xna.Framework.Color(187, 144, 212)); if (!PvPModifier.Config.EnablePlugin) { return; } if (e.Hostile) { e.Player.InvTracker.StartForcePvPInventoryCheck = true; PvPUtils.SendCustomItems(e.Player); } if (!e.Hostile) { PvPUtils.RefreshInventory(e.Player); e.Player.InvTracker.Clear(); e.Player.InvTracker.StartForcePvPInventoryCheck = false; } }
private static void DPSify(CommandArgs args) { List <string> queries = new List <string>(); if (args.Parameters.Count < 1 || !Double.TryParse(args.Parameters[0], out double dps)) { args.Player.SendErrorMessage("Invalid dps value."); return; } dps = dps * dps; for (int x = 0; x < Terraria.Main.maxItemTypes; x++) { Item item = new Item(); item.SetDefaults(x); int useanimation = Cache.Items[x].UseAnimation != -1 ? Cache.Items[x].UseAnimation.Replace(0, 1) : item.useAnimation; if (item.damage > 0 && item.ammo == 0) { queries.Add($"UPDATE {DbTables.ItemTable} SET {DbConsts.Damage} = {(int)Math.Sqrt(dps * useanimation / 60.0)} WHERE ID = {x}"); } } Database.PerformTransaction(queries.ToArray()); Database.LoadDatabase(); string log = $"Set all weapon's pvp dps to be approx {Math.Sqrt(dps)}"; args.Player.SendSuccessMessage(log); PvPModifier.Config.LogChange($"({DateTime.Now}) {log}"); foreach (var player in PvPModifier.ActivePlayers) { if (player.TPlayer.hostile) { PvPUtils.SendCustomItems(player); } } }
/// <summary> /// Applies turtle and thorns damage to the attacker. /// </summary> public void ApplyReflectDamage(PvPPlayer attacker, int damage, PvPItem weapon) { PvPItem reflectTag = new PvPItem(1150); Random random = new Random(); string deathmessage = PresetData.ReflectedDeathMessages[random.Next(PresetData.ReflectedDeathMessages.Count)]; if (PvPModifier.Config.EnableTurtle && attacker.TPlayer.setBonus == Language.GetTextValue("ArmorSetBonus.Turtle") && weapon.melee) { deathmessage = Name + deathmessage + attacker.Name + "'s Turtle Armor."; int turtleDamage = (int)(damage * PvPModifier.Config.TurtleMultiplier); NetMessage.SendPlayerHurt(this.Index, PlayerDeathReason.ByCustomReason(PvPUtils.GetPvPDeathMessage(deathmessage, reflectTag, type: 2)), turtleDamage, 0, false, true, 5); } if (PvPModifier.Config.EnableThorns && attacker.TPlayer.FindBuffIndex(14) != -1) { int thornDamage = (int)(damage * PvPModifier.Config.ThornMultiplier); deathmessage = Name + deathmessage + attacker.Name + "'s Thorns."; NetMessage.SendPlayerHurt(this.Index, PlayerDeathReason.ByCustomReason(PvPUtils.GetPvPDeathMessage(deathmessage, reflectTag, type: 2)), thornDamage, 0, false, true, 5); } }
public void DamagePlayer(PvPPlayer attacker, PvPItem weapon, int damage, int hitDirection) { NetMessage.SendPlayerHurt(this.Index, PlayerDeathReason.ByCustomReason(PvPUtils.GetPvPDeathMessage(attacker, this, weapon.name, 1)), damage, hitDirection, false, true, 5); PvPUtils.PlayerTextPopup(attacker, this, "*" + TerrariaUtils.GetHurtDamage(this, damage) + "*", Color.DarkTurquoise); }
/// <summary> /// Finds the player's item from its inventory. /// </summary> public PvPItem FindPlayerItem(int type) => TPlayer.FindItem(type) != -1 ? PvPUtils.ConvertToPvPItem(TPlayer.inventory[TPlayer.FindItem(type)]) : new PvPItem(type) { playerIndexTheItemIsReservedFor = Index };
/// <summary> /// Applies turtle and thorns damage to the attacker. /// </summary> public void ApplyReflectDamage(PvPPlayer attacker, int damage, PvPItem weapon) { PvPItem reflectType = new PvPItem(); if (PvPController.Config.EnableTurtle && this.TPlayer.setBonus == Language.GetTextValue("ArmorSetBonus.Turtle") && weapon.melee) { reflectType.SpecialName = "Turtle Armor"; int turtleDamage = (int)(damage * PvPController.Config.TurtleMultiplier); NetMessage.SendPlayerHurt(attacker.Index, PlayerDeathReason.ByCustomReason(PvPUtils.GetPvPDeathMessage(this, attacker, reflectType, 2)), turtleDamage, 0, false, true, 5); } if (PvPController.Config.EnableThorns && this.TPlayer.FindBuffIndex(14) != -1) { reflectType.SpecialName = "Thorns"; int thornDamage = (int)(damage * PvPController.Config.ThornMultiplier); NetMessage.SendPlayerHurt(attacker.Index, PlayerDeathReason.ByCustomReason(PvPUtils.GetPvPDeathMessage(this, attacker, reflectType, 2)), thornDamage, 0, false, true, 5); } }
/// <summary> /// Finds the player's item from its inventory. /// </summary> /// <param Name="type">Type of item being found</param> /// <returns>The item in the player's inventory</returns> public PvPItem FindPlayerItem(int type) => PvPUtils.ConvertToPvPItem(TPlayer.inventory[TPlayer.FindItem(type)]);
/// <summary> /// Performs additional actions for projectiles. /// </summary> public void PerformProjectileAction() { switch (type) { //Medusa Ray projectile case 536: foreach (PvPPlayer pvper in PvPController.PvPers.Where(c => c != null)) { if (OwnerProjectile.Index == pvper.Index) { continue; } if (!pvper.TPlayer.hostile || pvper.Dead) { continue; } if (Vector2.Distance(OwnerProjectile.TPlayer.position, pvper.TPlayer.position) <= 300) { if (pvper.CheckMedusa()) { pvper.DamagePlayer(OwnerProjectile, ItemOriginated, pvper.GetDamageDealt(OwnerProjectile, ItemOriginated, this), 0, PvPUtils.IsCrit(OwnerProjectile.GetCrit(ItemOriginated))); pvper.SetBuff(Database.GetBuffInfo(DbConsts.ProjectileTable, 535, true)); } } } break; } }
/// <summary> /// Calculates pvp damage and performs interactions with players, /// such as buffs and other miscellaneous broken vanilla pvp mechanics. /// </summary> /// <param Name="sender"></param> /// <param Name="e"></param> private void OnPlayerHurt(object sender, PlayerHurtArgs e) { if (!PvPController.Config.EnablePlugin) { return; } if (!e.IsPvPDamage) { return; } e.Args.Handled = true; if (!e.Target.CanBeHit()) { return; } if (PvPController.Config.EnableKnockback) { float knockback = e.Weapon.GetKnockback(e.Attacker); if (knockback >= PvPController.Config.KnockbackMinimum) { e.Target.KnockBack(e.Weapon.GetKnockback(e.Attacker), e.Attacker.GetAngleFrom(e.Target.TPlayer.position), e.Target.IsLeftFrom(e.Attacker.TPlayer.position) ? -e.HitDirection : e.HitDirection); e.HitDirection = 0; } } e.Target.DamagePlayer(e.Attacker, e.Weapon, e.InflictedDamage, e.HitDirection, PvPController.Config.EnableCriticals && PvPUtils.IsCrit(e.Crit)); e.Target.ApplyPvPEffects(e.Attacker, e.Weapon, e.Projectile, e.InflictedDamage); if (PvPController.Config.EnableProjectileDebuffs) { e.Target.SetBuff(Database.GetBuffInfo(DbConsts.ProjectileTable, e.PlayerHitReason.SourceProjectileType, true)); } if (PvPController.Config.EnableProjectileSelfBuffs) { e.Attacker.SetBuff(Database.GetBuffInfo(DbConsts.ProjectileTable, e.PlayerHitReason.SourceProjectileType, false)); } if (PvPController.Config.EnableWeaponDebuffs) { e.Target.SetBuff(Database.GetBuffInfo(DbConsts.ItemTable, e.Attacker.GetPlayerItem.netID, true)); } if (PvPController.Config.EnableWeaponSelfBuffs) { e.Attacker.SetBuff(Database.GetBuffInfo(DbConsts.ItemTable, e.Attacker.GetPlayerItem.netID, false)); } if (PvPController.Config.EnableBuffDebuff) { e.Target.ApplyBuffDebuffs(e.Attacker, e.Weapon); } if (PvPController.Config.EnableBuffSelfBuff) { e.Attacker.ApplyBuffSelfBuff(); } }
private static void ModPvP(CommandArgs args) { var player = args.Player; var input = args.Parameters; int id = -1; DbObject dbObject = null; if (input.Count < 1 || !StringConsts.TryGetSectionFromString(input[0], out var section)) { player.SendErrorMessage(HelpModPvP); return; } if (section == StringConsts.Help) { if (input.Count > 1) { StringConsts.TryGetSectionFromString(input[1], out var helpsection); switch (helpsection) { case StringConsts.Database: player.SendMessage(DatabaseAttributes, Color.Yellow); return; case StringConsts.Config: player.SendMessage(ConfigAttributes, Color.Yellow); return; default: player.SendErrorMessage(InvalidSyntax + AttributesHelp); return; } } player.SendErrorMessage(AttributesHelp); return; } if (section != StringConsts.Config) { if (input.Count < 3) { player.SendErrorMessage(HelpModPvP); return; } if (!int.TryParse(input[1], out id)) { var foundItems = TShock.Utils.GetIdFromInput(section, input[1]); if (foundItems.Count == 1) { id = foundItems[0]; } else if (foundItems.Count > 1) { player.SendErrorMessage("Found Multiple items"); foreach (int item in foundItems) { player.SendMessage($"({item}) {MiscUtils.GetNameFromInput(section, item)}", Color.Yellow); } return; } else { player.SendErrorMessage(NothingFoundError); return; } } dbObject = Cache.GetSection(section, id); if (dbObject == null) { player.SendErrorMessage(NothingFoundError); return; } if (input.Count < 4) { player.SendErrorMessage(InvalidSyntax + "Please enter value(s) for the attribute(s)."); return; } } else { if (input.Count < 3) { player.SendErrorMessage(HelpModPvP); return; } } var pairedInputs = MiscUtils.SplitIntoPairs(input.Skip((section != StringConsts.Config).ToInt() + 1).ToArray()); foreach (var pair in pairedInputs) { var attribute = ""; if (section != StringConsts.Config) { StringConsts.TryGetDatabaseAttributeFromString(pair[0], out attribute); } else { StringConsts.TryGetConfigValueFromString(pair[0], out attribute); } pair[0] = attribute; } switch (section) { case DbTables.ItemTable: case DbTables.ProjectileTable: case DbTables.BuffTable: string name = MiscUtils.GetNameFromInput(section, id); player.SendMessage($"Modifying {name} ({id})", Color.Green); foreach (var pair in pairedInputs) { if (dbObject.TrySetValue(pair[0], pair[1])) { player.SendMessage($"Set {pair[0]} to {pair[1]}", Color.YellowGreen); if (args.Silent) { PvPModifier.Webhook.Send(player.Account.Name, section, name, pair[0], pair[1]); } } else { player.SendErrorMessage(InvalidValue(pair[0], section)); } } if (dbObject is DbItem) { foreach (var pvper in PvPModifier.ActivePlayers) { if (!pvper.TPlayer.hostile) { continue; } int itemindex = pvper.TPlayer.FindItem(id); if (itemindex != -1) { SSCUtils.FillInventoryToIndex(pvper, 0, Constants.JunkItem, itemindex); var item = pvper.TPlayer.inventory[itemindex]; SSCUtils.SetItem(pvper, (byte)itemindex, 0); pvper.InvTracker.AddItem(PvPUtils.GetCustomWeapon(pvper, id, item.prefix, (short)item.stack)); } pvper.InvTracker.StartDroppingItems(); } } break; case StringConsts.Config: foreach (var pair in pairedInputs) { if (MiscUtils.SetValueWithString(PvPModifier.Config, pair[0], pair[1])) { player.SendSuccessMessage($"Set {pair[0]} to {pair[1]}"); } else { player.SendErrorMessage(ConfigValueFail(pair[0], pair[1])); } } PvPModifier.Config.Write(Config.ConfigPath); break; default: player.SendErrorMessage(HelpModPvP); return; } }
/// <summary> /// Finds the player's item from its inventory. /// </summary> public PvPItem FindPlayerItem(int type) => TPlayer.FindItem(type) != -1 ? PvPUtils.ConvertToPvPItem(TPlayer.inventory[TPlayer.FindItem(type)]) : new PvPItem(type) { owner = Index };
private static void ResetPvP(CommandArgs args) { Console.WriteLine("Enter Cms"); Console.WriteLine("MaxAI: " + Terraria.Projectile.maxAI); args.Player.SendErrorMessage("" + Terraria.Projectile.maxAI); var player = args.Player; var input = args.Parameters; if (input.Count < 1 || !StringConsts.TryGetSectionFromString(input[0], out var section)) { player.SendErrorMessage(InvalidSyntax + ResetList); return; } switch (section) { case StringConsts.Database: Database.InitDefaultTables(); Database.LoadDatabase(); foreach (var pvper in PvPModifier.ActivePlayers) { PvPUtils.RefreshInventory(pvper); } player.SendSuccessMessage("Reset database to default."); return; case StringConsts.Config: PvPModifier.Config.ResetConfigValues(); PvPModifier.Config.Write(Config.ConfigPath); player.SendSuccessMessage("Reset config values to default."); return; case DbTables.ItemTable: case DbTables.ProjectileTable: case DbTables.BuffTable: if (input.Count < 2) { player.SendErrorMessage("Please provide a valid id or name."); return; } if (!int.TryParse(input[1], out int id)) { var foundList = TShock.Utils.GetIdFromInput(section, input[1]); id = foundList[0]; if (foundList.Count == 0) { player.SendErrorMessage("Please provide a valid id or name."); return; } if (foundList.Count > 1) { player.SendErrorMessage("Found multiple of input"); foreach (int items in foundList) { player.SendMessage($"({items}) {MiscUtils.GetNameFromInput(section, items)}", Color.Yellow); } return; } } /* * if (!int.TryParse(input[1], out int id)) * { * var foundList = TShock.Utils.GetIdFromInput(section, input[1]); * id = foundList[0]; * } */ Database.DeleteRow(section, id); Database.Query(Database.GetDefaultValueSqlString(section, id)); string log = "Reset the values of {0}".SFormat(MiscUtils.GetNameFromInput(section, id)); if (section == DbTables.ItemTable) { foreach (var pvper in PvPModifier.ActivePlayers) { PvPUtils.RefreshItem(pvper, id); } } player.SendSuccessMessage(log); Database.LoadDatabase(); PvPModifier.Config.LogChange($"[{player.Name} ({DateTime.Now})] {log}"); break; default: player.SendErrorMessage("Invalid parameters. " + ResetList); return; } }
public PvPItem GetPlayerItem() { return(PvPUtils.ConvertToPvPItem(SelectedItem)); }