See More

/* Copyright (C) 2009 - 2010 by /dev/rsa for ScriptDev2 * This program is free software licensed under GPL version 2 * Please see the included DOCS/LICENSE.TXT for more information */ #include "precompiled.h" #include "BSW_instance.h" BSWScriptedInstance::BSWScriptedInstance(Map* pMap) : ScriptedInstance(pMap) { debug_log("BSW: Initialized BSWScriptedInstance structure for map %u difficulty %u",pMap->GetId(),pMap->GetDifficulty()); m_auiEvent = 0; m_auiEventTimer = 0; m_auiCreatureID = 0; m_auiEventLock = false; m_pMap = pMap; m_objectGuidMap.clear(); }; BSWScriptedInstance::~BSWScriptedInstance() { debug_log("BSW: Removing BSWScriptedInstance structure for map %u",m_pMap->GetId()); }; void BSWScriptedInstance::DoCompleteAchievement(uint32 uiAchievmentId) { Map::PlayerList const& lPlayers = instance->GetPlayers(); if (!lPlayers.isEmpty()) { for(Map::PlayerList::const_iterator itr = lPlayers.begin(); itr != lPlayers.end(); ++itr) { if (Player* pPlayer = itr->getSource()) pPlayer->CompletedAchievement(uiAchievmentId); } } else debug_log("BSW: DoCompleteAchievement attempt set data, but no players in map."); } void BSWScriptedInstance::DoOpenDoor(uint64 guid) { if (!guid) return; GameObject* pGo = instance->GetGameObject(guid); if (pGo) pGo->SetGoState(GO_STATE_ACTIVE); else debug_log("BSW: DoOpenDoor attempt set data to object %u, but no this object", guid); } void BSWScriptedInstance::DoCloseDoor(uint64 guid) { if (!guid) return; GameObject* pGo = instance->GetGameObject(guid); if (pGo) pGo->SetGoState(GO_STATE_READY); else debug_log("BSW: DoCloseDoor attempt set data to object %u, but no this object", guid); } uint32 BSWScriptedInstance::GetEvent(uint32 creatureID) { if (m_auiEventLock || m_auiCreatureID != creatureID) { return 0; } else { debug_log("BSW: GetEvent: send event %u to creature %u",m_auiEvent, creatureID); m_auiEventLock = true; return m_auiEvent; } } void BSWScriptedInstance::SetNextEvent(uint32 EventNum, uint32 creatureID, uint32 timer) { m_auiEvent = EventNum; m_auiCreatureID = creatureID; m_auiEventTimer = timer; m_auiEventLock = false; debug_log("BSW: SetNextEvent: setted event %u to creature %u, timer %u",m_auiEvent, creatureID, timer); } bool BSWScriptedInstance::GetEventTimer(uint32 creatureID, const uint32 diff) { if (m_auiEvent == 0 || m_auiCreatureID != creatureID) return false; if (m_auiEventTimer <= diff) { m_auiEventTimer = 0; return true; } else { m_auiEventTimer -= diff; return false; } } void BSWScriptedInstance::SetObject(Object* object) { if (!object) return; m_objectGuidMap.insert(std::make_pair(object->GetEntry(), object->GetObjectGuid())); } ObjectGuid const& BSWScriptedInstance::GetInstanceObjectGuid(uint32 entry) { std::map::const_iterator itr = m_objectGuidMap.find(entry); if (itr != m_objectGuidMap.end()) return itr->second; else return ObjectGuid(); } uint64 BSWScriptedInstance::GetInstanceObjectGUID(uint32 entry) { ObjectGuid guid = GetInstanceObjectGuid(entry); if (guid.IsEmpty()) return 0; else return guid.GetRawValue(); } void BSWScriptedInstance::SetCriteriaState(uint32 criteria_id, bool state, Player* player) { if (!criteria_id) return; if (player && state) m_personalCriteriaMap.insert(std::make_pair(criteria_id, player->GetObjectGuid())); else m_groupCriteriaMap.insert(std::make_pair(criteria_id, state)); } bool BSWScriptedInstance::GetCriteriaState(uint32 criteria_id, Player const* player) { if (!criteria_id) return false; std::map::const_iterator itr = m_groupCriteriaMap.find(criteria_id); if (itr != m_groupCriteriaMap.end()) if (itr->second) return true; if (player) { std::pair<:multimap objectguid>::const_iterator, std::multimap::const_iterator> bounds = m_personalCriteriaMap.equal_range(criteria_id); for(std::multimap::const_iterator itr = bounds.first; itr != bounds.second; ++itr) { if (itr->second == player->GetObjectGuid()) return true; } } return false; }