Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.88 KB | None | 0 0
  1. float CMover::GetDamageMultiplier( ATTACK_INFO* pInfo )
  2. {
  3. float factor = 1.0f;
  4. int nSkill = pInfo->GetSkill();
  5.  
  6. ItemProp* pSkillProp = NULL;
  7. AddSkillProp* pAddSkillProp = NULL;
  8. DWORD dwProbability = 0;
  9.  
  10. if( nSkill )
  11. {
  12. pSkillProp = prj.GetSkillProp( nSkill ); // ½ºÅ³ÀÇ ÇÁ·ÎÆÛƼ²¨³¿
  13. if( pSkillProp )
  14. {
  15. pAddSkillProp = prj.GetAddSkillProp( pSkillProp->dwSubDefine, pInfo->GetSkillLevel() );
  16. if( pAddSkillProp )
  17. {
  18. dwProbability = pAddSkillProp->nProbability;
  19. #if __VER >= 9 // __SKILL_0706
  20. if( pInfo->pAttacker->IsPlayer() && pInfo->pDefender->IsPlayer() )
  21. dwProbability = pAddSkillProp->nProbabilityPVP;
  22. #endif // __SKILL_0706
  23. if( pAddSkillProp->nSkillCount > 0 ) // ¹ß»çü °³¼ö°¡ Àִ°Ç
  24. factor /= (float)pAddSkillProp->nSkillCount; // ¹ß»çü °³¼ö¸¸Å­ µ¥¹ÌÁö¸¦ ³ª´²¼­ ÁÜ.
  25. }
  26. }
  27. }
  28.  
  29. // ½ÎÀÌ·±Æ®¼¦ÀÌ¸é µ¥¹ÌÁö 2¹è, ´ÙÅ©ÀÏ·çÁ¯»óÅÂÀ̸é ÇØÁ¦ÇÑ´Ù.
  30. if( HasBuff( BUFF_SKILL, SI_ACR_SUP_DARKILLUSION ) )
  31. {
  32. switch( nSkill )
  33. {
  34. case SI_JST_YOYO_BACKSTAB: //ÃÖ´ë 2¹è
  35. //case SI_JST_YOYO_HITOFPENYA: //ÃÖ´ë 4¹è
  36. case SI_ACR_BOW_SILENTSHOT:
  37. {
  38. factor *= 1.5f;
  39. break;
  40. }
  41. }
  42. }
  43.  
  44. switch( nSkill )
  45. {
  46. case SI_JST_YOYO_VATALSTAB:
  47. if( xRandom( 100 ) < dwProbability )
  48. factor *= 6.0f;
  49. else
  50. factor *= 3.0f;
  51. break;
  52. case SI_BIL_KNU_SONICHAND:
  53. if( xRandom( 100 ) < dwProbability )
  54. factor *= 2.0f;
  55. break;
  56. case SI_LOD_ONE_GRANDRAGE:
  57. if( xRandom( 100 ) < dwProbability )
  58. factor *= 4.0f;
  59. break;
  60. case SI_MER_ONE_SPLMASH:
  61. if( xRandom( 100 ) < dwProbability )
  62. factor *= 2.5f;
  63. break;
  64. case SI_MER_ONE_KEENWHEEL:
  65. if( xRandom( 100 ) < dwProbability )
  66. factor *= 2.0f;
  67. break;
  68. case SI_MER_ONE_BLINDSIDE:
  69. if( xRandom( 100 ) < dwProbability )
  70. factor *= 3.0f;
  71. break;
  72. case SI_ACR_BOW_AIMEDSHOT:
  73. if( xRandom( 100 ) < dwProbability )
  74. factor = 4.0f; // Tom: factor 4 is way better, else the shot just suxx!
  75. break;
  76. case SI_ACR_BOW_JUNKBOW: // ¾ûÅ͸® È­»ìÀº È®·ü·Î µ¥¹ÌÁö¸¦ ÁØ´Ù.
  77. if( xRandom( 100 ) > dwProbability )
  78. factor = 2.0f;
  79. break;
  80. /*case SI_JST_YOYO_HITOFPENYA:
  81. factor *= ( pAddSkillProp->nDestData1[0] / 100.0f );*/
  82.  
  83. #ifdef __SOURCE_SKILL_DMG
  84. case SI_JST_YOYO_HITOFPENYA:
  85. factor *= 6.0f;
  86. break;
  87. case SI_PSY_PSY_SPRITBOMB:
  88. factor *= 4.0f;
  89. break;
  90. case SI_ELE_WIND_WINDFIELD:
  91. factor *= 3.0f;
  92. break;
  93. case SI_MEN_WAN_DARKNESSLAKE:
  94. factor *= 2.0f;
  95. break;
  96. case SI_MEN_WAN_FEARSCREAM:
  97. factor *= 2.0f;
  98. break;
  99. case SI_ELE_STF_THUNDERBOLT:
  100. factor *= 2.0f;
  101. break;
  102. case SI_ELE_STF_FINALSPEAR:
  103. factor *= 2.0f;
  104. break;
  105. case SI_ELE_STF_COSMICELEMENT:
  106. factor *= 2.0f;
  107. break;
  108. case SI_CRA_CRBOW_RANGESTRIKE:
  109. factor *= 2.0f;
  110. break;
  111. case SI_WIN_YOYO_BACKSTEP:
  112. factor *= 2.0f;
  113. break;
  114. case SI_WIN_YOYO_MADHURRICANE:
  115. factor *= 2.0f;
  116. break;
  117. case SI_STORM_DOUBLE_STORMBLAST:
  118. factor *= 2.0f;
  119. break;
  120. case SI_RIN_SUP_MERKABAHANZELRUSHA:
  121. factor *= 1.5f;
  122. break;
  123. #endif // __SOURCE_SKILL_DMG
  124. }
  125.  
  126.  
  127. if( nSkill == SI_PSY_PSY_SPRITBOMB )
  128. {
  129. float fPercent = (float)GetManaPointPercent();
  130.  
  131. if (fPercent > 100.0f) {
  132. fPercent = 100.0f;
  133. }
  134. else if (fPercent < 100.0f) {
  135. fPercent = 100.0f;
  136. }
  137.  
  138. factor = factor * 1.5f * (fPercent / 100.0f);
  139. }
  140. #ifdef __PVP_PVM_SAMEDMG
  141. DWORD dwClass = pInfo->pAttacker->GetProp()->dwClass;
  142. if( pInfo->pDefender->IsNPC() && dwClass == RANK_SUPER )
  143. factor *= 1.20f;
  144.  
  145. if( pInfo->pDefender->IsNPC() && dwClass != RANK_SUPER )
  146. factor *= 0.60f;
  147. #endif // __PVP_PVM_SAMEDMG
  148. if( IsNPC() ) // ¹ö¼­Ä¿AI°¡ ÀÖ´Ù.
  149. {
  150. int nBerserkHP = GetProp()->m_nBerserkHP;
  151. if( nBerserkHP > 0 && GetHitPointPercent( 100 ) <= nBerserkHP )
  152. factor *= GetProp()->m_fBerserkDmgMul;
  153. }
  154. else
  155. {
  156. if( pInfo->pDefender->IsPlayer() ) // Ç÷¹À̾î¿Í Ç÷¹À̾îÀÇ °ø°ÝÀº µ¥¹ÌÁö °¨¼Ò
  157. factor *= 0.60f;
  158.  
  159. if( pInfo->nParts == PARTS_LWEAPON ) // ¿Þ¼ÕÀº °ø°Ý·ÂÀÌ 75ÇÁ·Î·Î
  160. factor *= 0.75f;
  161. }
  162.  
  163. if( pInfo->pAttacker->IsPlayer() )
  164. if( pInfo->pDefender->GetAdjParam( DST_CHRSTATE ) & CHS_DOUBLE ) // ´õºíµ¥¹ÌÁö »óÅ °É·È´Ù
  165. factor *= 2.0f;
  166.  
  167. int nDelta = pInfo->pDefender->GetLevel() - pInfo->pAttacker->GetLevel();
  168.  
  169. // ¿¹¿Üó¸®: Ŭ¶ô¿öÅ©¿Í °æºñº´Àº ·¹º§Â÷ Æä³ÎƼ skip
  170. if( pInfo->pAttacker->IsNPC() )
  171. {
  172. DWORD dwClass = pInfo->pAttacker->GetProp()->dwClass;
  173. switch( dwClass )
  174. {
  175. case RANK_GUARD:
  176. case RANK_SUPER:
  177. // case RANK_MIDBOSS: Áß°£º¸½ºµéÀº ·¹º§Â÷ Æä³ÎƼ°¡ ÀÖ´Â°Ô ¸ÂÁö ¾Ê³ª ½Í´Ù.
  178. nDelta = 0;
  179. break;
  180. }
  181. }
  182.  
  183. if( nDelta > 0 )
  184. {
  185. #if __VER >= 9 // __PVPDEMAGE0608 // 9th PVP DEMAGE edit
  186. if( pInfo->pAttacker->IsNPC() || pInfo->pDefender->IsNPC() )
  187. {
  188. const int MAX_OVER_ATK = 16;
  189. nDelta = min( nDelta, (MAX_OVER_ATK-1) );
  190.  
  191. const double pi = 3.1415926535;
  192. double radian = ( pi * nDelta ) / (float)(MAX_OVER_ATK * 2);
  193. factor *= (float)cos( radian );
  194. }
  195. #else //__PVPDEMAGE0608 // 9th PVP DEMAGE edit
  196. if( pInfo->pAttacker->IsPlayer() && pInfo->pDefender->IsPlayer()/* && GetWorld()->GetID() == WI_WORLD_GUILDWAR */) // ±æµå´ëÀü¸ÊÀΰ¡? && PVPÀΰ¡?
  197. {
  198. nDelta = min( nDelta, 25 );
  199. factor *= 25.0f / (25.0f + nDelta*2);
  200. }
  201. else
  202. {
  203. const int MAX_OVER_ATK = 16;
  204. nDelta = min( nDelta, (MAX_OVER_ATK-1) );
  205.  
  206. const double pi = 3.1415926535;
  207. double radian = ( pi * nDelta ) / (float)(MAX_OVER_ATK * 2);
  208. factor *= (float)cos( radian );
  209. }
  210. #endif //__PVPDEMAGE0608 // 9th PVP DEMAGE edit
  211. }
  212.  
  213. return factor;
  214. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement