• Anmelden

1

Mittwoch, 19. Mai 2010, 20:16

Ausrüstung, die Werte prozentual erhöht

Hallo zusammen,

ich suche ein kleines Skript, das die Attributs-, LP- und SP-Boni oder -Mali bestimmter Ausrüstungsgegenstände und Waffen prozentual zum Standardwert des Charakters wirken lässt statt als festen Wert.

Beispiel: Ein Schwert erhöht das Attribut "Geschicklichkeit" des Trägers um 15 und die SP um 25.
Mit dem Skript könnte man einstellen, dass die Geschicklichkeit nicht um 15 Punkte, sondern um 15% des Standardwertes des Charakters und die SP nicht um 25 Punkte, sondern um 25% erhöht werden.

Ich hoffe, jemand kann mir da helfen ;) .

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Lycosa« (19. Mai 2010, 20:16)


Irrlicht

Leuchtendes Irgendwas

Motto: Keep shining!

  • Nachricht senden

2

Mittwoch, 19. Mai 2010, 22:20

In Game_Actor finden sich in den Zeilen 199-263 die Berechnungen der Grundwerte der Charaktere...

die müsstest du nur etwas beeinflussen, etwa so:

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 #--------------------------------------------------------------------------
  # * Get Basic Strength
  #--------------------------------------------------------------------------
  def base_str
    n = $data_actors[@actor_id].parameters[2, @level]
    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]
    wp = weapon != nil ? weapon.str_plus : 0                         #EINGEFÜGT
    wp += armor1 != nil ? armor1.str_plus : 0                        #EINGEFÜGT
    wp += armor2 != nil ? armor2.str_plus : 0                        #EINGEFÜGT
    wp += armor3 != nil ? armor3.str_plus : 0                        #EINGEFÜGT
    wp += armor4 != nil ? armor4.str_plus : 0                        #EINGEFÜGT
    return [[(n * (100 + wp) / 100), 1].max, 999].min                #EINGEFÜGT
  end

bin noch nicht dazu gekommen das auch zu testen, aber müsste eig funktionieren...

mfG
Irrlicht

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Irrlicht« (20. Mai 2010, 00:20)


3

Donnerstag, 20. Mai 2010, 02:02

Ich kenn mich mit RGSS nur ganz oberflächlich aus...
Kann man das irgendwo einbauen, dass das nur für einige Ausrüstungsgegenstände oder vielleicht sogar nur für einige Werte einiger Ausrüstungsgegenstände gilt?

4

Donnerstag, 20. Mai 2010, 08:25

Mit Rüstungen geht das eigentlich auch ohne Skript. Bei Rüstungen kannst du nämlich einen Autostate einstellen (eine Statusveränderung die ein Actor automatisch bekommt wenn er das Teil ausrüstet). Jetzt nur noch einen State erstellen der die gewünschten Attributsveränderungne hat und die Priority auf 0 stellen (damit der Status im Menü und im Kampf nicht angezeigt wird). Bei Waffen gibt es diese Einstellung leider nicht. Aber ich glaube es wäre auch hier leichter per Skript Waffen ein Autostate zu geben.

5

Donnerstag, 20. Mai 2010, 11:07

Danke, Burrito! Da bin ich gar nicht drauf gekommen, ich benutz die Funktion nie. Dass Zustände mit Priorität 0 überhaupt nicht angezeigt werden wusste ich auch nicht...

Aber richtig, für Waffen wär das auch wichtig für mich.

Irrlicht

Leuchtendes Irgendwas

Motto: Keep shining!

  • Nachricht senden

6

Donnerstag, 20. Mai 2010, 12:28

Stimmt, Auto-States wär eig. die einfachste Möglichkeit...
Allerdings weiß ich gerade nicht ob sich 2 gleiche Statuseffekte gegenseitig ergänzen und vertrau einfach mal darauf.

Hab mich mal daran versucht den Auto-State zu erweitern, damit er auch auf Waffen anwendbar ist:
Für Waffen, die ein Auto-State zugewiesen haben sollen, einfach ab Zeile 17 anstatt der testweise noch vorgegebenen ergänzen:
@weapon_auto_state[ID der Waffe] = ID des Statuseffekts

Hoffe mal hab keine Bugs o.Ä. übersehen...

Spoiler: Autostates für Waffen

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
#------------------------------------------------------------------------------
# Ergänzt Waffen um die Möglichkeit, Autostates zu erzeugen.
#
# Die Methoden "Update_Auto_State" und "Change_Equipment" wurden zu diesem 
# Zweck überschrieben.
#
# Welche Waffen welchen Autostate erzeugen wird ab Zeile 17 festgelegt
#------------------------------------------------------------------------------
 
