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); }
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; } } } } }
//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; }