本文整理汇总了C++中CNpc::NpcInOut方法的典型用法代码示例。如果您正苦于以下问题:C++ CNpc::NpcInOut方法的具体用法?C++ CNpc::NpcInOut怎么用?C++ CNpc::NpcInOut使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CNpc
的用法示例。
在下文中一共展示了CNpc::NpcInOut方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: RecvNpcInOut
void CAISocket::RecvNpcInOut(Packet & pkt)
{
uint8 bType;
uint16 sNid;
float fX, fZ, fY;
pkt >> bType >> sNid >> fX >> fZ >> fY;
CNpc * pNpc = g_pMain->m_arNpcArray.GetData(sNid);
if (pNpc)
pNpc->NpcInOut(bType, fX, fZ, fY);
}
示例2: RecvNpcInOut
void CAISocket::RecvNpcInOut(char* pBuf)
{
int index = 0, nid = 0, nType = 0;
float fx = 0.0f, fz=0.0f, fy=0.0f;
nType = GetByte( pBuf, index );
nid = GetShort(pBuf, index);
fx = Getfloat( pBuf, index );
fz = Getfloat( pBuf, index );
fy = Getfloat( pBuf, index );
if(nid >= NPC_BAND) {
CNpc* pNpc = m_pMain->m_arNpcArray.GetData(nid);
if(!pNpc) return;
pNpc->NpcInOut( nType, fx, fz, fy );
}
}
示例3: RecvNpcInfo
void CAISocket::RecvNpcInfo(Packet & pkt)
{
std::string strName;
uint8 Mode, byDirection;
uint16 sNid;
pkt.SByte();
pkt >> Mode >> sNid;
CNpc *pNpc = g_pMain->m_arNpcArray.GetData(sNid);
if (pNpc == NULL)
return;
pkt >> pNpc->m_sSid >> pNpc->m_sPid >> pNpc->m_sSize >> pNpc->m_iWeapon_1 >> pNpc->m_iWeapon_2
>> pNpc->m_bCurZone >> strName >> pNpc->m_byGroup >> pNpc->m_byLevel
>> pNpc->m_fCurX >> pNpc->m_fCurZ >> pNpc->m_fCurY >> byDirection >> pNpc->m_NpcState
>> pNpc->m_tNpcType >> pNpc->m_iSellingGroup >> pNpc->m_iMaxHP >> pNpc->m_iHP >> pNpc->m_byGateOpen
>> pNpc->m_sHitRate >> pNpc->m_byObjectType;
if (strName.empty() || strName.length() > MAX_NPC_SIZE)
{
delete pNpc;
return;
}
pNpc->m_byDirection = byDirection;
strcpy(pNpc->m_strName, strName.c_str());
// Bug? Test?
// pNpc->m_NpcState = NPC_DEAD;
if (pNpc->m_NpcState == NPC_LIVE)
{
char strLog[256];
CTime t = CTime::GetCurrentTime();
sprintf_s(strLog, sizeof(strLog), "## time(%d:%d-%d) npc regen check(%d) : nid=%d, name=%s, x=%d, z=%d, rx=%d, rz=%d ## \r\n", t.GetHour(), t.GetMinute(), t.GetSecond(),
pNpc->m_NpcState, pNpc->m_sNid, pNpc->m_strName, (int)pNpc->m_fCurX, (int)pNpc->m_fCurZ, pNpc->m_sRegion_X, pNpc->m_sRegion_Z);
EnterCriticalSection( &g_LogFile_critical );
g_pMain->m_RegionLogFile.Write( strLog, strlen(strLog) );
LeaveCriticalSection( &g_LogFile_critical );
TRACE(strLog);
// to-do: replace with g_pMain->WriteRegionLog(...);
}
if (pNpc->GetMap() == NULL)
return;
pNpc->m_sRegion_X = (int)pNpc->m_fCurX / VIEW_DISTANCE;
pNpc->m_sRegion_Z = (int)pNpc->m_fCurZ / VIEW_DISTANCE;
if (pNpc->m_byObjectType == SPECIAL_OBJECT)
{
_OBJECT_EVENT *pEvent = pNpc->GetMap()->GetObjectEvent( pNpc->m_sSid );
if (pEvent != NULL)
pEvent->byLife = 1;
}
if (Mode == 0)
{
TRACE("RecvNpcInfo - dead monster nid=%d, name=%s\n", pNpc->m_sNid, pNpc->m_strName);
return;
}
pNpc->NpcInOut(NPC_IN, pNpc->m_fCurX, pNpc->m_fCurZ, pNpc->m_fCurY);
}
示例4: RecvNpcInfoAll
void CAISocket::RecvNpcInfoAll(Packet & pkt)
{
uint8 bCount = pkt.read<uint8>(); // max of 20
pkt.SByte();
for (int i = 0; i < bCount; i++)
{
uint8 bType, bDirection;
std::string strName;
CNpc* pNpc = new CNpc();
pNpc->Initialize();
pkt >> bType >> pNpc->m_sNid >> pNpc->m_sSid >> pNpc->m_sPid >> pNpc->m_sSize >> pNpc->m_iWeapon_1 >> pNpc->m_iWeapon_2
>> pNpc->m_bCurZone >> strName >> pNpc->m_byGroup >> pNpc->m_byLevel >> pNpc->m_fCurX >> pNpc->m_fCurZ >> pNpc->m_fCurY
>> bDirection >> pNpc->m_tNpcType >> pNpc->m_iSellingGroup >> pNpc->m_iMaxHP >> pNpc->m_iHP
>> pNpc->m_byGateOpen >> pNpc->m_sHitRate >> pNpc->m_byObjectType;
if (strName.empty() || strName.length() > MAX_NPC_SIZE)
{
delete pNpc;
continue;
}
//TRACE("Recv --> NpcUserInfo : uid = %d, x=%f, z=%f.. \n", nid, fPosX, fPosZ);
strcpy(pNpc->m_strName, strName.c_str());
pNpc->m_pMap = g_pMain->GetZoneByID(pNpc->getZoneID());
pNpc->m_NpcState = NPC_LIVE;
pNpc->m_byDirection = bDirection;
pNpc->m_sRegion_X = (int)pNpc->m_fCurX / VIEW_DISTANCE;
pNpc->m_sRegion_Z = (int)pNpc->m_fCurZ / VIEW_DISTANCE;
if (pNpc->GetMap() == NULL)
{
delete pNpc;
pNpc = NULL;
continue;
}
if (pNpc->m_byObjectType == SPECIAL_OBJECT)
{
_OBJECT_EVENT* pEvent = pNpc->GetMap()->GetObjectEvent(pNpc->m_sSid);
if (pEvent != NULL)
pEvent->byLife = 1;
}
// TRACE("Recv --> NpcUserInfoAll : uid=%d, sid=%d, name=%s, x=%f, z=%f. gate=%d, objecttype=%d \n", nid, sPid, szName, fPosX, fPosZ, byGateOpen, byObjectType);
if (!g_pMain->m_arNpcArray.PutData(pNpc->m_sNid, pNpc))
{
TRACE("Npc PutData Fail - %d\n", pNpc->m_sNid);
delete pNpc;
continue;
}
if (bType == 0)
{
TRACE("Recv --> NpcUserInfoAll : nid=%d, sid=%d, name=%s\n", pNpc->m_sNid, pNpc->m_sSid, strName.c_str());
continue;
}
pNpc->GetMap()->RegionNpcAdd(pNpc->m_sRegion_X, pNpc->m_sRegion_Z, pNpc->m_sNid);
pNpc->NpcInOut(NPC_IN, pNpc->m_fCurX, pNpc->m_fCurZ,pNpc->m_fCurY);
}
}
示例5: RecvNpcInfo
//.........这里部分代码省略.........
BYTE tNpcKind; // 00 : Monster
// 01 : NPC
int iSellingGroup;
int nMaxHP; // 최대 HP
int nHP; // 현재 HP
BYTE byGateOpen;
short sHitRate; // 공격 성공률
BYTE byObjectType; // 보통 : 0, 특수 : 1
Mode = GetByte(pBuf, index);
nid = GetShort(pBuf, index);
sid = GetShort(pBuf, index);
sPid = GetShort(pBuf, index);
sSize = GetShort(pBuf, index);
iWeapon_1 = GetDWORD(pBuf, index);
iWeapon_2 = GetDWORD(pBuf, index);
bZone = GetByte(pBuf, index);
int nLength = GetVarString(szName, pBuf, sizeof(BYTE), index);
if(nLength < 0 || nLength > MAX_NPC_SIZE) return; // 잘못된 monster 아이디
byGroup = GetByte(pBuf, index);
byLevel = GetByte(pBuf, index);
fPosX = Getfloat(pBuf, index);
fPosZ = Getfloat(pBuf, index);
fPosY = Getfloat(pBuf, index);
byDirection = GetByte(pBuf, index);
tState = GetByte(pBuf, index);
tNpcKind = GetByte(pBuf, index);
iSellingGroup = GetDWORD(pBuf, index);
nMaxHP = GetDWORD(pBuf, index);
nHP = GetDWORD(pBuf, index);
byGateOpen = GetByte(pBuf, index);
sHitRate = GetShort(pBuf, index);
byObjectType = GetByte(pBuf, index);
CNpc* pNpc = NULL;
pNpc = m_pMain->m_arNpcArray.GetData(nid);
if(!pNpc) return;
pNpc->m_NpcState = NPC_DEAD;
if( pNpc->m_NpcState == NPC_LIVE ) { // 살아 있는데 또 정보를 받는 경우
char strLog[256];
CTime t = CTime::GetCurrentTime();
sprintf_s(strLog, sizeof(strLog), "## time(%d:%d-%d) npc regen check(%d) : nid=%d, name=%s, x=%d, z=%d, rx=%d, rz=%d ## \r\n", t.GetHour(), t.GetMinute(), t.GetSecond(), pNpc->m_NpcState, nid, szName, (int)pNpc->m_fCurX, (int)pNpc->m_fCurZ, pNpc->m_sRegion_X, pNpc->m_sRegion_Z);
EnterCriticalSection( &g_LogFile_critical );
m_pMain->m_RegionLogFile.Write( strLog, strlen(strLog) );
LeaveCriticalSection( &g_LogFile_critical );
TRACE(strLog);
// to-do: replace with m_pMain->WriteRegionLog(...);
}
pNpc->m_NpcState = NPC_LIVE;
pNpc->m_sNid = nid;
pNpc->m_sSid = sid;
pNpc->m_sPid = sPid;
pNpc->m_sSize = sSize;
pNpc->m_iWeapon_1 = iWeapon_1;
pNpc->m_iWeapon_2 = iWeapon_2;
strcpy(pNpc->m_strName, szName);
pNpc->m_byGroup = byGroup;
pNpc->m_byLevel = byLevel;
pNpc->m_bCurZone = bZone;
pNpc->m_pMap = m_pMain->GetZoneByID(bZone);
pNpc->m_fCurX = fPosX;
pNpc->m_fCurZ = fPosZ;
pNpc->m_fCurY = fPosY;
pNpc->m_byDirection = byDirection;
pNpc->m_NpcState = tState;
pNpc->m_tNpcType = tNpcKind;
pNpc->m_iSellingGroup = iSellingGroup;
pNpc->m_iMaxHP = nMaxHP;
pNpc->m_iHP = nHP;
pNpc->m_byGateOpen = byGateOpen;
pNpc->m_sHitRate = sHitRate;
pNpc->m_byObjectType = byObjectType;
if (pNpc->GetMap() == NULL)
return;
int nRegX = (int)fPosX / VIEW_DISTANCE;
int nRegZ = (int)fPosZ / VIEW_DISTANCE;
pNpc->m_sRegion_X = nRegX;
pNpc->m_sRegion_Z = nRegZ;
_OBJECT_EVENT* pEvent = NULL;
if( pNpc->m_byObjectType == SPECIAL_OBJECT ) {
pEvent = pNpc->GetMap()->GetObjectEvent( pNpc->m_sSid );
if( pEvent ) pEvent->byLife = 1;
}
if(Mode == 0) {
TRACE("RecvNpcInfo - dead monster nid=%d, name=%s\n", pNpc->m_sNid, pNpc->m_strName);
return;
}
pNpc->NpcInOut(NPC_IN, fPosX, fPosZ, fPosY);
}