RPGVX.net

  RPGVX.net => RPGVX.net Service => Archiv => Thema gestartet von: KoBa am März 10, 2008, 01:47:31

Titel: (Tech) Problem bei Schalter Rätsel
Beitrag von: KoBa am März 10, 2008, 01:47:31
Hallo!

Also ich hab zwei Probleme wo ich nach viel herumprobieren nicht wirklich weiter komme.

Beim ersten gibts eine Tür, die verschlossen ist, und daneben 4 Schalter. Nun soll die Tür nur dann aufgehen, wenn alle 4 Schalter UNTEN sind. Meine Überlegung war, dass bei anklicken des Schalters die Textbox erscheint mit zwei Auswahlmöglichkeiten: "Schalter nach oben" / "Schalter nach unten". Hab mich dann mit Variablen herumgespielt, habs aber nur bedingt hinbekommen. Ich kriegs so hin, dass wenn der Schalter unten ist, die Variable um den Wert 1 erhöht wird, wenn er oben ist um 1 verringert wird. Das ginge ja, nur dann kann man auch einfach den ersten Schalter 4mal nach unten drücken und das Tor geht auch auf (was nicht der Sinn der Sache ist).
Mit Switches bin ich auch gescheitert. Hat da wäre ein Idee?

Die zweite Frage:

Ich will ein Event machen, bei dem wenn ich es berühre, aus meinen Charakter die anderen drei Partymitglieder "herauslaufen" (das kennt man ja aus diversen Spielen). Ich kriegs hin, dass einer rausläuft, aber mehr nicht. Hätte gern dass alle drei auf einmal rauslaufen.


Gruss KoBa
Titel: Problem bei Schalter Rätsel
Beitrag von: $@$uk€ am März 10, 2008, 01:55:15
Zum ersten Event:

Also für mich hört sich das an, als wenn du dafür 4 Variablen brauchst, je Schalter 1 - 4.
Und es bei jedem Schalter mit seiner eigenen Variable so einstellst:
Bedingung:
Wenn Variable = 0:
  Bedingung:
Wenn Schalter "Runter" = Variable +1
  andere Möglichkeit:
Wenn Schlater "Hoch" = Variable -1
 
   Bedingung:
Wenn Variable = 1   dann  
    Bedingung:
Wenn Schalter "Runter" = Variable konstant bleiben
    andere Möglichkeit:
Wenn Schalter "Hoch" = Variable -2

  Bedingung:
Wenn Variable = -1   dann
   Bedingung:
Wenn Schalter "Hoch" = Variable konstant bleiben
   andere Möglichkeit:
Wenn Schalter "Runter" = Variable +2


So, ich hoffe
1. Das hilft dir
2. Das es so richtig ist
und
3. Das, wenn sie zu kompliziert ist, jemand eine einfachere Lösung machen kann^^

Und zum 2. Event weiß ich leider nix, da ich selber noch nicht mal weiß, wie man jemanden dazu bringt aus dem Charakter zu laufen, könntest du mir erklären, wie du das gemacht hast? Das interessiert mich =)
Titel: Problem bei Schalter Rätsel
Beitrag von: KittySpeedy am März 10, 2008, 02:22:57
Hier ^^ hab ich hier irgendwo im Forum gefunden und in Word Pad gespeichert ^^
Hab jetzt keine Lust nochmal rauszusuchen xD

# MAX_SIZE = maximale Anzahl der folgenden Helden
  # CATERPILLAR = ID eines Switches um das Skript an-/auszuschalten.
  #--------------------------------------------------------------------------
  # * Konstanten
  #--------------------------------------------------------------------------
  MAX_SIZE = 8
  CATERPILLAR = 1

