• Anmelden

1

Freitag, 11. August 2006, 17:36

Texteingabe V2


Bild von Caesar
Ermöglicht anstatt der Nummerneingabe auch Text einzugeben.
Spoiler: Das neue RGSS Preisrätsel
Wie lassen sich die Werte zweier Integervariablen vertauschen? Machen Sie mit und gewinnen Sie Ruhm und Ehre! ?"Caesar"? Die kürzeste Lösung gewinnt. Gibt es mehrere richtige Einsendungen, wird ein zufälliger Gewinner aus diesen gezogen.
zum Lesen den Text mit der Maus markieren
Spoiler: Auflösung der letzten Runde
Die Aufgabe der letzten Runde lautete:

Zitat

Schreiben Sie einen Parser für die ASCII-Form des Dateiformats PBM (Portable Bitmap). Die Methode soll als Parameter einen Dateinamen erhalten und eine Bitmap zurückgeben. 0 ist weiß, 1 ist schwarz. Eine Beispieldatei, die den Buchstaben 'A' darstellti:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
P1
9 9
000010000
000010000
000101000
000101000
001000100
001111100
001000100
010000010
111000111
Es hat keiner teilgenommen, daher gibt es keinen Gewinner ^^ Eine mögliche Lösung wäre gewesen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def parse_pbm(filename)
  f = File.open(filename)
  return nil unless f.readline.chomp == "P1"
  width, height = f.readline.split(' ').collect {|i| i.to_i}
  bitmap = Bitmap.new(width, height)
  c0 = Color.new(255, 255, 255)
  c1 = Color.new(0, 0, 0)
  for iy in 0...height
    f.readline.chomp.split('').each_with_index do |v, k|
      bitmap.set_pixel(k, iy, v == '0' ? c0 : c1)
    end
  end
  return bitmap
end
zum Lesen den Text mit der Maus markieren
Spoiler: Schon gewusst?
...wie man zum Testen schnell einzelne Scripts "ausbaut", ohne das Script aus dem Scripeditor zu löschen? Ganz einfach: Man fügt im Scripteditor ganz oben im Script die folgende Zeile ein:

Quellcode

1
if false
und ganz unten als letzte Zeile:

Quellcode

1
end
Das hat den gleichen Effekt, wie wenn man das ganze Script aus dem Scripteditor gelöscht hätte.
zum Lesen den Text mit der Maus markieren

2

Freitag, 11. August 2006, 18:15

Ansich wunderbar, aber die wenigisen benutzen das Standardscript, eine interplemitierung in das AMS oder das Script von RPG Advocat wäre sinnvoller, oder man erweitert das Input Nummerscript, weil das wird überall verwendet ;)

Ave Abt
:information: YAams
:rainbow: Random Signatur
Bild





Weitere Informationen | Download
Mit Support für RGSS Project 1!
Bild

3

Montag, 14. August 2006, 18:19

[SIZE=260]Version 2[/SIZE]

So, war doch irgendwie blöde, dass es so umständlich einzubauen ist. Deshalb hab ich's jetzt überarbeitet. Das Nummerneingabefeld habe ich so verändert, dass es je nach Zustand eines Switches Zahlen- oder Texteingaben zulässt. Das hat folgende Vorteile:
  • Der Einbau ist viel einfacher: Man muss nur ein Neues Script über Main einfügen
  • Das Script ist kompatibel mit dem AMS
  • Wenn die Variable, in der die Eingabe gespeichert werden soll, bereits einen Wert enthält, ist dieser Text voreingestellt
  • Man braucht keine Call-Scripts


Wie verwendet man das Script?
Mit der Nummern-Eingeben-Funktion (engl. Input Number).
In einer der ersten Zeilen heißt es:

Quellcode

1
SWITCH_ID = 1

Hier ist die ID des Switches festgelegt, die bestimmt, ob ein Text oder eine Zahl eingegeben werden soll. Wenn der Schalter aus ist, funktioniert die Nummer-Eingeben-Funktion wie gehabt. Wenn er an ist, dann kann er einen Text eingeben. Dieser Text wird dann in einer Variable gespeichert und lässt sich dann genauso weiterverwenden wie oben beschrieben (Passwortabfrage, Heldennamen ändern etc.). Die Anzahl der eingebbaren Buchstaben ist gleich der beim Nummern-Eingeben-Befehl festgelegten Anzahl Ziffern. Die Variable, in der die Eingabe gespeichert wird, ist ebenfalls die beim Nummern-Eingeben-Befehl eingestellte. Enthält die Variable einen leeren String ("") oder einen Zahlenwert, besteht der voreingestellte Text aus der eingestellten Anzahl Leerzeichen.
Enthält die Variable bereits einen String (Text), ist dieser voreingestellt und die Anzahl eingebbarer Zeichen ist gleich der Länge des voreingestellten Strings.

Ist zugegeben ein wenig kompliziert, also fragt, wenn ihr Fragen habt!

Der Code
Folgender Code muss über Main als neues Script eingefügt werden. Es müssen keine weiteren Änderungen vorgenommen werden.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#/////////////////////////////////////////////Texteingabe V2////////////////////////////////////////////
#~~~~~~~~~~~~~~~~~~~~~~by Caesar~~~~~~~~~~~~~~~~~~~~~
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
class Window_InputNumber < Window_Base
  # Der Schalter mit dieser ID bestimmt, ob ein Text (true) oder eine
  # Zahl (false) eingegeben werden soll
  SWITCH_ID = 1
  # hier kann der Zeichenvorrat verändert werden
  TEXT_ALPHABET = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  NUMBER_ALPHABET = "0123456789"
  def initialize(chars_max)
    @config = Array.new(chars_max, 0)
    dummy_bitmap = Bitmap.new(32, 32)
    @cursor_width = dummy_bitmap.text_size("0").width + 10
    dummy_bitmap.dispose
    super(0, 0, @cursor_width * chars_max + 64, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.z += 9999
    self.opacity = 0
    @index = 0
    @alphabet = $game_switches[SWITCH_ID] ? TEXT_ALPHABET : NUMBER_ALPHABET
    refresh
    update_cursor_rect
  end
  #-----------------------
  def number
    return @config.collect{ |i| @alphabet[i].chr }.join.strip if $game_switches[SWITCH_ID]
    @config.collect{ |i| @alphabet[i].chr }.join.to_i
  end
  #-----------------------
  def number=(number)
    if $game_switches[SWITCH_ID] && number.is_a?(String) and number.length > 0
      @config = number.split(//).collect {|chr| @alphabet.index(chr)}
    elsif ( ! $game_switches[SWITCH_ID]) && number.is_a?(Integer)
      @config = ("%0#{@config.length}d" % number).split(//).collect {|chr| chr.to_i }
    end
    refresh
  end
  #-----------------------
  def update_cursor_rect
    self.cursor_rect.set(@index * @cursor_width, 0, @cursor_width, 32)
  end
  #-----------------------
  def update
    super
    if Input.repeat?(Input::UP)
      $game_system.se_play($data_system.cursor_se)
      @config[@index] = (@config[@index] + 1) % @alphabet.size
      refresh
    end
    if Input.repeat?(Input::DOWN)
      $game_system.se_play($data_system.cursor_se)
      @config[@index] = (@config[@index] + @alphabet.size-1) % @alphabet.size
      refresh
    end
    if Input.repeat?(Input::RIGHT)
      if @config.size >= 2
        $game_system.se_play($data_system.cursor_se)
        @index = (@index + 1) % @config.size
      end
    end
    if Input.repeat?(Input::LEFT)
      if @config.size >= 2
        $game_system.se_play($data_system.cursor_se)
        @index = (@index + @config.length - 1) % @config.length
      end
    end
    update_cursor_rect
  end
  #-----------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    for i in 0...@config.size
      self.contents.draw_text(i * @cursor_width + 4, 0, 24, 32, @alphabet[@config[i]].chr)
    end
  end
end
Spoiler: Das neue RGSS Preisrätsel
Wie lassen sich die Werte zweier Integervariablen vertauschen? Machen Sie mit und gewinnen Sie Ruhm und Ehre! ?"Caesar"? Die kürzeste Lösung gewinnt. Gibt es mehrere richtige Einsendungen, wird ein zufälliger Gewinner aus diesen gezogen.
zum Lesen den Text mit der Maus markieren
Spoiler: Auflösung der letzten Runde
Die Aufgabe der letzten Runde lautete:

Zitat

Schreiben Sie einen Parser für die ASCII-Form des Dateiformats PBM (Portable Bitmap). Die Methode soll als Parameter einen Dateinamen erhalten und eine Bitmap zurückgeben. 0 ist weiß, 1 ist schwarz. Eine Beispieldatei, die den Buchstaben 'A' darstellti:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
P1
9 9
000010000
000010000
000101000
000101000
001000100
001111100
001000100
010000010
111000111
Es hat keiner teilgenommen, daher gibt es keinen Gewinner ^^ Eine mögliche Lösung wäre gewesen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def parse_pbm(filename)
  f = File.open(filename)
  return nil unless f.readline.chomp == "P1"
  width, height = f.readline.split(' ').collect {|i| i.to_i}
  bitmap = Bitmap.new(width, height)
  c0 = Color.new(255, 255, 255)
  c1 = Color.new(0, 0, 0)
  for iy in 0...height
    f.readline.chomp.split('').each_with_index do |v, k|
      bitmap.set_pixel(k, iy, v == '0' ? c0 : c1)
    end
  end
  return bitmap
end
zum Lesen den Text mit der Maus markieren
Spoiler: Schon gewusst?
...wie man zum Testen schnell einzelne Scripts "ausbaut", ohne das Script aus dem Scripeditor zu löschen? Ganz einfach: Man fügt im Scripteditor ganz oben im Script die folgende Zeile ein:

Quellcode

1
if false
und ganz unten als letzte Zeile:

Quellcode

1
end
Das hat den gleichen Effekt, wie wenn man das ganze Script aus dem Scripteditor gelöscht hätte.
zum Lesen den Text mit der Maus markieren

4

Dienstag, 15. August 2006, 11:44

Eh das war meine Idee, ich will Lizenzgebühren XD

Also die Idee finde ich so auch schöner, besonders weil man es überall nutzen kann, bloß dass man bei Texten auch bloß 6 Zeichen nutzen kann, finde ich etwas kurz, wenn man auf das Beispiel von vorhin zurück kommt.

Quellcode

1
2
3
4
5
6
7
<>Call Script: <setup_input(1, 9)>
<>Message: "Passwort?"
<>Bedingung: Script: <$game_variables[1] == "BLUTDURST">
:  <>Message: "Okay, komm rein."
sonst
:  <>Message: "Hau ab oder ich fress dich!"
end


aber dies kann man ja anpassen, dazu muss man bloß

Quellcode

1
2
3
  def initialize(chars_max)
  chars_max = 20 if $game_switches[SWITCH_ID] #Anzahl der Zeichen
    @config = Array.new(chars_max, 0)


verändern, allerdings wirkt das nur beim Text.

So weiterhin auf tolle Scripte.

Ave Abt
:information: YAams
:rainbow: Random Signatur
Bild





Weitere Informationen | Download
Mit Support für RGSS Project 1!
Bild

5

Freitag, 25. August 2006, 14:32

Okay, das ist wirklich blöde-.-
Man kann zwar die Zeichenanzahl erhöhen, indem man mit

Quellcode

1
$game_variables[VAR_ID] = "               "

einen Text mit größerer Länge als Voreinstellung setzt, allerdings wird das Fenster durch einen Bug nicht entsprechend vergrößert, so dass die Zeichen am Ende nicht zu sehen sind.
Spoiler: Das neue RGSS Preisrätsel
Wie lassen sich die Werte zweier Integervariablen vertauschen? Machen Sie mit und gewinnen Sie Ruhm und Ehre! ?"Caesar"? Die kürzeste Lösung gewinnt. Gibt es mehrere richtige Einsendungen, wird ein zufälliger Gewinner aus diesen gezogen.
zum Lesen den Text mit der Maus markieren
Spoiler: Auflösung der letzten Runde
Die Aufgabe der letzten Runde lautete:

Zitat

Schreiben Sie einen Parser für die ASCII-Form des Dateiformats PBM (Portable Bitmap). Die Methode soll als Parameter einen Dateinamen erhalten und eine Bitmap zurückgeben. 0 ist weiß, 1 ist schwarz. Eine Beispieldatei, die den Buchstaben 'A' darstellti:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
P1
9 9
000010000
000010000
000101000
000101000
001000100
001111100
001000100
010000010
111000111
Es hat keiner teilgenommen, daher gibt es keinen Gewinner ^^ Eine mögliche Lösung wäre gewesen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def parse_pbm(filename)
  f = File.open(filename)
  return nil unless f.readline.chomp == "P1"
  width, height = f.readline.split(' ').collect {|i| i.to_i}
  bitmap = Bitmap.new(width, height)
  c0 = Color.new(255, 255, 255)
  c1 = Color.new(0, 0, 0)
  for iy in 0...height
    f.readline.chomp.split('').each_with_index do |v, k|
      bitmap.set_pixel(k, iy, v == '0' ? c0 : c1)
    end
  end
  return bitmap
end
zum Lesen den Text mit der Maus markieren
Spoiler: Schon gewusst?
...wie man zum Testen schnell einzelne Scripts "ausbaut", ohne das Script aus dem Scripeditor zu löschen? Ganz einfach: Man fügt im Scripteditor ganz oben im Script die folgende Zeile ein:

Quellcode

1
if false
und ganz unten als letzte Zeile:

Quellcode

1
end
Das hat den gleichen Effekt, wie wenn man das ganze Script aus dem Scripteditor gelöscht hätte.
zum Lesen den Text mit der Maus markieren

6

Mittwoch, 30. August 2006, 15:09

Öhm Mädels gibts davon keine Demo oder Caeser könntest du eine fertig machen?
Bei mir geht gar nix... 0ô

Thx


MfG
~Till 'z1mtSt3rn'

7

Mittwoch, 30. August 2006, 16:05

Wozu denn eine Demo?

Wo hängst denn? Fehlermeldung? Zeile? Nur so kann dir geholfen werden.

8

Donnerstag, 31. August 2006, 14:55

Naja bei mir kam erst ein Syntex Error, hab ich das nochmal eingefügt kam ich ins Spiel.
Dieses stürtzte aber immer ab, sobald ich ein Event mit dem Callscrip anklickte ohne Fehlermeldung.

9

Sonntag, 3. September 2006, 15:45

Zitat von »"typhoX"«

Naja bei mir kam erst ein Syntex Error, hab ich das nochmal eingefügt kam ich ins Spiel.
Dieses stürtzte aber immer ab, sobald ich ein Event mit dem Callscrip anklickte ohne Fehlermeldung.


Wieso Call Skript?
Die 2. Version braucht überhaupt kein Call Skript!
Einfach den Code der 2. Version über Main einfügen und dann so ein Event in der Art machen:

Quellcode

1
2
3
4
5
<>Switch [0001] = ON
<>Message: Sag mir was:
<>Input Number: [0001], 8 Digits
<>Message: Du hast \v[1] gesagt...
<>Switch [0001] = OFF


Mfg Monsta

10

Sonntag, 3. September 2006, 16:43

0o ich lass es einfach :D
trotzdem danke :):)

~Till

11

Sonntag, 22. November 2009, 18:42

Mh ich kriegs nicht richtig hin...
also das mit der Eingabe klappt alles. Aber was, wenn ich jetzt abfragen will ob das Passwort stimmt.
Wie frage ich die Variable nachdem ich das Passwort eingegeben habe ab ?

Außerdem würde ich das Script auch gerne am Anfang des Spieles nutzen, um den Spieler die Möglichkeit zu geben
den Heldennamen selbst zu bestimmen, doch wie soll das Event dazu aussehen ? :schock:


Danke im Vorraus...

Social Bookmarks