void CItemAddOption::SendItemUse(LPOBJ lpObj, int iItemNumber, int iOptionType, int iEffectType, int iEffectValue, int iValidTime) { if ( lpObj == NULL ) return; if ( iItemNumber== 0 || iEffectType == 0 ) return; GCUseEffectItem(lpObj, 0, iOptionType, iEffectType, iValidTime); }
//0055D060 /> \55 PUSH EBP BYTE CItemAddOption::SetManualItemEffect(LPOBJ lpObj,int iEffectType,int iEffectValue,int iLeftTime)//calls 1x from GMMng.cpp { if(iEffectType <= 0) { return FALSE; } if(iLeftTime <= 0) { iLeftTime = 60; } this->_SetItemEffect(lpObj,iEffectType,iEffectValue); GCUseEffectItem(lpObj,0,1,iEffectType,iLeftTime); this->SendItemUse(lpObj,iEffectType,1,iEffectType,iEffectValue,iLeftTime); return TRUE; }
bool CItemAddOption::_ClearItemEffect(LPOBJ lpObj, int iEffectOption, int iOptionType, int iEffectType, int iEffectValue) { if ( iEffectType <= 0 ) return false; switch ( iEffectType ) { case ADD_OPTION_LIFE: lpObj->AddLife -= iEffectValue; if ( (lpObj->AddLife + lpObj->MaxLife ) < lpObj->Life ) lpObj->Life = lpObj->AddLife + lpObj->MaxLife; GCReFillSend(lpObj->m_Index, (WORD)lpObj->Life, 0xFF, 0, lpObj->iShield); GCReFillSend(lpObj->m_Index, WORD(lpObj->MaxLife + lpObj->AddLife), 0xFE, 0, lpObj->iMaxShield + lpObj->iAddShield); break; case ADD_OPTION_MANA: lpObj->AddMana -= iEffectValue; if ( (lpObj->AddMana + lpObj->MaxMana ) < lpObj->Mana ) lpObj->Mana = lpObj->AddMana + lpObj->MaxMana; GCManaSend(lpObj->m_Index, (short)lpObj->Mana, -1, 0, lpObj->BP); GCManaSend(lpObj->m_Index, short(lpObj->AddMana + lpObj->MaxMana), 0xFE, 0, lpObj->MaxBP + lpObj->AddBP); break; case ADD_OPTION_ATTACK_DAMAGE: lpObj->m_AttackDamageMaxLeft -= iEffectValue; lpObj->m_AttackDamageMinLeft -= iEffectValue; lpObj->m_AttackDamageMaxRight -= iEffectValue; lpObj->m_AttackDamageMinRight -= iEffectValue; lpObj->m_MagicDamageMin -= iEffectValue; lpObj->m_MagicDamageMax -= iEffectValue; break; case ADD_OPTION_SPEED: lpObj->m_AttackSpeed -= iEffectValue; lpObj->m_MagicSpeed -= iEffectValue; break; case ADD_OPTION_EXPERIENCE: lpObj->m_wExprienceRate = 100; lpObj->m_btMoveMapBound = 0; break; case ADD_OPTION_DROP_RATE: lpObj->m_wItemDropRate = 100; lpObj->m_btMoveMapBound = 0; break; case 8: lpObj->m_wExprienceRate = 100; lpObj->m_btMoveMapBound = 0; break; case ADD_OPTION_DEFENSE: lpObj->m_Defense -= iEffectValue * 10 / 20; break; case ADD_OPTION_STRENGTH: lpObj->Strength -= iEffectValue; break; case ADD_OPTION_DEXTERITY: lpObj->Dexterity -= iEffectValue; break; case ADD_OPTION_VITALITY: lpObj->Vitality -= iEffectValue; break; case ADD_OPTION_ENERGY: lpObj->Energy -= iEffectValue; break; case ADD_OPTION_LEADERSHIP: lpObj->Leadership -= iEffectValue; break; case ADD_OPTION_FORCE: lpObj->m_AttackDamageMaxLeft -= iEffectValue; lpObj->m_AttackDamageMinLeft -= iEffectValue; lpObj->m_AttackDamageMaxRight -= iEffectValue; lpObj->m_AttackDamageMinRight -= iEffectValue; break; case ADD_OPTION_MAGIC: lpObj->m_MagicDamageMin -= iEffectValue; lpObj->m_MagicDamageMax -= iEffectValue; break; case ADD_OPTION_MOVEABLE: lpObj->m_btMoveMapBound = 0; //Do nothing cuz mapmovebound is removed break; default: return false; } GCUseEffectItem(lpObj, iEffectOption, iOptionType, iEffectType, 0); return true; }
bool CItemAddOption::_ClearItemEffect(LPOBJ lpObj, int iEffectOption, int iOptionType, int iEffectType, int iEffectValue) { if ( iEffectType <= 0 ) return false; switch ( iEffectType ) { case ADD_OPTION_LIFE: lpObj->AddLife -= iEffectValue; if ( (lpObj->AddLife + lpObj->MaxLife ) < lpObj->Life ) { lpObj->Life = lpObj->AddLife + lpObj->MaxLife; } GCReFillSend(lpObj->m_Index, lpObj->Life, 0xFF, 0, lpObj->iShield); GCReFillSend(lpObj->m_Index, lpObj->MaxLife + lpObj->AddLife, 0xFE, 0, lpObj->iMaxShield + lpObj->iAddShield); break; case ADD_OPTION_MANA: lpObj->AddMana -= iEffectValue; if ( (lpObj->AddMana + lpObj->MaxMana ) < lpObj->Mana ) { lpObj->Mana = lpObj->AddMana + lpObj->MaxMana; } GCManaSend(lpObj->m_Index, lpObj->Mana, -1, 0, lpObj->BP); GCManaSend(lpObj->m_Index, lpObj->AddMana + lpObj->MaxMana, 0xFE, 0, lpObj->MaxBP + lpObj->AddBP); break; case ADD_OPTION_ATTACK_DAMAGE: lpObj->m_AttackDamageMaxLeft -= iEffectValue; lpObj->m_AttackDamageMinLeft -= iEffectValue; lpObj->m_AttackDamageMaxRight -= iEffectValue; lpObj->m_AttackDamageMinRight -= iEffectValue; lpObj->m_MagicDamageMin -= iEffectValue; lpObj->m_MagicDamageMax -= iEffectValue; break; /*case ADD_OPTION_SPEED: lpObj->m_AttackSpeed -= iEffectValue; lpObj->m_MagicSpeed -= iEffectValue; break;*/ case ADD_OPTION_DEFENSE: lpObj->m_Defense -= iEffectValue * 10 / 20; break; case ADD_OPTION_STRENGTH: lpObj->AddStrength -= iEffectValue; break; case ADD_OPTION_DEXTERITY: lpObj->AddDexterity -= iEffectValue; break; case ADD_OPTION_VITALITY: lpObj->AddVitality -= iEffectValue; break; case ADD_OPTION_ENERGY: lpObj->AddEnergy -= iEffectValue; break; case ADD_OPTION_LEADERSHIP: lpObj->AddLeadership -= iEffectValue; break; case ADD_OPTION_WRATH: lpObj->m_AttackDamageMaxLeft -= iEffectValue; lpObj->m_AttackDamageMinLeft -= iEffectValue; lpObj->m_AttackDamageMaxRight -= iEffectValue; lpObj->m_AttackDamageMinRight -= iEffectValue; break; case ADD_OPTION_WIZARDRY: lpObj->m_MagicDamageMin -= iEffectValue; lpObj->m_MagicDamageMax -= iEffectValue; break; case ADD_OPTION_MOBILITY: break; default: return false; } GCUseEffectItem(lpObj, iEffectOption, iOptionType, iEffectType, 0); return true; }