Exemplo n.º 1
0
        private void Handle_UserMeleeAttack(WvsGameClient c, CInPacket p)
        {
            var m_bCurFieldKey = p.Decode1();

            var atkInfo = MapleAttackNew.Parse(p, 0);
            var field   = c.GetCharField();

            //This pocket is not working ;( - rt if u cried
            var v1 = CPacket.CloseRangeAttack(c.Character.CharId, atkInfo);

            field.Broadcast(v1, c);

            for (int i = 0; i < atkInfo.nMobCount; i++)
            {
                var info = atkInfo.aAttackInfo[i];

                var mob = field.Mobs.Get(info.dwMobID);

                int dmg = 0;

                for (int j = 0; j < atkInfo.nDamagePerMob; j++)
                {
                    dmg += info.aDamage[j];
                }

                mob.CurHp -= dmg;

                if (mob.CurHp <= 0)
                {
                    field.RemoveMob(c, mob);
                }
            }
        }
Exemplo n.º 2
0
        public static COutPacket CloseRangeAttack(int cid, MapleAttackNew a)
        {
            var p = new COutPacket(SendOps.LP_UserMeleeAttack);

            p.Encode4(cid);

            p.Encode1(a.tByte1);
            p.Encode1(10); // m_nLevel


            //if (a.nSkillID > 0)
            //{
            //    p.Encode1(0); //level (need to fetch myself )
            //    p.Encode4(a.nSkillID);
            //}
            //else
            {
                p.Encode1(0);
            }

            p.Encode1(0);        //bSerialAttack = CInPacket::Decode1(v4) & 0x20;
            p.Encode2(a.tByte2); //its a short now ???
            //bLeft = ((unsigned int)tByte2 >> 15) & 1;
            //nAction = tByte2 & 0x7FFF;

            p.Encode1(a.nActionSpeed);
            p.Encode1(a.nMastery);
            p.Encode4(a.nBulletItemID);

            for (int i = 0; i < a.nMobCount; i++)
            {
                var info = a.aAttackInfo[i];

                p.Encode4(info.dwMobID);
                p.Encode1(0xFF);  //hitAction?


                for (int j = 0; j < a.nDamagePerMob; j++)
                {
                    p.Encode1(info.abCritical[j] != 0);
                    p.Encode4(info.aDamage[j]);
                }
            }

            //if (nType == 212)
            //{
            //    ptBallStart.x = (signed __int16)CInPacket::Decode2(v4);
            //    ptBallStart.y = (signed __int16)CInPacket::Decode2(v4);
            //}

            if (a.tKeyDown > 0)
            {
                p.Encode4(a.tKeyDown); //is it supposed to be here
            }

            //else if (nSkillID == (char*)33101007)
            //{
            //    dwSwallowMobTemplateID = CInPacket::Decode4(v4);
            //    CUser::RemoveSwallowingEffect((CUser*)&v63->vfptr);
            //}
            return(p);
        }