示例#1
0
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;      
}
示例#2
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;
}
示例#3
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*/);
}
示例#4
0
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	*/
}