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); } } }
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); }