Advertisement
Kapa3a

fix HP/MP Overflow

Nov 23rd, 2023 (edited)
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.78 KB | Source Code | 0 0
  1. Intram ÃŽn sursa game ?i deschidem char.cpp , apoi cautam:
  2. void CHARACTER::ComputePoints()
  3.  
  4. ?i inlocuim toata func?ia void cu:
  5. void CHARACTER::ComputePoints()
  6. {
  7.     long lStat = GetPoint(POINT_STAT);
  8.     long lStatResetCount = GetPoint(POINT_STAT_RESET_COUNT);
  9.     long lSkillActive = GetPoint(POINT_SKILL);
  10.     long lSkillSub = GetPoint(POINT_SUB_SKILL);
  11.     long lSkillHorse = GetPoint(POINT_HORSE_SKILL);
  12.     long lLevelStep = GetPoint(POINT_LEVEL_STEP);
  13.  
  14.     long lAttackerBonus = GetPoint(POINT_PARTY_ATTACKER_BONUS);
  15.     long lTankerBonus = GetPoint(POINT_PARTY_TANKER_BONUS);
  16.     long lBufferBonus = GetPoint(POINT_PARTY_BUFFER_BONUS);
  17.     long lSkillMasterBonus = GetPoint(POINT_PARTY_SKILL_MASTER_BONUS);
  18.     long lHasteBonus = GetPoint(POINT_PARTY_HASTE_BONUS);
  19.     long lDefenderBonus = GetPoint(POINT_PARTY_DEFENDER_BONUS);
  20.  
  21.     long lHPRecovery = GetPoint(POINT_HP_RECOVERY);
  22.     long lSPRecovery = GetPoint(POINT_SP_RECOVERY);
  23.  
  24.     memset(m_pointsInstant.points, 0, sizeof(m_pointsInstant.points));
  25.     BuffOnAttr_ClearAll();
  26.     m_SkillDamageBonus.clear();
  27.  
  28.     SetPoint(POINT_STAT, lStat);
  29.     SetPoint(POINT_SKILL, lSkillActive);
  30.     SetPoint(POINT_SUB_SKILL, lSkillSub);
  31.     SetPoint(POINT_HORSE_SKILL, lSkillHorse);
  32.     SetPoint(POINT_LEVEL_STEP, lLevelStep);
  33.     SetPoint(POINT_STAT_RESET_COUNT, lStatResetCount);
  34.  
  35.     SetPoint(POINT_ST, GetRealPoint(POINT_ST));
  36.     SetPoint(POINT_HT, GetRealPoint(POINT_HT));
  37.     SetPoint(POINT_DX, GetRealPoint(POINT_DX));
  38.     SetPoint(POINT_IQ, GetRealPoint(POINT_IQ));
  39.  
  40.     SetPart(PART_MAIN, GetOriginalPart(PART_MAIN));
  41.     SetPart(PART_WEAPON, GetOriginalPart(PART_WEAPON));
  42.     SetPart(PART_HEAD, GetOriginalPart(PART_HEAD));
  43.     SetPart(PART_HAIR, GetOriginalPart(PART_HAIR));
  44.  
  45.     SetPoint(POINT_PARTY_ATTACKER_BONUS, lAttackerBonus);
  46.     SetPoint(POINT_PARTY_TANKER_BONUS, lTankerBonus);
  47.     SetPoint(POINT_PARTY_BUFFER_BONUS, lBufferBonus);
  48.     SetPoint(POINT_PARTY_SKILL_MASTER_BONUS, lSkillMasterBonus);
  49.     SetPoint(POINT_PARTY_HASTE_BONUS, lHasteBonus);
  50.     SetPoint(POINT_PARTY_DEFENDER_BONUS, lDefenderBonus);
  51.  
  52.     SetPoint(POINT_HP_RECOVERY, lHPRecovery);
  53.     SetPoint(POINT_SP_RECOVERY, lSPRecovery);
  54.  
  55.     SetPoint(POINT_PC_BANG_EXP_BONUS, 0);
  56.     SetPoint(POINT_PC_BANG_DROP_BONUS, 0);
  57.  
  58.     int iMaxHP, iMaxSP;
  59.     int iMaxStamina;
  60.  
  61.     if(IsPC())
  62.     {
  63.         iMaxHP = JobInitialPoints[GetJob()].max_hp + m_points.iRandomHP + GetPoint(POINT_HT) * JobInitialPoints[GetJob()].hp_per_ht;
  64.         iMaxSP = JobInitialPoints[GetJob()].max_sp + m_points.iRandomSP + GetPoint(POINT_IQ) * JobInitialPoints[GetJob()].sp_per_iq;
  65.         iMaxStamina = JobInitialPoints[GetJob()].max_stamina + GetPoint(POINT_HT) * JobInitialPoints[GetJob()].stamina_per_con;
  66.  
  67.         {
  68.             CSkillProto* pkSk = CSkillManager::instance().Get(SKILL_ADD_HP);
  69.  
  70.             if(NULL != pkSk)
  71.             {
  72.                 pkSk->SetPointVar("k", 1.0f * GetSkillPower(SKILL_ADD_HP) / 100.0f);
  73.  
  74.                 iMaxHP += static_cast<int>(pkSk->kPointPoly.Eval());
  75.             }
  76.         }
  77.  
  78.         // default value
  79.         SetPoint(POINT_MOV_SPEED, 100);
  80.         SetPoint(POINT_ATT_SPEED, 100);
  81.         PointChange(POINT_ATT_SPEED, GetPoint(POINT_PARTY_HASTE_BONUS));
  82.         SetPoint(POINT_CASTING_SPEED, 100);
  83.     }
  84.     else
  85.     {
  86.         iMaxHP = m_pkMobData->m_table.dwMaxHP;
  87.         iMaxSP = 0;
  88.         iMaxStamina = 0;
  89.  
  90.         SetPoint(POINT_ATT_SPEED, m_pkMobData->m_table.sAttackSpeed);
  91.         SetPoint(POINT_MOV_SPEED, m_pkMobData->m_table.sMovingSpeed);
  92.         SetPoint(POINT_CASTING_SPEED, m_pkMobData->m_table.sAttackSpeed);
  93.     }
  94.  
  95.     if(IsPC())
  96.     {
  97.         if(GetMountVnum())
  98.         {
  99.             if(GetHorseST() > GetPoint(POINT_ST))
  100.                 PointChange(POINT_ST, GetHorseST() - GetPoint(POINT_ST));
  101.  
  102.             if(GetHorseDX() > GetPoint(POINT_DX))
  103.                 PointChange(POINT_DX, GetHorseDX() - GetPoint(POINT_DX));
  104.  
  105.             if(GetHorseHT() > GetPoint(POINT_HT))
  106.                 PointChange(POINT_HT, GetHorseHT() - GetPoint(POINT_HT));
  107.  
  108.             if(GetHorseIQ() > GetPoint(POINT_IQ))
  109.                 PointChange(POINT_IQ, GetHorseIQ() - GetPoint(POINT_IQ));
  110.         }
  111.  
  112.     }
  113.  
  114.     ComputeBattlePoints();
  115.  
  116.     if(iMaxHP != GetMaxHP())
  117.     {
  118.         SetRealPoint(POINT_MAX_HP, iMaxHP);
  119.     }
  120.  
  121.     PointChange(POINT_MAX_HP, 0);
  122.  
  123.     if(iMaxSP != GetMaxSP())
  124.     {
  125.         SetRealPoint(POINT_MAX_SP, iMaxSP);
  126.     }
  127.  
  128.     PointChange(POINT_MAX_SP, 0);
  129.  
  130.     SetMaxStamina(iMaxStamina);
  131.  
  132.     m_pointsInstant.dwImmuneFlag = 0;
  133.  
  134.     for(int i = 0; i < WEAR_MAX_NUM; i++)
  135.     {
  136.         LPITEM pItem = GetWear(i);
  137.         if(pItem)
  138.         {
  139.             pItem->ModifyPoints(true);
  140.             SET_BIT(m_pointsInstant.dwImmuneFlag, GetWear(i)->GetImmuneFlag());
  141.         }
  142.     }
  143.  
  144.     if(DragonSoul_IsDeckActivated())
  145.     {
  146.         for(int i = WEAR_MAX_NUM + DS_SLOT_MAX * DragonSoul_GetActiveDeck();
  147.             i < WEAR_MAX_NUM + DS_SLOT_MAX * (DragonSoul_GetActiveDeck() + 1); i++)
  148.         {
  149.             LPITEM pItem = GetWear(i);
  150.             if(pItem)
  151.             {
  152.                 if(DSManager::instance().IsTimeLeftDragonSoul(pItem))
  153.                     pItem->ModifyPoints(true);
  154.             }
  155.         }
  156.     }
  157.  
  158.     UpdatePacket();
  159.  
  160.     ComputeSkillPoints();
  161.  
  162.     RefreshAffect();
  163.  
  164.     CPetSystem* pPetSystem = GetPetSystem();
  165.     if(NULL != pPetSystem)
  166.     {
  167.         pPetSystem->RefreshBuff();
  168.     }
  169.  
  170.     for(TMapBuffOnAttrs::iterator it = m_map_buff_on_attrs.begin(); it != m_map_buff_on_attrs.end(); it++)
  171.     {
  172.         it->second->GiveAllAttributes();
  173.     }
  174.    
  175.     if(GetHP() > GetMaxHP())
  176.         PointChange(POINT_HP, GetMaxHP() - GetHP());
  177.    
  178.     if(GetSP() > GetMaxSP())
  179.         PointChange(POINT_SP, GetMaxSP() - GetSP());
  180.  
  181.     UpdatePacket();
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement