Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.43 KB | None | 0 0
  1. #ifdef __SOUL_SYSTEM__
  2.     case ITEM_SOUL:
  3.     {
  4.         BYTE bSoulGrade = item->GetValue(1);
  5.         DWORD dwPlayTimeBonus = 0;
  6.         int iSoulAttacks = item->GetValue(2);
  7.         DWORD dwBonusDuration = item->GetSocket(0);
  8.  
  9.         DWORD dwPlayTime = item->GetSocket(3);
  10.  
  11.         if (bSoulGrade == BASIC_SOUL)
  12.         {
  13.             if (dwPlayTime >= 60)
  14.                 dwPlayTimeBonus = item->GetValue(3);
  15.         }
  16.         else if (bSoulGrade == GLEAMING_SOUL)
  17.         {
  18.             if (dwPlayTime >= 60)
  19.                 dwPlayTimeBonus = item->GetValue(3);
  20.         }
  21.         else if (bSoulGrade == LUSTROUS_SOUL)
  22.         {
  23.             if (dwPlayTime >= 60 && dwPlayTime < 120)
  24.                 dwPlayTimeBonus = item->GetValue(3);
  25.             else if (dwPlayTime >= 120)
  26.                 dwPlayTimeBonus = item->GetValue(4);
  27.         }
  28.         else if (bSoulGrade == PRISMATIC_SOUL)
  29.         {
  30.             if (dwPlayTime >= 60 && dwPlayTime < 120)
  31.                 dwPlayTimeBonus = item->GetValue(3);
  32.             else if (dwPlayTime >= 120 && dwPlayTime < 180)
  33.                 dwPlayTimeBonus = item->GetValue(4);
  34.             else if (dwPlayTime >= 180)
  35.                 dwPlayTimeBonus = item->GetValue(5);
  36.         }
  37.         else if (bSoulGrade == ILUMINED_SOUL)
  38.         {
  39.             if (dwPlayTime >= 60 && dwPlayTime < 120)
  40.                 dwPlayTimeBonus = item->GetValue(3);
  41.             else if (dwPlayTime >= 120 && dwPlayTime < 180)
  42.                 dwPlayTimeBonus = item->GetValue(4);
  43.             else if (dwPlayTime >= 180)
  44.                 dwPlayTimeBonus = item->GetValue(5);
  45.         }
  46.         else
  47.         {
  48.             break;
  49.         }
  50.  
  51.         EAffectTypes type = AFFECT_NONE;
  52.         EAffectBits flag = AFF_NONE;
  53.  
  54.         switch (item->GetSubType())
  55.         {
  56.         case RED_SOUL:
  57.             type = AFFECT_SOUL_RED;
  58.             flag = AFF_SOUL_RED;
  59.             break;
  60.  
  61.         case BLUE_SOUL:
  62.             type = AFFECT_SOUL_BLUE;
  63.             flag = AFF_SOUL_BLUE;
  64.             break;
  65.         }
  66.  
  67.         if (AFFECT_NONE == type)
  68.             break;
  69.  
  70.         CAffect* pAffect = FindAffect(type);
  71.         CAffect* pAffectMixed = FindAffect(AFFECT_SOUL_MIX);
  72.  
  73.         if (pAffect == NULL || pAffectMixed == NULL)
  74.         {
  75.             EPointTypes bonus = POINT_NONE;
  76.  
  77.             if (type == AFFECT_SOUL_RED)
  78.             {
  79.                 bonus = POINT_NORMAL_HIT_DAMAGE_BONUS;
  80.             }
  81.             else if (type == AFFECT_SOUL_BLUE)
  82.             {
  83.                 bonus = POINT_SKILL_DAMAGE_BONUS;
  84.             }
  85.  
  86.             AddAffect(type, bonus, dwPlayTimeBonus, item->GetID(), dwBonusDuration, 0, true, false);
  87.             if (FindAffect(AFFECT_SOUL_RED) && FindAffect(AFFECT_SOUL_BLUE))
  88.                 AddAffect(AFFECT_SOUL_MIX, POINT_NONE, 0, AFF_SOUL_MIX, INFINITE_AFFECT_DURATION, 0, true, false);
  89.             else
  90.                 AddAffect(AFFECT_SOUL_MIX, POINT_NONE, 0, flag, INFINITE_AFFECT_DURATION, 0, true, false);
  91.  
  92.             item->Lock(true);
  93.             item->SetSocket(1, true);
  94.         }
  95.         else
  96.         {
  97.             if (item->GetID() == pAffect->dwFlag && flag == pAffectMixed->dwFlag)
  98.             {
  99.                 RemoveAffect(pAffect);
  100.                 RemoveAffect(pAffectMixed);
  101.  
  102.                 item->Lock(false);
  103.                 item->SetSocket(1, false);
  104.             }
  105.             else
  106.             {
  107.                 LPITEM old = FindItemByID(pAffect->dwFlag);
  108.  
  109.                 if (NULL != old)
  110.                 {
  111.                     old->Lock(false);
  112.                     old->SetSocket(1, false);
  113.                 }
  114.  
  115.                 RemoveAffect(pAffect);
  116.  
  117.                 if (FindAffect(AFFECT_SOUL_RED))
  118.                     AddAffect(AFFECT_SOUL_MIX, POINT_NONE, 0, AFF_SOUL_RED, INFINITE_AFFECT_DURATION, 0, true, false);
  119.                 else if (FindAffect(AFFECT_SOUL_BLUE))
  120.                     AddAffect(AFFECT_SOUL_MIX, POINT_NONE, 0, AFF_SOUL_BLUE, INFINITE_AFFECT_DURATION, 0, true, false);
  121.                 else
  122.                     RemoveAffect(pAffectMixed);
  123.  
  124.                 item->Lock(false);
  125.                 item->SetSocket(1, false);
  126.             }
  127.         }
  128.     }
  129.     break;
  130. #endif
  131.  
  132.         case ITEM_NONE:
  133.             sys_err("Item type NONE %s", item->GetName());
  134.             break;
  135.  
  136.         default:
  137.             sys_log(0, "UseItemEx: Unknown type %s %d", item->GetName(), item->GetType());
  138.             return false;
  139.     }
  140.  
  141.     return true;
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement