nene, schon die Position des Textes nutzen, welche beim starten eines Charactertextes definiert ist, nicht die Charakter Position.
Basierend auf dem Script von AFRLme :
local savezone
function setTextPosHook(text)
-- if text owner is a character then...
if text.Owner):getId().tableId == eCharacters then
(insert here the detection of your savezone calculation)
text.Position = {x=text.Positiin.x+savezone, y=text.Position.y
return true
end
end
-- let's create the event listener for handling position of displayed text
registerHookFunction("setTextPosition", "setTextPosHook")
In der Tat ist hier dann ein Problem in deinem Fall, dass du keine maximale Zeilenbreite hast.
Es gibt schon eine Methode die Dimension eines dargestellten Textstrings zu erfassen:
www.visionaire-studio.com/luadocs/#graphics108
Dies nutze ich zum Beispiel selbst in meinem Sprechblasen-Skript da diese momentan auch nur mit manuellen Zeilenumbrüchen sinnvoll klappen.
Man müsste also die Dimensions-Berechnung im obigen Skript miteinbeziehen und die Hälfte davon von text.Position.x abziehen oder draufrechnen, um den linken oder rechten Rand zu bekommen. Und diesen wiederrum gegenchecken, ob er z.B. 10px nicht unter oder überschreiten von 0 bzw. game.WindowResolution.x