Пример #1
0
        void MovementSkyClicking(PacketReader Reader)
        {
            Character.Position.Walking = true;
            byte   Type  = Reader.Byte();
            ushort Angle = Reader.UInt16();

            Character.Information.Angle   = (Angle) / 182.04166666666666;
            Character.Position.packetxSec = Character.Position.xSec;
            Character.Position.packetySec = Character.Position.ySec;
            Character.Position.packetX    = (ushort)Formule.gamex(Character.Position.x, Character.Position.xSec);
            Character.Position.packetY    = (ushort)Formule.gamex(Character.Position.y, Character.Position.ySec);
            double       Distance = Formule.gamedistance(Character.Position.x, Character.Position.y, Formule.gamex((float)Character.Position.packetX, Character.Position.xSec), Formule.gamey((float)Character.Position.packetY, Character.Position.ySec));
            PacketWriter writer   = new PacketWriter();

            writer.Create(0xb021);
            writer.DWord(Character.Information.UniqueID);
            writer.Byte(0);
            writer.Byte(Type);
            writer.Word(Angle);
            writer.Byte(1);
            writer.Byte(Character.Position.xSec);
            writer.Byte(Character.Position.ySec);
            writer.Word(Character.Position.packetX);
            writer.DWord(Character.Position.z);
            writer.Word(Character.Position.packetY);
            Send(writer.GetBytes());
            Reader.Close();
            StartSkyDromeTimer(1000);
        }
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // Forgotten world base entrance
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        void ForgottenWorld(int itemid)
        {
            try
            {
                //Spawn portal
                WorldMgr.Monsters o = new WorldMgr.Monsters();

                float x = Character.Position.x;
                float z = Character.Position.z;
                float y = Character.Position.y;

                o.Ids      = new GenerateUniqueID(GenerateUniqueID.IDS.Object);
                o.UniqueID = o.Ids.GetUniqueID;
                o.xSec     = Character.Position.xSec;
                o.ySec     = Character.Position.ySec;
                o.x        = Formule.gamex(x, o.xSec);
                o.z        = z;
                o.y        = Formule.gamey(y, o.ySec);

                client.Send(Packet.SpawnPortal(o, Character, itemid));
            }
            catch (Exception ex)
            {
                Log.Exception(ex);
            }
        }
Пример #3
0
 void GM_WP(byte xSec, byte ySec, float x, float z, float y)
 {
     //Close buffs
     BuffAllClose();
     //Send teleport packet #1
     client.Send(Packet.TeleportStart());
     //Despawn objects
     ObjectDeSpawnCheck();
     //Despawn player to other players
     DeSpawnMe();
     //Set state
     Character.InGame = false;
     //Update location
     Character.Position.xSec = xSec;
     Character.Position.ySec = ySec;
     Character.Position.x    = Formule.gamex(x, xSec);
     Character.Position.z    = z;
     Character.Position.y    = Formule.gamey(y, ySec);
     //Required
     client.Send(Packet.TeleportStart2());
     //Send loading screen image
     client.Send(Packet.TeleportImage(xSec, ySec));
     //Set bool
     Character.Teleport = true;
     SavePlayerPosition();
     PlayerDataLoad();
 }
Пример #4
0
 void UpdateXY()
 {
     //Wrap our function inside a catcher
     try
     {
         //Update x and y of character
         if (!FileDB.CheckCave(Character.Position.xSec, Character.Position.ySec))
         {
             Character.Position.x = Formule.gamex(Character.Position.x, Character.Position.xSec);
             Character.Position.y = Formule.gamey(Character.Position.y, Character.Position.ySec);
         }
         else
         {
             //New cave update x y
             Character.Position.x = Formule.cavegamex(Character.Position.x);
             Character.Position.y = Formule.cavegamey(Character.Position.y);
         }
     }
     catch (Exception ex)
     {
         Log.Exception(ex);
     }
 }
