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ć.
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!!
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])
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
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 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 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 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
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 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.
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.
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