View difference between Paste ID: YvCArWDQ and zny818r2
SHOW: | | - or go back to the newest paste.
1
using System;
2
using System.Collections.Generic;
3
using Microsoft.Xna.Framework;
4
using Microsoft.Xna.Framework.Graphics;
5
using Terraria.ID;
6
using Terraria;
7
using Terraria.ModLoader;
8
9
namespace TutorialMOD.NPCs            //We need this to basically indicate the folder where it is to be read from, so you the texture will load correctly
10
{
11
    public class CustomTownNPC : ModNPC
12
    {
13
        public override bool Autoload(ref string name, ref string texture, ref string[] altTextures)
14
        {
15
            name = "Custom Town NPC";
16
            return mod.Properties.Autoload;
17
        }
18
        public override void SetDefaults()
19
        {
20
            npc.name = "Custom Town NPC";   //the name displayed when hovering over the npc ingame.
21
            npc.townNPC = true; //This defines if the npc is a town Npc or not
22
            npc.friendly = true;  //this defines if the npc can hur you or not()
23
            npc.width = 18; //the npc sprite width
24
            npc.height = 46;  //the npc sprite height
25
            npc.aiStyle = 7; //this is the npc ai style, 7 is Pasive Ai
26
            npc.defense = 25;  //the npc defense
27
            npc.lifeMax = 250;// the npc life
28
            npc.HitSound = SoundID.NPCHit1;  //the npc sound when is hit
29
            npc.DeathSound = SoundID.NPCDeath1;  //the npc sound when he dies
30
            npc.knockBackResist = 0.5f;  //the npc knockback resistance
31
            Main.npcFrameCount[npc.type] = 25; //this defines how many frames the npc sprite sheet has
32
            NPCID.Sets.ExtraFramesCount[npc.type] = 9;
33
            NPCID.Sets.AttackFrameCount[npc.type] = 4;
34
            NPCID.Sets.DangerDetectRange[npc.type] = 150; //this defines the npc danger detect range
35
            NPCID.Sets.AttackType[npc.type] = 3; //this is the attack type,  0 (throwing), 1 (shooting), or 2 (magic). 3 (melee) 
36
            NPCID.Sets.AttackTime[npc.type] = 30; //this defines the npc attack speed
37
            NPCID.Sets.AttackAverageChance[npc.type] = 10;//this defines the npc atack chance
38
            NPCID.Sets.HatOffsetY[npc.type] = 4; //this defines the party hat position
39
            animationType = NPCID.Guide;  //this copy the guide animation
40
        }
41
        public override bool CanTownNPCSpawn(int numTownNPCs, int money) //Whether or not the conditions have been met for this town NPC to be able to move into town.
42
        {
43
            if (NPC.downedBoss1)  //so after the EoC is killed
44
            {
45
                return true;
46
            }
47
            return false;
48
        }
49
        public override bool CheckConditions(int left, int right, int top, int bottom)    //Allows you to define special conditions required for this town NPC's house
50
        {
51
            return true;  //so when a house is available the npc will  spawn
52
        }
53
        public override string TownNPCName()     //Allows you to give this town NPC any name when it spawns
54
        {
55
            switch (WorldGen.genRand.Next(6))
56
            {
57
                case 0:
58
                    return "Rick";
59
                case 1:
60
                    return "Denis";
61
                case 2:
62
                    return "Heisenberg";
63
                case 3:
64
                    return "Jack";
65
                case 4:
66
                    return "Blue Magic";
67
                case 5:
68
                    return "Blue";
69
                default:
70
                    return "Walter";
71
            }
72
        }
73
74
        public override void SetChatButtons(ref string button, ref string button2)  //Allows you to set the text for the buttons that appear on this town NPC's chat window. 
75
        {
76
            button = "Buy Potions";   //this defines the buy button name
77
        }
78
        public override void OnChatButtonClicked(bool firstButton, ref bool openShop) //Allows you to make something happen whenever a button is clicked on this town NPC's chat window. The firstButton parameter tells whether the first button or second button (button and button2 from SetChatButtons) was clicked. Set the shop parameter to true to open this NPC's shop.
79
        {
80
81
            if (firstButton)
82
            {
83
                openShop = true;   //so when you click on buy button opens the shop
84
            }
85
        }
86
87
        public override void SetupShop(Chest shop, ref int nextSlot)       //Allows you to add items to this town NPC's shop. Add an item by setting the defaults of shop.item[nextSlot] then incrementing nextSlot.
88
        {
89
            if (NPC.downedSlimeKing)   //this make so when the king slime is killed the town npc will sell this
90
            {
91
                shop.item[nextSlot].SetDefaults(ItemID.RecallPotion);  //an example of how to add a vanilla terraria item
92
                nextSlot++;
93
                shop.item[nextSlot].SetDefaults(ItemID.WormholePotion);
94
                nextSlot++;
95
            }
96
            if (NPC.downedBoss3)   //this make so when Skeletron is killed the town npc will sell this
97
            {
98
                shop.item[nextSlot].SetDefaults(ItemID.BookofSkulls);
99
                nextSlot++;
100
                shop.item[nextSlot].SetDefaults(ItemID.ClothierVoodooDoll);
101
                nextSlot++;
102
            }
103
            shop.item[nextSlot].SetDefaults(ItemID.IronskinPotion);
104
            nextSlot++;
105
            shop.item[nextSlot].SetDefaults(mod.ItemType("CustomSword"));  //this is an example of how to add a modded item
106
            nextSlot++;
107
108
        }
109
110
        public override string GetChat()       //Allows you to give this town NPC a chat message when a player talks to it.
111
        {
112
            int wizardNPC = NPC.FindFirstNPC(NPCID.Wizard);   //this make so when this npc is close to Wizard
113
            if (wizardNPC >= 0 && Main.rand.Next(4) == 0)    //has 1 in 3 chance to show this message
114
            {
115
                return "Yes " + Main.npc[wizardNPC].displayName + " is a wizard.";
116
            }
117
            int guideNPC = NPC.FindFirstNPC(NPCID.Guide); //this make so when this npc is close to the Guide
118
            if (guideNPC >= 0 && Main.rand.Next(4) == 0) //has 1 in 3 chance to show this message
119
            {
120
                return "Sure you can ask " + Main.npc[guideNPC].displayName + " how to make Ironskin potion or you can buy it from me..hehehe.";
121
            }
122
            switch (Main.rand.Next(4))    //this are the messages when you talk to the npc
123
            {
124
                case 0:
125
                    return "You wanna buy something?";
126
                case 1:
127
                    return "What you want?";
128
                case 2:
129
                    return "I like this house.";
130
                case 3:
131
                    return "<I'm blue dabu di dabu dai>....OH HELLO THERE..";
132
                default:
133
                    return "Go kill Skeletron.";
134
135
            }
136
        }
137
        public override void TownNPCAttackStrength(ref int damage, ref float knockback)//  Allows you to determine the damage and knockback of this town NPC attack
138
        {
139
            damage = 40;  //npc damage
140
            knockback = 2f;   //npc knockback
141
        }
142
143
        public override void TownNPCAttackCooldown(ref int cooldown, ref int randExtraCooldown)  //Allows you to determine the cooldown between each of this town NPC's attack. The cooldown will be a number greater than or equal to the first parameter, and less then the sum of the two parameters.
144
        {
145
            cooldown = 5;
146
            randExtraCooldown = 10;
147
        }
148
        //------------------------------------This is an example of how to make the npc use a sward attack-------------------------------
149
        public override void DrawTownAttackSwing(ref Texture2D item, ref int itemSize, ref float scale, ref Vector2 offset)//Allows you to customize how this town NPC's weapon is drawn when this NPC is swinging it (this NPC must have an attack type of 3). Item is the Texture2D instance of the item to be drawn (use Main.itemTexture[id of item]), itemSize is the width and height of the item's hitbox
150
        {
151
            scale = 1f;
152
            item = Main.itemTexture[mod.ItemType("CustomSword")]; //this defines the item that this npc will use
153
            itemSize = 56;
154
        }
155
156
        public override void TownNPCAttackSwing(ref int itemWidth, ref int itemHeight) //  Allows you to determine the width and height of the item this town NPC swings when it attacks, which controls the range of this NPC's swung weapon.
157
        {
158
            itemWidth = 56;
159
            itemHeight = 56;
160
        }
161
162
        //----------------------------------This is an example of how to make the npc use a gun and a projectile ----------------------------------
163
        /*public override void DrawTownAttackGun(ref float scale, ref int item, ref int closeness) //Allows you to customize how this town NPC's weapon is drawn when this NPC is shooting (this NPC must have an attack type of 1). Scale is a multiplier for the item's drawing size, item is the ID of the item to be drawn, and closeness is how close the item should be drawn to the NPC.
164
          {
165
              scale = 1f;
166
              item = mod.ItemType("GunName");  
167
              closeness = 20;
168
          }
169
          public override void TownNPCAttackProj(ref int projType, ref int attackDelay)//Allows you to determine the projectile type of this town NPC's attack, and how long it takes for the projectile to actually appear
170
          {
171
              projType = ProjectileID.CrystalBullet;
172
              attackDelay = 1;
173
          }
174
175
          public override void TownNPCAttackProjSpeed(ref float multiplier, ref float gravityCorrection, ref float randomOffset)//Allows you to determine the speed at which this town NPC throws a projectile when it attacks. Multiplier is the speed of the projectile, gravityCorrection is how much extra the projectile gets thrown upwards, and randomOffset allows you to randomize the projectile's velocity in a square centered around the original velocity
176
          {
177
              multiplier = 7f;
178
             // randomOffset = 4f;
179
180
          }   */
181
182
    }
183
}