bool ChatHandler::HandleGOActivate(const char* args, WorldSession *m_session) { GameObject* GObj = NULLGOB; GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } if(GObj->GetState() == 1) { // Close/Deactivate GObj->SetState(0); GObj->SetFlags(GObj->GetFlags()-1); } else { // Open/Activate GObj->SetState(1); GObj->SetFlags(GObj->GetFlags()+1); } BlueSystemMessage(m_session, "Gameobject opened/closed."); return true; }
/// Update object reference linking for the given object load request. /// /// @param[in] pRequest Load request to update. /// /// @return True if linking still requires processing, false if it is complete. bool GameObjectLoader::TickLink( LoadRequest* pRequest ) { HELIUM_ASSERT( pRequest ); HELIUM_ASSERT( !( pRequest->stateFlags & ( LOAD_FLAG_PRECACHED | LOAD_FLAG_LOADED ) ) ); // Make sure each dependency has finished its preload process. bool bHavePendingLinkEntries = false; DynArray< LinkEntry >& rLinkTable = pRequest->linkTable; size_t linkTableSize = rLinkTable.GetSize(); for( size_t linkIndex = 0; linkIndex < linkTableSize; ++linkIndex ) { LinkEntry& rLinkEntry = rLinkTable[ linkIndex ]; if( IsValid( rLinkEntry.loadId ) ) { LoadRequest* pLinkRequest = m_loadRequestPool.GetObject( rLinkEntry.loadId ); HELIUM_ASSERT( pLinkRequest ); if( pLinkRequest->stateFlags & LOAD_FLAG_PRELOADED ) { rLinkEntry.spObject = pLinkRequest->spObject; } else { bHavePendingLinkEntries = true; } } } if( bHavePendingLinkEntries ) { return false; } // Ready to link. GameObject* pObject = pRequest->spObject; if( pObject ) { uint32_t objectFlags = pObject->GetFlags(); if( !( objectFlags & GameObject::FLAG_LINKED ) ) { if( !( objectFlags & GameObject::FLAG_BROKEN ) ) { Linker linker; linker.Prepare( rLinkTable.GetData(), static_cast< uint32_t >( linkTableSize ) ); if( !linker.Serialize( pObject ) ) { pObject->SetFlags( GameObject::FLAG_BROKEN ); } } pObject->SetFlags( GameObject::FLAG_LINKED ); } } AtomicOrRelease( pRequest->stateFlags, LOAD_FLAG_LINKED ); return true; }
bool ChatHandler::HandleGOInfo(const char *args, WorldSession *m_session) { std::stringstream sstext; GameObject *GObj = NULL; GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } WhiteSystemMessage(m_session, "Information:"); if(GObj->m_spawn) GreenSystemMessage(m_session, "SpawnID: %s%u|r", MSG_COLOR_LIGHTBLUE, GObj->m_spawn->id); GreenSystemMessage(m_session, "Entry: %s%u|r", MSG_COLOR_LIGHTBLUE, GObj->GetEntry()); GreenSystemMessage(m_session, "Model: %s%u|r", MSG_COLOR_LIGHTBLUE, GObj->GetDisplayId()); GreenSystemMessage(m_session, "State: %s%u|r", MSG_COLOR_LIGHTBLUE, GObj->GetState()); GreenSystemMessage(m_session, "flags: %s%u|r", MSG_COLOR_LIGHTBLUE, GObj->GetFlags()); GreenSystemMessage(m_session, "dynflags: %s%u|r", MSG_COLOR_LIGHTBLUE, GObj->GetUInt32Value(GAMEOBJECT_DYNAMIC)); GreenSystemMessage(m_session, "faction: %s%u|r", MSG_COLOR_LIGHTBLUE, GObj->GetUInt32Value(GAMEOBJECT_FACTION)); std::stringstream gottext; uint8 type = GObj->GetByte(GAMEOBJECT_BYTES_1, GAMEOBJECT_BYTES_TYPE_ID); switch(type) { case GAMEOBJECT_TYPE_DOOR: gottext << "Door"; break; case GAMEOBJECT_TYPE_BUTTON: gottext << "Button"; break; case GAMEOBJECT_TYPE_QUESTGIVER: gottext << "Quest Giver"; break; case GAMEOBJECT_TYPE_CHEST: gottext << "Chest"; break; case GAMEOBJECT_TYPE_BINDER: gottext << "Binder"; break; case GAMEOBJECT_TYPE_GENERIC: gottext << "Generic"; break; case GAMEOBJECT_TYPE_TRAP: gottext << "Trap"; break; case GAMEOBJECT_TYPE_CHAIR: gottext << "Chair"; break; case GAMEOBJECT_TYPE_SPELL_FOCUS: gottext << "Spell Focus"; break; case GAMEOBJECT_TYPE_TEXT: gottext << "Text"; break; case GAMEOBJECT_TYPE_GOOBER: gottext << "Goober"; break; case GAMEOBJECT_TYPE_TRANSPORT: gottext << "Transport"; break; case GAMEOBJECT_TYPE_AREADAMAGE: gottext << "Area Damage"; break; case GAMEOBJECT_TYPE_CAMERA: gottext << "Camera"; break; case GAMEOBJECT_TYPE_MAP_OBJECT: gottext << "Map Object"; break; case GAMEOBJECT_TYPE_MO_TRANSPORT: gottext << "Mo Transport"; break; case GAMEOBJECT_TYPE_DUEL_ARBITER: gottext << "Duel Arbiter"; break; case GAMEOBJECT_TYPE_FISHINGNODE: gottext << "Fishing Node"; break; case GAMEOBJECT_TYPE_RITUAL: gottext << "Ritual"; break; case GAMEOBJECT_TYPE_MAILBOX: gottext << "Mailbox"; break; case GAMEOBJECT_TYPE_AUCTIONHOUSE: gottext << "Auction House"; break; case GAMEOBJECT_TYPE_GUARDPOST: gottext << "Guard Post"; break; case GAMEOBJECT_TYPE_SPELLCASTER: gottext << "Spell Caster"; break; case GAMEOBJECT_TYPE_MEETINGSTONE: gottext << "Meeting Stone"; break; case GAMEOBJECT_TYPE_FLAGSTAND: gottext << "Flag Stand"; break; case GAMEOBJECT_TYPE_FISHINGHOLE: gottext << "Fishing Hole"; break; case GAMEOBJECT_TYPE_FLAGDROP: gottext << "Flag Drop"; break; case GAMEOBJECT_TYPE_MINI_GAME: gottext << "Mini Game"; break; case GAMEOBJECT_TYPE_LOTTERY_KIOSK: gottext << "Lottery KIOSK"; break; case GAMEOBJECT_TYPE_CAPTURE_POINT: gottext << "Capture Point"; break; case GAMEOBJECT_TYPE_AURA_GENERATOR: gottext << "Aura Generator"; break; case GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY: gottext << "Dungeon Difficulty"; break; case GAMEOBJECT_TYPE_BARBER_CHAIR: gottext << "Barber Chair"; break; case GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING: gottext << "Destructible Building"; break; case GAMEOBJECT_TYPE_GUILD_BANK: gottext << "Guild Bank"; break; case GAMEOBJECT_TYPE_TRAPDOOR: gottext << "Trap Door"; break; default: gottext << "Unknown."; break; } GreenSystemMessage(m_session, "Type: %s%u|r -- %s", MSG_COLOR_LIGHTBLUE, type, gottext.str().c_str()); GreenSystemMessage(m_session, "Distance: %s%f|r", MSG_COLOR_LIGHTBLUE, GObj->CalcDistance((Object*)m_session->GetPlayer())); GreenSystemMessage(m_session, "Size: %s%f|r", MSG_COLOR_LIGHTBLUE, GObj->GetFloatValue(OBJECT_FIELD_SCALE_X)); if(GObj->GetInfo()) GreenSystemMessage(m_session, "Name: %s%s|r", MSG_COLOR_LIGHTBLUE, GObj->GetInfo()->Name); GreenSystemMessage(m_session, "Phase: %s%u|r", MSG_COLOR_LIGHTBLUE, GObj->GetPhaseMask()); SystemMessage(m_session, sstext.str().c_str()); return true; }
void OnActivate(Player* pPlayer) { QuestLogEntry* pQuest = pPlayer->GetQuestLogForEntry(10895); if(pQuest != NULL) { // M4ksiu - WTF IS THIS FOR? :| float SSX = pPlayer->GetPositionX(); float SSY = pPlayer->GetPositionY(); float SSZ = pPlayer->GetPositionZ(); GameObject* pBeacon = pPlayer->GetMapMgr()->GetInterface()->GetGameObjectNearestCoords(SSX, SSY, SSZ, 184661); if(pBeacon != NULL && pBeacon->GetFlags() > 0) { pBeacon->SetFlags((pBeacon->GetFlags() - 1)); } // Northern Zeth'Gor Tower if(pQuest->GetMobCount(0) < pQuest->GetQuest()->required_mobcount[0]) { GameObject* pNorthern = pPlayer->GetMapMgr()->GetInterface()->GetGameObjectNearestCoords(-820.0f, 2029.0f, 55.0f, 300150); if(pNorthern != NULL && pPlayer->CalcDistance(pPlayer, pNorthern) < 40) // if reduced the server will crash when out of range { pQuest->SetMobCount(0, pQuest->GetMobCount(0) + 1); pQuest->SendUpdateAddKill(0); pQuest->UpdatePlayerFields(); GameObject* pGameobject = sEAS.SpawnGameobject(pPlayer, 183816, -819.77f, 2029.09f, 55.6082f, 0, 4, 0, 0, 0, 0); if(pGameobject != NULL) { sEAS.GameobjectDelete(pGameobject, 1 * 60 * 1000); } return; } } // Southern Zeth'Gor Tower if(pQuest->GetMobCount(1) < pQuest->GetQuest()->required_mobcount[1]) { GameObject* pSouthern = pPlayer->GetMapMgr()->GetInterface()->GetGameObjectNearestCoords(-1150.0f, 2110.0f, 84.0f, 300150); if(pSouthern != NULL && pPlayer->CalcDistance(pPlayer, pSouthern) < 40) { pQuest->SetMobCount(1, pQuest->GetMobCount(1) + 1); pQuest->SendUpdateAddKill(1); pQuest->UpdatePlayerFields(); GameObject* pGameobject = sEAS.SpawnGameobject(pPlayer, 183816, -1150.53f, 2109.92f, 84.4204f, 0, 4, 0, 0, 0, 0); if(pGameobject != NULL) { sEAS.GameobjectDelete(pGameobject, 1 * 60 * 1000); } return; } } // Forge Zeth'Gor Tower if(pQuest->GetMobCount(2) < pQuest->GetQuest()->required_mobcount[2]) { GameObject* pForge = pPlayer->GetMapMgr()->GetInterface()->GetGameObjectNearestCoords(-893.0f, 1919.0f, 82.0f, 300150); if(pForge != NULL && pPlayer->CalcDistance(pPlayer, pForge) < 40) { pQuest->SetMobCount(2, pQuest->GetMobCount(2) + 1); pQuest->SendUpdateAddKill(2); pQuest->UpdatePlayerFields(); GameObject* pGameobject = sEAS.SpawnGameobject(pPlayer, 183816, -893.499f, 1919.27f, 81.6449f, 0, 4, 0, 0, 0, 0); if(pGameobject != NULL) { sEAS.GameobjectDelete(pGameobject, 1 * 60 * 1000); } return; } } // Foothill Zeth'Gor Tower if(pQuest->GetMobCount(3) < pQuest->GetQuest()->required_mobcount[3]) { GameObject* pFoothill = pPlayer->GetMapMgr()->GetInterface()->GetGameObjectNearestCoords(-978.0f, 1879.0f, 111.0f, 300150); if(pFoothill != NULL && pPlayer->CalcDistance(pPlayer, pFoothill) < 40) { pQuest->SetMobCount(3, pQuest->GetMobCount(3) + 1); pQuest->SendUpdateAddKill(3); pQuest->UpdatePlayerFields(); GameObject* pGameobject = sEAS.SpawnGameobject(pPlayer, 183816, -977.713f, 1879.500f, 110.892f, 0, 4, 0, 0, 0, 0); if(pGameobject != NULL) { sEAS.GameobjectDelete(pGameobject, 1 * 60 * 1000); } return; } } else { pPlayer->BroadcastMessage("You are to far away!"); } } else { pPlayer->BroadcastMessage("Missing required quest : Zeth'Gor Must Burn"); } }