lukanpeixe / projetocastleroid

Trabalhando em códigos para o mod/mapa de aventura para Terraria produzido pelo Idealizador e seguidores do canal Press key to play.
Apache License 2.0
8 stars 7 forks source link

8- Npc Personalizavel #10

Open SamuelDeboni opened 7 years ago

SamuelDeboni commented 7 years ago

Script de um npc personalizável baseado no exempleMod do tModLoader, apenas adicionar no projeto. Não consegui fazer ficar imóvel

`using System.Linq; using Terraria; using Terraria.ID; using Terraria.ModLoader;

namespace Castleroid.NPCs { public class ExamplePerson : ModNPC { public override bool Autoload(ref string name, ref string texture, ref string[] altTextures) { name = "Example Person"; altTextures = new string[] { "Castleroid/NPCs/ExamplePerson_Alt_1" }; return mod.Properties.Autoload; }

    public override void SetDefaults()
    {
        npc.name = "Vendedor";
        npc.townNPC = true;
        npc.friendly = true;
        npc.width = 18;
        npc.height = 40;
        npc.aiStyle = 7;
        npc.damage = 10;
        npc.defense = 10000;
        npc.lifeMax = 10000;
        npc.soundHit = 1;
        npc.soundKilled = 1;
        npc.knockBackResist = 0.5f;
        Main.npcFrameCount[npc.type] = 25;
        NPCID.Sets.ExtraFramesCount[npc.type] = 9;
        NPCID.Sets.DangerDetectRange[npc.type] = 700;
        NPCID.Sets.AttackAverageChance[npc.type] = 30;
        NPCID.Sets.HatOffsetY[npc.type] = 4;
        NPCID.Sets.ExtraTextureCount[npc.type] = 1;
        animationType = NPCID.Guide;

    }

    public override void HitEffect(int hitDirection, double damage)
    {
        int num = npc.life > 0 ? 1 : 5;
        for (int k = 0; k < num; k++)
        {
            Dust.NewDust(npc.position, npc.width, npc.height, mod.DustType("Sparkle"));
        }
    }

    public override bool CanTownNPCSpawn(int numTownNPCs, int money)
    {
        return false;                                   //faz com que o npc não spawne em casas
    }

    public override string TownNPCName()
    {
        return "Vendedor";  //Nome do vendedor
    }

    public override string GetChat() // frases aleatorias para o npv
    {
        switch (Main.rand.Next(3))
        {
            case 0:
                return ".";
            case 1:
                return "...";
            default:
                return ".....";
        }
    }

    public override void SetChatButtons(ref string button, ref string button2)
    {
        button = Lang.inter[28];
    }

    public override void OnChatButtonClicked(bool firstButton, ref bool shop) //entra na loja
    {
        if (firstButton)
        {
            shop = true;
        }

    }

    public override void SetupShop(Chest shop, ref int nextSlot) // Itens da loja, pode ser tanto do terraria ou do proprio mod
    {
        shop.item[nextSlot].SetDefaults(/*Item 1*/);
        nextSlot++;
        shop.item[nextSlot].SetDefaults(/*Item 2*/);
        nextSlot++;
        shop.item[nextSlot].SetDefaults(/*Item n*/);
        nextSlot++;
    }

}

}`

lukanpeixe commented 7 years ago

10000 de defesa, que coisa humilde haha Obrigado manolo, se tiver algum problema com ele eu aviso :)

Gurigraphics commented 7 years ago

O que eu ainda não consegui é fazer o Spawn deste NPC ocorrer uma única vez. Nos exemplos, este NPC é criado após ser gerado um mundo novo. E nós precisamos inserir o NPC em um mundo que foi editado no Tedit. Por exemplo, quando o usuário entrar no jogo seria preciso matar esse NPC se ele já existe, e criar ele de novo. E não apenas criar.

Para matar o NPC coloquei o " npc.lifeMax = 0; ". Para fazer o spawn deste NPC, usei esse código:

int num = NPC.NewNPC((Main.spawnTileX + 5) * 16, Main.spawnTileY * 16, mod.NPCType("Example Person"), 0, 0f, 0f, 0f, 0f, 255);
        Main.npc[num].homeTileX = Main.spawnTileX + 5;
        Main.npc[num].homeTileY = Main.spawnTileY;
        Main.npc[num].direction = 1;
        Main.npc[num].homeless = true;

Este código precisa ser executado uma única vez. Do contrário, vai encher a tela de NPC. kkk

Fazer ele ficar parado também não consegui. Uma solução é colocar esse NPC em uma pequena ilha flutuante, e fazer uma loja tipo a casa lá do cara de cogumelo.

lukanpeixe commented 7 years ago

Já falei isso en outro tópico, mas só para atualizar o assunto no local correto:

Alterar os itens do NPC eu acho que poderei fazer sozinho (vi um tutorial sobre isso em algum canto/arquivo) e o Spawn não será necessário, basta colocar ele manualmente via heromod/cheat sheet e deixar ele lá.

O NPC também não precisara mais ficar imóvel, posso fazer uma sala de uma forma que ele não saia de onde esta.