class Game_Player
  #--------------------------------------------------------------------------
  # * Move Down
  #     turn_enabled : a flag permits direction change on that spot
  #--------------------------------------------------------------------------
  def move_down(turn_enabled = true)    
    super(turn_enabled)
  end
  #--------------------------------------------------------------------------
  # * Move Left
  #     turn_enabled : a flag permits direction change on that spot
  #--------------------------------------------------------------------------
  def move_left(turn_enabled = true)
    super(turn_enabled)
  end
  #--------------------------------------------------------------------------
  # * Move Right
  #     turn_enabled : a flag permits direction change on that spot
  #--------------------------------------------------------------------------
  def move_right(turn_enabled = true)
    super(turn_enabled)
  end
  #--------------------------------------------------------------------------
  # * Move up
  #     turn_enabled : a flag permits direction change on that spot
  #--------------------------------------------------------------------------
  def move_up(turn_enabled = true)
    super(turn_enabled)
  end
  #--------------------------------------------------------------------------
  # * Move Lower Left
  #--------------------------------------------------------------------------
  def move_lower_left
    super
  end
  #--------------------------------------------------------------------------
  # * Move Lower Right
  #--------------------------------------------------------------------------
  def move_lower_right
    super
  end
  #--------------------------------------------------------------------------
  # * Move Upper Left
  #--------------------------------------------------------------------------
  def move_upper_left
    super
  end
  #--------------------------------------------------------------------------
  # * Move Upper Right
  #--------------------------------------------------------------------------
  def move_upper_right
    super
  end
end

class Game_Follower < Game_Character
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :actor
  attr_accessor :move_speed
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(actor)
    super()
    @through = true
    @actor = actor
  end
  #--------------------------------------------------------------------------
  # * Set Actor
  #--------------------------------------------------------------------------
  def actor=(actor)
    @actor = actor
    setup
  end
  #--------------------------------------------------------------------------
  # * Setup
  #--------------------------------------------------------------------------
  def setup
    if @actor != nil      
      @character_name = $game_actors[@actor].character_name
      @character_index = $game_actors[@actor].character_index
    else
      @character_name = ""
      @character_index = 0
    end
    @opacity = 255
    @blend_type = 0
    @priority_type = 0
  end
 
  #--------------------------------------------------------------------------
  # * Screen Z
  #--------------------------------------------------------------------------
  def screen_z
    if $game_player.x == @x and $game_player.y == @y
      return $game_player.screen_z - 1
    end
    super
  end
  #--------------------------------------------------------------------------
  # * Same Position Starting Determinant (Disabled)
  #--------------------------------------------------------------------------
  def check_event_trigger_here(triggers)
    result = false
    return result
  end
  #--------------------------------------------------------------------------
  # * Front Envent Starting Determinant (Disabled)
  #--------------------------------------------------------------------------
  def check_event_trigger_there(triggers)
    result = false
    return result
  end
  #--------------------------------------------------------------------------
  # * Touch Event Starting Determinant (Disabled)
  #--------------------------------------------------------------------------
  def check_event_trigger_touch(x, y)
    result = false
    return result
  end
end

class Spriteset_Map
  alias_method :spriteset_map_create_characters, :create_characters
  def create_characters
    spriteset_map_create_characters
    $game_party.followers.each do |char|
      @character_sprites << Sprite_Character.new(@viewport1, char)
    end
  end
end

class Game_Party

  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader :followers
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias_method :trick_caterpillar_party_initialize, :initialize
  def initialize
    trick_caterpillar_party_initialize
    @followers = Array.new(MAX_SIZE - 1) {Game_Follower.new(nil)}
    @move_list = []
  end
  #--------------------------------------------------------------------------
  # * Update Followers
  #--------------------------------------------------------------------------
  def update_followers
    flag = $game_player.transparent || $game_switches[CATERPILLAR]
    @followers.each_with_index do |char, i|
      char.actor = @actors[i + 1]
      char.move_speed = $game_player.move_speed
      if $game_player.dash?
        char.move_speed += 1
      end
      char.update
      char.transparent = flag
    end
  end
  #--------------------------------------------------------------------------
  # * Move To Party
  #--------------------------------------------------------------------------
  def moveto_party(x, y)
    @followers.each {|char| char.moveto(x, y)}
    @move_list.clear
  end
  #--------------------------------------------------------------------------
  # * Move Party
  #--------------------------------------------------------------------------
  def move_party
    @move_list.each_index do |i|
      if @followers == nil
        @move_list[i...@move_list.size] = nil
        next
      end
      case @move_list.type
      when 2
        @followers.move_down(*@move_list.args)
      when 4
        @followers.move_left(*@move_list.args)
      when 6
        @followers.move_right(*@move_list.args)
      when 8
        @followers.move_up(*@move_list.args)
      when j
        @followers.move_lower_left
      when 3
        @followers.move_lower_right
      when 7
        @followers.move_upper_left
      when 9
        @followers.move_upper_right
      when 5
        @followers.jump(*@move_list.args)
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Add Move List
  #--------------------------------------------------------------------------
  def update_move(type, *args)
    move_party
    @move_list.unshift(Game_MoveListElement.new(type, args))
  end
