• Anmelden

1

Samstag, 7. August 2010, 02:13

Charakterdaten verändern

Hallo,

ich versuche gerade die Daten meines Charakters zu ändern. MaxHP, INT, etc. sind auch kein Problem. Nur z. B. ATK lässt sich nicht abändern. Ich habe mir auch schon das Tutorial von http://www.rpg-studio.de/scientia/Ruby/R…orials/Rubykurs angesehn.
Irgendwie bekomm ich nur ein Windowsfester hin. Objektorientierte Sprachen liegen mir einfach nicht. Naja ausser ein bisschen Python.
Zurück zum Thema:
Den Werten habe ich über Common Events Variablen zugeordnet. Diese Variablen ändere ich ab und addier diese dann zu den echten Werten des Charakters. Blöd ist hier das man keine Prozente angeben kann.
Mit Modulo klappt das auch nicht wie gewünscht also hab ich einfach Brüche genommen (z. B. 100 STR / 5 = 25%).
Über Ruby könnte man dann auch diese Prozente richtig berechnen.
Zudem hoff' ich, dass man das Ganze in Echtzeit laufen lassen kann oder zumindest immer dann, wenn ein Levelup erfolgt oder man ein Item benutzt etc.

Ich hab mir irgendwas in der Richtung vorgestellt:

Quellcode

1
2
3
4
5
6
#!/bin/bash
atk=${$data_actors[7]} # es steht zumindest an siebenter Stelle unter 'Control Variables - Actor' (=
add_atk=${gawk 'BEGIN {OMFT="%.0f"};print (($atk/100)*5)'} # nebenbei noch ordentlich runden
(( $atk + $add_atk )) # dann zur Variable addiert
data_actors[7]=$atk # und den neuen Wert in das Array eingefügt
# Eine Schleife 'würds voll reissen' ^^

So oder so ähnlich. Schon lang nichtmehr 'gebasht' =P.

Ich hoff' auf hilfe. :hilfe:

2

Samstag, 7. August 2010, 02:48

huh? Junge du verwirrst mit einer ziemlich verquerten Denkweise. Sicher das du Ruby verstanden hast und wie der Maker die Werte berechnet?

Erstmal zur Mathematik:
100 / 5 = 20


Nun zu deiner Frage:
Wie du aus den standard Scripten erkennen kannst (siehe die Klasse Game_Actor) wird die Grund Angriffskraft von dem ATK Wert der Waffe übernommen (Z.267 ff), da wird noch gar nichts gerechnet.
In der Superklasse Game_Battler findest du die verrechnung mit eventuell anfälligen Statuseffekten und die Rückgabe eines Integer Werts als Angriffskraft. Wie damit verrechnet wird in Kämpfen kannst du in der Methode "attack_effect" auch in der Game_Battler Klasse nachlesen.
Der Angriffswert hängt also nur von der Waffe ab. Deine einzige Alternative ist den Schaden zu erhöhen, wofür du die Stärke des Helden erhöhen musst.
Du kannst in der Database dafür die Kurve ändern, um den Wert beim Levelaufstieg zu erhöhen oder zu senken - oder auch per Eventcommand "ChangeParameters" sowie einzelnen Statuseffekten.
Man kann natürlich mit Scripterweiterungen auch die ATK einfach ändern, aber damit arbeitest du gegen das Grundsystem und sowas macht nicht immer Sinn.

Zu Ruby, solltest du nochmal =Kai=s Kurs auf Scientia durcharbeiten. Zusätzlich kannst du auch gerne Fragen stellen falls du etwas nicht verstehst, schau doch mal in der ShoutBox vorbei =)

Edit Ich glaub ich hab das nicht stark genug hervorgehoben: Mit einem Status geht die ATK Veränderung um n% schon

3

Sonntag, 8. August 2010, 00:21

Aha! Also erstmal danke. Ich dachte das ATK den Wert für die Angrifftkraft des Chars wiedergibt.
Also muss ich irgendwie den ATK Bonus einer Klasse auf die Waffe übertragen.
Ich mein ein "Schwertmeister" hat ja nicht mehr Kraft sondern kann besser mit einem Schwert umgehen.
Besser so als unzählige Waffen zu erstellen.
Mit Ruby komm ich jetzt schon gut zurecht. Zumindest was das editieren von Skripten angeht.
Momentan versuch ich den Systemskin beim Aufruf eines Untermenues eines Skriptes zu ändern.
Mein Skin ist semitransparent was die lesbarkeit beeinträchtigt.
Im Moment habe ich das:

Ruby Quellcode

1
2
3
4
5
  def test(0, 0,  200, 200)
    super()
    @windowskin_name = 'skin_2'
    self.windowskin = RPG::Cache.windowskin(@windowskin_name)
  end

Es will nur nicht wie ich gern möchte ... Naja wird schon werden (=

Nebenbei meinte ich auch 20%! Oder /4 ... wie mans sieht ^^

Nachtrag:
Arbeitet Ruby eigendlich beim Runden von Dezimalzahlen korrekt? Also "ab fünf aufwärts runden" oder scheidet es einfach alles ab dem Komma ab? Wäre dann ein

Ruby Quellcode

1
16,28.to_s

die Lösung? Oder reicht es wenn ich

Ruby Quellcode

1
dezil = "Variable_1 = #{$game_variables[1]}"

vwerwende? Danke für die Geduld :D

Neo-Bahamut

Himmelsgleicher

Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.

  • Nachricht senden

4

Sonntag, 8. August 2010, 00:44

Du solltest dir wirklich nochmal Ruby-Tutorials angucken. Bis auf deine letzte Zeile

Ruby Quellcode

1
dezil = "Variable_1 = #{$game_variables[1]}"

hat jeder Code von dir mindestens einen Syntaxfehler.

Deshalb verstehe ich auch überhaupt nicht, was deine Fragen sind. Du willst irgendwas bei einem Window in einem Menü ändern.
Und dafür erstellst du eine neue Methode test, die versucht, die nicht vorhande Super-Methode test aufzurufen. ?

Zitat

Arbeitet Ruby eigendlich beim Runden von Dezimalzahlen korrekt? Also "ab fünf aufwärts runden" oder scheidet es einfach alles ab dem Komma ab?
16.28.to_s hat nichts mit runden oder so zu tun, das wandelt die Zahl in einen String um.
Für die Umwandlung von Floats (Kommazahlen) und Integers (ganze Zahlen), gibt es ein paar Methoden:

Ruby Quellcode

1
2
3
4
5
zahl = 16.28
p zahl.to_i # 16, alles hinter dem Komma fällt weg.
p zahl.floor # 16, dasselbe wie .to_i
p zahl.ceil # 17, wird immer aufgerundet
p zahl.round # 16, ganz normales Runden
Spoiler: Wurstinator
zum Lesen den Text mit der Maus markieren

Spoiler: Lazer-Wurst
zum Lesen den Text mit der Maus markieren

Spoiler: Hallowurst
zum Lesen den Text mit der Maus markieren

5

Sonntag, 8. August 2010, 11:13

Das super() ist mir garnicht aufgefallen. Evtl. sollte ich so spät nichts mehr posten. ^^

Ich kann zwar auch vor dem Aufruf des Skriptes den Skin ändern, allerdings hätt ich das auch gern in mein CMS integriert.
Ich hab das Tutorial durchgelesen. Seit Freitagabend sitz ich nun schon vor Ruby.
Teilweise find ich es einfacher als Python aber irgendwie auch unlogischer. Z. B., dass man Befehle einfach aneinander reiht.
Also 'Befehl Befehl Befehl' und nicht 'Befehl; Befehl; ...'.

Ich möchte den Skin ändern, damit man das Fenster, welches bei einer Auswahl erscheint auch lesen kann.
Sonst steht die Schrift des neuen Fensters auf der alten. Ich möchte es auch nicht einfach verschwinden lassen.
Ich kann das nicht so einfach erklären. Das ist das Skript: SkillBook
Ein Schubser in die richtige Richtung wäre ganz hilfreich ;)

Die Frage ob Ruby rundet habe ich gestellt, weil ich bei anderen Skriptsprachen schon erlebt hab', dass alles hinter dem Komma ignoriert wird. Ich würd das aber gern mit Kommastellen berechnen damit das Ergebniss nicht verfälscht wird.

Als ich mir testweise ein Fenster erstellt hab in dem ich meinen Char genauer ansehn konnte, wurden die Werte als 'ABx0123' dargestellt. Also musste ich sie in einen String umwandeln. Darum wollte ich wissen, ob dabei schon gerundet wird.
Es ist also eher eine ästetische Frage ob da nun ein Komma steht oder nicht.

Keine Panik, irgendwann machts klick bei mir ^^

Neo-Bahamut

Himmelsgleicher

Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.

  • Nachricht senden

6

Sonntag, 8. August 2010, 11:55

Zitat

