Changeset 108 for trunk/src/game/Spell.h
- Timestamp:
- 11/19/08 13:36:37 (17 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/game/Spell.h
r102 r108 76 76 PUSH_SELF_CENTER, 77 77 PUSH_DEST_CENTER, 78 PUSH_TARGET_CENTER79 78 }; 80 79 … … 83 82 namespace Trinity 84 83 { 85 struct SpellNotifierPlayer;86 84 struct SpellNotifierCreatureAndPlayer; 87 85 } … … 181 179 }; 182 180 181 enum ReplenishType 182 { 183 REPLENISH_UNDEFINED = 0, 184 REPLENISH_HEALTH = 20, 185 REPLENISH_MANA = 21, 186 REPLENISH_RAGE = 22 187 }; 188 189 enum SpellTargets 190 { 191 SPELL_TARGETS_FRIENDLY, 192 SPELL_TARGETS_AOE_DAMAGE, 193 SPELL_TARGETS_ENTRY 194 }; 195 183 196 #define SPELL_SPELL_CHANNEL_UPDATE_INTERVAL 1000 184 197 … … 187 200 class Spell 188 201 { 189 friend struct Trinity::SpellNotifierPlayer;190 202 friend struct Trinity::SpellNotifierCreatureAndPlayer; 191 203 public: … … 498 510 void DoAllEffectOnTarget(ItemTargetInfo *target); 499 511 bool IsAliveUnitPresentInTargetList(); 512 void SearchAreaTarget(std::list<Unit*> &data, float radius, const uint32 &type, 513 SpellTargets TargetType, uint32 entry = 0); 514 Unit* SearchNearbyTarget(float radius, SpellTargets TargetType, uint32 entry = 0); 515 void SearchChainTarget(std::list<Unit*> &data, Unit* pUnitTarget, float max_range, uint32 unMaxTargets); 500 516 // ------------------------------------------- 501 517 … … 519 535 }; 520 536 521 enum ReplenishType522 {523 REPLENISH_UNDEFINED = 0,524 REPLENISH_HEALTH = 20,525 REPLENISH_MANA = 21,526 REPLENISH_RAGE = 22527 };528 529 enum SpellTargets530 {531 SPELL_TARGETS_HOSTILE,532 SPELL_TARGETS_NOT_FRIENDLY,533 SPELL_TARGETS_NOT_HOSTILE,534 SPELL_TARGETS_FRIENDLY,535 SPELL_TARGETS_AOE_DAMAGE536 };537 538 537 namespace Trinity 539 538 { 540 struct TRINITY_DLL_DECL SpellNotifierPlayer541 {542 std::list<Unit*> &i_data;543 Spell &i_spell;544 const uint32& i_index;545 float i_radius;546 Unit* i_originalCaster;547 548 SpellNotifierPlayer(Spell &spell, std::list<Unit*> &data, const uint32 &i, float radius)549 : i_data(data), i_spell(spell), i_index(i), i_radius(radius)550 {551 i_originalCaster = i_spell.GetOriginalCaster();552 }553 554 void Visit(PlayerMapType &m)555 {556 if(!i_originalCaster)557 return;558 559 for(PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr)560 {561 Player * pPlayer = itr->getSource();562 if( !pPlayer->isAlive() || pPlayer->isInFlight())563 continue;564 565 if( i_originalCaster->IsFriendlyTo(pPlayer) )566 continue;567 568 if( pPlayer->GetDistance(i_spell.m_targets.m_destX, i_spell.m_targets.m_destY, i_spell.m_targets.m_destZ) < i_radius )569 i_data.push_back(pPlayer);570 }571 }572 template<class SKIP> void Visit(GridRefManager<SKIP> &) {}573 };574 575 539 struct TRINITY_DLL_DECL SpellNotifierCreatureAndPlayer 576 540 { … … 581 545 SpellTargets i_TargetType; 582 546 Unit* i_originalCaster; 547 uint32 i_entry; 583 548 584 549 SpellNotifierCreatureAndPlayer(Spell &spell, std::list<Unit*> &data, float radius, const uint32 &type, 585 SpellTargets TargetType = SPELL_TARGETS_ NOT_FRIENDLY)586 : i_data(&data), i_spell(spell), i_push_type(type), i_radius(radius), i_TargetType(TargetType) 550 SpellTargets TargetType = SPELL_TARGETS_AOE_DAMAGE, uint32 entry = 0) 551 : i_data(&data), i_spell(spell), i_push_type(type), i_radius(radius), i_TargetType(TargetType), i_entry(entry) 587 552 { 588 553 i_originalCaster = spell.GetOriginalCaster(); … … 603 568 switch (i_TargetType) 604 569 { 605 case SPELL_TARGETS_HOSTILE:606 if (!itr->getSource()->isTargetableForAttack() || !i_originalCaster->IsHostileTo( itr->getSource() ))607 continue;608 break;609 case SPELL_TARGETS_NOT_FRIENDLY:610 if (!itr->getSource()->isTargetableForAttack() || i_originalCaster->IsFriendlyTo( itr->getSource() ))611 continue;612 break;613 case SPELL_TARGETS_NOT_HOSTILE:614 if (!itr->getSource()->isTargetableForAttack() || i_originalCaster->IsHostileTo( itr->getSource() ))615 continue;616 break;617 570 case SPELL_TARGETS_FRIENDLY: 618 571 if (!itr->getSource()->isTargetableForAttack() || !i_originalCaster->IsFriendlyTo( itr->getSource() )) … … 638 591 continue; 639 592 } 640 } 641 break; 593 }break; 594 case SPELL_TARGETS_ENTRY: 595 { 596 if(itr->getSource()->GetTypeId()!=TYPEID_UNIT || itr->getSource()->GetEntry()!= i_entry) 597 continue; 598 }break; 642 599 default: continue; 643 600 } … … 661 618 i_data->push_back(itr->getSource()); 662 619 break; 663 case PUSH_TARGET_CENTER:664 if(i_spell.m_targets.getUnitTarget()->IsWithinDistInMap((Unit*)(itr->getSource()), i_radius))665 i_data->push_back(itr->getSource());666 break;667 620 } 668 621 }