end

class Game_MoveListElement
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(type, args)
    @type = type
    @args = args
  end
  #--------------------------------------------------------------------------
  # * Type
  #--------------------------------------------------------------------------
  def type
    return @type
  end
  #--------------------------------------------------------------------------
  # * Args
  #--------------------------------------------------------------------------
  def args
    return @args
  end
end

class Game_Player
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader :move_speed
 
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  alias_method :trick_caterpillar_player_update, :update
  def update
    $game_party.update_followers
    trick_caterpillar_player_update
  end
  #--------------------------------------------------------------------------
  # * Moveto
  #--------------------------------------------------------------------------
  alias_method :trick_caterpillar_player_moveto, :moveto
  def moveto(x, y)
    $game_party.moveto_party(x, y)
    trick_caterpillar_player_moveto(x, y)
  end
  #--------------------------------------------------------------------------
  # * Move Down
  #--------------------------------------------------------------------------
  alias_method :trick_caterpillar_player_move_down, :move_down
  def move_down(turn_enabled = true)
    if passable?(@x, @y+1)
      $game_party.update_move(2, turn_enabled)
    end    
    trick_caterpillar_player_move_down(turn_enabled)    
  end
  #--------------------------------------------------------------------------
  # * Move Left
  #--------------------------------------------------------------------------
  alias_method :trick_caterpillar_player_move_left, :move_left
  def move_left(turn_enabled = true)
    if passable?(@x-1, @y)
      $game_party.update_move(4, turn_enabled)
    end
    trick_caterpillar_player_move_left(turn_enabled)
  end
  #--------------------------------------------------------------------------
  # * Move Right
  #--------------------------------------------------------------------------
  alias_method :trick_caterpillar_player_move_right, :move_right
  def move_right(turn_enabled = true)
    if passable?(@x+1, @y)
      $game_party.update_move(6, turn_enabled)
    end
    trick_caterpillar_player_move_right(turn_enabled)
  end
  #--------------------------------------------------------------------------
  # * Move Up
  #--------------------------------------------------------------------------
  alias_method :trick_caterpillar_player_move_up, :move_up
  def move_up(turn_enabled = true)
    if passable?(@x, @y-1)
      $game_party.update_move(8, turn_enabled)
    end
    trick_caterpillar_player_move_up(turn_enabled)
  end
  #--------------------------------------------------------------------------
  # * Move Lower Left
  #--------------------------------------------------------------------------
  alias_method :trick_caterpillar_player_move_lower_left, :move_lower_left
  def move_lower_left
    if passable?(@x - 1, @y) and passable?(@x, @y + 1)
      $game_party.update_move(1)
    end
    trick_caterpillar_player_move_lower_left
  end
  #--------------------------------------------------------------------------
  # * Move Lower Right
  #--------------------------------------------------------------------------
  alias_method :trick_caterpillar_player_move_lower_right, :move_lower_right
  def move_lower_right
    if passable?(@x + 1, @y) and passable?(@x, @y + 1)
      $game_party.update_move(3)
    end
    trick_caterpillar_player_move_lower_right
  end
  #--------------------------------------------------------------------------
  # * Move Upper Left
  #--------------------------------------------------------------------------
  alias_method :trick_caterpillar_player_move_upper_left, :move_upper_left
  def move_upper_left
    if passable?(@x - 1, @y) and passable?(@x, @y - 1)
      $game_party.update_move(7)
    end
    trick_caterpillar_player_move_upper_left
  end
  #--------------------------------------------------------------------------
  # * Move Upper Right
  #--------------------------------------------------------------------------
  alias_method :trick_caterpillar_player_move_upper_right, :move_upper_right
  def move_upper_right
    if passable?(@x + 1, @y) and passable?(@x, @y - 1)
      $game_party.update_move(9)
    end
    trick_caterpillar_player_move_upper_right
  end
  #--------------------------------------------------------------------------
  # * Jump
  #--------------------------------------------------------------------------
  alias_method :trick_caterpillar_player_jump, :jump
  def jump(x_plus, y_plus)
    new_x = @x + x_plus
    new_y = @y + y_plus
    if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y)
      $game_party.update_move(5, x_plus, y_plus)
    end
    trick_caterpillar_player_jump(x_plus, y_plus)
  end
