📄 initallstat.cpp
字号:
SweeperBonusHashMapConstItor itr = sweeperBonuses.begin(); SweeperBonusHashMapConstItor endItr = sweeperBonuses.end(); for (; itr!=endItr; itr++) { if ( itr->second->getRace() == RACE_SLAYER && itr->second->getLevel() == g_pLevelWarZoneInfoManager->getCreatureLevelGrade( this ) ) { OptionTypeList optionTypes = itr->second->getOptionTypeList(); OptionTypeListConstItor optionItr; for ( optionItr = optionTypes.begin(); optionItr != optionTypes.end(); optionItr++ ) { computeOptionStat( *optionItr ); } } } } ////////////////////////////////////////////////////////////////////////////// // 扁夯利栏肺 啊瘤绊 乐绰 可记甸阑 拌魂茄促. ////////////////////////////////////////////////////////////////////////////// slist<DefaultOptionSetType_t>::iterator itr = m_DefaultOptionSet.begin(); for ( ; itr != m_DefaultOptionSet.end(); itr++ ) { DefaultOptionSetInfo* pDefaultOptionSetInfo = g_pDefaultOptionSetInfoManager->getDefaultOptionSetInfo( (*itr) ); if ( pDefaultOptionSetInfo != NULL ) { const list<OptionType_t>& optionList = pDefaultOptionSetInfo->getOptionTypeList(); list<OptionType_t>::const_iterator citr; for ( citr = optionList.begin(); citr != optionList.end(); citr++ ) { computeOptionStat( *citr ); } } } ////////////////////////////////////////////////////////////////////////////// // 脐捞 林绰 焊呈胶甫 拌魂茄促. ////////////////////////////////////////////////////////////////////////////// if ( m_pPetInfo != NULL ) { if ( m_pPetInfo->getPetAttr() != 0xff ) computeOptionClassStat( (OptionClass)m_pPetInfo->getPetAttr(), (int)m_pPetInfo->getPetAttrLevel() ); if ( m_pPetInfo->getPetOption() != 0 ) computeOptionStat( m_pPetInfo->getPetOption() ); } ////////////////////////////////////////////////////////////////////////////// // 涝绊 乐绰 酒捞袍阑 眉农茄促. // for 啊 滴锅牢 捞蜡绰 酒捞袍栏肺 棵扼埃 瓷仿摹俊 狼秦辑 // 涝阑 荐 乐霸 登绰 酒捞袍阑 眉农窍扁 困秦辑捞促. ////////////////////////////////////////////////////////////////////////////// for (int j=0; j<WEAR_MAX; j++) { int wearCount = 0; for (int i=0; i<WEAR_MAX; i++) { Item* pItem = m_pWearItem[i]; // 泅犁 器牢飘俊 酒捞袍捞 乐绊 // 弊巴俊 措茄 眉农甫 酒流 窍瘤 臼疽促搁... if (pItem != NULL && m_pRealWearingCheck[i] == false) { // 父老 柳楼风 涝阑 荐 乐绰 酒捞袍捞扼搁 瓷仿摹甫 棵妨霖促. if (isRealWearing(pItem)) { computeItemStat(pItem); // 剧颊 公扁扼搁, 眉农甫 滴锅 窍瘤 臼档废 // 哭率, 坷弗率 葛滴 眉农 函荐甫 技泼 if (isTwohandWeapon(pItem)) { m_pRealWearingCheck[WEAR_LEFTHAND] = true; m_pRealWearingCheck[WEAR_RIGHTHAND] = true; } else m_pRealWearingCheck[i] = true; wearCount ++; } } } if (wearCount==0) break; } // by sigi. 2002.11.6 bool bSendPacket = false; if (m_pPlayer!=NULL) { bSendPacket = (dynamic_cast<GamePlayer*>(m_pPlayer)->getPlayerStatus()==GPS_NORMAL); } // 老窜 困俊辑 促 涝菌绰单.. // 瓷仿摹俊 蝶扼辑 汗厘捞 利侩捞 救登绰 酒捞袍篮 汗厘 沥焊甫 绝矩促. // 捞傈俊绰 给 涝菌绰单 捞力绰 涝阑 荐 乐促搁 涝洒绰 菩哦阑 焊辰促. // by sigi. 2002.10.30 for (int i=0; i<WEAR_MAX; i++) { if (m_pRealWearingCheck[i]) { // by sigi. 2002.10.31 if (pOldRealWearingCheck[i]==false) { Item* pItem = m_pWearItem[i]; if (pItem!=NULL) { Item::ItemClass IClass = pItem->getItemClass(); ItemType_t IType = pItem->getItemType(); Color_t color = getItemShapeColor( pItem ); addShape(IClass, IType, color); if (bSendPacket) { GCChangeShape _GCChangeShape; _GCChangeShape.setObjectID(getObjectID()); _GCChangeShape.setItemClass(IClass); _GCChangeShape.setItemType(IType); _GCChangeShape.setOptionType(pItem->getFirstOptionType()); _GCChangeShape.setAttackSpeed(m_AttackSpeed[ATTR_CURRENT]); m_pZone->broadcastPacket(m_X, m_Y, &_GCChangeShape, this); } } } } else { Item* pItem = m_pWearItem[i]; if (pItem!=NULL) { removeShape(pItem->getItemClass(), bSendPacket); } } } /////////////////////////////////////////////////////////////////////////////// // 拌鞭 焊呈胶甫 拌魂茄促. /////////////////////////////////////////////////////////////////////////////// // 胶瓶 犬伏阑 拌魂窍扁 傈俊 固府 拌魂茄促. /////////////////////////////////////////////////////////////////////////////// if ( hasRankBonus( RankBonus::RANK_BONUS_WIGHT_HAND ) ) { RankBonus* pRankBonus = getRankBonus( RankBonus::RANK_BONUS_WIGHT_HAND ); Assert( pRankBonus != NULL ); int StealBonus = pRankBonus->getPoint(); m_HPStealAmount += StealBonus; } if ( hasRankBonus( RankBonus::RANK_BONUS_SEIREN_HAND ) ) { RankBonus* pRankBonus = getRankBonus( RankBonus::RANK_BONUS_SEIREN_HAND ); Assert( pRankBonus != NULL ); int StealBonus = pRankBonus->getPoint(); m_MPStealAmount += StealBonus; } ////////////////////////////////////////////////////////////////////////////// // HP, MP 胶瓶 犬伏阑 拌魂秦 敌促. ////////////////////////////////////////////////////////////////////////////// m_HPStealRatio = computeStealRatio(CClass, m_HPStealAmount, &attr); m_MPStealRatio = computeStealRatio(CClass, m_MPStealAmount, &attr); Item* pWeapon = m_pWearItem[Slayer::WEAR_RIGHTHAND]; Item* pShield = m_pWearItem[Slayer::WEAR_LEFTHAND]; ////////////////////////////////////////////////////////////////////////////// // 何啊利牢 瓷仿摹甫 流立 荐沥窍绰 捞棋飘甫 八荤茄促. ////////////////////////////////////////////////////////////////////////////// if (isFlag(Effect::EFFECT_CLASS_STRIKING)) { EffectStriking* pStriking = dynamic_cast<EffectStriking*>(findEffect(Effect::EFFECT_CLASS_STRIKING)); if (pStriking != NULL) { Damage_t DamageBonus = pStriking->getDamageBonus(); if (pWeapon != NULL && pStriking->isTargetItem( pWeapon ) ) { m_Damage[ATTR_CURRENT] = min(SLAYER_MAX_DAMAGE, m_Damage[ATTR_CURRENT] + DamageBonus); m_Damage[ATTR_MAX] = min(SLAYER_MAX_DAMAGE, m_Damage[ATTR_MAX] + DamageBonus); // ItemOID啊 老摹茄促绰 富篮 规陛 胶飘扼捞欧捞 吧啡芭唱, // 促弗 公扁甫 甸菌促啊, 促矫 胶飘扼捞欧捞 吧赴 公扁甫 // 甸菌促绰 富捞促. 弊矾骨肺 捞棋飘甫 嘿捞扼绊 朝妨拎具 茄促. GCAddEffect gcAddEffect; gcAddEffect.setObjectID(m_ObjectID); gcAddEffect.setEffectID(Effect::EFFECT_CLASS_STRIKING); gcAddEffect.setDuration(pStriking->getRemainDuration()); m_pZone->broadcastPacket(m_X, m_Y, &gcAddEffect); } else { // ItemOID啊 老摹窍瘤 臼绰促绰 富篮 胶飘扼捞欧捞 吧赴 惑怕俊辑 // 促弗 公扁甫 甸菌促绰 富捞促. 弊矾骨肺 泅犁狼 浇饭捞绢俊霸绰 // 胶飘扼捞欧捞 吧妨乐促. 捞 捞棋飘甫 力芭秦拎具 窍骨肺... GCRemoveEffect gcRemoveEffect; gcRemoveEffect.setObjectID(m_ObjectID); gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_STRIKING); m_pZone->broadcastPacket(getX(), getY(), &gcRemoveEffect); } } } if (isFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN)) { int DefensePenalty = getPercentValue(m_Defense[ATTR_CURRENT], 20); int ToHitPenalty = getPercentValue(m_ToHit[ATTR_CURRENT], 20); int ProtectionPenalty = getPercentValue(m_Protection[ATTR_CURRENT], 20); int DamagePenalty1 = getPercentValue(m_Damage[ATTR_CURRENT], 20); int DamagePenalty2 = getPercentValue(m_Damage[ATTR_MAX], 20); m_Defense[ATTR_CURRENT] = max(0, m_Defense[ATTR_CURRENT] - DefensePenalty); m_ToHit[ATTR_CURRENT] = max(0, m_ToHit[ATTR_CURRENT] - ToHitPenalty); m_Protection[ATTR_CURRENT] = max(0, m_Protection[ATTR_CURRENT] - ProtectionPenalty); m_Damage[ATTR_CURRENT] = max(0, m_Damage[ATTR_CURRENT] - DamagePenalty1); m_Damage[ATTR_MAX] = max(0, m_Damage[ATTR_MAX] - DamagePenalty2); } if (isFlag(Effect::EFFECT_CLASS_DOOM)) { EffectDoom* pDoom = dynamic_cast<EffectDoom*>(findEffect(Effect::EFFECT_CLASS_DOOM)); if (pDoom!= NULL) { int DefensePenalty = getPercentValue(m_Defense[ATTR_CURRENT], pDoom->getDefensePenalty()); int ProtectionPenalty = getPercentValue(m_Protection[ATTR_CURRENT], pDoom->getProtectionPenalty()); m_Defense[ATTR_CURRENT] = max(0, m_Defense[ATTR_CURRENT] - DefensePenalty); m_Protection[ATTR_CURRENT] = max(0, m_Protection[ATTR_CURRENT] - ProtectionPenalty); } } if (isFlag(Effect::EFFECT_CLASS_SEDUCTION)) { EffectSeduction* pSeduction = dynamic_cast<EffectSeduction*>(findEffect(Effect::EFFECT_CLASS_SEDUCTION)); if (pSeduction!= NULL) { int ToHitPenalty = getPercentValue(m_ToHit[ATTR_CURRENT], pSeduction->getToHitPenalty()); int DamagePenalty1 = getPercentValue(m_Damage[ATTR_CURRENT], pSeduction->getDamagePenalty()); int DamagePenalty2 = getPercentValue(m_Damage[ATTR_MAX], pSeduction->getDamagePenalty()); m_ToHit[ATTR_CURRENT] = max(0, m_ToHit[ATTR_CURRENT] - ToHitPenalty); m_Damage[ATTR_CURRENT] = max(0, m_Damage[ATTR_CURRENT] - DamagePenalty1); m_Damage[ATTR_MAX] = max(0, m_Damage[ATTR_MAX] - DamagePenalty2); } }/* if (isFlag(Effect::EFFECT_CLASS_PARALYZE)) { EffectParalyze* pParalyze = dynamic_cast<EffectParalyze*>(findEffect(Effect::EFFECT_CLASS_PARALYZE)); if (pParalyze != NULL) { int DefensePenalty = getPercentValue(m_Defense[ATTR_CURRENT], pParalyze->getDefensePenalty()); m_Defense[ATTR_CURRENT] = max(0, m_Defense[ATTR_CURRENT] - DefensePenalty); } }*/ if (isFlag(Effect::EFFECT_CLASS_CHARGING_POWER)) { EffectChargingPower* pChargingPower= dynamic_cast<EffectChargingPower*>(findEffect(Effect::EFFECT_CLASS_CHARGING_POWER)); if (pChargingPower != NULL) { if (!isRealWearing(Slayer::WEAR_RIGHTHAND) || pWeapon == NULL || pWeapon->getItemClass() != Item::ITEM_CLASS_BLADE) { pChargingPower->setDeadline(0); } else // if (pChargingPower != NULL) { int DamageBonus = pChargingPower->getDamageBonus(); m_Damage[ATTR_CURRENT] = min(SLAYER_MAX_DAMAGE, m_Damage[ATTR_CURRENT] + DamageBonus); m_Damage[ATTR_MAX] = min(SLAYER_MAX_DAMAGE, m_Damage[ATTR_MAX] + DamageBonus); } } } if (isFlag(Effect::EFFECT_CLASS_DANCING_SWORD)) { EffectDancingSword* pDancingSword = dynamic_cast<EffectDancingSword*>(findEffect(Effect::EFFECT_CLASS_DANCING_SWORD)); if (pDancingSword!= NULL) { m_ToHit[ATTR_CURRENT] = min(SLAYER_MAX_TOHIT, m_ToHit[ATTR_CURRENT] + pDancingSword->getToHitBonus()); } } if (isFlag(Effect::EFFECT_CLASS_GHOST_BLADE)) { EffectGhostBlade* pGhostBlade = dynamic_cast<EffectGhostBlade*>(findEffect(Effect::EFFECT_CLASS_GHOST_BLADE)); if (pGhostBlade != NULL) { m_ToHit[ATTR_CURRENT] = min(SLAYER_MAX_TOHIT, m_ToHit[ATTR_CURRENT] + pGhostBlade->getToHitBonus()); } } if (isFlag(Effect::EFFECT_CLASS_MIND_CONTROL)) { EffectMindControl* pMindControl = dynamic_cast<EffectMindControl*>(findEffect(Effect::EFFECT_CLASS_MIND_CONTROL)); if (pMindControl != NULL) { m_ToHit[ATTR_CURRENT] = min(SLAYER_MAX_TOHIT, m_ToHit[ATTR_CURRENT] + pMindControl->getToHitBonus()); m_Defense[ATTR_CURRENT] = min(SLAYER_MAX_DEFENSE, m_Defense[ATTR_CURRENT] + pMindControl->getDefenseBonus()); } } if (isFlag(Effect::EFFECT_CLASS_PROTECTION_FROM_POISON)) { EffectProtectionFromPoison* pProtectionFromPoison = dynamic_cast<EffectProtectionFromPoison*>(findEffect(Effect::EFFECT_CLASS_PROTECTION_FROM_POISON)); if (pProtectionFromPoison != NULL) { m_Resist[MAGIC_DOMAIN_POISON] += pProtectionFromPoison->getResist(); } } if (isFlag(Effect::EFFECT_CLASS_PROTECTION_FROM_CURSE)) { EffectProtectionFromCurse* pProtectionFromCurse = dynamic_cast<EffectProtectionFromCurse*>(findEffect(Effect::EFFECT_CLASS_PROTECTION_FROM_CURSE)); if (pProtectionFromCurse != NULL) { m_Resist[MAGIC_DOMAIN_CURSE] += pProtectionFromCurse->getResist(); } } if (isFlag(Effect::EFFECT_CLASS_PROTECTION_FROM_ACID)) { EffectProtectionFromAcid* pProtectionFromAcid = dynamic_cast<EffectProtectionFromAcid*>(findEffect(Effect::EFFECT_CLASS_PROTECTION_FROM_ACID)); if (pProtectionFromAcid != NULL) { m_Resist[MAGIC_DOMAIN_ACID] += pProtectionFromAcid->getResist(); } } if (isFlag(Effect::EFFECT_CLASS_PROTECTION_FROM_BLOOD)) { EffectProtectionFromBlood* pProtectionFromBlood = dynamic_cast<EffectProtectionFromBlood*>(findEffect(Effect::EFFECT_CLASS_PROTECTION_FROM_BLOOD)); if (pProtectionFromBlood != NULL) { m_Resist[MAGIC_DOMAIN_BLOOD] += pProtectionFromBlood->getResist(); } } if (isFlag(Effect::EFFECT_CLASS_EXPANSION)) { EffectExpansion* pExpansion = dynamic_cast<EffectExpansion*>(findEffect(Effect::EFFECT_CLASS_EXPANSION)); if (pExpansion != NULL) { int Bonus = pExpansion->getHPBonus(); // 眉仿阑 唤脾扁 秦霖促... m_HP[ATTR_MAX] = m_HP[ATTR_MAX] + Bonus; } } if (isFlag(Effect::EFFECT_CLASS_BERSERKER)) { EffectBerserker* pBerserker= dynamic_cast<EffectBerserker*>(findEffect(Effect::EFFECT_CLASS_BERSERKER)); if (pBerserker != NULL) { Damage_t BladeMinDamage = 0; Damage_t BladeMaxDamage = 0; if ( attr.pWeapon != NULL && attr.pWeapon->getItemClass() == Item::ITEM_CLASS_BLADE ) { BladeMinDamage = attr.pWeapon->getMinDamage(); BladeMaxDamage = attr.pWeapon->getMaxDamage(); } // 单固瘤 棺 捧三 焊呈胶, 叼奇胶 棺 橇肺咆记 其澄萍绰 欺季飘 蔼捞促. // 单固瘤绰 瓷仿摹俊 狼茄 单固瘤客 公扁(档) 单固瘤狼 钦俊 措茄 厚啦捞促. // 促弗 捞棋飘俊 狼茄 眠啊 单固瘤绰 捞 拌魂俊辑 力寇茄促. int ToHitBonus = getPercentValue(m_ToHit[ATTR_CURRENT], pBerserker->getToHitBonus()); int MinDamageBonus = getPercentValue(AttrMinDamage+BladeMinDamage, pBerserker->getDamageBonus()); int MaxDamageBonus = getPercentValue(AttrMaxDamage+BladeMaxDamage, pBerserker->getDamageBonus()); int DefensePenalty = getPercentValue(m_Defense[ATTR_CURRENT], pBerserker->getDefensePenalty()); int ProtectionPenalty = getPercentValue(m_Defense[ATTR_CURRENT], pBerserker->getProtectionPenalty());/* cout << "Damage Bonus : " << (int)pBerserker->getDamageBonus() << " MinDamage : " << (int)(AttrMinDamage+BladeMinDamage) << " MaxDamage : " << (int)(AttrMaxDamage+BladeMaxDamage) << " MinDamageBonus : " << (int)MinDamageBonus << " MaxDamageBonus : " << (int)MaxDamageBonus << endl;*/ m_ToHit[ATTR_CURRENT] = min(SLAYER_MAX_TOHIT, m_ToHit[ATTR_CURRENT] + ToHitBonus); m_Damage[ATTR_CURRENT] = min(SLAYER_MAX_DAMAGE, m_Damage[ATTR_CURRENT] + MinDamageBonus); m_Damage[ATTR_MAX] = min(SLAYER_MAX_DAMAGE, m_Damage[ATTR_MAX] + MaxDamageBonus); m_Defense[ATTR_CURRENT] = max(0, m_Defense[ATTR_CURRENT] - DefensePenalty); m_Protection[ATTR_CURRENT] = max(0, m_Protection[ATTR_CURRENT] - ProtectionPenalty); } } if (isFlag(Effect::EFFECT_CLASS_DEATH)) { EffectDeath* pDeath = dynamic_cast<EffectDeath*>(findEffect(Effect::EFFECT_CLASS_DEATH)); if (pDeath != NULL) { for (int i=0; i<MAGIC_DOMAIN_MAX; i++) { m_Resist[i] -= pDeath->getResistPenalty();// if ( m_Resist[i] < 0 ) m_Resist[i] = 0; } } } if (isFlag(Effect::EFFECT_CLASS_BLUNTING)) { EffectBlunting* pBlunting = dynamic_cast<EffectBlunting*>(findEffect(Effect::EFFECT_CLASS_BLUNTING)); if ( pBlunting != NULL ) { int DefensePenalty = pBlunting->getDefensePenalty(); m_Defense[ATTR_CURRENT] = max(0, m_Defense[ATTR_CURRENT] - DefensePenalty); } } if (isFlag(Effect::EFFECT_CLASS_HOLY_ARMOR)) { EffectHolyArmor* pHolyArmor = dynamic_cast<EffectHolyArmor*>(findEffect(Effect::EFFECT_CLASS_HOLY_ARMOR)); if ( pHolyArmor != NULL )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -