AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
Unit.cpp File Reference
#include "Unit.h"
#include "AbstractFollower.h"
#include "AreaDefines.h"
#include "ArenaSpectator.h"
#include "Battlefield.h"
#include "BattlefieldMgr.h"
#include "Battleground.h"
#include "CellImpl.h"
#include "CharacterCache.h"
#include "CharmInfo.h"
#include "Chat.h"
#include "ChatPackets.h"
#include "ChatTextBuilder.h"
#include "CombatPackets.h"
#include "Common.h"
#include "ConditionMgr.h"
#include "Creature.h"
#include "CreatureAIImpl.h"
#include "CreatureGroups.h"
#include "DisableMgr.h"
#include "DynamicVisibility.h"
#include "Errors.h"
#include "GameObjectAI.h"
#include "GameTime.h"
#include "GridNotifiersImpl.h"
#include "Group.h"
#include "Log.h"
#include "MapMgr.h"
#include "MoveSpline.h"
#include "MoveSplineInit.h"
#include "MovementGenerator.h"
#include "ObjectAccessor.h"
#include "ObjectMgr.h"
#include "OutdoorPvP.h"
#include "PassiveAI.h"
#include "Pet.h"
#include "PetAI.h"
#include "PetPackets.h"
#include "Player.h"
#include "ReputationMgr.h"
#include "ScriptMgr.h"
#include "SharedDefines.h"
#include "Spell.h"
#include "SpellAuraDefines.h"
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellInfo.h"
#include "SpellMgr.h"
#include "TemporarySummon.h"
#include "Totem.h"
#include "TotemAI.h"
#include "Transport.h"
#include "UpdateFieldFlags.h"
#include "UpdateFields.h"
#include "Util.h"
#include "Vehicle.h"
#include "World.h"
#include "WorldPacket.h"
#include <algorithm>
#include <cmath>
#include <limits>

Go to the source code of this file.

Classes

class  SplineHandler
 
class  AuraMunchingQueue
 

Functions

void ApplyMoveSpeedRates (float npcRate, float playerRate)
 
void createProcFlags (SpellInfo const *spellInfo, WeaponAttackType attackType, bool positive, uint32 &procAttacker, uint32 &procVictim)
 
void ApplyPercentModFloatVar (float &var, float val, bool apply)
 

Variables

static constexpr std::array< float, MAX_MOVE_TYPE > DefaultMoveSpeed
 
std::array< float, MAX_MOVE_TYPE > baseMoveSpeed = DefaultMoveSpeed
 
std::array< float, MAX_MOVE_TYPE > playerBaseMoveSpeed = DefaultMoveSpeed
 

Function Documentation

◆ ApplyMoveSpeedRates()

void ApplyMoveSpeedRates ( float  npcRate,
float  playerRate 
)
98{
99 for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i)
100 {
101 baseMoveSpeed[i] = DefaultMoveSpeed[i] * npcRate;
102 playerBaseMoveSpeed[i] = DefaultMoveSpeed[i] * playerRate;
103 }
104}
std::uint8_t uint8
Definition Define.h:109
#define MAX_MOVE_TYPE
Definition UnitDefines.h:367
std::array< float, MAX_MOVE_TYPE > playerBaseMoveSpeed
Definition Unit.cpp:95
static constexpr std::array< float, MAX_MOVE_TYPE > DefaultMoveSpeed
Definition Unit.cpp:81
std::array< float, MAX_MOVE_TYPE > baseMoveSpeed
Definition Unit.cpp:94

References baseMoveSpeed, DefaultMoveSpeed, MAX_MOVE_TYPE, and playerBaseMoveSpeed.

Referenced by World::LoadConfigSettings(), TEST_F(), and TEST_F().

◆ ApplyPercentModFloatVar()

void ApplyPercentModFloatVar ( float &  var,
float  val,
bool  apply 
)
13131{
13132 var *= (apply ? (100.0f + val) / 100.0f : 100.0f / (100.0f + val));
13133}
void apply(T *val)
Definition ByteConverter.h:40

Referenced by Unit::ApplyAttackTimePercentMod(), and Unit::ApplyCastTimePercentMod().

◆ createProcFlags()

void createProcFlags ( SpellInfo const *  spellInfo,
WeaponAttackType  attackType,
bool  positive,
uint32 &  procAttacker,
uint32 &  procVictim 
)
12370{
12371 if (spellInfo)
12372 {
12373 switch (spellInfo->DmgClass)
12374 {
12376 if (positive)
12377 {
12380 }
12381 else
12382 {
12385 }
12386 break;
12388 if (positive)
12389 {
12392 }
12393 else
12394 {
12397 }
12398 break;
12401 if (attackType == OFF_ATTACK)
12402 procAttacker |= PROC_FLAG_DONE_OFFHAND_ATTACK;
12403 else
12404 procAttacker |= PROC_FLAG_DONE_MAINHAND_ATTACK;
12406 break;
12408 // Auto attack
12409 if (spellInfo->HasAttribute(SPELL_ATTR2_AUTO_REPEAT))
12410 {
12411 procAttacker = PROC_FLAG_DONE_RANGED_AUTO_ATTACK;
12413 }
12414 else // Ranged spell attack
12415 {
12418 }
12419 break;
12420 default:
12421 if (spellInfo->EquippedItemClass == ITEM_CLASS_WEAPON &&
12422 spellInfo->EquippedItemSubClassMask & (1 << ITEM_SUBCLASS_WEAPON_WAND)
12423 && spellInfo->HasAttribute(SPELL_ATTR2_AUTO_REPEAT)) // Wands auto attack
12424 {
12425 procAttacker = PROC_FLAG_DONE_RANGED_AUTO_ATTACK;
12427 }
12428 break;
12429 }
12430 }
12431 else if (attackType == BASE_ATTACK)
12432 {
12435 }
12436 else if (attackType == OFF_ATTACK)
12437 {
12440 }
12441}
@ ITEM_SUBCLASS_WEAPON_WAND
Definition ItemTemplate.h:363
@ ITEM_CLASS_WEAPON
Definition ItemTemplate.h:293
@ SPELL_ATTR2_AUTO_REPEAT
Definition SharedDefines.h:449
@ SPELL_DAMAGE_CLASS_RANGED
Definition SharedDefines.h:1552
@ SPELL_DAMAGE_CLASS_MAGIC
Definition SharedDefines.h:1550
@ SPELL_DAMAGE_CLASS_NONE
Definition SharedDefines.h:1549
@ SPELL_DAMAGE_CLASS_MELEE
Definition SharedDefines.h:1551
@ PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS
Definition SpellMgr.h:122
@ PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS
Definition SpellMgr.h:131
@ PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK
Definition SpellMgr.h:120
@ PROC_FLAG_DONE_MELEE_AUTO_ATTACK
Definition SpellMgr.h:113
@ PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS
Definition SpellMgr.h:125
@ PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS
Definition SpellMgr.h:116
@ PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG
Definition SpellMgr.h:135
@ PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS
Definition SpellMgr.h:123
@ PROC_FLAG_DONE_MAINHAND_ATTACK
Definition SpellMgr.h:143
@ PROC_FLAG_DONE_RANGED_AUTO_ATTACK
Definition SpellMgr.h:119
@ PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG
Definition SpellMgr.h:129
@ PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG
Definition SpellMgr.h:128
@ PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS
Definition SpellMgr.h:132
@ PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK
Definition SpellMgr.h:114
@ PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS
Definition SpellMgr.h:126
@ PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS
Definition SpellMgr.h:117
@ PROC_FLAG_DONE_OFFHAND_ATTACK
Definition SpellMgr.h:144
@ PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG
Definition SpellMgr.h:134
@ OFF_ATTACK
Definition Unit.h:224
@ BASE_ATTACK
Definition Unit.h:223

References BASE_ATTACK, SpellInfo::DmgClass, SpellInfo::EquippedItemClass, SpellInfo::EquippedItemSubClassMask, SpellInfo::HasAttribute(), ITEM_CLASS_WEAPON, ITEM_SUBCLASS_WEAPON_WAND, OFF_ATTACK, PROC_FLAG_DONE_MAINHAND_ATTACK, PROC_FLAG_DONE_MELEE_AUTO_ATTACK, PROC_FLAG_DONE_OFFHAND_ATTACK, PROC_FLAG_DONE_RANGED_AUTO_ATTACK, PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG, PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS, PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS, PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG, PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS, PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS, PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK, PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK, PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG, PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS, PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS, PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG, PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS, PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS, SPELL_ATTR2_AUTO_REPEAT, SPELL_DAMAGE_CLASS_MAGIC, SPELL_DAMAGE_CLASS_MELEE, SPELL_DAMAGE_CLASS_NONE, and SPELL_DAMAGE_CLASS_RANGED.

Referenced by Unit::CalcAbsorbResist().

Variable Documentation

◆ baseMoveSpeed

◆ DefaultMoveSpeed

constexpr std::array<float, MAX_MOVE_TYPE> DefaultMoveSpeed
staticconstexpr
Initial value:
=
{
2.5f,
7.0f,
4.5f,
4.722222f,
2.5f,
3.141594f,
7.0f,
4.5f,
3.14f
}
82{
83 2.5f, // MOVE_WALK
84 7.0f, // MOVE_RUN
85 4.5f, // MOVE_RUN_BACK
86 4.722222f, // MOVE_SWIM
87 2.5f, // MOVE_SWIM_BACK
88 3.141594f, // MOVE_TURN_RATE
89 7.0f, // MOVE_FLIGHT
90 4.5f, // MOVE_FLIGHT_BACK
91 3.14f // MOVE_PITCH_RATE
92};

Referenced by ApplyMoveSpeedRates().

◆ playerBaseMoveSpeed