[C++] Add Soll Zum Boss Laufen!

Guten Abend Deutschland!

Heute habe ich mich darin versucht einen Boss zu schreiben der ein Add ruft und dieses dann egal wo der Boss sich befindet, direkt hinläuft. Ist es beim Boss angekommen, dann lasse ich es einen Zauber ausführen und despawnen. Doch leider habe ich meine Schwierigkeiten damit.

Folgende Möglichkeiten habe ich gefunden.

Möglichkeit 1:


Creature *pBoss = me->FindNearestCreature( ENTRY_ID_BOSS, 100.0F );

me->GetMotionMaster()->GetDestination( pBoss->GetPostionX(), pBoss->GetPositionY(), pBoss->GetPositionZ() );

Definition

GetDestination( float &x, float &y, float &z );

Doch leider erwartet die Methode GetDestination Addressen als Optionen. Somit lässt sich “me->GetPostionX()” nicht umsetzen. Da ein Float Wert übergeben wird und keine Adresse. Nun stecke ich bei der Methode fest.

Möglichkeit 2:


Creature *pBoss = me->FindNearestCreature( ENTRY_ID_BOSS, 100.0F );

me->GetMotionMaster()->MoveFollow( pBoss, 0.0F, 0.0F )

Definition

MoveFollow( Unit* target, float dist, float angle, MovementSlot slot )

Hier soll das Add ein Boss folgen und bis auf 0 Meter ran laufen. Doch leider steht das Add nur doof rum!

Habt ihr vielleicht Ideen wie ich das umsetzen könnte? Also wie gesagt, der Boss ruft das Add und wenn es beim Boss angekommen ist, dann Heile den Boss und despawn mit

DespawnOrUnsummon();[/code]

Freue mich auf eure Antworten!

LG Yellow

EDIT: KEINER EINE IDEE?

Moin,

auch wenn das Topic schon etwas älter ist …

Meiner Meinung nach ist der einfachste Weg (wenn zum Beispiel sich der Boss auch bewegt), einen Timer zu definieren (Bsp 500 oder 1000) und in diesem dann folgendes aufrufst:


if (Creature* boss = me->FindNearestCreature( ENTRY_ID_BOSS, 100.0f, true )) // musst true glaub net unbedingt anhängen, da es Standart ist, ich mach es dennoch gerne immer

	 me->GetMotionMaster()->MovePoint(0, boss->GetPostionX, etc.)

else me->DespawnOrUnsummon(); // Sicherheitshalber, wenn der Boss tot ist - dann stehts net einfach so dumm rum

Um nun zu erreichen, damit das Add etwas Castet, wenn es beim Boss ankomment, kannst du über 2 Wege gehen

  1. Wieder ein Timer, bei dem du die GetDistanze() < 3.0f beispielsweise abfragst und dann etwas casten lässt

if (Creature* boss = me->FindNearestCreature( ENTRY_ID_BOSS, 100.0f, true ))

   if (me->GetDistanze() < 3.0f)

	  DoCast(boss, SPELL_EXAMPLE)

Oder du gehst über die Moveinlineofsight … wobei ich es über Timer schöner finde.

Natürlich gibt es sicherlich tausende andere Wege, die vielleicht auch ein wenig besser sind und auch nicht so recheneintensiv, aber für den Anfang reicht es.

Ferner kann es sein, dass ich Tippfehler in den Funktionen habe, da ich gerade den TC nicht zur Hand habe.

LG

Dank dir für deinen Beitrag. Ich werde mich, wenn ich wieder etwas Zeit für C++ finde, es mal versuchen. Wobei ich es komisch finde das du

me->GetDistance() < 3.0f

nutzt, statt

boss->GetDistance() < 3.0f[/code]

Oder habe ich jetzt eine Denkfehler drinnen? /emoticons/default_ph34r.png

Danke LG

Yellow

PS: Hast du ein Beispiel für “Moveinlineofsight”?

Nein das reichte mir schon! Danke schön /emoticons/default_wink.png

Gerne … wenn du weitere Fragen hast, kannst dich gerne melden /emoticons/default_smile.png