UltimaForum

Skrypty [VX] - Bonus Setowy

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:
Spoiler:

Kod:
# Ustawienia rozmiaru i położenia tekstu
FontSize_Header = 20
FontSize = 12
X_position = 150
Y_position = 285
LineHeight = 15

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.O
PaKiTos - Pon 27 Cze, 2011 09:02

Ups, pomyliło mi się... Chodziło o XP :-P

Powered by phpBB modified by Przemo © 2003 phpBB Group