using System.Collections.Generic; using Terraria; using Terraria.ID; using Terraria.ModLoader; using Terraria.GameContent.Personalities; using Terraria.Localization; namespace ForgottenWawiTech.Content.NPCs.OriginalNiko { [AutoloadHead] public class NikoNPC : ModNPC { public override void SetStaticDefaults() { // DisplayName.SetDefault("Niko"); Main.npcFrameCount[NPC.type] = 25; // The amount of frames the NPC has NPCID.Sets.ExtraFramesCount[NPC.type] = 9; // Generally for Town NPCs, this should be 9 NPCID.Sets.AttackFrameCount[NPC.type] = 4; NPCID.Sets.DangerDetectRange[NPC.type] = 700; // The amount of pixels away from the center of the npc that it tries to attack enemies NPCID.Sets.AttackType[NPC.type] = 0; NPCID.Sets.AttackTime[NPC.type] = 90; // The amount of time it takes for the NPC's attack animation to be over NPCID.Sets.AttackAverageChance[NPC.type] = 30; NPCID.Sets.HatOffsetY[NPC.type] = 4; // For when a party is active, the party hat spawns at a Y offset // Influences how the NPC looks in the Bestiary NPCID.Sets.NPCBestiaryDrawModifiers drawModifiers = new NPCID.Sets.NPCBestiaryDrawModifiers(0) { Velocity = 1f, // Draws the NPC in the bestiary as if its walking +1 tiles in the x direction Direction = 1 // -1 is left and 1 is right. NPCs are drawn facing the left by default }; NPCID.Sets.NPCBestiaryDrawOffset.Add(Type, drawModifiers); } public override void SetDefaults() { NPC.townNPC = true; NPC.friendly = true; NPC.width = 18; NPC.height = 40; NPC.aiStyle = 7; NPC.damage = 10; NPC.defense = 15; NPC.lifeMax = 250; NPC.HitSound = SoundID.NPCHit1; NPC.DeathSound = SoundID.NPCDeath1; NPC.knockBackResist = 0.5f; AnimationType = NPCID.Guide; } public override bool CanTownNPCSpawn(int numTownNPCs) { // NikoNPC can only spawn after Original Niko is defeated // Due to Terraria logic, we need to return true here if Niko has been defeated so that the NPC can respawn. return WorldDefeatedBosses.Niko; } public override List SetNPCNameList() { return new List() { "Niko" }; } public override void SetChatButtons(ref string button, ref string button2) { button = Language.GetTextValue("LegacyInterface.28"); // "Shop" } public override void OnChatButtonClicked(bool firstButton, ref string shop) { if (firstButton) { shop = "Shop"; } } public override void AddShops() { var npcShop = new NPCShop(Type) .Add(ItemID.LightningBug) // Example item, replace with your own items .Add(ItemID.Sunflower); // Example item, replace with your own items npcShop.Register(); } public override string GetChat() { switch (Main.rand.Next(8)) { case 0: return "Just because you defeated me doesn't mean I'm gone forever."; case 1: return "I'm taking the internet down for an hour, hope you don't mind."; case 2: return "FUCK!"; case 3: return "Be quick, I'm about to bugger off to Nando's."; case 4: return "I'm not dead yet!"; case 5: return "You can't get rid of me that easily!"; case 6: return "I'll be back!"; case 7: return "This isn't the end!"; default: return "I have no idea what to say."; } } public override void TownNPCAttackStrength(ref int damage, ref float knockback) { damage = 20; knockback = 4f; } public override void TownNPCAttackCooldown(ref int cooldown, ref int randExtraCooldown) { cooldown = 30; randExtraCooldown = 30; } public override void TownNPCAttackProj(ref int projType, ref int attackDelay) { projType = ProjectileID.SwordBeam; attackDelay = 1; } public override void TownNPCAttackProjSpeed(ref float multiplier, ref float gravityCorrection, ref float randomOffset) { multiplier = 12f; randomOffset = 2f; } } }