ShowQuestMarker
Fehlerbeschreibung
BlueByte (BB) hat mit Patch 1.3 das interne Objective.Distance verändert, um auch Entitäten zu erfassen, die erst im Spielverlauf ersetzt/erstellte werden. Dieses Objective findet Verwendung im Verhalten Goal_Knightdistance. Wenn dieses Objective in einer sichtbaren Quest verwendet wird, soll eigentlich über dem Ziel ein spezieller Marker erzeugt werden, der dem Spieler anzeigt wo er (meistens) den Helden hinbewegen soll.
Durch die Änderung seitens BB funktioniert dieses nicht mehr, da der dafür zuständigen Funktion ShowQuestMarker() irrtümlich nur der Scriptname übergeben wird, den sie aber nicht selbstständig zu einer notwendigen EntityID umwandelt.
Daher werden bei Verwendung der OriginalQSB von BB oder WikiQBS-Versionen vor 2.4 keine Questmarker mehr angezeigt.
Behebung
WikiQSB-Versionen ab 2.4 beheben diesen Fehler automatisch. Bei Verwendung dieser Versionen ergibt sich keine Notwendigkeit für weitere Massnahmen, auch im Script eingesetzte Objective.Distance verhalten sich dann wunschgemäss. (zeigen also Questmarker)
Wer ältere oder gar keine WikiQSB verwenden will, sollte in das globale Script folgenden Fix an einer freien Stelle einfügen:
function ShowQuestMarker(_Entity) local entityID = GetEntityId(_Entity) local x,y = Logic.GetEntityPosition(entityID) local Marker = EGL_Effects.E_Questmarker_low if Logic.IsBuilding(entityID) == 1 then Marker = EGL_Effects.E_Questmarker end Questmarkers[_Entity] = Logic.CreateEffect(Marker, x,y,0) end
Eine zusätzliche Ergänzung deaktiviert den Marker wenn die Quest versteckt ist. Ab QSB 3.0 Beta 5 wird auch ein zusätzlicher Parameter ins Goal_KnightDistance aufgenommen, um den Marker auch bei sichtbaren Quests bei Bedarf abzuschalten.
function QuestTemplate:ShowQuestMarkers() if self.Visible then for i=1, self.Objectives[0] do if self.Objectives[i].Type == Objective.Distance and (not self.Objectives[i].Data[3]) then ShowQuestMarker(self.Objectives[i].Data[2]) end end end end




