Ich suche seit gestern Abend alternative Target Methoden für ein Boss Script.
Ich suche halt sowas wie z.B. (AUSGEDACHT)
SelectTarget(SELECT_TARGET_MAINTANK,0) // Haupttank
SelectTarget(SELECT_TARGET_LOW_AGGRO) // Den mit der geringsten Aggro
SelectTarget(SELECT_TARGET_MANA_CLASS) // Eine Manaklasse
Doch leider finde ich immer nur
if( Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
DoCast(pTarget, SPELL_MIND_FLAY);
}
oder
if(Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
lich->AI()->AttackStart(target);
Wäre super wenn mir jemand erklären könnte welche Makros “SELECT_TARGET_XXX” es noch gibt /emoticons/default_smile.png
Schau dir bei sowas die Definition der Funktion an, die du aufrufst. In dem Fall würde dir auffallen, dass die 0, welche du übergibst, dem Rang in der Threatliste entspricht. 0 ist die Unit, mit dem meisten Hass. Um die Unit mit dem niedrigsten Hass heraus zu bekommen, müsstest du vorher die Hassliste abfragen, schaun wie viele dort drin sind und dann die Anzahl -1 übergeben, weil Array mit 0 beginnt. Durch den boolschen Wert am Ende, übergibst du, ob die Unit ein Spieler sein muss. True steht dafür, dass nur Spieler als target in Frage kommt. False für alle Units, also auch Pets, Totems und dergleichen.
An sich ja. Allerdings musst du da vorsichtig sein mit festen Werten, da es ja sein könnte, dass nicht mehr alle am Leben sind, wodurch ein TargetSelector mit 4 in einer 5 Gruppe unter Umständen eben kein Ziel zurück gibt, da das Tod ist, oder noch keinen Hass auf dem Mob hat oder oder oder.
Da besteht noch ein Missverständnis. Wie gesagt, wirst du die Funktion besser verstehen, wenn du sie dir einfach mal anschaust. Bist ja nicht auf den Kopf gefallen.
Ansonsten, der übergebene Parameter, ist quasi nen Minimumwert. Sprich, wenn du zum Beispiel 1 eingibst, dann heißt das nicht, dass es immer der zweite in der Hassliste ist, sondern höchstens der zweite in der Hassliste. Sprich, man würde 1 übergeben, wenn man wollte, dass jeder außer der Tank, betroffen sein kann.
Um den niedrigsten in der Liste zu bekommen, würde ich es in etwa so machen:
int number_of_targets = 0;
Map::PlayerList const &players = instance->GetPlayers();
if (!players.isEmpty())
if (Player* player = players.begin()->getSource())
if (player->isAlive() && player->isInThreadList()) // keine Ahnung, ob die Funktion so heißt, aber sowas in der Art müsste es geben
++number_of_targets;
if(Unit* target = SelectTarget(SELECT_TARGET_RANDOM, number_of_targets, 100.0f, true))
{
// do something with target
}
Damit solltest du in jedem Fall den letzten Spieler in der Hassliste als Target bekommen.
Super danke Micha. Ich werde mir mal die Funktion genauer anschauen.
Wobei ich sagen muß das ich noch nicht mit Klasse Map gearbeitet habe. Werde mir diese wohl auch genauer anschauen müssen /emoticons/default_biggrin.png
Aber erstmal herzlichen dank…
PS: Schade das es keine Ref zu den Classen und Funktionen gibt. So wie im Wiki bei der DB und DBC’s /emoticons/default_wink.png