void SendAttacker(Unit *pTarget) { std::list<Creature*> templist; float x, y, z; me->GetPosition(x, y, z); { CellPair pair(Trinity::ComputeCellPair(x, y)); Cell cell(pair); cell.data.Part.reserved = ALL_DISTRICT; cell.SetNoCreate(); Trinity::AllFriendlyCreaturesInGrid check(me); Trinity::CreatureListSearcher< Trinity::AllFriendlyCreaturesInGrid> searcher(me, templist, check); TypeContainerVisitor< Trinity::CreatureListSearcher< Trinity::AllFriendlyCreaturesInGrid>, GridTypeMapContainer> cSearcher(searcher); cell.Visit(pair, cSearcher, *(me->GetMap())); } if (!templist.size()) return; for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end(); ++i) { if ((*i) && me->IsWithinDistInMap((*i), 25)) { (*i)->SetNoCallAssistance(true); (*i)->AI()->AttackStart(pTarget); } } }
void DespawnSummons(uint32 entry) { std::list<Creature*> templist; float x, y, z; me->GetPosition(x, y, z); CellCoord pair(Trinity::ComputeCellCoord(x, y)); Cell cell(pair); cell.SetNoCreate(); Trinity::AllCreaturesOfEntryInRange check(me, entry, 100); Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, templist, check); TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher); cell.Visit(pair, cSearcher, *(me->GetMap()), *me, me->GetGridActivationRange()); for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end(); ++i) { if (entry == MOB_VAPOR_TRAIL && phase == PHASE_FLIGHT) { (*i)->GetPosition(x, y, z); me->SummonCreature(MOB_DEAD, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); } (*i)->SetVisible(false); (*i)->setDeathState(JUST_DIED); if ((*i)->getDeathState() == CORPSE) (*i)->RemoveCorpse(); } }
void DoGuardList() { float x, y, z; std::list<Creature*> lCreatureList; me->GetPosition(x, y, z); CellPair pair(Trinity::ComputeCellPair(x, y)); Cell cell(pair); cell.data.Part.reserved = ALL_DISTRICT; cell.SetNoCreate(); Trinity::AllCreaturesOfEntryInRange check(me, NPC_STORMWIND_ROYAL, 10); Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(lCreatureList, check); TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher); cell.Visit(pair, cSearcher, *(me->GetMap())); if (!lCreatureList.empty()) { for (std::list<Creature*>::iterator itr = lCreatureList.begin(); itr != lCreatureList.end(); ++itr) { CAST_AI(npc_stormwind_royal_guardAI,(*itr)->AI())->SpybotGUID = me->GetGUID(); CAST_AI(npc_stormwind_royal_guardAI,(*itr)->AI())->uiSpybotPhase = 1; } } }
void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_LOOT_MONEY"); Player* player = GetPlayer(); uint64 guid = player->GetLootGUID(); if (!guid) return; Loot* masterLoot = NULL; std::list<Loot*> linkedLoots; bool shareMoney = true; switch (GUID_HIPART(guid)) { case HIGHGUID_GAMEOBJECT: { GameObject* go = GetPlayer()->GetMap()->GetGameObject(guid); // do not check distance for GO if player is the owner of it (ex. fishing bobber) if (go && ((go->GetOwnerGUID() == player->GetGUID() || go->IsWithinDistInMap(player, INTERACTION_DISTANCE)))) masterLoot = &go->loot; break; } case HIGHGUID_CORPSE: // remove insignia ONLY in BG { Corpse* bones = ObjectAccessor::GetCorpse(*player, guid); if (bones && bones->IsWithinDistInMap(player, INTERACTION_DISTANCE)) { masterLoot = &bones->loot; shareMoney = false; } break; } case HIGHGUID_ITEM: { if (Item* item = player->GetItemByGuid(guid)) { masterLoot = &item->loot; shareMoney = false; } break; } case HIGHGUID_UNIT: case HIGHGUID_VEHICLE: { Creature* creature = player->GetMap()->GetCreature(guid); bool lootAllowed = creature && creature->isAlive() == (player->getClass() == CLASS_ROGUE && creature->lootForPickPocketed); if (lootAllowed && creature->IsWithinDistInMap(player, INTERACTION_DISTANCE)) { masterLoot = &creature->loot; if (creature->isAlive()) shareMoney = false; // Check creature around for radius loot else { std::list<Creature*> linkedLootCreatures; CellCoord p(WoWSource::ComputeCellCoord(player->GetPositionX(), player->GetPositionY())); Cell cell(p); cell.SetNoCreate(); WoWSource::AllDeadCreaturesInRange check(player, 25.0f, creature->GetGUID()); WoWSource::CreatureListSearcher<WoWSource::AllDeadCreaturesInRange> searcher(player, linkedLootCreatures, check); TypeContainerVisitor<WoWSource::CreatureListSearcher<WoWSource::AllDeadCreaturesInRange>, GridTypeMapContainer> cSearcher(searcher); cell.Visit(p, cSearcher, *(player->GetMap()), *player, 25.0f); for (auto itr : linkedLootCreatures) { Player* recipient = itr->GetLootRecipient(); if (!recipient) continue; if (itr->loot.HasLooter(player->GetGUID())) linkedLoots.push_back(&itr->loot); } } } break; } default: return; // unlootable type } if (masterLoot) linkedLoots.push_back(masterLoot); for (auto loot : linkedLoots) { if (shareMoney && player->GetGroup()) //item, pickpocket and players can be looted only single player { Group* group = player->GetGroup(); std::vector<Player*> playersNear; for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next()) { Player* member = itr->getSource(); if (!member) continue; if (player->IsWithinDistInMap(member, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false)) playersNear.push_back(member); } /*@todo: check me for 5.0.5*/ uint32 goldPerPlayer = uint32((loot->gold) / (playersNear.size())); loot->NotifyMoneyRemoved(goldPerPlayer); for (std::vector<Player*>::const_iterator i = playersNear.begin(); i != playersNear.end(); ++i) { (*i)->ModifyMoney(goldPerPlayer); (*i)->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY, goldPerPlayer); if ((*i)->HasAuraType(SPELL_AURA_DEPOSIT_BONUS_MONEY_IN_GUILD_BANK_ON_LOOT)) { if (Guild* guild = sGuildMgr->GetGuildById((*i)->GetGuildId())) { uint64 guildGold = (uint64)CalculatePct(goldPerPlayer, (*i)->GetTotalAuraModifier(SPELL_AURA_DEPOSIT_BONUS_MONEY_IN_GUILD_BANK_ON_LOOT)); if (guildGold > MAX_MONEY_AMOUNT) guildGold = MAX_MONEY_AMOUNT; uint64 amount = guild->GetBankMoney(); uint64 after = amount + guildGold; if (after > MAX_MONEY_AMOUNT) guildGold = uint64(MAX_MONEY_AMOUNT) - amount; // do not cast MAX_MONEY_AMOUNT to uint since MAX_MONEY_AMOUNT is 9.999 billions, that more that uint32 max if (guildGold > 0) guild->DepositMoney(guildGold); } } WorldPacket data(SMSG_LOOT_MONEY_NOTIFY, 4 + 1); data << uint32(goldPerPlayer); data.WriteBit(playersNear.size() <= 1); // Controls the text displayed in chat. 0 is "Your share is..." and 1 is "You loot..." data.FlushBits(); (*i)->GetSession()->SendPacket(&data); } } else { player->ModifyMoney(loot->gold); player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY, loot->gold); if (player->HasAuraType(SPELL_AURA_DEPOSIT_BONUS_MONEY_IN_GUILD_BANK_ON_LOOT)) { if (Guild* guild = sGuildMgr->GetGuildById(player->GetGuildId())) { uint64 guildGold = (uint64)CalculatePct(loot->gold, player->GetTotalAuraModifier(SPELL_AURA_DEPOSIT_BONUS_MONEY_IN_GUILD_BANK_ON_LOOT)); if (guildGold > MAX_MONEY_AMOUNT) guildGold = MAX_MONEY_AMOUNT; uint64 amount = guild->GetBankMoney(); uint64 after = amount + guildGold; if (after > MAX_MONEY_AMOUNT) guildGold = uint64(MAX_MONEY_AMOUNT) - amount; // do not cast MAX_MONEY_AMOUNT to uint since MAX_MONEY_AMOUNT is 9.999 billions, that more that uint32 max if (guildGold > 0) guild->DepositMoney(guildGold); } } loot->NotifyMoneyRemoved(loot->gold); WorldPacket data(SMSG_LOOT_MONEY_NOTIFY, 4 + 1); data << uint32(loot->gold); data.WriteBit(1); // "You loot..." data.FlushBits(); SendPacket(&data); } loot->gold = 0; } }
bool HatchAllEggs(uint32 action) //1: reset, 2: isHatching all { std::list<Creature*> templist; float x, y, z; me->GetPosition(x, y, z); { CellCoord pair(Trinity::ComputeCellCoord(x, y)); Cell cell(pair); cell.SetNoCreate(); Trinity::AllCreaturesOfEntryInRange check(me, NPC_EGG, 100); Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, templist, check); TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher); cell.Visit(pair, cSearcher, *me->GetMap(), *me, me->GetGridActivationRange()); } //TC_LOG_ERROR("scripts", "Eggs %d at middle", templist.size()); if (templist.empty()) return false; for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end(); ++i) { if (action == 1) (*i)->SetDisplayId(10056); else if (action == 2 &&(*i)->GetDisplayId() != 11686) (*i)->CastSpell(*i, SPELL_HATCH_EGG, false); } return true; }
void Boom() { std::list<Creature*> templist; float x, y, z; me->GetPosition(x, y, z); { CellPair pair(Trinity::ComputeCellPair(x, y)); Cell cell(pair); cell.data.Part.reserved = ALL_DISTRICT; cell.SetNoCreate(); Trinity::AllCreaturesOfEntryInRange check(me, MOB_FIRE_BOMB, 100); Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, templist, check); TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher); cell.Visit(pair, cSearcher, *(me->GetMap())); } for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end(); ++i) { (*i)->CastSpell(*i, SPELL_FIRE_BOMB_DAMAGE, true); (*i)->RemoveAllAuras(); } }
void JustStartedEscort() { m_uiEventTimer = 5000; m_uiEventCount = 0; m_lResearchersList.clear(); float x, y, z; me->GetPosition(x, y, z); CellPair pair(Trinity::ComputeCellPair(x, y)); Cell cell(pair); cell.data.Part.reserved = ALL_DISTRICT; cell.SetNoCreate(); Trinity::AllCreaturesOfEntryInRange check(me, NPC_RESEARCHER, 25); Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me,m_lResearchersList, check); TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher); cell.Visit(pair, cSearcher, *(me->GetMap())); if (!m_lResearchersList.empty()) SetFormation(); }
void DespawnSummons(uint32 entry) { std::list<Creature*> templist; float x, y, z; m_creature->GetPosition(x, y, z); { CellPair pair(MaNGOS::ComputeCellPair(x, y)); Cell cell(pair); cell.data.Part.reserved = ALL_DISTRICT; cell.SetNoCreate(); AllCreaturesOfEntryInRange check(m_creature, entry, 100); MaNGOS::CreatureListSearcher<AllCreaturesOfEntryInRange> searcher(templist, check); TypeContainerVisitor<MaNGOS::CreatureListSearcher<AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher); CellLock<GridReadGuard> cell_lock(cell, pair); cell_lock->Visit(cell_lock, cSearcher, *(m_creature->GetMap())); } for(std::list<Creature*>::iterator i = templist.begin(); i != templist.end(); ++i) { (*i)->SetVisibility(VISIBILITY_OFF); (*i)->setDeathState(JUST_DIED); } }
void DoGuardList() { float x, y, z; uint8 PointID; PointID = 0; std::list<Creature*> lCreatureList; me->GetPosition(x, y, z); CellCoord pair(Oregon::ComputeCellCoord(x, y)); Cell cell(pair); cell.SetNoCreate(); Oregon::AllCreaturesOfEntryInRange check(me, NPC_STORMWIND_ROYAL, 10); Oregon::CreatureListSearcher<Oregon::AllCreaturesOfEntryInRange> searcher(lCreatureList, check); TypeContainerVisitor<Oregon::CreatureListSearcher<Oregon::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher); cell.Visit(pair, cSearcher, *(me->GetMap()), *me, me->GetGridActivationRange()); if (!lCreatureList.empty()) { for (std::list<Creature*>::iterator itr = lCreatureList.begin(); itr != lCreatureList.end(); ++itr) { CAST_AI(npc_stormwind_royal_guardAI, (*itr)->AI())->MovePoint = 1; CAST_AI(npc_stormwind_royal_guardAI, (*itr)->AI())->PointID = PointID; PointID++; } } }
void DoAttackPlayer() { Player* player = Unit::GetPlayer(*me, PlayerGUID); if (!player) return; me->setFaction(FACTION_HOSTILE); me->AI()->AttackStart(player); float x, y, z; me->GetPosition(x, y, z); CellPair pair(Trinity::ComputeCellPair(x, y)); Cell cell(pair); cell.data.Part.reserved = ALL_DISTRICT; cell.SetNoCreate(); Trinity::AllCreaturesOfEntryInRange check(me, NPC_SENTRY, 20); Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, lCreatureList, check); TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher); cell.Visit(pair, cSearcher, *(me->GetMap())); if (!lCreatureList.empty()) { for (std::list<Creature*>::iterator itr = lCreatureList.begin(); itr != lCreatureList.end(); ++itr) { if ((*itr)->isAlive()) { (*itr)->setFaction(FACTION_HOSTILE); (*itr)->AI()->AttackStart(player); } } } }
void Boom() { std::list<Creature*> templist; float x, y, z; m_creature->GetPosition(x, y, z); { CellPair pair(MaNGOS::ComputeCellPair(x, y)); Cell cell(pair); cell.SetNoCreate(); AllCreaturesOfEntryInRangeCheck check(m_creature, MOB_FIRE_BOMB, 100); MaNGOS::CreatureListSearcher<AllCreaturesOfEntryInRangeCheck> searcher(templist, check); TypeContainerVisitor<MaNGOS::CreatureListSearcher<AllCreaturesOfEntryInRangeCheck>, GridTypeMapContainer> cSearcher(searcher); //CellLock<GridReadGuard> cell_lock(cell, pair); cell.Visit(pair, cSearcher, *(m_creature->GetMap()),*m_creature,100); } for(std::list<Creature*>::iterator i = templist.begin(); i != templist.end(); ++i) { (*i)->CastSpell(*i, SPELL_FIRE_BOMB_DAMAGE, true); (*i)->RemoveAllAuras(); } }
void SendAttacker(Unit* target) // Exploit Fix { std::list<Creature*> templist; float x, y, z; me->GetPosition(x, y, z); { CellCoord pair(Trinity::ComputeCellCoord(x, y)); Cell cell(pair); cell.SetNoCreate(); Trinity::AllFriendlyCreaturesInGrid check(me); Trinity::CreatureListSearcher<Trinity::AllFriendlyCreaturesInGrid> searcher(me, templist, check); TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllFriendlyCreaturesInGrid>, GridTypeMapContainer> cSearcher(searcher); cell.Visit(pair, cSearcher, *(me->GetMap()), *me, SIZE_OF_GRIDS); } if(!templist.size()) return; for(std::list<Creature*>::iterator i = templist.begin(); i != templist.end(); ++i) { if((*i) && me->IsWithinDistInMap((*i),10)) { if(!(*i)->isInCombat() && !me->getVictim()) (*i)->AI()->AttackStart(target); } } }
void Boom() { std::list<Creature*> templist; float x, y, z; me->GetPosition(x, y, z); { CellCoord pair(JadeCore::ComputeCellCoord(x, y)); Cell cell(pair); cell.SetNoCreate(); JadeCore::AllCreaturesOfEntryInRange check(me, MOB_FIRE_BOMB, 100); JadeCore::CreatureListSearcher<JadeCore::AllCreaturesOfEntryInRange> searcher(me, templist, check); TypeContainerVisitor<JadeCore::CreatureListSearcher<JadeCore::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher); cell.Visit(pair, cSearcher, *me->GetMap(), *me, me->GetGridActivationRange()); } for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end(); ++i) { (*i)->CastSpell(*i, SPELL_FIRE_BOMB_DAMAGE, true); (*i)->RemoveAllAuras(); } }
void DoAttackPlayer() { Player* pPlayer = Unit::GetPlayer(*me, PlayerGUID); if (!pPlayer) return; me->setFaction(FACTION_HOSTILE); me->AI()->AttackStart(pPlayer); float x, y, z; me->GetPosition(x, y, z); CellCoord pair(Oregon::ComputeCellCoord(x, y)); Cell cell(pair); cell.SetNoCreate(); Oregon::AllCreaturesOfEntryInRange check(me, NPC_SENTRY, 20); Oregon::CreatureListSearcher<Oregon::AllCreaturesOfEntryInRange> searcher(lCreatureList, check); TypeContainerVisitor<Oregon::CreatureListSearcher<Oregon::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher); cell.Visit(pair, cSearcher, *(me->GetMap()), *me, me->GetGridActivationRange()); if (!lCreatureList.empty()) { for (std::list<Creature*>::iterator itr = lCreatureList.begin(); itr != lCreatureList.end(); ++itr) { if ((*itr)->IsAlive()) { (*itr)->setFaction(FACTION_HOSTILE); (*itr)->AI()->AttackStart(pPlayer); } } } }
void SendAttacker(Unit* target) { std::list<Creature*> templist; float x, y, z; me->GetPosition(x, y, z); { CellCoord pair(MistCore::ComputeCellCoord(x, y)); Cell cell(pair); cell.SetNoCreate(); MistCore::AllFriendlyCreaturesInGrid check(me); MistCore::CreatureListSearcher<MistCore::AllFriendlyCreaturesInGrid> searcher(me, templist, check); TypeContainerVisitor<MistCore::CreatureListSearcher<MistCore::AllFriendlyCreaturesInGrid>, GridTypeMapContainer> cSearcher(searcher); cell.Visit(pair, cSearcher, *(me->GetMap()), *me, me->GetGridActivationRange()); } if (templist.empty()) return; for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end(); ++i) { if ((*i) && me->IsWithinDistInMap((*i), 25)) { (*i)->SetNoCallAssistance(true); (*i)->AI()->AttackStart(target); } } }
void DespawnSummons(uint32 entry) { std::list<Creature*> templist; float x, y, z; m_creature->GetPosition(x, y, z); { CellPair pair(MaNGOS::ComputeCellPair(x, y)); Cell cell(pair); cell.data.Part.reserved = ALL_DISTRICT; cell.SetNoCreate(); AllCreaturesOfEntryInRange check(m_creature, entry, 100); MaNGOS::CreatureListSearcher<AllCreaturesOfEntryInRange> searcher(templist, check); TypeContainerVisitor<MaNGOS::CreatureListSearcher<AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher); CellLock<GridReadGuard> cell_lock(cell, pair); cell_lock->Visit(cell_lock, cSearcher, *(m_creature->GetMap())); } for(std::list<Creature*>::iterator i = templist.begin(); i != templist.end(); ++i) { if(entry == MOB_VAPOR_TRAIL && Phase == PHASE_FLIGHT) { float x, y, z; (*i)->GetPosition(x, y, z); m_creature->SummonCreature(MOB_DEAD, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); } (*i)->SetVisibility(VISIBILITY_OFF); (*i)->setDeathState(JUST_DIED); if((*i)->getDeathState() == CORPSE) (*i)->RemoveCorpse(); } }
bool HatchAllEggs(uint32 uiAction) //1: reset, 2: isHatching all { std::list<Creature*> templist; float x, y, z; me->GetPosition(x, y, z); { CellPair pair(Trinity::ComputeCellPair(x, y)); Cell cell(pair); cell.data.Part.reserved = ALL_DISTRICT; cell.SetNoCreate(); Trinity::AllCreaturesOfEntryInRange check(me, MOB_EGG, 100); Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, templist, check); TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher); cell.Visit(pair, cSearcher, *(me->GetMap())); } //sLog->outError("Eggs %d at middle", templist.size()); if (!templist.size()) return false; for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end(); ++i) { if (uiAction == 1) (*i)->SetDisplayId(10056); else if (uiAction == 2 &&(*i)->GetDisplayId() != 11686) (*i)->CastSpell(*i, SPELL_HATCH_EGG, false); } return true; }
bool HatchAllEggs(uint32 action) //1: reset, 2: isHatching all { std::list<Creature*> templist; float x, y, z; m_creature->GetPosition(x, y, z); { CellPair pair(MaNGOS::ComputeCellPair(x, y)); Cell cell(pair); cell.data.Part.reserved = ALL_DISTRICT; cell.SetNoCreate(); AllCreaturesOfEntryInRange check(m_creature, MOB_EGG, 100); MaNGOS::CreatureListSearcher<AllCreaturesOfEntryInRange> searcher(m_creature, templist, check); TypeContainerVisitor<MaNGOS::CreatureListSearcher<AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher); // CellLock<GridReadGuard> cell_lock(cell, pair); cell.Visit(pair, cSearcher, *(m_creature->GetMap())); } //error_log("Eggs %d at middle", templist.size()); if(!templist.size()) return false; for(std::list<Creature*>::iterator i = templist.begin(); i != templist.end(); ++i) { if(action == 1) (*i)->SetDisplayId(10056); else if(action == 2 &&(*i)->GetDisplayId() != 11686) (*i)->CastSpell(*i, SPELL_HATCH_EGG, false); } return true; }
bool HatchEggs(uint32 num) { std::list<Creature*> templist; float x, y, z; me->GetPosition(x, y, z); { CellPair pair(Trinity::ComputeCellPair(x, y)); Cell cell(pair); cell.data.Part.reserved = ALL_DISTRICT; cell.SetNoCreate(); Trinity::AllCreaturesOfEntryInRange check(me, 23817, 50); Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, templist, check); TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher); cell.Visit(pair, cSearcher, *(me->GetMap())); } //sLog->outError("Eggs %d at %d", templist.size(), side); for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end() && num > 0; ++i) if ((*i)->GetDisplayId() != 11686) { (*i)->CastSpell(*i, SPELL_HATCH_EGG, false); num--; } return num == 0; // if num == 0, no more templist }
void ReleaseDogs() { std::list<Creature*> templist; float x, y, z; me->GetPosition(x, y, z); { CellCoord pair(JadeCore::ComputeCellCoord(x, y)); Cell cell(pair); cell.SetNoCreate(); JadeCore::AllCreaturesOfEntryInRange check(me, MOB_OBEDIENT_HOUND, 200); JadeCore::CreatureListSearcher<JadeCore::AllCreaturesOfEntryInRange> searcher(me, templist, check); TypeContainerVisitor<JadeCore::CreatureListSearcher<JadeCore::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher); cell.Visit(pair, cSearcher, *me->GetMap(), *me, me->GetGridActivationRange()); } if (templist.empty()) return; for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end(); ++i) { // (*i)->setFaction(35); (*i)->SetReactState(REACT_AGGRESSIVE); (*i)->AI()->DoAction(ACTION_ATTACK_BRAUN); } }