Ergebnis 1 bis 18 von 18

Thema: Event-Event Touch Trigger?

  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.

  12. #12
    OK, ich habs jetzt auch nochmal in nem neuen Projekt ausprobiert, und es geht, seltsamm, ich hab nur 4 andere Skripts hinzugefügt, 'n Vollbild-, 'n Event move to Event, ein Copy Event und ein Tastatur-Skript. Verdammt ...

  13. #13
    Event move to EventScript?
    Poste das mal bitte, daher wir ja das CopyEventschon haben(paar Thread unter dem hier)

    Außerdem bäuchte ich grad so ein Script^^

  14. #14
    Ich helf doch immer gern, das Script ist hier:

    hättest im Forum aber nur ein bischen weiter runtergehen brauchen, da hab ich's nämlich her.

    Ich Poste auch mal die anden zwei (ich geh mal davon aus, dass das Vollbildscript nix mit der fehlfunktion zu tun hat).

    Event Kopieren:


    Tastatur-Script:

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

  15. #15
    kannst du statt den spoieler-cod den PHP-code benutzen?
    daher jetzt die Leerzeichen weg sind.

  16. #16
    Zitat Zitat von Adrian2000 Beitrag anzeigen
    kannst du statt den spoieler-cod den PHP-code benutzen?
    daher jetzt die Leerzeichen weg sind.
    also solltest dann zB so aussehen:
    PHP-Code:
    class Game_Character
      def move_to_event
    (event_id)
        
    # Get difference in event coordinates
        
    sx = @$game_map.events[event_id].x
        sy 
    = @$game_map.events[event_id].y
        
    # If coordinates are equal
        
    if sx == and sy == 0
          
    return
        
    end
        
    # Get absolute value of difference
        
    abs_sx sx.abs
        abs_sy 
    sy.abs
        
    # If horizontal and vertical distances are equal
        
    if abs_sx == abs_sy
          
    # Increase one of them randomly by 1
          
    rand(2) == abs_sx += abs_sy += 1
        end
        
    # If horizontal distance is longer
        
    if abs_sx abs_sy
          
    # Move towards event, prioritize left and right directions
          
    sx move_left move_right
          
    if not moving? and sy != 0
            sy 
    move_up move_down
          end
        
    # If vertical distance is longer
        
    else
          
    # Move towards event, prioritize up and down directions
          
    sy move_up move_down
          
    if not moving? and sx != 0
            sx 
    move_left move_right
          end
        end
      end
    end 

  17. #17
    Kein Problem:

    Move to Event:

    PHP-Code:
    class Game_Character
      def move_to_event
    (event_id)
        
    # Get difference in event coordinates
        
    sx = @$game_map.events[event_id].x
        sy 
    = @$game_map.events[event_id].y
        
    # If coordinates are equal
        
    if sx == and sy == 0
          
    return
        
    end
        
    # Get absolute value of difference
        
    abs_sx sx.abs
        abs_sy 
    sy.abs
        
    # If horizontal and vertical distances are equal
        
    if abs_sx == abs_sy
          
    # Increase one of them randomly by 1
          
    rand(2) == abs_sx += abs_sy += 1
        end
        
    # If horizontal distance is longer
        
    if abs_sx abs_sy
          
    # Move towards event, prioritize left and right directions
          
    sx move_left move_right
          
    if not moving? and sy != 0
            sy 
    move_up move_down
          end
        
    # If vertical distance is longer
        
    else
          
    # Move towards event, prioritize up and down directions
          
    sy move_up move_down
          
    if not moving? and sx != 0
            sx 
    move_left move_right
          end
        end
      end
    end 

    Event Kopieren:
    PHP-Code:
    class Spriteset_Map
      def add_sprite
    (event)
        @
    character_sprites.push(Sprite_Character.new(@viewport1,event))
      
    end
    end

    class Scene_Map
      def copy_event
    (map_id,event_id)
        
    event Game_Event.new(map_idload_data(sprintf("Data/Map%03d.rxdata"map_id)).events[event_id])
        
    $game_map.events[$game_map.events.keys.max+1] = event
        event
    .id $game_map.events.keys.max
        
    @spriteset.add_sprite(event)
        
    event.refresh
        
    return event
      end
    end

    class Game_Event
      def id
    =(n)
        @
    id n
        
    @event.id n
      end
    end 
    Tastatur-Script:
    PHP-Code:
     
    #======================================
    # ■ Keyboard Script
    #---------------------------------------------------------------------------
    #  By: Cybersam
    # Date: 25/05/05
    # Version 4
    #======================================
     
    module Kboard
    #--------------------------------------------------------------------------
    $RMouse_BUTTON_L 0x01 # left mouse button
    $RMouse_BUTTON_R 0x02 # right mouse button
    $RMouse_BUTTON_M 0x04 # middle mouse button
    $RMouse_BUTTON_4 0x05 # 4th mouse button 
    $RMouse_BUTTON_5 0x06 # 5th mouse button
    #--------------------------------------------------------------------------
    $R_Key_BACK 0x08 # BACKSPACE key
    $R_Key_TAB 0x09 # TAB key
    $R_Key_RETURN 0x0D # ENTER key
    $R_Key_SHIFT 0x10 # SHIFT key
    $R_Key_CTLR 0x11 # CTLR key
    $R_Key_ALT 0x12 # ALT key
    $R_Key_PAUSE 0x13 # PAUSE key
    $R_Key_CAPITAL 0x14 # CAPS LOCK key
    $R_Key_ESCAPE 0x1B # ESC key
    $R_Key_SPACE 0x20 # SPACEBAR
    $R_Key_PRIOR 0x21 # PAGE UP key
    $R_Key_NEXT 0x22 # PAGE DOWN key
    $R_Key_END 0x23 # END key
    $R_Key_HOME 0x24 # HOME key
    $R_Key_LEFT 0x25 # LEFT ARROW key
    $R_Key_UP 0x26 # UP ARROW key
    $R_Key_RIGHT 0x27 # RIGHT ARROW key
    $R_Key_DOWN 0x28 # DOWN ARROW key
    $R_Key_SELECT 0x29 # SELECT key
    $R_Key_PRINT 0x2A # PRINT key
    $R_Key_SNAPSHOT 0x2C # PRINT SCREEN key
    $R_Key_INSERT 0x2D # INS key
    $R_Key_DELETE 0x2E # DEL key
    #--------------------------------------------------------------------------
    $R_Key_0 0x30 # 0 key
    $R_Key_1 0x31 # 1 key
    $R_Key_2 0x32 # 2 key
    $R_Key_3 0x33 # 3 key
    $R_Key_4 0x34 # 4 key
    $R_Key_5 0x35 # 5 key
    $R_Key_6 0x36 # 6 key
    $R_Key_7 0x37 # 7 key
    $R_Key_8 0x38 # 8 key
    $R_Key_9 0x39 # 9 key
    #--------------------------------------------------------------------------
    $R_Key_A 0x41 # A key
    $R_Key_B 0x42 # B key
    $R_Key_C 0x43 # C key
    $R_Key_D 0x44 # D key
    $R_Key_E 0x45 # E key
    $R_Key_F 0x46 # F key
    $R_Key_G 0x47 # G key
    $R_Key_H 0x48 # H key
    $R_Key_I 0x49 # I key
    $R_Key_J 0x4A # J key
    $R_Key_K 0x4B # K key
    $R_Key_L 0x4C # L key
    $R_Key_M 0x4D # M key
    $R_Key_N 0x4E # N key
    $R_Key_O 0x4F # O key
    $R_Key_P 0x50 # P key
    $R_Key_Q 0x51 # Q key
    $R_Key_R 0x52 # R key
    $R_Key_S 0x53 # S key
    $R_Key_T 0x54 # T key
    $R_Key_U 0x55 # U key
    $R_Key_V 0x56 # V key
    $R_Key_W 0x57 # W key
    $R_Key_X 0x58 # X key
    $R_Key_Y 0x59 # Y key
    $R_Key_Z 0x5A # Z key
    #--------------------------------------------------------------------------
    $R_Key_LWIN 0x5B # Left Windows key (Microsoft Natural keyboard) 
    $R_Key_RWIN 0x5C # Right Windows key (Natural keyboard)
    $R_Key_APPS 0x5D # Applications key (Natural keyboard)
    #--------------------------------------------------------------------------
    $R_Key_NUMPAD0 0x60 # Numeric keypad 0 key
    $R_Key_NUMPAD1 0x61 # Numeric keypad 1 key
    $R_Key_NUMPAD2 0x62 # Numeric keypad 2 key
    $R_Key_NUMPAD3 0x63 # Numeric keypad 3 key
    $R_Key_NUMPAD4 0x64 # Numeric keypad 4 key
    $R_Key_NUMPAD5 0x65 # Numeric keypad 5 key
    $R_Key_NUMPAD6 0x66 # Numeric keypad 6 key
    $R_Key_NUMPAD7 0x67 # Numeric keypad 7 key
    $R_Key_NUMPAD8 0x68 # Numeric keypad 8 key
    $R_Key_NUMPAD9 0x69 # Numeric keypad 9 key
    $R_Key_MULTIPLY 0x6A # Multiply key (*)
    $R_Key_ADD 0x6B # Add key (+)
    $R_Key_SEPARATOR 0x6C # Separator key
    $R_Key_SUBTRACT 0x6D # Subtract key (-)
    $R_Key_DECIMAL 0x6E # Decimal key
    $R_Key_DIVIDE 0x6F # Divide key (/)
    #--------------------------------------------------------------------------
    $R_Key_F1 0x70 # F1 key
    $R_Key_F2 0x71 # F2 key
    $R_Key_F3 0x72 # F3 key
    $R_Key_F4 0x73 # F4 key
    $R_Key_F5 0x74 # F5 key
    $R_Key_F6 0x75 # F6 key
    $R_Key_F7 0x76 # F7 key
    $R_Key_F8 0x77 # F8 key
    $R_Key_F9 0x78 # F9 key
    $R_Key_F10 0x79 # F10 key
    $R_Key_F11 0x7A # F11 key
    $R_Key_F12 0x7B # F12 key
    #--------------------------------------------------------------------------
    $R_Key_NUMLOCK 0x90 # NUM LOCK key
    $R_Key_SCROLL 0x91 # SCROLL LOCK key
    #--------------------------------------------------------------------------
    $R_Key_LSHIFT 0xA0 # Left SHIFT key
    $R_Key_RSHIFT 0xA1 # Right SHIFT key
    $R_Key_LCONTROL 0xA2 # Left CONTROL key
    $R_Key_RCONTROL 0xA3 # Right CONTROL key
    $R_Key_L_ALT 0xA4 # Left ALT key
    $R_Key_R_ALT 0xA5 # Right ALT key
    #--------------------------------------------------------------------------
    $R_Key_SEP 0xBC # , key
    $R_Key_DASH 0xBD # - key
    $R_Key_DOTT 0xBE # . key
    #--------------------------------------------------------------------------
    GetKeyState Win32API.new("user32","GetAsyncKeyState",['i'],'i')
    GetKeyboardState Win32API.new("user32","GetKeyState",['i'],'i')
    GetSetKeyState Win32API.new("user32","SetKeyboardState",['i'],'i')
    #--------------------------------------------------------------------------
    module_function
    #--------------------------------------------------------------------------
    def keyb(rkey)
    if 
    GetKeyState.call(rkey) != 0
    return 1
    end
    return 0
    end
    #--------------------------------------------------------------------------
    def keyboard(rkey)
    GetKeyState.call(rkey) & 0x01 == #
    end
    #--------------------------------------------------------------------------
    def key(rkeykey 0)
    GetKeyboardState.call(rkey) & 0x01 == key #
    end
    end
     
     
    =begin
     
    How to 
    use it:
     
    You must do IF statements in your scripts in order for this to work... so we'll look at how to add an actions to the button E that would print the message YIPEE on screen. 
     
    STEP 2:
     
    TO do an IF, you can check my RGSS Reference for further help. But it would look like that:
     
     
    CODE
    if keyboard(R_Key_E)
    print "YIPEE!"
    end
     
     
    -> That IF must be in the UPDATE method, that way it'
    s always being checked out.
     
    You can use those in conditional events in the event editor tooon Page 4 you can use "Script"just write that in it.
     
    The syntax usedkeyboard(R_Key_E)
     
    R_Key_E This is where you write the key you want to bind to the action in the IF. The complete list is in Keyboard_Input class.
     
    If 
    you have any questionsfeel free to ask them here
    =
    end 

  18. #18
    wißt du, was du jetzt machst?
    Du machst ein neues spiel, wo du alle Scripts reintust, die in deinem anderen Projekt auch sind bzw. verändert wurden.
    Teste nun das Spiel. sollt der Fehler nun da sein, schneide ein(!) Scrict per Cut aus. Teste es nun. Jetzt gibt s zwei möglichkeiten:
    a) alles läuft, so wie du es haben willst. Urteil: Das ausgeschnittene Script war s***e^^
    b) immernoch Fehler? Für das Script wieder ein und mache nun das gleiche mit dem nächsten Script.

    Kappische^^

Berechtigungen

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