📄 initallstat.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : InitAllStat.cpp// Written by : excel96// Description : //////////////////////////////////////////////////////////////////////////////#include "Slayer.h"#include "Vampire.h"#include "Ousters.h"#include "Monster.h"#include "GamePlayer.h"#include "Zone.h"#include "AbilityBalance.h"#include "Effect.h"#include "OptionInfo.h"#include "ItemUtil.h"#include "ItemInfo.h"#include "ItemInfoManager.h"#include "Player.h"#include "SkillInfo.h"#include "CombatInfoManager.h"#include "VariableManager.h"#include "RankBonus.h"#include "HolyLandRaceBonus.h"#include "BloodBibleBonus.h"#include "BloodBibleBonusManager.h"#include "WarSystem.h"#include "CastleInfoManager.h"#include "DefaultOptionSetInfo.h"#include "LevelWarZoneInfoManager.h"#include "SweeperBonus.h"#include "SweeperBonusManager.h"#include "PetInfo.h"#include "item/OustersWristlet.h"#include "item/OustersStone.h"#include "skill/CastleSkillSlot.h"#include "skill/VampireCastleSkillSlot.h"#include "skill/EffectBless.h"#include "skill/EffectDancingSword.h"#include "skill/EffectGhostBlade.h"#include "skill/EffectChargingPower.h"#include "skill/EffectPotentialExplosion.h"#include "skill/EffectParalyze.h"#include "skill/EffectDoom.h"#include "skill/EffectSeduction.h"#include "skill/EffectProtectionFromPoison.h"#include "skill/EffectProtectionFromCurse.h"#include "skill/EffectProtectionFromAcid.h"#include "skill/EffectProtectionFromBlood.h"#include "skill/EffectTransformToWolf.h"#include "skill/EffectTransformToBat.h"#include "skill/EffectMindControl.h"#include "skill/EffectExpansion.h"#include "skill/EffectBerserker.h"#include "skill/EffectStriking.h"#include "skill/EffectExtreme.h"#include "skill/EffectDeath.h"#include "skill/EffectMephisto.h"#include "skill/EffectObservingEye.h"#include "skill/EffectSummonCasket.h"#include "skill/EffectConcealment.h"#include "skill/EffectEvade.h"#include "skill/EffectCrossGuard.h"#include "skill/EffectBlunting.h"#include "skill/EffectHandsOfFire.h"#include "skill/EffectRingOfFlare.h"#include "skill/EffectWaterBarrier.h"#include "skill/EffectGnomesWhisper.h"#include "skill/EffectRediance.h"#include "skill/EffectHolyArmor.h"#include "skill/EffectTransformToWerwolf.h"#include "skill/EffectReactiveArmor.h"#include "skill/EffectGroundBless.h"#include "skill/EffectSharpChakram.h"#include "Gpackets/GCModifyInformation.h"#include "Gpackets/GCAddEffect.h"#include "Gpackets/GCRemoveEffect.h"#include "Gpackets/GCChangeShape.h"////////////////////////////////////////////////////////////////////////////////// 浇饭捞绢////////////////////////////////////////////////////////////////////////////////void Slayer::initCastleSkill() throw(){ __BEGIN_TRY removeAllCastleSkill(); if ( !getZone()->isHolyLand() ) return; list<CastleInfo*> pCastleInfoList = g_pCastleInfoManager->getGuildCastleInfos( getGuildID() ); if ( pCastleInfoList.empty() ) return; list<CastleInfo*>::iterator itr = pCastleInfoList.begin(); for ( ; itr != pCastleInfoList.end() ; itr++ ) { SkillType_t CastleSkillType = g_pCastleInfoManager->getCastleSkillType( (*itr)->getZoneID(), getGuildID() ); if ( CastleSkillType == SKILL_MAX ) continue; SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(CastleSkillType); Assert( pSkillInfo != NULL ); Turn_t Delay = pSkillInfo->getMaxDelay(); CastleSkillSlot* pCastleSkillSlot = new CastleSkillSlot(); pCastleSkillSlot->setName( m_Name ); pCastleSkillSlot->setSkillType( CastleSkillType ); pCastleSkillSlot->setInterval(Delay); pCastleSkillSlot->setExpLevel(0); pCastleSkillSlot->setExp(1); pCastleSkillSlot->setRunTime(); addSkill( pCastleSkillSlot ); } __END_CATCH}void Slayer::initAllStat(int numPartyMember) throw(){ __BEGIN_TRY BASIC_ATTR attr; Creature::CreatureClass CClass = getCreatureClass(); m_Resist[MAGIC_DOMAIN_NO_DOMAIN] = 0; m_Resist[MAGIC_DOMAIN_POISON] = 0; m_Resist[MAGIC_DOMAIN_ACID] = 0; m_Resist[MAGIC_DOMAIN_CURSE] = 0; m_Resist[MAGIC_DOMAIN_BLOOD] = 0; // BloodBible 包访 焊呈胶 荐摹甸 檬扁拳 m_ConsumeMPRatio = 0; m_GamblePriceRatio = 0; m_PotionPriceRatio = 0; m_MagicBonusDamage = 0; m_PhysicBonusDamage = 0; ////////////////////////////////////////////////////////////////////////////// // 力老 刚历 扁夯 瓷仿摹甫 檬扁拳矫虐绊, // 扁夯 瓷仿摹俊 康氢阑 林绰 捞棋飘甫 八荤茄促. ////////////////////////////////////////////////////////////////////////////// m_STR[ATTR_CURRENT] = m_STR[ATTR_MAX] = m_STR[ATTR_BASIC] = m_pAttrs[ATTR_KIND_STR]->getLevel(); m_DEX[ATTR_CURRENT] = m_DEX[ATTR_MAX] = m_DEX[ATTR_BASIC] = m_pAttrs[ATTR_KIND_DEX]->getLevel(); m_INT[ATTR_CURRENT] = m_INT[ATTR_MAX] = m_INT[ATTR_BASIC] = m_pAttrs[ATTR_KIND_INT]->getLevel(); if (isFlag(Effect::EFFECT_CLASS_BLESS)) { EffectBless* pBless = dynamic_cast<EffectBless*>(findEffect(Effect::EFFECT_CLASS_BLESS)); if (pBless != NULL) { // STR, DEX甫 棵赴促.// m_STR[ATTR_CURRENT] += pBless->getSTRBonus();// m_DEX[ATTR_CURRENT] += pBless->getDEXBonus(); m_STR[ATTR_CURRENT] += getPercentValue( m_STR[ATTR_CURRENT], pBless->getSTRBonus() ); m_DEX[ATTR_CURRENT] += getPercentValue( m_DEX[ATTR_CURRENT], pBless->getDEXBonus() ); } } if (isFlag(Effect::EFFECT_CLASS_POTENTIAL_EXPLOSION)) { EffectPotentialExplosion* pPotentialExplosion = dynamic_cast<EffectPotentialExplosion*>(findEffect(Effect::EFFECT_CLASS_POTENTIAL_EXPLOSION)); if (pPotentialExplosion!= NULL) { // STR, DEX甫 棵赴促. m_STR[ATTR_CURRENT] += pPotentialExplosion->getDiffSTR(); m_DEX[ATTR_CURRENT] += pPotentialExplosion->getDiffDEX(); } } if (isFlag(Effect::EFFECT_CLASS_REDIANCE)) { EffectRediance* pRediance = dynamic_cast<EffectRediance*>(findEffect(Effect::EFFECT_CLASS_REDIANCE)); if (pRediance!= NULL) { Item* pWeapon = m_pWearItem[Slayer::WEAR_RIGHTHAND]; if ( pWeapon == NULL || pWeapon->getItemClass() != Item::ITEM_CLASS_SWORD || !isRealWearing( WEAR_RIGHTHAND ) ) { pRediance->setDeadline(0); } else { m_DEX[ATTR_CURRENT] += pRediance->getDexBonus(); } } } ////////////////////////////////////////////////////////////////////////////// // 瓷仿摹 拌魂阑 困茄 颇扼固磐甸阑 檬扁拳茄促. ////////////////////////////////////////////////////////////////////////////// attr.nSTR = m_STR[ATTR_CURRENT]; attr.nDEX = m_DEX[ATTR_CURRENT]; attr.nINT = m_INT[ATTR_CURRENT]; attr.pWeapon = m_pWearItem[WEAR_RIGHTHAND]; m_HPStealAmount = 0; m_MPStealAmount = 0; m_HPStealRatio = 0; m_MPStealRatio = 0; m_HPRegen = 0; m_MPRegen = 0; m_Luck = 0; for (int i=0; i<SKILL_DOMAIN_MAX; i++) attr.pDomainLevel[i] = m_SkillDomainLevels[i]; ////////////////////////////////////////////////////////////////////////////// // 何啊利牢 瓷仿摹甸阑 拌魂茄促. ////////////////////////////////////////////////////////////////////////////// m_HP[ATTR_MAX] = computeHP(CClass, &attr); m_HP[ATTR_BASIC] = 0; m_MP[ATTR_MAX] = computeMP(CClass, &attr); m_MP[ATTR_BASIC] = 0; m_ToHit[ATTR_CURRENT] = computeToHit(CClass, &attr); m_ToHit[ATTR_MAX] = 0; m_Defense[ATTR_CURRENT] = computeDefense(CClass, &attr); m_Defense[ATTR_MAX] = 0; m_Protection[ATTR_CURRENT] = computeProtection(CClass, &attr); m_Protection[ATTR_MAX] = 0; m_Damage[ATTR_CURRENT] = computeMinDamage(CClass, &attr); m_Damage[ATTR_MAX] = computeMaxDamage(CClass, &attr); m_Damage[ATTR_BASIC] = 0; m_AttackSpeed[ATTR_CURRENT] = computeAttackSpeed(CClass, &attr); m_AttackSpeed[ATTR_MAX] = 0; m_CriticalRatio[ATTR_CURRENT] = computeCriticalRatio(CClass, &attr); m_CriticalRatio[ATTR_MAX] = 0; ////////////////////////////////////////////////////////////////////////////// // 瓷仿摹俊 狼茄 Damage 甫 历厘秦 敌促. BERSER 扁贱狼 焊呈胶 拌魂阑 困秦辑. ////////////////////////////////////////////////////////////////////////////// Damage_t AttrMinDamage = m_Damage[ATTR_CURRENT]; Damage_t AttrMaxDamage = m_Damage[ATTR_MAX]; int DefBonus = 0; int ProBonus = 0; if ( isFlag( Effect::EFFECT_CLASS_CONCEALMENT ) ) { EffectConcealment* pEffect = dynamic_cast<EffectConcealment*>( findEffect(Effect::EFFECT_CLASS_CONCEALMENT) ); if ( pEffect != NULL ) { if ( attr.pWeapon == NULL || !isArmsWeapon( attr.pWeapon ) ) { pEffect->setDeadline(0); } else if ( isRealWearing( WEAR_RIGHTHAND ) ) { DefBonus = (int)( (getDEX()/20) * ( 1.0f + ((float)pEffect->getLevel()/25.0f) ) ); ProBonus = (int)( (getSTR()/10) * ( 1.0f + ((float)pEffect->getLevel()/25.0f) ) ); } } } int RaceWarHPBonus = 0; if ( m_pZone->isHolyLand() || m_pZone->isLevelWarZone() ) { RaceWarHPBonus = getPercentValue( m_HP[ATTR_MAX], g_pVariableManager->getRaceWarHPBonus() ); } // Passive Skill : Will of Iron (鉴荐 HP * 1.15) SkillSlot* pFabulousSoul = getSkill(SKILL_FABULOUS_SOUL); SkillSlot* pWillOfIron = getSkill(SKILL_WILL_OF_IRON); int HPBonus_WillOfIron = 0; if( (pFabulousSoul != NULL && pFabulousSoul->canUse()) || (pWillOfIron != NULL && pWillOfIron->canUse()) ) { HPBonus_WillOfIron = m_HP[ATTR_MAX] * 0.15; } SkillSlot* pLiveness = getSkill(SKILL_LIVENESS); int HPBonusPercent = 0, LivenessHPBonus =0, LivenessDefenseBonus = 0; if(pLiveness != NULL && pLiveness->canUse()) { int level = m_SkillDomainLevels[SKILL_DOMAIN_GUN];#ifdef __CHINA_SERVER__ switch (g_pSkillInfoManager->getGradeByDomainLevel(level)) { case SKILL_GRADE_APPRENTICE: HPBonusPercent = 0; LivenessDefenseBonus = 0; break; case SKILL_GRADE_ADEPT: HPBonusPercent = 10; LivenessDefenseBonus = 10; break; case SKILL_GRADE_EXPERT: HPBonusPercent = 25; LivenessDefenseBonus = 35; break; case SKILL_GRADE_MASTER: HPBonusPercent = 40; LivenessDefenseBonus = 60; break; case SKILL_GRADE_GRAND_MASTER: HPBonusPercent = 100; LivenessDefenseBonus = 100; break; default: break; }// if ( level >= 125 ) HPBonusPercent = 50;#else switch (g_pSkillInfoManager->getGradeByDomainLevel(level)) { case SKILL_GRADE_APPRENTICE: HPBonusPercent = 0; LivenessDefenseBonus = 0; break; case SKILL_GRADE_ADEPT: HPBonusPercent = 10; LivenessDefenseBonus = 10; break; case SKILL_GRADE_EXPERT: HPBonusPercent = 20; LivenessDefenseBonus = 35; break; case SKILL_GRADE_MASTER: HPBonusPercent = 30; LivenessDefenseBonus = 60; break; case SKILL_GRADE_GRAND_MASTER: HPBonusPercent = 40; LivenessDefenseBonus = 100; break; default: break; } if ( level >= 125 ) HPBonusPercent = 50;#endif LivenessHPBonus = getPercentValue( m_HP[ATTR_MAX], HPBonusPercent); //m_Defense[ATTR_CURRENT] = min(SLAYER_MAX_DEFENSE, m_Defense[ATTR_CURRENT] + LivenessDefenseBonus); } //// // 傈里 焊呈胶 // 瘤陛篮 傈里 铰菩俊 包拌绝捞 绢蠢率捞电 焊呈胶啊 利侩瞪 荐 乐促. by sigi //if ( g_pCombatInfoManager->isSlayerBonus() ) int HPBonus = 0; { int bonusRatio = g_pVariableManager->getCombatSlayerHPBonusRatio(); //g_pCombatInfoManager->getSlayerHPModify(); if (bonusRatio > 0) { HPBonus = getPercentValue( m_HP[ATTR_MAX], bonusRatio); } } ////////////////////////////////////////////////////////////////////////// // 老窜 扁绢 眉农 函荐甫 檬扁拳秦辑 葛电 扁绢甫 救 涝篮 巴栏肺 埃林窍绊 矫累茄促. ////////////////////////////////////////////////////////////////////////////// bool pOldRealWearingCheck[WEAR_MAX]; // by sigi. 2002.10.31 for (int i=0; i<WEAR_MAX; i++) { pOldRealWearingCheck[i] = m_pRealWearingCheck[i]; m_pRealWearingCheck[i] = false; } ////////////////////////////////////////////////////////////////////////////// // 己阑 家蜡茄 辆练篮 焊呈胶 可记阑 罐霸 等促 ////////////////////////////////////////////////////////////////////////////// // Blood Bible 阿阿狼 焊呈胶 可记阑 罐绰 吧肺 绊闷促./* if (m_pZone->isHolyLand() ) { const list<OptionType_t>& optionType = g_pHolyLandRaceBonus->getSlayerOptionTypeList(); list<OptionType_t>::const_iterator itr; for (itr=optionType.begin(); itr!=optionType.end(); itr++) { computeOptionStat( *itr ); } }*/ ////////////////////////////////////////////////////////////////////////////// // Blood Bible 阿阿狼 焊呈胶 可记阑 罐绰促. ////////////////////////////////////////////////////////////////////////////// if ( m_pZone->isHolyLand() && !g_pWarSystem->hasActiveRaceWar() ) { const BloodBibleBonusHashMap& bloodBibleBonus = g_pBloodBibleBonusManager->getBloodBibleBonuses(); BloodBibleBonusHashMapConstItor itr; for (itr=bloodBibleBonus.begin(); itr!=bloodBibleBonus.end(); itr++) { if ( itr->second->getRace() == RACE_SLAYER ) { OptionTypeList optionTypes = itr->second->getOptionTypeList(); OptionTypeListConstItor optionItr; for ( optionItr = optionTypes.begin(); optionItr != optionTypes.end(); optionItr++ ) { computeOptionStat( *optionItr ); } } } } if ( g_pSweeperBonusManager->isAble( getZoneID() ) && g_pLevelWarZoneInfoManager->isCreatureBonusZone( this, getZoneID() )) { const SweeperBonusHashMap& sweeperBonuses = g_pSweeperBonusManager->getSweeperBonuses();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -