//------------------------------------------------------------------------------ // SkillStateFactory.cpp // (C) 2005 Webzen Sunstudio //------------------------------------------------------------------------------ #include "SunClientPrecompiledHeader.h" #include "Character.h" #include "Statebase.h" #include "SkillState.h" #include "SkillStateFactory.h" #include "SkillInfoParser.h" #include "SkillStateBerserkMode.h" #include "skillstatedoubleattack.h" #include "skillstatetackle.h" #include "SkillStateWeaponThrowing.h" #include "SkillStateAssault.h" #include "SkillStateDragonBead.h" #include "SkillStateDragonEye.h" #include "SkillStateIllusionDance.h" #include "SkillStateManaDrain.h" #include "SkillStateMachSlash.h" #include "SkillStateSonicBlade.h" #include "SkillStateBladeFury.h" #include "SkillStateViperBlade.h" #include "SkillStateAirBlow.h" #include "SkillStateDoubleSpinKick.h" #include "SkillStateFastShot.h" #include "SkillStateMoonAssault.h" #include "SkillStateMultiTarget.h" #include "SkillStateBloodRain.h" #include "SkillStateHeavyShot.h" #include "SkillStateShockwave.h" #include "SkillStateSniping.h" #include "SkillStateBlazeArrow.h" #include "SkillStateSpinningWave.h" #include "SkillStateOverLimit.h" #include "SkillStateDefenceMotion.h" #include "SkillStateWildShot.h" #include "SkillStateFireBall.h" #include "SkillStateFireSpear.h" #include "SkillStateIceDagger.h" #include "SkillStateIceBlast.h" #include "SkillStateIceBolt.h" #include "SkillStateIcePressingWall.h" #include "SkillStateFrozenArrow.h" #include "SkillStateFrozenShield.h" #include "SkillStateWindBolt.h" #include "SkillStateLighting.h" #include "SkillStateElectricField.h" #include "SkillStateWindShield.h" #include "SkillStateLightingWave.h" #include "SkillStatePoisonThorn.h" #include "SkillStatePoisonRain.h" #include "SkillStatePowerWave.h" #include "SkillStateCoveredHeal.h" #include "SkillStateMagicShield.h" #include "SkillStateTeleport.h" #include "SkillStateWisdom.h" #include "SkillStateFireArrow.h" #include "SkillStateRevival.h" #include "SkillStateReverse.h" #include "SkillStateFireFila.h" #include "SkillStateSonyVine.h" #include "SkillStateExplozenAttack.h" #include "SkillStateStarFall.h" #include "SkillStateChaseShot.h" #include "SkillStateCircleSprits.h" #include "SkillStateInAbility.h" #include "SkillStateSaintAid.h" #include "SkillStateChargeAttack.h" #include "SkillStateSpritSlug.h" #include "SkillStatePurge.h" #include "SkillStateMonsterSkill.h" #include "SkillStatePoisonDagger.h" #include "SkillStateDarkSpark.h" #include "SkillStateDarkForce.h" #include "SkillStateDarkStun.h" #include "SkillDarkBreak.h" #include "SkillStateHpSuction.h" //#include "SkillStateMpSuction.h" #include "SkillStateHide.h" #include "SkillStateRush.h" #include "SkillStateDashStun.h" #include "SkillStateCustom.h" #include "SkillStateMonsterTackle.h" //Àüij¸¯ÅÍ °ø¿ë #include "SkillStateCreateCrystalWarp.h" #include "SkillStateDestroyCrystalWarp.h" #include "InterfaceManager.h" // ¹Ì½ºÆ½ #include "SkillStateSnakeKick.h" #include "SkillStateRisingSerpent.h" #include "SkillStateMystic.h" #include "SkillStateMysticDance.h" #include "SkillStateRollingPalm.h" // Çï·ÎÀ̵å #include "SkillStateDrillAttack.h" #include "SkillStateFlyingCharging.h" #include "SkillStateHelroidSpin.h" #include "SkillStateSlidingAttack.h" #include "SkillStateGuardianShield.h" #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE // À§Ä¡ºí·¹À̵å #include "SkillStateSpinTurnThrust.h" #include "SkillStateSpiningHearts.h" #include "SkillStateDarkPolingGrave.h" #include "SkillStateBlairPang.h" #include "SkillStateRutainPoint.h" #endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE SkillStateFactory g_SkillStateFactory; TCHAR *g_szSkillName[] = { _T( "Covered Heal" ), }; //------------------------------------------------------------------------------ /** */ SkillStateFactory::SkillStateFactory() { } //------------------------------------------------------------------------------ /** */ SkillStateFactory::~SkillStateFactory() { #ifdef _K2P_SKILL_REFACTORYING DeleteState(); #endif } BOOL SkillStateFactory::InitState() { return TRUE; } void SkillStateFactory::DeleteState() { STATE_BASE_HASH_MAP_ITR_TYPE Itr = m_StateBaseMap.begin(); STATE_BASE_HASH_MAP_ITR_TYPE end = m_StateBaseMap.end(); for( ; Itr != end; ++Itr ) { delete Itr->second; } m_StateBaseMap.clear(); } StateBase *SkillStateFactory::CreateState(int iSkillID,DWORD dwObjectType) { BASE_SKILLINFO *pInfo = SkillInfoParser::Instance()->GetSkillInfo( iSkillID ); assert(pInfo && "Invalid Skill Code"); StateSkill *pSkillState = NULL; #ifdef _K2P_SKILL_REFACTORYING if( dwObjectType == MONSTER_OBJECT ) { pInfo->m_SkillClassCode = eSKILL_MONSTER; } STATE_BASE_HASH_MAP_ITR_TYPE Itr = m_StateBaseMap.find( pInfo->m_SkillClassCode ); if( Itr != m_StateBaseMap.end() ) { StateBase * pSkillState = Itr->second; return pSkillState; } #else if(dwObjectType== MONSTER_OBJECT) { pSkillState = new SkillStateMonsterSkill(); return pSkillState; } #endif switch (pInfo->m_SkillClassCode) { #ifdef _K2P_SKILL_REFACTORYING case eSKILL_MONSTER: pSkillState = new SkillStateMonsterSkill(); break; #endif //-------------------------------------------------------------------------------------- // ¹ö¼­Ä¿ //-------------------------------------------------------------------------------------- case eSKILL_DOUBLE_ATTACK: pSkillState = new SkillStateDoubleAttack(); break; case eSKILL_TACKLE: pSkillState = new SkillStateTackle(); break; case eSKILL_BERSERK_MODE: pSkillState = new SkillStateBerserkMode(); break; case eSKILL_WEAPON_THROWING: pSkillState = new SkillStateWeaponThrowing(); break; case eSKILL_DASH: pSkillState = new SkillStateDashStun(); break; case eSKILL_MONSTER_TACKLE: pSkillState = new SkillStateMonsterTackle(); break; //-------------------------------------------------------------------------------------- // µå¶ó°ï //-------------------------------------------------------------------------------------- case eSKILL_ASSAULT: pSkillState = new SkillStateAssault(); break; case eSKILL_DRAGON_EYE: pSkillState = new SkillStateDragonEye(); break; case eSKILL_MACHSLASH: pSkillState = new SkillStateMachSlash(); break; case eSKILL_ILLUSION_DANCE: pSkillState = new SkillStateIllusionDance(); break; case eSKILL_SONICBLADE: pSkillState = new SkillStateSonicBlade(); break; case eSKILL_BLADE_FURY: pSkillState = new SkillStateBladeFury(); break; case eSKILL_VIPER_BLADE: pSkillState = new SkillStateViperBlade(); break; case eSKILL_EXPLOZEN_ATTACK: pSkillState = new SkillStateExplozenAttack(); break; case eSKILL_CHARGE_ATTACK: pSkillState = new SkillStateChargeAttack(); break; case eSKILL_SPRIT_SLUG: pSkillState = new SkillStateSpritSlug(); break; case eSKILL_DRAGON_BEAD: pSkillState = new SkillStateDragonBead(); break; //-------------------------------------------------------------------------------------- // ¹ß۸® //-------------------------------------------------------------------------------------- case eSKILL_FAST_SHOT: pSkillState = new SkillStateFastShot(); break; case eSKILL_PIERCEARROW: pSkillState = new SkillStateMultiTarget(); break; case eSKILL_MANA_DRAIN: pSkillState = new SkillStateManaDrain(); break; case eSKILL_AIRBLOW: pSkillState = new SkillStateAirBlow(); break; case eSKILL_HEAVY_SHOT: pSkillState = new SkillStateHeavyShot(); break; case eSKILL_BLOOD_RAIN: pSkillState = new SkillStateBloodRain(); break; case eSKILL_SNIPING: pSkillState = new SkillStateSniping(); break; case eSKILL_SHOCKWAVE: pSkillState = new SkillStateShockwave(); break; case eSKILL_MOON_ASSAULT: pSkillState = new SkillStateMoonAssault(); break; case eSKILL_DOUBLE_SPINKICK: pSkillState = new SkillStateDoubleSpinkick(); break; case eSKILL_ETHER_BLASE: pSkillState = new SkillStateBlazeArrow(); break; case eSKILL_SPINING_WAVE: pSkillState = new SkillStateSpinningWave(); break; case eSKILL_OVER_LIMIT: pSkillState = new SkillStateOverLimit(); break; case eSKILL_DEFENCE_MOTION: pSkillState = new SkillStateDefenceMotion(); break; case eSKILL_WILD_SHOT: pSkillState = new SkillStateWildShot(); break; case eSKILL_CHASE_SHOT: pSkillState = new SkillStateChaseShot(); break; //-------------------------------------------------------------------------------------- // ¿¤¸®¸àÅ»¸®½ºÆ® //-------------------------------------------------------------------------------------- case eSKILL_REVIVAL: pSkillState = new SkillStateRevival(); break; case eSKILL_REVERSE: pSkillState = new SkillStateReverse(); break; case eSKILL_FIRE_FILA: pSkillState = new SkillStateFireFila(); break; case eSKILL_SONY_VINE: pSkillState = new SkillStateSonyVine(); break; case eSKILL_FIRE_ARROW: pSkillState = new SkillStateFireArrow(); break; case eSKILL_FIRE_BALL: pSkillState = new SkillStateFireBall(); break; case eSKILL_FIRE_SPEAR: pSkillState = new SkillStateFireSpear(); break; case eSKILL_ICE_DAGGER: case eSKILL_ICE_DAGGER2: pSkillState = new SkillStateIceDagger(); break; case eSKILL_ICE_BLAST: pSkillState = new SkillStateIceBlast(); break; case eSKILL_ICE_BOLT: pSkillState = new SkillStateIceBolt(); break; case eSKILL_PRESSING_WALL: pSkillState = new SkillStateIcePressingWall(); break; case eSKILL_FROZEN_ARROW: pSkillState = new SkillStateFrozenArrow(); break; case eSKILL_FROZON_SHIELD: pSkillState = new SkillStateFrozenShield(); break; case eSKILL_WIND_BOLT: pSkillState = new SkillStateWindBolt(); break; case eSKILL_LIGHTING: pSkillState = new SkillStateLighting(); break; case eSKILL_ELECTRIC_FIELD: pSkillState = new SkillStateElectricField(); break; case eSKILL_WIND_SHIELD: pSkillState = new SkillStateWindShield(); break; case eSKILL_LIGHTING_WAVE: pSkillState = new SkillStateLightingWave(); break; case eSKILL_POISON_THORN: pSkillState = new SkillStatePoisonThorn(); break; case eSKILL_POISON_RAIN: pSkillState = new SkillStatePoisonRain(); break; case eSKILL_POWER_WAVE: pSkillState = new SkillStatePowerWave(); break; case eSKILL_MAGIC_SHIELD: pSkillState = new SkillStateMagicShield(); break; case eSKILL_TELEPORT: case eSKILL_TELEPORT2: pSkillState = new SkillStateTeleport(); break; case eSKILL_STAR_FALL: pSkillState = new SkillStateStarFall(); break; case eSKILL_CIRCLE_SPRITS: pSkillState = new SkillStateCircleSprits(); break; case eSKILL_INABILITTY: pSkillState = new SkillStateInAbility(); break; case eSKILL_SAINT_AID: pSkillState = new SkillStateSaintAid(); break; case eSKILL_PURGE: pSkillState = new SkillStatePurge(); break; //-------------------------------------------------------------------------------------- // ¼¨µµ¿ì //-------------------------------------------------------------------------------------- case eSKILL_POISON_DAGGER: pSkillState = new SkillStatePoisonDagger(); break; case eSKILL_DARK_SPARK: pSkillState = new SkillStateDarkSpark(); break; case eSKILL_DARK_FORCE: pSkillState = new SkillStateDarkForce(); break; case eSKILL_DARK_STUN: pSkillState = new SkillStateDarkStun(); break; case eSKILL_DARK_BREAK: pSkillState = new SkillStateDarkBreak(); break; case eSKILL_HP_SUCTION: pSkillState = new SkillStateHpSuction(); break; //case eSKILL_MP_SUCTION: // pSkillState = new SkillStateMpSuction(); // break; case eSKILL_HIDE: pSkillState = new SkillStateHide(); break; case eSKILL_RUSH: pSkillState = new SkillStateRush(); break; //-------------------------------------------------------------------------------------- // ¹Ì½ºÆ½ //-------------------------------------------------------------------------------------- case eSKILL_MYSTIC_907: pSkillState = new SkillStateSnakeKick(); break; case eSKILL_MYSTIC_908: pSkillState = new SkillStateRollingPalm(); break; case eSKILL_MYSTIC_905: pSkillState = new SkillStateRisingSerpent(); break; case eSKILL_MYSTIC_901: case eSKILL_MYSTIC_914: pSkillState = new SkillStateMystic(); break; case eSKILL_MYSTIC_906: pSkillState = new SkillStateMysticSmash(); break; case eSKILL_MYSTIC_921: // ¹Ì½ºÆ½ ºí¸µÅ© pSkillState = new SkillStateMystyBlink(); break; case eSKILL_MYSTIC_916: pSkillState = new SkillStateMysticDance(); break; case eSKILL_CREATE_CRYSTAL_WARP: pSkillState = new SkillStateCreateCrystalWarp(); break; case eSKILL_DESTROY_CRYSTAL_WARP: pSkillState = new SkillStateDestroyCrystalWarp(); break; //-------------------------------------------------------------------------------------- // Çï·ÎÀ̵å //-------------------------------------------------------------------------------------- #ifdef _NA_000000_20130812_NEW_CHARACTER_HELLROID case eSKILL_HELLROID_1005: // µå¸±¾îÅà pSkillState = new SkillStateDrillAttack(); break; case eSKILL_HELLROID_1008: // ÇöóÀ×Â÷Áö pSkillState = new SkillStateFlyingCharging(); break; case eSKILL_HELLROID_1015: // Çï·ÎÀ̵彺ÇÉ pSkillState = new SkillStateHellroidSpin(); break; case eSKILL_HELLROID_1026: // ½½¶óÀ̵ù ¾îÅà pSkillState = new SkillStateSlidingAttack(); break; case eSKILL_HELLROID_1030: pSkillState = new SkillStateGuardianShield(); break; #endif //_NA_000000_20130812_NEW_CHARACTER_HELLROID //-------------------------------------------------------------------------------------- // À§Ä¡ºí·¹À̵å //-------------------------------------------------------------------------------------- #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE case eSKILL_WITCHBLADE_1103: // ½ºÇÉÅϾ²·¯½ºÆ® pSkillState = new SkillStateSpinTurnThrust(); break; case eSKILL_WITCHBLADE_1110: // ½ºÇÇ´×ÇÏÃ÷ pSkillState = new SkillStateSpiningHearts(); break; case eSKILL_WITCHBLADE_1113: // ´ÙÅ©Æú¸µ±×·¹À̺ê pSkillState = new SkillStateDarkPolingGrave(); break; case eSKILL_WITCHBLADE_1120: // ºí·¹¾îÆÎ pSkillState = new SkillStateBlairPang(); break; case eSKILL_WITCHBLADE_1133: // ·çưÆ÷ÀÎÆ® pSkillState = new SkillStateRutainPoint(); break; #endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE //-------------------------------------------------------------------------------------- // ±âº»Àº ¿¬ÃâÀÌ ÇÊ¿ä¾ø´Â Ç÷¹ÀÌ¾î ½ºÅ³ÀÌ´Ù. //-------------------------------------------------------------------------------------- default: pSkillState = new SkillStateCustom(); break; } #ifdef _K2P_SKILL_REFACTORYING m_StateBaseMap.insert( STATE_BASE_HASH_MAP_ITR_TYPE::value_type( pInfo->m_SkillClassCode, pSkillState ) ); #endif return pSkillState; } //------------------------------------------------------------------------------ /** */ BOOL SkillStateFactory::CanUseSkill(Character *pCharacter,int iSkillID) { return TRUE; } BOOL SkillStateFactory::CreateNonstopSkillEffect(Character *pCharacter,Character *pTarget,int iSkillID) { BASE_SKILLINFO *pInfo = SkillInfoParser::Instance()->GetSkillInfo(iSkillID); assert(pInfo && "Invalid Skill Code"); switch(pInfo->m_SkillClassCode) { case eSKILL_DRAGON_EYE: SkillStateDragonEye::PlayNonstopEffect(pCharacter,pTarget); break; } return TRUE; } //------------------------------------------------------------------------------ SkillStateFactory::ResultProcessingType SkillStateFactory::GetResultProcessingType(SLOTCODE skill_code) { BASE_SKILLINFO* skill_info = SkillInfoParser::Instance()->GetSkillInfo(skill_code); if (skill_info == NULL) { return SkillStateFactory::kProcessing_PacketRecvImmediate; } //if (skill_info->m_wFlyingLifeTime <= 0) //{ // return SkillStateFactory::kProcessing_Projectile; //} switch(skill_info->m_SkillClassCode) { case eSKILL_POISON_THORN: case eSKILL_FIRE_BALL: case eSKILL_ICE_BLAST: case eSKILL_SHOCKWAVE: #ifdef _NA_000000_20130812_NEW_CHARACTER_HELLROID case eSKILL_HELLROID_1017: // ¿¡Å׸£Â÷¡ #endif //_NA_000000_20130812_NEW_CHARACTER_HELLROID return SkillStateFactory::kProcessing_Projectile; default: break; } return SkillStateFactory::kProcessing_PacketRecvImmediate; }