Angius - Sob 25 Cze, 2011 12:14 Temat postu: Bonus Setowy
~Bonus Setowy~
Opis:
Ten skrypt pozwala na to, by po założeniu konkretnego zestawu uzbrojenia dodać graczowi bonus do statystyk. Ponadto można ustalić, po założeniu ilu elementów danego setu ile i jake statystyki będą dodane.
Uwaga! W konfiguracji zestawów BROŃ należy podać jako pierwszą!
Info:
Autor: Letucce
Tłumaczenie: Angius
Skrypt:
Spoiler:
Kod:
#===============================================================================
# Armor Set Bonus
# Version 1.4
# By Lettuce
#
# Opis: Gracz może otrzymac dodatkowe statystyki gdy założy 1 lub
# więcej elementów danego zestawu.
#
#Note** te bonusy DODAJĄ! Na przykład, jeśli założysz przedmiot należący
# do zestawu, a drugi z innego zestawu, uzyskasz kombinowany bonus
# jak 100% z jednego setu, 20% z drugiego, czyli w sumie 120%
#==========================Configuration========================================
# Lista zestawów
# Dodawaj więcej zestawów w tym formacie:
# ID zestawu => [IDbroni, IDpancerza1, IDpancerza2, IDpancerza3]
Sets = {
1 => [1,2,9,15,24],
2 => [2,1,7,14,23],
3 => []}
# Lista bonusów setowych
# *Note: Bonusy setowe muszą być w takiej samej kolejności jak sety!
#
# Atrybuty: 1:atak , 2:obrona , 3:prędkość, 4:inteligencja, 5:HP, 6:mana, 7:krytyk, 8:unik
# wszystkie wartości procentowo
#
# *Jeśli chcesz dać bonus wymagający założenia dwóch lub więcej elementów
# zostaw pierwszy bonus pusty
# Format:
# ID zestawu => [ [Atrybut,Ilość], # Gdy założony 1 element
# [Atrybut,Ilość], # Gdy założone 2 elementy
# [Atrybut,Ilość], # Założone 3
# [Atrybut,Ilość]] # Założone 4
# etc.
Set_Bonus = {
1 => [ [1,5], #Jeśli założony jeden z zestawu (1, 2,9,15,24), bonus 5% ataku
[2,20], #Jeśli dwa z tego zestawu, dostaje 5% ataku i 20% obrony
[5,100], #etc etc
[6,20],
[7,30]
],
2 => [ [1,1000],
[3,1000],
[2,2000],
[5,1000],
[6,2000]],
3 => [ [1,5],
[2,20],
[5,100],
[7,2000],
[8,50]]
}
# Nazwy zestawów
# Taka sama kolejnośc jak zestawy!
Set_Names = {
1 => "Super Set",
2 => "Uber set",
3 => "Some set lol"
#===================================================================
# NIŻEJ EDYTUJESZ NA WŁASNĄ ODPOWIEDZIALNOŚĆ!
#===================================================================
}
class Game_Actor < Game_Battler
attr_accessor :bonus_set
attr_accessor :bonus_set_pieces
alias lettuce_eq_bonus_setup setup
def setup(actor_id)
lettuce_eq_bonus_setup(actor_id)
@bonus_set = []
for i in 1..Sets.size
weapons = [nil,Sets[i][0]]
armors = [Sets[i][1],Sets[i][2],Sets[i][3],Sets[i][4]]
if Sets[i].include?(@weapon_id)
@bonus_set.push(i) if !@bonus_set.include?(i)
end
if Sets[i].include?(@armor4_id)
@bonus_set.push(i) if !@bonus_set.include?(i)
end
if Sets[i].include?(@armor3_id)
@bonus_set.push(i) if !@bonus_set.include?(i)
end
if Sets[i].include?(@armor2_id)
@bonus_set.push(i) if !@bonus_set.include?(i)
end
if Sets[i].include?(@armor1_id)
@bonus_set.push(i) if !@bonus_set.include?(i)
end
end
@bonus_set_pieces = []
for i in 0...@bonus_set.size
@bonus_set_pieces.push(0)
end
if !@bonus_set.empty?
for i in 0...@bonus_set.size
weapons = [nil,Sets[@bonus_set[i]][0]]
armors = [Sets[@bonus_set[i]][1],Sets[@bonus_set[i]][2],
Sets[@bonus_set[i]][3],Sets[@bonus_set[i]][4]]
@bonus_set_pieces[i] += weapons.include?(@weapon_id) ? 1 : 0
@bonus_set_pieces[i] += armors.include?(@armor1_id) ? 1 : 0
@bonus_set_pieces[i] += armors.include?(@armor2_id) ? 1 : 0
@bonus_set_pieces[i] += armors.include?(@armor3_id) ? 1 : 0
@bonus_set_pieces[i] += armors.include?(@armor4_id) ? 1 : 0
end
end
end
alias lettuce_eq_bonus_atk atk
alias lettuce_eq_bonus_def def
alias lettuce_eq_bonus_spi spi
alias lettuce_eq_bonus_agi agi
alias lettuce_eq_bonus_maxhp maxhp
alias lettuce_eq_bonus_maxmp maxmp
alias lettuce_eq_bonus_cri cri
alias lettuce_eq_bonus_eva eva
def atk
default_val = lettuce_eq_bonus_atk
final_val = default_val
n = 100
if !@bonus_set.empty?
for j in 0...@bonus_set.size
for i in 0...@bonus_set_pieces[j]
if Set_Bonus[@bonus_set[j]][i] != nil
if Set_Bonus[@bonus_set[j]][i][0] == 1
n +=Set_Bonus[@bonus_set[j]][i][1]
end
end
end
end
final_val *= n
final_val /= 100
else
final_val = default_val
end
return final_val
end
def def
default_val = lettuce_eq_bonus_def
final_val = default_val
n = 100
if !@bonus_set.empty?
for j in 0...@bonus_set.size
for i in 0...@bonus_set_pieces[j]
if Set_Bonus[@bonus_set[j]][i] != nil
if Set_Bonus[@bonus_set[j]][i][0] == 2
n +=Set_Bonus[@bonus_set[j]][i][1]
end
end
end
end
final_val *= n
final_val /= 100
else
final_val = default_val
end
return final_val
end
def spi
default_val = lettuce_eq_bonus_spi
final_val = default_val
n = 100
if !@bonus_set.empty?
for j in 0...@bonus_set.size
for i in 0...@bonus_set_pieces[j]
if Set_Bonus[@bonus_set[j]][i] != nil
if Set_Bonus[@bonus_set[j]][i][0] == 3
n +=Set_Bonus[@bonus_set[j]][i][1]
end
end
end
end
final_val *= n
final_val /= 100
else
final_val = default_val
end
return final_val
end
def agi
default_val = lettuce_eq_bonus_agi
final_val = default_val
n = 100
if !@bonus_set.empty?
for j in 0...@bonus_set.size
for i in 0...@bonus_set_pieces[j]
if Set_Bonus[@bonus_set[j]][i] != nil
if Set_Bonus[@bonus_set[j]][i][0] == 4
n +=Set_Bonus[@bonus_set[j]][i][1]
end
end
end
end
final_val *= n
final_val /= 100
else
final_val = default_val
end
return final_val
end
def maxhp
default_val = lettuce_eq_bonus_maxhp
final_val = default_val
n = 100
if @bonus_set
if !@bonus_set.empty?
for j in 0...@bonus_set.size
for i in 0...@bonus_set_pieces[j]
if Set_Bonus[@bonus_set[j]][i] != nil
if Set_Bonus[@bonus_set[j]][i][0] == 5
n += Set_Bonus[@bonus_set[j]][i][1]
end
end
end
end
final_val *= n
final_val /= 100
else
final_val = default_val
end
end
return final_val
end
def maxmp
default_val = lettuce_eq_bonus_maxmp
final_val = default_val
n = 100
if @bonus_set
if !@bonus_set.empty?
for j in 0...@bonus_set.size
for i in 0...@bonus_set_pieces[j]
if Set_Bonus[@bonus_set[j]][i] != nil
if Set_Bonus[@bonus_set[j]][i][0] == 6
n +=Set_Bonus[@bonus_set[j]][i][1]
end
end
end
end
final_val *= n
final_val /= 100
else
final_val = default_val
end
end
return final_val
end
def cri
default_val = lettuce_eq_bonus_cri
final_val = default_val
n = 100
if !@bonus_set.empty?
for j in 0...@bonus_set.size
for i in 0...@bonus_set_pieces[j]
if Set_Bonus[@bonus_set[j]][i] != nil
if Set_Bonus[@bonus_set[j]][i][0] == 7
n +=Set_Bonus[@bonus_set[j]][i][1]
end
end
end
end
final_val *= n
final_val /= 100
else
final_val = default_val
end
return final_val
end
def eva
default_val = lettuce_eq_bonus_eva
final_val = default_val
n = 100
if !@bonus_set.empty?
for j in 0...@bonus_set.size
for i in 0...@bonus_set_pieces[j]
if Set_Bonus[@bonus_set[j]][i] != nil
if Set_Bonus[@bonus_set[j]][i][0] == 8
n +=Set_Bonus[@bonus_set[j]][i][1]
end
end
end
end
final_val *= n
final_val /= 100
else
final_val = default_val
end
return final_val
end
def change_equip(equip_type, item, test = false)
last_item = equips[equip_type]
unless test
return if $game_party.item_number(item) == 0 if item != nil
$game_party.gain_item(last_item, 1)
$game_party.lose_item(item, 1)
end
item_id = item == nil ? 0 : item.id
case equip_type
when 0 # Weapon
@weapon_id = item_id
unless two_hands_legal? # If two hands is not allowed
change_equip(1, nil, test) # Unequip from other hand
end
when 1 # Shield
@armor1_id = item_id
unless two_hands_legal? # If two hands is not allowed
change_equip(0, nil, test) # Unequip from other hand
end
when 2 # Head
@armor2_id = item_id
when 3 # Body
@armor3_id = item_id
when 4 # Accessory
@armor4_id = item_id
end
@bonus_set = []
for i in 1..Sets.size
weapons = [nil,Sets[i][0]]
armors = [Sets[i][1],Sets[i][2],Sets[i][3],Sets[i][4]]
if Sets[i].include?(@weapon_id)
@bonus_set.push(i) if !@bonus_set.include?(i)
end
if Sets[i].include?(@armor4_id)
@bonus_set.push(i) if !@bonus_set.include?(i)
end
if Sets[i].include?(@armor3_id)
@bonus_set.push(i) if !@bonus_set.include?(i)
end
if Sets[i].include?(@armor2_id)
@bonus_set.push(i) if !@bonus_set.include?(i)
end
if Sets[i].include?(@armor1_id)
@bonus_set.push(i) if !@bonus_set.include?(i)
end
end
@bonus_set_pieces = []
for i in 0...@bonus_set.size
@bonus_set_pieces.push(0)
end
if !@bonus_set.empty?
for i in 0...@bonus_set.size
weapons = [nil,Sets[@bonus_set[i]][0]]
armors = [Sets[@bonus_set[i]][1],Sets[@bonus_set[i]][2],
Sets[@bonus_set[i]][3],Sets[@bonus_set[i]][4]]
@bonus_set_pieces[i] += weapons.include?(@weapon_id) ? 1 : 0
@bonus_set_pieces[i] += armors.include?(@armor1_id) ? 1 : 0
@bonus_set_pieces[i] += armors.include?(@armor2_id) ? 1 : 0
@bonus_set_pieces[i] += armors.include?(@armor3_id) ? 1 : 0
@bonus_set_pieces[i] += armors.include?(@armor4_id) ? 1 : 0
end
end
end
end
class Window_Base < Window
def draw_item_name(item, x, y, enabled = true)
if item != nil
is_set = false
set_no = 0
if item.is_a?(RPG::Weapon)
for i in 1..Sets.size
weapons = []
weapons.push(Sets[i][0])
if weapons.include?(item.id)
is_set = true
set_no = i
end
end
end
if item.is_a?(RPG::Armor)
for i in 1..Sets.size
armors = []
armors.push(Sets[i][1])
armors.push(Sets[i][2])
armors.push(Sets[i][3])
armors.push(Sets[i][4])
if armors.include?(item.id)
is_set = true
set_no = i
end
end
end
draw_icon(item.icon_index, x, y, enabled)
self.contents.font.color = normal_color
self.contents.font.color.alpha = enabled ? 255 : 128
set_word = ""
if is_set then set_word = "[" + Set_Names[set_no] + "]" end
self.contents.font.size = Font.default_size
self.contents.draw_text(x + 24, y, 172, WLH, item.name)
self.contents.font.color = crisis_color
self.contents.font.size = 12
self.contents.draw_text(x + 28, y+12, 172, WLH, set_word)
self.contents.font.color = normal_color
self.contents.font.size = Font.default_size
end
end
end
Dodatki:
Ten skrypt wyświetla bonus setowy w oknie statusu:
class Window_Status < Window_Base
alias show_set_bonus_refresh refresh
def refresh
show_set_bonus_refresh
draw_set_bonus(@actor)
end
def draw_set_bonus(actor)
self.contents.font.color = system_color
self.contents.font.size = FontSize_Header
self.contents.draw_text(X_position,Y_position,100,WLH,"Bonus setowy") #Tutaj można zmienić nazwę wyświetlaną
self.contents.font.color = normal_color
# Niżej nie tłumaczę, bo jest tam tylko opis kodu.
sets = actor.bonus_set #array with the sets listing
set_pieces = actor.bonus_set_pieces # array with pieces number for each set
bonus_set = [0,0,0,0,0,0,0,0,0] #different attribute listing
for i in 0...sets.size
bonus_array = Set_Bonus[sets[i]] #array with bonus
pieces = set_pieces[i] #how many pieces
for j in 0...pieces
bonus_set[bonus_array[j][0]] += bonus_array[j][1] # [att,amount]
end
end
#bonus_set = Set_Bonus[actor.bonus_set] #array of bonusses
#bonus_pieces = actor.bonus_set_pieces #number of pieces
y_pos = Y_position + 6
self.contents.font.size = FontSize
for i in 1...bonus_set.size
y_pos += LineHeight if !(bonus_set[i] <= 0)
self.contents.draw_text(X_position,y_pos,100,LineHeight,print_set_bonus([i,bonus_set[i]])) if !(bonus_set[i] <= 0)
end
end
def print_set_bonus(bonus_set)
case bonus_set[0]
when 1 then word = Vocab::atk
when 2 then word = Vocab::def
when 3 then word = Vocab::spi
when 4 then word = Vocab::agi
when 5 then word = Vocab::hp
when 6 then word = Vocab::mp
when 7 then word = "Critical"
when 8 then word = "Evasion"
end
return word + " " + bonus_set[1].to_s + "%"
end
end
Floor - Sob 25 Cze, 2011 12:28 Wielkie dzięki! Przyda się do mojej gry MrBoomGood - Sob 25 Cze, 2011 12:41 Bardzo fajny skrypt :) Sprawdzałem specjalnie czy działa z rozszerzeniem statusu i działa ;)Angius - Sob 25 Cze, 2011 12:58 Ale z czymś u mnie się żre... Coś ze 120 linijką:
Kod:
if !@bonus_set.empty?
Nie wiem, które skrypty mogą tu się gryźć...PaKiTos - Sob 25 Cze, 2011 19:23 Ma ktoś taki do VX? Bo mi się taki pomysł podoba ;)Angius - Sob 25 Cze, 2011 21:55 Przecież to jest do VX o.OPaKiTos - Pon 27 Cze, 2011 09:02 Ups, pomyliło mi się... Chodziło o XP