public static BuyItemInfo RecvBuyItem(Packet p) { p.Skip(2); int npcid = p.ReadInt(); short wref = p.ReadShort(); p.Skip(2); short amount = p.ReadShort(); p.Skip(2); byte bag = p.ReadByte(); BuyItemInfo i = new BuyItemInfo { NpcID = npcid, ReferenceID = wref, Amount = amount, Bag = bag }; return i; }
public static MovementInfo RecvStopMoving(Packet p) { p.Skip(2); int charid = p.ReadInt(); short from_x = p.ReadShort(); short from_y = p.ReadShort(); byte from_z = p.ReadByte(); MovementInfo mi = new MovementInfo { PacketID = 3, CharacterID = charid, FromX = from_x, FromY = from_y, FromZ = from_z, }; return mi; }
/// <summary> /// Generates the unit server login information from packet /// </summary> /// <param name="p"></param> /// <returns></returns> public static UnitLogin RecvUnitLogin(Packet p) { p.Skip(2); string account = p.ReadString(); int hash = p.ReadShort(); int map = p.ReadShort(); int channel = p.ReadByte(); p.Skip(6); int characterID = p.ReadInt(); UnitLogin u = new UnitLogin() { Account = account, AccountID = hash, Channel = channel, CharacterID = characterID }; return u; }
public static PickItemInfo RecvPickItem(Packet p) { p.Skip(2); int mapid = p.ReadInt(); int itemid = p.ReadInt(); short fromx = p.ReadShort(); short fromy = p.ReadShort(); byte fromz = p.ReadByte(); int mapitemid = p.ReadInt(); short amount = p.ReadShort(); PickItemInfo pi = new PickItemInfo { MapID = mapid, ItemID = itemid, FromX = fromx, FromY = fromy, FromZ = fromz, MapItemID = mapitemid, Amount = amount }; return pi; }
public static MovementInfo RecvStartMoving(Packet p) { p.Skip(2); int charid = p.ReadInt(); short from_x = p.ReadShort(); short from_y = p.ReadShort(); byte from_z = p.ReadByte(); short to_x = p.ReadShort(); short to_y = p.ReadShort(); byte to_z = p.ReadByte(); short direction = p.ReadShort(); MovementInfo mi = new MovementInfo { PacketID = 1, CharacterID = charid, FromX = from_x, FromY = from_y, FromZ = from_z, ToX = to_x, ToY = to_y, ToZ = to_z, Rotation = direction }; return mi; }
public static DropItemInfo RecvDropItem(Packet p) { p.Skip(2); byte frombag = p.ReadByte(); byte fromslot = p.ReadByte(); int itemid = p.ReadInt(); short tox = p.ReadShort(); short toy = p.ReadShort(); byte toz = p.ReadByte(); int something = p.ReadInt(); DropItemInfo drop = new DropItemInfo { FromBag = frombag, FromSlot = fromslot, ItemID = itemid, ToX = tox, ToY = toy, ToZ = toz, Something = something }; return drop; }
/// <summary> /// Handle Game Login packet from client /// </summary> /// <param name="p"></param> /// <param name="c"></param> public static GameLogin RecvGameLogin(Packet p) { p.Skip(2); string account = p.ReadString(); string hash = p.ReadString(); int version = p.ReadShort(); GameLogin g = new GameLogin { AccountName = account, HashCode = hash, Version = version }; return g; }
private void HandlePacket(Packet p) { int curByte = 0; int maxByte = p.Length; while (curByte < maxByte) { int parsedLength = p.ReadShort((curByte + 2)) + 4; byte[] parsed = new byte[parsedLength]; // read bytes from buffer to parsed packets. for (int i = 0; i < parsed.Length; i++) { parsed[i] = p.GetBuffer()[i + curByte]; } // decrypt those bytes as a new real deal parsed packet Packet Parsed = Packet.Decrypt(new Packet(parsed), key); curByte += parsedLength; PacketIds PI = (PacketIds)Parsed.ReadShort(); switch (PI) { #region Login Recvs case PacketIds.Recv_GameLogin: HandleRecvGameLogin(Parsed); break; case PacketIds.Recv_ConnectWorld: HandleRecvConnectWorld(Parsed); break; #endregion #region World Recvs case PacketIds.RecvUnitLogin: HandleRecvUnitLogin(Parsed); break; case PacketIds.RecvCreateCharacter: HandleRecvCreateCharacter(Parsed); break; case PacketIds.RecvChannelRequest: HandleRecvChannelRequest(Parsed); break; #endregion #region Channel Recvs case PacketIds.RecvPing: // needs check if too fast or so :I break; case PacketIds.RecvChannelLogin: HandleRecvChannelLogin(Parsed); break; case PacketIds.RecvChannelChange: HandleRecvChannelChange(Parsed); break; case PacketIds.RecvChannelSomething: HandleRecvChannelStuff(Parsed); break; case PacketIds.RecvLoadMap: HandleRecvMapRequest(Parsed); break; case PacketIds.RecvRequestSkillList: HandleRecvSkillRequest(Parsed); break; case PacketIds.RecvRequestInventory: HandleRecvInventoryRequest(Parsed); break; case PacketIds.RecvMoveItem: HandleRecvMoveItem(Parsed); break; case PacketIds.RecvDropItem: HandleRecvDropItem(Parsed); break; case PacketIds.RecvPickItem: HandleRecvPickItem(Parsed); break; case PacketIds.RecvImbueItem: HandleRecvImbueItem(Parsed); break; case PacketIds.RecvAcceptImbueItem: HandleRecvAcceptImbueItem(Parsed); break; case PacketIds.RecvNpcTrade: HandleRecvNpcTrade(Parsed); break; case PacketIds.RecvBuyItem: HandleRecvBuyItem(Parsed); break; case PacketIds.RecvSomething: Send(PacketManager.SendSomething()); break; case PacketIds.RecvRequestFriendList: Send(PacketManager.SendFriendList()); break; case PacketIds.RecvRequestGuildList: // AD GUILD LIST SEND break; case PacketIds.RecvSomething2: Send(PacketManager.SendSomething2()); break; case PacketIds.RecvStatRequest: HandleRecvStatRequest(Parsed); break; case PacketIds.RecvSpawnRequest: HandleRecvSpawnRequest(Parsed); break; case PacketIds.RecvSpawnPlayer: // request for other player to spawn HandleRecvSpawnOtherPlayerRequest(Parsed); break; case PacketIds.RecvRequestStats: HandleRecvRequestStats(Parsed); break; case PacketIds.RecvAddStat: HandleRecvAddStat(Parsed); break; case PacketIds.RecvPlayerID: HandleRecvSendPlayerIDRequest(Parsed); break; case PacketIds.RecvStartMoving: HandleRecvStartMoving(Parsed); break; case PacketIds.RecvKeepMoving: HandleRecvKeepMoving(Parsed); break; case PacketIds.RecvStopMoving: HandleRecvStopMoving(Parsed); break; case PacketIds.RecvWalkToPortal: HandleRecvWalkToPortal(Parsed); break; case PacketIds.RecvChatMessage: HandleRecvChatMessage(Parsed); break; case PacketIds.RecvCommand: HandleRecvCommand(Parsed); break; #endregion default: HandleRecvUnknownPacket(Parsed); break; // needs logging system like "packet id received: " then whole buffer like in old one } } }
public static ChannelLogin RecvChannelLogin(Packet p) { p.Skip(2); int characterID = p.ReadInt(); int accountID = p.ReadShort(); int channelID = p.ReadShort(); int worldID = p.ReadByte(); ChannelLogin u = new ChannelLogin() { CharacterID = characterID, AccountID = accountID, ChannelID = channelID, WorldID = worldID }; return u; }
public static CastSkillInfo RecvCastSkill2(Packet p) { p.Skip(2); int skillid = p.ReadInt(); byte castertype = p.ReadByte(); int casterid = p.ReadInt(); short casterx = p.ReadShort(); short castery = p.ReadShort(); byte casterz = p.ReadByte(); byte targettype = p.ReadByte(); int targetid = p.ReadInt(); short targetx = p.ReadShort(); short targety = p.ReadShort(); byte targetz = p.ReadByte(); CastSkillInfo i = new CastSkillInfo { PacketID = 2, SkillID = skillid, CasterType = castertype, CasterID = casterid, CasterX = casterx, CasterY = castery, CasterZ = casterz, TargetType = targettype, TargetID = targetid, TargetX = targetx, TargetY = targety, TargetZ = targetz }; return i; }
public static AttackInfo RecvAttack2(Packet p) { p.Skip(2); byte attackertype = p.ReadByte(); int attackerid = p.ReadInt(); short targetx = p.ReadShort(); short targety = p.ReadShort(); byte targetz = p.ReadByte(); byte targettype = p.ReadByte(); int targetid = p.ReadInt(); AttackInfo i = new AttackInfo { PacketID = 2, AttackerType = attackertype, AttackerID = attackerid, TargetX = targetx, TargetY = targety, TargetZ = targetz, TargetType = targettype, TargetID = targetid }; return i; }
public static UpdateQuickSlotInfo RecvUpdateQuickSlot(Packet p) { p.Skip(2); short valueId = p.ReadShort(); p.Skip(2); byte slot = p.ReadByte(); byte page = p.ReadByte(); UpdateQuickSlotInfo i = new UpdateQuickSlotInfo { ValueID = valueId, Slot = slot, Page = page }; return i; }
public static TradeAddItemInfo RecvTradeAdditem(Packet p) { p.Skip(2); byte frombag = p.ReadByte(); byte fromslot = p.ReadByte(); byte tobag = p.ReadByte(); byte toslot = p.ReadByte(); int itemid = p.ReadInt(); short amount = p.ReadShort(); p.Skip(2); int charid = p.ReadInt(); TradeAddItemInfo i = new TradeAddItemInfo { FromBag = frombag, FromSlot = fromslot, ToBag = tobag, ToSlot = toslot, ItemID = itemid, Amount = amount, PlayerID = charid }; return i; }
private void HandlePacket(Packet p) { int curByte = 0; int maxByte = p.Length; while (curByte < maxByte) { int parsedLength = p.ReadShort((curByte + 2)) + 4; byte[] parsed = new byte[parsedLength]; // read bytes from buffer to parsed packets. for (int i = 0; i < parsed.Length; i++) { parsed[i] = p.GetBuffer()[i + curByte]; } // decrypt those bytes as a new real deal parsed packet Packet Parsed = Packet.Decrypt(new Packet(parsed), key); curByte += parsedLength; PacketIds PI = (PacketIds)Parsed.ReadShort(); switch (PI) { #region Login Recvs case PacketIds.Recv_GameLogin: HandleRecvGameLogin(Parsed); break; case PacketIds.Recv_ConnectWorld: HandleRecvConnectWorld(Parsed); break; #endregion #region World Recvs case PacketIds.RecvUnitLogin: HandleRecvUnitLogin(Parsed); break; case PacketIds.RecvCreateCharacter: HandleRecvCreateCharacter(Parsed); break; case PacketIds.RecvChannelRequest: HandleRecvChannelRequest(Parsed); break; #endregion #region Channel Recvs case PacketIds.RecvPing: // needs check if too fast or so :I break; case PacketIds.RecvChannelLogin: HandleRecvChannelLogin(Parsed); break; case PacketIds.RecvChannelChange: HandleRecvChannelChange(Parsed); break; case PacketIds.RecvChannelSomething: HandleRecvChannelStuff(Parsed); break; case PacketIds.RecvLoadMap: HandleRecvMapRequest(Parsed); break; case PacketIds.RecvRequestSkillList: HandleRecvSkillRequest(Parsed); break; case PacketIds.RecvRequestInventory: HandleRecvInventoryRequest(Parsed); break; case PacketIds.RecvRequestOpenWarehouse: HandleRecvOpenWarehouse(Parsed); break; case PacketIds.RecvMoveWarehouseItemToBag: HandleRecvMoveWarehouseItemToBag(Parsed); break; case PacketIds.RecvAddItemToWarehouse: HandleRecvAddItemToWarehouse(Parsed); break; case PacketIds.RecvMoveWarehouseItem: HandleRecvMoveWarehouseItem(Parsed); break; case PacketIds.RecvMoveItem: HandleRecvMoveItem(Parsed); break; case PacketIds.RecvDropItem: HandleRecvDropItem(Parsed); break; case PacketIds.RecvPickItem: HandleRecvPickItem(Parsed); break; case PacketIds.RecvStackItem: HandleRecvStackItem(Parsed); break; case PacketIds.RecvImbueItem: HandleRecvImbueItem(Parsed); break; case PacketIds.RecvAcceptImbueItem: HandleRecvAcceptImbueItem(Parsed); break; case PacketIds.RecvNpcTrade: HandleRecvNpcTrade(Parsed); break; case PacketIds.RecvBuyItem: HandleRecvBuyItem(Parsed); break; case PacketIds.RecvSellItem: HandleRecvSellItem(Parsed); break; case PacketIds.RecvUseItem: HandleRecvUseItem(Parsed); break; case PacketIds.RecvUseRebirthPill: HandleRecvUseRebirthPill(Parsed); break; case PacketIds.RecvTradePlayer: HandleRecvTradePlayer(Parsed); break; case PacketIds.RecvTradePlayerCommands: HandleRecvTradePlayerCommands(Parsed); break; case PacketIds.RecvTradeAddMoney: HandleRecvTradeAddMoney(Parsed); break; case PacketIds.RecvTradeAddItem: HandleRecvTradeAddItem(Parsed); break; case PacketIds.RecvBuyOtherPlayerShopItem: HandleRecvBuyOtherPlayerShopItem(Parsed); break; case PacketIds.RecvShopTakeMoney: HandleRecvShopTakeMoney(Parsed); break; case PacketIds.RecvOpenOtherPlayerShop: HandleRecvOpenOtherPlayerShop(Parsed); break; case PacketIds.RecvShopStartSelling: HandleRecvShopStartSelling(Parsed); break; case PacketIds.RecvAddItemToShop: HandleRecvAddItemToShop(Parsed); break; case PacketIds.RecvMoveShopItem: HandleRecvMoveShopItem(Parsed); break; case PacketIds.RecvMoveShopItemToBag: HandleRecvMoveShopItemToBag(Parsed); break; case PacketIds.RecvChangeShopInfo: HandleRecvChangeShopInfo(Parsed); break; case PacketIds.RecvLearnSkill: HandleRecvLearnSkill(Parsed); break; case PacketIds.RecvQuickSlotRequest: Send(PacketManager.SendQuickSlots(this.MyCharacter)); break; case PacketIds.RecvUpdateQuickSlot: HandleRecvUpdateQuickSlot(Parsed); break; case PacketIds.RecvSelectSkill: HandleRecvSelectSkill(Parsed); break; case PacketIds.RecvRequestGuildList: HandleRecvRequestGuild(Parsed); break; case PacketIds.RecvCreateGuild: HandleRecvCreateGuild(Parsed); break; case PacketIds.RecvRequestGuildInformation: HandleRecvRequestGuildInfo(Parsed); break; case PacketIds.RecvRequestGuildMemberStats: HandleRecvRequestGuildMemberStats(Parsed); break; case PacketIds.RecvRequestChangeGuildMemberRank: HandleRecvRequestChangeGuildMemberRank(Parsed); break; case PacketIds.RecvRequestChangeGuildMemberTitle: HandleRecvRequestChangeGuildMemberTitle(Parsed); break; case PacketIds.RecvRequestChangeGuildNotice: HandleRecvRequestChangeGuildNotice(Parsed); break; case PacketIds.RecvRequestJoinGuild: HandleRecvRequestJoinGuild(Parsed); break; case PacketIds.RecvRequestCloseGuild: HandleRecvRequestCloseGuild(Parsed); break; case PacketIds.RecvRequestLeaveGuild: HandleRecvRequestLeaveGuild(Parsed); break; case PacketIds.RecvGuildChat: HandleRecvGuildChat(Parsed); break; case PacketIds.RecvSomething2: Send(PacketManager.SendSomething2()); break; case PacketIds.RecvStatRequest: HandleRecvStatRequest(Parsed); break; case PacketIds.RecvSpawnRequest: HandleRecvSpawnRequest(Parsed); break; case PacketIds.RecvSpawnPlayer: // request for other player to spawn HandleRecvSpawnOtherPlayerRequest(Parsed); break; case PacketIds.RecvRequestStats: HandleRecvRequestStats(Parsed); break; case PacketIds.RecvAddStat: HandleRecvAddStat(Parsed); break; case PacketIds.RecvPlayerPetReques: HandleRecvSendPlayerPetRequest(Parsed); break; case PacketIds.RecvStartMoving: HandleRecvStartMoving(Parsed); break; case PacketIds.RecvKeepMoving: HandleRecvKeepMoving(Parsed); break; case PacketIds.RecvStopMoving: HandleRecvStopMoving(Parsed); break; case PacketIds.RecvWalkToPortal: HandleRecvWalkToPortal(Parsed); break; case PacketIds.RecvRequestFriendList: HandleRecvRequestFriendList(Parsed); break; case PacketIds.RecvAddFriend: HandleRecvAddFriend(Parsed); break; case PacketIds.RecvChatMessage: HandleRecvChatMessage(Parsed); break; case PacketIds.RecvCommand: HandleRecvCommand(Parsed); break; case PacketIds.RecvMonsterSpawnRequest: HandleRecvMonsterSpawn(Parsed); break; case PacketIds.RecvUseTeleporter: HandleRecvUseTeleporter(Parsed); break; case PacketIds.RecvAttack1: HandleRecvAttack1(Parsed); break; case PacketIds.RecvAttack2: HandleRecvAttack2(Parsed); break; case PacketIds.RecvCast1: HandleRecvCast1(Parsed); break; case PacketIds.RecvCast2: HandleRecvCast2(Parsed); break; case PacketIds.RecvCombineItems: HandleRecvCombineItems(Parsed); break; case PacketIds.RecvPartyRequest: HandleRecvPartyRequest(Parsed); break; case PacketIds.RecvLeaveParty: HandleRecvLeaveParty(Parsed); break; case PacketIds.RecvChangePartyLeader: HandleRecvChangePartyLeader(Parsed); break; case PacketIds.RecvAddToPartyRequest: HandleRecvAddToParty(Parsed); break; case PacketIds.RecvPetStartMoving: HandleRecvPetStartMoving(Parsed); break; case PacketIds.RecvPetKeepMoving: HandleRecvPetKeepMoving(Parsed); break; case PacketIds.RecvPetStopMoving: HandleRecvPetStopMoving(Parsed); break; case PacketIds.RecvKillPet: HandleRecvKillPet(Parsed); break; case PacketIds.RecvBaitPet: HandleRecvBaitPet(Parsed); break; case PacketIds.RecvRequestPetStats: HandleRecvRequestPetStats(Parsed); break; case PacketIds.RecvRequestSpawnOtherPet: HandleRecvSpawnOtherPet(Parsed); break; case PacketIds.RecvResurrectPet: HandleRecvResurrectPet(Parsed); break; case PacketIds.RecvRenamePet: HandleRecvRenamePet(Parsed); break; case PacketIds.RecvSendPetToMe: HandleRecvSendPetToMe(Parsed); break; case PacketIds.RecvTradePet: HandleRecvTradePet(Parsed); break; case PacketIds.RecvTradePetAmount: HandleRecvTradePetAmount(Parsed); break; case PacketIds.RecvSealPet: HandleRecvSealPet(Parsed); break; case PacketIds.RecvUnSealPet: HandleRecvUnSealPet(Parsed); break; case PacketIds.RecvQuestListRequest: List<QuestObject> objects = new List<QuestObject>(); objects.Add(new QuestObject(QuestObjectType.Hunt, 0, 5, 0)); objects.Add(new QuestObject(QuestObjectType.Hunt, 1, 5, 0)); objects.Add(new QuestObject(QuestObjectType.Hunt, 2, 5, 0)); objects.Add(new QuestObject(QuestObjectType.Join_Party, 0, 1, 1)); objects.Add(new QuestObject(QuestObjectType.Level_Up, 0, 5, 1)); objects.Add(new QuestObject(QuestObjectType.Obtain_Money, 0, 1000, 2)); List<QuestReward> rewards = new List<QuestReward>(); rewards.Add(new QuestReward(0, 23273, 10, QuestRewardType.PlusItem)); rewards.Add(new QuestReward(1, 20041, 10, QuestRewardType.Item)); rewards.Add(new QuestReward(2, 0, 1000, QuestRewardType.Money)); rewards.Add(new QuestReward(2, 0, 1, QuestRewardType.Fame)); Quest quest = new Quest { Name = "Fate and Meeting!", ID = 1009, Objectives = objects, Rewards = rewards, CurrentObjective = 2, State = QuestState.Started }; Send(PacketManager.SendQuestList(quest)); break; case PacketIds.RecvPetRequestItems: // this should send the equips and items in bag but without having anythign on it wont send anything break; case PacketIds.RecvRequestDeath: HandleRecvRequestDeath(Parsed); break; #endregion default: HandleRecvUnknownPacket(Parsed); break; // needs logging system like "packet id received: " then whole buffer like in old one } } }