Charakter im Inventar

  • #1, by kodschFriday, 01. May, 15:05 3 months ago
    Hallo,
    ich habe einen NPC in mein Inventar gesteckt. Dieser soll nun zu einigen Objekten was sagen.
    Ich habe einen Charkter mit einem leeren PNG erstellt. Soll er mit Objekten aus der Umgebung interagieren so setze ich ihn auf die Objektposition und es sieht so aus als würde er aus der Tasche des Hauptcharkters heraus sprechen.
    Das klappt soweit ganz gut. Aber wenn das Inventar auf ist und der NPC mit Sachen aus meinem Inventar benutz wird, sollte er auch was dazu sagen. Aber wie bekomme ich den Text an die richtige Position, so dass es so aussieht als wäre der NPC im Inventar.
    Ich habe probiert den unsichtbaren NPC Charakter auf Verfolgen zu stellen, in der Hoffnung, das er immer sehr dicht an meinem Hauptcharakter steht aber das funktioniert leider nicht. Der NPC bleibt an seiner Position.
    Vielleicht müsste ich die Position des Hauptcharakters auslesen und auf den NPC übertragen? Nur wie?
    Habe ich einen Denkfehler und der Workaround für einen NPC im Inventar ist falsch oder hat wer noch einen Tip?

    Newbie

    6 Posts


  • #2, by MachtnixSaturday, 02. May, 15:35 3 months ago
    Hallo, das ist ein witziger Einfall. Das sollte mit Positionsübernahme funktionieren. Dazu müsstest du ein winziges Lua-Script vor jedem Aufruf des NPC einbauen. Der Spieler sieht ja den NPC nicht, es ist also egal, wo er sich befindet, wenn er inakiv ist. Erst dann, bevor er redet, wird er an die Charakterposition gebeamt.

    Die erforderlichen Befehle sind im Wiki zu ermitteln, dazu muss man sich ein wenig ins Interface einarbeiten. Aus der Erinnerung weiß ich gerade nur, dass du mit "get" und "set" Objekt- und Charakterposition ansprechen kannst. Du fragst die aktuelle Charakterposition mit "get"ab, speicherst diese in einer "Warte"variable und überträgst deren Werte mit "set"auf die Positionswerte des NPC. Dazu müssen beide Objekte erst eingelesen und definiert werden. So habe ich das gelöst, ich nehme an, es geht auch einfacher - aber es funktioniert.

    Ich müsste meine Scripte erst nachlesen, um dir die Kommandos zu nennen. Ob das auch mit den Editor-Kommandos geht, weiß ich nicht. Ist der Abstand zwischen Hosentasche (NPC) und Hauptcharacter tatsächlich so deutlich, dass sich der Aufwand rentiert?

    Machtnix

    Hier aus dem Wiki:

     -- set character "Tom" to position x(100), y(300)
    1
     local tom = getObject("Characters[Tom]")
    1
     tom:setValue(VCharacterPosition, {x=100,y=300})
    1

    Thread Captain

    1078 Posts

  • #3, by MachtnixSaturday, 02. May, 22:26 3 months ago
    Ich habe hier ein altes Script, bei dem Charakter 1 mit Charakter 2 vertauscht wird. Weil du nur die Hauptcharakter-Position dem NPC zuordnen willst, brauchst du den  Mittelteil nicht. Aber vielleicht kannst du damit was anfangen.

    Ich bin kein Programmierer und mache alles deshalb immer sehr schrittweise. Wahrscheinlich ist eine Menge zuviel und man kann Befehle abkürzen, aber danach weiß ich dann nie, was und warum ich was gemacht habe...

    -- Ordne den beiden Charakteren Elfe und Elfe_invers ein Objekt zu und hole dies
    1
    Obj_Elfe = getObject("Characters[Elfe]")
    1
    Obj_Elfe_invers = getObject("Characters[Elfe_invers]")
    1
    1
    --Hole die Punktpositionen und ordne sie den Objekten zu
    1
    Pos_Obj_Elfe = getObject("Characters[Elfe]"):getPoint(VCharacterPosition)
    1
    Pos_Obj_Elfe_invers = getObject("Characters[Elfe_invers]"):getPoint(VCharacterPosition)
    1
    1
    --x- und y-Position der aktiven Spielfigur 
    1
    x_aktiv = Pos_Obj_Elfe.x 
    1
    2
    y_aktiv = Pos_Obj_Elfe.y
    1
    x_invers = Pos_Obj_Elfe_invers.x --Position der inversen Figur
    1
    y_invers = Pos_Obj_Elfe_invers.y
    1
    1
    --speichere die aktive Spielfigur-Position in Parkvariable
    1
    x_park = x_aktiv 
    1
    y_park = y_aktiv
    1
    1
    -- speichere die inverse Spielfigur-Position in Parkvariable
    1
    x_park_invers = x_invers 
    1
    y_park_invers = y_invers
    1
    1
    x_aktiv = 1000 - x_invers-- setze aktive Position auf inverse Position
    1
    y_aktiv = 600 - y_invers
    1
    x_invers = 1000 - x_park --hole Position der inversen Figur aus der Parkvariable
    1
    y_invers = 600 - y_park
    1
    Obj_Elfe:setValue(VCharacterPosition, {x=x_aktiv,y=y_aktiv}) -- setze neue Positionen
    1
    Obj_Elfe_invers:setValue(VCharacterPosition, {x=x_invers,y=y_invers})
    1
    1

    Thread Captain

    1078 Posts

  • #4, by kodschTuesday, 05. May, 19:10 3 months ago
    Hallo Machtnix,

    super. Das Script läuft leicht abgewandelt perfekt.
    Ich hätte es so niemals alleine hinbekommen. Vielen lieben Dank. 

    Newbie

    6 Posts

Write post