Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- BOOL CMover::AddExperience(EXPINTEGER nExp, BOOL bFirstCall, BOOL bMultiPly, BOOL bMonster)
- {
- #ifdef __EXPMODE
- if (IsSMMode(SM_NOEXP1HR) || IsSMMode(SM_NOEXP30)) { nExp = 0; }
- #endif
- if (nExp < 0){ return FALSE; }
- if (m_nHitPoint <= 0){ return FALSE; }
- if (IsMaster() || IsHero() || IsLegendHero()){ nExp /= 2; }
- #if __VER >= 15 // __GUILD_HOUSE
- if (bFirstCall && bMultiPly)
- {
- #ifdef __WORLDSERVER
- EXPINTEGER nAddExp = static_cast<CUser*>(this)->GetAddExpAfterApplyRestPoint(nExp);
- nExp = (EXPINTEGER)(nExp * GetExpFactor());
- nExp += nAddExp;
- #endif
- }
- #endif
- if (bFirstCall && HasBuffByIk3(IK3_ANGEL_BUFF))
- {
- int nAngel = 100;
- #ifdef __BUFF_1107
- IBuff* pBuff = m_buffs.GetBuffByIk3(IK3_ANGEL_BUFF);
- WORD wId = (pBuff ? pBuff->GetId() : 0);
- #else
- LPSKILLINFLUENCE lpSkillIn = m_SkillState.GetItemBuf(IK3_ANGEL_BUFF);
- WORD wId = (lpSkillIn ? lpSkillIn->wID : 0);
- #endif
- if (wId > 0)
- {
- ItemProp* pItemProp = prj.GetItemProp(wId);
- if (pItemProp){ nAngel = (int)((float)pItemProp->nAdjParamVal1); }
- }
- if (nAngel <= 0 || 100 < nAngel){ nAngel = 100; }
- EXPINTEGER nMaxAngelExp = prj.m_aExpCharacter[m_nAngelLevel].nExp1 / 100 * nAngel;
- if (m_nAngelExp < nMaxAngelExp)
- {
- nExp /= 2;
- m_nAngelExp += nExp;
- #ifdef __WORLDSERVER
- int nAngelExpPercent = (int)(m_nAngelExp * 100 / nMaxAngelExp);
- int nNextAngelExpLog = (int)(((CUser*)this)->m_nAngelExpLog / 20 + 1) * 20;
- if (nAngelExpPercent >= nNextAngelExpLog)
- {
- ((CUser*)this)->m_nAngelExpLog = nAngelExpPercent;
- ItemProp* pItemProp = prj.GetItemProp(wId);
- if (pItemProp)
- {
- LogItemInfo aLogItem;
- aLogItem.Action = "&";
- aLogItem.SendName = ((CUser*)this)->GetName();
- aLogItem.RecvName = "ANGEL_EXP_LOG";
- aLogItem.WorldId = ((CUser*)this)->GetWorld()->GetID();
- aLogItem.Gold = aLogItem.Gold2 = ((CUser*)this)->GetGold();
- _stprintf(aLogItem.szItemName, "%d", pItemProp->dwID);
- aLogItem.Gold_1 = (DWORD)(m_nAngelExp);
- g_DPSrvr.OnLogItem(aLogItem);
- }
- }
- BOOL bAngelComplete = FALSE;
- if (m_nAngelExp > nMaxAngelExp)
- {
- m_nAngelExp = nMaxAngelExp;
- bAngelComplete = TRUE;
- }
- ((CUser*)this)->AddAngelInfo(bAngelComplete);
- #endif
- }
- }
- if (IsBaseJob())
- {
- if (m_nLevel >= MAX_JOB_LEVEL)
- {
- m_nExp1 = 0;
- nExp = 0;
- return false;
- }
- }
- else if (IsExpert())
- {
- if (m_nLevel >= MAX_JOB_LEVEL + MAX_EXP_LEVEL)
- {
- m_nExp1 = 0;
- nExp = 0;
- return false;
- }
- }
- else if (IsPro())
- {
- if (m_nLevel > MAX_GENERAL_LEVEL)
- {
- m_nLevel = MAX_GENERAL_LEVEL;
- return false;
- }
- }
- else if (IsMaster())
- {
- if (m_nLevel > MAX_GENERAL_LEVEL)
- {
- m_nLevel = MAX_GENERAL_LEVEL;
- return true;
- }
- }
- else if (IsHero())
- {
- if (m_nLevel >= MAX_LEGEND_LEVEL)
- {
- m_nLevel = MAX_LEGEND_LEVEL;
- nExp = 0;
- return false;
- }
- }
- else if (IsLegendHero())
- {
- if (m_nLevel > MAX_3RD_LEGEND_LEVEL)
- {
- m_nLevel = MAX_3RD_LEGEND_LEVEL;
- return false;
- }
- }
- int nNextLevel = m_nLevel + 1;
- m_nExp1 += nExp;
- if (bFirstCall)
- {
- //Quget PkValue
- //#if __VER >= 8 // __S8_PK
- #if __VER < 15 // __S8_PK
- #ifdef __WORLDSERVER
- if (bMonster && IsChaotic())
- {
- m_dwPKExp = (DWORD)(m_dwPKExp + nExp);
- DWORD dwPropensity = GetPKPropensity();
- int nLevelPKExp = prj.GetLevelExp(GetLevel());
- if (nLevelPKExp != 0)
- {
- int nSubExp = m_dwPKExp / nLevelPKExp;
- if (nSubExp)
- {
- SetPKPropensity(GetPKPropensity() - (m_dwPKExp / nLevelPKExp));
- if (dwPropensity <= GetPKPropensity())
- SetPKPropensity(0);
- m_dwPKExp %= nLevelPKExp;
- g_UserMng.AddPKPropensity(this);
- g_dpDBClient.SendLogPkPvp(this, NULL, 0, 'P');
- }
- }
- }
- #endif //__WORLDSERVER
- #endif // __VER >= 8 // __S8_PK
- }
- if (m_nExp1 >= prj.m_aExpCharacter[nNextLevel].nExp1)
- {
- if (IsLegendHero() && (nNextLevel > MAX_3RD_LEGEND_LEVEL))
- {
- m_nLevel = MAX_3RD_LEGEND_LEVEL;
- m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
- return FALSE;
- }
- else if (IsHero() && (nNextLevel > MAX_LEGEND_LEVEL))
- {
- m_nLevel = MAX_LEGEND_LEVEL;
- m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
- return FALSE;
- }
- else if (!IsHero() && !IsLegendHero() && nNextLevel > MAX_GENERAL_LEVEL)
- {
- m_nLevel = MAX_GENERAL_LEVEL;
- m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
- return FALSE;
- }
- EXPINTEGER nExptmp;
- m_nRemainGP += prj.m_aExpCharacter[nNextLevel].dwLPPoint;
- if (IsMaster() || IsHero() || IsLegendHero()){ m_nRemainGP++; }
- nExptmp = m_nExp1 - prj.m_aExpCharacter[nNextLevel].nExp1;
- m_nExp1 = 0;
- m_nLevel = nNextLevel;
- bool bLevelUp = true;
- if (IsBaseJob() && m_nLevel > MAX_JOB_LEVEL)
- {
- m_nLevel = MAX_JOB_LEVEL;
- bLevelUp = false;
- }
- else if (IsExpert() && m_nLevel > MAX_JOB_LEVEL + MAX_EXP_LEVEL)
- {
- m_nLevel = MAX_JOB_LEVEL + MAX_EXP_LEVEL;
- bLevelUp = false;
- }
- else if (IsPro() && m_nLevel > MAX_GENERAL_LEVEL)
- {
- m_nLevel = MAX_GENERAL_LEVEL;
- m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
- nExptmp = 0;
- return false;
- }
- else if (IsMaster() && m_nLevel > MAX_GENERAL_LEVEL)
- {
- m_nLevel = MAX_GENERAL_LEVEL;
- m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
- nExptmp = 0;
- return false;
- }
- else if (IsHero() && (m_nLevel > MAX_LEGEND_LEVEL))
- {
- m_nLevel = MAX_LEGEND_LEVEL;
- m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
- nExptmp = 0;
- return false;
- }
- else if (IsLegendHero() && m_nLevel > MAX_3RD_LEGEND_LEVEL)
- {
- m_nLevel = MAX_GENERAL_LEVEL;
- m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
- nExptmp = 0;
- return false;
- }
- if (bLevelUp)
- {
- m_nHitPoint = GetMaxHitPoint();
- m_nManaPoint = GetMaxManaPoint();
- m_nFatiguePoint = GetMaxFatiguePoint();
- SetJobLevel(m_nLevel, m_nJob);
- if (m_nDeathLevel >= m_nLevel)
- {
- m_nRemainGP -= prj.m_aExpCharacter[nNextLevel].dwLPPoint;
- if (IsMaster() || IsHero() || IsLegendHero()){ m_nRemainGP--; }
- }
- #ifdef __WORLDSERVER
- if (m_nLevel > m_nDeathLevel)
- {
- int nGetPoint = ((GetLevel() - 1) / 20) + 2;
- if (IsMaster() || IsHero()){ SetMasterSkillPointUp(); }
- else
- {
- AddSkillPoint(nGetPoint);
- g_dpDBClient.SendLogSkillPoint(LOG_SKILLPOINT_GET_HUNT, nGetPoint, this, NULL);
- #ifdef __S_NEW_SKILL_2
- g_dpDBClient.SaveSkill((CUser*)this);
- #endif
- }
- #ifdef __S_RECOMMEND_EVE
- if (g_eLocal.GetState(EVE_RECOMMEND) && IsPlayer()){ g_dpDBClient.SendRecommend((CUser*)this); }
- #endif
- #ifdef __EXP_ANGELEXP_LOG
- ((CUser*)this)->m_nExpLog = 0;
- #endif
- #ifdef __EVENTLUA_GIFT
- prj.m_EventLua.SetLevelUpGift((CUser*)this, m_nLevel);
- #endif
- #if __VER >= 15 // __CAMPUS
- CCampusHelper::GetInstance()->SetLevelUpReward((CUser*)this);
- #endif
- }
- #endif // __WORLDSERVER
- }
- else
- {
- m_nRemainGP -= prj.m_aExpCharacter[nNextLevel].dwLPPoint;
- if (IsMaster() || IsHero() || IsLegendHero()){ m_nRemainGP--; }
- nExptmp = m_nExp1 = 0;
- }
- if (m_nLevel == 20){ SetFlightLv(1); }
- #ifdef __CLIENT
- if (m_pActMover && (m_pActMover->IsState(OBJSTA_STAND) || m_pActMover->IsState(OBJSTA_STAND2))){ SetMotion(MTI_LEVELUP, ANILOOP_1PLAY, MOP_FIXED); }
- CreateSfx(g_Neuz.m_pd3dDevice, XI_GEN_LEVEL_UP01, GetPos(), GetId());
- //SoundSystemClass::playMusic(BGM_IN_LEVELUP, false); //PlayMusic( BGM_IN_LEVELUP );
- PlayMusic( BGM_IN_LEVELUP );
- #endif
- if (nExptmp > 0){ AddExperience(nExptmp, FALSE, bMultiPly); }
- return true;
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement