Ogłoszenie 

Uwaga! To forum jest w trybie offline.
Wszelką pomoc uzyskasz pod adresem
forum.ultimateam.pl


Administracja Forum


Poprzedni temat «» Następny temat
Frakcje\Gildie
Autor Wiadomość
Shadow 




Preferowany:
RPG Maker VX

Pomógł: 3 razy
Dołączył: 18 Lip 2011
Posty: 24
Skąd: Świnoujście
Wysłany: Pią 27 Sty, 2012 14:39
Frakcje\Gildie
~ Factions ~


Krótki opis:
Skrypt umożliwia nam wprowadzenie do gry różnego rodzaju gildii i frakcji u których zdobywamy reputacje. Jeżeli mam wysoką reputacje np. w Gildii Magów dostaniemy w ich sklepie zniżkę, bądź jeżeli mamy niską reputację u bandytów będziemy częściej z nimi walczyć.

Autor:
SojaBird

Tłumaczenie:
Shadow

Skrypt:
Spoiler:

Kod:
################################################################################
=begin
################################################################################
Name:         Factions (Reborn)

By:           SojaBird
Tłumaczył:    Shadow
Version:      2.0.2.2 (compatible with 'New Menu Items')
Data:         07-06-'09
Site:         http://www.scriptology.co.nr

Opis: 
             Oto Lista głównych funkcji tego skryptu:
              - Zarządzaj frakcjami i ich reputacją z łatwością;
              - Pozwala graczowi spojrzeć w okno reputacji;
              - Tworzyć warunki oparte na reputacji danej frakcji;
              - Walka z przeciwnikami daje reputacje;
              - Zniżki i kary mogą być stosowane w sklepie;
              - Wiadomości pokazują dynamicznie informację o frakcji!!
             
             
             
               
################################################################################
      (\_/)                                                         (\_/)
      (o.o)              PRZECZYTAJ PRZED UŻYCIEM                   (o.o)
      (> <)                                                         (> <)


