Exemplo n.º 1
0
bool CAPet::AddExpSP( LONGLONG exp, int sp, bool bDirect )
{
	if( GetStmLevel() > 1 || GetFaithLevel() > 1 )		// 충성도나 기아 레벨 2 이상이면 경험치 획득 없음
		return false;

	if( m_level >= MAX_APET_LEVEL )
		return false;

	if( DEAD(this) )
		return false;

	LONGLONG add_exp =0;

	if (m_level <= MAX_APET_LEVEL)
		add_exp = exp;
	if (m_level >= MAX_APET_LEVEL && m_exp > GetNeedExp())
		add_exp = GetNeedExp();

	if ( sp > 0 )
		m_nSP += sp;
	if(bDirect == false)
	{
		if( add_exp > 0 && m_pOwner->m_assist.m_avAddition.hcPetExpBoost == true )
		{
			m_pOwner->m_assist.CureByItemIndex(7344);
			add_exp = 4 * add_exp;
		}
		if( m_pOwner->m_assist.m_avAddition.hcCashPetExpUp_2358 == true )
			add_exp = 2 * add_exp;
		else if( m_pOwner->m_assist.m_avAddition.hcCashPetExpUp_2359 == true )
			add_exp = 3 * add_exp;

#ifdef DOUBLE_PET_EXP
		if( gserver->m_bDoublePetExpEvent == true )
			add_exp = add_exp * gserver->m_PetExpPercent / 10000000;
#endif // DOUBLE_PET_EXP
	}

	if(add_exp > exp * (1500000 / 1000))	// 1500%이상 못먹게 함.
	{
		add_exp = exp * (1500000 / 1000);
	}

	m_exp += add_exp;

	if ( m_exp < 0 )
		m_exp = 0;

	if (m_nSP > MAX_SKILLPOINT)
		m_nSP = MAX_SKILLPOINT;

	CalcLevelup();
	return true;
}
Exemplo n.º 2
0
bool Player::GiveExp(Game_Manager* gm_, int value_)
{
	if(GetNeedExp(level+1) == -1)
		return false;



	exp+=value_;
	if(exp >= GetNeedExp(level+1))
	{
		LevelUp(gm_);
	}
	return false;
}
Exemplo n.º 3
0
void CAPet::AddExpSP_Direct( LONGLONG _exp, int _sp )
{
	m_exp += _exp;
	m_nSP += _sp;

	// EXP 최대치 검사
	if (m_level >= MAX_APET_LEVEL && m_exp > GetNeedExp())
		m_exp = GetNeedExp();

	// SP 최대치 검사
	if (m_nSP > MAX_SKILLPOINT)
		m_nSP = MAX_SKILLPOINT;

	// 레벨업 확인
	CalcLevelup();
}
Exemplo n.º 4
0
void CAPet::CalcLevelup()
{
	if ( m_exp < 0 )
		m_exp = 0;

	if (m_nSP > MAX_SKILLPOINT)
		m_nSP = MAX_SKILLPOINT;

	if ( GetNeedExp() <= m_exp && m_level < MAX_APET_LEVEL)
	{
		do
		{
			GAMELOG << init("APET LEVEL UP", GetOwner() )
					<< m_level
					<< " ==> "
					<< m_level + 1
					<< end;
			m_exp -= GetNeedExp();
			m_level++;

			// 레벨업 효과
			LevelUp(true);

			if( m_level >= MAX_APET_LEVEL )
				m_exp = 0;

		}
		while ( GetNeedExp() <= m_exp );
	}

	{
		CNetMsg::SP rmsg(new CNetMsg);
		ExAPetStatusMsg(rmsg, this);
		SEND_Q(rmsg, GetOwner()->m_desc);
	}
}
Exemplo n.º 5
0
float Player::GetExpPercent()
{
	if(GetNeedExp(level+1) == -1)
		return 1.0f;
	return ((float)(exp - GetNeedExp(level)))/(GetNeedExp(level+1)-GetNeedExp(level));
}