- Timestamp:
- 11/19/08 13:23:03 (17 years ago)
- Location:
- trunk/src
- Files:
-
- 1 removed
- 11 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bindings/scripts/Makefile.am
r2 r13 41 41 include/sc_creature.h \ 42 42 include/sc_gossip.h \ 43 include/sc_grid_searchers.h \44 43 include/sc_instance.h \ 45 44 include/sc_item.h \ … … 420 419 done 421 420 421 -
trunk/src/bindings/scripts/VC71/71ScriptDev2.vcproj
r11 r13 1569 1569 </File> 1570 1570 <File 1571 RelativePath="..\include\sc_grid_searchers.h">1572 </File>1573 <File1574 1571 RelativePath="..\include\sc_instance.h"> 1575 1572 </File> -
trunk/src/bindings/scripts/VC80/80ScriptDev2.vcproj
r11 r13 2307 2307 <File 2308 2308 RelativePath="..\include\sc_gossip.h" 2309 >2310 </File>2311 <File2312 RelativePath="..\include\sc_grid_searchers.h"2313 2309 > 2314 2310 </File> -
trunk/src/bindings/scripts/VC90/90ScriptDev2.vcproj
r11 r13 2305 2305 <File 2306 2306 RelativePath="..\include\sc_gossip.h" 2307 >2308 </File>2309 <File2310 RelativePath="..\include\sc_grid_searchers.h"2311 2307 > 2312 2308 </File> -
trunk/src/bindings/scripts/include/precompiled.h
r2 r13 7 7 8 8 #include "../ScriptMgr.h" 9 #include "Cell.h" 10 #include "CellImpl.h" 11 #include "GridNotifiers.h" 12 #include "GridNotifiersImpl.h" 13 #include "Unit.h" 14 #include "GameObject.h" 9 15 #include "sc_creature.h" 10 16 #include "sc_gossip.h" 11 #include "sc_grid_searchers.h"12 17 #include "sc_instance.h" 13 18 -
trunk/src/bindings/scripts/include/sc_creature.cpp
r12 r13 514 514 Unit* pUnit = NULL; 515 515 516 M ostHPMissingInRange u_check(m_creature, range, MinHPDiff);517 MaNGOS::UnitLastSearcher<M ostHPMissingInRange> searcher(pUnit, u_check);516 MaNGOS::MostHPMissingInRange u_check(m_creature, range, MinHPDiff); 517 MaNGOS::UnitLastSearcher<MaNGOS::MostHPMissingInRange> searcher(pUnit, u_check); 518 518 519 519 /* … … 521 521 This means that if we only search grid then we cannot possibly return pets or players so this is safe 522 522 */ 523 TypeContainerVisitor<MaNGOS::UnitLastSearcher<M ostHPMissingInRange>, GridTypeMapContainer > grid_unit_searcher(searcher);523 TypeContainerVisitor<MaNGOS::UnitLastSearcher<MaNGOS::MostHPMissingInRange>, GridTypeMapContainer > grid_unit_searcher(searcher); 524 524 525 525 CellLock<GridReadGuard> cell_lock(cell, p); … … 537 537 std::list<Creature*> pList; 538 538 539 FriendlyCCedInRange u_check(m_creature, range);540 MaNGOS::CreatureListSearcher< FriendlyCCedInRange> searcher(pList, u_check);541 542 TypeContainerVisitor<MaNGOS::CreatureListSearcher< FriendlyCCedInRange>, GridTypeMapContainer > grid_creature_searcher(searcher);539 MaNGOS::FriendlyCCedInRange u_check(m_creature, range); 540 MaNGOS::CreatureListSearcher<MaNGOS::FriendlyCCedInRange> searcher(pList, u_check); 541 542 TypeContainerVisitor<MaNGOS::CreatureListSearcher<MaNGOS::FriendlyCCedInRange>, GridTypeMapContainer > grid_creature_searcher(searcher); 543 543 544 544 CellLock<GridReadGuard> cell_lock(cell, p); … … 557 557 std::list<Creature*> pList; 558 558 559 FriendlyMissingBuffInRange u_check(m_creature, range, spellid);560 MaNGOS::CreatureListSearcher< FriendlyMissingBuffInRange> searcher(pList, u_check);561 562 TypeContainerVisitor<MaNGOS::CreatureListSearcher< FriendlyMissingBuffInRange>, GridTypeMapContainer > grid_creature_searcher(searcher);559 MaNGOS::FriendlyMissingBuffInRange u_check(m_creature, range, spellid); 560 MaNGOS::CreatureListSearcher<MaNGOS::FriendlyMissingBuffInRange> searcher(pList, u_check); 561 562 TypeContainerVisitor<MaNGOS::CreatureListSearcher<MaNGOS::FriendlyMissingBuffInRange>, GridTypeMapContainer > grid_creature_searcher(searcher); 563 563 564 564 CellLock<GridReadGuard> cell_lock(cell, p); -
trunk/src/bindings/scripts/include/sc_creature.h
r2 r13 8 8 #include "CreatureAI.h" 9 9 #include "Creature.h" 10 11 //Spell targets used by SelectSpell12 enum SelectTarget13 {14 SELECT_TARGET_DONTCARE = 0, //All target types allowed15 16 SELECT_TARGET_SELF, //Only Self casting17 18 SELECT_TARGET_SINGLE_ENEMY, //Only Single Enemy19 SELECT_TARGET_AOE_ENEMY, //Only AoE Enemy20 SELECT_TARGET_ANY_ENEMY, //AoE or Single Enemy21 22 SELECT_TARGET_SINGLE_FRIEND, //Only Single Friend23 SELECT_TARGET_AOE_FRIEND, //Only AoE Friend24 SELECT_TARGET_ANY_FRIEND, //AoE or Single Friend25 };26 27 //Spell Effects used by SelectSpell28 enum SelectEffect29 {30 SELECT_EFFECT_DONTCARE = 0, //All spell effects allowed31 SELECT_EFFECT_DAMAGE, //Spell does damage32 SELECT_EFFECT_HEALING, //Spell does healing33 SELECT_EFFECT_AURA, //Spell applies an aura34 };35 36 //Selection method used by SelectTarget37 enum SelectAggroTarget38 {39 SELECT_TARGET_RANDOM = 0, //Just selects a random target40 SELECT_TARGET_TOPAGGRO, //Selects targes from top aggro to bottom41 SELECT_TARGET_BOTTOMAGGRO, //Selects targets from bottom aggro to top42 };43 10 44 11 struct MANGOS_DLL_DECL ScriptedAI : public CreatureAI -
trunk/src/bindings/scripts/scripts/zone/black_temple/boss_shade_of_akama.cpp
r6 r13 24 24 #include "precompiled.h" 25 25 #include "def_black_temple.h" 26 #include "sc_grid_searchers.h"27 26 28 27 struct Location … … 328 327 std::list<Creature*> ChannelerList; 329 328 330 AllCreaturesOfEntryInRange check(m_creature, CREATURE_CHANNELER, 50);331 MaNGOS::CreatureListSearcher< AllCreaturesOfEntryInRange> searcher(ChannelerList, check);332 TypeContainerVisitor<MaNGOS::CreatureListSearcher< AllCreaturesOfEntryInRange>, GridTypeMapContainer> visitor(searcher);329 MaNGOS::AllCreaturesOfEntryInRange check(m_creature, CREATURE_CHANNELER, 50); 330 MaNGOS::CreatureListSearcher<MaNGOS::AllCreaturesOfEntryInRange> searcher(ChannelerList, check); 331 TypeContainerVisitor<MaNGOS::CreatureListSearcher<MaNGOS::AllCreaturesOfEntryInRange>, GridTypeMapContainer> visitor(searcher); 333 332 334 333 CellLock<GridReadGuard> cell_lock(cell, pair); -
trunk/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp
r6 r13 317 317 // First get all creatures. 318 318 std::list<Creature*> creatures; 319 AllFriendlyCreaturesInGrid creature_check(m_creature);320 MaNGOS::CreatureListSearcher< AllFriendlyCreaturesInGrid> creature_searcher(creatures, creature_check);319 MaNGOS::AllFriendlyCreaturesInGrid creature_check(m_creature); 320 MaNGOS::CreatureListSearcher<MaNGOS::AllFriendlyCreaturesInGrid> creature_searcher(creatures, creature_check); 321 321 TypeContainerVisitor 322 <MaNGOS::CreatureListSearcher< AllFriendlyCreaturesInGrid>,322 <MaNGOS::CreatureListSearcher<MaNGOS::AllFriendlyCreaturesInGrid>, 323 323 GridTypeMapContainer> creature_visitor(creature_searcher); 324 324 325 325 // Then get all Ancient Gem Veins. NOTE: Grid Search will only be able to find those in the grid. 326 326 std::list<GameObject*> goList; 327 AllGameObjectsWithEntryInGrid go_check(185557);328 MaNGOS::GameObjectListSearcher< AllGameObjectsWithEntryInGrid> go_search(goList, go_check);327 MaNGOS::AllGameObjectsWithEntryInGrid go_check(185557); 328 MaNGOS::GameObjectListSearcher<MaNGOS::AllGameObjectsWithEntryInGrid> go_search(goList, go_check); 329 329 TypeContainerVisitor 330 <MaNGOS::GameObjectListSearcher< AllGameObjectsWithEntryInGrid>, GridTypeMapContainer> go_visit(go_search);330 <MaNGOS::GameObjectListSearcher<MaNGOS::AllGameObjectsWithEntryInGrid>, GridTypeMapContainer> go_visit(go_search); 331 331 332 332 CellLock<GridReadGuard> cell_lock(cell, pair); -
trunk/src/game/CreatureAI.h
r2 r13 32 32 #define TIME_INTERVAL_LOOK 5000 33 33 #define VISIBILITY_RANGE 10000 34 35 //Spell targets used by SelectSpell 36 enum SelectTarget 37 { 38 SELECT_TARGET_DONTCARE = 0, //All target types allowed 39 40 SELECT_TARGET_SELF, //Only Self casting 41 42 SELECT_TARGET_SINGLE_ENEMY, //Only Single Enemy 43 SELECT_TARGET_AOE_ENEMY, //Only AoE Enemy 44 SELECT_TARGET_ANY_ENEMY, //AoE or Single Enemy 45 46 SELECT_TARGET_SINGLE_FRIEND, //Only Single Friend 47 SELECT_TARGET_AOE_FRIEND, //Only AoE Friend 48 SELECT_TARGET_ANY_FRIEND, //AoE or Single Friend 49 }; 50 51 //Spell Effects used by SelectSpell 52 enum SelectEffect 53 { 54 SELECT_EFFECT_DONTCARE = 0, //All spell effects allowed 55 SELECT_EFFECT_DAMAGE, //Spell does damage 56 SELECT_EFFECT_HEALING, //Spell does healing 57 SELECT_EFFECT_AURA, //Spell applies an aura 58 }; 59 60 //Selection method used by SelectTarget 61 enum SelectAggroTarget 62 { 63 SELECT_TARGET_RANDOM = 0, //Just selects a random target 64 SELECT_TARGET_TOPAGGRO, //Selects targes from top aggro to bottom 65 SELECT_TARGET_BOTTOMAGGRO, //Selects targets from bottom aggro to top 66 }; 34 67 35 68 class MANGOS_DLL_SPEC CreatureAI -
trunk/src/game/GridNotifiers.h
r6 r13 710 710 }; 711 711 712 class NearestAssistCreatureInCreatureRangeCheck 713 { 714 public: 715 NearestAssistCreatureInCreatureRangeCheck(Creature* obj,Unit* enemy, float range) 716 : i_obj(obj), i_enemy(enemy), i_range(range) {} 717 718 bool operator()(Creature* u) 719 { 720 if(u->getFaction() == i_obj->getFaction() && !u->isInCombat() && !u->GetCharmerOrOwnerGUID() && u->IsHostileTo(i_enemy) && u->isAlive()&& i_obj->IsWithinDistInMap(u, i_range) && i_obj->IsWithinLOSInMap(u)) 721 { 722 i_range = i_obj->GetDistance(u); // use found unit range as new range limit for next check 723 return true; 724 } 725 return false; 726 } 727 float GetLastRange() const { return i_range; } 728 private: 729 Creature* const i_obj; 730 Unit* const i_enemy; 731 float i_range; 732 733 // prevent clone this object 734 NearestAssistCreatureInCreatureRangeCheck(NearestAssistCreatureInCreatureRangeCheck const&); 735 }; 736 712 737 class AnyAssistCreatureInRangeCheck 713 738 { … … 799 824 WorldObject const* i_obj; 800 825 float i_range; 826 }; 827 828 // Searchers used by ScriptedAI 829 class MostHPMissingInRange 830 { 831 public: 832 MostHPMissingInRange(Unit const* obj, float range, uint32 hp) : i_obj(obj), i_range(range), i_hp(hp) {} 833 bool operator()(Unit* u) 834 { 835 if(u->isAlive() && u->isInCombat() && !i_obj->IsHostileTo(u) && i_obj->IsWithinDistInMap(u, i_range) && u->GetMaxHealth() - u->GetHealth() > i_hp) 836 { 837 i_hp = u->GetMaxHealth() - u->GetHealth(); 838 return true; 839 } 840 return false; 841 } 842 private: 843 Unit const* i_obj; 844 float i_range; 845 uint32 i_hp; 846 }; 847 848 class FriendlyCCedInRange 849 { 850 public: 851 FriendlyCCedInRange(Unit const* obj, float range) : i_obj(obj), i_range(range) {} 852 bool operator()(Unit* u) 853 { 854 if(u->isAlive() && u->isInCombat() && !i_obj->IsHostileTo(u) && i_obj->IsWithinDistInMap(u, i_range) && 855 (u->isFeared() || u->isCharmed() || u->isFrozen() || u->hasUnitState(UNIT_STAT_STUNDED) || u->hasUnitState(UNIT_STAT_STUNDED) || u->hasUnitState(UNIT_STAT_CONFUSED))) 856 { 857 return true; 858 } 859 return false; 860 } 861 private: 862 Unit const* i_obj; 863 float i_range; 864 }; 865 866 class FriendlyMissingBuffInRange 867 { 868 public: 869 FriendlyMissingBuffInRange(Unit const* obj, float range, uint32 spellid) : i_obj(obj), i_range(range), i_spell(spellid) {} 870 bool operator()(Unit* u) 871 { 872 if(u->isAlive() && u->isInCombat() && !i_obj->IsHostileTo(u) && i_obj->IsWithinDistInMap(u, i_range) && 873 !(u->HasAura(i_spell, 0) || u->HasAura(i_spell, 1) || u->HasAura(i_spell, 2))) 874 { 875 return true; 876 } 877 return false; 878 } 879 private: 880 Unit const* i_obj; 881 float i_range; 882 uint32 i_spell; 883 }; 884 885 class AllFriendlyCreaturesInGrid 886 { 887 public: 888 AllFriendlyCreaturesInGrid(Unit const* obj) : pUnit(obj) {} 889 bool operator() (Unit* u) 890 { 891 if(u->isAlive() && u->GetVisibility() == VISIBILITY_ON && u->IsFriendlyTo(pUnit)) 892 return true; 893 894 return false; 895 } 896 private: 897 Unit const* pUnit; 898 }; 899 900 class AllGameObjectsWithEntryInGrid 901 { 902 public: 903 AllGameObjectsWithEntryInGrid(uint32 ent) : entry(ent) {} 904 bool operator() (GameObject* g) 905 { 906 if(g->GetEntry() == entry) 907 return true; 908 909 return false; 910 } 911 private: 912 uint32 entry; 913 }; 914 915 class AllCreaturesOfEntryInRange 916 { 917 public: 918 AllCreaturesOfEntryInRange(Unit const* obj, uint32 ent, float ran) : pUnit(obj), entry(ent), range(ran) {} 919 bool operator() (Unit* u) 920 { 921 if(u->GetEntry() == entry && pUnit->IsWithinDistInMap(u, range)) 922 return true; 923 924 return false; 925 } 926 private: 927 Unit const* pUnit; 928 uint32 entry; 929 float range; 801 930 }; 802 931