[F] Gameobject Tore bei nähe automatisch Bewegen.

Hallo Members,

Ich habe eine Frage, und zwar ich habe ein Gameobject (Tür) erstellt.

Doch ich möchte das sie automatisch aufgeht, sobald ein Spieler in der nähe kommt. Und genau so wieder schliesst, sobald ein Spieler die nähe des Objekts verlässt.

Hoffe es ist möglich, und wenn ja das mit einer wieterhelfen kann.+

MFG CySiC95

Würde dafür nen unsichtbaren Trigger-NPC basteln…

Du hookst MoveInLineOfSight(Unit *who) und setzt dir dann einfach mit Gameobject::SetGoState(GOState state) deine Tür auf GO_STATE_ACTIVE (offen) oder GO_STATE_READY (zu).

Falls du das in ner Instanz nutzen willst, kommst du ganz leicht an die GUID (einfach bei OnGameObjectCreate() mitspeichern) und damit auch an das Objekt der Tür. Falls nicht, kannst du auf ChatHandler::GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid, uint32 entry) in Verbindung mit der DB-GUID zurückgreifen. Dies hat den Vorteil, dass du nur die in der DB eingetragene GUID kennen musst, um das ganze ans laufen zu bekommen. Funktioniert dann aber wirklich nur mit speziell diesem einen Spawn der Tür.

Wenn dus ganz allgemein gehalten haben willst, könntest du auch auf der aktuellen Map des Trigger-NPCs nach GameObjekten des Typs GAMEOBJECT_TYPE_DOOR in einem bestimmten Radius um den Trigger-NPC suchen und dessen GUID speichern. Dürfte wahrscheinlich auch die einfachste Lösung sein…

GUID für letztere Lösung könnte man z.B. so suchen:

[CODE]

    ACE_GUARD(ACE_Thread_Mutex, guard, *HashMapHolder<GameObject>::GetLock());

    HashMapHolder<GameObject>::MapType const& golist = sObjectAccessor->GetGameObjects();

    for (HashMapHolder<GameObject>::MapType::const_iterator itr = golist.begin(); itr != golist.end(); ++itr)           

        if (itr->second && itr->second->GetGoType() == GAMEOBJECT_TYPE_DOOR && me->IsWithinDist(itr->second, 10.0f, true))

            _guid = itr->second->GetGUID();[/CODE]

(ungetestet; wenn mehrere in dem radius vorhanden sind, wird das letzte (höchste db-guid) genommen; nur einmal ausführen lassen)

Denke mal das war genug Denkanstoß^^