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