Defensiv-Werte per Skript ändern
Hi,
ich suche eine Möglichkeit, die pdef- und mdef-Werte per Skript manuell zu ändern.
Hintergrundgedanke: Der Spieler soll einen Bonus erhalten, wenn er alle Teile eines Ausrüstungs-Satzes trägt (z.B. "Eisenhelm", "Eisenschild" und "Eisenrüstung").
Mein Ansatz ist folgender (ein editiertes Skript, das, wenn ich mich richtig erinnere, jemand aus dem Forum hier für mich geschrieben hatte - bitte nicht böse sein, ich weiß nicht mehr, wer das war!):
Mein Ansatz funktioniert so (wie immer) aber nicht... Hat jemand eine Idee?
Wie genau der mdef-Wert erhöht wird, ist mir relativ egal, da ich die mdef für nichts anderes als diesen Bonus benutze.
Mir fallen da zwei Möglichkeiten ein:
- der base_mdef-Wert des Charakters wird erhöht
- ein Ausrüstungsteil erhält einen mdef-Wert, der dann logischerweise für den Charakter wirkt
Das sind nur Ideen. Wie das funktioniert, ist mir wie gesagt relativ egal.
Kann mir jemand helfen?
ich suche eine Möglichkeit, die pdef- und mdef-Werte per Skript manuell zu ändern.
Hintergrundgedanke: Der Spieler soll einen Bonus erhalten, wenn er alle Teile eines Ausrüstungs-Satzes trägt (z.B. "Eisenhelm", "Eisenschild" und "Eisenrüstung").
Mein Ansatz ist folgender (ein editiertes Skript, das, wenn ich mich richtig erinnere, jemand aus dem Forum hier für mich geschrieben hatte - bitte nicht böse sein, ich weiß nicht mehr, wer das war!):
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Scene_Equip alias main2 main def main main2 #-------------------- Ausrüstungs-Satz: Eisen if @actor.armor3_id == 43 and @actor.armor1_id == 44 and @actor.armor2_id == 45 #die IDs des Helms, Schilds und der Rüstung $data_armors[@armor3_id].mdef = 75 #hier soll etwas stehen, dass den mdef-Wert des Charakters, der diese Ausrüstung trägt, erhöht else $data_armors[@armor3_id].mdef = 0 end #-------------------- end end |
zum Lesen den Text mit der Maus markieren
Mein Ansatz funktioniert so (wie immer) aber nicht... Hat jemand eine Idee?
Wie genau der mdef-Wert erhöht wird, ist mir relativ egal, da ich die mdef für nichts anderes als diesen Bonus benutze.
Mir fallen da zwei Möglichkeiten ein:
- der base_mdef-Wert des Charakters wird erhöht
- ein Ausrüstungsteil erhält einen mdef-Wert, der dann logischerweise für den Charakter wirkt
Das sind nur Ideen. Wie das funktioniert, ist mir wie gesagt relativ egal.
Kann mir jemand helfen?
In der klasse Game_Actor kannst du eine menge methoden finden wie diese hier:
Dort würde ich raten deine Mods vorzunehmen:
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class Game_Actor
#--------------------------------------------------------------------------
# * Get Basic Magic Defense
#--------------------------------------------------------------------------
def base_mdef
weapon = $data_weapons[@weapon_id]
armor1 = $data_armors[@armor1_id]
armor2 = $data_armors[@armor2_id]
armor3 = $data_armors[@armor3_id]
armor4 = $data_armors[@armor4_id]
mdef1 = weapon != nil ? weapon.mdef : 0
mdef2 = armor1 != nil ? armor1.mdef : 0
mdef3 = armor2 != nil ? armor2.mdef : 0
mdef4 = armor3 != nil ? armor3.mdef : 0
mdef5 = armor4 != nil ? armor4.mdef : 0
return mdef1 + mdef2 + mdef3 + mdef4 + mdef5
end
end |
Dort würde ich raten deine Mods vorzunehmen:
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
class Game_Actor
#--------------------------------------------------------------------------
# * Get Basic Magic Defense
#--------------------------------------------------------------------------
def base_mdef
weapon = $data_weapons[@weapon_id]
armor1 = $data_armors[@armor1_id]
armor2 = $data_armors[@armor2_id]
armor3 = $data_armors[@armor3_id]
armor4 = $data_armors[@armor4_id]
mdef1 = weapon != nil ? weapon.mdef : 0
mdef2 = armor1 != nil ? armor1.mdef : 0
mdef3 = armor2 != nil ? armor2.mdef : 0
mdef4 = armor3 != nil ? armor3.mdef : 0
mdef5 = armor4 != nil ? armor4.mdef : 0
if armor3_id == 43 and armor1_id == 44 and armor2_id == 45 #die IDs des Helms, Schilds und der Rüstung
mod_val = 75 #hier soll etwas stehen, dass den mdef-Wert des Charakters, der diese Ausrüstung trägt, erhöht
else
mod_val = 0
end
return mdef1 + mdef2 + mdef3 + mdef4 + mdef5 + mod_val
end
end |
;( :jagen:
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
In der Zeit in der ich ein Skript geschreiben hab hat Genocide schon geantwortet x(
Pastebin: http://wurstinator.pastebin.com/F0vveyTL
Pastebin: http://wurstinator.pastebin.com/F0vveyTL
|
|
Ruby 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 |
class Game_Actor EQ_SET_BONUS = { # Proc.new {|actor| ...} # This is the code where you ask whether the set is equipped. # You need some Ruby/RGSS knowledge but this provides way more possibilities. # => {:atk => 20, :eva = 5} # Write the bonus values # Example Sets: # Set 1, anything (just any item, but not "nothing") Proc.new do |actor| actor.weapon_id != 0 and actor.armor1_id != 0 and actor.armor2_id != 0 and actor.armor3_id != 0 and actor.armor4_id != 0 end => {:pdef => 20}, # Set 2, Bronze Power (any four "Bronze" items) Proc.new do |actor| actor.armor1_id == 1 and actor.armor2_id == 5 and [13, 17].include?(actor.armor3_id) and [1, 5, 9, 13, 17, 21, 25, 29].include?(actor.weapon_id) end => {:mdef => 100} } # STOP EDITING HERE --------------------- EQ_SET_BONUS.each_value do |hash| hash.default = 0 end alias_method :nb_aliasmethod_game_actor_setup_eqsets, :setup def setup(id) nb_aliasmethod_game_actor_setup_eqsets(id) refresh_equipment_sets end alias_method :nb_aliasmethod_game_actor_equip_eqsets, :equip def equip(type, id) nb_aliasmethod_game_actor_equip_eqsets(type, id) refresh_equipment_sets end def refresh_equipment_sets sets = [] EQ_SET_BONUS.each do |key, value| sets.push(value) if key.call(self) end @equipment_sets = sets end def get_equipment_sets return @equipment_sets end ['atk', 'pdef', 'mdef', 'eva'].each do |i| string = "def #{i}; n = super(); sets = get_equipment_sets;" + " sets.each {|s| n += s[:#{i}]}; return n;end" eval(string) end end |
zum Lesen den Text mit der Maus markieren
Vielen Dank, ihr zwei.
@Genocide: Hast du deinen Beiträg editiert?
Als ich den Code kopiert habe, sah der anders aus:
Bei dem "*" bei der Stelle "n = $data_states.mdef_rate / 100.0" und bei dem "+" kurz über dem "else" hat er gemeckert, da habe ich beide gelöscht.
Scheint trotzdem zu funktionieren... Oder verbau ich mir damit irgendwas, was ich jetzt noch nicht merke (außer der mdef, die brauche ich wie gesagt sonst gar nicht)?
@Genocide: Hast du deinen Beiträg editiert?
Als ich den Code kopiert habe, sah der anders aus:
|
|
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 |
class Game_Battler def mdef n = base_mdef for i in @states n = $data_states[i].mdef_rate / 100.0 end schuhe = armor1_id helm = armor2_id rüstung = armor3_id # Liste der Ausrüstungs-Sätze # Eisen if rüstung == 43 and schuhe == 44 and helm == 45 n = 75 else n = 0 end # --- return Integer(n) end end |
zum Lesen den Text mit der Maus markieren
Bei dem "*" bei der Stelle "n = $data_states.mdef_rate / 100.0" und bei dem "+" kurz über dem "else" hat er gemeckert, da habe ich beide gelöscht.
Scheint trotzdem zu funktionieren... Oder verbau ich mir damit irgendwas, was ich jetzt noch nicht merke (außer der mdef, die brauche ich wie gesagt sonst gar nicht)?
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
Ja, du "verbaust" dir ne Menge ;)
Zitat
Bei dem "*" bei der Stelle "n = $data_states.mdef_rate / 100.0" und bei dem "+" kurz über dem "else" hat er gemeckert, da habe ich beide gelöscht.
Scheint trotzdem zu funktionieren... Oder verbau ich mir damit irgendwas, was ich jetzt noch nicht merke (außer der mdef, die brauche ich wie gesagt sonst gar nicht)?
Deinen Code löscht du am besten sofort wieder :P
Mit Genocides Vorschlag sollte es gehen, wobei meiner natürlich viel besser, schöner und cooler ist x) *schubs*
Ich hab es editiert da ich mit den neuen code die wurzel anfass.
Mit beispiel werten:
Du verwendest überall =
und nicht *+-/ dh du ersetzt die zahl und modifizierst sie nicht.
Benutzt am besten das von NB.
|
|
Quellcode |
1 2 3 4 |
n = base_mdef for i in @states n = $data_states[i].mdef_rate / 100.0 end |
Mit beispiel werten:
|
|
Quellcode |
1 2 3 4 5 |
n = 34
for i in [12,33,12,1]
n = i / 100.0
end
p n #=> 0.01 weil 1/100 |
Du verwendest überall =
und nicht *+-/ dh du ersetzt die zahl und modifizierst sie nicht.
Benutzt am besten das von NB.
;( :jagen:
@Genocide: Dein editiertes Skript oben funktioniert bei mir nicht... Vielleicht, weil ich in den Standard-Skripten schon etwas herumgespielt habe.
@Neo: Dein Skript macht Probleme mit einem anderen Skript, das glaube ich auch du für mich geschrieben hast und das die pdef in maxsp umwandelt:
In Zeile 5 ist angeblich "each" nicht definiert.
Hab das Skript jetzt nochmal etwas geändert:
Was genau mach ich mir denn damit kaputt (außer wie gesagt die mdef, aber die brauch ich eh nicht)?
Bisher hab ich noch keine Probleme damit entdeckt...
@Neo: Dein Skript macht Probleme mit einem anderen Skript, das glaube ich auch du für mich geschrieben hast und das die pdef in maxsp umwandelt:
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 |
class Game_Actor if method_defined?(:maxsp) alias_method :nb_lycosa_pdef_to_maxsp, :maxsp def maxsp return [[Integer(nb_lycosa_pdef_to_maxsp + pdef + mdef), 0].max, 9999].min end else def maxsp return [[Integer(super + pdef + mdef), 0].max, 9999].min end end end |
In Zeile 5 ist angeblich "each" nicht definiert.
Hab das Skript jetzt nochmal etwas geändert:
Was genau mach ich mir denn damit kaputt (außer wie gesagt die mdef, aber die brauch ich eh nicht)?
|
|
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 |
class Game_Battler def mdef n = base_mdef for i in @states n = $data_states[i].mdef_rate / 100.0 end schuhe = armor1_id helm = armor2_id rüstung = armor3_id # Liste der Ausrüstungs-Sätze # Eisen if rüstung == 7 and schuhe == 4 and helm == 3 n = 39 else # ... # Alle anderen Ausrüstungs-Sätze else # Nichts n = 0 end end return Integer(n) end end |
zum Lesen den Text mit der Maus markieren
Bisher hab ich noch keine Probleme damit entdeckt...
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
lolwut?
Zitat
In Zeile 5 ist angeblich "each" nicht definiert.
Da steht doch gar nix mit each Oo
Hast du schon probiert, die Reihenfolge meiner beiden Skripte zu tauschen?
Die mdef :P
Zitat
Was genau mach ich mir denn damit kaputt (außer wie gesagt die mdef, aber die brauch ich eh nicht)?
Ich weiß nicht, wie viel du noch bei anderen Sachen geändert hast, aber eigentlich müsste es abstürzen, sobald du einen Zauber auf einen Gegner benutzt.
Das dachte ich mir auch... Deswegen hab ich die Fehlermeldung auch nicht wirklich verstanden.
Wegen der mdef: Deswegen meinte ich ja, dass ich die mdef für sonst nichts brauche
. Ich habe das KS ziemlich editiert, die mdef spielt keine Rolle mehr.
Wenn das Skript sonst (außer der mdef) nichts zerstört, benutze ich das einfach weiterhin, bevor ich jetzt noch weiter dran rum bastle...
Trotzdem vielen Dank!
Wegen der mdef: Deswegen meinte ich ja, dass ich die mdef für sonst nichts brauche
. Ich habe das KS ziemlich editiert, die mdef spielt keine Rolle mehr.Wenn das Skript sonst (außer der mdef) nichts zerstört, benutze ich das einfach weiterhin, bevor ich jetzt noch weiter dran rum bastle...
Trotzdem vielen Dank!
Ist zwar jetzt ein bisschen blöd, aber ich muss hier nochmal kurz etwas fragen. Ich hab nämlich jetzt doch ein Problem mit dem Skript
.
Ich hab ja in diesem Beitrag oben im Skript (das im Spoiler) in Zeile 5 das "*" raus genommen:
Vorher:
Jetzt:
Dann hab ich festgestellt, dass ich das doch bräuchte... Aber sobald ich das rein tue (gilt auch für "+" oder "/"), meint er, dass die Methode für nil:NilClass nicht definiert ist.
Hat da jemand eine Idee, woher das kommt oder wie ich das lösen könnte?
@Neo: Ich hab die Reihenfolge der beiden Skripte vertauscht und wollte es nochmal versuchen, aber er besteht immer noch darauf, dass "each" in Zeile 5 nicht definiert ist.
EDIT: Hab herumexperimentiert und die Zeile mit dem "*" ziemlich an den Schluss des Skripts geschoben. Jetzt scheint es zu funktionieren, und es macht auch mehr Sinn (weil Zustände, die die mdef beeinflussen, auch diese Bonus-mdef beeinflussen sollen).
.Ich hab ja in diesem Beitrag oben im Skript (das im Spoiler) in Zeile 5 das "*" raus genommen:
Vorher:
|
|
Quellcode |
1 |
n *= $data_states[i].mdef_rate / 100.0 |
Jetzt:
|
|
Quellcode |
1 |
n = $data_states[i].mdef_rate / 100.0 |
Dann hab ich festgestellt, dass ich das doch bräuchte... Aber sobald ich das rein tue (gilt auch für "+" oder "/"), meint er, dass die Methode für nil:NilClass nicht definiert ist.
Hat da jemand eine Idee, woher das kommt oder wie ich das lösen könnte?
@Neo: Ich hab die Reihenfolge der beiden Skripte vertauscht und wollte es nochmal versuchen, aber er besteht immer noch darauf, dass "each" in Zeile 5 nicht definiert ist.
EDIT: Hab herumexperimentiert und die Zeile mit dem "*" ziemlich an den Schluss des Skripts geschoben. Jetzt scheint es zu funktionieren, und es macht auch mehr Sinn (weil Zustände, die die mdef beeinflussen, auch diese Bonus-mdef beeinflussen sollen).
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Lycosa« (16. September 2010, 16:54)
demnach müsste base_mdef nil zurückgeben damit n zu dem Zeitpunkt diesen Wert annimmt, Tippfehler seh ich gerade keine...
Such mal in deinen Scripts nach def base_mdef und poste mal den Code ab dem letzten gefundenen Treffer.
ED: Zu langsam... ...ich würd aber trotzdem mal überprüfen, welchen Wert n bei n = base_mdef genau annimmt... der NilClass-Fehler sollte eig. an der Stelle zu denken geben...
Such mal in deinen Scripts nach def base_mdef und poste mal den Code ab dem letzten gefundenen Treffer.
ED: Zu langsam... ...ich würd aber trotzdem mal überprüfen, welchen Wert n bei n = base_mdef genau annimmt... der NilClass-Fehler sollte eig. an der Stelle zu denken geben...
Ähnliche Themen
-
Taverne zum philosophischen Phönix »-
Was hört ihr grade ?
(28. August 2007, 01:28)
-
Skript-Anfragen »-
Project Zelda Engine Fragen
(30. August 2010, 23:10)
-
Skript-Anfragen »-
Exp selber bestimmen
(4. August 2009, 16:53)
-
Skript-Anfragen »-
Kurvengenerator
(18. Oktober 2007, 13:45)
-
RGSS 1 Probleme & Talk »-
Suche Scripts zu Equipment/Statusanzeige
(10. Dezember 2005, 22:25)

