aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells
diff options
context:
space:
mode:
authorRat <gmstreetrat@gmail.com>2014-11-30 15:37:11 +0100
committerRat <gmstreetrat@gmail.com>2014-11-30 15:37:11 +0100
commit065e1ec3cd13bd1d3fb099c95ff30d6164bf5435 (patch)
tree049f78a5ee82aa92e3d83b06998e1b16dba30419 /src/server/game/Spells
parenteda9094226983fc719378af5c1eca1a7ce93428e (diff)
Core/Spells: some work on auras and packets
Diffstat (limited to 'src/server/game/Spells')
-rw-r--r--src/server/game/Spells/Auras/SpellAuraDefines.h109
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp2
-rw-r--r--src/server/game/Spells/Spell.cpp32
-rw-r--r--src/server/game/Spells/Spell.h6
-rw-r--r--src/server/game/Spells/SpellInfo.h5
5 files changed, 149 insertions, 5 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h
index 3c05c15a57d..e75a3424c2f 100644
--- a/src/server/game/Spells/Auras/SpellAuraDefines.h
+++ b/src/server/game/Spells/Auras/SpellAuraDefines.h
@@ -428,7 +428,114 @@ enum AuraType
SPELL_AURA_368 = 368, // Not used in 4.3.4
SPELL_AURA_ENABLE_POWER_BAR_TIMER = 369,
SPELL_AURA_SET_FAIR_FAR_CLIP = 370, // Overrides client's View Distance setting to max("Fair", current_setting)
- TOTAL_AURAS = 371 // 4.3.4
+ SPELL_AURA_371 = 371,
+ SPELL_AURA_372 = 372,
+ SPELL_AURA_373 = 373,
+ SPELL_AURA_374 = 374,
+ SPELL_AURA_375 = 375,
+ SPELL_AURA_376 = 376,
+ SPELL_AURA_377 = 377,
+ SPELL_AURA_378 = 378,
+ SPELL_AURA_379 = 379,
+ SPELL_AURA_380 = 380,
+ SPELL_AURA_381 = 381,
+ SPELL_AURA_382 = 382,
+ SPELL_AURA_383 = 383,
+ SPELL_AURA_384 = 384,
+ SPELL_AURA_385 = 385,
+ SPELL_AURA_386 = 386,
+ SPELL_AURA_387 = 387,
+ SPELL_AURA_388 = 388,
+ SPELL_AURA_389 = 389,
+ SPELL_AURA_390 = 390,
+ SPELL_AURA_391 = 391,
+ SPELL_AURA_392 = 392,
+ SPELL_AURA_393 = 393,
+ SPELL_AURA_394 = 394,
+ SPELL_AURA_395 = 395,
+ SPELL_AURA_396 = 396,
+ SPELL_AURA_397 = 397,
+ SPELL_AURA_398 = 398,
+ SPELL_AURA_399 = 399,
+ SPELL_AURA_400 = 400,
+ SPELL_AURA_401 = 401,
+ SPELL_AURA_402 = 402,
+ SPELL_AURA_403 = 403,
+ SPELL_AURA_404 = 404,
+ SPELL_AURA_405 = 405,
+ SPELL_AURA_406 = 406,
+ SPELL_AURA_407 = 407,
+ SPELL_AURA_408 = 408,
+ SPELL_AURA_409 = 409,
+ SPELL_AURA_410 = 410,
+ SPELL_AURA_411 = 411,
+ SPELL_AURA_412 = 412,
+ SPELL_AURA_413 = 413,
+ SPELL_AURA_414 = 414,
+ SPELL_AURA_415 = 415,
+ SPELL_AURA_416 = 416,
+ SPELL_AURA_417 = 417,
+ SPELL_AURA_418 = 418,
+ SPELL_AURA_419 = 419,
+ SPELL_AURA_420 = 420,
+ SPELL_AURA_421 = 421,
+ SPELL_AURA_422 = 422,
+ SPELL_AURA_423 = 423,
+ SPELL_AURA_424 = 424,
+ SPELL_AURA_425 = 425,
+ SPELL_AURA_426 = 426,
+ SPELL_AURA_427 = 427,
+ SPELL_AURA_428 = 428,
+ SPELL_AURA_429 = 429,
+ SPELL_AURA_430 = 430,
+ SPELL_AURA_431 = 431,
+ SPELL_AURA_432 = 432,
+ SPELL_AURA_433 = 433,
+ SPELL_AURA_434 = 434,
+ SPELL_AURA_435 = 435,
+ SPELL_AURA_436 = 436,
+ SPELL_AURA_437 = 437,
+ SPELL_AURA_438 = 438,
+ SPELL_AURA_439 = 439,
+ SPELL_AURA_440 = 440,
+ SPELL_AURA_441 = 441,
+ SPELL_AURA_442 = 442,
+ SPELL_AURA_443 = 443,
+ SPELL_AURA_444 = 444,
+ SPELL_AURA_445 = 445,
+ SPELL_AURA_446 = 446,
+ SPELL_AURA_447 = 447,
+ SPELL_AURA_448 = 448,
+ SPELL_AURA_449 = 449,
+ SPELL_AURA_450 = 450,
+ SPELL_AURA_451 = 451,
+ SPELL_AURA_452 = 452,
+ SPELL_AURA_453 = 453,
+ SPELL_AURA_454 = 454,
+ SPELL_AURA_455 = 455,
+ SPELL_AURA_456 = 456,
+ SPELL_AURA_457 = 457,
+ SPELL_AURA_458 = 458,
+ SPELL_AURA_459 = 459,
+ SPELL_AURA_460 = 460,
+ SPELL_AURA_461 = 461,
+ SPELL_AURA_462 = 462,
+ SPELL_AURA_463 = 463,
+ SPELL_AURA_464 = 464,
+ SPELL_AURA_465 = 465,
+ SPELL_AURA_466 = 466,
+ SPELL_AURA_467 = 467,
+ SPELL_AURA_468 = 468,
+ SPELL_AURA_469 = 469,
+ SPELL_AURA_471 = 471,
+ SPELL_AURA_472 = 472,
+ SPELL_AURA_473 = 473,
+ SPELL_AURA_474 = 474,
+ SPELL_AURA_475 = 475,
+ SPELL_AURA_476 = 476,
+ SPELL_AURA_477 = 477,
+ SPELL_AURA_478 = 478,
+ TOTAL_AURAS = 479 // 4.3.4
};
enum AuraObjectType
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index 6451111d0b8..1acddcc5523 100644
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -227,7 +227,7 @@ void AuraApplication::ClientUpdate(bool remove)
{
_needClientUpdate = false;
- WorldPackets::Spell::SendAuraUpdate update;
+ WorldPackets::Spells::SendAuraUpdate update;
update.Init(false, GetTarget()->GetGUID(), 1);
update.BuildUpdatePacket(this, remove, GetTarget()->getLevel()); // TODO 6.x should be caster's level
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index bc386f0ba65..0a55735eae5 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -57,6 +57,7 @@
#include "DB2Stores.h"
#include "Battlefield.h"
#include "BattlefieldMgr.h"
+#include "SpellPackets.h"
extern pEffect SpellEffects[TOTAL_SPELL_EFFECTS];
@@ -118,6 +119,28 @@ SpellCastTargets::SpellCastTargets() : m_elevation(0), m_speed(0), m_strTarget()
m_targetMask = 0;
}
+SpellCastTargets::SpellCastTargets(Unit* caster, uint32 targetMask, ObjectGuid targetGuid, ObjectGuid itemTargetGuid, ObjectGuid srcTransportGuid, ObjectGuid destTransportGuid, Position srcPos, Position destPos, float elevation, float missileSpeed, std::string targetString) :
+ m_targetMask(targetMask), m_objectTargetGUID(targetGuid), m_itemTargetGUID(itemTargetGuid), m_elevation(elevation), m_speed(missileSpeed), m_strTarget(targetString)
+{
+ m_objectTarget = NULL;
+ m_itemTarget = NULL;
+ m_itemTargetEntry = 0;
+
+ m_src._transportGUID = srcTransportGuid;
+ if (m_src._transportGUID != ObjectGuid::Empty)
+ m_src._transportOffset.Relocate(srcPos);
+ else
+ m_src._position.Relocate(srcPos);
+
+ m_dst._transportGUID = destTransportGuid;
+ if (m_dst._transportGUID != ObjectGuid::Empty)
+ m_dst._transportOffset.Relocate(destPos);
+ else
+ m_dst._position.Relocate(destPos);
+
+ Update(caster);
+}
+
SpellCastTargets::~SpellCastTargets() { }
void SpellCastTargets::Read(ByteBuffer& data, Unit* caster)
@@ -3841,7 +3864,10 @@ void Spell::SendSpellStart()
if (m_spellInfo->RuneCostID && m_spellInfo->PowerType == POWER_RUNES)
castFlags |= CAST_FLAG_NO_GCD; // not needed, but Blizzard sends it
- WorldPacket data(SMSG_SPELL_START, (8+8+4+4+2));
+ WorldPackets::Spells::SendSpellStart spellStart;
+ spellStart.spell = this;
+
+ /*WorldPacket data(SMSG_SPELL_START, (8+8+4+4+2));
if (m_CastItem)
data << m_CastItem->GetPackGUID();
else
@@ -3901,9 +3927,9 @@ void Spell::SendSpellStart()
data << uint8(0); // unkByte
// if (unkByte == 2)
// data.append(0);
- }
+ }*/
- m_caster->SendMessageToSet(&data, true);
+ m_caster->SendMessageToSet(spellStart.Write(), true);
}
void Spell::SendSpellGo()
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index 890ebdf4081..8accaf896d0 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -99,6 +99,7 @@ class SpellCastTargets
{
public:
SpellCastTargets();
+ SpellCastTargets(Unit* caster, uint32 targetMask, ObjectGuid targetGuid, ObjectGuid itemTargetGuid, ObjectGuid srcTransportGuid, ObjectGuid destTransportGuid, Position srcPos, Position destPos, float elevation, float missileSpeed, std::string targetString);
~SpellCastTargets();
void Read(ByteBuffer& data, Unit* caster);
@@ -168,6 +169,7 @@ class SpellCastTargets
void Update(Unit* caster);
void OutDebug() const;
+ std::string GetTargetString() const { return m_strTarget; }
private:
uint32 m_targetMask;
@@ -516,6 +518,10 @@ class Spell
Spell** m_selfContainer; // pointer to our spell container (if applicable)
+ SpellInfo const* GetTriggeredByAuraSpell() const { return m_triggeredByAuraSpell; }
+
+ int32 GetTimer() const { return m_timer; }
+
protected:
bool HasGlobalCooldown() const;
void TriggerGlobalCooldown();
diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h
index a49f956bc57..413eb9d39a5 100644
--- a/src/server/game/Spells/SpellInfo.h
+++ b/src/server/game/Spells/SpellInfo.h
@@ -65,6 +65,11 @@ enum SpellCastTargetFlags
TARGET_FLAG_DEST_TARGET = 0x00040000, // sometimes appears with DEST_TARGET spells (may appear or not for a given spell)
TARGET_FLAG_EXTRA_TARGETS = 0x00080000, // uint32 counter, loop { vec3 - screen position (?), guid }, not used so far
TARGET_FLAG_UNIT_PASSENGER = 0x00100000, // guessed, used to validate target (if vehicle passenger)
+ TARGET_FLAG_UNK400000 = 0X00400000,
+ TARGET_FLAG_UNK1000000 = 0X01000000,
+ TARGET_FLAG_UNK4000000 = 0X04000000,
+ TARGET_FLAG_UNK10000000 = 0X10000000,
+ TARGET_FLAG_UNK40000000 = 0X40000000,
TARGET_FLAG_UNIT_MASK = TARGET_FLAG_UNIT | TARGET_FLAG_UNIT_RAID | TARGET_FLAG_UNIT_PARTY
| TARGET_FLAG_UNIT_ENEMY | TARGET_FLAG_UNIT_ALLY | TARGET_FLAG_UNIT_DEAD | TARGET_FLAG_UNIT_MINIPET | TARGET_FLAG_UNIT_PASSENGER,