Charakter im Inventar

  • #1, by kodschFriday, 01. May 2020, 15:05 4 years 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 2020, 15:35 4 years 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)
     local tom = getObject("Characters[Tom]")
     tom:setValue(VCharacterPosition, {x=100,y=300})

    Thread Captain

    1097 Posts

  • #3, by MachtnixSaturday, 02. May 2020, 22:26 4 years 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
    Obj_Elfe = getObject("Characters[Elfe]")
    Obj_Elfe_invers = getObject("Characters[Elfe_invers]")
    --Hole die Punktpositionen und ordne sie den Objekten zu
    Pos_Obj_Elfe = getObject("Characters[Elfe]"):getPoint(VCharacterPosition)
    Pos_Obj_Elfe_invers = getObject("Characters[Elfe_invers]"):getPoint(VCharacterPosition)
    --x- und y-Position der aktiven Spielfigur 
    x_aktiv = Pos_Obj_Elfe.x 
    
    y_aktiv = Pos_Obj_Elfe.y
    x_invers = Pos_Obj_Elfe_invers.x --Position der inversen Figur
    y_invers = Pos_Obj_Elfe_invers.y
    --speichere die aktive Spielfigur-Position in Parkvariable
    x_park = x_aktiv 
    y_park = y_aktiv
    -- speichere die inverse Spielfigur-Position in Parkvariable
    x_park_invers = x_invers 
    y_park_invers = y_invers
    x_aktiv = 1000 - x_invers-- setze aktive Position auf inverse Position
    y_aktiv = 600 - y_invers
    x_invers = 1000 - x_park --hole Position der inversen Figur aus der Parkvariable
    y_invers = 600 - y_park
    Obj_Elfe:setValue(VCharacterPosition, {x=x_aktiv,y=y_aktiv}) -- setze neue Positionen
    Obj_Elfe_invers:setValue(VCharacterPosition, {x=x_invers,y=y_invers})

    Thread Captain

    1097 Posts

  • #4, by kodschTuesday, 05. May 2020, 19:10 4 years 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