public void ExecutaAndarMob() { while (this.Active) { for (int i = 0; i < Client.Count(); i++) { for (int a = 0; a < Client[i].MobView.Where(b => b.Mob.Merchant == 0).Count(); a++) { //if que decide se o mob anda ou não (50% de chance de andar) if (_rand.Next(0, 100) > 50) { SMobList mob = Client[i].MobView[a]; int x, y; //if para evitar erro do random if (mob.PositionInicial.X < mob.PositionFinal.X) { x = _rand.Next(mob.PositionInicial.X, mob.PositionFinal.X); } else { x = _rand.Next(mob.PositionFinal.X, mob.PositionInicial.X); } if (mob.PositionInicial.Y < mob.PositionFinal.Y) { y = _rand.Next(mob.PositionInicial.Y, mob.PositionFinal.Y); } else { y = _rand.Next(mob.PositionFinal.Y, mob.PositionInicial.Y); } // Prepara o pacote de andar dos mobs / npc P_36C p36c = P_36C.New(mob.Mob.ClientId, mob.PositionInicial, SPosition.New(x, y), 0, mob.Speed, new byte[12]); // Envia o pacote de andar Client[i].Send(p36c); } } } // Mob / Npc anda a cada 5s Thread.Sleep(5000); } }
public static void Teleport(Client client, SPosition sPosition) { //Adiciona posição a lista de posições client.Character.Positions.Clear(); client.Character.Positions.Add(client.Character.Mob.LastPosition); P_36C p36C = P_36C.New(client.ClientId, client.Character.Mob.LastPosition, sPosition, 1); //envia para a nova coordenada client.Send(p36C); // Atualiza os arredores Functions.UpdateFromaWorld(client, p36C); client.Character.Positions.Add(sPosition); //Atualiza a ultima posicao para o destino client.Character.Mob.LastPosition = sPosition; }