Пример #5
0
        /////////////////////////////////////////////////////////////////////////////////
        // Pet movement
        /////////////////////////////////////////////////////////////////////////////////
        public void MovementPet()
        {
            try
            {
                //Open our packet reader
                PacketReader Reader = new PacketReader(PacketInformation.buffer);
                //This one happens to all pets.
                int petid = Reader.Int32();
                //We switch on type (2 = attack pet, 1 = horse).
                byte type = Reader.Byte();

                switch (type)
                {
                //Horse pet movement
                case 1:
                    byte  movetype = Reader.Byte();
                    byte  xsec     = Reader.Byte();
                    byte  ysec     = Reader.Byte();
                    float x        = Reader.Int16();
                    float z        = Reader.Int16();
                    float y        = Reader.Int16();
                    Reader.Close();
                    //Make sure attack timer is gone
                    StopAttackTimer();
                    //Set pickup to false
                    Character.Action.PickUping = false;
                    //Set movement active
                    Character.Position.Walking = true;

                    double distance = Formule.gamedistance(Character.Position.x,
                                                           Character.Position.y,
                                                           Formule.gamex(x, xsec),
                                                           Formule.gamey(y, ysec));

                    Character.Position.xSec = xsec;
                    Character.Position.ySec = ysec;
                    Character.Position.wX   = Formule.gamex(x, xsec) - Character.Position.x;
                    Character.Position.wZ   = z;
                    Character.Position.wY   = Formule.gamey(y, ysec) - Character.Position.y;

                    Character.Position.packetxSec = xsec;
                    Character.Position.packetySec = ysec;
                    Character.Position.packetX    = (ushort)x;
                    Character.Position.packetZ    = (ushort)z;
                    Character.Position.packetY    = (ushort)y;

                    Send(Packet.Movement(new ObjData.vektor(petid, x, z, y, xsec, ysec)));

                    break;

                //Attack pet movement
                case 2:
                    //Set pet info
                    Character.Attackpet.Details.x    = Character.Position.x;
                    Character.Attackpet.Details.y    = Character.Position.y;
                    Character.Attackpet.Details.z    = Character.Position.z;
                    Character.Attackpet.Details.xSec = Character.Position.xSec;
                    Character.Attackpet.Details.ySec = Character.Position.ySec;
                    //Target id information
                    int targetid = Reader.Int32();
                    Reader.Close();
                    //Set pet speed information
                    Send(Packet.SetSpeed(petid, 50, 100));    //Need to make correct speed info later
                    //Check distances / target detailed.

                    //Send attack packet (new void pet attack to be created).
                    break;
                }
            }
            catch (Exception ex)
            {
                Log.Exception(ex);
            }
        }
Пример #6
0
        void MovementNormalClicking(PacketReader Reader)
        {
            float  XPosition = 0;
            float  YPosition = 0;
            float  ZPosition = 0;
            byte   xsec      = Reader.Byte();
            byte   ysec      = Reader.Byte();
            double Distance  = 0;

            Character.Position.Walking = true;

            if (!FileDB.CheckCave(xsec, ysec))
            {
                XPosition = Reader.Int16();
                ZPosition = Reader.Int16();
                YPosition = Reader.Int16();
                Distance  = Formule.gamedistance(Character.Position.x, Character.Position.y, Formule.gamex(XPosition, xsec), Formule.gamey(YPosition, ysec));
                Character.Position.xSec       = xsec;
                Character.Position.ySec       = ysec;
                Character.Position.wX         = Formule.gamex(XPosition, xsec) - Character.Position.x;
                Character.Position.wZ         = ZPosition;
                Character.Position.wY         = Formule.gamey(YPosition, ysec) - Character.Position.y;
                Character.Position.packetxSec = xsec;
                Character.Position.packetySec = ysec;
                Character.Position.packetX    = (ushort)XPosition;
                Character.Position.packetZ    = (ushort)ZPosition;
                Character.Position.packetY    = (ushort)YPosition;
                if ((xsec != 0) && (ysec != 0))
                {
                    Send(Packet.Movement(new ObjData.vektor(Character.Information.UniqueID, XPosition, ZPosition, YPosition, xsec, ysec)));
                }
                StartMovementTimer(GetMovementTime(Distance));
            }
            else
            {
                XPosition = Formule.cavegamex((float)Reader.Int16(), (float)Reader.Int16());
                ZPosition = Formule.cavegamez((float)Reader.Int16(), (float)Reader.Int16());
                YPosition = Formule.cavegamey((float)Reader.Int16(), (float)Reader.Int16());
                Distance  = Formule.gamedistance(Character.Position.x, Character.Position.y, Formule.cavegamex(XPosition), Formule.cavegamey(YPosition));
                Character.Position.xSec       = xsec;
                Character.Position.ySec       = ysec;
                Character.Position.wX         = Formule.cavegamex(XPosition) - Character.Position.x;
                Character.Position.wZ         = ZPosition;
                Character.Position.wY         = Formule.cavegamey(YPosition) - Character.Position.y;
                Character.Position.packetxSec = xsec;
                Character.Position.packetySec = ysec;
                Character.Position.packetX    = (ushort)XPosition;
                Character.Position.packetZ    = (ushort)ZPosition;
                Character.Position.packetY    = (ushort)YPosition;
                if ((xsec != 0) && (ysec != 0))
                {
                    Send(Packet.Movement(new ObjData.vektor(Character.Information.UniqueID, XPosition, ZPosition, YPosition, xsec, ysec)));
                }
                StartMovementTimer(GetMovementTime(Distance));
            }
            Reader.Close();
            if (Character.Grabpet.Active)
            {
                Send(Packet.Movement(new ObjData.vektor(Character.Grabpet.Details.UniqueID, XPosition + Rnd.Next(10, 15), ZPosition, YPosition + Rnd.Next(10, 15), xsec, ysec)));
            }
            if (Character.Attackpet.Active)
            {
                Send(Packet.Movement(new ObjData.vektor(Character.Attackpet.Details.UniqueID, XPosition + Rnd.Next(10, 15), ZPosition, YPosition + Rnd.Next(10, 15), xsec, ysec)));
            }
        }