~~~~~~~~~~~~~~~~~~~~~
~Wywoływanie Skryptu~
~~~~~~~~~~~~~~~~~~~~~

  >>>>>>>>>>>>>>>>>
 Dodawanie Frakcji:
  >>>>>>>>>>>>>>>>>

    add_faction("name", max_value, *start_value, "*help_text", "*pic", *display)
    Ta komenda doda frakcję do gry. Wartości które muszą być tam umieszczone to:
      - name (Nazwa frakcji)
      - max_value (Największa ilośc reputacji jaką może frakcja uzyskać)
      Wartości które mogą być umieszczone;
      - start_value (Reputacja frakcji kiedy została wprowadzona do gry)
      - help_text (Opis frakcji)
        in the menu (Dodaj ## aby przejść do następnej lini))
      - pic (Zdjęcie które pokazuje się w menu)
      - display (Opcja wyświetlania frakcji w menu )

    add_factions(["name", max_value, *start_value, "*help_text", "*pic", *display],[..])
      Spowoduje to dodanie  wielu frakcji do systemu. To działa tak samo jak
      add_faction,tylko żę dodaje więcej frakcji w tym samym czasie.Wartość
      które muszą być w ulotce są takie same jak z add_faction, tylko teraz
      muszą znajdować się w [..] (Przydatne przy dodawaniu więcej niż 1 frakcji).

    delete_faction("name")
    To usunie frakcję z gry o podanej nazwie.
    Wartości które muszą być umieszczone to;
    - name (Nazwa frakcji która ma być usunięta)

    delete_factions("name", "name",..)
    Spowoduje to usunięcie wielu frakcji w tym samym czasie.Wartości muszą być
    takie same jak w  delete_faction (przydatne przy usuwaniu więcej niż 1 frakci).


  >>>>>>>>>>>>>>>>>>>>>>
  Zmiana wartości reputacji:
  >>>>>>>>>>>>>>>>>>>>>>

    set_faction_value("name", value)
      Ustawia wartość reputacji dla frakcji;
      - name (Nazwa frakcji w której zmieni się wartość reputacji)
      - value (Nowa wartość reputacji dla frakcji)

    add_faction_value("name", value)
      To zwiększy wartość reputacji w danej frakcji.
      Wartości które muszą być umieszczone to;
      - name (the name of the faction that gets reputation)
      - value (the value that needs to be add to the faction reputation)

    remove_faction_value("name", value)
      To zmniejszy wartość reputacji w danej frakcji.
      Wartości które muszą być umieszczone to;
      - name (Nazwa frakcji która traci reputację)
      - value (Wartość reputacji jaką straciła frakcja)
     

  >>>>>>>>>>>>>>>>>>>>>>>>>>
  Zmiana max wartości reputacji:
  >>>>>>>>>>>>>>>>>>>>>>>>>>

    set_faction_value_max("name", value)
      To zmieni max wartość reputacji dla danej frakcji.
      Wartości które muszą być umieszczone to;
      - name (Nazwa frakcji w której ulega zmiana max wartości reputacji)
      - value (Wartość max reputacji)

    add_faction_value_max("name", value)
      To doda max wartość reputacji dla danej frakcji.
      Wartości które muszą być umieszczone to;
      - name (nazwa frakcji w której zwiększy się max wartość reputacji)
      - value (wartość o jaką zwiększy się max poziom reputacji)

    remove_faction_value_max("name", value)
      To zmniejszy max wartość reputacji dla danej frakcji.
     Wartości które muszą być umieszczone to;
      - name (nazwa frakcji w której zmniejszy się max wartość reputacji)
      - value (wartość o jaką zmniejszy się max poziom reputacji


  >>>>>>>>>>>>>>>>>>>>>
  Zmiana opisu frakcji:
  >>>>>>>>>>>>>>>>>>>>>

    change_faction_help("name", "text")
      To zmieni opis wybranej frakcji.
      Wartości które muszą być umieszczone to;
      - name (Nazwa frakcji która otrzyma nowy opis)
      - text (Nowy opis frakcji ( "/" przejdzie do 2 lini))

    change_faction_pic("name", "pic")
      To zmieni obraz danej frakcji.
      Wartości które muszą być umieszczone to;
      - name (Nazwa frakcji która otrzyma nowy obraz)
      - pic (Nazwa nowego obrazu)

    set_faction_display("name", display)
    Zmiana wyświetlania frakcji w menu
    Wartości które muszą być umieszczone to;
      - name (Nazwa frakcji która dostanie nowy obraz)
      - display (Sposób wyświetlania w menu)

    toggle_faction_display("name")
      Wartości które muszą być umieszczone to;
      - name (Nazwa frakcji która otrzyma nowy obraz)

~~~~~~~~~     
~Dodatki~
~~~~~~~~~

    F5 in testmode
      Kiedy jesteś w trybie testowym F5 wyświetlą sie frakcje z danym zapisanymi
      w skrypcie.

    faction_rep(["name", value],["name", value],..)
      Możesz to umieścić w notatce przeciwnika w bazie danych.
      Kiedy zabijesz przeciwnika , spadnie albo wzrośnie twój poziom reputacji
      u danej frakcji.
     Wartości które muszą być umieszczone to;
      - name (Nazwa frakcji w której spadnie/wzrośnie poziom reputacji)
      - value (Wartość o jaką spadnie/wzrośnie poziom reputacji)
      !Trzeba to umieścić w nawiasach kwadratowych (["name", value])

    discount "name"
      To może być umieszczone w komentarzu w zdarzeniu. Kiedy zdarzeniu otworzy
      sklep gracz dostanie rabat w wysokości połowy procent reputacji w danej frakcji.
     Wartości które muszą być umieszczone to;
      - name (Nazwa frakcji która daje  rabat)

    ["name", value] #>Encounter Rate
      To może być jedynie umieszczone w "Grupy Przeciwników" w bazie danych.
      W ten sposób jednostki będą się pojawiać jeżeli reputacja w danej frakcji
      jest niższa lub taka sama jak wartość jaką wybrałeś.
     Wartości które muszą być umieszczone to;
      - name (Nazwa frakcji)
      - value (Wartość jaka jest wymagana do wyłączenia spotkań)
      !Trzeba to umieścić w nawiasach kwadratowych (["name", value])

    !["name", value] #>Encounter Rate
      To robi to samo co powyżej,Tylko w odwrotną stronę. Teraz jednostki będą się
      pojawiać jeżeli reputacja jest wyższa w danej frakcji.
     Wartości które muszą być umieszczone to;
      - name (Nazwa frakcji gdzie reputacja ma być niższa)
      - value (Wartość jaka jest wymagana do wyłączenia spotkań)
      !Trzeba to umieścić w nawiasach kwadratowych(!["name", value])


################################################################################
=end
################################################################################
module SojaBird_Factions
####################################
# MODUŁ KONFIGURACJI

  You_Name_It = "Reputacja" #Nazwa wyświetlana w menu.
  Line_Height = 70 #Rozmiar tekstu i pasków (Domyślnie = 19, pokaże 8 frakcji).
  Help_Name = 2 #Add's the faction-name in the descriptionwindow [0="Description", 1="Name: Description", 2="Name"|"Description"].
  Help_Picture = false #Add's the faction-picture to the descriptionwindow [true=Display, false=Don't display].
  Display_Picture = true #Add's the faction-picture to the selectionwindow [true=Display, false=Don't display].
  Empty_Picture = "" #The picture to be shown when no picture is added to the faction-info (put "" for no picture at all).
  Empty_Description = "Brak informacji o frakcji." #Tekst który pojawi się gdy brak informacji o frakcji
  Default_Display = true
 
  Print = true #Sposób wyświetlania tablicy frakcji w trybie testowym F5 [true=Łatwy 1na1, false=surowe dane].
 
  Add_Reset = false #Resetuj frakcję jeżeli została ponownie dodana [true=Tak, false=Nie].
 
  #Aby rozpocząć grę z początkowymi frakcjami,ustaw je tutaj.
  Start_Factions = [ # << NIE EDYTUJ <<
  ["Magowie",1000,100,"Poświęcili się w nauce białej magi.","mage"],
  ["Nekromanci",-1000,-100,"Parają się czarną magią,zgłębiają tajniki śmierci.","necro"]
  ] # << NIE EDYTUJ <<
 
  #Tekst kiedy reputacja wzrosła lub zmalała.
  #!Musisz użyć 2x %s, gdzie pierwsze %s to nazwa frakcji a druga to wartość
  #o jaką reputacja wzrosła lub zmalała.
  Reputation_Gain = "Reputacja u %s wzrosła o %s!"
  Reputation_Loss = "Reputacja u %s zmiejszyła się o %s!"
 
  #Dawaj graczowi zniżki w sklepie danej frakcji kiedy zdobędzie odpowiednią
  # ilość reputacji [true=Tak, false=Nie].
  Shop_Discount = true
  #Tekst gdy postać ma 99 sztuk danego przedmiotu i nie może go więcej zakupić.
    #Rada: Jeżeli wpiszesz '%s' w ciągu ,zostanie zamienione na nazwę przedmiotu .
  Full_Vocab = "Nie możesz więcej kupić"
  #Przykład: Full_Vocab = "Masz wystarczająco %s"
 
  #Zaprzestań ataków danej frakcji kiedy masz odpowiednią reputację [true=Tak, false=Nie].
  Encounter_Rate = true
 
  #Położeni w menu gdy używasz 'New Menu Items'-script
  #(Domyślnie  4 jeżeli nie używasz tego skryptu).
  Menu_Location = 4

# MODUŁ KONFIGURACJI : End
#####################################
end
#####################################
# Wywoływanie Skryptu
  #-----------------------------------#
  # Zmiana Frakcji:
    def add_faction(name,
                    max_value,
                    start_value = 0,
                    help_text = SojaBird_Factions::Empty_Description,
                    pic = SojaBird_Factions::Empty_Picture,
                    display = SojaBird_Factions::Default_Display)
      pic = "" if !FileTest(pic)
      @info = [name, max_value, start_value, help_text, pic, display]
      @info[1] *= -1 if @info[2] < 0
      $game_system.faction_data.each do |data|
        if data[0] == name
          if SojaBird_Factions::Add_Reset
            $game_system.faction_data.delete_at $game_system.faction_data.index(data)
          else; return
          end
        end
      end
      $game_system.faction_data.push @info
      correct_faction_values(@info)
    end
   
    def add_factions(*arg)
      arg.each do |i|
        case i.size
        when 2; add_faction(i[0], i[1])
        when 3; add_faction(i[0], i[1], i[2])
        when 4; add_faction(i[0], i[1], i[2], i[3])
        when 5; add_faction(i[0], i[1], i[2], i[3], i[4])
        when 6; add_faction(i[0], i[1], i[2], i[3], i[4], i[5])
        end
      end
    end
   
    def delete_faction(name)
      $game_system.faction_data.each do |data|
        $game_system.faction_data.delete(data) if data[0] == name
      end
    end
   
    def delete_factions(*arg)
      arg.each do |i|; delete_faction(i)
      end
    end
  # Zmiana Frakcji: Koniec
  #-----------------------------------#
  # Zmiana Wartości
    def set_faction_value(name, value)
      $game_system.faction_data.each do |data|
        if data[0] == name
          data[2] = value
          correct_faction_values(data)
        end
      end
    end
   
    def add_faction_value(name, value)
      $game_system.faction_data.each do |data|
        if data[0] == name
          data[2] += value
          correct_faction_values(data)
        end
      end
    end
   
    def remove_faction_value(name, value)
      $game_system.faction_data.each do |data|
        if data[0] == name
          data[2] -= value
          correct_faction_values(data)
        end
      end
    end
   
    def faction_rep(*arg)
      @arg = []
      arg.each do |i|
        @arg.push i if faction?(i[0])
        add_faction_value(i[0], i[1])
      end
      return @arg
    end
  # Zmiana Wartości: Koniec
  #-----------------------------------#
  # Zmień max wartość
    def set_faction_max(name, value)
      $game_system.faction_data.each do |data|
        if data[0] == name
          data[1] = value
          correct_faction_values(data)
        end
      end
    end
   
    def add_faction_max(name, value)
      $game_system.faction_data.each do |data|
        if data[0] == name
          data[1] += value
          correct_faction_values(data)
        end
      end
    end
   
    def remove_faction_max(name, value)
      $game_system.faction_data.each do |data|
        if data[0] == name
          data[1] -= value
          correct_faction_values(data)
        end
      end
    end
  # Zmień max wartość : Koniec
  #-----------------------------------#
  # Poprawne wartości
    def correct_faction_values(data)
      data[1] *= -1 if (data[2] < 0 and data[1] > 0)
      data[1] *= -1 if (data[2] > 0 and data[1] < 0)
      data[2] = data[1] if (data[2] < 0 and data[2] < data[1])
      data[2] = data[1] if (data[2] > 0 and data[2] > data[1])
    end
  # Poprawne wartości: Koniec
  #-----------------------------------#
  # Dodatkowe zmienne
    def change_faction_help(name, text)
      $game_system.faction_data.each do |data|
        data[3] = text if data[0] == name
      end
    end
   
    def change_faction_pic(name, pic)
      $game_system.faction_data.each do |data|
        data[4] = pic if data[0] == name
      end
    end
   
    # Zmiana wyświetlania
      def set_faction_display(name, display)
        $game_system.faction_data.each do |data|
          data[5] = display if data[0] == name
        end
      end
     
      def toggle_faction_display(name)
        $game_system.faction_data.each do |data|
          data[5] = !data[5] if data[0] == name
        end
      end
    # Zmiana wyświetlania: Koniec
  # Dodatkowe zmienne: Koniec
  #-----------------------------------#
  # Pomoc
    # w trybie testowym, F5 wyświetli tablice frakcji
    def print_faction_data
      if SojaBird_Factions::Print == false; p $game_system.faction_data; else
        index = 0; $game_system.faction_data.each do |i|; index += 1
          p "Position: #{index} | Name: #{i[0]} | Value: #{i[2]}/#{i[1]} | Description: #{i[3]} | Picture: #{i[4]} | Display: #{i[5]}"
      end; end; end
  # Pomoc: Koniec
  #-----------------------------------#

    def faction?(name)
      $game_system.faction_data.each do |data|
        return true if data[0] == name
      end
      return false
    end
    def faction_value?(name, value, shop_only = false)
      $game_system.faction_data.each do |data|
        return (data[2] >= value) if data[0] == name
      end
      return false
    end
   
# Wywoływanie Skryptu: Koniec
#####################################
#-----------------------------------#
#####################################
# Pokaż informacje frakcji
class Window_Factions < Window_Selectable
  include SojaBird_Factions
 
  def initialize(x, y, width, height, start)
    super(x, y, width, height, (2 * Line_Height))
    self.index = 0
    self.contents.font.size = Line_Height
    @max_lines = 304 / (Line_Height * 2)
    @start = start * @max_lines
    self.contents = Bitmap.new(width - 32, (2 * Line_Height) * @max_lines)
    refresh
  end
 
  def refresh
    draw_arrows
    self.contents.clear
    $game_temp.faction_data = []
    $game_system.faction_data.each do |data|
      $game_temp.faction_data.push data if data[5]
    end
    for faction in @start..@max_lines + @start - 1
      if !$game_temp.faction_data[faction].nil?
        @item_max = faction - @start + 1
        data = $game_temp.faction_data[faction]
        x = 0
        y = (faction - @start) * Line_Height * 2
        if Display_Picture == true and data[4] != ""
          draw_picture(x, y, data)
          x += Cache.picture(data[4]).width
        end
        x += self.ox
        draw_bar(x, y, data)
        draw_name(x, y, data)
      end
    end
  end
 
  def draw_arrows
    x = self.contents.rect.x
    x += 1 if @start > 0
    y = self.contents.rect.y
    w = self.contents.rect.width
    w += 2 if @start + @max_lines < $game_temp.faction_data.size
    h = self.contents.rect.height
    self.contents.dispose
    self.contents = Bitmap.new(w, self.height - 32)
    self.ox = x
  end
 
  def draw_picture(x, y, data)
    pic = Cache.picture(data[4])
    height = ((2 * Line_Height) - pic.height) / -2
    rect = Rect.new(0, height, pic.width - 1, Line_Height * 2 - 2)
    self.contents.blt(x + 1, y + 1, pic, rect)
  end
 
  def draw_bar(x, y, data)
    ### Inicjacja ###
      # ~Informacja o rodzicach~
    @value = data[2]
    @value_max = data[1]
      # ~Kolor~
    @back_color = 4
    if @value > 0; color = 11
    elsif @value == 0; color = 4
    elsif @value < 0; color = 4; @back_color = 18
    end
      # ~Szerokość~
    gauge_width = (self.width - 32) * @value / @value_max if @value_max != 0
    gauge_width = 0 if @value_max == 0
    border_width = self.width - 32
      # ~Pozycja~
    @bar_x = 0
    @bar_x = (self.width - 32) - gauge_width if @value < 0
    @bar_y = y + Line_Height
      # ~Wyrównanie~
    if Display_Picture == true and data[4] != ""
      @picture_width = Cache.picture(data[4]).width
      @bar_x += @picture_width
      gauge_width -= @picture_width
      border_width -= @picture_width
    end
    ### Wyświetlanie ###
      # ~Pasek~
    self.contents.fill_rect(x + 1, @bar_y, border_width - 2, Line_Height - 1, text_color(4))
    self.contents.gradient_fill_rect(@bar_x + 1, @bar_y, gauge_width - 2, Line_Height - 1, text_color(@back_color), text_color(color))
      # ~Tekst~
    text_line = "#{@value}/#{@value_max}"
    if Display_Picture == true and data[4] != ""; x -= @picture_width; end
    self.contents.draw_text(x, @bar_y - 2, self.width - 32, Line_Height, text_line, 1)
  end
 
  def draw_name(x, y, data)
    name = data[0]
    self.contents.draw_text(x, y, self.width - 32, Line_Height, name)
  end
 
  def update_cursor
    self.cursor_rect.empty if @index < 0
    self.cursor_rect.set(0, @index * (Line_Height * 2), self.width - 32, Line_Height * 2)
  end
 
  def update_help
    if $game_system.faction_data != []
      @description = $game_temp.faction_data[self.index + @start]
      text = ""
      text += @description[0] + ": " if Help_Name == 1
      text += @description[0] + "##" if Help_Name == 2
      text += @description[3]
      text.gsub!(/\n/, "")
      @help_window.set_text(text, 0, 4, @description[4]) if $game_temp.faction_data != []
    end
  end
end
# Pokaż informacje frakcji: Koniec
#####################################
#-----------------------------------#
#####################################
class Game_System
  alias factions_initialize initialize
  attr_accessor :faction_data
 
  def initialize
    factions_initialize
    @faction_data = []
    SojaBird_Factions::Start_Factions.each do |i|
      i.push 0 if i.size < 3
      i.push SojaBird_Factions::Empty_Description if i.size < 4
      i.push SojaBird_Factions::Empty_Picture if i.size < 5
      i.push SojaBird_Factions::Default_Display if i.size < 6
      i[4] = "" if !FileTest(i[4])
      @faction_data.push i
    end
  end
end
#####################################
#-----------------------------------#
#####################################
class Game_Temp
  alias factions_initialize initialize
  attr_accessor :faction_data
 
  def initialize
    factions_initialize
    @faction_data = []
  end
end
#####################################
#-----------------------------------#
#####################################
class Scene_Factions < Scene_Base
  def initialize(fac_list = 0)
    @fac_list = fac_list
    @max_lines = 304 / (SojaBird_Factions::Line_Height * 2)
  end
 
  def start
    super
    create_menu_background
    create_factions_windows
  end
 
  def create_factions_windows
    @faction_window = Window_Factions.new(0, 2*24+32, 544, 360-24, @fac_list)
    @help_window = Window_Help_Factions.new(0, 0, 544, 2*24+32)
    @faction_window.help_window = @help_window
  end
 
  def terminate
    super
    dispose_menu_background
    dispose_factions_windows
  end
 
  def dispose_factions_windows
    @faction_window.dispose
    @help_window.dispose
  end
 
  def update
    super
    update_menu_background
    update_factions_stuff
    update_factions_input
  end
 
  def update_factions_stuff
    @faction_window.update
    @help_window.update
  end
 
  def update_factions_input
    if Input.trigger?(Input::B)
      Sound.play_cancel
      begin; return_scene(SojaBird_Factions::You_Name_It)
      rescue; $scene = Scene_Menu.new(4)
      end
    elsif Input.trigger?(Input::R) or Input.trigger?(Input::RIGHT)
      if (@fac_list + 1) * @max_lines < $game_system.faction_data.size
        Sound.play_cursor
        next_fac_list
      else; Sound.play_buzzer
      end
    elsif Input.trigger?(Input::L) or Input.trigger?(Input::LEFT)
      if @fac_list > 0
        Sound.play_cursor
        prev_fac_list
      else; Sound.play_buzzer
      end
    end
  end
 
  def next_fac_list
    @fac_list += 1
    $scene = Scene_Factions.new(@fac_list)
  end
 
  def prev_fac_list
    @fac_list -= 1
    $scene = Scene_Factions.new(@fac_list)
  end
end
#####################################
#-----------------------------------#
# !! New Menu Items
#-----------------------------------#
begin
  $Menu_Items.new(SojaBird_Factions::Menu_Location, SojaBird_Factions::You_Name_It, false, "$scene = Scene_Factions.new")
rescue
#####################################
# Dodaje nową opcję w menu
class Scene_Menu < Scene_Base
  def create_command_window
    s1 = Vocab::item
    s2 = Vocab::skill
    s3 = Vocab::equip
    s4 = Vocab::status
    s5 = SojaBird_Factions::You_Name_It
    s6 = Vocab::save
    s7 = Vocab::game_end
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
    @command_window.index = @menu_index
    if $game_party.members.size == 0          # Jeżeli ilość członków drużyny = 0
      @command_window.draw_item(0, false)     # Wyłącz Przedmioty
      @command_window.draw_item(1, false)     # Wyłącz Umiejętności
      @command_window.draw_item(2, false)     # Wyłącz Ekwipunek
      @command_window.draw_item(3, false)     # Wyłącz Status
    end
    if $game_system.save_disabled             # Jeżeli zapis jest zablokowany
      @command_window.draw_item(5, false)     # Wyłącz Zapis
    end
  end
 
  def update_command_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::C)
      if $game_party.members.size == 0 and @command_window.index < 4
        Sound.play_buzzer
        return
      elsif $game_system.save_disabled and @command_window.index == 5
        Sound.play_buzzer
        return
      end
      Sound.play_decision
      case @command_window.index
      when 0;     $scene = Scene_Item.new                     # Przedmioty
      when 1,2,3; start_actor_selection                       # Umiejętności, Ekwipunek, Status
      when 4;     $scene = Scene_Factions.new                 # Menu Frakcji
      when 5;     $scene = Scene_File.new(true, false, false) # Zapis
      when 6;     $scene = Scene_End.new                      # Koniec Gry
      end
    end
  end
end
#####################################
#-----------------------------------#
#####################################
class Scene_File < Scene_Base
  def return_scene
    if @from_title; $scene = Scene_Title.new
    elsif @from_event; $scene = Scene_Map.new
    else; $scene = Scene_Menu.new(5)
    end
  end
end
#####################################
#-----------------------------------#
# !! New Menu Items: End
end
#-----------------------------------#
#####################################
class Scene_Map < Scene_Base
  alias factions_update update
 
  def update
    factions_update
    print_faction_data if ($TEST and Input.trigger?(Input::F5))
  end
end
#####################################
#-----------------------------------#
#####################################
class Window_Help_Factions < Window_Base
  def initialize(x = 0, y = 0, width= 544, height = WLH + 32)
    super(x, y, width, height)
  end
 
  def set_text(text, align = 0, x = 4, pic = "")
    if text != @text or align != @align or x != @x or pic != @pic
      self.contents.clear
      self.contents.font.color = normal_color
      rect = Rect.new(0, 0, Cache.picture(pic).width, 52)
      if SojaBird_Factions::Help_Picture == true and pic != ""
        y = 26 - (Cache.picture(pic).height / 2)
        self.contents.blt(0, y, Cache.picture(pic), rect)
        x += Cache.picture(pic).width
      end
      text = text.split(/\##/)
      for string in 0..text.size - 1
        self.contents.draw_text(x, string * WLH, self.width - 40, WLH, text.shift, align)
      end
      @text = text; @align = align; @x = x; @pic = pic
    end
  end
end
#####################################
#-----------------------------------#
#####################################
def faction(name, value)
  $game_system.faction_data.each do |data|; if data[0] == name
    case value
    when "mval";  return data[1]
    when "val";   return data[2]
    when "value"; return "#{data[2]}/#{data[1]}"
    when "info";  return data[3]
    when "all";   return "#{data[0]}: #{data[2]}/#{data[1]}.\x00#{data[3]}"
    when "shop"
      return "#{(((data[2]*100)/data[1].to_f)/2).ceil}%" if data[2] >= 0
      return "#{(((data[2]*100)/data[1].to_f)/2).floor}%" if data[2] < 0
    end
  end; end
  return ""
end
#####################################
#-----------------------------------#
#####################################
class Window_Message < Window_Selectable
  alias factions_convert_special_characters convert_special_characters
 
  def convert_special_characters
    factions_convert_special_characters
    @text.gsub!(/\\FAC\[(.*?)\]/i)  { "\x99[#{$1}]" }
    @text.gsub!(/\\FI\[(.*?)\]/i)   { eval($1) }
  end
 
  def update_message
    loop do
      c = @text.slice!(/./m)
      case c
      when nil
        finish_message
        break
      when "\x00"
        new_line
        if @line_count >= MAX_LINE
          unless @text.empty?
            self.pause = true
            break
          end
        end
      when "\x01"
        @text.sub!(/\[([0-9]+)\]/, "")
        contents.font.color = text_color($1.to_i)
        next
      when "\x02"
        @gold_window.refresh
        @gold_window.open
      when "\x03"
        @wait_count = 15
        break
      when "\x04"
        @wait_count = 60
        break
      when "\x05"
        self.pause = true
        break
      when "\x06"
        @line_show_fast = true
      when "\x07"
        @line_show_fast = false
      when "\x08"
        @pause_skip = true
      when "\x99"
        @text.sub!(/\[(.*?)\]/, "")
        $game_system.faction_data.each do |data|
          @text.insert(0, data[2].to_s) if data[0] == $1
        end
      else
        contents.draw_text(@contents_x, @contents_y, 40, WLH, c)
        c_width = contents.text_size(c).width
        @contents_x += c_width
      end
      break unless @show_fast or @line_show_fast
    end
  end
end

#####################################
#-----------------------------------#
#####################################
class Game_Enemy < Game_Battler
  alias factions_initialize initialize
  attr_reader :note
 
  def initialize(index, enemy_id)
    factions_initialize(index, enemy_id)
    @note = enemy.note
  end
end
#####################################
#-----------------------------------#
#####################################
class Scene_Battle < Scene_Base
  alias factions_battle_end battle_end
 
  def battle_end(result)
    display_reputation if result == 0
    factions_battle_end(result)
  end
 
  def display_reputation
    @args = []
    $game_troop.members.each do |a|
      if a.note.include?("faction_rep")
        eval(a.note)
        @args.push @arg
      else; return wait_for_message
      end
    end
    @name = []
    @rep = []
    @args.each do |b|
      b.each do |c|
        if not @name.include?(c[0])
          @name.push c[0]
          @rep.push c[1]
        else; @rep[@name.index(c[0])] += c[1]
        end
      end
    end
    for d in 0..[(@name.size - 1), (@rep.size - 1)].min
      text = sprintf(SojaBird_Factions::Reputation_Gain, @name[d], @rep[d]) if @rep[d] > 0
      text = sprintf(SojaBird_Factions::Reputation_Loss, @name[d], -@rep[d]) if @rep[d] < 0
      $game_message.texts.push('\.' + text) if !text.nil?
    end
    wait_for_message
  end
end
#####################################
#-----------------------------------#
#####################################
def FileTest(file)
  @type = [".jpg", ".jpeg", ".png"]
  @type.each do |i|
    return true if FileTest.exist?("Graphics/Pictures/#{file}#{i}")
  end
  return false
end
#####################################
#-----------------------------------#
#####################################
class Game_Interpreter
  def list
    return @list
  end
end
#####################################
#-----------------------------------#
#####################################
def faction_discount(shop = "price")
  @value = 0
  $game_map.interpreter.list.each do |a|
    if a.code == 108
      $game_system.faction_data.each do |b|
        if a.parameters[0].include?(b[0]) and a.parameters[0].include?("discount")
          case shop
          when "price"
            @value = b[2].to_f / b[1]
            @value *= -1 if b[2] < 0
          when "shop"; @value = b[0]
          end
          break
        end
      end
    end
  end
  return @value
end
#####################################
#-----------------------------------#
#####################################
def check_name(name, first = '"', second = '"')
  @name = name
  return if !(@name.include?(first) or @name.include?(second))
  @pos1 = @name.index(first) + 1
  @pos2 = @name.index(second, @pos1 + 1)
  @length = @pos2 - @pos1
  @final = @name.slice(@pos1, @length)
  return @final
end
#####################################
#-----------------------------------#
#####################################
def check_value(value)
  @numbers = value.scan(/\d/).to_s
  minus = ""
  for a in 0..@numbers.length - 1
    minus.insert(0, "\\d")
  end
  @numbers.insert(0, "-") if value.scan(/-#{minus}/) != []
  return @numbers.to_i
end
#####################################
#-----------------------------------#
if SojaBird_Factions::Shop_Discount

#-----------------------------------#
#####################################

class Scene_Shop < Scene_Base
  alias factions_start start
  alias factions_terminate terminate
  alias factions_update update
 
  def start
    factions_start
    @shop = faction_discount("shop")
    #Zniżka
    @discount = faction_discount
    @discount_window = Window_ShopDiscount.new
    @help_window.width -= @discount_window.width
    rect = @help_window.contents.rect
    rect.width -= @discount_window.width
    @help_window.contents = Bitmap.new(rect.width, rect.height)
    #Wyłącz
    @disable_help = Window_DisableHelp.new
    @disable_help.visible = false
    @buy_window.disable_help = @disable_help
    @buy_window.height -= @disable_help.height
    rect2 = @buy_window.contents.rect
    rect2.height -= @disable_help.height
    @buy_window.contents = Bitmap.new(rect2.width, rect2.height)
  end
 
  def terminate
    factions_terminate
    @discount_window.dispose
    @disable_help.dispose
  end
 
  def update
    factions_update
    @disable_help.visible = @buy_window.visible if @disable_help.visible != @buy_window.visible
  end
 
  def update_buy_selection
    @status_window.item = @buy_window.item
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @command_window.active = true
      @dummy_window.visible = true
      @buy_window.active = false
      @buy_window.visible = false
      @status_window.visible = false
      @status_window.item = nil
      @help_window.set_text("")
      return
    end
    if Input.trigger?(Input::C)
      @item = @buy_window.item
      number = $game_party.item_number(@item)
      @price = @item.price - ((@item.price * @discount) / 2).floor
      if @item != nil
        case @item
        when RPG::Item; @note = $data_items[@item.id].note
        when RPG::Weapon; @note = $data_weapons[@item.id].note
        when RPG::Armor; @note = $data_armors[@item.id].note
        end
        if @note.include?("faction_value?")
          if @note.include?("true")
            if @note.include?(@shop)
              enabled = eval(@note)
            else; enabled = true
            end
          else; enabled = eval(@note)
          end
        else; enabled = true
        end
      end
      if @item == nil or @price > $game_party.gold or number == 99 or !enabled
        Sound.play_buzzer
      else
        Sound.play_decision
        max = @price == 0 ? 99 : $game_party.gold / @price
        max = [max, 99 - number].min
        @buy_window.active = false
        @buy_window.visible = false
        @number_window.set(@item, max, @price)
        @number_window.active = true
        @number_window.visible = true
      end
    end
  end
 
  def update_sell_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @command_window.active = true
      @dummy_window.visible = true
      @sell_window.active = false
      @sell_window.visible = false
      @status_window.item = nil
      @help_window.set_text("")
    elsif Input.trigger?(Input::C)
      @item = @sell_window.item
      @status_window.item = @item
      if @item.nil?; @price = 0
      else; @price = (@item.price - ((@item.price * @discount) / 2).floor)
      end
      if @item == nil or @price == 0
        Sound.play_buzzer
      else
        Sound.play_decision
        max = $game_party.item_number(@item)
        @sell_window.active = false
        @sell_window.visible = false
        @divider = (@price - @item.price) / @item.price.to_f
        @divider = 0 if @divider.nan?
        @price /= @divider + 2
        @price = @price.floor
        @number_window.set(@item, max, @price)
        @number_window.active = true
        @number_window.visible = true
        @status_window.visible = true
      end
    end
  end
 
  def decide_number_input
    Sound.play_shop
    @number_window.active = false
    @number_window.visible = false
    case @command_window.index
    when 0  # Zakup
      $game_party.lose_gold(@number_window.number * @price)
      $game_party.gain_item(@item, @number_window.number)
      @gold_window.refresh
      @buy_window.refresh
      @status_window.refresh
      @buy_window.active = true
      @buy_window.visible = true
      @disable_help = Window_DisableHelp.new
      @buy_window.disable_help = @disable_help
    when 1  # Sprzedaż
      $game_party.gain_gold(@number_window.number * @price)
      $game_party.lose_item(@item, @number_window.number)
      @gold_window.refresh
      @sell_window.refresh
      @status_window.refresh
      @sell_window.active = true
      @sell_window.visible = true
      @status_window.visible = false
    end
  end
end
#####################################
#-----------------------------------#
#####################################
class Window_ShopBuy < Window_Selectable
  def draw_item(index)
    @discount = faction_discount
    @shop = faction_discount("shop")
    item = @data[index]
    @price = item.price - ((item.price * @discount) / 2).floor
    number = $game_party.item_number(item)
    enabled = (@price <= $game_party.gold and number < 99)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    shopbuy_draw_item_name(item, rect.x, rect.y, enabled, @shop)
    rect.width -= 4
    self.contents.draw_text(rect, @price, 2)
  end
 
  def update_disable
    @disable_help.set_text(item == nil ? "" : disable(item))
  end
 
  def disable(item)
    number = $game_party.item_number(item)
    @shop = faction_discount("shop")
    @name = check_name(item.note) if item.note != ""
    price = item.price - ((item.price * @discount) / 2).floor
    if item.note.include?("true")
      this_shop_only = (@shop == @name)
    else; this_shop_only = true
    end
    if this_shop_only
      @amount = item.note.scan(/\d/).to_s
      if @amount == ""
        @amount = Vocab::gold
        @name = price
      else
        minus = ""
        for a in 0..@amount.length - 1
          minus.insert(0, "\\d")
        end
        @amount.insert(0, "-") if item.note.scan(/-#{minus}/) != []
      end
    else
      @amount = Vocab::gold
      @name = price
    end
    if @amount != Vocab::gold
      if faction_value?(@name, @amount.to_i) and price - $game_party.gold > 0
        @amount = Vocab::gold
        @name = price
      end
    end
    if number >= 99
      @amount = nil
      @name = SojaBird_Factions::Full_Vocab
      @name = sprintf(SojaBird_Factions::Full_Vocab, item.name) if @name.include?("%s")
    end
    return [@name, @amount]
  end
end
#####################################
#-----------------------------------#
#####################################
class Window_ShopSell < Window_Item
  def enable?(item)
    @discount = faction_discount
    @price = item.price - ((item.price * @discount) / 2).floor
    return (@price > 0)
  end
end
#####################################
#-----------------------------------#
#####################################
class Window_ShopDiscount < Window_Base
  def initialize
    super(544 - 160, 0, 160, WLH + 32)
    refresh
  end
 
  def discount
    @discount = faction_discount
    text = ((100 * @discount) / 2).ceil
    return ["#{-text}% penalty", power_down_color] if text < 0
    return ["#{text}% discount", power_up_color] if text > 0
    return ["Normal prices", normal_color] if text == 0
  end
 
  def refresh
    self.contents.clear
    self.contents.font.color = discount[1]
    self.contents.draw_text(0, 0, self.contents.width, WLH, discount[0], 1)
  end
end
#####################################
#-----------------------------------#
#####################################
class Window_Base < Window
  def shopbuy_draw_item_name(item, x, y, enabled, shop = nil)
    if item != nil
      case item
      when RPG::Item; @note = $data_items[item.id].note
      when RPG::Weapon; @note = $data_weapons[item.id].note
      when RPG::Armor; @note = $data_armors[item.id].note
      end
      if @note.include?("faction_value?") and enabled
        if @note.include?("true")
          enabled = eval(@note) if @note.include?(shop)
        else; enabled = eval(@note)
        end
      end
    end
    draw_item_name(item, x, y, enabled)
  end
end
#####################################
#-----------------------------------#
#####################################
class Window_Selectable < Window_Base
  alias factions_call_update_help call_update_help
  attr_reader :disable_help
 
  def call_update_help
    call_update_disable
    factions_call_update_help
  end
 
  def disable_help=(disable_help)
    @disable_help = disable_help
    call_update_disable
  end
 
  def call_update_disable
    update_disable if (self.active and @disable_help != nil)
  end
 
  def update_disable
  end
end
#####################################
#-----------------------------------#
#####################################
class Window_DisableHelp < Window_Base
  def initialize
    super(0, 416 - 56, 304, WLH + 32)
  end
 
  def set_text(item)
    if item[0] != @name or item[1] != @amount
      self.contents.clear
      self.contents.font.color = system_color
      self.contents.draw_text(4, 0, self.width - 40, WLH, "Requires:")
      enabled = enabled_check(item[0], item[1])
      if item[1] == Vocab::gold
        item[0] -= $game_party.gold if !enabled
        self.contents.font.color = enabled ? power_up_color : power_down_color
        self.contents.draw_text(90, 0, self.width - 194, WLH, item[0])
        self.contents.font.color = normal_color
        self.contents.draw_text(200, 0, self.width - 244, WLH, item[1], 2)
      elsif item[1].nil?
        self.contents.font.color = enabled ? power_up_color : power_down_color
        self.contents.draw_text(90, 0, self.width - 122, WLH, item[0], 1)
      else
        self.contents.font.color = normal_color
        self.contents.draw_text(90, 0, self.width - 194, WLH, item[0])
        self.contents.font.color = enabled ? power_up_color : power_down_color
        self.contents.draw_text(200, 0, self.width - 244, WLH, item[1], 2)
      end
      @name = item[0]
      @amount = item[1]
    end
  end
 
  def enabled_check(name, amount)
    if amount == Vocab::gold; return (name <= $game_party.gold)
    elsif amount.nil?; return false
    else; return faction_value?(name, amount.to_i)
    end
  end
end


#####################################
#-----------------------------------#
end
#-----------------------------------#
#####################################
#-----------------------------------#
if SojaBird_Factions::Encounter_Rate
#-----------------------------------#
#####################################
class Game_Player < Game_Character
  def make_encounter_troop_id
    encounter_list = $game_map.encounter_list.clone
    for area in $data_areas.values
      encounter_list += area.encounter_list if in_area?(area)
    end
    if encounter_list.empty?
      make_encounter_count
      return 0
    end
    faction_encounter_rate(encounter_list)
    encounter = encounter_list[rand(encounter_list.size)]
    return encounter
  end
 
  def faction_encounter_rate(encounter_list)
    encounter_list.each do |a|
      encounter_list.delete(a) if remove?($data_troops[a].name)
    end
  end
 
  def remove?(name)
    if name.include?("[") and name.include?("]")
      if name.include?("!")
        return !faction_value?(check_name(name), check_value(check_name(name, ",", "]")))
      else; return faction_value?(check_name(name), check_value(name))
      end
    end
    return false
  end
end

#####################################
#-----------------------------------#
end
#-----------------------------------#
#####################################


Screeny:
Spoiler:




Dodatkowe informacje:
Grafika nie jest wymagana by skrypt działał poprawnie ,jest to jedynie element upiększający.
________________________
Odnajdź siebie, a znajdziesz prawdziwą siłę do walki z przeciwnościami losu.
 
 
Valdali 




Preferowany:
RPG Maker VXAce

Ranga RM:
1 gra

Pomógł: 20 razy
Dołączył: 19 Mar 2010
Posty: 421
Skąd: Reykjavik
Wysłany: Pią 27 Sty, 2012 14:59
a dasz jeszzce raz screena? bo mi nie wyswietla ;-)
________________________
Moje anime w RPG Makerze. Zapraszam!
ZOBACZ :!: :!: :!:
Spoiler:

Moimi Mistrzami i Wielkimi Nauczycielami są: Melvin i Angius!

Dziennik Krejzolów:
Ayene
Angius
Melvin
Yoroiookami
CrasheR
Finwe

Moi ziomale :D

 
 
 
 
Shadow 




Preferowany:
RPG Maker VX

Pomógł: 3 razy
Dołączył: 18 Lip 2011
Posty: 24
Skąd: Świnoujście
Wysłany: Pią 27 Sty, 2012 15:15
Proszę oto screen'y:
LINK 1 LINK 2
________________________
Odnajdź siebie, a znajdziesz prawdziwą siłę do walki z przeciwnościami losu.
 
 
Abercjusz 




Preferowany:
RPG Maker XP

Pomógł: 1 raz
Dołączył: 30 Paź 2011
Posty: 89
Skąd: Aeitlan
Wysłany: Pią 27 Sty, 2012 16:52
Czy mógłby ktoś wyjaśnić to dokładniej?
Ten skrypt jest prooo ale konfiguracja sprawia mi niemałe problemy ;-(
________________________
~Aktualne Projekty Wiecznoproblemoultimowicza;)~
Telheranei
:elf: :paladyn: :ork:
 
 
MrBoomGood 




Preferowany:
RPG Maker VX

Pomógł: 3 razy
Dołączył: 07 Kwi 2011
Posty: 292
Skąd: Katowice
Wysłany: Sob 28 Sty, 2012 14:47
Zarąbisty skrypt, szkoda że nie pasuje do mojego projektu ;/
 
 
 
kamokeg 



Preferowany:
RPG Maker VXAce

Dołączył: 04 Lut 2012
Posty: 43
Skąd: Włocławek
Wysłany: Sob 04 Lut, 2012 17:03
wiem ze to głupie pytanie, ale gdzie wstawiamy kod na nową frakcję??
________________________
 
 
Shadow 




Preferowany:
RPG Maker VX

Pomógł: 3 razy
Dołączył: 18 Lip 2011
Posty: 24
Skąd: Świnoujście
Wysłany: Sob 04 Lut, 2012 18:09
Jeżeli te frakcje mają być dostępne od samego początku to w skrypcie znajdź linijkę w Module Konfiguracji .
Spoiler:

Start_Factions = [ # << NIE EDYTUJ <<
["Magowie",1000,100,"Poświęcili się w nauce białej magi.","mage"],
["Nekromanci",-1000,-100,"Parają się czarną magią,zgłębiają tajniki śmierci.","necro"]


i dopisz swoją frakcję .

Natomiast jeżeli w późniejszym etapie gry mają pojawić się nowe frakcje to w zdarzeniu
wybierz komendę "Wywołaj Skrypt" i wpisz:
Spoiler:


add_faction("Nazwa"," max reputacja","startowa reputacja", "opis", "nazwa obrazka", "widoczność")

________________________
Odnajdź siebie, a znajdziesz prawdziwą siłę do walki z przeciwnościami losu.
 
 
kamokeg 



Preferowany:
RPG Maker VXAce

Dołączył: 04 Lut 2012
Posty: 43
Skąd: Włocławek
Wysłany: Czw 05 Kwi, 2012 01:28
Mam jeszcze jedno pytanie jakiej optymalnej wielkości zrobić graficzki?
________________________
 
 
Abercjusz 




Preferowany:
RPG Maker XP

Pomógł: 1 raz
Dołączył: 30 Paź 2011
Posty: 89
Skąd: Aeitlan
Wysłany: Nie 08 Kwi, 2012 17:54
Ok już umiem konfigurować , ale dodałem swoją frakcję (Start Factions) i ona się nie pokazuje!
________________________
~Aktualne Projekty Wiecznoproblemoultimowicza;)~
Telheranei
:elf: :paladyn: :ork:
 
 
Shadow 




Preferowany:
RPG Maker VX

Pomógł: 3 razy
Dołączył: 18 Lip 2011
Posty: 24
Skąd: Świnoujście
Wysłany: Wto 10 Kwi, 2012 10:38
Nie wyświetla ci się frakcja , ponieważ masz za szerokie paski , zmień wartość na domyślną (jest to 19) w linijce 185. Powinno działać.
________________________
Odnajdź siebie, a znajdziesz prawdziwą siłę do walki z przeciwnościami losu.
 
 
Abercjusz 




Preferowany:
RPG Maker XP

Pomógł: 1 raz
Dołączył: 30 Paź 2011
Posty: 89
Skąd: Aeitlan
Wysłany: Sob 28 Kwi, 2012 13:27
Dzięki ci!
________________________
~Aktualne Projekty Wiecznoproblemoultimowicza;)~
Telheranei
:elf: :paladyn: :ork:
 
 
Namatsarut 



Preferowany:
RPG Maker VX

Dołączył: 22 Cze 2012
Posty: 10
Wysłany: Nie 08 Lip, 2012 22:26
Jest błąd w 2 linijce, jak go naprawić?
________________________


Nie bądż lama, pomóż.
http://r14.bloodwars.interia.pl/r.php?r=82089
Kliknij i zostań honorowym wampirem.
 
 
Nhadala 




Pomogła: 12 razy
Dołączyła: 18 Wrz 2007
Posty: 197
Skąd: Klam
Wysłany: Pon 09 Lip, 2012 07:00
Zapodaj obrazkiem błędu, ktoś pomoże.
________________________

 
 
 
 
Namatsarut 



Preferowany:
RPG Maker VX

Dołączył: 22 Cze 2012
Posty: 10
Wysłany: Pon 09 Lip, 2012 10:51
http://www.fotosik.pl/pok...3565bdf6a9.html

Dobra działa, gra się włącza musiałem tylko usunąć spacje przed =begin i =end.


Ps: jak sprawdzić jaką mam reputację u jakiejś frakcji? Jak dodać punkty reputacji do frakcji?
________________________


Nie bądż lama, pomóż.
http://r14.bloodwars.interia.pl/r.php?r=82089
Kliknij i zostań honorowym wampirem.
 
 
Jakub/Bedzio 



Dołączył: 31 Sie 2012
Posty: 5
Wysłany: Nie 02 Wrz, 2012 11:09
Skrypt niestety nie działa z dziennikiem misji, zastępuję opcje "misje". :x
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group | Template Klam by Ayene