Advertisement
P3NG3R

[M2] item_full_set renewal

Oct 5th, 2018
645
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.59 KB | None | 0 0
  1. const int ITEM_SET_EQUIP_MAX = 8;
  2. const int ITEM_SET_EQUIP_ATTR_MAX_NUM = 5;
  3. typedef struct SItemAttrSet
  4. {
  5.     WORD wWearPos;
  6.     DWORD dwItemIndex;
  7.     std::vector<BYTE> vecApplyType;
  8.     std::vector<long> vecSocket;
  9.     SItemAttrSet()
  10.     {
  11.         wWearPos = WORD_MAX;
  12.         dwItemIndex = 0;
  13.         vecApplyType.clear();
  14.         vecApplyType.resize(ITEM_SET_EQUIP_ATTR_MAX_NUM);
  15.         vecSocket.clear();
  16.         vecSocket.resize(ITEM_SOCKET_MAX_NUM);
  17.     }
  18.     SItemAttrSet(WORD _wWearPos, DWORD _dwItemIndex, BYTE byApply0, BYTE byApply1, BYTE byApply2, BYTE byApply3, BYTE byApply4)
  19.     {
  20.         wWearPos = _wWearPos;
  21.         dwItemIndex = _dwItemIndex;
  22.         vecApplyType.push_back(byApply0);
  23.         vecApplyType.push_back(byApply1);
  24.         vecApplyType.push_back(byApply2);
  25.         vecApplyType.push_back(byApply3);
  26.         vecApplyType.push_back(byApply4);
  27.         vecSocket.clear();
  28.         vecSocket.resize(ITEM_SOCKET_MAX_NUM);
  29.     }
  30.     SItemAttrSet(WORD _wWearPos, DWORD _dwItemIndex, BYTE byApply0, BYTE byApply1, BYTE byApply2, BYTE byApply3, BYTE byApply4, long lSocket0, long lSocket1, long lSocket2)
  31.     {
  32.         wWearPos = _wWearPos;
  33.         dwItemIndex = _dwItemIndex;
  34.         vecApplyType.push_back(byApply0);
  35.         vecApplyType.push_back(byApply1);
  36.         vecApplyType.push_back(byApply2);
  37.         vecApplyType.push_back(byApply3);
  38.         vecApplyType.push_back(byApply4);
  39.         vecSocket.push_back(lSocket0);
  40.         vecSocket.push_back(lSocket1);
  41.         vecSocket.push_back(lSocket2);
  42.     }
  43.     ~SItemAttrSet()
  44.     {
  45.         vecApplyType.clear();
  46.         vecSocket.clear();
  47.     }
  48. } TItemAttrSet;
  49.  
  50. TItemAttrSet itemSet[JOB_MAX_NUM][ITEM_SET_EQUIP_MAX] = {
  51.     { // WARRIOR
  52.         TItemAttrSet(WEAR_BODY,     11299, APPLY_MAX_HP, APPLY_REFLECT_MELEE, APPLY_RESIST_WIND, APPLY_CAST_SPEED, APPLY_ATT_GRADE_BONUS, 28438, 28439, 28443),
  53.         TItemAttrSet(WEAR_HEAD,     12269, APPLY_RESIST_WIND, APPLY_POISON_PCT, APPLY_BLEEDING_PCT, APPLY_ATTBONUS_UNDEAD, APPLY_ATTBONUS_DEVIL),
  54.         TItemAttrSet(WEAR_FOOTS,    15419, APPLY_MAX_HP, APPLY_CRITICAL_PCT, APPLY_STUN_PCT, APPLY_DODGE, APPLY_ATT_SPEED),
  55.         TItemAttrSet(WEAR_WRIST,    14209, APPLY_MAX_HP, APPLY_ATTBONUS_UNDEAD, APPLY_ATTBONUS_DEVIL, APPLY_RESIST_WIND, APPLY_STEAL_HP, 3, 3, 6 * 3600),
  56.         TItemAttrSet(WEAR_WEAPON,     189, APPLY_NORMAL_HIT_DAMAGE_BONUS, APPLY_SKILL_DAMAGE_BONUS, APPLY_STR, APPLY_ATTBONUS_UNDEAD, APPLY_ATTBONUS_DEVIL, 28437, 28430, 28431),
  57.         TItemAttrSet(WEAR_NECK,     16209, APPLY_MAX_HP, APPLY_CRITICAL_PCT, APPLY_STUN_PCT, APPLY_HP_REGEN, APPLY_STEAL_SP, 3, 3, 6 * 3600),
  58.         TItemAttrSet(WEAR_EAR,      17109, APPLY_ATTBONUS_UNDEAD, APPLY_ATTBONUS_DEVIL, APPLY_POISON_REDUCE, APPLY_MOV_SPEED, APPLY_MANA_BURN_PCT, 3, 3, 6 * 3600),
  59.         TItemAttrSet(WEAR_SHIELD,   13069, APPLY_IMMUNE_STUN, APPLY_STR, APPLY_ATTBONUS_UNDEAD, APPLY_ATTBONUS_DEVIL, APPLY_BLOCK),
  60. #endif
  61.     },
  62.     { // ASSASSIN
  63.         TItemAttrSet(WEAR_BODY, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  64.         TItemAttrSet(WEAR_HEAD, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  65.         TItemAttrSet(WEAR_FOOTS, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  66.         TItemAttrSet(WEAR_WRIST, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  67.         TItemAttrSet(WEAR_WEAPON, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  68.         TItemAttrSet(WEAR_NECK, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  69.         TItemAttrSet(WEAR_EAR, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  70.         TItemAttrSet(WEAR_SHIELD, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  71.     },
  72.     { // SURA
  73.         TItemAttrSet(WEAR_BODY, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  74.         TItemAttrSet(WEAR_HEAD, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  75.         TItemAttrSet(WEAR_FOOTS, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  76.         TItemAttrSet(WEAR_WRIST, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  77.         TItemAttrSet(WEAR_WEAPON, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  78.         TItemAttrSet(WEAR_NECK, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  79.         TItemAttrSet(WEAR_EAR, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  80.         TItemAttrSet(WEAR_SHIELD, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  81.     },
  82.     { // SHAMAN
  83.         TItemAttrSet(WEAR_BODY, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  84.         TItemAttrSet(WEAR_HEAD, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  85.         TItemAttrSet(WEAR_FOOTS, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  86.         TItemAttrSet(WEAR_WRIST, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  87.         TItemAttrSet(WEAR_WEAPON, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  88.         TItemAttrSet(WEAR_NECK, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  89.         TItemAttrSet(WEAR_EAR, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  90.         TItemAttrSet(WEAR_SHIELD, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  91.     },
  92. #ifdef ENABLE_WOLFMAN_CHARACTER
  93.     { // WOLFMAN
  94.         TItemAttrSet(WEAR_BODY, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  95.         TItemAttrSet(WEAR_HEAD, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  96.         TItemAttrSet(WEAR_FOOTS, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  97.         TItemAttrSet(WEAR_WRIST, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  98.         TItemAttrSet(WEAR_WEAPON, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  99.         TItemAttrSet(WEAR_NECK, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  100.         TItemAttrSet(WEAR_EAR, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  101.         TItemAttrSet(WEAR_SHIELD, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
  102.     },
  103. #endif
  104. };
  105.  
  106. ACMD(do_item_full_set)
  107. {
  108.     BYTE job = ch->GetJob();
  109.     LPITEM item;
  110.     TPlayerItemAttribute tmpAttr[ITEM_ATTRIBUTE_MAX_NUM];
  111.     long tmpSock[ITEM_SOCKET_MAX_NUM];
  112.     for (int i = 0; i < ITEM_SET_EQUIP_MAX; ++i)
  113.     {
  114.         TItemAttrSet set = itemSet[job][i];
  115.         item = ch->GetWear(set.wWearPos);
  116.         if (item != NULL)
  117.             ch->UnequipItem(item);
  118.  
  119.         item = ITEM_MANAGER::instance().CreateItem(set.dwItemIndex);
  120.         if (!item)
  121.         {
  122.             M2_DESTROY_ITEM(item);
  123.             break;
  124.         }
  125.  
  126.         int passcnt = 0;
  127.         memset(tmpAttr, 0, sizeof(tmpAttr));
  128.         for (int j = 0; j < ITEM_SET_EQUIP_ATTR_MAX_NUM; ++j)
  129.         {
  130.             if (set.vecApplyType[j] == APPLY_NONE)
  131.             {
  132.                 passcnt++;
  133.                 continue;
  134.             }
  135.  
  136.             const TItemAttrTable & r = g_map_itemAttr[set.vecApplyType[j]];
  137.             short sValue = 0;
  138.             TItemTable const * pProto = item->GetProto();
  139.             if (pProto && pProto->sAddonType && (set.vecApplyType[j] == APPLY_SKILL_DAMAGE_BONUS || set.vecApplyType[j] == APPLY_NORMAL_HIT_DAMAGE_BONUS))
  140.             {
  141.                 if (set.vecApplyType[j] == APPLY_SKILL_DAMAGE_BONUS)
  142.                     sValue = -20;
  143.                 if (set.vecApplyType[j] == APPLY_NORMAL_HIT_DAMAGE_BONUS)
  144.                     sValue = 61;
  145.             }
  146.             else
  147.             {
  148.                 int iLevel = r.bMaxLevelBySet[item->GetAttributeSetIndex()];
  149.                 if (!iLevel)
  150.                 {
  151.                     ch->ChatPacket(CHAT_TYPE_INFO, "Item %s[%u] has no possibility to insert this apply %u", item->GetName(), item->GetVnum(), set.vecApplyType[j]);
  152.                     continue;
  153.                 }
  154.  
  155.                 sValue = r.lValues[MIN(4, iLevel - 1)];
  156.             }
  157.             tmpAttr[j].bType = set.vecApplyType[j];
  158.             tmpAttr[j].sValue = sValue;
  159.         }
  160.         if (passcnt != ITEM_SET_EQUIP_ATTR_MAX_NUM)
  161.             item->SetAttributes(tmpAttr);
  162.  
  163.         passcnt = 0;
  164.         memset(tmpSock, 0, sizeof(tmpSock));
  165.         for (int k = 0; k < ITEM_SOCKET_MAX_NUM; ++k)
  166.         {
  167.             if (set.vecSocket[k] == 0)
  168.             {
  169.                 passcnt++;
  170.                 continue;
  171.             }
  172.             tmpSock[k] = set.vecSocket[k];
  173.         }
  174.         if (passcnt != ITEM_SOCKET_MAX_NUM)
  175.             item->SetSockets(tmpSock);
  176.  
  177.         if (!item->EquipTo(ch, item->FindEquipCell(ch)))
  178.             M2_DESTROY_ITEM(item);
  179.     }
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement