Neues Attribut
Ich suche ein Script mit einem weiteren Attribut.
Ich hätte gern ein Glücksattribut, je höher dieses Attribut desto wahrscheinlicher ist dann die Trefferchance und Krit-Chance erhöht, ebenso möcht ich bei gegnern Spezielle Items einstellen, die neben den normalen loots im Kampf geklaut werden können (am besten wie bei FF10 mit normalen items zum klauen und seltenen), aber das ist erstmal nebensache^^
Ich hab mir das so als kampfrechnung gedacht:
Standart: krit = 4 * attacker.dex / self.agi
neu: krit = 4 * (attacker.dex + (attacker.luk / 2)) / self.agi
Standart: eva = 8 * self.agi / attacker.dex + self.eva
neu: eva = 8 * (self.agi + (self.luk / 2)) / attacker.dex + self.eva
Aber da es das Glück nicht in der Database gibt, komm ich mit der Programmierung noch nicht so ganz klar^^
Muss ich dann die gesamte Actor-Seite der Database neu scripten oder geht es, dass das Glück-Attribut einzeln gescriptet wird?
Ich hätte gern ein Glücksattribut, je höher dieses Attribut desto wahrscheinlicher ist dann die Trefferchance und Krit-Chance erhöht, ebenso möcht ich bei gegnern Spezielle Items einstellen, die neben den normalen loots im Kampf geklaut werden können (am besten wie bei FF10 mit normalen items zum klauen und seltenen), aber das ist erstmal nebensache^^
Ich hab mir das so als kampfrechnung gedacht:
Standart: krit = 4 * attacker.dex / self.agi
neu: krit = 4 * (attacker.dex + (attacker.luk / 2)) / self.agi
Standart: eva = 8 * self.agi / attacker.dex + self.eva
neu: eva = 8 * (self.agi + (self.luk / 2)) / attacker.dex + self.eva
Aber da es das Glück nicht in der Database gibt, komm ich mit der Programmierung noch nicht so ganz klar^^
Muss ich dann die gesamte Actor-Seite der Database neu scripten oder geht es, dass das Glück-Attribut einzeln gescriptet wird?
Aktuelles Projekt
Einschätzung meiner Fähigkeiten
Das Aussehen der Database zu verändern wirst du mit dem Scripteditor nicht schaffen, dafür müsstest du schon den Maker hacken...
Allerdings könntest du dir dieses Attribut im Script einstellen.
Das könnte z.B. so aussehen:
Allerdings könntest du dir dieses Attribut im Script einstellen.
Das könnte z.B. so aussehen:
|
|
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# $game_actors[ id ].luck += Menge # Der Actor, der zum Index "id" gehört erhält permanente, zusätzliche # "Menge" Glück-Punkte. class Game_Actor < Game_Battler #Grund-Glücksattribut der Actors: # Hier können die Grundwerte eingefügt werden, die jeder Actor am Anfang hat. # (vergl. Parameterkurve in der Database) # # Generell muss der Aufbau folgendermaßen aussehen: # # "Actor_Name" => [Parameterliste] # # bei mehreren Einträgen müssen alle Einträge mit Kommata getrennt werden. # # Für "Actor_Name" gilt: # Hat ein Actor in der Database den hier angegeben Namen, so wird ihm diese # Parameterliste zugewiesen. Dabei muss der Name mitsamt Groß- und Klein- # schreibung sowie allen Leer- und Sonderzeichen mit dem in "" stehenden # Schlüssel übereinstimmen. Es gilt immer der Name aus der Database, wird # der Name im Spiel geändert ändert sich nicht die ihm zugeteilte Liste. # # Für [Parameterliste] gilt: # Dieses Array speichert die Grundwerte für das Glücksattribut für jeden Level, # wie auch in der Database für andere Attribute einstellbar. # Der erste Eintrag gibt die Grund-Glücksmenge für Stufe 1 an, der zweite # für Stufe 2 etc. # Der Aufbau kann auf 3 verschiedene Arten vorgenommen werden: # # 1) # # [ Level1, Level2, Level3, ... , MAXLevel ] # # Die wohl unkomplizierteste, aber gleichzeitig aufwendigste Methode, da für # jede Stufe ein Eintrag gesetzt werden muss. # # 2) # # Array.new(99) { |i| Funktion(i) } # # Diese Methode legt ein 99 Einträge langes Array an und füllt es mit den # in der Funktion errechneten Einträgen. Dabei ist i eine Variable, die für # den ersten Eintrag 0, für den 2ten 1, und für den letzten Eintrag 99-1 = 98 # ist. # Beim Anwenden dieser Methode sollten die Grundrechenfunktionen in RGSS bekannt # sein. # # 3) # # [ "set", 40, 910, 1.0 ] # # Hat das Array diese Form wird der Grundwert anhand der Randwerte für # Stufe 1 (hier 40) und Stufe 99 (hier 910) bestimmt. # "set" dient dabei lediglich als Erkennung und darf mit beliebiger # Groß-/Kleinschreibung geschrieben werden. # # Die 3te Zahl bestimmt den Verlauf: Bei einem Wert von 1.0 steigt der Wert # zwischen Stufe 1 und 99 linear an, bei niedrigeren Werten steigt er zunächst # langsamer und später schneller, bei höheren Werten zunächst schneller und # später langsamer. # Dieser Wert darf ausgelassen werden, in dem Fall würde er als 1 betrachtet. BASE_LUCK = { "Aluxes" => [ 14, 24, 34, 44, 54, 64, 74, 84, 94, 104, 114, 124, 134, 144, 154, 164, 174, 184, 194, 204, 214, 224, 234, 244, 254, 264, 274, 284, 294, 304, 314, 324, 334, 344, 354, 364, 374, 384, 394, 404, 414, 424, 434, 444, 454, 464, 474, 484, 494, 504, 514, 524, 534, 544, 554, 564, 574, 584, 594, 604, 614, 624, 634, 644, 654, 664, 674, 684, 694, 704, 714, 724, 734, 744, 754, 764, 774, 784, 794, 804, 814, 824, 834, 844, 854, 864, 874, 884, 894, 904, 914, 924, 934, 944, 954, 964, 974, 984, 994] , "Basil" => Array.new(99){ |i| 14 + i * 10 } , "Gloria" => ["SET", 14, 994, 1.0] , "Hilda" => ["Set", 14, 994] } #Waffe: zusätzliches Glück (0 für alle nicht angegebenen) # Weapon_Name => menge WEAPON_ADD_LUCK = { "Bronze Sword" => +17, "Iron Sword" => -2 } WEAPON_ADD_LUCK.default = 0 #Rüstung: zusätzliches Glück (0 für alle nicht angegebenen) # Armor_Name => menge ARMOR_ADD_LUCK = { "Bronze Armor" => +13, "Bronze Shield" => -19 } ARMOR_ADD_LUCK.default = 0 #Status: prozentuale Glücksrate (100 für alle nicht angegebenen) # STATE_Name => prozentuale Rate STATE_LUCKRATE = { "Fortunas Segen" => 150, "Fortunas Fluch" => 50 } ################################################################################ # Zusätzliches: alias_method(:setup_ILC23112010, :setup) unless method_defined?(:setup_ILC23112010) def setup(actor_id) setup_ILC23112010(actor_id) @luck_plus = 0 # Setup wird um eine Variable erweitert: permenenter Glücksbonus end def base_luck # errechnen des Grund-Glücks des Actors actname = $data_actors[@actor_id].name if (a = BASE_LUCK[actname]).nil? # kein Eintrag base = 1 elsif a[0].is_a?(String) and a[0].upcase == "SET" # "SET" - Eintrag start = a[1] add = (a[2] - start).to_f ce = a[3].nil? ? 1 : a[3] base = start + (add * (@level-1) / 98 * (ce+(@level-2)*(1-ce)/97)).to_i elsif (a = a[@level-1]).nil? # kein Eintrag für diese Stufe base = 1 else # normaler Eintrag base = a end base += (a = $data_weapons[@weapon_id]).nil? ? 0 : WEAPON_ADD_LUCK[a.name] base += (a = $data_armors[@armor1_id]).nil? ? 0 : ARMOR_ADD_LUCK[a.name] base += (a = $data_armors[@armor2_id]).nil? ? 0 : ARMOR_ADD_LUCK[a.name] base += (a = $data_armors[@armor3_id]).nil? ? 0 : ARMOR_ADD_LUCK[a.name] base += (a = $data_armors[@armor4_id]).nil? ? 0 : ARMOR_ADD_LUCK[a.name] return [[999, base].min, 1].max end def luck=(luck) # Glück wird als permanenter Bonus hinzugefügt @luck_plus += luck - self.luck end def luck # errechnen des tatsächlichen Glücks des Actors (mit Einflüssen durch # Statuseffekte) base = self.base_luck base += @luck_plus @states.each do |i| statename = $data_states[i].name next if (a = STATE_LUCKRATE[statename]).nil? base *= a / 100.0 end return [[999, base.to_i].min, 1].max end end class Game_Battler def luck # Glückswert für alle anderen Battler-Typen (Game_Enemy) return 1 end end |
zum Lesen den Text mit der Maus markieren
|
|
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
################################################################################ # Überarbeitungen: # Attack-Effekt wird von Glück beeinträchtigt (siehe #EING-Zeile(n)) #-------------------------------------------------------------------------- # * Applying Normal Attack Effects # attacker : battler #-------------------------------------------------------------------------- class Game_Battler def attack_effect(attacker) # Clear critical flag self.critical = false # First hit detection hit_result = (rand(100) < attacker.hit) # If hit occurs if hit_result == true # Calculate basic damage atk = [attacker.atk - self.pdef / 2, 0].max self.damage = atk * (20 + attacker.str) / 20 # Element correction self.damage *= elements_correct(attacker.element_set) self.damage /= 100 # If damage value is strictly positive if self.damage > 0 # Critical correction if rand(100) < 4 * (attacker.dex + attacker.luck / 2) / self.agi #EING self.damage *= 2 self.critical = true end # Guard correction if self.guarding? self.damage /= 2 end end # Dispersion if self.damage.abs > 0 amp = [self.damage.abs * 15 / 100, 1].max self.damage += rand(amp+1) + rand(amp+1) - amp end # Second hit detection eva = 8 * (self.agi + self.luck / 2) / attacker.dex + self.eva #EING hit = self.damage < 0 ? 100 : 100 - eva hit = self.cant_evade? ? 100 : hit hit_result = (rand(100) < hit) end # If hit occurs if hit_result == true # State Removed by Shock remove_states_shock # Substract damage from HP self.hp -= self.damage # State change @state_changed = false states_plus(attacker.plus_state_set) states_minus(attacker.minus_state_set) # When missing else # Set damage to "Miss" self.damage = "Miss" # Clear critical flag self.critical = false end # End Method return true end # Skilleffekt wird von Glück beeinträchtigt (siehe #EING-Zeile(n)) #-------------------------------------------------------------------------- # * Apply Skill Effects # user : the one using skills (battler) # skill : skill #-------------------------------------------------------------------------- def skill_effect(user, skill) # Clear critical flag self.critical = false # If skill scope is for ally with 1 or more HP, and your own HP = 0, # or skill scope is for ally with 0, and your own HP = 1 or more if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1) # End Method return false end # Clear effective flag effective = false # Set effective flag if common ID is effective effective |= skill.common_event_id > 0 # First hit detection hit = skill.hit if skill.atk_f > 0 hit *= user.hit / 100 end hit_result = (rand(100) < hit) # Set effective flag if skill is uncertain effective |= hit < 100 # If hit occurs if hit_result == true # Calculate power power = skill.power + user.atk * skill.atk_f / 100 if power > 0 power -= self.pdef * skill.pdef_f / 200 power -= self.mdef * skill.mdef_f / 200 power = [power, 0].max end # Calculate rate rate = 20 rate += (user.str * skill.str_f / 100) rate += (user.dex * skill.dex_f / 100) rate += (user.agi * skill.agi_f / 100) rate += (user.int * skill.int_f / 100) # Calculate basic damage self.damage = power * rate / 20 # Element correction self.damage *= elements_correct(skill.element_set) self.damage /= 100 # If damage value is strictly positive if self.damage > 0 # Guard correction if self.guarding? self.damage /= 2 end end # Dispersion if skill.variance > 0 and self.damage.abs > 0 amp = [self.damage.abs * skill.variance / 100, 1].max self.damage += rand(amp+1) + rand(amp+1) - amp end # Second hit detection eva = 8 * (self.agi + self.luck / 2) / user.dex + self.eva #EING hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100 hit = self.cant_evade? ? 100 : hit hit_result = (rand(100) < hit) # Set effective flag if skill is uncertain effective |= hit < 100 end # If hit occurs if hit_result == true # If physical attack has power other than 0 if skill.power != 0 and skill.atk_f > 0 # State Removed by Shock remove_states_shock # Set to effective flag effective = true end # Substract damage from HP last_hp = self.hp self.hp -= self.damage effective |= self.hp != last_hp # State change @state_changed = false effective |= states_plus(skill.plus_state_set) effective |= states_minus(skill.minus_state_set) # If power is 0 if skill.power == 0 # Set damage to an empty string self.damage = "" # If state is unchanged unless @state_changed # Set damage to "Miss" self.damage = "Miss" end end # If miss occurs else # Set damage to "Miss" self.damage = "Miss" end # If not in battle unless $game_temp.in_battle # Set damage to nil self.damage = nil end # End Method return effective end end class Window_Status < Window_Base def refresh # Glück wird im Statusfenster eingefügt (löschen bei Inkompatibilität) self.contents.clear draw_actor_graphic(@actor, 40, 112) draw_actor_name(@actor, 4, 0) draw_actor_class(@actor, 4 + 144, 0) draw_actor_level(@actor, 96, 32) draw_actor_state(@actor, 96, 64) draw_actor_hp(@actor, 96, 112, 172) draw_actor_sp(@actor, 96, 144, 172) draw_actor_parameter(@actor, 96, 192, 0) draw_actor_parameter(@actor, 96, 224, 1) draw_actor_parameter(@actor, 96, 256, 2) draw_actor_parameter(@actor, 96, 304 - 16, 3) #EING draw_actor_parameter(@actor, 96, 336 - 16, 4) #EING draw_actor_parameter(@actor, 96, 368 - 16, 5) #EING draw_actor_parameter(@actor, 96, 400 - 16, 6) #EING self.contents.font.color = system_color #EING self.contents.draw_text(96, 432 - 16, 120, 32, "Glück") #EING self.contents.font.color = normal_color #EING self.contents.draw_text(96 + 120, 432 - 16, 36, 32, @actor.luck.to_s, 2)#EING self.contents.font.color = system_color self.contents.draw_text(320, 48, 80, 32, "EXP") self.contents.draw_text(320, 80, 80, 32, "NEXT") self.contents.font.color = normal_color self.contents.draw_text(320 + 80, 48, 84, 32, @actor.exp_s, 2) self.contents.draw_text(320 + 80, 80, 84, 32, @actor.next_rest_exp_s, 2) self.contents.font.color = system_color self.contents.draw_text(320, 160, 96, 32, "equipment") draw_item_name($data_weapons[@actor.weapon_id], 320 + 16, 208) draw_item_name($data_armors[@actor.armor1_id], 320 + 16, 256) draw_item_name($data_armors[@actor.armor2_id], 320 + 16, 304) draw_item_name($data_armors[@actor.armor3_id], 320 + 16, 352) draw_item_name($data_armors[@actor.armor4_id], 320 + 16, 400) end end |
zum Lesen den Text mit der Maus markieren
Dieser Beitrag wurde bereits 29 mal editiert, zuletzt von »Irrlicht« (24. November 2010, 19:30)
Danke, ich werd das dann mal bei gelegenheit testen.
ich meinte nicht das aussehen der database ändern, sondern, dass ich die Database völlig ignoriere und sämliche attrbute
via script mache, so wie das Glück Skript von dir^^
Mir ist klar das es verrückt klingt, aber anders macht man es z.B. mit 3D Game Studio auch nicht, da gib's keine Database^^
aber was das Scripten angeht muss ich noch einiges lernen, deswegen, arbeite ich mich mit dem RMXP, ja langsam hoch^^
Zitat
Das Aussehen der Database zu verändern wirst du mit dem Scripteditor nicht schaffen, dafür müsstest du schon den Maker hacken...
ich meinte nicht das aussehen der database ändern, sondern, dass ich die Database völlig ignoriere und sämliche attrbute
via script mache, so wie das Glück Skript von dir^^
Mir ist klar das es verrückt klingt, aber anders macht man es z.B. mit 3D Game Studio auch nicht, da gib's keine Database^^
aber was das Scripten angeht muss ich noch einiges lernen, deswegen, arbeite ich mich mit dem RMXP, ja langsam hoch^^
Aktuelles Projekt
Einschätzung meiner Fähigkeiten
Ähnliche Themen
-
Einsteigerhilfe »-
Einpaar Fragen
(9. November 2010, 07:26)
-
Skript-Anfragen »-
Neues Save Menü
(5. November 2010, 16:27)
-
Maker-Talk »-
Welcher Attribut ist für Kritische Trefer zuständig?
(17. Januar 2009, 16:37)
-
Skript-Anfragen »-
Hilfe beim ändern eines skripts
(10. Juni 2007, 21:44)
-
RGSS 1 Probleme & Talk »-
Attribut "Wert" und verändern?
(24. September 2006, 18:10)