class Game_Actor < Game_Battler
 
  alias :original_setup :setup
  def setup(actor_id)
    original_setup(actor_id)
    @weapon_auto_state = Array.new($data_weapons.size)
    # Insert Weapon Auto States:
    @weapon_auto_state[1..5] = [2, 3, 3, 1, 4]
    @weapon_auto_state[7..10] = [1, 1, 1, 1]
    @weapon_auto_state[16] = 8
 
    #-----------------------------------------------
    update_auto_state(nil, $data_weapons[@weapon_id])
  end
 
  #--------------------------------------------------------------------------
  # * Update Auto State
  #     old_armor : unequipped armor
  #     new_armor : equipped armor
  #--------------------------------------------------------------------------
  def update_auto_state(old_equip, new_equip)
    if (new_equip != nil and new_equip.is_a?(RPG::Weapon)) or (old_equip != nil and old_equip.is_a?(RPG::Weapon))
      if old_equip != nil  and @weapon_auto_state[old_equip.id] != nil and @weapon_auto_state[old_equip.id] != 0
        remove_state(@weapon_auto_state[old_equip.id], true)
      end
      if new_equip != nil and @weapon_auto_state[new_equip.id] != nil and @weapon_auto_state[new_equip.id] != 0
        add_state(@weapon_auto_state[new_equip.id], true)
      end
    else # Forcefully remove unequipped armor's auto state
      if old_equip != nil and old_equip.auto_state_id != 0
        remove_state(old_equip.auto_state_id, true)
      end
      # Forcefully add unequipped armor's auto state
      if new_equip != nil and new_equip.auto_state_id != 0
        add_state(new_equip.auto_state_id, true)
      end
    end
  end  
 
  #--------------------------------------------------------------------------
  # * Change Equipment
  #     equip_type : type of equipment
  #     id    : weapon or armor ID (If 0, remove equipment)
  #--------------------------------------------------------------------------
  alias :original_equip :equip
  def equip(equip_type, id)
    if equip_type == 0 and (id == 0 or $game_party.weapon_number(id) > 0)
      update_auto_state($data_weapons[@weapon_id], $data_weapons[id])
    end
    original_equip(equip_type, id)  
  end
 
end  
zum Lesen den Text mit der Maus markieren


mfG
Irrlicht

ED: Offensichtlich ergänzen sich die Effekte, allerdings verstärken sie sich auch gegenseitig...
2 Effekte mit je 150% Stärke ergeben demnach 225% der ursprünglichen...

Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »Irrlicht« (20. Mai 2010, 13:19)


7

Donnerstag, 20. Mai 2010, 13:18

Hab dein Skript getestet, es scheint aber nicht zu funktionieren...
Zusätzlich stürzt das Spiel mit einem Fehler ab, wenn man eine betroffene Waffe im Ausrüstungsbildschirm anwählt: "Undefined Method '[]' for nil:NilClass".

Irrlicht

Leuchtendes Irgendwas

Motto: Keep shining!

  • Nachricht senden

8

Donnerstag, 20. Mai 2010, 13:20

Hmm... kay, schade...
Bei mir hats wunderbar funktioniert, ich vermute einfach mal dass das Ding sich mit irgendeinem anderen Script nicht verträgt...

ich guck mal ob ich ne andere Lösung finde


mfG
Irrlicht

9

Donnerstag, 20. Mai 2010, 16:08

Trotzdem danke, Irrlicht.

Ich hab das Problem momentan anders gelöst, passt also eh grade.

Irrlicht

Leuchtendes Irgendwas

Motto: Keep shining!

  • Nachricht senden

10

Donnerstag, 20. Mai 2010, 23:46

Auch wenn das Problem eig schon gelöst ist:

Da einer von Hindis heutigen Beiträgen mich darauf hingewiesen hat, dass es ungünstig ist alias zu verwenden hab ich mal seinen Ratschlag befolgt und eine 2te Version zusammengeschustert... (Wenn jemand Verbesserungsvorschläge hat immer raus damit :) )

Spoiler: Waffen-Autostates V2

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
#------------------------------------------------------------------------------
# Ergänzt Waffen um die Möglichkeit, Autostates zu erzeugen.
# Version 2.0
#
# Welche Waffen welchen Autostate erzeugen wird ab Zeile 19 festgelegt
# Um einer Waffe einen Autostate zuzuweisen füge dort eine Zeile wie folgt ein:
#
# @weapon_auto_state[ID der Waffe] = ID des Statuseffekts
#
#------------------------------------------------------------------------------
 
class Game_Actor < Game_Battler
 
  alias_method(:original_setup, :setup)
  def setup(actor_id)
    original_setup(actor_id)
    @weapon_auto_state = Array.new($data_weapons.size)
    # Insert Weapon Auto States:
    @weapon_auto_state[1..5] = [2, 3, 3, 1, 4]
    @weapon_auto_state[7..10] = [1, 1, 1, 1]
    @weapon_auto_state[16] = 8
 
    #-----------------------------------------------
    update_weapon_auto_state(nil, $data_weapons[@weapon_id])
  end
 
  #--------------------------------------------------------------------------
  # * Update Auto State
  #--------------------------------------------------------------------------
  def update_weapon_auto_state(old_equip, new_equip)
    if old_equip != nil  and @weapon_auto_state[old_equip.id] != nil and @weapon_auto_state[old_equip.id] != 0
      remove_state(@weapon_auto_state[old_equip.id], true)
    end
    if new_equip != nil and @weapon_auto_state[new_equip.id] != nil and @weapon_auto_state[new_equip.id] != 0
      add_state(@weapon_auto_state[new_equip.id], true)
    end
  end  
 
  #--------------------------------------------------------------------------
  # * Change Equipment
  #     equip_type : type of equipment
  #     id    : weapon or armor ID (If 0, remove equipment)
  #--------------------------------------------------------------------------
  alias_method(:original_equip, :equip)
  def equip(equip_type, id)
    if equip_type == 0 and (id == 0 or $game_party.weapon_number(id) > 0)
      update_weapon_auto_state($data_weapons[@weapon_id], $data_weapons[id])
    end
    original_equip(equip_type, id)  
  end
 
end
zum Lesen den Text mit der Maus markieren


mfG
Irrlicht

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Irrlicht« (23. Mai 2010, 14:29)


Social Bookmarks