Teilweise find ich es einfacher als Python aber irgendwie auch unlogischer. Z. B., dass man Befehle einfach aneinander reiht.
Also 'Befehl Befehl Befehl' und nicht 'Befehl; Befehl; ...'.
Naja, das ist einfach der Unterschied, dass bei anderen Sprachen eben das Semikolon als "Keyword" für einen neuen Befehl gilt und bei Ruby ist es ein einfacher Zeilenumbruch.
Aber du kannst ja auch Semikola in Ruby setzen, auch wenn das kein schöner Stil ist.

Zitat


Ich möchte den Skin ändern, damit man das Fenster, welches bei einer Auswahl erscheint auch lesen kann.
Sonst steht die Schrift des neuen Fensters auf der alten. Ich möchte es auch nicht einfach verschwinden lassen.
Ich kann das nicht so einfach erklären. Das ist das Skript: SkillBook
Ein Schubser in die richtige Richtung wäre ganz hilfreich ;)
Ich verstehs immer noch nicht. Zeig doch mal einen Screenshot von dem Problem.

Zitat

Die Frage ob Ruby rundet habe ich gestellt, weil ich bei anderen Skriptsprachen schon erlebt hab', dass alles hinter dem Komma ignoriert wird. Ich würd das aber gern mit Kommastellen berechnen damit das Ergebniss nicht verfälscht wird.
Ja, das hat mit den genannten Typen Integer und Float zu tun. Das ist bei fast jeder Sprache so.
Da ein Integer keine Zahlen hinter dem Komma verwenden/beinhalten kann, werden die eben einfach gelöscht, wenn man ein Float in ein Integer umwandelt.

Zitat

Als ich mir testweise ein Fenster erstellt hab in dem ich meinen Char genauer ansehn konnte, wurden die Werte als 'ABx0123' dargestellt. Also musste ich sie in einen String umwandeln.
Du meinst sowas wie? "#< Game_Actor 0x1337abc ... "? Oder was für Werte meinst du?

Zitat

Es ist also eher eine ästetische Frage ob da nun ein Komma steht oder nicht.
Nein, es ist einfach ein Syntaxfehler. Wie bei den meisten anderen Sprachen hält sich Ruby hier an die amerikanische Schreibweise, und die ist nunmal mit Punkt und nicht Komma.
Spoiler: Wurstinator
zum Lesen den Text mit der Maus markieren

Spoiler: Lazer-Wurst
zum Lesen den Text mit der Maus markieren

Spoiler: Hallowurst
zum Lesen den Text mit der Maus markieren

7

Sonntag, 8. August 2010, 14:24

Zitat

Ich verstehs immer noch nicht. Zeig doch mal einen Screenshot von dem Problem.

So sieht das dann aus.
Bild
Wenn man noch mehr Skills reinpackt, kann man garnichtsmehr erkennen.

Zitat

Du meinst sowas wie? "#< Game_Actor 0x1337abc ... "? Oder was für Werte meinst du?

Das hängt mit dem Tutorial vom rpg-Studio zusammen.
Dort wurden Level für die Handhabung von Waffentypen in Variablen gespeichert.
In dem Fenster, welches man dort erstellt, wurden diese dann wieder ausgegeben. Ohne das '.to_s' kam eben dieses Hexzeugs raus. Meine Überlegung war, dass man ja Variablen auch teilen kann und man somit irgendwann ein Komma(Punkt) bekommt. Da ich einem Skill einen Prozentualen Bonus auf diverse Werte des Charakters geben will wird das sehr oft passieren.
Nun muss ich aber, um diese Zahl anzeigen zu können, diese in einen String wandeln.
Dabei wird das Komma(der Punkt) nicht angezeigt. Also einfach abgetrennt oder die Zahl dann entsprechend Gerundet?

Zitat

Nein, es ist einfach ein Syntaxfehler. Wie bei den meisten anderen Sprachen hält sich Ruby hier an die amerikanische Schreibweise, und die ist nunmal mit Punkt und nicht Komma.

Mir ist klar das das Komma ein Punkt ist.
Andererseits ist ein Punkt ein Punkt und bei einer Dezimalzahl ist das Komma ein Punkt welcher ein Komma darstellt was die Eigenschaft des Kommas nicht verändert und somit ein Komma bleibt welches durch einen Punkt dargestellt wird ... ^^

Neo-Bahamut

Himmelsgleicher

Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.

  • Nachricht senden

8

Sonntag, 8. August 2010, 16:25

Zitat

