void CAISocket::RecvNpcMoveResult(char *pBuf) { // sungyong tw char send_buff[256]; int index = 0, send_index = 0; BYTE flag; // 01(INFO_MODIFY) : NPC 정보 변경 // 02(INFO_DELETE) : NPC 정보 삭제 short nid; // NPC index float fPosX; // X Position float fPosZ; // Z Position float fPosY; // Y Position float fSecForMetor; // Sec당 metor flag = GetByte(pBuf,index); nid = GetShort(pBuf,index); fPosX = Getfloat(pBuf, index); fPosZ = Getfloat(pBuf, index); fPosY = Getfloat(pBuf, index); fSecForMetor = Getfloat(pBuf, index); CNpc* pNpc = m_pMain->m_arNpcArray.GetData( nid ); if(!pNpc) return; if( pNpc->m_NpcState == NPC_DEAD || pNpc->m_iHP <= 0 ) { // Npc 상태 동기화 불량,, 재요청.. SetByte( send_buff, AG_NPC_HP_REQ, send_index); SetShort( send_buff, nid, send_index ); SetDWORD( send_buff, pNpc->m_iHP, send_index ); Send( send_buff, send_index ); } // ~sungyong tw pNpc->MoveResult(fPosX, fPosY, fPosZ, fSecForMetor); }
void CAISocket::RecvNpcMoveResult(Packet & pkt) { uint8 flag; // 01(INFO_MODIFY), 02(INFO_DELETE) uint16 sNid; float fX, fY, fZ, fSecForMetor; pkt >> flag >> sNid >> fX >> fZ >> fY >> fSecForMetor; CNpc * pNpc = g_pMain->GetNpcPtr(sNid); if (pNpc == nullptr) return; if (pNpc->isDead()) { Packet result(AG_NPC_HP_REQ); result << sNid << pNpc->m_iHP; Send(&result); } pNpc->MoveResult(fX, fY, fZ, fSecForMetor); }