DarkEmu_GameServer.Systems.Movement C# (CSharp) Метод

Movement() публичный Метод

public Movement ( ) : void
Результат void
        public void Movement()
        {
            try
            {
                PacketReader Reader = new PacketReader(PacketInformation.buffer);
                Character.Action.PickUping = false;
                byte Type = Reader.Byte();

                ////////////////////////////////////////////////////////////////////////////// Sky drome movement
                if (Type == 0)
                {
                    if (!Character.Stall.Stallactive && !Character.Action.PickUping && !Character.State.Die && !Character.Action.sCasting && !Character.Action.sAttack && !Character.Action.nAttack && !Character.Information.Scroll && !Character.State.Sitting && !Character.Information.SkyDroming)
                    {
                        /*
                        if (File.FileLoad.CheckCave(Character.Position.xSec, Character.Position.ySec))
                        {
                            return;
                        }
                        else
                        {

                            Character.Information.SkyDroming = true;
                            byte info = Reader.Byte();
                            ushort angle = Reader.UInt16();

                            Character.Information.Angle = angle / (65535.0 / 360.0);

                            Character.Position.packetxSec = Character.Position.xSec;
                            Character.Position.packetySec = Character.Position.ySec;
                            Character.Position.packetX = (ushort)Game.Formule.packetx(Character.Position.x, Character.Position.xSec);
                            Character.Position.packetY = (ushort)Game.Formule.packetx(Character.Position.x, Character.Position.xSec);

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

                            Character.Position.Time = (distance / (Character.Speed.RunSpeed * 0.0768)) * 1000.0;
                            Character.Position.RecordedTime = Character.Position.Time;

                            PacketWriter Writer = new PacketWriter();
                            Writer.Create(Systems.SERVER_MOVEMENT);
                            Writer.DWord(Character.Information.UniqueID);
                            Writer.Byte(0);
                            Writer.Byte(info);
                            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());

                            StartSkyDromeTimer(1000);
                        }*/
                    }
                }

                //------------------------- Normal movement -------------------------//
                if (Type == 1)
                {
                    //If character is in a guild
                    if (Character.Network.Guild.Guildid != 0)
                    {
                        //Repeat for each client in the guild
                        foreach (Client memberclient in Character.Network.Guild.MembersClient)
                        {
                            //Make sure the client is not null
                            if (memberclient != null)
                            {
                                //Send update packet for location of player
                                memberclient.Send(Packet.GuildUpdate(Character, 10, Character.Information.UniqueID, 0, 0));
                            }
                        }
                    }

                    if (Character.Stall.Stallactive) return;
                    if (Character.Action.PickUping) return;
                    StopPickUpTimer();
                    if (Character.State.Die) return;
                    if (Character.Information.Scroll) return;
                    if (Character.State.Sitting) return;
                    if (Character.Information.SkyDroming)
                    {
                        StopSkyDromeTimer();
                    }
                    if (Character.Action.nAttack)
                    {
                        StopAttackTimer();
                        Character.Action.nAttack = false;
                    }
                    if (Character.Action.sAttack)
                    {
                        StopAttackTimer();
                        Character.Action.sAttack = false;
                    }
                    if (Character.Action.sCasting)
                    {
                        StopAttackTimer();
                        Character.Action.sCasting = false;
                    }
                    if (Character.Information.PvpWait)
                    {
                        Send(Packet.PvpInterupt(Character.Information.UniqueID));
                        Character.Information.PvpWait = false;
                        Character.Information.Pvptype = 0;
                        StopPvpTimer();
                    }
                    Character.Position.Walking = true;
                    byte xsec = Reader.Byte();
                    byte ysec = Reader.Byte();
                    float x, y, z;

                    if (!File.FileLoad.CheckCave(xsec, ysec))
                    {
                        x = Reader.Int16();
                        z = Reader.Int16();
                        y = Reader.Int16();
                        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;

                        if (xsec != 0 && ysec != 0)
                        {
                            Send(Packet.Movement(new Global.vektor(Character.Information.UniqueID, x, z, y, xsec, ysec)));
                        }
                        if (Character.Information.Berserking)
                        {
                            Character.Position.Time = (distance / (Character.Speed.RunSpeed * 0.109)) * 1000.0;
                        }
                        else
                        {
                            Character.Position.Time = (distance / (Character.Speed.RunSpeed * 0.109)) * 1000.0;
                        }
                    }
                    else  // Added for cave telepad locations
                    {
                        x = Formule.cavegamex(Reader.Int16(),Reader.Int16()); //Reads the location and retunrs the coords for the cave postion x
                        z = Formule.cavegamez(Reader.Int16(), Reader.Int16()); //Reads the location and retunrs the coords for the cave postion z
                        y = Formule.cavegamey(Reader.Int16(), Reader.Int16()); //Reads the location and retunrs the coords for the cave postion y

                        double distance = Formule.gamedistance(Character.Position.x,Character.Position.y,Formule.cavegamex(x),Formule.cavegamey(y));

                        Character.Position.xSec = xsec;
                        Character.Position.ySec = ysec;
                        Character.Position.wX = Formule.cavegamex(x) - Character.Position.x;
                        Character.Position.wZ = z;
                        Character.Position.wY = Formule.cavegamey(y) - 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;

                        if (xsec != 0 && ysec != 0)
                        {
                            Send(Packet.Movement(new Global.vektor(Character.Information.UniqueID, x, z, y, xsec, ysec)));
                        }
                        if (Character.Information.Berserking)
                        {
                            Character.Position.Time = (distance / (Character.Speed.BerserkSpeed * 0.0768)) * 1000.0;
                        }
                        else
                        {
                            Character.Position.Time = (distance / (Character.Speed.RunSpeed * 0.0768)) * 1000.0;
                        }
                    }

                    Reader.Close();

                    if (xsec != 0 && ysec != 0)
                    {
                        Send(Packet.Movement(new Global.vektor(Character.Information.UniqueID, x, z, y, xsec, ysec)));
                    }

                    if (Character.Grabpet.Active)
                    {
                        Send(Packet.Movement(new Global.vektor(Character.Grabpet.Details.UniqueID, x + rnd.Next(10, 25), z, y + rnd.Next(10, 25), xsec, ysec)));
                    }
                    if (Character.Attackpet.Active)
                    {
                        Send(Packet.Movement(new Global.vektor(Character.Attackpet.Details.UniqueID, x + rnd.Next(10, 25), z, y + rnd.Next(10, 25), xsec, ysec)));
                    }

                    Character.Position.RecordedTime = Character.Position.Time;
                    StartMovementTimer((int)(Character.Position.Time * 0.1));
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Movement error: {0}", ex);
            }
        }

Usage Example

Пример #1
0
        public static void oPCode(Decode de)
        {
            try
            {
                Systems sys = (Systems)de.Packet;
                sys.PacketInformation = de;
                //Console.WriteLine("Recv: (0x{0})", de.opcode.ToString("X4"));
                switch (de.opcode)
                {
                case 0x7481:
                    break;

                case CLIENT_PING:
                case CLIENT_PING2:
                    break;

                case CLIENT_PATCH:
                    sys.Patch();
                    break;

                case CLIENT_CONNECTION:
                    sys.Connect();
                    break;

                case CLIENT_CHARACTERSCREEN:
                    sys.CharacterScreen();
                    sys.Ping();
                    break;

                case CLIENT_INGAME_REQUEST:
                    sys.IngameLogin();
                    break;

                case CLIENT_INGAME_SUCCESS:
                    sys.InGameSuccess();
                    break;

                case CLIENT_REQUEST_WEATHER:
                    sys.LoadWeather();
                    break;

                case CLIENT_SIT:
                    sys.Doaction();
                    break;

                case CLIENT_QUESTMARK:
                    sys.QuestionMark();
                    break;

                case CLIENT_MOVEMENT:
                    sys.Movement();
                    break;

                case CLIENT_ANGLE_MOVE:
                    sys.Angle();
                    break;

                case CLIENT_SAVE_BAR:
                    sys.Save();
                    break;

                case CLIENT_LEAVE_REQUEST:
                    sys.LeaveGame();
                    break;

                case CLIENT_LEAVE_CANCEL:
                    sys.CancelLeaveGame();
                    break;

                case CLIENT_ITEM_MOVE:
                    sys.ItemMain();
                    break;

                case CLIENT_SELECT_OBJECT:
                    sys.SelectObject();
                    break;

                case CLIENT_GM:
                    sys.GM();
                    break;

                case CLIENT_EMOTE:
                    sys.Emote();
                    break;

                case CLIENT_TELEPORTSTART:
                    sys.Teleport_Start();
                    break;

                case CLIENT_TELEPORTDATA:
                    sys.Teleport_Data();
                    break;

                case CLIENT_CHAT:
                    sys.Chat();
                    break;

                case CLIENT_MAINACTION:
                    sys.ActionMain();
                    break;

                case CLIENT_MASTERY_UP:
                    sys.Mastery_Up();
                    break;

                case CLIENT_SKILL_UP:
                    sys.Mastery_Skill_Up();
                    break;

                case CLIENT_GETUP:
                    sys.Player_Up();
                    break;

                case CLIENT_REQUEST_PARTY:
                    sys.NormalRequest();
                    break;

                case CLIENT_PARTY_REQUEST:
                    sys.CharacterRequest();
                    break;

                case CLIENT_EXCHANGE_REQUEST:
                    sys.Exchange_Request();
                    break;

                case CLIENT_EXCHANGE_WINDOWS_CLOSE:
                    sys.Exchange_Close();
                    break;

                case CLIENT_EXCHANGE_ACCEPT:
                    sys.Exchange_Accept();
                    break;

                case CLIENT_EXCHANGE_APPROVE:
                    sys.Exchange_Approve();
                    break;

                case CLIENT_PARTY_ADDMEMBERS:
                    sys.PartyAddmembers();
                    break;

                case CLIENT_PARTY_LEAVE:
                    sys.LeaveParty();
                    break;

                case CLIENT_PARTY_BANPLAYER:
                    sys.PartyBan();
                    break;

                case CLIENT_GUIDE:
                    sys.Gameguide();
                    break;

                case CLIENT_PLAYER_UPDATE_INT:
                    sys.InsertInt();
                    break;

                case CLIENT_PLAYER_UPDATE_STR:
                    sys.InsertStr();
                    break;

                case CLIENT_PLAYER_HANDLE:
                    sys.Handle();
                    break;

                case CLIENT_PLAYER_BERSERK:
                    sys.Player_Berserk_Up();
                    break;

                case CLIENT_CLOSE_NPC:
                    sys.Close_NPC();
                    break;

                case CLIENT_OPEN_NPC:
                    sys.Open_NPC();
                    break;

                case CLIENT_NPC_BUYPACK:
                    sys.Player_BuyPack();
                    break;

                case CLIENT_OPEN_WAREHOUSE:
                    sys.Open_Warehouse();
                    break;

                case CLIENT_CLOSE_SCROLL:
                    sys.StopScrollTimer();
                    break;

                case CLIENT_SAVE_PLACE:
                    sys.SavePlace();
                    break;

                case CLIENT_ALCHEMY:
                    sys.AlchemyElixirMain();
                    break;

                case CLIENT_ALCHEMY_CREATE_STONE:
                    sys.AlchemyCreateStone();
                    break;

                case CLIENT_PET_MOVEMENT:
                    sys.MovementPet();
                    break;

                case CLIENT_PET_TERMINATE:
                    sys.HandleClosePet();
                    break;

                case CLIENT_PARTYMATCHING_LIST_REQUEST:
                    sys.ListPartyMatching(Party);
                    break;

                case CLIENT_CREATE_FORMED_PARTY:
                    sys.CreateFormedParty();
                    break;

                case CLIENT_FORMED_PARTY_DELETE:
                    sys.DeleteFormedParty(0);
                    break;

                case CLIENT_JOIN_FORMED_RESPONSE:
                    sys.FormedResponse();
                    break;

                case CLIENT_CHANGE_PARTY_NAME:
                    sys.RenameParty();
                    break;

                case CLIENT_JOIN_FORMED_PARTY:
                    sys.JoinFormedParty();
                    break;

                case CLIENT_START_PK:
                    sys.PkPlayer();
                    break;

                case CLIENT_GUILD:
                    sys.GuildCreate();
                    break;

                case CLIENT_GUILD_TRANSFER:
                    sys.GuildTransferLeaderShip();
                    break;

                case CLIENT_GUILD_PERMISSIONS:
                    sys.GuildPermissions();
                    break;

                case CLIENT_GUILD_PROMOTE:
                    sys.GuildPromote();
                    break;

                case CLIENT_GUILD_DISBAND:
                    sys.GuildDisband();
                    break;

                case CLIENT_GUILD_MESSAGE:
                    sys.GuildMessage();
                    break;

                case CLIENT_OPEN_GUILD_STORAGE:
                    sys.GuildStorage();
                    break;

                case CLIENT_CLOSE_GUILD_STORAGE:
                    sys.GuildStorageClose();
                    break;

                case CLIENT_GUILD_WAR_GOLD:
                    sys.GuildWarGold();
                    break;

                case CLIENT_OPEN_GUILD_STORAGE2:
                    sys.GuildStorage2();
                    break;

                case CLIENT_GUILD_KICK:
                    sys.KickFromGuild();
                    break;

                case CLIENT_GUILD_LEAVE:
                    sys.GuildLeave();
                    break;

                case CLIENT_GUILD_TITLE_SET:
                    sys.GuildTitle();
                    break;

                case CLIENT_GUILD_INVITE:
                    sys.GuildInvite();
                    break;

                case CLIENT_GUILD_DONATE_GP:
                    sys.DonateGP();
                    break;

                case CLIENT_GACHA_PLAY:
                    //Add function
                    break;

                case CLIENT_JOIN_MERC:
                    sys.JoinMerc();
                    break;

                case CLIENT_RANKING_LISTS:
                    sys.RankList();
                    break;

                case CLIENT_PREV_JOB:
                    sys.PrevJob();
                    break;

                case CLIENT_HONOR_RANK:
                    sys.HonorRank();
                    break;

                case CLIENT_PM_MESSAGE:
                    sys.PrivateMessage();
                    break;

                case CLIENT_PM_SEND:
                    sys.PrivateMessageSend();
                    break;

                case CLIENT_PM_OPEN:
                    sys.PrivateMessageOpen();
                    break;

                case CLIENT_PM_DELETE:
                    sys.PrivateMessageDelete();
                    break;

                case CLIENT_PET_UNSUMMON:
                    sys.UnSummonPet();
                    break;

                case CLIENT_PET_RENAME:
                    sys.RenamePet();
                    break;

                case CLIENT_GPET_SETTINGS:
                    sys.GrabPetSettings();
                    break;

                case CLIENT_MAKE_ALIAS:
                    sys.MakeAlias();
                    break;

                case CLIENT_LEAVE_JOB:
                    sys.LeaveJob();
                    break;

                case CLIENT_DISSEMBLE_ITEM:
                    sys.BreakItem();
                    break;

                case CLIENT_STALL_OPEN:
                    sys.StallOpen();
                    break;

                case CLIENT_STALL_CLOSE:
                    sys.StallClose();
                    break;

                case CLIENT_STALL_BUY:
                    sys.StallBuy();
                    break;

                case CLIENT_STALL_ACTION:
                    sys.StallMain();
                    break;

                case CLIENT_STALL_OTHER_OPEN:
                    sys.EnterStall();
                    break;

                case CLIENT_STALL_OTHER_CLOSE:
                    sys.LeaveStall();
                    break;

                case CLIENT_PVP:
                    sys.StartPvpTimer(10000);
                    break;

                case CLIENT_ALCHEMY_STONE:
                    sys.AlchemyStoneMain();
                    break;

                case CLIENT_ITEM_MALL_WEB:
                    sys.ItemMallWeb();
                    break;

                case CLIENT_ITEM_STORAGE_BOX:
                    sys.ItemStorageBox();
                    break;

                case CLIENT_ITEM_BOX_LOG:
                    sys.ItemStorageBoxLog();
                    break;

                case CLIENT_FRIEND_REMOVAL:
                    sys.FriendRemoval();
                    break;

                case CLIENT_FRIEND_INVITE:
                    sys.FriendAdd();
                    break;

                case CLIENT_FRIEND_GROUP:
                    sys.FriendGroup("ADD");
                    break;

                case CLIENT_FRIEND_GROUP_REMOVE:
                    sys.FriendGroup("REMOVE");
                    break;

                case CLIENT_FRIEND_GROUP_MANAGE_FRIEND:
                    sys.FriendGroup("MOVE");
                    break;

                case CLIENT_FRIEND_INVITE_RESPONSE:
                    sys.FriendAddResponse();
                    break;

                case CLIENT_UNION_APPLY:
                    sys.unionapply();
                    break;

                case CLIENT_ICON_REQUEST:
                    sys.RequestIcons();
                    break;

                default:
                    Print.Format("(0x{0}) {1}", de.opcode.ToString("X4"), Decode.StringToPack(sys.PacketInformation.buffer));
                    break;
                }
            }
            catch (Exception ex)
            {
                Systems.Debugger.Write(ex);
            }
        }
Systems