static bool MoveTowards(PlayerBot bot, Player p, Metadata meta) { if (p == null) { return(false); } int dist = (int)(0.875 * 32); int dx = p.Pos.X - bot.Pos.X, dy = p.Pos.Y - bot.Pos.Y, dz = p.Pos.Z - bot.Pos.Z; bot.TargetPos = p.Pos; bot.movement = true; Vec3F32 dir = new Vec3F32(dx, dy, dz); dir = Vec3F32.Normalise(dir); Orientation rot = bot.Rot; DirUtils.GetYawPitch(dir, out rot.RotY, out rot.HeadX); MobAI.SetDirectionalSpeeds(bot); dx = Math.Abs(dx); dy = Math.Abs(dy); dz = Math.Abs(dz); if (InRange(p, bot, dist)) { p.Message("%cInfect"); } bot.Rot = rot; return(dx <= 8 && dy <= 16 && dz <= 8); }
static bool MoveTowards(PlayerBot bot, Player p, Metadata meta) { if (p == null) { return(false); } int dx = p.Pos.X - bot.Pos.X, dy = p.Pos.Y - bot.Pos.Y, dz = p.Pos.Z - bot.Pos.Z; bot.TargetPos = p.Pos; bot.movement = true; Vec3F32 dir = new Vec3F32(dx, dy, dz); dir = Vec3F32.Normalise(dir); Orientation rot = bot.Rot; DirUtils.GetYawPitch(dir, out rot.RotY, out rot.HeadX); MobAI.SetDirectionalSpeeds(bot); p.Message("I am facing: %b" + MobAI.CalculateCardinal(bot)); p.Message("sp " + bot.movementSpeed); //p.Message("The block in front of me is: %b"); dx = Math.Abs(dx); dy = Math.Abs(dy); dz = Math.Abs(dz); bot.Rot = rot; return(dx <= 8 && dy <= 16 && dz <= 8); }
static bool MoveTowards(PlayerBot bot, Player p, Metadata meta) { if (p == null) { return(false); } int dx = p.Pos.X - bot.Pos.X, dy = p.Pos.Y - bot.Pos.Y, dz = p.Pos.Z - bot.Pos.Z; bot.TargetPos = p.Pos; bot.movement = true; Vec3F32 dir = new Vec3F32(dx, dy, dz); dir = Vec3F32.Normalise(dir); Orientation rot = bot.Rot; DirUtils.GetYawPitch(dir, out rot.RotY, out rot.HeadX); MobAI.SetDirectionalSpeeds(bot); dx = Math.Abs(dx); dy = Math.Abs(dy); dz = Math.Abs(dz); if (bot.Model == "creeper") { if (dx < (3 * 32) && dz < (3 * 32)) { if (meta.explodeTime == 0) { meta.explodeTime = 10; } } else { meta.explodeTime = 0; } } else { if ((dx <= 8 && dy <= 16 && dz <= 8)) { HitPlayer(bot, p, rot); } } bot.Rot = rot; return(dx <= 8 && dy <= 16 && dz <= 8); }
static bool MoveTowards(PlayerBot bot, Player p, Metadata meta) { if (p == null) { return(false); } int dist = (int)(0.875 * 32); int dx = p.Pos.X - bot.Pos.X, dy = p.Pos.Y - bot.Pos.Y, dz = p.Pos.Z - bot.Pos.Z; bot.TargetPos = p.Pos; bot.movement = true; Vec3F32 dir = new Vec3F32(dx, dy, dz); dir = Vec3F32.Normalise(dir); Orientation rot = bot.Rot; DirUtils.GetYawPitch(dir, out rot.RotY, out rot.HeadX); MobAI.SetDirectionalSpeeds(bot); dx = Math.Abs(dx); dy = Math.Abs(dy); dz = Math.Abs(dz); //if (InRange(p, bot, dist)) p.Message("%cInfect"); bot.Rot = rot; if (dx < (5 * 32) && dz < (5 * 32)) // 5 block reach { Random rnd = new Random(); // This code serves as a sort of 'CPS mechanism' to ensure that the bot does not perfectly delete every single block int chance = rnd.Next(0, 4); // 33% chance of deleting the block if (chance < 3) { bot.level.UpdateBlock(Player.Console, (ushort)(p.Pos.X / 32), (ushort)((p.Pos.Y / 32) - 2), (ushort)(p.Pos.Z / 32), Block.Air); if ((p.Pos.Y / 32) > lastY) { bot.level.UpdateBlock(Player.Console, (ushort)(p.Pos.X / 32), (ushort)((p.Pos.Y / 32) - 3), (ushort)(p.Pos.Z / 32), Block.Air); } } lastY = (p.Pos.Y / 32); } return(dx <= 8 && dy <= 16 && dz <= 8); }
public void DoStuff(PlayerBot bot, Metadata meta) { int stillChance = RandomNumber(0, 5); // Chance for the NPC to stand still int walkTime = RandomNumber(4, 8) * 5; // Time in milliseconds to execute a task int waitTime = RandomNumber(2, 5) * 5; // Time in milliseconds to wait before executing the next task int dx = RandomNumber(bot.Pos.X - (8 * 32), bot.Pos.X + (8 * 32)); // Random X location on the map within a 8x8 radius of the bot for the it to walk towards. int dz = RandomNumber(bot.Pos.Z - (8 * 32), bot.Pos.Z + (8 * 32)); // Random Z location on the map within a 8x8 radius of the bot for the it to walk towards. if (stillChance > 2) { meta.walkTime = walkTime; } else { Coords target; target.X = dx; target.Y = bot.Pos.Y; target.Z = dz; target.RotX = bot.Rot.RotX; target.RotY = bot.Rot.RotY; bot.TargetPos = new Position(target.X, target.Y, target.Z); bot.movement = true; if (bot.Pos.BlockX == bot.TargetPos.BlockX && bot.Pos.BlockZ == bot.TargetPos.BlockZ) { bot.SetYawPitch(target.RotX, target.RotY); bot.movement = false; } bot.AdvanceRotation(); MobAI.FaceTowards(bot); meta.walkTime = walkTime; bot.movement = false; meta.waitTime = waitTime; } }
public override bool Execute(PlayerBot bot, InstructionData data) { Metadata meta = (Metadata)data.Metadata; Player closest = MobAI.ClosestPlayer(bot, 30); if (closest == null) { bot.movement = false; bot.NextInstruction(); } bool overlapsPlayer = MoveTowards(bot, closest, meta); if (overlapsPlayer && closest != null) { bot.NextInstruction(); return(false); } return(true); }
public override bool Execute(PlayerBot bot, InstructionData data) { Metadata meta = (Metadata)data.Metadata; if (bot.Model == "skeleton" || bot.Model == "creeper") { bot.movementSpeed = (int)Math.Round(3m * (short)97 / 100m); } if (bot.Model == "zombie") { bot.movementSpeed = (int)Math.Round(3m * (short)94 / 100m); } if (bot.movementSpeed == 0) { bot.movementSpeed = 1; } int search = 12; Player closest = MobAI.ClosestPlayer(bot, search); if (closest == null) { if (bot.Model == "creeper") { meta.explodeTime = 0; } if (meta.walkTime > 0) { meta.walkTime--; bot.movement = true; return(true); } if (meta.waitTime > 0) { meta.waitTime--; return(true); } DoStuff(bot, meta); bot.movement = false; bot.NextInstruction(); } else { if (bot.Model == "creeper") { if (meta.explodeTime > 0) { meta.explodeTime--; if (meta.explodeTime == 1) { if (closest.level.physics > 1 && closest.level.physics != 5) { closest.level.MakeExplosion((ushort)(bot.Pos.X / 32), (ushort)(bot.Pos.Y / 32), (ushort)(bot.Pos.Z / 32), 0); } Command.Find("Effect").Use(closest, "explosion " + (bot.Pos.X / 32) + " " + (bot.Pos.Y / 32) + " " + (bot.Pos.Z / 32) + " 0 0 0 true"); Orientation rot = bot.Rot; HitPlayer(bot, closest, rot); meta.explodeTime = 0; PlayerBot.Remove(bot); return(true); } bot.movement = true; return(true); } } } bool overlapsPlayer = MoveTowards(bot, closest, meta); if (overlapsPlayer && closest != null) { bot.NextInstruction(); return(false); } return(true); }