public override void UpdateInventory(Player player)
        {
            currentWaitTime++;
            if (currentWaitTime < WaitTime * 60)
            {
                return;
            }

            if (PokemonName == null || PokemonName == string.Empty)
            {
                item.TurnToAir();//This is invalid item
                return;
            }

            ParentPokemon hatchedPokemon = TerramonMod.GetPokemon(PokemonName);
            string        pokemonName    = hatchedPokemon?.GetType().Name;

            if (player.whoAmI != Main.myPlayer)
            {
                return;
            }

            switch (Main.netMode)
            {
            case NetmodeID.MultiplayerClient:
            {
                var packet = new BaseCatchPacket();
                packet.Send((TerramonMod)mod, pokemonName, pokemonName, player.getRect(),
                            ItemType <PokeballCaught>());
                break;
            }

            case NetmodeID.Server:
            {
                BaseCaughtClass.writeDetour(pokemonName, pokemonName,
                                            GetSmallSpritePath(pokemonName), 1, "", false); //This force server to write data when SetDefault() was called
                Item.NewItem(player.position, ItemType <PokeballCaught>());                 // Within this call SetDefault was called
                break;
            }

            default:
            {
                int             pokeballIndex = Item.NewItem(player.position, ItemType <PokeballCaught>());
                BaseCaughtClass pokeballItem  = Main.item[pokeballIndex].modItem as BaseCaughtClass;
                pokeballItem.PokemonName     = pokeballItem.CapturedPokemon = pokemonName;
                pokeballItem.SmallSpritePath = GetSmallSpritePath(pokemonName);
                break;
            }
            }

            Main.NewText(player.name + " the " + pokemonName + " Egg has hatched!", Color.Orange);
            player.ConsumeItem(item.type);
            currentWaitTime = 0;
        }
Exemple #2
0
        private void Catch(ref Projectile proj, ref bool crit, ref int dmg, int type)
        {
            var PokeNam = Regex.Replace(HomeClass().Name, nameMatcher, "$1 ");

            if (pokeName.Value != PokeNam)
            {
                pokeName = TerramonMod.Localisation.GetLocalisedString(new LocalisedString(PokeNam));
            }
            proj.ai[1] = 2;
            crit       = false;
            dmg        = npc.lifeMax;
            CreateDust(4);
            CombatText.NewText(npc.Hitbox, Color.Orange, $"{pokeName.Value} was caught!", true);

            if (Main.netMode == NetmodeID.MultiplayerClient)
            {
                var packet = new BaseCatchPacket();
                packet.Send((TerramonMod)mod, HomeClass().Name, npc.TypeName, npc.getRect(), type, shiny);
            }
            else
            {
                if (Main.netMode == NetmodeID.Server)
                {
                    BaseCaughtClass.writeDetour(HomeClass().Name, npc.TypeName, GetSmallSpritePath(npc), 1, "", shiny);
                }

                int index = Item.NewItem(npc.getRect(), type);
                if (index >= 400)
                {
                    return;
                }

                if (Main.netMode == NetmodeID.Server)
                {
                    return;
                }

                if (!(Main.item[index].modItem is BaseCaughtClass item))
                {
                    return;
                }
                item.PokemonName = npc.TypeName;
                if (shiny)
                {
                    item.isShiny = true;
                }
                else
                {
                    item.isShiny = false;
                }

                item.CapturedPokemon = HomeClass().Name;
            }
        }
        public override void HandleFromClient(BinaryReader reader, int whoAmI)
        {
            var data = reader.ReadString();

            switch (data)
            {
            case SQUIRTLE:
            {
                if (!Main.player[whoAmI].active)
                {
                    return;
                }

                BaseCaughtClass.writeDetour(nameof(Pokemon.FirstGeneration.Normal.Squirtle), "Squirtle",
                                            "Terramon/Minisprites/Regular/miniSquirtle");
                int index = Item.NewItem(Main.player[whoAmI].getRect(), ModContent.ItemType <PokeballCaught>());
                if (index >= 400 || !(Main.item[index].modItem is PokeballCaught modItem))
                {
                    return;
                }
            }
            break;

            case CHARMANDER:
            {
                BaseCaughtClass.writeDetour(nameof(Pokemon.FirstGeneration.Normal.Charmander), "Charmander",
                                            "Terramon/Minisprites/Regular/miniCharmander");
                int index = Item.NewItem(Main.player[whoAmI].getRect(), ModContent.ItemType <PokeballCaught>());
                if (index >= 400 || !(Main.item[index].modItem is PokeballCaught modItem))
                {
                    return;
                }
            }
            break;

            case BULBASAUR:
            {
                BaseCaughtClass.writeDetour(nameof(Pokemon.FirstGeneration.Normal.Bulbasaur), "Bulbasaur",
                                            "Terramon/Minisprites/Regular/miniBulbasaur");
                int index = Item.NewItem(Main.player[whoAmI].getRect(), ModContent.ItemType <PokeballCaught>());
                if (index >= 400 || !(Main.item[index].modItem is PokeballCaught modItem))
                {
                    return;
                }
            }
            break;
            }
        }