void CUser::Initialize() { m_pMain = (CServerDlg*)AfxGetApp()->GetMainWnd(); m_pIocport = (CIOCPort*)&m_pMain->m_Iocport; m_MagicProcess.m_pMain = m_pMain; m_MagicProcess.m_pSrcUser = this; memset(m_strUserID, 0, MAX_ID_SIZE+1); // 캐릭터의 이름 m_iUserId = -1; // User의 번호 m_bLive = USER_DEAD; // 죽었니? 살았니? m_curx = 0.0f; // 현재 X 좌표 m_cury = 0.0f; // 현재 Y 좌표 m_curz = 0.0f; // 현재 Z 좌표 m_fWill_x = 0.0f; m_fWill_y = 0.0f; m_fWill_z = 0.0f; m_curZone = -1; // 현재 존 m_pMap = NULL; m_bNation = 0; // 소속국가 m_bLevel = 0; // 레벨 m_sHP = 0; // HP m_sMP = 0; // MP m_sSP = 0; // SP m_sMaxHP = 0; // MaxHP m_sMaxMP = 0; // MaxMP m_sMaxSP = 0; // MaxSP m_state = 0; // User의 상태 m_sRegionX = 0; // 현재 영역 X 좌표 m_sRegionZ = 0; // 현재 영역 Z 좌표 m_sOldRegionX = 0; m_sOldRegionZ = 0; m_bResHp = 0; // 회복량 m_bResMp = 0; m_bResSta = 0; m_sHitDamage = 0; // Hit m_sAC = 0; m_sItemAC = 0; m_fHitrate = 0.0f; // 타격 성공률 m_fAvoidrate = 0; // 회피 성공률 m_bLogOut = FALSE; // Logout 중인가? m_byNowParty = 0; m_sPartyTotalLevel = 0; m_byPartyTotalMan = 0; m_sPartyNumber = -1; m_byIsOP = 0; m_lUsed = 0; InitNpcAttack(); m_bMagicTypeLeftHand = 0; m_bMagicTypeRightHand = 0; m_sMagicAmountLeftHand = 0; m_sMagicAmountRightHand = 0; }
void CUser::Initialize() { m_MagicProcess.m_pSrcUser = this; memset(m_strUserID, 0, MAX_ID_SIZE+1); // 캐릭터의 이름 m_iUserId = -1; // User의 번호 m_bLive = USER_DEAD; // 죽었니? 살았니? m_curx = 0.0f; // 현재 X 좌표 m_cury = 0.0f; // 현재 Y 좌표 m_curz = 0.0f; // 현재 Z 좌표 m_curZone = -1; // 현재 존 m_pMap = nullptr; m_bNation = 0; // 소속국가 m_bLevel = 0; // 레벨 m_sHP = 0; // HP m_sMP = 0; // MP m_sMaxHP = 0; // MaxHP m_sMaxMP = 0; // MaxMP m_state = 0; // User의 상태 m_sRegionX = 0; // 현재 영역 X 좌표 m_sRegionZ = 0; // 현재 영역 Z 좌표 m_sOldRegionX = 0; m_sOldRegionZ = 0; m_bResHp = 0; // 회복량 m_bResMp = 0; m_bResSta = 0; m_sHitDamage = 0; // Hit m_sAC = 0; m_sItemAC = 0; m_fHitrate = 0.0f; // 타격 성공률 m_fAvoidrate = 0; // 회피 성공률 m_bLogOut = false; // Logout 중인가? m_byNowParty = 0; m_sPartyTotalLevel = 0; m_byPartyTotalMan = 0; m_sPartyNumber = -1; m_byIsOP = 0; m_bInvisibilityType = 0; m_lUsed = 0; InitNpcAttack(); m_bMagicTypeLeftHand = 0; m_bMagicTypeRightHand = 0; m_sMagicAmountLeftHand = 0; m_sMagicAmountRightHand = 0; }
void CUser::Dead(int tid, int nDamage) { if (m_bLive == USER_DEAD) return; m_sHP = 0; m_bLive = USER_DEAD; InitNpcAttack(); MAP* pMap = GetMap(); if (pMap == nullptr || m_sRegionX < 0 || m_sRegionZ < 0 || m_sRegionX > pMap->GetXRegionMax() || m_sRegionZ > pMap->GetZRegionMax()) return; pMap->RegionUserRemove(m_sRegionX, m_sRegionZ, m_iUserId); TRACE("*** User Dead = %d, %s ***\n", m_iUserId, m_strUserID); if (tid > 0) SendAttackSuccess(m_iUserId+USER_BAND, ATTACK_TARGET_DEAD, nDamage, m_sHP, 1, 2, tid /*sid*/); }
void CUser::Dead(int tid, int nDamage) { if(m_bLive == USER_DEAD) return; // 이 부분에서 update를 해야 함,, 게임서버에서,, 처리하도록,,, m_sHP = 0; m_bLive = USER_DEAD; InitNpcAttack(); // region에서 삭제... MAP* pMap = GetMap(); if(pMap == NULL) { TRACE("#### CUser-Dead() Fail : [nid=%d, name=%s], pMap == NULL #####\n", m_iUserId, m_strUserID); return; } // map에 region에서 나의 정보 삭제.. if(m_sRegionX < 0 || m_sRegionZ < 0 || m_sRegionX > pMap->GetXRegionMax() || m_sRegionZ > pMap->GetZRegionMax()) { TRACE("#### CUser-Dead() Fail : [nid=%d, name=%s], x1=%d, z1=%d #####\n", m_iUserId, m_strUserID, m_sRegionX, m_sRegionZ); return; } //pMap->m_ppRegion[m_sRegionX][m_sRegionZ].DeleteUser(m_iUserId); pMap->RegionUserRemove(m_sRegionX, m_sRegionZ, m_iUserId); //TRACE("*** User Dead()-> User(%s, %d)를 Region에 삭제,, region_x=%d, y=%d\n", m_strUserID, m_iUserId, m_sRegionX, m_sRegionZ); m_sRegionX = -1; m_sRegionZ = -1; int send_index = 0; int sid = -1, targid = -1; BYTE type, result; char buff[256]; memset( buff, 0x00, 256 ); wsprintf(buff, "*** User Dead = %d, %s ***", m_iUserId, m_strUserID); TimeTrace(buff); //TRACE("*** User Dead = %d, %s ********\n", m_iUserId, m_strUserID); memset( buff, 0x00, 256 ); float rx=0.0f, ry=0.0f, rz=0.0f; type = 0x02; result = ATTACK_TARGET_DEAD; sid = tid; targid = m_iUserId+USER_BAND; SetByte( buff, AG_ATTACK_RESULT, send_index ); SetByte( buff, type, send_index ); SetByte( buff, result, send_index ); SetShort( buff, sid, send_index ); SetShort( buff, targid, send_index ); SetShort( buff, nDamage, send_index ); SetDWORD( buff, m_sHP, send_index ); //SetShort( buff, m_sMaxHP, send_index ); //TRACE("Npc - SendAttackSuccess()-User Dead : [sid=%d, tid=%d, result=%d], damage=%d, hp = %d\n", sid, targid, result, nDamage, m_sHP); if(tid > 0) SendAll(buff, send_index); // thread 에서 send /* SetByte(buff, AG_DEAD, send_index ); SetShort(buff, m_iUserId, send_index ); Setfloat(buff, m_curx, send_index); Setfloat(buff, m_curz, send_index); SendAll(buff, send_index); // thread 에서 send */ }