end

Denke daran CATERPILLAR= einer Nummer zuzuweisen wo du noch einen leeren Tab/Schalter/Switch Platz hast.

Wenn du nun also machen willst, das wenn die Gruppe ein Item benutzt oder einen Stein berührt damit alle Hintereinander laufen legst du dann einfach den Tab/Schalter/Switch um und sie folgen oder der Held steht allein ^^

Credits: Dies ist eine Modifikation von Diedrupo an den Skript von Trickster, der das Original für den RPGXP, geskriptet hat.
und ERZENGEL fürs hier reinstellen.
Titel: Problem bei Schalter Rätsel
Beitrag von: Mclovin am März 10, 2008, 07:48:33
Für mich hört sich das so an, als bräuchtest du eigentlich 5  Schalter und 1 Variable:

Jeder Schalter bekommet einen eigenen Switch zugewiesen. Bei jedem Schalter fragst du ab, ob er auf AN oder AUS gestellt werden soll.

Das Event für die Tür hat als Vorraussetzung, dass alle vier Switches auf AN stehen. Das kannst du meiner Meinung nach am besten so machen, dass du als Vorraussetzung eine Variable bestimmst. Wenn alle 4 Schalter AN sind, hat die Variable einen bestimmten Wert (z.B. 4: bei jedem der 4 Schalter wird sie um 1 hochgesetzt, wenn sie auf AN stehen). Bei jedem Schalter, wird er auf AN gestellt, fragst du die Variable ab.   Hat sie den Wert 4 erreicht, öffnet sich die Tür (ein weiterer Schalter wird auf AN gestellet, der die Vorraussetzung für die Tür darstellt. Wird einer der Schalter auf AUS gestellt, wird von der Variable der entspechende Wert wieder abgezogen (in diesem Fall 1).

[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']
Nachricht: -,-, Gewöhnlich, Unten
:            :Soll der Schalter nach unten oder nach oben?
Auswahl zeigen: Unten, Oben
:[Unten] gewählt
   Switch [0001:Schalter 1]=AN
   Variable: [0001:4 Schalter AN] += 1
   Bedingung: Variable [0001:4 Schalter AN] == 4
     Switch [0005: Tür auf] = AN
   Ende

:[Oben) gewählt
 Switch [0001: Schalter 1]=AUS
 Variable: [0001:4 Schalter AN] -= 1
 Switch [0005: Tür auf] = AUS


Entsprechend für alle 4 Schalter mit anderen Switches.


@ $@$uk€:

Nicht böse sein, aber ich hab einfach mal eine Alternativlösung gepostet. Ich habe deinen Vorschlag zwar nicht ausprobiert, aber ich glaube, da fehlen noch Angaben.  happy.gif\" style=\"vertical-align:middle\" emoid=\"^_^\" border=\"0\" alt=\"happy.gif\" /]  

Titel: Problem bei Schalter Rätsel
Beitrag von: Dimidimadmitri am März 10, 2008, 11:32:33
Das geht auch ganz einfach ohne skripts Leute.
Bei deiner tür machst du als bedingung Schalter 1 und 2 aktiviert.
Dann eine neue seite wo Schalter 3 und 4 altiviert sein muss. In der 2 Seite öffnet sich dan die Tür. Da man nur zur 2 Seite kommt wenn alle 4 Schalter aktiviert sind.
Bei der 1 Seite machst du keine Befehle, nur das Bild von der Tür.
Ist doch viel einfacher als mit den ganzen skripts leute.
Titel: Problem bei Schalter Rätsel
Beitrag von: KittySpeedy am März 10, 2008, 12:02:26
Zitat von: Dimidimadmitri
Das geht auch ganz einfach ohne skripts Leute.

Ich bin die Einzige die bis jetzt nen Skript gepostet hat  huh.gif\" style=\"vertical-align:middle\" emoid=\":huh:\" border=\"0\" alt=\"huh.gif\" /]
Und das wegen dem Hintereinanderlaufen nicht wegen dem Wandschalter.
Titel: Problem bei Schalter Rätsel
Beitrag von: KoBa am März 10, 2008, 15:52:47
Danke mal für die Antworten:

@Mclovin: Hab deine Lösung nachgebaut, funktioniert zwar aber, man kann wieder einfach einen der vier Schalter einfach 4-mal nach unten tun und die Tür ist offen.

@Dimidimamitri: Hab deine Lösung auch nachgebaut: Das Problem is, dass es dabei reicht wenn man nur die Schalter 3 und 4 nach unten legt. Das funktioniert scheinbar doch nicht, dass er nur dann ins zweite Fenster geht wenn alle vier Schalter aktiv sind. Bei mir zumindest nicht.

@Sasuke: Deine Lösung wollt ich nachbauen, habs aber nicht wirklich hinbekommen: Ich versteh deinen Quelltext nicht vollständig (liegt wohl daran das ich noch neu bin). Vielleicht krieg ichs noch hin.

Zu dem Event wo ein Spieler aus dem anderen rausläuft:
Mach folgendes: Erstelle ein Event (z.B. bei einem Stein).
Gehe dann auf „Set Move Route“,
Zuerst mal muss oben links „this event“ einstellen und nicht „player“, sonst verschwindet die Figur mit der du gerade läufst.
Dann:
- “move right”
- “change graphic” (hier jetzt eine andere Chargraphik auswählen)
- „move right“
- „move right“
Etc.

Das heißt zuerst geht etwas nicht sichtbares einen schritt nach rechts und dann erst verwandelt es sich in nen Char.
So das mehrere gleichzeitig rauslaufen, schaff ichs leider nicht.


Dieses Schalter Ding ist komplizierter als ich dachte –
Vielleicht hat jemand so was schon mal gebaut und kanns mir als Beispielspiel schicken.

Gruss Bernhard
Titel: Problem bei Schalter Rätsel
Beitrag von: KittySpeedy am März 10, 2008, 23:18:48
@KoBa
Ach sowas meintest du ^^ dann hatte ich es falsch verstanden xD war ja schon recht spät  ph34r.gif\" style=\"vertical-align:middle\" emoid=\":ph34r:\" border=\"0\" alt=\"ph34r.gif\" /]
Mein Fehler xD
Titel: Problem bei Schalter Rätsel
Beitrag von: Mclovin am März 11, 2008, 07:06:41
Zitat von: KoBa
@Mclovin: Hab deine Lösung nachgebaut, funktioniert zwar aber, man kann wieder einfach einen der vier Schalter einfach 4-mal nach unten tun und die Tür ist offen.

Hmmm... bist du sicher? Eigentlich sollte das erneute Umlegen der Schalter bewirken, dass die Variable wieder kleiner wird. Ich probiere es einmal aus, dann finde ich vielleicht den Fehler. Ich habe das nämlich auch nur mal überlegt und nicht wirklich ausprobiert... blush.gif\" style=\"vertical-align:middle\" emoid=\":blush:\" border=\"0\" alt=\"blush.gif\" /]

Aber eventuell hat ja der Tipp dir schon geholfen... happy.gif\" style=\"vertical-align:middle\" emoid=\"^_^\" border=\"0\" alt=\"happy.gif\" /]
Titel: Problem bei Schalter Rätsel
Beitrag von: KoBa am März 12, 2008, 00:01:10
Danke für dein Beispielspiel. So funktioniert es genauso wie ich mir das gedacht habe. Danke nochmal.

@ Mclovin: also ganz sicher bin ich mir auch nicht, weil vielleicht hab ich dein Beispiel nicht 100% richtig nachgebaut. Naja jedenfalls scheint die Methode eine relativ einfache zu sein.

lg KoBa
Titel: Problem bei Schalter Rätsel
Beitrag von: Mclovin am März 12, 2008, 11:21:11
K, je einfacher, desto besser! Ich gehe gern mal Umwege...  ^^
War aber keine Absicht. Dann mal noch viel Spaß mit deinem Game!
SimplePortal 2.3.3 © 2008-2010, SimplePortal