Merge [SD2]

r1086 Add long time needed grid search functions for closest creature and gameobject - skip, we have better function in core
r1087 Remove no longer needed grid search code and use functions instead.

--HG--
branch : trunk
This commit is contained in:
Kudlaty
2009-06-29 06:31:05 +02:00
parent 229dbd814f
commit 0df76804c4
6 changed files with 28 additions and 136 deletions
@@ -1648,30 +1648,15 @@ struct TRINITY_DLL_DECL cage_trap_triggerAI : public ScriptedAI
} }
}; };
bool GOHello_cage_trap(Player* plr, GameObject* go) bool GOHello_cage_trap(Player* pPlayer, GameObject* pGo)
{ {
float x, y, z; float x, y, z;
plr->GetPosition(x, y, z); pPlayer->GetPosition(x, y, z);
Creature* trigger = NULL;
CellPair pair(Trinity::ComputeCellPair(x, y));
Cell cell(pair);
cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
// Grid search for nearest live creature of entry 23304 within 10 yards // Grid search for nearest live creature of entry 23304 within 10 yards
Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck check(*plr, 23304, true, 10); if(Creature* pTrigger = pGo->FindNearestCreature(23304, 10.0f))
Trinity::CreatureLastSearcher<Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck> searcher(plr, trigger, check); CAST_AI(cage_trap_triggerAI, pTrigger->AI())->Active = true;
pGo->SetGoState(GO_STATE_ACTIVE);
TypeContainerVisitor<Trinity::CreatureLastSearcher<Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck>, GridTypeMapContainer> cSearcher(searcher);
CellLock<GridReadGuard> cell_lock(cell, pair);
cell_lock->Visit(cell_lock, cSearcher, *(plr->GetMap()));
if(trigger)
CAST_AI(cage_trap_triggerAI, trigger->AI())->Active = true;
go->SetGoState(GO_STATE_ACTIVE);
return true; return true;
} }
@@ -133,26 +133,6 @@ struct TRINITY_DLL_DECL boss_warlord_kalithreshAI : public ScriptedAI
} }
} }
Creature* SelectCreatureInGrid(uint32 entry, float range)
{
Creature* pCreature = NULL;
CellPair pair(Trinity::ComputeCellPair(m_creature->GetPositionX(), m_creature->GetPositionY()));
Cell cell(pair);
cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck creature_check(*m_creature, entry, true, range);
Trinity::CreatureLastSearcher<Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck> searcher(m_creature, pCreature, creature_check);
TypeContainerVisitor<Trinity::CreatureLastSearcher<Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck>, GridTypeMapContainer> creature_searcher(searcher);
CellLock<GridReadGuard> cell_lock(cell, pair);
cell_lock->Visit(cell_lock, creature_searcher,*(m_creature->GetMap()));
return pCreature;
}
void SpellHit(Unit *caster, const SpellEntry *spell) void SpellHit(Unit *caster, const SpellEntry *spell)
{ {
//hack :( //hack :(
@@ -177,8 +157,7 @@ struct TRINITY_DLL_DECL boss_warlord_kalithreshAI : public ScriptedAI
if (Rage_Timer < diff) if (Rage_Timer < diff)
{ {
Creature* distiller = SelectCreatureInGrid(17954, 100); if (Creature* distiller = me->FindNearestCreature(17954, 100.0f))
if (distiller)
{ {
DoScriptText(SAY_REGEN, m_creature); DoScriptText(SAY_REGEN, m_creature);
DoCast(m_creature,SPELL_WARLORDS_RAGE); DoCast(m_creature,SPELL_WARLORDS_RAGE);
@@ -497,24 +497,11 @@ CreatureAI* GetAI_npc_secondTrial(Creature *_Creature)
## go_second_trial ## go_second_trial
######*/ ######*/
bool GOHello_go_second_trial(Player *player, GameObject* _GO) bool GOHello_go_second_trial(Player *player, GameObject* pGO)
{ {
// find spawn :: master_kelerun_bloodmourn // find spawn :: master_kelerun_bloodmourn
CellPair p(Trinity::ComputeCellPair(_GO->GetPositionX(), _GO->GetPositionY())); if (Creature* pCreature = pGO->FindNearestCreature(MASTER_KELERUN_BLOODMOURN, 30.0f))
Cell cell(p); CAST_AI(master_kelerun_bloodmournAI, pCreature->AI())->StartEvent();
cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
CellLock<GridReadGuard> cell_lock(cell, p);
Creature* event_controller = NULL;
Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck u_check(*_GO, MASTER_KELERUN_BLOODMOURN, true, 30);
Trinity::CreatureLastSearcher<Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck> searcher(player, event_controller, u_check);
TypeContainerVisitor<Trinity::CreatureLastSearcher<Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck>, GridTypeMapContainer > grid_unit_searcher(searcher);
//cell_lock->Visit(cell_lock, grid_unit_searcher, *MapManager::Instance().GetMap(_GO->GetMap(), _GO));
cell_lock->Visit(cell_lock, grid_unit_searcher, *(_GO->GetMap()));
if ( event_controller )
CAST_AI(master_kelerun_bloodmournAI, event_controller->AI())->StartEvent();
return true; return true;
} }
@@ -169,8 +169,7 @@ struct TRINITY_DLL_DECL npc_ranger_lilathaAI : public npc_escortAI
case 0: case 0:
{ {
m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
GameObject* Cage = me->FindNearestGameObject(GO_CAGE, 20); if(GameObject* Cage = me->FindNearestGameObject(GO_CAGE, 20))
if(Cage)
Cage->SetGoState(GO_STATE_ACTIVE); Cage->SetGoState(GO_STATE_ACTIVE);
DoScriptText(SAY_START, m_creature, player); DoScriptText(SAY_START, m_creature, player);
break; break;
@@ -391,27 +391,6 @@ struct TRINITY_DLL_DECL npc_commander_dawnforgeAI : public ScriptedAI
void EnterCombat(Unit *who) { } void EnterCombat(Unit *who) { }
//Select any creature in a grid
Creature* SelectCreatureInGrid(uint32 entry, float range)
{
Creature* pCreature = NULL;
CellPair pair(Trinity::ComputeCellPair(m_creature->GetPositionX(), m_creature->GetPositionY()));
Cell cell(pair);
cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck creature_check(*m_creature, entry, true, range);
Trinity::CreatureLastSearcher<Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck> searcher(m_creature, pCreature, creature_check);
TypeContainerVisitor<Trinity::CreatureLastSearcher<Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck>, GridTypeMapContainer> creature_searcher(searcher);
CellLock<GridReadGuard> cell_lock(cell, pair);
cell_lock->Visit(cell_lock, creature_searcher,*(m_creature->GetMap()));
return pCreature;
}
void JustSummoned(Creature *summoned) void JustSummoned(Creature *summoned)
{ {
pathaleonGUID = summoned->GetGUID(); pathaleonGUID = summoned->GetGUID();
@@ -473,7 +452,7 @@ struct TRINITY_DLL_DECL npc_commander_dawnforgeAI : public ScriptedAI
{ {
if (!isEvent) if (!isEvent)
{ {
Creature *ardonis = SelectCreatureInGrid(CreatureEntry[0], 10.0f); Creature* ardonis = me->FindNearestCreature(CreatureEntry[0], 10.0f);
if (!ardonis) if (!ardonis)
return false; return false;
@@ -627,26 +606,6 @@ CreatureAI* GetAI_npc_commander_dawnforge(Creature* _Creature)
return new npc_commander_dawnforgeAI(_Creature); return new npc_commander_dawnforgeAI(_Creature);
} }
Creature* SearchDawnforge(Player *source, uint32 entry, float range)
{
Creature* pCreature = NULL;
CellPair pair(Trinity::ComputeCellPair(source->GetPositionX(), source->GetPositionY()));
Cell cell(pair);
cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck creature_check(*source, entry, true, range);
Trinity::CreatureLastSearcher<Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck> searcher(source, pCreature, creature_check);
TypeContainerVisitor<Trinity::CreatureLastSearcher<Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck>, GridTypeMapContainer> creature_searcher(searcher);
CellLock<GridReadGuard> cell_lock(cell, pair);
cell_lock->Visit(cell_lock, creature_searcher,*(source->GetMap()));
return pCreature;
}
bool AreaTrigger_at_commander_dawnforge(Player *player, AreaTriggerEntry *at) bool AreaTrigger_at_commander_dawnforge(Player *player, AreaTriggerEntry *at)
{ {
//if player lost aura or not have at all, we should not try start event. //if player lost aura or not have at all, we should not try start event.
@@ -655,7 +614,7 @@ bool AreaTrigger_at_commander_dawnforge(Player *player, AreaTriggerEntry *at)
if (player->isAlive() && player->GetQuestStatus(QUEST_INFO_GATHERING) == QUEST_STATUS_INCOMPLETE) if (player->isAlive() && player->GetQuestStatus(QUEST_INFO_GATHERING) == QUEST_STATUS_INCOMPLETE)
{ {
Creature* Dawnforge = SearchDawnforge(player, CreatureEntry[1], 30.0f); Creature* Dawnforge = player->FindNearestCreature(CreatureEntry[1], 30.0f);
if (!Dawnforge) if (!Dawnforge)
return false; return false;
@@ -85,55 +85,38 @@ bool QuestAccept_npc_calvin_montague(Player* player, Creature* creature, Quest c
## go_mausoleum_trigger ## go_mausoleum_trigger
######*/ ######*/
#define QUEST_ULAG 1819 enum
#define C_ULAG 6390
#define GO_TRIGGER 104593
#define GO_DOOR 176594
GameObject* SearchMausoleumGo(Unit *source, uint32 entry, float range)
{ {
GameObject* pGo = NULL; QUEST_ULAG = 1819,
NPC_ULAG = 6390,
GO_TRIGGER = 104593,
GO_DOOR = 176594
};
CellPair pair(Trinity::ComputeCellPair(source->GetPositionX(), source->GetPositionY())); bool GOHello_go_mausoleum_door(Player* pPlayer, GameObject* pGo)
Cell cell(pair);
cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::NearestGameObjectEntryInObjectRangeCheck go_check(*source, entry, range);
Trinity::GameObjectLastSearcher<Trinity::NearestGameObjectEntryInObjectRangeCheck> searcher(source, pGo, go_check);
TypeContainerVisitor<Trinity::GameObjectLastSearcher<Trinity::NearestGameObjectEntryInObjectRangeCheck>, GridTypeMapContainer> go_searcher(searcher);
CellLock<GridReadGuard> cell_lock(cell, pair);
cell_lock->Visit(cell_lock, go_searcher,*(source->GetMap()));
return pGo;
}
bool GOHello_go_mausoleum_door(Player *player, GameObject* _GO)
{ {
if (player->GetQuestStatus(QUEST_ULAG) != QUEST_STATUS_INCOMPLETE) if (pPlayer->GetQuestStatus(QUEST_ULAG) != QUEST_STATUS_INCOMPLETE)
return false; return false;
if (GameObject *trigger = SearchMausoleumGo(player, GO_TRIGGER, 30)) if (GameObject* pTrigger = pPlayer->FindNearestGameObject(GO_TRIGGER, 30.0f))
{ {
trigger->SetGoState(GO_STATE_READY); pTrigger->SetGoState(GO_STATE_READY);
player->SummonCreature(C_ULAG, 2390.26, 336.47, 40.01, 2.26, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 300000); pPlayer->SummonCreature(NPC_ULAG, 2390.26, 336.47, 40.01, 2.26, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 300000);
return false; return false;
} }
return false; return false;
} }
bool GOHello_go_mausoleum_trigger(Player *player, GameObject* _GO) bool GOHello_go_mausoleum_trigger(Player* pPlayer, GameObject* pGo)
{ {
if (player->GetQuestStatus(QUEST_ULAG) != QUEST_STATUS_INCOMPLETE) if (pPlayer->GetQuestStatus(QUEST_ULAG) != QUEST_STATUS_INCOMPLETE)
return false; return false;
if (GameObject *door = SearchMausoleumGo(player, GO_DOOR, 30)) if (GameObject* pDoor = pPlayer->FindNearestGameObject(GO_DOOR, 30.0f))
{ {
_GO->SetGoState(GO_STATE_ACTIVE); pGo->SetGoState(GO_STATE_ACTIVE);
door->RemoveFlag(GAMEOBJECT_FLAGS,GO_FLAG_INTERACT_COND); pDoor->RemoveFlag(GAMEOBJECT_FLAGS,GO_FLAG_INTERACT_COND);
return true; return true;
} }