Ergebnis 1 bis 18 von 18

Thema: Event-Event Touch Trigger?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Event-Event Touch Trigger?

    Ja hallo liebe mit Spiele-Tüftler, ich wollte mal nachfragen, ob es möglich ist über ein Skript in einem Conditional Brunch bei der Berührung eines Events mit einem anderen Event (wie Player Touch oder Event Touch) einen Prozess einzuleiten. Und wie es möglich ist, in einem Conditional Brunch den Event und/oder Player Tuch per Skript einzubauen, kann mir dass mal bitte jemand sagen/erklären.
    Ich weiß selbst, dass ich das auch mit Variablen hinkriege, aber das währe wirklich zu aufwändig, wenn also bitte jemand helfen könnte.

    Geändert von OneEyeShadow (18.06.2009 um 21:59 Uhr)

  2. #2
    Anders als mit Variablen wirst du es nicht hinbekommen. Du solltest 4 Variablen anlegen.
    1. event1_X - enthält die X Koordinate des 1. Events
    2. event1_Y - enthält die Y Koordinate des 1. Events
    3. event2_X - enthält die X Koordinate des 2. Events
    4. event2_Y - enthält die Y Koordinate des 2. Events

    Nun fragst du in einem Event (Parallel Process) mit Conditions folgendes ab:

    > Condition: event1_X = event2_X
    > Condition: event1_Y = event2_>
    > Message: "Die Events haben sich berührt."

    So in der Art sehe das dann aus.

  3. #3
    Das würde aber nu funktionieren wenn die Events aufeinander sollen, z.B. ein stein auf einen schalter, aber wenn sich events behrühren heißt das ja nicht das sie unbedingt auf dem selben feld sein müssen.

  4. #4
    Ich verstehe zwar nicht ganz, was du mit Conditional Branches willst, aber folgendes kann ich zum Thema Event-Event-Trigger sagen:

    Wenn man mit RGSS rumpfuscht, geht das sicher auch direkter, als in einem Parallel-Process laufend die Koordinaten abzufragen. Meine Idee wäre, den Code, der dafür sorgt, dass OnTouch Events ausgeführt werden, zu kopieren, die Kopie entsprechend anzupassen und einen neuen Triggertyp einzuführen. Um den Triggertyp zu setzen, müsste man entweder den Maker ein wenig modifizieren (könnte mit ResHack machbar sein) oder per RGSS zur Laufzeit in der Page-Klasse rumbasteln. Der Triggertyp ist schließlich auch nur eine Zahl.

  5. #5
    also per conditional branch wäre es theoretisch möglich aber halt auch seeehr umständlich.
    (würde es so machen: nach jeder bewegung abfragen ob die koordinaten sich verändert haben - falls die koordinaten des events noch die selben sind bedeutet das dass sich das event nicht bewegen konnte.
    in dem fall muss man dann noch für jedes event abfragen ob es auf den zielkoordinaten steht, auf die das 1. event eigentlich gegangen wäre.
    wenn eines auf diesen koordinaten steht heißt es, dass dieses event die bewegung blockiert hat und muss gestartet werden.)

    @dfyx
    so würde ich es auch machen nur ohne den reshack part.
    ich empfehle eher den neuen trigger über ein bestimmtes wort in einem event command kommentar auszuwählen.

    @oneyeshadow
    ich kann versuchen dir eine rgss lösung anzubieten wenn du das wünschst. das wäre dann aber kein conditional branch mehr

  6. #6
    Über eine RGSS Lösung dieses Problems währe ich sehr dankbar, müsste ich nicht mit den sechs Conditional Brunches und den 8 Variablen Arbeiten, da verliert ja jeder den überblick, und funktionieren tuts auch nicht richtig,
    also über eine RGSS-Lösung währe ich schon sehr dankbar.

  7. #7
    Code:
    class Game_Event
      alias trigger_refresh refresh
      def refresh
        trigger_refresh
        return if @list.nil?
        for i in 0...@list.size
          if @list[i].code == 108
            if @list[i].parameters.to_s.upcase == "TRIGGER"
              @trigger = -1
            end
          end
        end
      end
      def check_event_trigger_touch(x, y)
        if $game_system.map_interpreter.running?
          return
        end
        if @trigger == 2 and x == $game_player.x and y == $game_player.y
          if not jumping? and not over_trigger?
            start
          end
        else
          for event in $game_map.events.values
            next unless event.trigger == -1
            next if event == self
            if not jumping? and not over_trigger?
              if event.x == x and event.y == y
                event.start
                break
              end
            end
          end
        end
      end
    end
    code über main einfügen und ein kommentar mit "trigger" (ohne "") bei dem event einfügen, welches durch event kontakt gestartet werden soll.
    falls bugs auftreten einfach posten

  8. #8
    Danke, funktioniert einwandfrei, aber ist es auch möglich diesen Trigger nur bei berührung durch ein bersonderes Event zu aktivieren bzw das Event, dass den trigger des Anderen Events ausgelöst hat irgendwie direkt abzufragen?

    Geändert von OneEyeShadow (28.06.2009 um 12:17 Uhr)

  9. #9
    Code:
    class Game_Event
      alias trigger_refresh refresh
      attr_reader :triggertarget
      def refresh
        trigger_refresh
        @triggertarget = -1
        return if @list.nil?
        for i in 0...@list.size
          if @list[i].code == 108
            if @list[i].parameters.to_s.upcase == "TRIGGER"
              @trigger = -1
            end
            if @list[i+1].code == 408
              @triggertarget = @list[i+1].parameters.to_s.to_i
            end
          end
        end
      end
      def check_event_trigger_touch(x, y)
        if $game_system.map_interpreter.running?
          return
        end
        if @trigger == 2 and x == $game_player.x and y == $game_player.y
          if not jumping? and not over_trigger?
            start
          end
        else
          for event in $game_map.events.values
            next unless event.trigger == -1
            next if self.id != event.triggertarget and event.triggertarget != -1
            next if event == self
            if not jumping? and not over_trigger?
              if event.x == x and event.y == y
                event.start
                break
              end
            end
          end
        end
      end
      def lock
        if @locked
          return
        end
        @prelock_direction = @direction
        turn_toward_player if @trigger != -1
        @locked = true
      end
    end
    das vorherige script damit überschreiben.
    aktiviert wird es wieder über ein kommentar mit trigger und wenn es nur durch ein bestimmtes event ausgelöst werden soll, musst du in die zeile darunter die id dieses events eingeben.
    bsp
    Code:
    trigger
    2
    wenn keine zahl eingegeben wird, kann das event durch jedes event gestartet werden wie in der alten version.

    außerdem hab ich den bug entfernt, dass sich das gestartete event zum spieler dreht.

  10. #10
    Danke, ich werds grad mal ausprobieren.

    EDIT: Also, irgendwie funktioniert das zweite überhaup nich, es funktioniert weder mit der ID des Auslösenden Events noch ohne ...

    Geändert von OneEyeShadow (28.06.2009 um 21:12 Uhr)

  11. #11
    ich hab eben ein neues projekt gemacht, script kopiert etc und es läuft alles einwandfrei.
    die einzigen gründe die mir einfallen sind
    1. fehler beim kommentar -> vertippt oder trigger steht nicht oben in der kommentar box
    2. die events berühren sich nicht -> trough/phasing an oder events stehen nur nebeneinander, laufen aber nicht gegeneinander
    3. vlt gibt es komplikationen mit anderen scripts, was aber eher unwarscheinlich ist, weil das alte funzt.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •