示例#1
0
        public override void AI()
        {
            if (!Terraria.Program.LoadedEverything)
            {
                return;
            }

            Player player = Main.player[projectile.owner];

            Players.OreEater modPlayer = player.GetModPlayer <Players.OreEater>();

            if (modPlayer.pet == null)
            {
                modPlayer.pet = (PetBase) new PetV5();
            }
            AI2(player, modPlayer, (PetBase)modPlayer.pet);
        }
示例#2
0
        public override void Update(Player player, ref int buffIndex)
        {
            if (!Terraria.Program.LoadedEverything)
            {
                return;
            }

            Players.OreEater modPlayer = player.GetModPlayer <Players.OreEater>();

            if (!modPlayer.oreEaterEnable)
            {
                modPlayer.oreEaterEnable = true;
                bool petProjectileNotSpawned = player.ownedProjectileCounts[mod.ProjectileType("OreEaterV4")] <= 0;
                if (petProjectileNotSpawned && player.whoAmI == Main.myPlayer)
                {
                    for (int _type = Main.npcTexture.Length - 1; _type >= 0; _type--)
                    {
                        string npcTexture = Main.npcTexture[_type].ToString();
                        if (npcTexture == "AutoStacker/NPCs/OreEaterV4")
                        {
                            foreach (var npc in Main.npc.Where(npc => npc.type == _type))
                            {
                                npc.active = false;
                            }
                            modPlayer.index = NPC.NewNPC((int)player.position.X, (int)player.position.Y, _type);
                            modPlayer.npc   = Main.npc[modPlayer.index];
                            NPC.setNPCName("Ore Eater", modPlayer.npc.type);

                            Projectile.NewProjectile(player.position.X + (float)(player.width / 2), player.position.Y + (float)(player.height / 2), 0f, 0f, mod.ProjectileType("OreEaterV4"), 0, 0f, player.whoAmI, 0f, 0f);
                            //modPlayer.pet.initListA();
                            //modPlayer.pet.routeListX.Clear();
                            //modPlayer.pet.routeListY.Clear();
                            modPlayer.pet = new Projectiles.PetV4();
                            break;
                        }
                    }
                }
            }
        }
示例#3
0
        //public override void AI()
        //{
        //	if(!Terraria.Program.LoadedEverything )//&& Terraria.Main.tilesLoaded))
        //	{
        //		return;
        //	}
        //
        //	Player player = Main.player[projectile.owner];
        //	Players.OreEater modPlayer = player.GetModPlayer<Players.OreEater>(mod);
        //
        //	if(modPlayer.pet == null)
        //	{
        //		modPlayer.pet = new PetBase();
        //	}
        //	AI2(player, modPlayer, modPlayer.pet);
        //
        //}

        public void AI2(Player player, Players.OreEater modPlayer, PetBase pet)
        {
            pet.delayLoad();

            if (!player.active)
            {
                Main.npc[modPlayer.index].active = false;
                projectile.active = false;
                pet.initListA();
                pet.routeListX.Clear();
                pet.routeListY.Clear();
                projectile.position = player.position;
                return;
            }

            if (player.dead)
            {
                modPlayer.oreEaterEnable = false;
            }

            if (modPlayer.oreEaterEnable)
            {
                projectile.timeLeft = 2;
            }
            else
            {
                modPlayer.ResetEffects();
                Main.npc[modPlayer.index].active = false;
                pet.initListA();
                pet.routeListX.Clear();
                pet.routeListY.Clear();
                projectile.position = player.position;
            }

            //scan pickel
            int pickPower = Main.LocalPlayer.inventory.Max(item => item.pick);

            if (pickPower <= 1)
            {
                pickPower = 1;
            }

            int pickSpeed;

            if (Main.LocalPlayer.inventory.Where(item => item.pick > 0).Count() == 0)
            {
                pickSpeed = 30;
            }
            else
            {
                pickSpeed = Main.LocalPlayer.inventory.Where(item => item.pick > 0).Min(item => item.useTime);
            }
            if (pickSpeed <= 1)
            {
                pickSpeed = 1;
            }


            //light
            Lighting.AddLight(projectile.position, 0.9f * light, 0.1f * light, 0.3f * light);


            //ore scan & move & pick
            if (!pet.statusAIndex.ContainsKey(3) && !pet.statusAIndex.ContainsKey(4))
            {
                if (pet.latestLoop >= maxSerchNum || prevLoop == pet.latestLoop || pet.statusA.Count == 0)
                {
                    if (pet.latestLoop >= maxSerchNum || prevLoop == pet.latestLoop)
                    //if(prevLoop == pet.latestLoop)
                    {
                        projectile.position    = player.position;
                        modPlayer.npc.position = projectile.position;
                    }
                    originX           = (int)projectile.position.X / 16;
                    originY           = (int)projectile.position.Y / 16;
                    prevLoop          = 0;
                    route_count_shift = 0;
                    pet.serchA(originX, originY, 12, 2, 3, pickPower, true);
                }
                else
                {
                    prevLoop = pet.latestLoop;
                    pet.serchA(originX, originY, 1, 1, 3, pickPower, false);
                    pet.serchA(originX, originY, 2, 1, 3, pickPower, false);
                }
            }
            else
            {
                int target = -1;
                if (pet.statusAIndex.ContainsKey(3))
                {
                    target = 3;
                }
                else if (pet.statusAIndex.ContainsKey(4))
                {
                    target = 4;
                }
                else
                {
                    return;
                }

                //makeRoute
                if (route_count == -1)
                {
                    pet.makeRoute(target, 0, maxSerchNum);
                    route_count = pet.routeListX.Count - 1;
                    if (target == 4)
                    {
                        route_count       = route_count - route_count_shift;
                        route_count_shift = route_count;
                    }
                }

                //set velocity
                projectile.velocity.X  = pet.routeListX[route_count] * 16 - projectile.position.X - 8;
                projectile.velocity.Y  = pet.routeListY[route_count] * 16 - projectile.position.Y - 8;
                modPlayer.npc.position = projectile.position;

                //next cell
                if (route_count >= 0 && rand.Next(route_count * pickSpeed) <= speed)
                {
                    route_count -= 1;
                }


                //end route
                if (route_count == -1)
                {
                    projectile.position.X = pet.routeListX[0] * 16;
                    projectile.position.Y = pet.routeListY[0] * 16;
                    projectile.velocity.X = 0;
                    projectile.velocity.Y = 0;
                    if (target == 3)
                    {
                        modPlayer.player.PickTile(pet.AX[pet.statusAIndex[3][0]], pet.AY[pet.statusAIndex[3][0]], pickPower);
                        pet.initListA();
                        pet.routeListX.Clear();
                        pet.routeListY.Clear();
                        targetPrev = 3;
                    }
                    else
                    {
                        if (targetPrev == 3)
                        {
                            pet.initListA();
                            pet.routeListX.Clear();
                            pet.routeListY.Clear();
                        }
                        else
                        {
                            pet.statusA[pet.statusAIndex[4][0]] = 5;
                            pet.make_statusAIndex();
                        }
                        targetPrev = 4;
                    }
                }
            }
            modPlayer.npc.life = modPlayer.npc.lifeMax;
        }