Advertisement
kenny11162

Untitled

Apr 29th, 2015
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.99 KB | None | 0 0
  1. diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
  2. index b5f283c..83f6caf 100644
  3. --- a/src/server/game/Entities/Player/Player.cpp
  4. +++ b/src/server/game/Entities/Player/Player.cpp
  5. @@ -653,6 +653,7 @@ Player::Player(WorldSession* session): Unit(true)
  6. #pragma warning(default:4355)
  7. #endif
  8.  
  9. + hasteMod = 0.5;
  10. m_speakTime = 0;
  11. m_speakCount = 0;
  12.  
  13. @@ -1649,9 +1650,11 @@ void Player::Update(uint32 p_time)
  14. m_swingErrorMsg = 0; // reset swing error state
  15.  
  16. // prevent base and off attack in same time, delay attack at 0.2 sec
  17. - if (haveOffhandWeapon())
  18. + /* hastemod
  19. + if (haveOffhandWeapon())
  20. if (getAttackTimer(OFF_ATTACK) < ATTACK_DISPLAY_DELAY)
  21. setAttackTimer(OFF_ATTACK, ATTACK_DISPLAY_DELAY);
  22. + */
  23.  
  24. // do attack
  25. AttackerStateUpdate(victim, BASE_ATTACK);
  26. @@ -1668,8 +1671,10 @@ void Player::Update(uint32 p_time)
  27. else
  28. {
  29. // prevent base and off attack in same time, delay attack at 0.2 sec
  30. + /* hastemod
  31. if (getAttackTimer(BASE_ATTACK) < ATTACK_DISPLAY_DELAY)
  32. setAttackTimer(BASE_ATTACK, ATTACK_DISPLAY_DELAY);
  33. + */
  34.  
  35. // do attack
  36. AttackerStateUpdate(victim, OFF_ATTACK);
  37. @@ -5926,30 +5931,68 @@ float Player::OCTRegenMPPerSpirit()
  38. return regen;
  39. }
  40.  
  41. +// hastemod begins
  42. +void Player::SetAttackTime(WeaponAttackType att, uint32 val) {
  43. + switch(att) {
  44. + case BASE_ATTACK:
  45. + ApplyHasteMod(m_baseRatingValue[CR_HASTE_MELEE],BASE_ATTACK,CR_HASTE_MELEE, val);
  46. + break;
  47. +
  48. + case OFF_ATTACK:
  49. + ApplyHasteMod(m_baseRatingValue[CR_HASTE_MELEE],OFF_ATTACK,CR_HASTE_MELEE, val);
  50. + break;
  51. + case RANGED_ATTACK:
  52. + ApplyHasteMod(m_baseRatingValue[CR_HASTE_RANGED],RANGED_ATTACK,CR_HASTE_RANGED, val);
  53. + break;
  54. +
  55. + default:
  56. + SetFloatValue(UNIT_FIELD_BASEATTACKTIME+att,val*m_modAttackSpeedPct[att]);
  57. + }
  58. +}
  59. +
  60. +void Player::ApplyHasteMod(int16 val, uint32 att, CombatRating cr, float speed) {
  61. + float atkSpd = speed * (( 100.0f - ((val / 32.789989f) * hasteMod) ) / 100.0f );
  62. + if (atkSpd < 0) atkSpd = 0;
  63. + SetFloatValue(UNIT_FIELD_BASEATTACKTIME+att, atkSpd);
  64. +}
  65. +
  66. +// hastemod ends
  67. +
  68. void Player::ApplyRatingMod(CombatRating cr, int32 value, bool apply)
  69. {
  70. m_baseRatingValue[cr]+=(apply ? value : -value);
  71.  
  72. - // explicit affected values
  73. - switch (cr)
  74. - {
  75. - case CR_HASTE_MELEE:
  76. - {
  77. - float RatingChange = value * GetRatingMultiplier(cr);
  78. - ApplyAttackTimePercentMod(BASE_ATTACK, RatingChange, apply);
  79. - ApplyAttackTimePercentMod(OFF_ATTACK, RatingChange, apply);
  80. + m_baseRatingValue[cr]+=(apply ? value : -value);
  81. + // explicit affected values
  82. + switch (cr)
  83. + {
  84. + case CR_HASTE_MELEE:
  85. + {
  86. + Item * mainhand = m_items[EQUIPMENT_SLOT_MAINHAND];
  87. + Item * offhand = m_items[EQUIPMENT_SLOT_OFFHAND];
  88. + float speed1 = mainhand ? (float)mainhand->GetTemplate()->Delay : 2000.0f;
  89. + float speed2 = offhand ? (float)offhand->GetTemplate()->Delay : 2000.0f;
  90. +
  91. + ApplyHasteMod(m_baseRatingValue[cr], BASE_ATTACK, cr, speed1);
  92. + ApplyHasteMod(m_baseRatingValue[cr], OFF_ATTACK, cr, speed2);
  93. +
  94. + float RatingChange = value / value;
  95. + (RatingChange = 0) ? ApplyPercentModFloatVar(m_modAttackSpeedPct[BASE_ATTACK], RatingChange, !apply) : ApplyPercentModFloatVar(m_modAttackSpeedPct[BASE_ATTACK], -RatingChange, apply);
  96. + (RatingChange = 0) ? ApplyPercentModFloatVar(m_modAttackSpeedPct[OFF_ATTACK], RatingChange, !apply) : ApplyPercentModFloatVar(m_modAttackSpeedPct[OFF_ATTACK], -RatingChange, apply);
  97. break;
  98. }
  99. case CR_HASTE_RANGED:
  100. {
  101. - float RatingChange = value * GetRatingMultiplier(cr);
  102. - ApplyAttackTimePercentMod(RANGED_ATTACK, RatingChange, apply);
  103. + Item * ranged = m_items[EQUIPMENT_SLOT_RANGED];
  104. + float speed = ranged ? (float)ranged->GetTemplate()->Delay : 2000.0f;
  105. + ApplyHasteMod(m_baseRatingValue[cr], RANGED_ATTACK, cr, speed);
  106. + float RatingChange = value / value;
  107. + (RatingChange = 0) ? ApplyPercentModFloatVar(m_modAttackSpeedPct[RANGED_ATTACK], RatingChange, !apply) : ApplyPercentModFloatVar(m_modAttackSpeedPct[RANGED_ATTACK], -RatingChange, apply);
  108. break;
  109. }
  110. case CR_HASTE_SPELL:
  111. {
  112. - float RatingChange = value * GetRatingMultiplier(cr);
  113. - ApplyCastTimePercentMod(RatingChange, apply);
  114. + ApplyHasteMod(m_baseRatingValue[cr], CR_HASTE_SPELL-1, cr, 1.0f);
  115. break;
  116. }
  117. default:
  118. diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
  119. index 6aa19b5..b6ed92b 100644
  120. --- a/src/server/game/Entities/Player/Player.h
  121. +++ b/src/server/game/Entities/Player/Player.h
  122. @@ -2616,6 +2616,14 @@ class Player : public Unit, public GridObject<Player>
  123. uint32 m_timeSyncTimer;
  124. uint32 m_timeSyncClient;
  125. uint32 m_timeSyncServer;
  126. +
  127. + float hasteMod;
  128. + public:
  129. +
  130. + float GetHasteMod() const { return hasteMod; }
  131. + void SetHasteMod(float val) { hasteMod = val; }
  132. + void ApplyHasteMod(int16 val, uint32 att, CombatRating cr, float speed);
  133. + void SetAttackTime(WeaponAttackType att, uint32 val);
  134.  
  135. InstanceTimeMap _instanceResetTimes;
  136. uint32 _pendingBindId;
  137. diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp
  138. index d2b7fc6..7d763e3 100644
  139. --- a/src/server/game/Entities/Unit/StatSystem.cpp
  140. +++ b/src/server/game/Entities/Unit/StatSystem.cpp
  141. @@ -480,27 +480,31 @@ void Player::UpdateShieldBlockValue()
  142. void Player::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float& min_damage, float& max_damage)
  143. {
  144. UnitMods unitMod;
  145. -
  146. + Item *Weapon = NULL;
  147. +
  148. switch (attType)
  149. {
  150. case BASE_ATTACK:
  151. default:
  152. + Weapon = m_items[EQUIPMENT_SLOT_MAINHAND];
  153. unitMod = UNIT_MOD_DAMAGE_MAINHAND;
  154. break;
  155. case OFF_ATTACK:
  156. + Weapon = m_items[EQUIPMENT_SLOT_OFFHAND];
  157. unitMod = UNIT_MOD_DAMAGE_OFFHAND;
  158. break;
  159. case RANGED_ATTACK:
  160. + Weapon = m_items[EQUIPMENT_SLOT_RANGED];
  161. unitMod = UNIT_MOD_DAMAGE_RANGED;
  162. break;
  163. }
  164.  
  165. - float att_speed = GetAPMultiplier(attType, normalized);
  166. -
  167. - float base_value = GetModifierValue(unitMod, BASE_VALUE) + GetTotalAttackPowerValue(attType)/ 14.0f * att_speed;
  168. - float base_pct = GetModifierValue(unitMod, BASE_PCT);
  169. - float total_value = GetModifierValue(unitMod, TOTAL_VALUE);
  170. - float total_pct = addTotalPct ? GetModifierValue(unitMod, TOTAL_PCT) : 1.0f;
  171. + float wep_speed =(!Weapon) ? 2200.00f : Weapon->GetTemplate()->Delay;
  172. + float base_value = GetModifierValue(unitMod, BASE_VALUE) + GetTotalAttackPowerValue(attType)/ 14.0f * (wep_speed/1000.00f);
  173. + float att_speed = GetAPMultiplier(attType,normalized);
  174. + float base_pct = GetModifierValue(unitMod, BASE_PCT);
  175. + float total_value = GetModifierValue(unitMod, TOTAL_VALUE);
  176. + float total_pct = addTotalPct ? GetModifierValue(unitMod, TOTAL_PCT) : 1.0f;
  177.  
  178. float weapon_mindamage = GetWeaponDamageRange(attType, MINDAMAGE);
  179. float weapon_maxdamage = GetWeaponDamageRange(attType, MAXDAMAGE);
  180. @@ -511,8 +515,8 @@ void Player::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bo
  181. if (lvl > 60)
  182. lvl = 60;
  183.  
  184. - weapon_mindamage = lvl*0.85f*att_speed;
  185. - weapon_maxdamage = lvl*1.25f*att_speed;
  186. + weapon_mindamage = lvl*3.0f*wep_speed/1000;
  187. + weapon_maxdamage = lvl*5.0f*wep_speed/1000;
  188. }
  189. else if (!CanUseAttackType(attType)) //check if player not in form but still can't use (disarm case)
  190. {
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement