Advertisement
Guest User

weird

a guest
Apr 29th, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. BOOL CMover::AddExperience(EXPINTEGER nExp, BOOL bFirstCall, BOOL bMultiPly, BOOL bMonster)
  2. {
  3. #ifdef __EXPMODE
  4.     if (IsSMMode(SM_NOEXP1HR) || IsSMMode(SM_NOEXP30))  { nExp = 0; }
  5. #endif
  6.     if (nExp < 0){ return FALSE; }
  7.     if (m_nHitPoint <= 0){ return FALSE; }
  8.  
  9.     if (IsMaster() || IsHero() || IsLegendHero()){ nExp /= 2; }
  10.  
  11. #if __VER >= 15 // __GUILD_HOUSE
  12.     if (bFirstCall && bMultiPly)
  13.     {
  14. #ifdef __WORLDSERVER
  15.         EXPINTEGER nAddExp = static_cast<CUser*>(this)->GetAddExpAfterApplyRestPoint(nExp);
  16.         nExp = (EXPINTEGER)(nExp * GetExpFactor());
  17.         nExp += nAddExp;
  18. #endif
  19.     }
  20. #endif
  21.  
  22.     if (bFirstCall && HasBuffByIk3(IK3_ANGEL_BUFF))
  23.     {
  24.         int nAngel = 100;
  25. #ifdef __BUFF_1107
  26.         IBuff* pBuff = m_buffs.GetBuffByIk3(IK3_ANGEL_BUFF);
  27.         WORD wId = (pBuff ? pBuff->GetId() : 0);
  28. #else
  29.         LPSKILLINFLUENCE lpSkillIn = m_SkillState.GetItemBuf(IK3_ANGEL_BUFF);
  30.         WORD wId = (lpSkillIn ? lpSkillIn->wID : 0);
  31. #endif
  32.         if (wId > 0)
  33.         {
  34.             ItemProp* pItemProp = prj.GetItemProp(wId);
  35.             if (pItemProp){ nAngel = (int)((float)pItemProp->nAdjParamVal1); }
  36.         }
  37.         if (nAngel <= 0 || 100 < nAngel){ nAngel = 100; }
  38.  
  39.         EXPINTEGER nMaxAngelExp = prj.m_aExpCharacter[m_nAngelLevel].nExp1 / 100 * nAngel;
  40.         if (m_nAngelExp < nMaxAngelExp)
  41.         {
  42.             nExp /= 2;
  43.             m_nAngelExp += nExp;
  44. #ifdef __WORLDSERVER
  45.             int nAngelExpPercent = (int)(m_nAngelExp * 100 / nMaxAngelExp);
  46.             int nNextAngelExpLog = (int)(((CUser*)this)->m_nAngelExpLog / 20 + 1) * 20;
  47.  
  48.             if (nAngelExpPercent >= nNextAngelExpLog)
  49.             {
  50.                 ((CUser*)this)->m_nAngelExpLog = nAngelExpPercent;
  51.                 ItemProp* pItemProp = prj.GetItemProp(wId);
  52.  
  53.                 if (pItemProp)
  54.                 {
  55.                     LogItemInfo aLogItem;
  56.                     aLogItem.Action = "&";
  57.                     aLogItem.SendName = ((CUser*)this)->GetName();
  58.                     aLogItem.RecvName = "ANGEL_EXP_LOG";
  59.                     aLogItem.WorldId = ((CUser*)this)->GetWorld()->GetID();
  60.                     aLogItem.Gold = aLogItem.Gold2 = ((CUser*)this)->GetGold();
  61.                     _stprintf(aLogItem.szItemName, "%d", pItemProp->dwID);
  62.                     aLogItem.Gold_1 = (DWORD)(m_nAngelExp);
  63.                     g_DPSrvr.OnLogItem(aLogItem);
  64.                 }
  65.             }
  66.             BOOL bAngelComplete = FALSE;
  67.             if (m_nAngelExp > nMaxAngelExp)
  68.             {
  69.                 m_nAngelExp = nMaxAngelExp;
  70.                 bAngelComplete = TRUE;
  71.             }
  72.             ((CUser*)this)->AddAngelInfo(bAngelComplete);
  73. #endif
  74.         }
  75.     }
  76.  
  77.     if (IsBaseJob())
  78.     {
  79.         if (m_nLevel >= MAX_JOB_LEVEL)
  80.         {
  81.             m_nExp1 = 0;
  82.             nExp = 0;
  83.             return false;
  84.         }
  85.     }
  86.     else if (IsExpert())
  87.     {
  88.         if (m_nLevel >= MAX_JOB_LEVEL + MAX_EXP_LEVEL)
  89.         {
  90.             m_nExp1 = 0;
  91.             nExp = 0;
  92.             return false;
  93.         }
  94.     }
  95.     else if (IsPro())
  96.     {
  97.         if (m_nLevel > MAX_GENERAL_LEVEL)
  98.         {
  99.             m_nLevel = MAX_GENERAL_LEVEL;
  100.             return false;
  101.         }
  102.     }
  103.     else if (IsMaster())
  104.     {
  105.         if (m_nLevel > MAX_GENERAL_LEVEL)
  106.         {
  107.             m_nLevel = MAX_GENERAL_LEVEL;
  108.             return false;
  109.         }
  110.     }
  111.     else if (IsHero())
  112.     {
  113.         if (m_nLevel >= MAX_LEGEND_LEVEL)
  114.         {
  115.             m_nLevel = MAX_LEGEND_LEVEL;
  116.             nExp = 0;
  117.             return false;
  118.         }
  119.     }
  120.     else if (IsLegendHero())
  121.     {
  122.         if (m_nLevel > MAX_3RD_LEGEND_LEVEL)
  123.         {
  124.             m_nLevel = MAX_3RD_LEGEND_LEVEL;
  125.             return false;
  126.         }
  127.     }
  128.  
  129.     int nNextLevel = m_nLevel + 1;
  130.     m_nExp1 += nExp;
  131.  
  132.     if (bFirstCall)
  133.     {
  134.         //Quget PkValue
  135.         //#if __VER >= 8 // __S8_PK
  136. #if __VER < 15 // __S8_PK
  137. #ifdef __WORLDSERVER
  138.         if (bMonster && IsChaotic())
  139.         {
  140.             m_dwPKExp = (DWORD)(m_dwPKExp + nExp);
  141.             DWORD dwPropensity = GetPKPropensity();
  142.             int nLevelPKExp = prj.GetLevelExp(GetLevel());
  143.             if (nLevelPKExp != 0)
  144.             {
  145.                 int nSubExp = m_dwPKExp / nLevelPKExp;
  146.                 if (nSubExp)
  147.                 {
  148.                     SetPKPropensity(GetPKPropensity() - (m_dwPKExp / nLevelPKExp));
  149.                     if (dwPropensity <= GetPKPropensity())
  150.                         SetPKPropensity(0);
  151.                     m_dwPKExp %= nLevelPKExp;
  152.  
  153.                     g_UserMng.AddPKPropensity(this);
  154.                     g_dpDBClient.SendLogPkPvp(this, NULL, 0, 'P');
  155.                 }
  156.             }
  157.         }
  158. #endif //__WORLDSERVER
  159. #endif // __VER >= 8 // __S8_PK
  160.     }
  161.  
  162.     if (m_nExp1 >= prj.m_aExpCharacter[nNextLevel].nExp1)
  163.     {
  164.         if (IsLegendHero() && (nNextLevel > MAX_3RD_LEGEND_LEVEL))
  165.         {
  166.             m_nLevel = MAX_3RD_LEGEND_LEVEL;
  167.             m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
  168.             return false;
  169.         }
  170.         else if (IsHero() && (nNextLevel > MAX_LEGEND_LEVEL))
  171.         {
  172.             m_nLevel = MAX_LEGEND_LEVEL;
  173.             m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
  174.             return false;
  175.         }
  176.         else if (!IsHero() && !IsLegendHero() && nNextLevel > MAX_GENERAL_LEVEL)
  177.         {
  178.             m_nLevel = MAX_GENERAL_LEVEL;
  179.             m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
  180.             return false;
  181.         }
  182.  
  183.         EXPINTEGER nExptmp;
  184.         m_nRemainGP += prj.m_aExpCharacter[nNextLevel].dwLPPoint;
  185.         if (IsMaster() || IsHero() || IsLegendHero()){ m_nRemainGP++; }
  186.         nExptmp = m_nExp1 - prj.m_aExpCharacter[nNextLevel].nExp1;
  187.         m_nExp1 = 0;
  188.         m_nLevel = nNextLevel;
  189.         bool bLevelUp = true;
  190.         if (IsBaseJob() && m_nLevel > MAX_JOB_LEVEL)
  191.         {
  192.             m_nLevel = MAX_JOB_LEVEL;
  193.             bLevelUp = false;
  194.         }
  195.         else if (IsExpert() && m_nLevel > MAX_JOB_LEVEL + MAX_EXP_LEVEL)
  196.         {
  197.             m_nLevel = MAX_JOB_LEVEL + MAX_EXP_LEVEL;
  198.             bLevelUp = false;
  199.         }
  200.         else if (IsPro() && m_nLevel > MAX_GENERAL_LEVEL)
  201.         {
  202.             m_nLevel = MAX_GENERAL_LEVEL;
  203.  
  204.             m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
  205.             nExptmp = 0;
  206.             return false;
  207.         }
  208.         else if (IsMaster() && m_nLevel > MAX_GENERAL_LEVEL)
  209.         {
  210.             m_nLevel = MAX_GENERAL_LEVEL;
  211.             m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
  212.             nExptmp = 0;
  213.             return false;
  214.         }
  215.         else if (IsHero() && (m_nLevel > MAX_LEGEND_LEVEL))
  216.         {
  217.             m_nLevel = MAX_LEGEND_LEVEL;
  218.             m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
  219.             nExptmp = 0;
  220.             return false;
  221.         }
  222.         else if (IsLegendHero() && m_nLevel > MAX_3RD_LEGEND_LEVEL)
  223.         {
  224.             m_nLevel = MAX_GENERAL_LEVEL;
  225.             m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
  226.             nExptmp = 0;
  227.             return false;
  228.         }
  229.  
  230.         if (bLevelUp)
  231.         {
  232.             m_nHitPoint = GetMaxHitPoint();
  233.             m_nManaPoint = GetMaxManaPoint();
  234.             m_nFatiguePoint = GetMaxFatiguePoint();
  235.             SetJobLevel(m_nLevel, m_nJob);
  236.  
  237.             if (m_nDeathLevel >= m_nLevel)
  238.             {
  239.                 m_nRemainGP -= prj.m_aExpCharacter[nNextLevel].dwLPPoint;
  240.                 if (IsMaster() || IsHero() || IsLegendHero()){ m_nRemainGP--; }
  241.             }
  242.  
  243. #ifdef __WORLDSERVER
  244.             if (m_nLevel > m_nDeathLevel)
  245.             {
  246.                 int nGetPoint = ((GetLevel() - 1) / 20) + 2;
  247.                 if (IsMaster() || IsHero()){ SetMasterSkillPointUp(); }
  248.                 else
  249.                 {
  250.                     AddSkillPoint(nGetPoint);
  251.                     g_dpDBClient.SendLogSkillPoint(LOG_SKILLPOINT_GET_HUNT, nGetPoint, this, NULL);
  252. #ifdef __S_NEW_SKILL_2
  253.                     g_dpDBClient.SaveSkill((CUser*)this);
  254. #endif
  255.                 }
  256. #ifdef __S_RECOMMEND_EVE
  257.                 if (g_eLocal.GetState(EVE_RECOMMEND) && IsPlayer()){ g_dpDBClient.SendRecommend((CUser*)this); }
  258. #endif
  259. #ifdef __EXP_ANGELEXP_LOG
  260.                 ((CUser*)this)->m_nExpLog = 0;
  261. #endif
  262. #ifdef __EVENTLUA_GIFT
  263.                 prj.m_EventLua.SetLevelUpGift((CUser*)this, m_nLevel);
  264. #endif
  265. #if __VER >= 15 // __CAMPUS
  266.                 CCampusHelper::GetInstance()->SetLevelUpReward((CUser*)this);
  267. #endif
  268.             }
  269. #endif // __WORLDSERVER
  270.         }
  271.         else
  272.         {
  273.             m_nRemainGP -= prj.m_aExpCharacter[nNextLevel].dwLPPoint;
  274.             if (IsMaster() || IsHero() || IsLegendHero()){ m_nRemainGP--; }
  275.             nExptmp = m_nExp1 = 0;
  276.         }
  277.  
  278.         if (m_nLevel == 20){ SetFlightLv(1); }
  279. #ifdef __CLIENT
  280.         if (m_pActMover && (m_pActMover->IsState(OBJSTA_STAND) || m_pActMover->IsState(OBJSTA_STAND2))){ SetMotion(MTI_LEVELUP, ANILOOP_1PLAY, MOP_FIXED); }
  281.         CreateSfx(g_Neuz.m_pd3dDevice, XI_GEN_LEVEL_UP01, GetPos(), GetId());
  282.         PlayMusic( BGM_IN_LEVELUP );
  283. #endif
  284.         if (nExptmp > 0){ AddExperience(nExptmp, FALSE, bMultiPly); }
  285.         return true;
  286.     }
  287.     return false;
  288. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement