Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const int ITEM_SET_EQUIP_MAX = 8;
- const int ITEM_SET_EQUIP_ATTR_MAX_NUM = 5;
- typedef struct SItemAttrSet
- {
- WORD wWearPos;
- DWORD dwItemIndex;
- std::vector<BYTE> vecApplyType;
- std::vector<long> vecSocket;
- SItemAttrSet()
- {
- wWearPos = WORD_MAX;
- dwItemIndex = 0;
- vecApplyType.clear();
- vecApplyType.resize(ITEM_SET_EQUIP_ATTR_MAX_NUM);
- vecSocket.clear();
- vecSocket.resize(ITEM_SOCKET_MAX_NUM);
- }
- SItemAttrSet(WORD _wWearPos, DWORD _dwItemIndex, BYTE byApply0, BYTE byApply1, BYTE byApply2, BYTE byApply3, BYTE byApply4)
- {
- wWearPos = _wWearPos;
- dwItemIndex = _dwItemIndex;
- vecApplyType.push_back(byApply0);
- vecApplyType.push_back(byApply1);
- vecApplyType.push_back(byApply2);
- vecApplyType.push_back(byApply3);
- vecApplyType.push_back(byApply4);
- vecSocket.clear();
- vecSocket.resize(ITEM_SOCKET_MAX_NUM);
- }
- SItemAttrSet(WORD _wWearPos, DWORD _dwItemIndex, BYTE byApply0, BYTE byApply1, BYTE byApply2, BYTE byApply3, BYTE byApply4, long lSocket0, long lSocket1, long lSocket2)
- {
- wWearPos = _wWearPos;
- dwItemIndex = _dwItemIndex;
- vecApplyType.push_back(byApply0);
- vecApplyType.push_back(byApply1);
- vecApplyType.push_back(byApply2);
- vecApplyType.push_back(byApply3);
- vecApplyType.push_back(byApply4);
- vecSocket.push_back(lSocket0);
- vecSocket.push_back(lSocket1);
- vecSocket.push_back(lSocket2);
- }
- ~SItemAttrSet()
- {
- vecApplyType.clear();
- vecSocket.clear();
- }
- } TItemAttrSet;
- TItemAttrSet itemSet[JOB_MAX_NUM][ITEM_SET_EQUIP_MAX] = {
- { // WARRIOR
- TItemAttrSet(WEAR_BODY, 11299, APPLY_MAX_HP, APPLY_REFLECT_MELEE, APPLY_RESIST_WIND, APPLY_CAST_SPEED, APPLY_ATT_GRADE_BONUS, 28438, 28439, 28443),
- TItemAttrSet(WEAR_HEAD, 12269, APPLY_RESIST_WIND, APPLY_POISON_PCT, APPLY_BLEEDING_PCT, APPLY_ATTBONUS_UNDEAD, APPLY_ATTBONUS_DEVIL),
- TItemAttrSet(WEAR_FOOTS, 15419, APPLY_MAX_HP, APPLY_CRITICAL_PCT, APPLY_STUN_PCT, APPLY_DODGE, APPLY_ATT_SPEED),
- TItemAttrSet(WEAR_WRIST, 14209, APPLY_MAX_HP, APPLY_ATTBONUS_UNDEAD, APPLY_ATTBONUS_DEVIL, APPLY_RESIST_WIND, APPLY_STEAL_HP, 3, 3, 6 * 3600),
- TItemAttrSet(WEAR_WEAPON, 189, APPLY_NORMAL_HIT_DAMAGE_BONUS, APPLY_SKILL_DAMAGE_BONUS, APPLY_STR, APPLY_ATTBONUS_UNDEAD, APPLY_ATTBONUS_DEVIL, 28437, 28430, 28431),
- TItemAttrSet(WEAR_NECK, 16209, APPLY_MAX_HP, APPLY_CRITICAL_PCT, APPLY_STUN_PCT, APPLY_HP_REGEN, APPLY_STEAL_SP, 3, 3, 6 * 3600),
- TItemAttrSet(WEAR_EAR, 17109, APPLY_ATTBONUS_UNDEAD, APPLY_ATTBONUS_DEVIL, APPLY_POISON_REDUCE, APPLY_MOV_SPEED, APPLY_MANA_BURN_PCT, 3, 3, 6 * 3600),
- TItemAttrSet(WEAR_SHIELD, 13069, APPLY_IMMUNE_STUN, APPLY_STR, APPLY_ATTBONUS_UNDEAD, APPLY_ATTBONUS_DEVIL, APPLY_BLOCK),
- #endif
- },
- { // ASSASSIN
- TItemAttrSet(WEAR_BODY, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_HEAD, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_FOOTS, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_WRIST, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_WEAPON, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_NECK, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_EAR, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_SHIELD, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- },
- { // SURA
- TItemAttrSet(WEAR_BODY, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_HEAD, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_FOOTS, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_WRIST, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_WEAPON, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_NECK, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_EAR, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_SHIELD, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- },
- { // SHAMAN
- TItemAttrSet(WEAR_BODY, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_HEAD, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_FOOTS, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_WRIST, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_WEAPON, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_NECK, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_EAR, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_SHIELD, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- },
- #ifdef ENABLE_WOLFMAN_CHARACTER
- { // WOLFMAN
- TItemAttrSet(WEAR_BODY, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_HEAD, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_FOOTS, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_WRIST, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_WEAPON, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_NECK, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_EAR, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- TItemAttrSet(WEAR_SHIELD, 0, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE, APPLY_NONE),
- },
- #endif
- };
- ACMD(do_item_full_set)
- {
- BYTE job = ch->GetJob();
- LPITEM item;
- TPlayerItemAttribute tmpAttr[ITEM_ATTRIBUTE_MAX_NUM];
- long tmpSock[ITEM_SOCKET_MAX_NUM];
- for (int i = 0; i < ITEM_SET_EQUIP_MAX; ++i)
- {
- TItemAttrSet set = itemSet[job][i];
- item = ch->GetWear(set.wWearPos);
- if (item != NULL)
- ch->UnequipItem(item);
- item = ITEM_MANAGER::instance().CreateItem(set.dwItemIndex);
- if (!item)
- {
- M2_DESTROY_ITEM(item);
- break;
- }
- int passcnt = 0;
- memset(tmpAttr, 0, sizeof(tmpAttr));
- for (int j = 0; j < ITEM_SET_EQUIP_ATTR_MAX_NUM; ++j)
- {
- if (set.vecApplyType[j] == APPLY_NONE)
- {
- passcnt++;
- continue;
- }
- const TItemAttrTable & r = g_map_itemAttr[set.vecApplyType[j]];
- short sValue = 0;
- TItemTable const * pProto = item->GetProto();
- if (pProto && pProto->sAddonType && (set.vecApplyType[j] == APPLY_SKILL_DAMAGE_BONUS || set.vecApplyType[j] == APPLY_NORMAL_HIT_DAMAGE_BONUS))
- {
- if (set.vecApplyType[j] == APPLY_SKILL_DAMAGE_BONUS)
- sValue = -20;
- if (set.vecApplyType[j] == APPLY_NORMAL_HIT_DAMAGE_BONUS)
- sValue = 61;
- }
- else
- {
- int iLevel = r.bMaxLevelBySet[item->GetAttributeSetIndex()];
- if (!iLevel)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "Item %s[%u] has no possibility to insert this apply %u", item->GetName(), item->GetVnum(), set.vecApplyType[j]);
- continue;
- }
- sValue = r.lValues[MIN(4, iLevel - 1)];
- }
- tmpAttr[j].bType = set.vecApplyType[j];
- tmpAttr[j].sValue = sValue;
- }
- if (passcnt != ITEM_SET_EQUIP_ATTR_MAX_NUM)
- item->SetAttributes(tmpAttr);
- passcnt = 0;
- memset(tmpSock, 0, sizeof(tmpSock));
- for (int k = 0; k < ITEM_SOCKET_MAX_NUM; ++k)
- {
- if (set.vecSocket[k] == 0)
- {
- passcnt++;
- continue;
- }
- tmpSock[k] = set.vecSocket[k];
- }
- if (passcnt != ITEM_SOCKET_MAX_NUM)
- item->SetSockets(tmpSock);
- if (!item->EquipTo(ch, item->FindEquipCell(ch)))
- M2_DESTROY_ITEM(item);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement