Exemple #1
0
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;
}
Exemple #2
0
/// 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;
}
Exemple #3
0
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");
            }
        }