public void Apply(Terraria.Projectile projectile) { // if (Owner < 255) // projectile.Creator = Main.player[Owner]; projectile.identity = Id; projectile.owner = Owner; projectile.damage = Damage; projectile.knockBack = Knockback; // projectile.position = new Vector2(X, Y); // projectile.velocity = new Vector2(VX, VY); projectile.ai = AI; }
public static void OnSetDefaultsEnd(Terraria.Projectile projectle, int type) { var ctx = new HookContext(); var args = new HookArgs.ProjectileSetDefaults() { Projectile = projectle, Type = type, State = MethodState.End }; HookPoints.ProjectileSetDefaults.Invoke(ref ctx, ref args); }
public static void OnNetDefaultsEnd(Terraria.Item item, int type) { var ctx = HookContext.Empty; var args = new HookArgs.ItemNetDefaults() { State = MethodState.End, Type = type, Item = item }; HookPoints.ItemNetDefaults.Invoke(ref ctx, ref args); }
/// <summary> /// Update override to adjust game chat mode. /// </summary> /// <param name="gameTime"></param> protected override void Update(GameTime gameTime) { base.Update(gameTime); // Set the chat mode based on our controls focus.. Terraria.SetMainField("chatMode", this._chatInput.Focused); }
//Death message //Player killed //Teleport /// <summary> /// Callde via vanilla code when a player has been hurt /// </summary> /// <param name="player">Player.</param> /// <param name="damage">Damage.</param> /// <param name="hitDirection">Hit direction.</param> /// <param name="pvp">If set to <c>true</c> pvp.</param> /// <param name="quiet">If set to <c>true</c> quiet.</param> /// <param name="deathText">Death text.</param> /// <param name="crit">If set to <c>true</c> crit.</param> /// <param name="cooldownCounter">Cooldown counter.</param> public static bool OnPlayerHurt(Terraria.Player player, int damage, int hitDirection, bool pvp = false, bool quiet = false, string deathText = " was slain...", bool crit = false, int cooldownCounter = -1) { var ctx = new HookContext() { // Sender = player, This // Player = player }; var args = new HookArgs.PlayerHurt() { Victim = player, Damage = damage, HitDirection = hitDirection, Pvp = pvp, Quiet = quiet, Obituary = deathText, Critical = crit, CooldownCounter = cooldownCounter }; HookPoints.PlayerHurt.Invoke(ref ctx, ref args); if (ctx.CheckForKick()) return false; return ctx.Result == HookResult.DEFAULT; }
/// <summary> /// Raised by vanilla code when a player has been killed /// </summary> /// <param name="player">Player.</param> /// <param name="dmg">Dmg.</param> /// <param name="hitDirection">Hit direction.</param> /// <param name="pvp">Pvp.</param> /// <param name="deathText">Death text.</param> public static bool OnPlayerKilled(Terraria.Player player, ref double dmg, ref int hitDirection, ref bool pvp, ref string deathText) { var ctx = new HookContext() { Sender = player, Player = player }; var args = new HookArgs.PlayerKilled() { Damage = dmg, HitDirection = hitDirection, PvP = pvp, DeathText = deathText }; HookPoints.PlayerKilled.Invoke(ref ctx, ref args); if (ctx.CheckForKick()) return false; if (ctx.Result == HookResult.DEFAULT) { deathText = player.name + deathText; return true; } dmg = args.Damage; hitDirection = args.HitDirection; pvp = args.PvP; deathText = args.DeathText; return ctx.Result != HookResult.IGNORE; }
public static Character AddCharacter(this TContext ctx, int userId, Terraria.Player player) { Character chr = new Character() { UserId = userId, UUID = player.ClientUUId, Health = player.statLife, MaxHealth = player.statLifeMax, Mana = player.statMana, MaxMana = player.statManaMax, SpawnX = player.SpawnX, SpawnY = player.SpawnY, Hair = player.hair, HairDye = player.hairDye, HideVisual = DataEncoding.EncodeInteger(player.hideVisual), Difficulty = player.difficulty, HairColor = DataEncoding.EncodeColor(player.hairColor), SkinColor = DataEncoding.EncodeColor(player.skinColor), EyeColor = DataEncoding.EncodeColor(player.eyeColor), ShirtColor = DataEncoding.EncodeColor(player.shirtColor), UnderShirtColor = DataEncoding.EncodeColor(player.underShirtColor), PantsColor = DataEncoding.EncodeColor(player.pantsColor), ShoeColor = DataEncoding.EncodeColor(player.shoeColor), AnglerQuests = player.anglerQuestsFinished }; ctx.Characters.Add(chr); ctx.SaveChanges(); return chr; }
public static Character UpdateCharacter(this Character character, int userId, Terraria.Player player) { character.UserId = userId; character.UUID = player.ClientUUId; character.Health = player.statLife; character.MaxHealth = player.statLifeMax; character.Mana = player.statMana; character.MaxMana = player.statManaMax; character.SpawnX = player.SpawnX; character.SpawnY = player.SpawnY; character.Hair = player.hair; character.HairDye = player.hairDye; character.HideVisual = DataEncoding.EncodeInteger(player.hideVisual); character.Difficulty = player.difficulty; character.HairColor = DataEncoding.EncodeColor(player.hairColor); character.SkinColor = DataEncoding.EncodeColor(player.skinColor); character.EyeColor = DataEncoding.EncodeColor(player.eyeColor); character.ShirtColor = DataEncoding.EncodeColor(player.shirtColor); character.UnderShirtColor = DataEncoding.EncodeColor(player.underShirtColor); character.PantsColor = DataEncoding.EncodeColor(player.pantsColor); character.ShoeColor = DataEncoding.EncodeColor(player.shoeColor); character.AnglerQuests = player.anglerQuestsFinished; return character; }
void entry_OnClick(Terraria.UI.UIMouseEvent evt, Terraria.UI.UIElement listeningElement) { var entry = (PrefixEntry)listeningElement; var baseItem = new Item(); baseItem.SetDefaults(entry.Item.type); baseItem.Prefix(entry.Item.prefix); _itemSlot.Item = baseItem; }
public JistPlugin(Terraria.Main game) : base(game) { Order = 1; Instance = new JistEngine(this); TShockAPI.Commands.ChatCommands.Add(new TShockAPI.Command("jist.cmd", TShockAPI_JistChatCommand, "jist")); ServerApi.Hooks.GameInitialize.Register(this, game_initialize); }
void PUIUsableItemSlot_OnClick(Terraria.UI.UIMouseEvent evt, Terraria.UI.UIElement listeningElement) { if (Main.playerInventory) { Main.NewText("Clicked"); var mouseItem = Main.mouseItem.Clone(); Main.mouseItem = this.Item; this.Item = mouseItem; } }
public static PlayerFileData CreateAndSave(Terraria.Player player) { PlayerFileData playerFileDatum = new PlayerFileData() { Metadata = FileMetadata.FromCurrentSettings(FileType.Player), Player = player, }; playerFileDatum._path = Main.GetPlayerPathFromName(player.name); Terraria.Player.SavePlayer(playerFileDatum, true); return playerFileDatum; }
public static void OnNPCKilled(Terraria.NPC npc) { var ctx = new HookContext(); var args = new HookArgs.NPCKilled() { Type = npc.type, NetId = npc.netID }; HookPoints.NPCKilled.Invoke(ref ctx, ref args); }
public static void OnAIEnd(Terraria.Projectile projectle) { var ctx = new HookContext(); var args = new HookArgs.ProjectileAI() { Projectile = projectle, State = MethodState.End }; HookPoints.ProjectileAI.Invoke(ref ctx, ref args); }
public static void OnSetDefaultsBegin(Terraria.Item item, string itemName) { var ctx = HookContext.Empty; var args = new HookArgs.ItemSetDefaultsByName() { State = MethodState.Begin, Name = itemName, Item = item }; HookPoints.ItemSetDefaultsByName.Invoke(ref ctx, ref args); }
public static void OnSetDefaultsBegin(Terraria.Item item, int type) { var ctx = HookContext.Empty; var args = new HookArgs.ItemSetDefaultsByType() { State = MethodState.Begin, Type = type, Item = item }; HookPoints.ItemSetDefaultsByType.Invoke(ref ctx, ref args); }
public static PlayerFileData CreateAndSave(Terraria.Player player) { PlayerFileData playerFileDatum = new PlayerFileData() { Metadata = FileMetadata.FromCurrentSettings(FileType.Player), Player = player, _isCloudSave = (SocialAPI.Cloud == null ? false : SocialAPI.Cloud.EnabledByDefault), }; playerFileDatum._path = Main.GetPlayerPathFromName(player.name, playerFileDatum.IsCloudSave); ((playerFileDatum.IsCloudSave ? Main.CloudFavoritesData : Main.LocalFavoriteData)).ClearEntry(playerFileDatum); Terraria.Player.SavePlayer(playerFileDatum, true); return playerFileDatum; }
void OnGiveCommand(ConsoleCommandArgs args) { if (args.Arguments.Count > 1) { var allItemNames = Terraria.GetMainField <string[]>("itemName"); var itemIds = new List <int>(); var player = DetoxPlayers.LocalPlayer; int successes = 0; for (int i = 1; i < args.Arguments.Count; i += 2) { var itemId = GetItemId(args.Arguments[i]); var count = -1; if (itemId != -1) { if (Int32.TryParse(args.Arguments[i + 1], out count)) { for (int j = 0; j < count; j++) { player.Invoke("PutItemInInventory", itemId, -1); } successes++; } else { Console.PrintConsole(args.Arguments[i + 1] + " is not a valid integer!", ConsoleMessageType.Warning); } } else { Console.PrintConsole("Item \"" + args.Arguments[i] + "\" not found!", ConsoleMessageType.Warning); } } if (successes > 0) { Console.PrintConsole("Put " + successes + " item" + (successes > 1 ? "s" : "") + "into your inventory!", ConsoleMessageType.About); } else { Console.PrintConsole("Couldn't put any item into your inventory.", ConsoleMessageType.Warning); } } else { Console.PrintConsole("No item specified!", ConsoleMessageType.Error); Console.PrintConsole("Usage: /give <item1> <count1> (<item2> <count2> ...)", ConsoleMessageType.Normal); } args.Handled = true; }
/// <summary> /// Update override to enforce chatmode block. /// </summary> /// <param name="gameTime"></param> protected override void Update(GameTime gameTime) { // Allow base control to update.. base.Update(gameTime); // Locate the console textbox.. var consoleEdit = this._console.Controls.SingleOrDefault(c => c.GetType() == typeof(TextBox)); if (consoleEdit == null) { return; } // Set the chat mode.. Terraria.SetMainField("chatMode", consoleEdit.Focused); }
/// <summary> /// Should occur when an NPC dies; gives rewards out to all the players that hit it. /// </summary> static void GiveRewardsForNPC(Terraria.NPC NPC) { lock (__dictionaryLock) { if (DamageDictionary.ContainsKey(NPC)) { List<PlayerDamage> playerDamageList = DamageDictionary[NPC]; //for this to run money from boss or NPC has to be enabled. if ((NPC.boss && WorldConfiguration.MoneyFromBossEnabled) || (!NPC.boss && WorldConfiguration.MoneyFromNPCEnabled)) { foreach (PlayerDamage damage in playerDamageList) { if (damage.Player == null) { continue; } Economy.EconomyPlayer ePlayer = SEconomyPlugin.GetEconomyPlayerSafe(damage.Player.whoAmi); Money rewardMoney = Convert.ToInt64(Math.Round(WorldConfiguration.MoneyPerDamagePoint * damage.Damage)); //load override by NPC type, this allows you to put a modifier on the base for a specific mob type. Configuration.WorldConfiguration.NPCRewardOverride overrideReward = WorldConfiguration.Overrides.FirstOrDefault(i => i.NPCID == NPC.type); if (overrideReward != null) { rewardMoney = Convert.ToInt64(Math.Round(overrideReward.OverridenMoneyPerDamagePoint * damage.Damage)); } //if the user doesn't have a bank account or the reward for the mob is 0 (It could be) skip it if (ePlayer != null && ePlayer.BankAccount != null && rewardMoney > 0) { Journal.CachedTransaction fund = new Journal.CachedTransaction() { Aggregations = 1, Amount = rewardMoney, DestinationBankAccountK = ePlayer.BankAccount.BankAccountK, Message = NPC.name, SourceBankAccountK = SEconomyPlugin.WorldAccount.BankAccountK }; if ((NPC.boss && WorldConfiguration.AnnounceBossKillGains) || (!NPC.boss && WorldConfiguration.AnnounceNPCKillGains)) { fund.Options |= Journal.BankAccountTransferOptions.AnnounceToReceiver; } //commit it to the transaction cache Journal.TransactionJournal.AddCachedTransaction(fund); } } } //entry must be removed after processing unconditionally DamageDictionary.Remove(NPC); } } }
public static int OnSetDefaultsBegin(Terraria.Projectile projectle, int type) { var ctx = new HookContext(); var args = new HookArgs.ProjectileSetDefaults() { Projectile = projectle, Type = type, State = MethodState.Begin }; HookPoints.ProjectileSetDefaults.Invoke(ref ctx, ref args); type = args.Type; if (ctx.Result == HookResult.RECTIFY && ctx.ResultParam is Int32) type = (int)ctx.ResultParam; return type; }
void OnTimeCommand(ConsoleCommandArgs args) { args.Handled = true; if (args.Arguments.Count == 2) { double time; if (Double.TryParse(args.Arguments[1], out time)) { Terraria.SetMainField("time", time); Console.PrintConsole("Time set!", ConsoleMessageType.About); } else { Console.PrintConsole("Invalid time specified!", ConsoleMessageType.Error); Console.PrintConsole("Usage: /time <time>", ConsoleMessageType.Normal); } } else { Console.PrintConsole("No time specified!", ConsoleMessageType.Error); Console.PrintConsole("Usage: /time <time>", ConsoleMessageType.Normal); } }
void OnPreDrawInterface(EventArgs args) { if (!buildgrid || gridTexture == null) { return; } // Calculate the grid position.. var screenPosition = Terraria.GetMainField <Vector2>("screenPosition"); var posX = (int)((int)(screenPosition.X / 16f) * 16 - screenPosition.X); var posY = (int)((int)(screenPosition.Y / 16f) * 16 - screenPosition.Y); var width = Terraria.GetMainField <int>("screenWidth") / gridTexture.Width; var height = Terraria.GetMainField <int>("screenHeight") / gridTexture.Height; // Draw the grid.. for (var w = 0; w <= width + 1; w++) { for (var j = 0; j <= height + 1; j++) { Terraria.MainSpriteBatch.Draw(gridTexture, new Vector2(w * gridTexture.Width + posX, j * gridTexture.Height + posY), new Rectangle(0, 0, gridTexture.Width, gridTexture.Height), gridColor, 0f, default(Vector2), 1f, SpriteEffects.None, 0f); } } }
int GetItemId(string itemNameOrId) { if (allItemNames == null) { allItemNames = Terraria.GetMainField <string[]>("itemName"); } var itemId = -1; if (Int32.TryParse(itemNameOrId, out itemId)) { return(itemId); } else { for (int j = 0; j < allItemNames.Length; j++) { if (allItemNames[j].ToLower() == itemNameOrId.ToLower()) { return(j); } } } return(-1); }
/// <summary> /// Adds damage done by a player to an NPC slot. When the NPC dies the rewards for it will fill out. /// </summary> static void AddNPCDamage(Terraria.NPC NPC, Terraria.Player Player, int Damage) { lock (__dictionaryLock) { List<PlayerDamage> damageList; PlayerDamage playerDamage; if (DamageDictionary.ContainsKey(NPC)) { damageList = DamageDictionary[NPC]; } else { damageList = new List<PlayerDamage>(1); DamageDictionary.Add(NPC, damageList); } playerDamage = damageList.FirstOrDefault(i => i.Player == Player); if (playerDamage == null) { playerDamage = new PlayerDamage() { Player = Player }; damageList.Add(playerDamage); } //increment the damage into either the new or existing slot damage in the dictionary //If the damage is greater than the NPC's health then it was a one-shot kill and the damage should be capped. playerDamage.Damage += NPC != null && Damage > NPC.lifeMax ? NPC.lifeMax : Damage; } }
public IBankAccount GetBankAccount(Terraria.Player player) { return GetBankAccount(player.whoAmI); }
/// <summary> /// FocusGained callback to enable the Terraria chat mode. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ChatInput_OnFocusGained(object sender, TomShane.Neoforce.Controls.EventArgs e) { this._chatInput.TextColor = Color.White; Terraria.SetMainField("chatMode", true); }
public static void OnSetDefaultsEnd(Terraria.Item item, int type = 0, bool noMatCheck = false) { var ctx = HookContext.Empty; var args = new HookArgs.ItemSetDefaultsByType() { State = MethodState.End, Type = type, NoMatCheck = noMatCheck, Item = item }; HookPoints.ItemSetDefaultsByType.Invoke(ref ctx, ref args); }
/// <summary> /// FocusLost callback to disable the Terraria chat mode. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ChatInput_OnFocusLost(object sender, TomShane.Neoforce.Controls.EventArgs e) { Terraria.SetMainField("chatMode", false); }
public static bool Tile_Inequality(Terraria.Tile t1, Terraria.Tile t2) { return !t1.isTheSameAs(t2); }
/// <summary> /// Should occur when an NPC dies; gives rewards out to all the players that hit it. /// </summary> protected void GiveRewardsForNPC(Terraria.NPC NPC) { List<PlayerDamage> playerDamageList = null; IBankAccount account; TSPlayer player; Money rewardMoney = 0L; lock (__dictionaryMutex) { if (DamageDictionary.ContainsKey(NPC)) { playerDamageList = DamageDictionary[NPC]; if (DamageDictionary.Remove(NPC) == false) { TShock.Log.ConsoleError("seconomy: world economy: Remove of NPC after reward failed. This is an internal error."); } } } if (playerDamageList == null) { return; } if ((NPC.boss && WorldConfiguration.MoneyFromBossEnabled) || (!NPC.boss && WorldConfiguration.MoneyFromNPCEnabled)) { foreach (PlayerDamage damage in playerDamageList) { if (damage.Player == null || (player = TShockAPI.TShock.Players.FirstOrDefault(i => i != null && i.Index == damage.Player.whoAmI)) == null || (account = Parent.GetBankAccount(player)) == null) { continue; } rewardMoney = CustomMultiplier * Convert.ToInt64(Math.Round(Convert.ToDouble(WorldConfiguration.MoneyPerDamagePoint) * damage.Damage)); //load override by NPC type, this allows you to put a modifier on the base for a specific mob type. Configuration.WorldConfiguration.NPCRewardOverride overrideReward = WorldConfiguration.Overrides.FirstOrDefault(i => i.NPCID == NPC.type); if (overrideReward != null) { rewardMoney = CustomMultiplier * Convert.ToInt64(Math.Round(Convert.ToDouble(overrideReward.OverridenMoneyPerDamagePoint) * damage.Damage)); } if (rewardMoney <= 0 || player.Group.HasPermission("seconomy.world.mobgains") == false) { continue; } Journal.CachedTransaction fund = new Journal.CachedTransaction() { Aggregations = 1, Amount = rewardMoney, DestinationBankAccountK = account.BankAccountK, Message = NPC.name, SourceBankAccountK = Parent.WorldAccount.BankAccountK }; if ((NPC.boss && WorldConfiguration.AnnounceBossKillGains) || (!NPC.boss && WorldConfiguration.AnnounceNPCKillGains)) { fund.Options |= Journal.BankAccountTransferOptions.AnnounceToReceiver; } //commit it to the transaction cache Parent.TransactionCache.AddCachedTransaction(fund); } } }
public SEconomyScriptPlugin(Terraria.Main game) : base(game) { }
/// <summary> /// Default Constructor /// </summary> /// <param name="manager"></param> public DetoxConsole(Manager manager) : base(manager) { // Initialize this control.. base.Init(); base.Left = base.Top = 0; base.Name = "frmConsole"; base.Width = Terraria.MainGame.Window.ClientBounds.Width; base.Height = 250; base.Alpha = 255; base.Resizable = false; // // // this._console = new TomShane.Neoforce.Controls.Console(manager) { Anchor = Anchors.All, Name = "DetoxConsole", Width = base.ClientArea.Width, Height = base.ClientArea.Height, ChannelsVisible = false, MessageFormat = ConsoleMessageFormats.TimeStamp, TextColor = Color.White }; this._console.Channels.AddRange(new[] { new ConsoleChannel(0, "About", Color.Chartreuse), new ConsoleChannel(1, "Default", Color.White), new ConsoleChannel(2, "Warning", Color.Yellow), new ConsoleChannel(3, "Error", Color.Red) }); this._console.SelectedChannel = 1; this._console.MessageSent += (sender, e) => { // Ensure the command is valid.. if (string.IsNullOrEmpty(e.Message.Text) || !e.Message.Text.StartsWith("/")) { return; } // Attempt to handle the command.. e.Handled = ConsoleCommands.ProcessCommand(e.Message.Text); if (!e.Handled) { this.LogConsoleMessage(new DetoxAPI.ConsoleMessage("Invalid command or command error occurred.", ConsoleMessageType.Error)); e.Handled = true; } }; this._console.Init(); // // // base.Add(this._console); manager.Add(this); // Attach device settings event to resize console.. manager.DeviceSettingsChanged += args => { // Adjust the base panel size.. base.Width = Terraria.MainGame.Window.ClientBounds.Width; base.Height = 250; // Adjust the console size.. this._console.Width = base.ClientArea.Width; this._console.Height = base.ClientArea.Height; }; // Locate the console textbox.. var consoleEdit = this._console.Controls.SingleOrDefault(c => c.GetType() == typeof(TextBox)); if (consoleEdit == null) { return; } consoleEdit.KeyDown += (sender, e) => { // Prevent tilde from being processed.. if (e.Key == Keys.OemTilde) { e.Handled = true; } // Force escape to remove focus from the console.. if (e.Key == Keys.Escape) { consoleEdit.Focused = false; e.Handled = true; } }; consoleEdit.KeyPress += (sender, e) => { if (e.Key == Keys.OemTilde) { e.Handled = true; } }; consoleEdit.KeyUp += (sender, e) => { if (e.Key == Keys.OemTilde) { e.Handled = true; } }; consoleEdit.TextChanged += (sender, e) => { consoleEdit.Suspended = true; consoleEdit.Text = consoleEdit.Text.Replace("`", ""); consoleEdit.Suspended = false; e.Handled = true; }; consoleEdit.FocusGained += (sender, e) => Terraria.SetMainField("chatMode", false); consoleEdit.FocusLost += (sender, e) => Terraria.SetMainField("chatMode", false); // Subscribe to the API console message event.. DetoxAPI.Console.PrintConsoleMessage += (sender, e) => this.LogConsoleMessage(e); // Register some basic console commands.. DetoxAPI.ConsoleCommands.AddCommnd(new List <string> { "help", "info", "h", "?" }, "Prints a list of registered console commands.", OnHelpCommand); DetoxAPI.ConsoleCommands.AddCommnd(new List <string> { "exit", "close", "terminate" }, "Exits Terraria immediately.", args => System.Windows.Forms.Application.Exit()); DetoxAPI.ConsoleCommands.AddCommnd(new List <string> { "plugin", "extension", "p" }, "Handles a plugin command.", OnPluginCommand); }
public Main(Terraria.Main game) : base(game) { Order = -1; }
public void Apply(Terraria.Player player) { player.difficulty = Difficulty; player.name = Name; player.skinVariant = SkinVariant; player.hair = Hair; player.hairDye = HairDye; player.hideVisual = HideVisual; player.hideMisc = HideMisc; player.hairColor = HairColor; player.skinColor = SkinColor; player.eyeColor = EyeColor; player.shirtColor = ShirtColor; player.underShirtColor = UnderShirtColor; player.pantsColor = PantsColor; player.shoeColor = ShoeColor; player.extraAccessory = ExtraAccessory; Netplay.Clients[player.whoAmI].Name = Name; }
public TShockController(Terraria.Main game) : base(game) { }
/// <summary> /// Teleports a player to another player /// </summary> /// <param name="target"></param> /// <param name="style"></param> public void Teleport(Terraria.Player target, int style = 0) { if (this is Terraria.Player) { var plr = (Terraria.Player)this; Callbacks.NetplayCallback.CheckSection(plr.whoAmI, target.position); plr.Teleport(target.position, style); Terraria.NetMessage.SendData((int)Packet.TELEPORT, -1, -1, "", 0, plr.whoAmI, target.position.X, target.position.Y, 3); } }
private void save_Click(object sender, EventArgs e) { if (!File.Exists(terrariaPath.Text)) { MessageBox.Show("Terraria path needs to point at a valid executable.", Program.AssemblyName + " :: Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (!Utils.IsProcessElevated && plugins.Checked && !steamFixEnabled.Checked) { MessageBox.Show("Warning, your account does not have elevated administrator privileges. After patching, you might need to run Steam with elevated administrator privileges before running Terraria.", Program.AssemblyName, MessageBoxButtons.OK, MessageBoxIcon.Warning); } CheckInstallationFolder(); saveFileDialog.InitialDirectory = Path.GetDirectoryName(terrariaPath.Text); saveFileDialog.FileName = "Terraria.exe"; if (saveFileDialog.ShowDialog() == DialogResult.OK) { var original = terrariaPath.Text; if (File.Exists(saveFileDialog.FileName + ".bak")) { var warning = ""; try { var versionCurrent = IL.GetAssemblyVersion(saveFileDialog.FileName); var versionBackup = IL.GetAssemblyVersion(saveFileDialog.FileName + ".bak"); if (versionCurrent != versionBackup) { warning = Environment.NewLine + Environment.NewLine + "WARNING: Your Terraria.exe is version " + versionCurrent + " and your Terraria.exe.bak is version " + versionBackup + "."; if (versionCurrent > versionBackup) { warning += " It is not recommended to restore a backup of an older version of Terraria!"; } } } catch { } if (MessageBox.Show("Would you like to restore your backup before patching?" + warning, Program.AssemblyName, MessageBoxButtons.YesNo, string.IsNullOrEmpty(warning) ? MessageBoxIcon.Question : MessageBoxIcon.Warning) == DialogResult.Yes) { File.Delete(saveFileDialog.FileName); File.Move(saveFileDialog.FileName + ".bak", saveFileDialog.FileName); } } if (File.Exists(saveFileDialog.FileName)) { if (MessageBox.Show("Would you like to backup the existing file?", Program.AssemblyName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { File.Copy(saveFileDialog.FileName, saveFileDialog.FileName + ".bak", true); } } var buffValues = (from Buff buff in buffs.Where(buff => buff.Active) select buff.Index).ToList(); var details = new TerrariaDetails() { InfiniteCloudJumps = infiniteCloudJumps.Checked, FunctionalSocialSlots = functionalSocialSlots.Checked, VampiricHealing = (float)vampiricKnivesHealingRate.Value, SpectreHealing = (float)spectreHealingRate.Value, FixedPrefixes = fixedPrefixes.Checked, AccessoryPrefix = SetAccessoryPrefixValue(), DisplayTime = timeEnabled.Checked, PermanentBuffs = buffValues, PermanentWings = permanentWings.Enabled && permanentWings.Checked, OneHitKill = oneHitKill.Checked, InfiniteAmmo = infiniteAmmo.Checked, RemoveDrowning = removeDrowning.Checked, RemoveDiscordBuff = removeRodBuffEnabled.Checked, RemoveManaCost = removeManaCosts.Checked, RemovePotionSickness = removePotionSickness.Checked, RemoveAnglerQuestLimit = removeAnglerQuestLimit.Checked, MaxCraftingRange = maxCraftingRange.Checked, SpawnRateVoodoo = (int)spawnRateVoodoo.Value, SteamFix = steamFixEnabled.Enabled && steamFixEnabled.Checked, Plugins = plugins.Checked, }; try { Terraria.Patch(original, saveFileDialog.FileName, details); if (details.Plugins) { var targetFolder = Path.GetDirectoryName(saveFileDialog.FileName); foreach (var t in new[] { "PluginLoader.XNA.dll", "PluginLoader.FNA.dll" }) { var target = $"{targetFolder}\\{t}"; var pluginLoaderInfo = new FileInfo(target); while (Utils.IsFileLocked(pluginLoaderInfo)) { var result = MessageBox.Show(target + " is in use. Please close Terraria then hit OK.", Program.AssemblyName, MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); if (result == DialogResult.Cancel) { return; } } File.Copy(t, target, true); } if (!Directory.Exists(@".\Plugins")) { MessageBox.Show("Plugins folder is missing from TerrariaPatcher folder. Please re-download.", Program.AssemblyName, MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (!Directory.Exists(@".\Plugins\Shared")) { MessageBox.Show(@"Plugins\Shared folder is missing from TerrariaPatcher folder. Please re-download.", Program.AssemblyName, MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { new CopyPlugins(targetFolder).ShowDialog(); } } } catch (Exception ex) { Program.ShowErrorMessage("An error occurred, you possibly have already patched this exe or it is an incompatible version.\n\n" + ex.ToString()); } MessageBox.Show("Done.", Program.AssemblyName); } }
public virtual void Kill(Terraria.Projectile projectile, int timeLeft) { projectile.CloneDefaults(ProjectileID.Shuriken); }
/// <summary> /// Adds damage done by a player to an NPC slot. When the NPC dies the rewards for it will fill out. /// </summary> protected void AddNPCDamage(Terraria.NPC NPC, Terraria.Player Player, int Damage, bool crit = false) { List<PlayerDamage> damageList = null; PlayerDamage playerDamage = null; double dmg; if (Player == null || NPC.active == false || NPC.life <= 0) { return; } lock (__dictionaryMutex) { if (DamageDictionary.ContainsKey(NPC)) { damageList = DamageDictionary[NPC]; } else { damageList = new List<PlayerDamage>(1); DamageDictionary.Add(NPC, damageList); } } lock (__NPCDamageMutex) { if ((playerDamage = damageList.FirstOrDefault(i => i.Player == Player)) == null) { playerDamage = new PlayerDamage() { Player = Player }; damageList.Add(playerDamage); } if ((dmg = (crit ? 2 : 1) * Main.CalculateDamage(Damage, NPC.ichor ? NPC.defense - 20 : NPC.defense)) > NPC.life) { dmg = NPC.life; } } playerDamage.Damage += dmg; }