[C++] Funktion Zum Tür Öffnen Gesucht!

Hi!

Ich suche eine Funktion zum Tür öffnen in C++. Ich habe in der Command.cpp dies gefunden


static bool HandleGameObjectActivateCommand(ChatHandler* handler, char const* args)

	{

		if (!*args)

			return false;

		char* id = handler->extractKeyFromLink((char*)args, "Hgameobject");

		if (!id)

			return false;

		uint32 guidLow = atoi(id);

		if (!guidLow)

			return false;

		GameObject* object = NULL;

		// by DB guid

		if (GameObjectData const* goData = sObjectMgr->GetGOData(guidLow))

			object = handler->GetObjectGlobalyWithGuidOrNearWithDbGuid(guidLow, goData->id);

		if (!object)

		{

			handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, guidLow);

			handler->SetSentErrorMessage(true);

			return false;

		}

		// Activate

		object->SetLootState(GO_READY);

		object->UseDoorOrButton(10000);

		handler->PSendSysMessage("Object activated!");

		return true;

	}

Da ich aber kein Chat Handle habe sondern es direkt mit der GUID ansprechen möchte, komme ich nun nicht weiter /emoticons/default_unsure.png

Kennt jemand eine Funktion die ich in etwas so ansprechen könnte:

Beispiel:

GameObjectActivate( 128378 );

Wäre super wenn jemand einen Lösungsvorschlag für mich hat /emoticons/default_smile.png

EDIT 1:

Ich habe es jetzt mal folgendermaßen versucht

[CODE]

// Türe Links Öffnen

case GOSSIP_ACTION_INFO_DEF +10:

GameObject *pGameObject = NULL;

pGameObject = pPlayer->GetGameObject( GUID_DOOR1 );


if( pGameObject != NULL )

{

 pGameObject->SetLootState( GO_READY );

 pGameObject->UseDoorOrButton( 3600 );

}

break;

[/code][/CODE]

Doch leider ohne Erfolg!

Irgendwie muss ich doch das pGameObject mit dem Objekt von der ID füllen können oder?

eine Möglichkeit ist diese



unit32 Go_DOOR1 = entry ;


if(GameObject * pDoor = pPlayer->FindNearestGameObject(Go_DOOR1, 100.0f))

pDoor->SetGoState(GO_STATE_ACTIVE);

oder



unit32 Go_DOOR1 = entry ;


if(GameObject * pDoor = pCreature->FindNearestGameObject(Go_DOOR1, 100.0f))

pDoor->SetGoState(GO_STATE_ACTIVE);

Boa super danke… man und ich suche mich den Ganzen Tag dumm und dämlich. Denke als an Get~ statt an sowas wie Find~ /emoticons/default_biggrin.png.

Danke schön !

PS: Gibt es keine Funktion mit der man aus der Datenbank ein Object auslesen kann?

EDIT:

So nochmal für den Nachtrag danke Robox. Habe es nun umgesetzt. Doch leider passiert mit der Tür nix. Was ich seltsam finde. Denn die Tür ist fast neben dem Mob. Doch nix passiert. GUID ist kontrolliert und richtig!


   case GOSSIP_ACTION_INFO_DEF +10:

	if( GameObject *pGameObject = pCreature->FindNearestGameObject( GUID_DOOR1, 100.0f ) )

	{

	 pGameObject->SetLootState( GO_READY );

	 pGameObject->UseDoorOrButton( 10000 );

	}

	pPlayer->SEND_GOSSIP_MENU( DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID() );

	break;

Irgendwo ein Fehler drinnen den ich übersehen habe?

LG Yellow

EDIT 2:

Man bin ich blind!

	 pGameObject->SetGoState( GO_STATE_ACTIVE );

und nicht

	 pGameObject->SetLootState( GO_READY );[/code]

Doch gehen tut es immer noch nicht. Boa werde gleich zum Grinch /emoticons/default_huh.png

Keiner mehr eine Idee warum es nicht geht? Probiere alles mögliche ohne Erfolg!

/nvm

was ist das für eine id die du verwandest

FindNearestGameObject benödigt die entry aus der gameobject_template tabele

in gegensatz zum .gobject activate der die guid aus der gameobject benötigt

Hi Bizzy, der erste Code post von mir ist der GM-Command ! /emoticons/default_wink.png

Hi Robox, leider gehen GUID sowie Entry ID nicht. Es ist als wenn er das Object nicht finden würde und deswegen gleich weiter macht! Doch das Tor steht zwei Meter darneben und es sind 100 Yards angegeben. Es ist zum Mäusemelken /emoticons/default_angry.png

EDIT:

So ich habe die Lösung gefunden. Ich hatte Insgesamt 2 Türen aus dem gleichen Template in einem Radius von ca 30 Yards. Und in der Funktion einen Radius von 100 Yards. Da, wie Robox netterweise erwähnt hatte, die Funktion “FindNearestGameObject” die Entry ID benötigt und nicht die GUID, hatte die Funktion “FindNearest~” also zwei Objekte zurückgeliefert und somit muss es wohl zu einem Internen Konflikt oder so gekommen sein.

Also herzlichen dank an eure Unterstützung!

Sollte ich nichts mehr Posten bis Weihnachten, ein Frohes Weihnachtsfest euch allen!