Dear visitor, welcome to RPG Studio - Make your World real. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

Cryztal

Knappe

  • "Cryztal" started this thread

Motto: Ich mag das Gefühl von völliger Ungezwungenheit. Dann bin ich am besten, würde ich sagen.

  • Send private message

1

Thursday, April 4th 2019, 5:39pm

Multiple Slip_Damage

Hallo mal wieder,


in meinem Spiel gibt es verschiedene Dot's - Das Problem ist, dass maximal einer auch wirklich angewendet werden kann und der Schaden auch immer gleich bleibt.
Ich benötige eine Möglichkeit bis zu 10 verschiedene Dot's welche ganz einfach durch einen Status hinzugefügt werden können, umzusetzen.

Ich weiß nicht wie verständlich ich mich ausgedrückt habe. Bei Rückfragen, einfach fragen.
Lg Cryztal

Playm

RPG Studio Webmaster

  • Send private message

2

Friday, April 5th 2019, 1:16am

Quoted

Ich weiß nicht wie verständlich ich mich ausgedrückt habe.
Was ist ein »Dot's«? :ui:

Cryztal

Knappe

  • "Cryztal" started this thread

Motto: Ich mag das Gefühl von völliger Ungezwungenheit. Dann bin ich am besten, würde ich sagen.

  • Send private message

3

Friday, April 5th 2019, 11:35am

Nun als Dot bezeichnet man den sogenannten Damage over time. Welcher bspw mit Gift oder Blutungseffekten einhergeht.
Lg Cryztal

Mitsch93

Drachentöter

Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.

  • Send private message

4

Friday, April 5th 2019, 7:45pm

In DS hatte ich das gleiche Problem und hab das dann selbst geskripted.
Unter anderem konnte man konstanten, prozentualen oder variablen (in einer Variablen gespeicherten) Schaden anrichten.
Stackbar waren die Dots / Hots natürlich auch.

Das gröbste kann man im Standard in Game_Battler_3 einstellen:

Ruby Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  #--------------------------------------------------------------------------
  # * Application of Slip Damage Effects
  #--------------------------------------------------------------------------
  def slip_damage_effect
    # Set damage
    self.damage = self.maxhp / 10
    # Dispersion
    if self.damage.abs > 0
      amp = [self.damage.abs * 15 / 100, 1].max
      self.damage += rand(amp+1) + rand(amp+1) - amp
    end
    # Subtract damage from HP
    self.hp -= self.damage
    # End Method
    return true
  end


Was für Schadenstypen werden denn gebraucht?

Cryztal

Knappe

  • "Cryztal" started this thread

Motto: Ich mag das Gefühl von völliger Ungezwungenheit. Dann bin ich am besten, würde ich sagen.

  • Send private message

5

Saturday, April 6th 2019, 6:52am

Also ich habe die in battler 3 vorhandene Version schon angepasst. Für mein Game brauche ich bis zu 10 verschiedene Arten von Dots. Verschiedene Gifte die unterschiedlich stark wirken, blutung und ein, zwei elementare Dots.
Lg Cryztal

Mitsch93

Drachentöter

Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.

  • Send private message

6

Sunday, April 7th 2019, 10:23am

Ging mir ehr um die Schadensberechnung. Aber im groben verwendest du noch das Standard-KS?

So könnte eine einfache Konfig aussehen:

Ruby Source code

1
2
3
4
5
  STATES = {}
  STATES[18] = {:type => "absolute", :damage => 10}
  STATES[19] = {:type => "current_percent", :damage => 10}
  STATES[20] = {:type => "max_percent", :damage => 10}
  STATES[21] = {:type => "variable", :var_id => 1}


absolute: Fügt absoluten Schaden zu.
current_percent: Prozentualen Schaden anhand der aktuellen HP (nicht der max. HP).
max_percent: Prozentualen Schaden anhand der max. HP (wie beim Standard Slip Damage).
variable: Der Schaden wird vorher in einer Variablen angespeichert (kann auch während des Kampfes geschehen).
Dadurch kannst du dann benutzerdefinierten Schaden definieren wie

Source code

1
Blutungsschaden = ATK_Angreifer / 3


Für alle Einstellungen gilt, dass du sie auch für HoTs verwenden kannst, indem du einfach negative Schadenswerte angibst (bzw.
einen negativen Wert in einer Variablen speicherst).


Die aller einfachste Realisierung, ohne großen Eingriff in den KS-Code wäre, alle aktuellen DOTS / HOTS miteinander zu verrechnen
und dann das Gesamt-Resultat auf dem Bildschirm anzuzeigen.

Beispiel: Battler hat zwei DoTs und einen HoT auf sich: Dot 1 macht 50 Schaden, Dot 2 macht 30 Schaden, HoT 1 heilt 40 Schaden.
Resultat: 50 + 30 - 40 = 40 Schaden

Beispiel: Battler hat einen DoTs und zwei HoTs auf sich: Dot 1 macht 50 Schaden, HoT 1 heilt 30 Schaden, HoT 2 heilt 40 Schaden.
Resultat: 50 - 30 - 40 = -20 Schaden = 20 Heilung

Diese Resultate würden dann auf dem Bildschirm angezeigt werden, und nicht alle Schadens/Heilungswerte der Dots/Hots,
also 50, 30, 40.

Wenn du die einzelnt angezeigt bekommen willst, müsste man noch das KS-Skript ein bisschen anpassen.

Edit
Was ich noch vergessen habe:
Es ist ja langweilig, wenn jeder Dot / Hot immer den selben Schaden / Heilung produziert.
Willst du da noch eine Art Range definieren? Das zB der Schaden/Heilung immer um +- 5% schwankt oder sowas?
Wenn ja, soll das dann allgemein für jeden Hot/Dot gelten, oder willst du diese Range für jeden Hot / Dot
separat angeben wollen?

Cryztal

Knappe

  • "Cryztal" started this thread

Motto: Ich mag das Gefühl von völliger Ungezwungenheit. Dann bin ich am besten, würde ich sagen.

  • Send private message

7

Sunday, April 7th 2019, 5:27pm

Aber im groben verwendest du noch das Standard-KS?

Ja. Es geht um das Projekt, welches ich dir bereits geschickt habe.
Es wäre tatsächlich ganz gut wenn man das einzeln sehen könnte um auch im Überblick zu behalten, welche HoT / DoT - Fähigkeit wie wirksam ausschlägt.

Die Konfig wäre ideal so.

Die Standardrange für alles im Maker liegt glsube ich bei 15% oder? Dann kann man sich da denke ich gut dran orientieren.
Lg Cryztal

Mitsch93

Drachentöter

Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.

  • Send private message

8

Sunday, April 7th 2019, 6:04pm

Quoted

Die Standardrange für alles im Maker liegt glsube ich bei 15% oder? Dann kann man sich da denke ich gut dran orientieren.

Für alle Dots / Hots oder für jeden individuell einstellbar?

Cryztal

Knappe

  • "Cryztal" started this thread

Motto: Ich mag das Gefühl von völliger Ungezwungenheit. Dann bin ich am besten, würde ich sagen.

  • Send private message

9

Sunday, April 7th 2019, 7:13pm

Für alle, außer dem prozentualen. 35% leben oder 20 % macht zuviel unterschied. ^^
Lg Cryztal

Mitsch93

Drachentöter

Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.

  • Send private message

10

Sunday, April 7th 2019, 8:29pm

Die Range wird nicht absolut auf den Schaden gerechnet, sondern also
wenn es heißt, dass der DoT 15% Schaden der max. HP zufügt und eine +-20% Range hat, dann
kann der DoT:

Source code

1
2
max. Schaden = 15% * 120% = 0,18 (=18%)
min. Schaden = 15% * 80%   = 0,12 (=12%)

Also fügt der DoT zwischen 12% und 18% Schaden der max. HP zu.

