Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void CItem::ModifyPoints(bool bAdd)
- {
- int accessoryGrade;
- if (false == IsAccessoryForSocket())
- {
- if (m_pProto->bType == ITEM_WEAPON || m_pProto->bType == ITEM_ARMOR)
- {
- for (int i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
- {
- DWORD dwVnum;
- if ((dwVnum = GetSocket(i)) <= 2)
- continue;
- TItemTable * p = ITEM_MANAGER::instance().GetTable(dwVnum);
- if (!p)
- {
- sys_err("cannot find table by vnum %u", dwVnum);
- continue;
- }
- if (ITEM_METIN == p->bType)
- {
- for (int i = 0; i < ITEM_APPLY_MAX_NUM; ++i)
- {
- if (p->aApplies[i].bType == APPLY_NONE)
- continue;
- if (p->aApplies[i].bType == APPLY_SKILL)
- m_pOwner->ApplyPoint(p->aApplies[i].bType, bAdd ? p->aApplies[i].lValue : p->aApplies[i].lValue ^ 0x00800000);
- else
- m_pOwner->ApplyPoint(p->aApplies[i].bType, bAdd ? p->aApplies[i].lValue : -p->aApplies[i].lValue);
- }
- }
- }
- }
- accessoryGrade = 0;
- }
- else
- {
- accessoryGrade = MIN(GetAccessorySocketGrade(), ITEM_ACCESSORY_SOCKET_MAX_NUM);
- }
- #ifdef __SASH_SYSTEM__
- if ((GetType() == ITEM_COSTUME) && (GetSubType() == COSTUME_SASH) && (GetSocket(SASH_ABSORBED_SOCKET)))
- {
- TItemTable * pkItemAbsorbed = ITEM_MANAGER::instance().GetTable(GetSocket(SASH_ABSORBED_SOCKET));
- if (pkItemAbsorbed)
- {
- if ((pkItemAbsorbed->bType == ITEM_ARMOR) && (pkItemAbsorbed->bSubType == ARMOR_BODY))
- {
- long lDefGrade = pkItemAbsorbed->alValues[1] + long(pkItemAbsorbed->alValues[5] * 2);
- double dValue = lDefGrade * GetSocket(SASH_ABSORPTION_SOCKET);
- dValue = (double)dValue / 100;
- dValue = (double)dValue + .5;
- lDefGrade = (long) dValue;
- if ((pkItemAbsorbed->alValues[1] > 0) && (lDefGrade <= 0) || (pkItemAbsorbed->alValues[5] > 0) && (lDefGrade < 1))
- lDefGrade += 1;
- else if ((pkItemAbsorbed->alValues[1] > 0) || (pkItemAbsorbed->alValues[5] > 0))
- lDefGrade += 1;
- m_pOwner->ApplyPoint(APPLY_DEF_GRADE_BONUS, bAdd ? lDefGrade : -lDefGrade);
- long lDefMagicBonus = pkItemAbsorbed->alValues[0];
- dValue = lDefMagicBonus * GetSocket(SASH_ABSORPTION_SOCKET);
- dValue = (double)dValue / 100;
- dValue = (double)dValue + .5;
- lDefMagicBonus = (long) dValue;
- if ((pkItemAbsorbed->alValues[0] > 0) && (lDefMagicBonus < 1))
- lDefMagicBonus += 1;
- else if (pkItemAbsorbed->alValues[0] > 0)
- lDefMagicBonus += 1;
- m_pOwner->ApplyPoint(APPLY_MAGIC_DEF_GRADE, bAdd ? lDefMagicBonus : -lDefMagicBonus);
- }
- else if (pkItemAbsorbed->bType == ITEM_WEAPON)
- {
- long lAttGrade = pkItemAbsorbed->alValues[4] + pkItemAbsorbed->alValues[5];
- if (pkItemAbsorbed->alValues[3] > pkItemAbsorbed->alValues[4])
- lAttGrade = pkItemAbsorbed->alValues[3] + pkItemAbsorbed->alValues[5];
- double dValue = lAttGrade * GetSocket(SASH_ABSORPTION_SOCKET);
- dValue = (double)dValue / 100;
- dValue = (double)dValue + .5;
- lAttGrade = (long) dValue;
- if (((pkItemAbsorbed->alValues[3] > 0) && (lAttGrade < 1)) || ((pkItemAbsorbed->alValues[4] > 0) && (lAttGrade < 1)))
- lAttGrade += 1;
- else if ((pkItemAbsorbed->alValues[3] > 0) || (pkItemAbsorbed->alValues[4] > 0))
- lAttGrade += 1;
- m_pOwner->ApplyPoint(APPLY_ATT_GRADE_BONUS, bAdd ? lAttGrade : -lAttGrade);
- long lAttMagicGrade = pkItemAbsorbed->alValues[2] + pkItemAbsorbed->alValues[5];
- if (pkItemAbsorbed->alValues[1] > pkItemAbsorbed->alValues[2])
- lAttMagicGrade = pkItemAbsorbed->alValues[1] + pkItemAbsorbed->alValues[5];
- dValue = lAttMagicGrade * GetSocket(SASH_ABSORPTION_SOCKET);
- dValue = (double)dValue / 100;
- dValue = (double)dValue + .5;
- lAttMagicGrade = (long) dValue;
- if (((pkItemAbsorbed->alValues[1] > 0) && (lAttMagicGrade < 1)) || ((pkItemAbsorbed->alValues[2] > 0) && (lAttMagicGrade < 1)))
- lAttMagicGrade += 1;
- else if ((pkItemAbsorbed->alValues[1] > 0) || (pkItemAbsorbed->alValues[2] > 0))
- lAttMagicGrade += 1;
- m_pOwner->ApplyPoint(APPLY_MAGIC_ATT_GRADE, bAdd ? lAttMagicGrade : -lAttMagicGrade);
- }
- }
- }
- #endif
- for (int i = 0; i < ITEM_APPLY_MAX_NUM; ++i)
- {
- #ifdef __SASH_SYSTEM__
- if ((m_pProto->aApplies[i].bType == APPLY_NONE) && (GetType() != ITEM_COSTUME) && (GetSubType() != COSTUME_SASH))
- #else
- if (m_pProto->aApplies[i].bType == APPLY_NONE)
- #endif
- continue;
- long value = m_pProto->aApplies[i].lValue;
- #ifdef __SASH_SYSTEM__
- BYTE bType = m_pProto->aApplies[i].bType;
- if ((GetType() == ITEM_COSTUME) && (GetSubType() == COSTUME_SASH))
- {
- TItemTable * pkItemAbsorbed = ITEM_MANAGER::instance().GetTable(GetSocket(SASH_ABSORBED_SOCKET));
- if (pkItemAbsorbed)
- {
- if (pkItemAbsorbed->aApplies[i].bType == APPLY_NONE)
- continue;
- bType = pkItemAbsorbed->aApplies[i].bType;
- value = pkItemAbsorbed->aApplies[i].lValue;
- if (value < 0)
- continue;
- double dValue = value * GetSocket(SASH_ABSORPTION_SOCKET);
- dValue = (double)dValue / 100;
- dValue = (double)dValue + .5;
- value = (long) dValue;
- if ((pkItemAbsorbed->aApplies[i].lValue > 0) && (value <= 0))
- value += 1;
- }
- else
- continue;
- }
- #endif
- if (m_pProto->aApplies[i].bType == APPLY_SKILL)
- {
- m_pOwner->ApplyPoint(m_pProto->aApplies[i].bType, bAdd ? value : value ^ 0x00800000);
- }
- else
- {
- if (0 != accessoryGrade)
- value += MAX(accessoryGrade, value * aiAccessorySocketEffectivePct[accessoryGrade] / 100);
- m_pOwner->ApplyPoint(m_pProto->aApplies[i].bType, bAdd ? value : -value);
- }
- }
- if (true == CItemVnumHelper::IsRamadanMoonRing(GetVnum()) || true == CItemVnumHelper::IsHalloweenCandy(GetVnum())
- || true == CItemVnumHelper::IsHappinessRing(GetVnum()) || true == CItemVnumHelper::IsLovePendant(GetVnum()))
- {
- // Do not anything.
- }
- else
- {
- for (int i = 0; i < ITEM_ATTRIBUTE_MAX_NUM; ++i)
- {
- if (GetAttributeType(i))
- {
- const TPlayerItemAttribute& ia = GetAttribute(i);
- #ifdef __SASH_SYSTEM__
- long sValue = ia.sValue;
- if ((GetType() == ITEM_COSTUME) && (GetSubType() == COSTUME_SASH))
- {
- double dValue = sValue * GetSocket(SASH_ABSORPTION_SOCKET);
- dValue = (double)dValue / 100;
- dValue = (double)dValue + .5;
- sValue = (long) dValue;
- if ((ia.sValue > 0) && (sValue <= 0))
- sValue += 1;
- }
- #endif
- if (ia.bType == APPLY_SKILL)
- m_pOwner->ApplyPoint(ia.bType, bAdd ? ia.sValue : ia.sValue ^ 0x00800000);
- else
- m_pOwner->ApplyPoint(ia.bType, bAdd ? ia.sValue : -ia.sValue);
- }
- }
- }
- switch (m_pProto->bType)
- {
- case ITEM_PICK:
- case ITEM_ROD:
- {
- if (bAdd)
- {
- if (m_wCell == INVENTORY_MAX_NUM + WEAR_WEAPON)
- m_pOwner->SetPart(PART_WEAPON, GetVnum());
- }
- else
- {
- if (m_wCell == INVENTORY_MAX_NUM + WEAR_WEAPON)
- #ifdef __WEAPON_COSTUME_SYSTEM__
- m_pOwner->SetPart(PART_WEAPON, 0);
- #else
- m_pOwner->SetPart(PART_WEAPON, m_pOwner->GetOriginalPart(PART_WEAPON));
- #endif
- }
- }
- break;
- case ITEM_WEAPON:
- {
- #ifdef __WEAPON_COSTUME_SYSTEM__
- if (m_pOwner->GetWear(WEAR_COSTUME_WEAPON) != 0)
- break;
- #endif
- if (bAdd)
- {
- if (m_wCell == INVENTORY_MAX_NUM + WEAR_WEAPON)
- m_pOwner->SetPart(PART_WEAPON, GetVnum());
- }
- else
- {
- if (m_wCell == INVENTORY_MAX_NUM + WEAR_WEAPON)
- #ifdef __WEAPON_COSTUME_SYSTEM__
- m_pOwner->SetPart(PART_WEAPON, 0);
- #else
- m_pOwner->SetPart(PART_WEAPON, m_pOwner->GetOriginalPart(PART_WEAPON));
- #endif
- }
- }
- break;
- case ITEM_ARMOR:
- {
- if (0 != m_pOwner->GetWear(WEAR_COSTUME_BODY))
- break;
- if (GetSubType() == ARMOR_BODY || GetSubType() == ARMOR_HEAD || GetSubType() == ARMOR_FOOTS || GetSubType() == ARMOR_SHIELD)
- {
- if (bAdd)
- {
- if (GetProto()->bSubType == ARMOR_BODY)
- m_pOwner->SetPart(PART_MAIN, GetVnum());
- }
- else
- {
- if (GetProto()->bSubType == ARMOR_BODY)
- m_pOwner->SetPart(PART_MAIN, m_pOwner->GetOriginalPart(PART_MAIN));
- }
- }
- }
- break;
- case ITEM_COSTUME:
- {
- DWORD toSetValue = this->GetVnum();
- EParts toSetPart = PART_MAX_NUM;
- if (GetSubType() == COSTUME_BODY)
- {
- toSetPart = PART_MAIN;
- if (false == bAdd)
- {
- const CItem* pArmor = m_pOwner->GetWear(WEAR_BODY);
- toSetValue = (NULL != pArmor) ? pArmor->GetVnum() : m_pOwner->GetOriginalPart(PART_MAIN);
- }
- }
- #ifdef __WEAPON_COSTUME_SYSTEM__
- else if (GetSubType() == COSTUME_WEAPON)
- {
- toSetPart = PART_WEAPON;
- if (!bAdd)
- {
- const CItem* pWeapon = m_pOwner->GetWear(WEAR_WEAPON);
- toSetValue = (NULL != pWeapon) ? pWeapon->GetVnum() : m_pOwner->GetPart(PART_WEAPON);
- }
- }
- #endif
- else if (GetSubType() == COSTUME_HAIR)
- {
- toSetPart = PART_HAIR;
- toSetValue = (true == bAdd) ? this->GetValue(3) : 0;
- }
- #ifdef __SASH_SYSTEM__
- else if (GetSubType() == COSTUME_SASH)
- {
- toSetValue -= 85000;
- if (GetSocket(SASH_ABSORPTION_SOCKET) >= SASH_EFFECT_FROM_ABS)
- toSetValue += 1000;
- toSetValue = (bAdd == true) ? toSetValue : 0;
- toSetPart = PART_SASH;
- }
- #endif
- if (PART_MAX_NUM != toSetPart)
- {
- m_pOwner->SetPart((BYTE)toSetPart, toSetValue);
- m_pOwner->UpdatePacket();
- }
- }
- break;
- case ITEM_UNIQUE:
- {
- if (0 != GetSIGVnum())
- {
- const CSpecialItemGroup* pItemGroup = ITEM_MANAGER::instance().GetSpecialItemGroup(GetSIGVnum());
- if (NULL == pItemGroup)
- break;
- DWORD dwAttrVnum = pItemGroup->GetAttrVnum(GetVnum());
- const CSpecialAttrGroup* pAttrGroup = ITEM_MANAGER::instance().GetSpecialAttrGroup(dwAttrVnum);
- if (NULL == pAttrGroup)
- break;
- for (itertype (pAttrGroup->m_vecAttrs) it = pAttrGroup->m_vecAttrs.begin(); it != pAttrGroup->m_vecAttrs.end(); it++)
- {
- m_pOwner->ApplyPoint(it->apply_type, bAdd ? it->apply_value : -it->apply_value);
- }
- }
- }
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment