예제 #1
0
        public void EncodeInitData(COutPacket p)
        {
            p.Encode4(dwId);
            p.Encode4(nSkillID);
            p.Encode1(nCharLevel);
            p.Encode1(nSLV);
            Position.EncodePos(p);
            p.Encode1(Position.MoveAction);
            p.Encode2(Position.Foothold);
            p.Encode1((byte)nMoveAbility);
            p.Encode1((byte)nAssistType);
            p.Encode1((byte)nEnterType);

            var mirrorTarget = nSkillID == (int)Skills.DUAL5_DUMMY_EFFECT;

            p.Encode1(mirrorTarget);
            if (mirrorTarget)
            {
                Parent.GetLook().Encode(p);
            }
            else if (nSkillID == (int)Skills.MECHANIC_TESLA_COIL)
            {
                p.Encode1((byte)nTeslaCoilState);

                if (nTeslaCoilState == TeslaCoilType.Leader)
                {
                    foreach (var item in Field.Summons
                             .Where(item => item.nSkillID == (int)Skills.MECHANIC_TESLA_COIL && dwParentID == item.dwParentID))
                    {
                        p.Encode2(item.Position.X);
                        p.Encode2(item.Position.Y);
                    }
                }
            }
        }
예제 #2
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);
            }
예제 #3
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);
        }
예제 #4
0
 public void Encode(COutPacket p)
 {
     p.Encode4(Left);
     p.Encode4(Top);
     p.Encode4(Right);
     p.Encode4(Bottom);
 }
예제 #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(Position.Foothold);   //  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
        }
예제 #6
0
        //Eventually move this out of socket
        public void Initialize(ushort version)
        {
            m_version = version;

            m_siv = new MapleIV(0xBADF00D);
            m_riv = new MapleIV(0XDEADBEEF);

            //m_siv = new MapleIV(0x52616A61); //Raja
            //m_riv = new MapleIV(0x6E523078); //nR0x

            using (var p = new COutPacket())
            {
                p.Encode2(0x0E);
                p.Encode2((short)version);
                p.EncodeString("1");
                p.Encode4((int)m_riv.Value);
                p.Encode4((int)m_siv.Value);
                p.Encode1(8);

                var buffer = p.ToArray();

                SendRaw(buffer);
            }

            Receive();
        }
예제 #7
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);
        }
예제 #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;
            }
        }
예제 #9
0
        private COutPacket UserSkillCancelRemote(int nSkillID)         // TODO move this to a CPacket subclass
        {
            var p = new COutPacket(SendOps.LP_UserSkillCancel);

            p.Encode4(dwParentID);
            p.Encode4(nSkillID);
            return(p);
        }
예제 #10
0
            /// <summary>
            /// This packet is sent to activate the tesla coils.
            /// The client will expect three coils in the map for this to work.
            /// </summary>
            public static COutPacket TeslaTriangle(int dwParentID, List <int> teslaCoilSummonIDs)
            {
                var p = new COutPacket(SendOps.LP_UserTeslaTriangle);

                p.Encode4(dwParentID);
                teslaCoilSummonIDs.ForEach(coil => p.Encode4(coil));
                return(p);
            }
예제 #11
0
 private void EncodeState(COutPacket p)
 {
     p.Encode1((byte)nState);
     p.Encode4(100 * nSnowManCurHP[0] / SNOWMAN_BASE_HP);
     p.Encode4(100 * nSnowManCurHP[1] / SNOWMAN_BASE_HP);
     aSnowBall[0].Encode(p);
     aSnowBall[1].Encode(p);
 }
예제 #12
0
 public void Encode(COutPacket p)
 {
     p.Encode4(dwPairCharacterID);
     p.EncodeStringFixed(sPairCharacterName, 13);
     p.Encode8(liSN);
     p.Encode8(liPairSN);
     p.Encode4(dwFriendItemID);
 }
예제 #13
0
 public void Encode(COutPacket p)
 {
     p.Encode4(dwFriendID);
     p.EncodeStringFixed(sFriendName, 13);
     p.Encode1((byte)(nFlag == 10 ? 0 : nFlag));
     p.Encode4(bOnline && !bCashShop ? nChannelID : -1);
     p.EncodeStringFixed(sFriendGroup, 17);
 }
예제 #14
0
            public static COutPacket MobAffected(int dwMobID, int nSkillID, int tDelay)
            {
                var p = new COutPacket(SendOps.LP_MobAffected);

                p.Encode4(dwMobID);
                p.Encode4(nSkillID);
                p.Encode2((short)(tDelay > short.MaxValue ? short.MaxValue : tDelay));
                return(p);
            }
예제 #15
0
            // CSummonedPool::OnMove
            public static COutPacket SummonedMove(CSummon summon, CInPacket iPacket)
            {
                var oPacket = new COutPacket(SendOps.LP_SummonedMove);

                oPacket.Encode4(summon.dwParentID);
                oPacket.Encode4(summon.dwId);
                summon.Position.UpdateMovePath(oPacket, iPacket);
                return(oPacket);
            }
예제 #16
0
            // CSummonedPool::OnRemoved
            public static COutPacket LeaveFieldPacket(CSummon summon)
            {
                var p = new COutPacket(SendOps.LP_SummonedLeaveField);

                p.Encode4(summon.dwParentID);
                p.Encode4(summon.dwId);
                p.Encode1((byte)summon.nLeaveType);
                return(p);
            }
예제 #17
0
        public void Encode(COutPacket p)
        {
            p.Encode4(bPredictQuit);

            foreach (var gift in nLogoutGiftCommoditySN)
            {
                p.Encode4(gift);
            }
        }
예제 #18
0
            // CSummonedPool::OnSkill
            public static COutPacket SummonedSkill(CSummon summon, int summonSkillId, byte bAttackAction)
            {
                var p = new COutPacket(SendOps.LP_SummonedSkill);

                p.Encode4(summon.dwParentID);
                p.Encode4(summonSkillId);
                p.Encode1(bAttackAction);
                return(p);
            }
예제 #19
0
        public static COutPacket MakerItemEffectRemote(int dwCharId, bool bSuccess)
        {
            var p = new COutPacket(SendOps.LP_UserEffectRemote);

            p.Encode4(dwCharId);
            p.Encode1((byte)UserEffect.ItemMaker);             // local and remote are same
            p.Encode4(bSuccess ? 0 : 1);
            return(p);
        }
예제 #20
0
            }                         // DONE

            /// <summary>
            /// Packet sent to all guild members after a character has joined the guild.
            /// </summary>
            /// <returns></returns>
            public static COutPacket JoinGuild_Done(GuildMember g)
            {
                var p = new COutPacket(SendOps.LP_GuildResult);

                EncodeHeader(p, GuildOps.GuildRes_JoinGuild_Done);
                p.Encode4(g.Guild.GuildID);
                p.Encode4(g.dwParentID);
                g.EncodeGuildMember(p);
                return(p);
            }             // DONE
예제 #21
0
        private static COutPacket MakerRelease()
        {
            var p = new COutPacket(SendOps.LP_UserMakerResult);

            p.Encode4(0);
            p.Encode4(0);
            p.Encode4(0);
            p.Encode4(0);
            return(p);
        }
예제 #22
0
            }             // DONE

            /// <summary>
            /// Gets sent to all members after guild points have been changed
            /// </summary>
            /// <param name="g"></param>
            /// <returns></returns>
            public static COutPacket IncPoint_Done(Guild g)
            {
                var p = new COutPacket(SendOps.LP_GuildResult);

                EncodeHeader(p, GuildOps.GuildRes_IncPoint_Done);
                p.Encode4(g.GuildID);
                p.Encode4(g.GuildPoints);
                p.Encode4(g.GuildLevel);
                return(p);
            }             // DONE
예제 #23
0
            }             // DONE

            /// <summary>
            /// Gets sent to all guild members after a guild members rank has changed
            /// </summary>
            /// <param name="g"></param>
            /// <returns></returns>
            public static COutPacket SetMemberGrade_Done(GuildMember g)
            {
                var p = new COutPacket(SendOps.LP_GuildResult);

                EncodeHeader(p, GuildOps.GuildRes_SetMemberGrade_Done);
                p.Encode4(g.Guild.GuildID);
                p.Encode4(g.dwParentID);
                p.Encode1(g.GuildRank);
                return(p);
            }             // DONE
예제 #24
0
            }             // DONE

            /// <summary>
            /// Sent to all guild members after a member has logged in or out.
            /// </summary>
            /// <param name="g"></param>
            /// <returns></returns>
            public static COutPacket NotifyLoginOrLogout(GuildMember g)
            {
                var p = new COutPacket(SendOps.LP_GuildResult);

                EncodeHeader(p, GuildOps.GuildRes_NotifyLoginOrLogout);
                p.Encode4(g.Guild.GuildID);
                p.Encode4(g.dwParentID);
                p.Encode1(g.bOnline);
                return(p);
            }             // DONE
예제 #25
0
        private static COutPacket BuildMonsterCrystalResponse(int nItemGained, int nItemLost)
        {
            var p = new COutPacket(SendOps.LP_UserMakerResult);

            p.Encode4(1);
            p.Encode4(3);             // op code
            p.Encode4(nItemGained);
            p.Encode4(nItemLost);
            return(p);
        }
예제 #26
0
            public static COutPacket EnableShopActions(WvsShopClient c)
            {
                var p = new COutPacket(SendOps.LP_CashShopQueryCashResult);

                p.Encode4(c.Account.AccountData.NX_Credit);                 // nx cash
                p.Encode4(c.Account.AccountData.NX_Maplepoint);             // maple point
                p.Encode4(c.Account.AccountData.NX_Prepaid);                // prepaid nx

                return(p);
            }
예제 #27
0
            public static COutPacket MobSpecialEffectBySkill(int dwMobId, int nSkillID, int casterId, short tDelay)
            {
                var p = new COutPacket(SendOps.LP_MobSpecialEffectBySkill);

                p.Encode4(dwMobId);
                p.Encode4(nSkillID);
                p.Encode4(casterId);
                p.Encode2(tDelay);
                return(p);
            }
예제 #28
0
        public static void Encode(COutPacket p)
        {
            aLimitGoods.Add(new LimitGoods()
            {
                nItemID         = 1040077,
                nState          = -1,
                nOriginCount    = 100,
                nRemainCount    = 100,
                dwConditionFlag = 3,
                nDateStart      = 10,
                nDateEnd        = 25,
                nHourStart      = 0,
                nHourEnd        = 0,
            });

            aLimitGoods[1].nSN[0] = 20400012;

            //for (int i = 0; i < 7; i++)
            //{
            //	aLimitGoods[0].abWeek[i] = 1;
            //}

            var stockItems = new List <KeyValuePair <int, int> >();

            foreach (var item in aLimitGoods)
            {
                foreach (var itemSerialNumber in item.nSN)
                {
                    if (itemSerialNumber != 0)
                    {
                        stockItems.Add(new KeyValuePair <int, int>(itemSerialNumber, -1));
                    }
                }
            }

            //p.Encode2((short)stockItems.Count);

            //foreach (var item in stockItems)
            //{
            //	p.Encode4(item.Key);
            //	p.Encode4(item.Value);
            //}

            p.Encode2(1);
            p.Encode4(20400012);
            p.Encode4(-1);

            p.Encode2((short)aLimitGoods.Count);

            foreach (var item in aLimitGoods)
            {
                item.Encode(p);
            }
        }
예제 #29
0
            }             // DONE

            /// <summary>
            /// Invite packet sent to the invitee
            /// </summary>
            /// <returns></returns>
            public static COutPacket InviteGuild(int dwInviterID, string sInviter, int nLevel, int nJobCode)
            {
                var p = new COutPacket(SendOps.LP_GuildResult);

                p.Encode1((byte)GuildOps.GuildReq_InviteGuild);
                p.Encode4(dwInviterID);
                p.EncodeString(sInviter);
                p.Encode4(nLevel);
                p.Encode4(nJobCode);
                return(p);
            }             // DONE
예제 #30
0
            }             // DONE

            /// <summary>
            /// Sent to all guild members after a member changes level or job
            /// </summary>
            /// <returns></returns>
            public static COutPacket ChangeLevelOrJob(GuildMember g)
            {
                var p = new COutPacket(SendOps.LP_GuildResult);

                EncodeHeader(p, GuildOps.GuildRes_ChangeLevelOrJob);
                p.Encode4(g.Guild.GuildID);
                p.Encode4(g.dwParentID);
                p.Encode4(g.ParentLevel);
                p.Encode4(g.ParentJob);
                return(p);
            }             // DONE