Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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;
        }