Der Einfachheit halber lass ich jeden DoT/HoT separat einstellen (inklusive als "Variable" deklarierter Schaden).
Dann kannst du immer noch für jeden DoT speziell die Range einstellen. Später wird man ja sowieso sowas
copy-pasten, also sollte das dann auch nicht ein gravierender Mehraufwand für die Konfig sein.


Source code

1
2
max. Schaden = 15% * 120% = 0,18 (=18%)
min. Schaden = 15% * 80%   = 0,12 (=12%)

Also fügt der DoT zwischen 12% und 18% Schaden der max. HP zu.

Der Einfachheit halber lass ich jeden DoT/HoT separat einstellen (inklusive als "Variable" deklarierter Schaden).
Dann kannst du immer noch für jeden DoT speziell die Range einstellen. Später wird man ja sowieso sowas
copy-pasten, also sollte das dann auch nicht ein gravierender Mehraufwand für die Konfig sein.

Edit
Habe da mal was gebastelt. Einfach die drei Skripte über Main bei dir einfügen.
Konfiguration läuft wie oben beschrieben über Module [SLIP_DAMAGE].

Ruby Source code

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
#--------------------------------------------------------------------------
  # Alle SlipDamage States. STATES-Hash muss aufsteigend nach State IDs 
  # sortiert sein! Desweiteren muss das Häkchen "Slip Damage" in der
  # Database beim jeweiligen Status gesetzt sein!
  #--------------------------------------------------------------------------
  # STATES[State_Id] = {State-Einstellungen}
  # - Absoluter Schaden
  # {:type => "absolute", :damage => Schadenswert, :range => Bereich}
  #
  # - Prozentualer Schaden (bezogen auf max. HP)
  # {:type => "max_percent", :damage => Schadenswert, :range => Bereich}
  #
  # - Prozentualer Schaden (bezogen auf HP)
  # {:type => "current_percent", :damage => Schadenswert, :range => Bereich}
  #
  # - In einer Variablen gespeicherter Schaden
  # {:type => "variable", :var_id => Variablen ID, :range => Bereich}
  #
  # :range => Bereich : Schwankung des Schadens als symmetrischer Grenzwert 
  # in Prozent. Daher schwankt der verursachte Schaden um +- Range relativ
  # zum Ausgangswert. 
  # Beispiel: 500 absoluter Schaden, Range ist 20%.
  # min. Schaden = 500 * (100-20)% = 500 * 0,8 = 400
  # min. Schaden = 500 * (100+20)% = 500 * 1,2 = 600
  # Der verursachte Schaden des Status schwankt zwischen 400 und 600.
  #--------------------------------------------------------------------------
  # WICHTIG: Alle Werte gelten nicht nur für Schaden, sondern auch für
  # Heilung. Negative Schadenswerte werten automatisch als Heilung 
  # interpretiert!
  #--------------------------------------------------------------------------
  STATES = {}
  STATES[18] = {:type => "absolute", :damage => 100, :range => 10}
  STATES[19] = {:type => "max_percent", :damage => 10, :range => 10}
  STATES[20] = {:type => "current_percent", :damage => 10, :range => 25}
  STATES[21] = {:type => "variable", :var_id => 1, :range => 100}
  # weitere ...
  # |
  # |
  # ...



Die Range lässt sich für jeden State beliebig definieren (Werte größer gleich 0). Null ist dann gleichbedeutend mit:
Macht immer den selben Schaden / Heilung - keine Schwankungen.
Es ist auch möglich zB eine Range von 100% anzugeben (Wäre eine Verdopplung des Schadens). Das heißt das der Schaden (theoretisch) von
um -+100% schwanken kann. Bei einem Grundschaden von 200 würe dieser also von 0 - 400 schwanken (um 100% symmetrisch um den Grundwert).
Du kannst auch Schwankungen von 200% angeben => 200 +- 400 => min = -200 max = 600. Natürlich macht hier ein negativer Schaden keinen Sinn (der wäre
sonst eine Heilung). Daher überprüft das Skript, ob der Wert kleiner 0 ist. Wenn ja, wird er auf 0 gesetzt, das heißt also dass dann die Schaden
bei 0 - 600 liegt.

Bitte achte darauf, dass die States im Konfigurations-Skript optimalerweise aufsteigend sortiert sein müssen (wie im angehängten Projekt).

Sollte der errechnete Schaden /Heilung bei Null (0) liegen, wird der Schaden nicht angezeigt.

Mitsch93 has attached the following file:
  • Slip Damage.exe (1.02 MB - 3 times downloaded - latest: Jun 1st 2019, 8:25pm)

This post has been edited 1 times, last edit by "Mitsch93" (Apr 7th 2019, 8:29pm)


Cryztal

Knappe

  • "Cryztal" started this thread

Motto: Ich mag das Gefühl von völliger Ungezwungenheit. Dann bin ich am besten, würde ich sagen.

  • Send private message

11

Wednesday, April 10th 2019, 5:46pm

Hi Mitsch,
sorry dass ich jetzt erst dazu komme zu antworten.

Das Skript funktioniert super, vielen Dank!
Aber wie genau unterscheidet sich "absoluter-" und "variabler-" Schaden?
Lg Cryztal

Mitsch93

Drachentöter

Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.

  • Send private message

12

Thursday, April 11th 2019, 5:13pm

Quoted

Aber wie genau unterscheidet sich "absoluter-" und "variabler-" Schaden?


Quoted

variable: Der Schaden wird vorher in einer Variablen angespeichert (kann auch während des Kampfes geschehen).
Dadurch kannst du dann benutzerdefinierten Schaden definieren wie


Im Endeffekt macht der variable DoT auch absoluten Schaden, allerdings wird der Schaden des DoTs
in einer Variable gespeichert und ist daher selbst variabel.

Anwendungsbeispiel: Du möchtest einen DoT "Bluten" erstellen, dessen Schaden abhängig von
der ATK des Actors ist. Du kannst natürlich drölfzig tausend DoTs "absolut" erstellen, die dann
für die jeweilige Waffe den passenden Schaden ausspucken, oder du deklarierst einfach eine
Variable, und speicherst die ATK des Actors in dieser Variablen.
Ich würde das so implementieren, dass der dazugehörige Skill nach der Ausführung ein CE aufruft.
In diesem CE speicherst du einfach die ATK des Actors in der Variable.

Oder du benutzt einfach einen Skiptbefehl in dem CE:

Ruby Source code

1
2
# Speichert die ATK des ersten Partymitglieds in der Variable mit var_id
$game_variables[var_id] = $game_party.actors[0].atk

Das hat natürlich auch Vor- und Nachteile. Stell dir vor dein Actor bekommt den Status "Entwaffnen", der seine
ATK auf 0 setzt. Passiert das bevor der Actor den State "Bluten" auf den Gegner gepackt hat, würde der DoT
also 0 Schaden machen (weil ATK 0). Alternativ könnte man dann einfach sagen: Ok nehmen wir nicht die Actor
ATK, sondern die ATK der ausgerüsteten Waffe. Das hat natürlich zur Folge, dass Buffs nicht gewertet werden
(z.B. ein +50% State, da du ja dann nur den reinen Waffenschaden nimmst):

Ruby Source code

1
2
# Speichert die ATK der ausgerüsteten Waffe des ersten Partymitglieds in der Variable var_id
$game_variables[var_id] = $data_weapons[$game_party.actors[0].weapon_id].atk


Also wie du siehst ist das für sowas gedacht, einfach damit der Benutzer mehr Freiheit hat.
Du kannst dich natürlich in den ganzen Formeln voll und ganz austoben und ganz verrückte Dinge machen.

Cryztal

Knappe

  • "Cryztal" started this thread

Motto: Ich mag das Gefühl von völliger Ungezwungenheit. Dann bin ich am besten, würde ich sagen.

  • Send private message

13

Thursday, April 11th 2019, 5:22pm

Ahh alles klar. Das Anwendungsbeispiel gefällt mir gut ^^
Danke dir nochmal herzlich!
Lg Cryztal

Social bookmarks