コード例 #1
0
void CClient::SetStr(int str, bool check) 
{
	_str = str;
	if(check)
	{
		if(m_iHP > GetMaxHP())
		{
			m_iHP = GetMaxHP();
			g_gameCopy->SendNotifyMsg(NULL, m_handle, NOTIFY_HP, NULL, NULL, NULL, NULL);
		}
		if(m_iSP > GetMaxSP())
		{
			m_iSP = GetMaxSP();
			g_gameCopy->SendNotifyMsg(NULL, m_handle, NOTIFY_SP, NULL, NULL, NULL, NULL);
		}
	}
}
コード例 #2
0
void CClient::SetAngelStr(int str)
{
	_angelStr = str;

	if(m_iHP > GetMaxHP())
	{
		m_iHP = GetMaxHP();
		g_gameCopy->SendNotifyMsg(NULL, m_handle, NOTIFY_HP, NULL, NULL, NULL, NULL);
	}
	if(m_iSP > GetMaxSP())
	{
		m_iSP = GetMaxSP();
		g_gameCopy->SendNotifyMsg(NULL, m_handle, NOTIFY_SP, NULL, NULL, NULL, NULL);
	}
/*	Done client-side.
	for (short sItemIndex = 0; sItemIndex < MAXITEMS; sItemIndex++)
		if  ((m_pItemList[sItemIndex] != NULL) && 
			(m_bIsItemEquipped[sItemIndex] == TRUE))
		{
			if(m_pItemList[sItemIndex]->m_wWeight/100 > GetStr())
				g_gameCopy->ReleaseItemHandler(m_handle, sItemIndex, TRUE);
		}*/
}
コード例 #3
0
ファイル: char_affect.cpp プロジェクト: adi97ida/Server
bool CHARACTER::UpdateAffect()
{
	// affect_event 에서 처리할 일은 아니지만, 1초짜리 이벤트에서 처리하는 것이
	// 이것 뿐이라 여기서 물약 처리를 한다.
	if (GetPoint(POINT_HP_RECOVERY) > 0)
	{
		if (GetMaxHP() <= GetHP())
		{
			PointChange(POINT_HP_RECOVERY, -GetPoint(POINT_HP_RECOVERY));
		}
		else
		{
			int iVal = 0;

			if (LC_IsYMIR())
			{
				iVal = MIN(GetPoint(POINT_HP_RECOVERY), GetMaxHP() * 9 / 100);
			}
			else
			{
				iVal = MIN(GetPoint(POINT_HP_RECOVERY), GetMaxHP() * 7 / 100);
			}

			PointChange(POINT_HP, iVal);
			PointChange(POINT_HP_RECOVERY, -iVal);
		}
	}

	if (GetPoint(POINT_SP_RECOVERY) > 0)
	{
		if (GetMaxSP() <= GetSP())
			PointChange(POINT_SP_RECOVERY, -GetPoint(POINT_SP_RECOVERY));
		else 
		{
			int iVal;

			if (!g_iUseLocale)
				iVal = MIN(GetPoint(POINT_SP_RECOVERY), GetMaxSP() * 7 / 100);
			else
				iVal = MIN(GetPoint(POINT_SP_RECOVERY), GetMaxSP() * 7 / 100);

			PointChange(POINT_SP, iVal);
			PointChange(POINT_SP_RECOVERY, -iVal);
		}
	}

	if (GetPoint(POINT_HP_RECOVER_CONTINUE) > 0)
	{
		PointChange(POINT_HP, GetPoint(POINT_HP_RECOVER_CONTINUE));
	}

	if (GetPoint(POINT_SP_RECOVER_CONTINUE) > 0)
	{
		PointChange(POINT_SP, GetPoint(POINT_SP_RECOVER_CONTINUE));
	}

	AutoRecoveryItemProcess( AFFECT_AUTO_HP_RECOVERY );
	AutoRecoveryItemProcess( AFFECT_AUTO_SP_RECOVERY );

	// 스테미나 회복
	if (GetMaxStamina() > GetStamina())
	{
		int iSec = (get_dword_time() - GetStopTime()) / 3000;
		if (iSec)
			PointChange(POINT_STAMINA, GetMaxStamina()/1);    
	}


	// ProcessAffect는 affect가 없으면 true를 리턴한다.
	if (ProcessAffect())
		if (GetPoint(POINT_HP_RECOVERY) == 0 && GetPoint(POINT_SP_RECOVERY) == 0 && GetStamina() == GetMaxStamina())
		{
			m_pkAffectEvent = NULL;
			return false;
		}

	return true;
}