Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- float CMover::GetDamageMultiplier( ATTACK_INFO* pInfo )
- {
- float factor = 1.0f;
- int nSkill = pInfo->GetSkill();
- ItemProp* pSkillProp = NULL;
- AddSkillProp* pAddSkillProp = NULL;
- DWORD dwProbability = 0;
- if( nSkill )
- {
- pSkillProp = prj.GetSkillProp( nSkill ); // ½ºÅ³ÀÇ ÇÁ·ÎÆÛƼ²¨³¿
- if( pSkillProp )
- {
- pAddSkillProp = prj.GetAddSkillProp( pSkillProp->dwSubDefine, pInfo->GetSkillLevel() );
- if( pAddSkillProp )
- {
- dwProbability = pAddSkillProp->nProbability;
- #if __VER >= 9 // __SKILL_0706
- if( pInfo->pAttacker->IsPlayer() && pInfo->pDefender->IsPlayer() )
- dwProbability = pAddSkillProp->nProbabilityPVP;
- #endif // __SKILL_0706
- if( pAddSkillProp->nSkillCount > 0 ) // ¹ß»çü °³¼ö°¡ Àִ°Ç
- factor /= (float)pAddSkillProp->nSkillCount; // ¹ß»çü °³¼ö¸¸Å µ¥¹ÌÁö¸¦ ³ª´²¼ ÁÜ.
- }
- }
- }
- // ½ÎÀÌ·±Æ®¼¦ÀÌ¸é µ¥¹ÌÁö 2¹è, ´ÙÅ©ÀÏ·çÁ¯»óÅÂÀ̸é ÇØÁ¦ÇÑ´Ù.
- if( HasBuff( BUFF_SKILL, SI_ACR_SUP_DARKILLUSION ) )
- {
- switch( nSkill )
- {
- case SI_JST_YOYO_BACKSTAB: //ÃÖ´ë 2¹è
- //case SI_JST_YOYO_HITOFPENYA: //ÃÖ´ë 4¹è
- case SI_ACR_BOW_SILENTSHOT:
- {
- factor *= 1.5f;
- break;
- }
- }
- }
- switch( nSkill )
- {
- case SI_JST_YOYO_VATALSTAB:
- if( xRandom( 100 ) < dwProbability )
- factor *= 6.0f;
- else
- factor *= 3.0f;
- break;
- case SI_BIL_KNU_SONICHAND:
- if( xRandom( 100 ) < dwProbability )
- factor *= 2.0f;
- break;
- case SI_LOD_ONE_GRANDRAGE:
- if( xRandom( 100 ) < dwProbability )
- factor *= 4.0f;
- break;
- case SI_MER_ONE_SPLMASH:
- if( xRandom( 100 ) < dwProbability )
- factor *= 2.5f;
- break;
- case SI_MER_ONE_KEENWHEEL:
- if( xRandom( 100 ) < dwProbability )
- factor *= 2.0f;
- break;
- case SI_MER_ONE_BLINDSIDE:
- if( xRandom( 100 ) < dwProbability )
- factor *= 3.0f;
- break;
- case SI_ACR_BOW_AIMEDSHOT:
- if( xRandom( 100 ) < dwProbability )
- factor = 4.0f; // Tom: factor 4 is way better, else the shot just suxx!
- break;
- case SI_ACR_BOW_JUNKBOW: // ¾ûÅ͸® È»ìÀº È®·ü·Î µ¥¹ÌÁö¸¦ ÁØ´Ù.
- if( xRandom( 100 ) > dwProbability )
- factor = 2.0f;
- break;
- /*case SI_JST_YOYO_HITOFPENYA:
- factor *= ( pAddSkillProp->nDestData1[0] / 100.0f );*/
- #ifdef __SOURCE_SKILL_DMG
- case SI_JST_YOYO_HITOFPENYA:
- factor *= 6.0f;
- break;
- case SI_PSY_PSY_SPRITBOMB:
- factor *= 4.0f;
- break;
- case SI_ELE_WIND_WINDFIELD:
- factor *= 3.0f;
- break;
- case SI_MEN_WAN_DARKNESSLAKE:
- factor *= 2.0f;
- break;
- case SI_MEN_WAN_FEARSCREAM:
- factor *= 2.0f;
- break;
- case SI_ELE_STF_THUNDERBOLT:
- factor *= 2.0f;
- break;
- case SI_ELE_STF_FINALSPEAR:
- factor *= 2.0f;
- break;
- case SI_ELE_STF_COSMICELEMENT:
- factor *= 2.0f;
- break;
- case SI_CRA_CRBOW_RANGESTRIKE:
- factor *= 2.0f;
- break;
- case SI_WIN_YOYO_BACKSTEP:
- factor *= 2.0f;
- break;
- case SI_WIN_YOYO_MADHURRICANE:
- factor *= 2.0f;
- break;
- case SI_STORM_DOUBLE_STORMBLAST:
- factor *= 2.0f;
- break;
- case SI_RIN_SUP_MERKABAHANZELRUSHA:
- factor *= 1.5f;
- break;
- #endif // __SOURCE_SKILL_DMG
- }
- if( nSkill == SI_PSY_PSY_SPRITBOMB )
- {
- float fPercent = (float)GetManaPointPercent();
- if (fPercent > 100.0f) {
- fPercent = 100.0f;
- }
- else if (fPercent < 100.0f) {
- fPercent = 100.0f;
- }
- factor = factor * 1.5f * (fPercent / 100.0f);
- }
- #ifdef __PVP_PVM_SAMEDMG
- DWORD dwClass = pInfo->pAttacker->GetProp()->dwClass;
- if( pInfo->pDefender->IsNPC() && dwClass == RANK_SUPER )
- factor *= 1.20f;
- if( pInfo->pDefender->IsNPC() && dwClass != RANK_SUPER )
- factor *= 0.60f;
- #endif // __PVP_PVM_SAMEDMG
- if( IsNPC() ) // ¹ö¼Ä¿AI°¡ ÀÖ´Ù.
- {
- int nBerserkHP = GetProp()->m_nBerserkHP;
- if( nBerserkHP > 0 && GetHitPointPercent( 100 ) <= nBerserkHP )
- factor *= GetProp()->m_fBerserkDmgMul;
- }
- else
- {
- if( pInfo->pDefender->IsPlayer() ) // Ç÷¹À̾î¿Í Ç÷¹À̾îÀÇ °ø°ÝÀº µ¥¹ÌÁö °¨¼Ò
- factor *= 0.60f;
- if( pInfo->nParts == PARTS_LWEAPON ) // ¿Þ¼ÕÀº °ø°Ý·ÂÀÌ 75ÇÁ·Î·Î
- factor *= 0.75f;
- }
- if( pInfo->pAttacker->IsPlayer() )
- if( pInfo->pDefender->GetAdjParam( DST_CHRSTATE ) & CHS_DOUBLE ) // ´õºíµ¥¹ÌÁö »óÅ °É·È´Ù
- factor *= 2.0f;
- int nDelta = pInfo->pDefender->GetLevel() - pInfo->pAttacker->GetLevel();
- // ¿¹¿Üó¸®: Ŭ¶ô¿öÅ©¿Í °æºñº´Àº ·¹º§Â÷ Æä³ÎƼ skip
- if( pInfo->pAttacker->IsNPC() )
- {
- DWORD dwClass = pInfo->pAttacker->GetProp()->dwClass;
- switch( dwClass )
- {
- case RANK_GUARD:
- case RANK_SUPER:
- // case RANK_MIDBOSS: Áß°£º¸½ºµéÀº ·¹º§Â÷ Æä³ÎƼ°¡ ÀÖ´Â°Ô ¸ÂÁö ¾Ê³ª ½Í´Ù.
- nDelta = 0;
- break;
- }
- }
- if( nDelta > 0 )
- {
- #if __VER >= 9 // __PVPDEMAGE0608 // 9th PVP DEMAGE edit
- if( pInfo->pAttacker->IsNPC() || pInfo->pDefender->IsNPC() )
- {
- const int MAX_OVER_ATK = 16;
- nDelta = min( nDelta, (MAX_OVER_ATK-1) );
- const double pi = 3.1415926535;
- double radian = ( pi * nDelta ) / (float)(MAX_OVER_ATK * 2);
- factor *= (float)cos( radian );
- }
- #else //__PVPDEMAGE0608 // 9th PVP DEMAGE edit
- if( pInfo->pAttacker->IsPlayer() && pInfo->pDefender->IsPlayer()/* && GetWorld()->GetID() == WI_WORLD_GUILDWAR */) // ±æµå´ëÀü¸ÊÀΰ¡? && PVPÀΰ¡?
- {
- nDelta = min( nDelta, 25 );
- factor *= 25.0f / (25.0f + nDelta*2);
- }
- else
- {
- const int MAX_OVER_ATK = 16;
- nDelta = min( nDelta, (MAX_OVER_ATK-1) );
- const double pi = 3.1415926535;
- double radian = ( pi * nDelta ) / (float)(MAX_OVER_ATK * 2);
- factor *= (float)cos( radian );
- }
- #endif //__PVPDEMAGE0608 // 9th PVP DEMAGE edit
- }
- return factor;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement