Ejemplo n.º 1
0
        public override void RawEncode(COutPacket p, bool bFromCS = false)
        {
            p.Encode1(3);

            p.Encode4(nItemID);

            var bCashItem = liCashItemSN != 0;

            p.Encode1(bCashItem);

            if (bCashItem)             // arent all pets cash items?? o__o
            {
                p.Encode8(liCashItemSN);
            }

            p.EncodeDateTime(tDateExpire);

            p.EncodeStringFixed(sPetName, 13);
            p.Encode1(nLevel);
            p.Encode2(nTameness);
            p.Encode1(nRepleteness);
            if (tDateDead == DateTime.MaxValue)
            {
                p.Encode8(0);
            }
            else
            {
                p.EncodeDateTime(tDateDead);
            }
            p.Encode2(nPetAttribute);
            p.Encode2(usPetSkill);
            p.Encode4(nRemainLife);
            p.Encode2(nAttribute);
        }
Ejemplo n.º 2
0
            public static COutPacket QuestRecordMessage(QuestEntry pQuest)
            {
                var p = new COutPacket(SendOps.LP_Message);

                p.Encode1(MessageType.QuestRecordMessage);
                p.Encode2(pQuest.nQuestID);
                p.Encode1((byte)pQuest.nState);

                switch (pQuest.nState)
                {
                case QuestActType.NotStarted:
                    p.Encode1(0);
                    // nothing
                    break;

                case QuestActType.QuestAccept:
                    p.EncodeString(pQuest.sQRValue);
                    // accept time, idc -> used for a few quests to determine when it can be completed
                    //p.EncodeDateTime(DateTime.Now.AddMinutes(-3));
                    break;

                case QuestActType.QuestComplete:
                    p.EncodeDateTime(pQuest.tCompleted);
                    break;
                }

                return(p);
            }
Ejemplo n.º 3
0
        public static COutPacket MegaphonePacket(CashItemType nType, bool bWhisperIcon, byte nChannelNo, params string[] sMsg)
        {
            var p = new COutPacket(SendOps.LP_BroadcastMsg);

            switch (nType) // idk if i like this implementation....
            {
            case CashItemType.SPEAKERCHANNEL:
                EncodeMegaphoneText(p, BroadcastMsgType.SpeakerChannel, sMsg[0]);
                break;

            case CashItemType.SPEAKERWORLD:
                EncodeMegaphoneText(p, BroadcastMsgType.SpeakerWorld, sMsg[0]);
                break;

            case CashItemType.SKULLSPEAKER:
                EncodeMegaphoneText(p, BroadcastMsgType.SkullSpeaker, sMsg[0]);
                break;

            case CashItemType.ARTSPEAKERWORLD:
                p.Encode1((byte)BroadcastMsgType.ArtSpeakerWorld);
                p.EncodeString(sMsg[0]);
                p.Encode1((byte)sMsg.Length);
                for (int i = 1; i < sMsg.Length; i++)
                {
                    p.EncodeString(sMsg[i]);
                }
                break;
            }

            p.Encode1(nChannelNo);
            p.Encode1(bWhisperIcon);

            return(p);
        }
Ejemplo n.º 4
0
        private static void EncodeEmployeeSetBalloon(COutPacket p, CMiniRoomBase cMiniRoom)
        {
            p.Encode1((byte)cMiniRoom.nMiniRoomType);
            p.Encode4(cMiniRoom.dwId); //dwMiniRoomSN

            if ((byte)cMiniRoom.nMiniRoomType <= 0)
            {
                return; // idk why this would happen but its in pdb
            }
            if (cMiniRoom is CEntrustedShop ces)
            {
                p.EncodeString(ces.sTitle);
                p.Encode1((byte)(ces.nTemplateId % 10)); // nSpec
            }
            else if (cMiniRoom is CPersonalShop cps)
            {
                p.EncodeString(cps.sTitle);
                p.Encode1((byte)(cps.nTemplateId % 10)); // nSpec
            }
            else
            {
                throw new InvalidOperationException("Unknown employee type");
            }
            p.Encode1(cMiniRoom.nCurUsers);
            p.Encode1(cMiniRoom.nMaxUsers);
        }
Ejemplo n.º 5
0
        public void EncodeInitData(COutPacket p)
        {
            p.Encode4(dwMobId);
            p.Encode1(5); //  nCalcDamageIndex | Controller
            p.Encode4(dwTemplateId);

            //CMob::SetTemporaryStat
            CPacket.MobStat__EncodeTemporary(p, 0, 0, 0);

            //CMob::Init
            p.Encode2(Position.Position.X); //m_ptPosPrev.x
            p.Encode2(Position.Position.Y); //m_ptPosPrev.y
            p.Encode1(0 & 1 | 2 * 2);       //mob.Position.Stance); //m_nMoveAction
            p.Encode2(0);                   //  m_nFootholdSN
            p.Encode2(Position.Foothold);   //  m_nHomeFoothold

            var m_nSummonType = unchecked ((byte)-2);

            p.Encode1(m_nSummonType); //m_nSummonType

            //if(m_nSummonType == -3 || m_nSummonType >= 0)
            //   p.Encode4(0); //m_dwSummonOption

            p.Encode1(0); //m_nTeamForMCarnival
            p.Encode4(0); //nEffectItemID
            p.Encode4(0); //m_nPhase
        }
Ejemplo n.º 6
0
        public void Encode(COutPacket p)
        {
            p.Encode1(nFlag); // technically a bitflag but it only uses bit 1 and 2
            p.Encode1(nMessageType);

            alSender.Encode(p);

            p.EncodeString(sSender);
            p.EncodeString(sReceiver);

            for (int i = 0; i < 5; i++)
            {
                if (sMsgs.Length <= i)
                {
                    p.EncodeString("");
                }
                else
                {
                    p.EncodeString(sMsgs[i]);
                }
            }

            if ((nFlag & 2) > 0)
            {
                alReceiver.Encode(p);
            }
        }
Ejemplo n.º 7
0
        public void EncodeItems(COutPacket p)
        {
            var nCount = (byte)Inventory.GetAll().Count;

            p.Encode1(nCount);

            if (nCount <= 0)
            {
                p.Encode1(0);
                return;
            }

            foreach (var item in Inventory.GetAll())
            {
                var bundles = 1;

                if (item.Item is GW_ItemSlotBundle isb)
                {
                    bundles = item.NumberOfBundles; // there is some sort of extra handling here but f**k that rn
                }

                p.Encode2(item.NumberOfBundles);
                p.Encode2(item.ItemsInBundle);
                p.Encode4(item.Price);
                item.Item.RawEncode(p);
            }
        }
Ejemplo n.º 8
0
        public void Encode(COutPacket p)
        {
            switch ((MobStatType)MobStatTypeID)
            {
            case MobStatType.Burned:
                p.Encode4(0);                         // size
                //tCur = (int)v45;
                //do
                //{
                //    v47 = ZList < MobStat::BURNED_INFO >::AddTail(&v4->lBurnedInfo);
                //    v47->dwCharacterID = CInPacket::Decode4(v8);
                //    v47->nSkillID = CInPacket::Decode4(v8);
                //    v47->nDamage = CInPacket::Decode4(v8);
                //    v47->tInterval = CInPacket::Decode4(v8);
                //    v47->tEnd = CInPacket::Decode4(v8);
                //    v48 = CInPacket::Decode4(v8);
                //    v49 = tCur-- == 1;
                //    v47->nDotCount = v48;
                //    v47->tLastUpdate = v7;
                //}
                //while (!v49);
                break;

            case MobStatType.Disable:
                p.Encode1(false);                         // bInvincible
                p.Encode1(false);                         // bDisable
                break;

            default:
                p.Encode2(nOption);
                p.Encode4(rOption);
                p.Encode2(nDurationSeconds);                         // seconds
                break;
            }
        }
Ejemplo n.º 9
0
        private COutPacket StatReset(params MobStatEntry[] toRemove)
        {
            var p = new COutPacket(SendOps.LP_MobStatReset);

            p.Encode4(Parent.dwId);

            var movementAffectingStat = EncodeMask(p, toRemove);

            // order matters
            var sorted = toRemove
                         .ToList()
                         .OrderBy(item => item.MobStatTypeID);

            foreach (var entry in sorted)
            {
                if (entry.MobStatTypeID == (int)MobStatType.Burned)
                {
                    p.Encode4(0);                     //size
                    // for each size
                    // p.Encode4(charId[i])
                    // p.Encode4(skillId[i])
                }
            }

            p.Encode1(0);             // m_nCalcDamageStatIndex

            if (movementAffectingStat)
            {
                p.Encode1(false);
            }

            return(p);
        }
Ejemplo n.º 10
0
        public COutPacket CashPetFoodResult(bool bSuccess)
        {
            var p = new COutPacket(SendOps.LP_CashPetFoodResult);

            p.Encode1(!bSuccess);                    // inverse for some reason
            p.Encode1((byte)(dwTemplateID % 10000)); // sound effect
            return(p);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// LP_BattlefieldScore - 0x164
        /// </summary>
        /// <returns></returns>
        private COutPacket ScoreUpdate(int nWolfScore, int nSheepScore)
        {
            var p = new COutPacket(SendOps.LP_BattlefieldScore);

            p.Encode1((byte)nWolfScore);
            p.Encode1((byte)nSheepScore);
            return(p);
        }
Ejemplo n.º 12
0
        private COutPacket LeaveResult(byte nIdx)
        {
            var p = new COutPacket(SendOps.LP_Messenger);

            p.Encode1((byte)MSMPType.MSMP_Leave);
            p.Encode1(nIdx);
            return(p);
        }
Ejemplo n.º 13
0
        private COutPacket SelfEnterResult(byte nIdx)
        {
            var p = new COutPacket(SendOps.LP_Messenger);

            p.Encode1((byte)MSMPType.MSMP_SelfEnterResult);
            p.Encode1(nIdx);
            return(p);
        }
Ejemplo n.º 14
0
        private COutPacket OpenGateRemoved()
        {
            var p = new COutPacket(SendOps.LP_OpenGateRemoved);

            p.Encode1(1);             // nLeaveType
            p.Encode4(dwCharacterID);
            p.Encode1(bFirst);
            return(p);
        }
Ejemplo n.º 15
0
        private COutPacket UpdateAvatar(byte nIdx, Character c)
        {
            var p = new COutPacket(SendOps.LP_Messenger);

            p.Encode1((byte)MSMPType.MSMP_Avatar);
            p.Encode1(nIdx);
            c.GetLook().Encode(p);
            return(p);
        }
Ejemplo n.º 16
0
            }             // DONE

            /// <summary>
            /// Gets sent to all chars in guild after capacity is increased
            /// </summary>
            /// <returns></returns>
            public static COutPacket IncMaxMemberNum_Done(int nGuildID, byte nMaxMemberNum)
            {
                var p = new COutPacket(SendOps.LP_GuildResult);

                p.Encode1((byte)GuildOps.GuildRes_IncMaxMemberNum_Done);
                p.Encode4(nGuildID);
                p.Encode1(nMaxMemberNum);
                return(p);
            }             // DONE
Ejemplo n.º 17
0
            public static COutPacket ViewAllCharResult_Error(string szMessage)
            {
                var p = new COutPacket(SendOps.LP_ViewAllCharResult);

                p.Encode1(3);
                p.Encode1(1);
                p.EncodeString(szMessage);
                return(p);
            }
Ejemplo n.º 18
0
        /// <summary>
        /// Send to the person whispering
        /// </summary>
        /// <param name="sName">Sender name</param>
        /// <param name="bSuccess">If the target was found or not</param>
        /// <returns></returns>
        private static COutPacket WhisperResult(string sName, bool bSuccess)
        {
            var p = new COutPacket(SendOps.LP_Whisper);

            p.Encode1(0xA); // todo enum
            p.EncodeString(sName);
            p.Encode1(bSuccess);
            return(p);
        }
Ejemplo n.º 19
0
        public COutPacket PlayerExitPacket(int dwCharId, MR_LeaveResult nReason)
        {
            var p = new COutPacket(SendOps.LP_MiniRoom);

            p.Encode1((byte)(dwCharId == OwnerID ? MR_Action.ESP_WithdrawAllResult : MR_Action.MRP_Leave));
            p.Encode1(GetVisitorIndex(dwCharId));
            p.Encode1((byte)nReason);
            return(p);
        }
Ejemplo n.º 20
0
        private COutPacket InviteResult(string sCharName, bool bSuccess)
        {
            var p = new COutPacket(SendOps.LP_Messenger);

            p.Encode1((byte)MSMPType.MSMP_InviteResult);
            p.EncodeString(sCharName);
            p.Encode1(bSuccess);
            return(p);
        }
Ejemplo n.º 21
0
            public static COutPacket CashItemResIncSlotCountDone(InventoryType nInvType, short nNewSlotAmount)
            {
                var p = new COutPacket(SendOps.LP_CashShopCashItemResult);

                p.Encode1((byte)CashItemOps.CashItemRes_IncSlotCount_Done);
                p.Encode1(nInvType);
                p.Encode2(nNewSlotAmount);
                return(p);
            }
