Ogłoszenie
Administracja Forum
Wybór postaci [XP]
Autor
Wiadomość
Ayene
Ranga RM:
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Pią 15 Lip, 2011 11:48
Wybór postaci [XP]
~ Wybór postaci [XP] ~
Krótki opis
Skrypt pozwala na wybór postaci na początku gry. Może mieć również zastosowanie przy wyborze więcej niż jednego bohatera (maksymalnie tyle, ile może liczyć drużyna).
Wystarczy na początku gry wywołać za pomocą polecenia "Script" w zdarzeniu:
Kod: $scene = Scene_Character_Select.new
Jeśli chcesz, aby okno wyboru pojawiło się od razu po wyborze nowej gry:
Spoiler:
Wejdź w klasę 'Scene_Title' i znajdź:
Kod: $scene = Scene_Map.new
zamień na:
Kod: $scene = Scene_Character_Select.new
Pamiętaj, aby w konfiguracji skryptu ustawić:
Kod: NEXT_SCENE = Scene_Map # kolejna scena
Autor skryptu
Ayene [yurika@o2.pl]
Kompatybilność
Tylko XP
Skrypt
Spoiler:
Kod: #==============================================================================
# Wybór postaci [XP]
# by Ayene
# 15.07.2011 ver 2.0
# www.ultimateam.pl
#==============================================================================
# Opis:
# Skrypt pozwala na wybór postaci na początku gry. Może mieć również
# zastosowanie przy wyborze więcej niż jednego bohatera (maksymalnie tyle,
# ile może liczyć drużyna).
#==============================================================================
# Instrukcja:
#==============================================================================
# Na początku gry wywołaj za pomocą polecenia "Script" w zdarzeniu:
# $scene = Scene_Character_Select.new
#
#==============================================================================
# Konfiguracja:
#==============================================================================
module AYENE
module Character_Select
# Ustawienia czcionki
FONT_NAME = 'Comic Sans MS' # nazwa czcionki (folder Fonts)
FONT_SIZE = 26 # rozmiar czcionki
FONT_BOLD = false # pogrubienie
FONT_ITALIC = false # kursywa
FONT_COLOR = Color.new(255, 255, 255, 255) # kolor tekstu
FONT_OUTLINE = true # obwódka? (true/false)
FONT_OUTLINE_COLOR = Color.new(0, 0, 0, 255) # kolor obwódki tekstu
FONT_SHADOW = true # cień? (true/false)
FONT_SHADOW_COLOR = Color.new(0, 0, 0, 100) # kolor cienia
WLH = 32 # interlinia
# Ustawienia tła obrazkowego (folder Graphics/Pitures)
BACKGROUND_IMAGE = '' # nazwa tła; '' wyłącza tło
BACKGROUND_OPACTIY = 255 # przezroczystość tła
# Ustawienia okna (folder Graphics/Windowskins)
WINDOW = '' # nazwa pliku; '' domyślne okno
WINDOW_OPACTIY = 255 # przezroczystość okna
WINDOW_HELP_TEXT = 'Wybierz bohatera'
# Ustawienia muzyki w tle
STAGE_BGM = '' # nazwa pliku z muzyką (folder Audio/BGM)
STAGE_BGM_VOLUME = 100 # głośność
# Ustawienia postaci
CHAR_IDS = [1, 5, 4, 2, 3, 6, 7, 8] # ID postaci do wyboru
# Obrazek bohatera. By go wyświetlić należy w folderze Graphics/Pictures
# umieścić plik o nazwie "Face_ID", gdzie zamiast ID należy podać id postaci,
# np. "Face_2" to obrazek bohatera o ID 2.
CHAR_FACE = true # obrazek bohatera? (true/false)
# Ustawienia statystyk i ich pasków
# Maksymalna wartość pasków wynosi tyle, ile największa wartość danej
# statystyki u wszystkich postaci do wyboru. Innymi słowy, skrypt porównuje
# wielkość danej statystyki u postaci, następnie wyłania najwyższą.
CHAR_PARAMS = [ :hp, :sp, :str, :dex, :agi, :int ] # nazwy statystyk po przecinku
CHAR_PARAMS_BAR = { # :par => "nazwa", color1, color2
:hp => ["Życie", Color.new(0, 100, 17, 255), Color.new(0, 223, 37, 255)],
:sp => ["Mana", Color.new(0, 60, 95, 255), Color.new(0, 142, 223, 255)],
:str => ["Siła", Color.new(140, 20, 20, 255), Color.new(230, 34, 34, 255)],
:dex => ["Celność", Color.new(124, 38, 132, 255), Color.new(209, 62, 222, 255)],
:agi => ["Szybkość", Color.new(142, 134, 12, 255), Color.new(228, 219, 71, 255)],
:int => ["Inteligencja", Color.new(33, 143, 136, 255), Color.new(68,224, 215, 255)],
}
BAR_WIDTH = 150 # Szerokość pasków
COLMUNS = 3 # Liczba kolumn
NEXT_SCENE = Scene_Map # kolejna scena
PREVIOUS_SCENE = Scene_Title # poprzednia scena
MAX_MEMBER = 3 # maksymalna liczba bohaterów w drużynie
DELCHAR_SWITCH = 4 # przełącznik włączający usuwanie bohaterów z drużyny
end
end
#==============================================================================
# ** Game_Party
#==============================================================================
class Game_Party
attr_accessor :actors # actors
end
#==============================================================================
# ** Scene_Character_Select
#==============================================================================
class Scene_Character_Select
include AYENE::Character_Select
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
start
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
terminate
end
#--------------------------------------------------------------------------
# * Start processing
#--------------------------------------------------------------------------
def start
@actor_id = 0
if STAGE_BGM != ''
Audio.bgm_play("Audio/BGM/" + STAGE_BGM, STAGE_BGM_VOLUME, 100)
end
if BACKGROUND_IMAGE != ''
@background = Sprite.new
@background.bitmap = RPG::Cache.picture(BACKGROUND_IMAGE)
@background.opacity = BACKGROUND_OPACTIY
end
@window_command = Window_Command_Select.new
@window_help = Window_Char_Select_Help.new
end
#--------------------------------------------------------------------------
# * Termination Processing
#--------------------------------------------------------------------------
def terminate
@window_command.dispose
@window_help.dispose
unless @background.nil?
@background.bitmap.dispose
@background.dispose
end
Audio.bgm_fade(1500) if STAGE_BGM != ''
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
@window_command.update
@window_help.update
if Input.trigger?(Input::C)
determine_character
$game_party.actors = [] if $game_switches[DELCHAR_SWITCH]
if $game_party.actors.size < MAX_MEMBER
$game_party.add_actor(@actor_id)
$game_system.se_play($data_system.decision_se)
$scene = eval("#{NEXT_SCENE}.new")
else
$game_system.se_play($data_system.buzzer_se)
end
return
elsif Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = eval("#{PREVIOUS_SCENE}.new")
return
end
end
#--------------------------------------------------------------------------
# * Determine Character
#--------------------------------------------------------------------------
def determine_character
actor_index = @window_command.index
data = []
CHAR_IDS.each {|i| data.push(i) if !$game_party.actors.include?($game_actors[i])}
@actor_id = data[actor_index]
end
end
#==============================================================================
# ** Window_Command_Select
#==============================================================================
class Window_Command_Select < Window_Selectable
include AYENE::Character_Select
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 65, 640, 415)
data = []
CHAR_IDS.each {|i| data.push(i) if !$game_party.actors.include?($game_actors[i])}
@commands = data
@_blink_count = 0
@item_max = @commands.size
@cursor_width = ((width-32) / COLMUNS)
self.windowskin = RPG::Cache.windowskin(WINDOW) if WINDOW != ''
self.opacity = WINDOW_OPACTIY
self.contents = Bitmap.new(@cursor_width+@item_max * @cursor_width-32, height-32)
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@commands.each_index { |i| draw_item(i)}
end
#--------------------------------------------------------------------------
# * Draw Item
#--------------------------------------------------------------------------
def draw_item(index)
x = 4 + @cursor_width * index
y = 4
actor = $game_actors[@commands[index]]
draw_actor_status(actor, x, y)
x = (@cursor_width-BAR_WIDTH)/2 + @cursor_width * index
CHAR_PARAMS.each_index { |i|
draw_actor_params(actor, x, y + @bit_height + WLH * (i+2), CHAR_PARAMS[i])
}
end
#--------------------------------------------------------------------------
# * Draw Actor Status
#--------------------------------------------------------------------------
def draw_actor_status(actor, x, y)
self.contents.font.size = FONT_SIZE
self.contents.draw_char_status(x, y, @cursor_width - 8, WLH, "#{actor.name}", FONT_COLOR, 1)
if CHAR_FACE
bitmap = RPG::Cache.picture("Face_#{actor.id}")
rect = Rect.new(0, 0, bitmap.width, bitmap.height)
self.contents.blt(x + (@cursor_width-bitmap.width)/2, y + WLH * 1, bitmap, rect)
@bit_height = bitmap.height
bitmap.dispose
else
@bit_height = 0
end
self.contents.font.size = FONT_SIZE-2
class_name = $data_classes[actor.class_id].name
text = sprintf("Klasa: %s", class_name)
self.contents.draw_char_status(x, y + @bit_height + WLH, @cursor_width - 8, WLH, text, FONT_COLOR, 1)
end
#--------------------------------------------------------------------------
# * Draw Actor Parameters
#--------------------------------------------------------------------------
def draw_actor_params(actor, x, y, type)
members = []
@commands.each {|i| members.push($game_actors[i])}
case type
when :hp
members.sort! { |a, b| a.maxhp <=> b.maxhp }
gw = BAR_WIDTH * actor.hp / members.pop.maxhp
text = "#{actor.maxhp}"
when :sp
members.sort! { |a, b| a.maxsp <=> b.maxsp }
gw = BAR_WIDTH * actor.sp / members.pop.maxsp
text = "#{actor.maxsp}"
when :str
members.sort! { |a, b| a.str <=> b.str }
gw = BAR_WIDTH * actor.str / members.pop.str
text = "#{actor.str}"
when :dex
members.sort! { |a, b| a.dex <=> b.dex }
gw = BAR_WIDTH * actor.dex / members.pop.dex
text = "#{actor.dex}"
when :agi
members.sort! { |a, b| a.agi <=> b.agi }
gw = BAR_WIDTH * actor.agi / members.pop.agi
text = "#{actor.agi}"
when :int
members.sort! { |a, b| a.int <=> b.int }
gw = BAR_WIDTH * actor.int / members.pop.int
text = "#{actor.int}"
end
self.contents.fill_rect(x, y+WLH-8, BAR_WIDTH+2, 8, Color.new(0, 0, 0, 255))
self.contents.gradient_fill_rect(x+1, y+WLH-7, gw, 6, CHAR_PARAMS_BAR[type][1], CHAR_PARAMS_BAR[type][2])
self.contents.draw_char_status(x, y, 100, WLH, CHAR_PARAMS_BAR[type][0], system_color, 0)
self.contents.draw_char_status(x + BAR_WIDTH - 42, y, 44, WLH, text, FONT_COLOR, 2)
end
#--------------------------------------------------------------------------
# * Get Top Row
#--------------------------------------------------------------------------
def top_row
return self.ox / @cursor_width
end
#--------------------------------------------------------------------------
# * Set Top Row
#--------------------------------------------------------------------------
def top_row=(row)
row = 0 if row < 0
row = @item_max - 1 if row > @item_max - 1
self.ox = row * @cursor_width
end
#--------------------------------------------------------------------------
# * Update Cursor Rectangle
#--------------------------------------------------------------------------
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
return
end
row = @index
self.top_row = row if row < self.top_row
self.top_row = row - (COLMUNS - 1) if row > self.top_row + (COLMUNS - 1)
x = @index * @cursor_width - self.ox
y = 0
self.cursor_rect.set(x, y, @cursor_width, height-32)
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
if self.active and @item_max > 0 and @index >= 0
if Input.repeat?(Input::RIGHT)
$game_system.se_play($data_system.cursor_se)
@index += 1
@index %= @item_max
end
if Input.repeat?(Input::LEFT)
$game_system.se_play($data_system.cursor_se)
@index += @item_max - 1
@index %= @item_max
end
end
update_cursor_rect
end
end
#==============================================================================
# ** Window_Char_Select_Help
#==============================================================================
class Window_Char_Select_Help < Window_Base
include AYENE::Character_Select
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0, 640, 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.windowskin = RPG::Cache.windowskin(WINDOW) if WINDOW != ''
self.opacity = WINDOW_OPACTIY
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.size = FONT_SIZE
self.contents.draw_char_status(4, 0, width-32, WLH, WINDOW_HELP_TEXT, FONT_COLOR, 1)
end
end
#==============================================================================
# ** Bitmap
#==============================================================================
class Bitmap
include AYENE::Character_Select
#--------------------------------------------------------------------------
# * Draw Text Outline
#--------------------------------------------------------------------------
def draw_char_status(x, y, width, height, text, color, align = 1)
font.name = FONT_NAME
font.bold = FONT_BOLD
font.italic = FONT_ITALIC
if FONT_OUTLINE
font.color = FONT_OUTLINE_COLOR
draw_text(x + 1, y, width, height, text, align)
draw_text(x - 1, y, width, height, text, align)
draw_text(x, y + 1, width, height, text, align)
draw_text(x, y - 1, width, height, text, align)
end
if FONT_SHADOW
font.color = FONT_SHADOW_COLOR
draw_text(x + 1, y + 4, width, height, text, align)
end
font.color = color
draw_text(x, y, width, height, text, align)
end
#--------------------------------------------------------------------------
# * Draw Gradient Fill Rectangle
#--------------------------------------------------------------------------
def gradient_fill_rect(x, y, width, height, c1, c2)
(x...x + width).each { |i|
r = c1.red + (c2.red - c1.red) * (i - x) / (width - 1)
g = c1.green + (c2.green - c1.green) * (i - x) / (width - 1)
b = c1.blue + (c2.blue - c1.blue) * (i - x) / (width - 1)
color = Color.new(r, g, b)
fill_rect(i, y, 1, height, color)
}
end
end
Demo
Screenshot
Instrukcja
1. Wklej skrypt nad "Main" w Edytorze Skryptu.
2. Reszta instrukcji znajduje się w treści skryptu.
Piszcie w razie problemów.
[ Komentarz dodany przez: Avara : Nie 04 Lis, 2012 12:14 ]
Dodałam demo wrzucone przez Ayene na kolejnej stronie.
________________________
Ostatnio zmieniony przez Avara Nie 04 Lis, 2012 12:12, w całości zmieniany 3 razy
rafal3386
Pomógł: 2 razy Dołączył: 29 Sty 2011 Posty: 39
Wysłany: Sob 16 Lip, 2011 18:47
No wszystko działa tylko że niewiem jak zmienić głównego bohatera za pomocą tego skryptu Bo tak jak wytłumaczyłaś to tylko dodaje mi bohatera a mogłabyś objaśnić jak usunąć bierzącego bohatera i dodać tego z listy?
Ayene
Ranga RM:
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Sob 16 Lip, 2011 18:49
Chcesz, aby skrypt usuwał wszystkich z drużyny i dodawał nowego bohatera, czy pytasz się o skrypt na zmianę drużyny, który to dopiero musiałby powstać?
________________________
rafal3386
Pomógł: 2 razy Dołączył: 29 Sty 2011 Posty: 39
Wysłany: Sob 16 Lip, 2011 20:22
No chodzi mi o to że np. na początku mam wybraną przez siebie postać a potem na którymś miejscy daje ten skrypt i nagle wywołuje mi wybranie postaci (nowej z równoczesnym usunięciem wcześniejszej postaci). Tak żeby po wybraniu bohatera był tylko 1 bohater do gry
Ayene
Ranga RM:
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Sob 16 Lip, 2011 22:31
Znajdź:
Kod: if $game_party.actors.size < 4
przed tym dodaj:
Kod: $game_party.actors = []
na samym końcu skryptu dodaj:
Kod: class Game_Party
attr_accessor :actors # actors
end
________________________
rafal3386
Pomógł: 2 razy Dołączył: 29 Sty 2011 Posty: 39
Wysłany: Sob 16 Lip, 2011 23:11
Dzięęęęękiiii!!! Działa wszystko Z pewnością nie tylko mnie sie to przyda
EDIT: A mogłabyś powiedzieć jak dodać jeszcze z kilka miejsc na te postacie bo max slotów na postacie mam 7 . Chodziło mi o to żeby było już na początku więcej osób do wyboru bo jak wybiore jakąś osobe to za 2 razem jak próbuje to jest nowa postać zamiast tamtej ale to tylko zastępuje a ja wolałbym jednak żeby było od razu z 15 postaci do wyboru bez zmian
I mam taki problem, bo jak zamieniam oryginalne postaci na te które są mi potrzebne (do wyboru bohaterów) to podczas walki, postać ta jak ma zaatakować z broni zwykłej to tylko biegnie w miejscu (szybko dość). Siła i broń jest u bohatera więc niewiem czemu taki błąd
Ayene
Ranga RM:
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Pon 18 Lip, 2011 21:48
Jeśli chcesz więcej postaci do wyboru to edytuj fragment:
Kod: if $game_party.actors.size < 4
gdzie zamiast 4 daj maksymalną ilość bohaterów w drużynie.
Jeśli nie chcesz, aby postaci usuwały się z drużyny znajdź:
Kod: PREVIOUS_SCENE = Scene_Title # poprzednia scena
dodaj po niej:
Kod: DELCHAR_SWITCH = 4 # przełącznik włączający usuwanie bohaterów z drużyny
Następnie znajdź:
Kod: $game_party.actors = []
i zamień na:
Kod: $game_party.actors = [] if $game_switches[DELCHAR_SWITCH]
________________________
rafal3386
Pomógł: 2 razy Dołączył: 29 Sty 2011 Posty: 39
Wysłany: Pon 18 Lip, 2011 22:02
Dzięki wielkie
Tomson1120
Preferowany:
Pomógł: 1 raz Dołączył: 06 Sie 2010 Posty: 84 Skąd: Kraków
Wysłany: Czw 21 Lip, 2011 23:29
A ja dalem wywolaj skrypt dalem to co tam napisalas i gdy wchodze do gry gra sie scina nie wyskakuja zadne bledy tylko sie scina
________________________
Feniks
Preferowany:
Ranga RM:
Pomógł: 62 razy Dołączył: 04 Wrz 2010 Posty: 511
Wysłany: Czw 21 Lip, 2011 23:33
ale ty to wywołujesz autorunem prawda? To na końcu daj erase event. A jeśli to nie to, to użyj anti-laga.
________________________
Tomson1120
Preferowany:
Pomógł: 1 raz Dołączył: 06 Sie 2010 Posty: 84 Skąd: Kraków
Wysłany: Czw 21 Lip, 2011 23:38
Sluchajcie cos zle edytowalem bo chcialem tak jak Rafal3386 w 1 poscie abym wybieral postac i nia chodzil a nie druzyne i edytowalem tak jak Ayene napisala ale zrobilem cos nie tak bo mi wyskakuje okienko z wyborem postaci i naciskam na postac i sie robi czarne tlo i wywala blad " Script "Skrypt Wybor" line 141 : NoMethodError occurred. undefined method `actors=' for#<Game_Party:0x37aac70>" Zapewne zle to edytowalem.. czy moglby ktos edytowac i dopisac te pare linijek tak jak Ayene napisala ?? Pokaze jak ja to zrobilem ( nie znam sie ) Spoiler:
Kod: #==============================================================================
# Wybór postaci [XP]
# by Ayene
# 15.07.2011 ver 1.0
# www.ultimateam.pl
#==============================================================================
# Opis:
# Skrypt pozwala na wybór postaci na początku gry. Może mieć również
# zastosowanie przy wyborze więcej niż jednego bohatera (maksymalnie tyle,
# ile może liczyć drużyna).
#==============================================================================
# Instrukcja:
#==============================================================================
# Na początku gry wywołaj za pomocą polecenia "Script" w zdarzeniu:
# $scene = Scene_Character_Select.new
#
#==============================================================================
# Konfiguracja:
#==============================================================================
module AYENE
module Character_Select
# Ustawienia czcionki
FONT_NAME = 'Comic Sans MS' # nazwa czcionki (folder Fonts)
FONT_SIZE = 26 # rozmiar czcionki
FONT_BOLD = false # pogrubienie
FONT_ITALIC = false # kursywa
FONT_COLOR = Color.new(255, 255, 255, 255) # kolor tekstu
FONT_OUTLINE = false # obwódka? (true/false)
FONT_OUTLINE_COLOR = Color.new(0, 0, 0, 255) # kolor obwódki tekstu
FONT_SHADOW = true # cień? (true/false)
FONT_SHADOW_COLOR = Color.new(0, 0, 0, 100) # kolor cienia
WLH = 32 # interlinia
# Ustawienia tła obrazkowego (folder Graphics/Pitures)
BACKGROUND_IMAGE = '' # nazwa tła; '' wyłącza tło
BACKGROUND_OPACTIY = 255 # przezroczystość tła
# Ustawienia okna (folder Graphics/Windowskins)
WINDOW = '' # nazwa pliku; '' domyślne okno
WINDOW_OPACTIY = 255 # przezroczystość okna
WINDOW_HELP_TEXT = 'Wybierz bohatera'
# Ustawienia muzyki w tle
STAGE_BGM = '' # nazwa pliku z muzyką (folder Audio/BGM)
STAGE_BGM_VOLUME = 100 # głośność
# Ustawienia postaci
CHAR_IDS = [1, 5, 4, 2, 3, 6, 7] # ID postaci do wyboru
# Obrazek bohatera. By go wyświetlić należy w folderze Graphics/Pictures
# umieścić plik o nazwie "Face_ID", gdzie zamiast ID należy podać id postaci,
# np. "Face_2" to obrazek bohatera o ID 2.
CHAR_FACE = false # obrazek bohatera? (true/false)
# Ustawienia statystyk i ich pasków
# Maksymalna wartość pasków wynosi tyle, ile największa wartość danej
# statystyki u wszystkich postaci do wyboru. Innymi słowy, skrypt porównuje
# wielkość danej statystyki u postaci, następnie wyłania najwyższą.
CHAR_PARAMS = [ :hp, :sp, :str, :dex, :agi, :int ] # nazwy statystyk po przecinku
CHAR_PARAMS_BAR = { # :par => "nazwa", color1, color2
:hp => ["Życie", Color.new(0, 100, 17, 255), Color.new(0, 223, 37, 255)],
:sp => ["Mana", Color.new(0, 60, 95, 255), Color.new(0, 142, 223, 255)],
:str => ["Siła", Color.new(140, 20, 20, 255), Color.new(230, 34, 34, 255)],
:dex => ["Celność", Color.new(124, 38, 132, 255), Color.new(209, 62, 222, 255)],
:agi => ["Szybkość", Color.new(142, 134, 12, 255), Color.new(228, 219, 71, 255)],
:int => ["Inteligencja", Color.new(33, 143, 136, 255), Color.new(68,224, 215, 255)],
}
BAR_WIDTH = 150 # Szerokość pasków
COLMUNS = 3 # Liczba kolumn
NEXT_SCENE = Scene_Map # kolejna scena
PREVIOUS_SCENE = Scene_Title # poprzednia scena
end
end
#==============================================================================
# ** Scene_Character_Select
#==============================================================================
class Scene_Character_Select
include AYENE::Character_Select
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
start
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
terminate
end
#--------------------------------------------------------------------------
# * Start processing
#--------------------------------------------------------------------------
def start
@actor_id = 0
if STAGE_BGM != ''
Audio.bgm_play("Audio/BGM/" + STAGE_BGM, STAGE_BGM_VOLUME, 100)
end
if BACKGROUND_IMAGE != ''
@background = Sprite.new
@background.bitmap = RPG::Cache.picture(BACKGROUND_IMAGE)
@background.opacity = BACKGROUND_OPACTIY
end
@window_command = Window_Command_Select.new
@window_help = Window_Char_Select_Help.new
end
#--------------------------------------------------------------------------
# * Termination Processing
#--------------------------------------------------------------------------
def terminate
@window_command.dispose
@window_help.dispose
unless @background.nil?
@background.bitmap.dispose
@background.dispose
end
Audio.bgm_fade(1500) if STAGE_BGM != ''
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
@window_command.update
@window_help.update
if Input.trigger?(Input::C)
determine_character
$game_party.actors = []
if$game_party.actors.size < 1
$game_party.add_actor(@actor_id)
$game_system.se_play($data_system.decision_se)
$scene = eval("#{NEXT_SCENE}.new")
else
$game_system.se_play($data_system.buzzer_se)
end
return
elsif Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = eval("#{PREVIOUS_SCENE}.new")
return
end
end
#--------------------------------------------------------------------------
# * Determine Character
#--------------------------------------------------------------------------
def determine_character
actor_index = @window_command.index
data = []
CHAR_IDS.each {|i| data.push(i) if !$game_party.actors.include?($game_actors[i])}
@actor_id = data[actor_index]
end
end
#==============================================================================
# ** Window_Command_Select
#==============================================================================
class Window_Command_Select < Window_Selectable
include AYENE::Character_Select
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 65, 640, 415)
data = []
CHAR_IDS.each {|i| data.push(i) if !$game_party.actors.include?($game_actors[i])}
@commands = data
@_blink_count = 0
@item_max = @commands.size
@cursor_width = ((width-32) / COLMUNS)
self.windowskin = RPG::Cache.windowskin(WINDOW) if WINDOW != ''
self.opacity = WINDOW_OPACTIY
self.contents = Bitmap.new(@cursor_width+@item_max * @cursor_width-32, height-32)
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@commands.each_index { |i| draw_item(i)}
end
#--------------------------------------------------------------------------
# * Draw Item
#--------------------------------------------------------------------------
def draw_item(index)
x = 4 + @cursor_width * index
y = 4
actor = $game_actors[@commands[index]]
draw_actor_status(actor, x, y)
x = (@cursor_width-BAR_WIDTH)/2 + @cursor_width * index
CHAR_PARAMS.each_index { |i|
draw_actor_params(actor, x, y + @bit_height + WLH * (i+2), CHAR_PARAMS[i])
}
end
#--------------------------------------------------------------------------
# * Draw Actor Status
#--------------------------------------------------------------------------
def draw_actor_status(actor, x, y)
self.contents.font.size = FONT_SIZE
self.contents.draw_char_status(x, y, @cursor_width - 8, WLH, "#{actor.name}", FONT_COLOR, 1)
if CHAR_FACE
bitmap = RPG::Cache.picture("Face_#{actor.id}")
rect = Rect.new(0, 0, bitmap.width, bitmap.height)
self.contents.blt(x + (@cursor_width-bitmap.width)/2, y + WLH * 1, bitmap, rect)
@bit_height = bitmap.height
bitmap.dispose
else
@bit_height = 0
end
self.contents.font.size = FONT_SIZE-2
class_name = $data_classes[actor.class_id].name
text = sprintf("Klasa: %s", class_name)
self.contents.draw_char_status(x, y + @bit_height + WLH, @cursor_width - 8, WLH, text, FONT_COLOR, 1)
end
#--------------------------------------------------------------------------
# * Draw Actor Parameters
#--------------------------------------------------------------------------
def draw_actor_params(actor, x, y, type)
members = []
@commands.each {|i| members.push($game_actors[i])}
case type
when :hp
members.sort! { |a, b| a.maxhp <=> b.maxhp }
gw = BAR_WIDTH * actor.hp / members.pop.maxhp
text = "#{actor.maxhp}"
when :sp
members.sort! { |a, b| a.maxsp <=> b.maxsp }
gw = BAR_WIDTH * actor.sp / members.pop.maxsp
text = "#{actor.maxsp}"
when :str
members.sort! { |a, b| a.str <=> b.str }
gw = BAR_WIDTH * actor.str / members.pop.str
text = "#{actor.str}"
when :dex
members.sort! { |a, b| a.dex <=> b.dex }
gw = BAR_WIDTH * actor.dex / members.pop.dex
text = "#{actor.dex}"
when :agi
members.sort! { |a, b| a.agi <=> b.agi }
gw = BAR_WIDTH * actor.agi / members.pop.agi
text = "#{actor.agi}"
when :int
members.sort! { |a, b| a.int <=> b.int }
gw = BAR_WIDTH * actor.int / members.pop.int
text = "#{actor.int}"
end
self.contents.fill_rect(x, y+WLH-8, BAR_WIDTH+2, 8, Color.new(0, 0, 0, 255))
self.contents.gradient_fill_rect(x+1, y+WLH-7, gw, 6, CHAR_PARAMS_BAR[type][1], CHAR_PARAMS_BAR[type][2])
self.contents.draw_char_status(x, y, 100, WLH, CHAR_PARAMS_BAR[type][0], system_color, 0)
self.contents.draw_char_status(x + BAR_WIDTH - 42, y, 44, WLH, text, FONT_COLOR, 2)
end
#--------------------------------------------------------------------------
# * Get Top Row
#--------------------------------------------------------------------------
def top_row
return self.ox / @cursor_width
end
#--------------------------------------------------------------------------
# * Set Top Row
#--------------------------------------------------------------------------
def top_row=(row)
row = 0 if row < 0
row = @item_max - 1 if row > @item_max - 1
self.ox = row * @cursor_width
end
#--------------------------------------------------------------------------
# * Update Cursor Rectangle
#--------------------------------------------------------------------------
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
return
end
row = @index
self.top_row = row if row < self.top_row
self.top_row = row - (COLMUNS - 1) if row > self.top_row + (COLMUNS - 1)
x = @index * @cursor_width - self.ox
y = 0
self.cursor_rect.set(x, y, @cursor_width, height-32)
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
if self.active and @item_max > 0 and @index >= 0
if Input.repeat?(Input::RIGHT)
$game_system.se_play($data_system.cursor_se)
@index += 1
@index %= @item_max
end
if Input.repeat?(Input::LEFT)
$game_system.se_play($data_system.cursor_se)
@index += @item_max - 1
@index %= @item_max
end
end
update_cursor_rect
end
end
#==============================================================================
# ** Window_Char_Select_Help
#==============================================================================
class Window_Char_Select_Help < Window_Base
include AYENE::Character_Select
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0, 640, 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.windowskin = RPG::Cache.windowskin(WINDOW) if WINDOW != ''
self.opacity = WINDOW_OPACTIY
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.size = FONT_SIZE
self.contents.draw_char_status(4, 0, width-32, WLH, WINDOW_HELP_TEXT, FONT_COLOR, 1)
end
end
#==============================================================================
# ** Bitmap
#==============================================================================
class Bitmap
include AYENE::Character_Select
#--------------------------------------------------------------------------
# * Draw Text Outline
#--------------------------------------------------------------------------
def draw_char_status(x, y, width, height, text, color, align = 1)
font.name = FONT_NAME
font.bold = FONT_BOLD
font.italic = FONT_ITALIC
if FONT_OUTLINE
font.color = FONT_OUTLINE_COLOR
draw_text(x + 1, y, width, height, text, align)
draw_text(x - 1, y, width, height, text, align)
draw_text(x, y + 1, width, height, text, align)
draw_text(x, y - 1, width, height, text, align)
end
if FONT_SHADOW
font.color = FONT_SHADOW_COLOR
draw_text(x + 1, y + 4, width, height, text, align)
end
font.color = color
draw_text(x, y, width, height, text, align)
end
#--------------------------------------------------------------------------
# * Draw Gradient Fill Rectangle
#--------------------------------------------------------------------------
def gradient_fill_rect(x, y, width, height, c1, c2)
(x...x + width).each { |i|
r = c1.red + (c2.red - c1.red) * (i - x) / (width - 1)
g = c1.green + (c2.green - c1.green) * (i - x) / (width - 1)
b = c1.blue + (c2.blue - c1.blue) * (i - x) / (width - 1)
color = Color.new(r, g, b)
fill_rect(i, y, 1, height, color)
}
end
class Game_Party
attr_accessor :actors # actors
end
end
PS. Line 141 to ta : $game_party.actors = [] (dopisana) z gory dziekuje[/code]
Ayene
Ranga RM:
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Pią 22 Lip, 2011 21:58
Zamień skrypt na poniższy:
Spoiler:
Kod: #==============================================================================
# Wybór postaci [XP]
# by Ayene
# 15.07.2011 ver 1.0
# www.ultimateam.pl
#==============================================================================
# Opis:
# Skrypt pozwala na wybór postaci na początku gry. Może mieć również
# zastosowanie przy wyborze więcej niż jednego bohatera (maksymalnie tyle,
# ile może liczyć drużyna).
#==============================================================================
# Instrukcja:
#==============================================================================
# Na początku gry wywołaj za pomocą polecenia "Script" w zdarzeniu:
# $scene = Scene_Character_Select.new
#
#==============================================================================
# Konfiguracja:
#==============================================================================
module AYENE
module Character_Select
# Ustawienia czcionki
FONT_NAME = 'Comic Sans MS' # nazwa czcionki (folder Fonts)
FONT_SIZE = 26 # rozmiar czcionki
FONT_BOLD = false # pogrubienie
FONT_ITALIC = false # kursywa
FONT_COLOR = Color.new(255, 255, 255, 255) # kolor tekstu
FONT_OUTLINE = false # obwódka? (true/false)
FONT_OUTLINE_COLOR = Color.new(0, 0, 0, 255) # kolor obwódki tekstu
FONT_SHADOW = true # cień? (true/false)
FONT_SHADOW_COLOR = Color.new(0, 0, 0, 100) # kolor cienia
WLH = 32 # interlinia
# Ustawienia tła obrazkowego (folder Graphics/Pitures)
BACKGROUND_IMAGE = '' # nazwa tła; '' wyłącza tło
BACKGROUND_OPACTIY = 255 # przezroczystość tła
# Ustawienia okna (folder Graphics/Windowskins)
WINDOW = '' # nazwa pliku; '' domyślne okno
WINDOW_OPACTIY = 255 # przezroczystość okna
WINDOW_HELP_TEXT = 'Wybierz bohatera'
# Ustawienia muzyki w tle
STAGE_BGM = '' # nazwa pliku z muzyką (folder Audio/BGM)
STAGE_BGM_VOLUME = 100 # głośność
# Ustawienia postaci
CHAR_IDS = [1, 5, 4, 2, 3, 6, 7] # ID postaci do wyboru
# Obrazek bohatera. By go wyświetlić należy w folderze Graphics/Pictures
# umieścić plik o nazwie "Face_ID", gdzie zamiast ID należy podać id postaci,
# np. "Face_2" to obrazek bohatera o ID 2.
CHAR_FACE = false # obrazek bohatera? (true/false)
# Ustawienia statystyk i ich pasków
# Maksymalna wartość pasków wynosi tyle, ile największa wartość danej
# statystyki u wszystkich postaci do wyboru. Innymi słowy, skrypt porównuje
# wielkość danej statystyki u postaci, następnie wyłania najwyższą.
CHAR_PARAMS = [ :hp, :sp, :str, :dex, :agi, :int ] # nazwy statystyk po przecinku
CHAR_PARAMS_BAR = { # :par => "nazwa", color1, color2
:hp => ["Życie", Color.new(0, 100, 17, 255), Color.new(0, 223, 37, 255)],
:sp => ["Mana", Color.new(0, 60, 95, 255), Color.new(0, 142, 223, 255)],
:str => ["Siła", Color.new(140, 20, 20, 255), Color.new(230, 34, 34, 255)],
:dex => ["Celność", Color.new(124, 38, 132, 255), Color.new(209, 62, 222, 255)],
:agi => ["Szybkość", Color.new(142, 134, 12, 255), Color.new(228, 219, 71, 255)],
:int => ["Inteligencja", Color.new(33, 143, 136, 255), Color.new(68,224, 215, 255)],
}
BAR_WIDTH = 150 # Szerokość pasków
COLMUNS = 3 # Liczba kolumn
NEXT_SCENE = Scene_Map # kolejna scena
PREVIOUS_SCENE = Scene_Title # poprzednia scena
end
end
class Game_Party
attr_accessor :actors # actors
end
#==============================================================================
# ** Scene_Character_Select
#==============================================================================
class Scene_Character_Select
include AYENE::Character_Select
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
start
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
terminate
end
#--------------------------------------------------------------------------
# * Start processing
#--------------------------------------------------------------------------
def start
@actor_id = 0
if STAGE_BGM != ''
Audio.bgm_play("Audio/BGM/" + STAGE_BGM, STAGE_BGM_VOLUME, 100)
end
if BACKGROUND_IMAGE != ''
@background = Sprite.new
@background.bitmap = RPG::Cache.picture(BACKGROUND_IMAGE)
@background.opacity = BACKGROUND_OPACTIY
end
@window_command = Window_Command_Select.new
@window_help = Window_Char_Select_Help.new
end
#--------------------------------------------------------------------------
# * Termination Processing
#--------------------------------------------------------------------------
def terminate
@window_command.dispose
@window_help.dispose
unless @background.nil?
@background.bitmap.dispose
@background.dispose
end
Audio.bgm_fade(1500) if STAGE_BGM != ''
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
@window_command.update
@window_help.update
if Input.trigger?(Input::C)
determine_character
$game_party.actors = []
if$game_party.actors.size < 1
$game_party.add_actor(@actor_id)
$game_system.se_play($data_system.decision_se)
$scene = eval("#{NEXT_SCENE}.new")
else
$game_system.se_play($data_system.buzzer_se)
end
return
elsif Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = eval("#{PREVIOUS_SCENE}.new")
return
end
end
#--------------------------------------------------------------------------
# * Determine Character
#--------------------------------------------------------------------------
def determine_character
actor_index = @window_command.index
data = []
CHAR_IDS.each {|i| data.push(i) if !$game_party.actors.include?($game_actors[i])}
@actor_id = data[actor_index]
end
end
#==============================================================================
# ** Window_Command_Select
#==============================================================================
class Window_Command_Select < Window_Selectable
include AYENE::Character_Select
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 65, 640, 415)
data = []
CHAR_IDS.each {|i| data.push(i) if !$game_party.actors.include?($game_actors[i])}
@commands = data
@_blink_count = 0
@item_max = @commands.size
@cursor_width = ((width-32) / COLMUNS)
self.windowskin = RPG::Cache.windowskin(WINDOW) if WINDOW != ''
self.opacity = WINDOW_OPACTIY
self.contents = Bitmap.new(@cursor_width+@item_max * @cursor_width-32, height-32)
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@commands.each_index { |i| draw_item(i)}
end
#--------------------------------------------------------------------------
# * Draw Item
#--------------------------------------------------------------------------
def draw_item(index)
x = 4 + @cursor_width * index
y = 4
actor = $game_actors[@commands[index]]
draw_actor_status(actor, x, y)
x = (@cursor_width-BAR_WIDTH)/2 + @cursor_width * index
CHAR_PARAMS.each_index { |i|
draw_actor_params(actor, x, y + @bit_height + WLH * (i+2), CHAR_PARAMS[i])
}
end
#--------------------------------------------------------------------------
# * Draw Actor Status
#--------------------------------------------------------------------------
def draw_actor_status(actor, x, y)
self.contents.font.size = FONT_SIZE
self.contents.draw_char_status(x, y, @cursor_width - 8, WLH, "#{actor.name}", FONT_COLOR, 1)
if CHAR_FACE
bitmap = RPG::Cache.picture("Face_#{actor.id}")
rect = Rect.new(0, 0, bitmap.width, bitmap.height)
self.contents.blt(x + (@cursor_width-bitmap.width)/2, y + WLH * 1, bitmap, rect)
@bit_height = bitmap.height
bitmap.dispose
else
@bit_height = 0
end
self.contents.font.size = FONT_SIZE-2
class_name = $data_classes[actor.class_id].name
text = sprintf("Klasa: %s", class_name)
self.contents.draw_char_status(x, y + @bit_height + WLH, @cursor_width - 8, WLH, text, FONT_COLOR, 1)
end
#--------------------------------------------------------------------------
# * Draw Actor Parameters
#--------------------------------------------------------------------------
def draw_actor_params(actor, x, y, type)
members = []
@commands.each {|i| members.push($game_actors[i])}
case type
when :hp
members.sort! { |a, b| a.maxhp <=> b.maxhp }
gw = BAR_WIDTH * actor.hp / members.pop.maxhp
text = "#{actor.maxhp}"
when :sp
members.sort! { |a, b| a.maxsp <=> b.maxsp }
gw = BAR_WIDTH * actor.sp / members.pop.maxsp
text = "#{actor.maxsp}"
when :str
members.sort! { |a, b| a.str <=> b.str }
gw = BAR_WIDTH * actor.str / members.pop.str
text = "#{actor.str}"
when :dex
members.sort! { |a, b| a.dex <=> b.dex }
gw = BAR_WIDTH * actor.dex / members.pop.dex
text = "#{actor.dex}"
when :agi
members.sort! { |a, b| a.agi <=> b.agi }
gw = BAR_WIDTH * actor.agi / members.pop.agi
text = "#{actor.agi}"
when :int
members.sort! { |a, b| a.int <=> b.int }
gw = BAR_WIDTH * actor.int / members.pop.int
text = "#{actor.int}"
end
self.contents.fill_rect(x, y+WLH-8, BAR_WIDTH+2, 8, Color.new(0, 0, 0, 255))
self.contents.gradient_fill_rect(x+1, y+WLH-7, gw, 6, CHAR_PARAMS_BAR[type][1], CHAR_PARAMS_BAR[type][2])
self.contents.draw_char_status(x, y, 100, WLH, CHAR_PARAMS_BAR[type][0], system_color, 0)
self.contents.draw_char_status(x + BAR_WIDTH - 42, y, 44, WLH, text, FONT_COLOR, 2)
end
#--------------------------------------------------------------------------
# * Get Top Row
#--------------------------------------------------------------------------
def top_row
return self.ox / @cursor_width
end
#--------------------------------------------------------------------------
# * Set Top Row
#--------------------------------------------------------------------------
def top_row=(row)
row = 0 if row < 0
row = @item_max - 1 if row > @item_max - 1
self.ox = row * @cursor_width
end
#--------------------------------------------------------------------------
# * Update Cursor Rectangle
#--------------------------------------------------------------------------
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
return
end
row = @index
self.top_row = row if row < self.top_row
self.top_row = row - (COLMUNS - 1) if row > self.top_row + (COLMUNS - 1)
x = @index * @cursor_width - self.ox
y = 0
self.cursor_rect.set(x, y, @cursor_width, height-32)
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
if self.active and @item_max > 0 and @index >= 0
if Input.repeat?(Input::RIGHT)
$game_system.se_play($data_system.cursor_se)
@index += 1
@index %= @item_max
end
if Input.repeat?(Input::LEFT)
$game_system.se_play($data_system.cursor_se)
@index += @item_max - 1
@index %= @item_max
end
end
update_cursor_rect
end
end
#==============================================================================
# ** Window_Char_Select_Help
#==============================================================================
class Window_Char_Select_Help < Window_Base
include AYENE::Character_Select
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0, 640, 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.windowskin = RPG::Cache.windowskin(WINDOW) if WINDOW != ''
self.opacity = WINDOW_OPACTIY
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.size = FONT_SIZE
self.contents.draw_char_status(4, 0, width-32, WLH, WINDOW_HELP_TEXT, FONT_COLOR, 1)
end
end
#==============================================================================
# ** Bitmap
#==============================================================================
class Bitmap
include AYENE::Character_Select
#--------------------------------------------------------------------------
# * Draw Text Outline
#--------------------------------------------------------------------------
def draw_char_status(x, y, width, height, text, color, align = 1)
font.name = FONT_NAME
font.bold = FONT_BOLD
font.italic = FONT_ITALIC
if FONT_OUTLINE
font.color = FONT_OUTLINE_COLOR
draw_text(x + 1, y, width, height, text, align)
draw_text(x - 1, y, width, height, text, align)
draw_text(x, y + 1, width, height, text, align)
draw_text(x, y - 1, width, height, text, align)
end
if FONT_SHADOW
font.color = FONT_SHADOW_COLOR
draw_text(x + 1, y + 4, width, height, text, align)
end
font.color = color
draw_text(x, y, width, height, text, align)
end
#--------------------------------------------------------------------------
# * Draw Gradient Fill Rectangle
#--------------------------------------------------------------------------
def gradient_fill_rect(x, y, width, height, c1, c2)
(x...x + width).each { |i|
r = c1.red + (c2.red - c1.red) * (i - x) / (width - 1)
g = c1.green + (c2.green - c1.green) * (i - x) / (width - 1)
b = c1.blue + (c2.blue - c1.blue) * (i - x) / (width - 1)
color = Color.new(r, g, b)
fill_rect(i, y, 1, height, color)
}
end
end
PS Pierwszy post zaktualizowany...
________________________
Tomson1120
Preferowany:
Pomógł: 1 raz Dołączył: 06 Sie 2010 Posty: 84 Skąd: Kraków
Wysłany: Pią 22 Lip, 2011 22:15
Dobra dziala mniej wiecej tylko mam jeszcze jeden problem juz wybieram postac i pojawia mi sie moja postac i znowu wyskakuje mi okno wybierania postaci ;/ i tak caly czas :) Prosze o odp
________________________
Ayene
Ranga RM:
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Pią 22 Lip, 2011 22:16
Widocznie zdarzenie masz ustawione na parallel lub autorun. Skorzystaj z self-switcha. Wrzuć go na drugiej stronie i po kłopocie
________________________
Tomson1120
Preferowany:
Pomógł: 1 raz Dołączył: 06 Sie 2010 Posty: 84 Skąd: Kraków
Wysłany: Pią 22 Lip, 2011 22:44
za pomoca przelacznikow tez nie dziala ... znaczy zabardzo dziala :D wybiore postac a on znowu jaka postac chce wybrac :/
________________________
Nie możesz pisać nowych tematówNie możesz odpowiadać w tematachNie możesz zmieniać swoich postówNie możesz usuwać swoich postówNie możesz głosować w ankietachNie możesz załączać plików na tym forumMożesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych Wersja do druku