pkt.writeD(npcObjId);
pkt.writeC(showSpawnAnimation); // // 0=teleported 1=default 2=summoned
pkt.writeH(37); // mask_bits_37
pkt.writeB(_masks);
// Block 1
pkt.writeC(_initSize);
if(containsMask(NpcInfoType.ATTACKABLE))
{
pkt.writeC(isAttackable ? 1 : 0);
}
if(containsMask(NpcInfoType.UNKNOWN1))
{
pkt.writeD(0x00); // unknown
}
if(containsMask(NpcInfoType.TITLE))
{
pkt.writeS(title);
}
// Block 2
pkt.writeH(_blockSize);
if(containsMask(NpcInfoType.ID))
{
pkt.writeD(npcId + 1000000);
}
if(containsMask(NpcInfoType.POSITION))
{
pkt.writeD(loc.x);
pkt.writeD(loc.y);
pkt.writeD(loc.z);
}
if(containsMask(NpcInfoType.HEADING))
{
pkt.writeD(loc.h);
}
if(containsMask(NpcInfoType.UNKNOWN2))
{
pkt.writeD(0x00); // Unknown
}
if(containsMask(NpcInfoType.ATK_CAST_SPEED))
{
pkt.writeD(pAtkSpd);
pkt.writeD(mAtkSpd);
}
if(containsMask(NpcInfoType.SPEED_MULTIPLIER))
{
pkt.writeCutF(_runSpdMul);
pkt.writeCutF(_atkSpdMul);
}
if(containsMask(NpcInfoType.EQUIPPED))
{
pkt.writeD(rhand);
pkt.writeD(0x00); // Slot Chest
pkt.writeD(lhand);
}
if(containsMask(NpcInfoType.ALIVE))
{
pkt.writeC(dead);
}
if(containsMask(NpcInfoType.RUNNING))
{
pkt.writeC(running);
}
if(containsMask(NpcInfoType.SWIM_OR_FLY))
{
pkt.writeC(isInsideWater ? 0x01 : isFlying ? 0x02 : 0x00);
}
if (containsMask(NpcInfoType.TEAM))
{
pkt.writeC(team.ordinal());
}
if (containsMask(NpcInfoType.ENCHANT))
{
pkt.writeD(enchantEffect);
}
if (containsMask(NpcInfoType.FLYING))
{
pkt.writeD(isFlying ? 0x01 : 00);
}
if(containsMask(NpcInfoType.CLONE))
{
pkt.writeD(0x00); // Player ObjectId with Decoy
}
if(containsMask(NpcInfoType.UNKNOWN8))
{
// No visual effect
pkt.writeD(0x00); // Unknown
}
if(containsMask(NpcInfoType.DISPLAY_EFFECT))
{
pkt.writeD(state);
}
if(containsMask(NpcInfoType.TRANSFORMATION))
{
pkt.writeD(_transformId);
}
if(containsMask(NpcInfoType.CURRENT_HP))
{
pkt.writeD(_HP);
}
if(containsMask(NpcInfoType.CURRENT_MP))
{
pkt.writeD(_MP);
}
if(containsMask(NpcInfoType.MAX_HP))
{
pkt.writeD(_maxHP);
}
if(containsMask(NpcInfoType.MAX_MP))
{
pkt.writeD(_maxMP);
}
if(containsMask(NpcInfoType.UNKNOWN11))
{
pkt.writeC(0x00); // тип клона 1 == приманка, 2 = клон у ножа
}
if(containsMask(NpcInfoType.COMPANION))
{
pkt.writeD(0x00); // CompanionObjectId
pkt.writeD(0x00); // CompanionDistance
}
if(containsMask(NpcInfoType.NAME))
{
pkt.writeS(name);
}
if(containsMask(NpcInfoType.NAME_NPCSTRINGID))
{
pkt.writeD(nameNpcString.getId()); // NPCStringId for name
}
if(containsMask(NpcInfoType.TITLE_NPCSTRINGID))
{
pkt.writeD(titleNpcString.getId()); // NPCStringId for title
}
if(containsMask(NpcInfoType.PVP_FLAG))
{
pkt.writeC(pvp_flag); // PVP flag
}
if(containsMask(NpcInfoType.NAME_COLOR))
{
pkt.writeD(0x00); // Reputation
}
if(containsMask(NpcInfoType.CLAN))
{
pkt.writeD(clan_id);
pkt.writeD(clan_crest_id);
pkt.writeD(0); // Large Clan Crest Id
pkt.writeD(ally_id);
pkt.writeD(ally_crest_id);
}
if(containsMask(NpcInfoType.VISUAL_STATE))
{
pkt.writeC(_statusMask);
}
if(containsMask(NpcInfoType.ABNORMALS))
{
pkt.writeH(_abnormalEffects.length);
for(AbnormalEffect abnormal : _abnormalEffects)
{
pkt.writeH(abnormal.getId());
}
}