Ejemplo n.º 22
0
            public static COutPacket ChangePartyBoss_Done(Party party, int dwCharId, bool bDisconnected)
            {
                var p = new COutPacket(SendOps.LP_PartyResult);

                p.Encode1((byte)PartyOps.PartyRes_ChangePartyBoss_Done);
                p.Encode4(dwCharId);
                p.Encode1(bDisconnected);
                return(p);
            }
Ejemplo n.º 23
0
            public static COutPacket CouponFail(CashItemFailed result)
            {
                var p = new COutPacket(SendOps.LP_CashShopCashItemResult);

                p.Encode1((byte)CashItemOps.CashItemRes_UseCoupon_Failed);
                p.Encode1((byte)result);

                return(p);
            }
Ejemplo n.º 24
0
            public static COutPacket BuyPackageResponse(List <CashItemInfo> aItems)
            {
                var p = new COutPacket(SendOps.LP_CashShopCashItemResult);

                p.Encode1((byte)CashItemOps.CashItemRes_BuyPackage_Done);
                p.Encode1((byte)aItems.Count);
                aItems.ForEach(item => item.Encode(p));
                p.Encode2(0);
                return(p);
            }
Ejemplo n.º 25
0
        private static COutPacket FailedEnterPacket()
        {
            var p = new COutPacket(SendOps.LP_MiniRoom);

            p.Encode1((byte)MR_Action.MRP_Leave);
            p.Encode1(0);
            p.Encode1((byte)MR_LeaveResult.Closed);

            return(p);
        }
Ejemplo n.º 26
0
        public COutPacket Chat_GameMessage(MR_Action nMsgCode, string sMsg)
        {
            var p = new COutPacket(SendOps.LP_MiniRoom);

            p.Encode1((byte)MR_Action.MRP_GameMessage);
            p.Encode1((byte)nMsgCode);
            p.EncodeString(sMsg);

            return(p);
        }
Ejemplo n.º 27
0
        private COutPacket LeavePacket(bool bOwner)
        {
            var p = new COutPacket(SendOps.LP_MiniRoom);

            p.Encode1((byte)MR_Action.MRP_Leave); // exit op code
            p.Encode1(bOwner);                    // who exited
            p.Encode1((byte)CurrentStatus);

            return(p);
        }
Ejemplo n.º 28
0
        private COutPacket SetMesoPacket(int amount, bool owner)
        {
            var p = new COutPacket(SendOps.LP_MiniRoom);

            p.Encode1((byte)MR_Action.TRP_PutMoney); // set meso opcode
            p.Encode1(owner);
            p.Encode4(amount);

            return(p);
        }
Ejemplo n.º 29
0
            public static COutPacket CheckPasswordResult(int accId, byte gender, byte nGradeCode, short nSubGradeCode, string accountName)
            {
                var p = new COutPacket(SendOps.LP_CheckPasswordResult);

                p.Encode1(0);                 //nRet
                p.Encode1(0);                 //nRegStatID
                p.Encode4(0);                 //nUseDay

                //if (nRet == 2)
                //{
                //    COutPacket::Encode1((COutPacket*)&oPacket, v2->m_nBlockReason);
                //    COutPacket::EncodeBuffer((COutPacket*)&oPacket, &v2->m_dtUnblockDate, 8u);
                //}

                p.Encode4(accId);             // dwAccountId
                p.Encode1(gender);            // nGender
                p.Encode1(nGradeCode);        // nGradeCode
                p.Encode2(nSubGradeCode);     // nSubGradeCode
                p.Encode1(0);                 // nCountryID
                p.EncodeString(accountName);  // sNexonClubID
                p.Encode1(0);                 // nPurchaseExp
                p.Encode1(0);                 // nChatBlockReason
                p.Encode8(0);                 // dtChatUnblockDate
                p.Encode8(0);                 // dtRegisterDate
                p.Encode4(4);                 // flag that affects character creation

                p.Encode1(true);              //If true client will send CP_WorldRequest
                //If false it check nGameStartMode and returns or sends CP_CheckPinCode

                p.Encode1(1);                 //sMsg._m_pStr[432] = CInPacket::Decode1(iPacket);
                p.Encode8(0);                 // dwHighDateTime
                return(p);
            }
Ejemplo n.º 30
0
        private COutPacket AddItemPacket(TempItem item, bool owner)
        {
            var p = new COutPacket(SendOps.LP_MiniRoom);

            p.Encode1((byte)MR_Action.TRP_PutItem); // add item opcode
            p.Encode1(owner);
            p.Encode1((byte)item.TargetSlot);
            item.Item.RawEncode(p);

            return(p);
        }