Wenn man noch mehr Skills reinpackt, kann man garnichtsmehr erkennen.
Aber was hat das mit dem ändern des Windowskins zu tun? Dadurch kann man die Schrift doch auch nicht viel besser lesen Oo

Zitat

Also einfach abgetrennt oder die Zahl dann entsprechend Gerundet?
Hab ich doch schon gesagt, kommt auf die Art an, wie du umwandelst.
Bei 16.28.to_s wird nichts gerundet oder verändert, da kommt einfach nur "16.28" raus.

Zitat

Andererseits ist ein Punkt ein Punkt und bei einer Dezimalzahl ist das Komma ein Punkt welcher ein Komma darstellt was die Eigenschaft des Kommas nicht verändert und somit ein Komma bleibt welches durch einen Punkt dargestellt wird ... ^^
Das hat dann trotzdem nichts mit Ästhetik zu tun. Du kannst dir vielleicht im Kopf denken, dass der Punkt auch ein Komma sein kann, für Ruby sind die beiden Zeichen aber was ganz anderes.
Spoiler: Wurstinator
zum Lesen den Text mit der Maus markieren

Spoiler: Lazer-Wurst
zum Lesen den Text mit der Maus markieren

Spoiler: Hallowurst
zum Lesen den Text mit der Maus markieren

9

Sonntag, 8. August 2010, 17:55

Also nochmal. Mein Windowskin ist halbtransparent. Dadurch scheint die Schrift des darunterliegenden Fensters durch. Damit man die Schrift aber dennoch gut lesen kann, muss also der Skin gewechselt werden.

Ich finde, dass es unmöglich aussieht wenn da z. B. 'Stärke 10' und dann 'Schadensbonus Schwert 16.28' steht. Die Dezimalzahl würd ich zum berechnen behalten wollen. Nur wenn sie angezeigt wird soll dieses/der Komma/Punkt weg.

Wie auch immer. Wichtig ist dieser Skinwechsel. Das Zahlendingsbums bekomm ich schon so hin wies soll, hoffe ich mal.

Neo-Bahamut

Himmelsgleicher

Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.

  • Nachricht senden

10

Sonntag, 8. August 2010, 18:43

Zitat

Also nochmal. Mein Windowskin ist halbtransparent. Dadurch scheint die Schrift des darunterliegenden Fensters durch. Damit man die Schrift aber dennoch gut lesen kann, muss also der Skin gewechselt werden.
Du willst also die Transparenz ändern? Das Windowskin ist was ganz anderes Oo
Dafür brauchst du window.back_opacity = 255.
Spoiler: Wurstinator
zum Lesen den Text mit der Maus markieren

Spoiler: Lazer-Wurst
zum Lesen den Text mit der Maus markieren

Spoiler: Hallowurst
zum Lesen den Text mit der Maus markieren

11

Sonntag, 8. August 2010, 22:38

Nnoooiiiinnn! ^^
Der Skin ist halbtransparent weil ich ihn so gezeichnet habe. Das Skript ändert an ihm garnichts. Ich will den Skin wechseln zu einem der nicht halbtransparent ist. Das ist kein opacity im Skript der ihn durchscheinen lässt sondern die Transparenz in Skin_1.png.
Darum will ich ihn zu Skin_2.png wechseln welches keine transparenten Bereiche hat.

Neo-Bahamut

Himmelsgleicher

Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.

  • Nachricht senden

12

Sonntag, 8. August 2010, 23:01

Zitat

Nnoooiiiinnn! ^^
Der Skin ist halbtransparent weil ich ihn so gezeichnet habe. Das Skript ändert an ihm garnichts. Ich will den Skin wechseln zu einem der nicht halbtransparent ist. Das ist kein opacity im Skript der ihn durchscheinen lässt sondern die Transparenz in Skin_1.png.
Darum will ich ihn zu Skin_2.png wechseln welches keine transparenten Bereiche hat.
Achso. Auch wenn ich nicht ganz den Sinn verstehe, ein Windowskin halbtransparent zu zeichnen, das lässt sich doch genauso gut, nur dynamische mit den opacity-Funktionen machen Oo

Das ist leider nicht ganz so einfach (immer noch einfach, aber es könnte einfacher sein :), weil Enterbrain da wieder mal Müll gecodet hat.
Du musst den Windows eine update-Methode geben:

Ruby Quellcode

1
2
3
4
5
6
7
8
class Window_SkillBook_Info < Window_Selectable
 # die anderen Methoden
 def update
  super()
  @windowskin_name = 'skin2'
  self.windowskin = RPG::Cache.windowskin(@windowskin_name)
 end
end

So zum Beispiel.
Spoiler: Wurstinator
zum Lesen den Text mit der Maus markieren

Spoiler: Lazer-Wurst
zum Lesen den Text mit der Maus markieren

Spoiler: Hallowurst
zum Lesen den Text mit der Maus markieren

13

Montag, 9. August 2010, 01:39

Nächstes Problem ...

Danke!
Ich möchte diesen Skin haben damit die Nachrichtenfenster und sowas halbtransparent sind.
Bei allen anderen Skripten und Menus sieht das ganz gut aus. Nur eben da nicht.

Bis zum nächsten Problem (=

Edit:

Das Funktioniert soweit ganz gut, aber:
Wenn ich deinen Code benutze, dann ändert er den Skin Systemweit. Und zwar schon bei Spielstart.
Das müsste irgendwie hier rein:

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  def update
    # ウィンドウを更新
    #@help_window.update
    @main_window.update
    @kind_window.update
    @info_window.update
    if @info_window.active
      update_info
      return
    end
    # ãƒ¡ã‚¤ãƒ³ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã®å ´åˆ: update_target を呼ぶ
    if @main_window.active
      p "blabla"                                       # hier rein
      update_main
      return
    end
    # ç¨®é¡žã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã®å ´åˆ: update_kind を呼ぶ
    if @kind_window.active
      update_kind
      return
    end
  end

Da mein Japanisch ganz mies ist, vermute ich einfach mal das hier die richtige Stelle ist. Zumal beim Aufruf des Untermenus dieses OK-Fenster angezeigt wird.
Ich hoffe ich fange nicht an zu nerven. (=

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »yokmp« (9. August 2010, 01:39)


Neo-Bahamut

Himmelsgleicher

Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.

  • Nachricht senden

14

Montag, 9. August 2010, 10:17

Mein Code klappt, habs grad noch getestet :o

Du könntest aber auch unter diesen Zeilen

Ruby Quellcode

1
2
3
    @main_window.update
    @kind_window.update
    @info_window.update

das Skin ändern.

Ruby Quellcode

1
2
3
4
    @main_window.update
    @kind_window.update
    @info_window.update
@info_window.windowskin =  @help_window.windowskin = RPG::Cache.windowskin('skin2')
Spoiler: Wurstinator
zum Lesen den Text mit der Maus markieren

Spoiler: Lazer-Wurst
zum Lesen den Text mit der Maus markieren

Spoiler: Hallowurst
zum Lesen den Text mit der Maus markieren

15

Montag, 9. August 2010, 21:47

Funktioniert wunderbar!
Ich hab es noch erweitert, damit das kleine Auswahlfenster auch besser zu sehen ist.

Ruby Quellcode

1
2
3
4
5
  @main_window.update
  @kind_window.update
  @kind_window.windowskin =  @help_window.windowskin = RPG::Cache.windowskin('skin2')
  @info_window.update
  @info_window.windowskin =  @help_window.windowskin = RPG::Cache.windowskin('skin2')

Neo-Bahamut

Himmelsgleicher

Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.

  • Nachricht senden

16

Montag, 9. August 2010, 21:59

Ruby Quellcode

1
@kind_window.windowskin =  @help_window.windowskin = RPG::Cache.windowskin('skin2')

ist dasselbe wie:
Edit @kind_window.windowskin = RPG::Cache.windowskin('skin2')
@help_window.windowskin = RPG::Cache.windowskin('skin2')


Heißt, du hast jetzt eigentlich geschrieben:

Ruby Quellcode

1
2
3
4
5
6
7
@main_window.update
  @kind_window.update
  @kind_window.windowskin = RPG::Cache.windowskin('skin2')
 @help_window.windowskin = RPG::Cache.windowskin('skin2')
  @info_window.update
  @info_window.windowskin =  RPG::Cache.windowskin('skin2')
@help_window.windowskin = RPG::Cache.windowskin('skin2')

Siehst du die Unschönheit? :)
Spoiler: Wurstinator
zum Lesen den Text mit der Maus markieren

Spoiler: Lazer-Wurst
zum Lesen den Text mit der Maus markieren

Spoiler: Hallowurst
zum Lesen den Text mit der Maus markieren

17

Montag, 9. August 2010, 22:34

Hm ja das wirkt recht unbeholfen ^^
Ich hab's mal abgeändert.

Social Bookmarks