public static byte[] SendQuestList(Quest q) { Packet p = new Packet(20); p.WriteHexString("80 00 00 00"); // player fame p.WriteHexString("01"); // total quests p.WriteInt(q.ID); p.WriteByte((byte)q.State); // status, paused, started etc p.WriteHexString("00"); // maybe times finished.. p.WriteByte(q.CurrentObjective); p.WriteByte(q.Objectives.Count); p.WriteByte(q.Rewards.Count); for (int i = 0; i < q.Objectives.Count; i++) { QuestObjectState state = QuestObjectState.Hidden; if (q.CurrentObjective >= q.Objectives[i].AtObjective) { if (q.Objectives[i].CurrentAmount == q.Objectives[i].AmountRequired) state = QuestObjectState.Obtained; else state = QuestObjectState.NotObtained; } q.Objectives[i].State = state; p.WriteByte((byte)q.Objectives[i].State); // object state acquired, hidden etc. p.WriteByte(q.Objectives[i].AtObjective); p.WriteByte((byte)q.Objectives[i].Type); // object type.. p.WriteInt(q.Objectives[i].ID); p.WriteInt(q.Objectives[i].CurrentAmount); p.WriteInt(q.Objectives[i].AmountRequired); } for (int i = 0; i < q.Rewards.Count; i++) { QuestObjectState state = QuestObjectState.Hidden; if (q.CurrentObjective >= q.Rewards[i].AtObjective) state = QuestObjectState.NotObtained; q.Rewards[i].State = state; p.WriteByte((byte)q.Rewards[i].State); p.WriteByte(q.Rewards[i].AtObjective); p.WriteByte((byte)q.Rewards[i].Type); if (q.Rewards[i].Type == QuestRewardType.Item || q.Rewards[i].Type == QuestRewardType.PlusItem) { p.WriteInt(q.Rewards[i].ID); p.WriteInt(q.Rewards[i].Amount); } else { p.WriteInt(q.Rewards[i].Amount); p.WriteInt(0); //unknown. } } return p.GetWrittenBuffer(PacketIds.SendQuestList); }
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 } } }