Ayene - Pią 13 Maj, 2011 12:53 Temat postu: Wybór postaci II [VX]
~ Wybór postaci II [VX] ~
Krótki opis
Skrypt jest poprawioną wersją Wyboru postaci z tego tematu. Pozwala na wybór klasy 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). W przeciwieństwie do wersji, na której był wzorowany, dodaje opcje wyświetlenia dużego obrazka postaci oraz jej opisu.
Autor skryptu
Ayene [yurika@o2.pl]
Kompatybilność
Tylko VX
Skrypt
Spoiler:
Kod:
#===================================================================
# Wybór postaci II [VX]
# by Ayene
# 13.05.2011 ver 1.0
# www.ultimateam.pl
#===================================================================
# Opis:
# Skrypt pozwala na wybór klasy 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_CharacterSelect.new
#
#===================================================================
# Konfiguracja:
#===================================================================
module Ayene
module CharSel
# Tekst pomocy
HELP_TEXT = "Wybierz postać (SHIFT - opis postaci)"
# ID żeńskich postaci
GENDER_FEMALE = [2,4,7]
# ID męskich postaci
GENDER_MALE = [1,3,5,6,8]
# Nazwy podstawowych statystyk
STATS = ["Atak", "Obrona", "Wola", "Szybkość"]
# Wyświetlenie obrazka postaci. Obrazek o nazwie klasy postaci
# należy umieścić w folderze Graphics/Pictures, np. nazwa klasy to
# "gnom", wówczas do folderu trzeba wrzucić plik "gnom.png".
ACTOR_BATTLER = true
# Opis bohatera
ACTOR_DESCRIPTION = { # <-nie usuwać
# ID postaci => "Opis bohatera"
1 => "Tutaj |opis bohatera. |Kreska pionowa to przejście |do następnej linijki",
2 => "Tutaj |opis bohatera. |Kreska pionowa to przejście |do następnej linijki",
3 => "Tutaj |opis bohatera. |Kreska pionowa to przejście |do następnej linijki",
4 => "Tutaj |opis bohatera. |Kreska pionowa to przejście |do następnej linijki",
5 => "Tutaj |opis bohatera. |Kreska pionowa to przejście |do następnej linijki",
# By przejść do następnej linijki wystarczy użyć znaku |
# Maksymalnie 12 linijek tekstu.
} # <-nie usuwać
end
end
def draw_item(index)
self.contents.font.color = normal_color
self.contents.draw_text(8 + index * 150, -5, 100, 32, @commands[index], 1)
end
end
#--------------------------------------------------------------------------
# Window_Choose_Character
#--------------------------------------------------------------------------
class Window_Choose_Character < Window_Selectable
include Ayene::CharSel
def create_contents(gender=0)
self.contents.dispose
@data = []
case gender
when 0
item_max = GENDER_MALE.size
for i in 0...item_max
actor_id = $data_actors[GENDER_MALE[i]].id
if !$game_party.actors.include?(actor_id)
@data.push(actor_id)
end
end
when 1
item_max = GENDER_FEMALE.size
for i in 0...item_max
actor_id = $data_actors[GENDER_FEMALE[i]].id
if !$game_party.actors.include?(actor_id)
@data.push(actor_id)
end
end
end
@item_max = @data.size
self.contents = Bitmap.new(width - 32, @item_max * 110 - 5)
end
def refresh
self.contents.clear
for i in 0...@item_max
draw_item(i)
end
end
def draw_item(index)
self.contents.font.color = normal_color
actor = $data_actors[@data[index]]
draw_actor_face(actor, 8, 6 + index * 110 - self.oy)
draw_actor_class(actor, 128, 6 + index * 110 - self.oy)
draw_actor_basis_hp_sp(actor, 128, WLH + 6 + index * 110 - self.oy)
draw_actor_stats(actor, 348, 6 + index * 110 - self.oy)
draw_actor_graphic(actor, 298, 68 + index * 110 - self.oy)
end
def draw_actor_class(actor, x, y)
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 108, WLH, $data_classes[actor.class_id].name)
end
def draw_actor_stats(actor, x, y)
self.contents.font.color = system_color
for i in 0...STATS.size
self.contents.draw_text(x, y + WLH * i, 84, WLH, STATS[i])
end
self.contents.font.color = normal_color
for i in 2...6
self.contents.draw_text(x + 32, y + WLH * (i - 2), 108, WLH, actor.parameters[i, actor.initial_level], 2)
end
end
def top_row=(row)
row = 0 if row < 0
row = row_max - 1 if row > row_max - 1
self.oy = row * 110
end
end
#--------------------------------------------------------------------------
# Window_Character_Info
#--------------------------------------------------------------------------
class Window_Character_Info < Window_Base
include Ayene::CharSel
def initialize
super(0, 56, 544, 360)
end
def refresh(actor_id)
self.contents.clear
actor = $data_actors[actor_id]
actor_class = $data_classes[actor.class_id]
self.contents.draw_text(40, 22, 108, WLH, actor_class.name,1)
draw_actor_battler(actor_class, 0, 0) if ACTOR_BATTLER rescue nil
draw_actor_description(actor_id) rescue nil
end
def draw_actor_battler(actor_class, x, y)
bitmap = Cache.picture(actor_class.name)
rect = Rect.new(0, 0, bitmap.width, bitmap.height)
y = 160 - bitmap.height / 2
self.contents.blt(x, y, bitmap, rect)
bitmap.dispose
end
def draw_actor_description(actor_id)
text = ACTOR_DESCRIPTION[actor_id].split(/\|/)
for i in 0...text.size
self.contents.font.color = normal_color
self.contents.draw_text(200, 22 + i * 24, self.width - 40, WLH, text[i])
break if (i * WLH) > (self.height - 100)
end
end
end
#--------------------------------------------------------------------------
# Scene_CharacterSelect
#--------------------------------------------------------------------------
class Scene_CharacterSelect < Scene_Base
include Ayene::CharSel
def terminate
super
dispose_menu_background
@help_window.dispose
@gender_window.dispose
@character_window.dispose
@info_window.dispose
end
def return_scene
$scene = Scene_Map.new
end
def update
super
update_menu_background
@help_window.update
if @gender_window.active
update_gender_selection
elsif @character_window.active
update_character_selection
elsif @info_window.active
update_info_window
end
end
def update_gender_selection
@gender_window.update
if Input.trigger?(Input::B)
Sound.play_cancel
return_scene
elsif Input.trigger?(Input::C)
Sound.play_decision
show_character_window(@gender_window.index)
end
end
def update_character_selection
@character_window.update
if Input.trigger?(Input::B)
Sound.play_cancel
hide_character_window
elsif Input.trigger?(Input::C)
determine_character
if $game_party.members.size < $game_party.party_size
Sound.play_decision
$game_party.add_actor(@actor_id)
return_scene
else
Sound.play_buzzer
end
elsif Input.trigger?(Input::A)
determine_character
Sound.play_decision
@character_window.active = false
@character_window.visible = false
@info_window.refresh(@actor_id)
@info_window.visible = true
@info_window.active = true
end
end
def determine_character
actor_index = @character_window.index
data = []
case @gender_window.index
when 0
item_max = GENDER_MALE.size
for i in 0...item_max
actor_id = $data_actors[GENDER_MALE[i]].id
if !$game_party.actors.include?(actor_id)
data.push(actor_id)
end
end
when 1
item_max = GENDER_FEMALE.size
for i in 0...item_max
actor_id = $data_actors[GENDER_FEMALE[i]].id
if !$game_party.actors.include?(actor_id)
data.push(actor_id)
end
end
end
@actor_id = $data_actors[data[actor_index]].id
end
def update_info_window
@info_window.update
if Input.trigger?(Input::B) or Input.trigger?(Input::A)
Sound.play_cancel
@info_window.visible = false
@info_window.active = false
@character_window.visible = true
@character_window.active = true
end
end
end
#--------------------------------------------------------------------------
# Game_Party
#--------------------------------------------------------------------------
class Game_Party < Game_Unit
attr_reader :actors
def party_size
return MAX_MEMBERS
end
end
Demo
niepotrzebne
Screenshot
Spoiler:
Instrukcja
1. Wklej skrypt nad "Main" w Edytorze Skryptu.
2. Reszta instrukcji znajduje się w treści skryptu.
Piszcie w razie problemów.Mantiq - Pią 13 Maj, 2011 13:53 Bardzo fajna sprawa :) Może kiedyś użyję.MrBoomGood - Pią 13 Maj, 2011 14:09 Bardzo fajny skrypt, tylko mi się nie przyda :DMrDawnok - Czw 23 Cze, 2011 19:16 Czy mógłby ktoś powiedzieć gdzie znaleźć takie battlersy z rtp?Angius - Czw 23 Cze, 2011 20:28 W guglu najlepiej :P
Spróbuj pod "Actor Battlers", "Big Faces", "Actors"Theron - Sro 12 Paź, 2011 10:24 ;( Nie ma takich że tak to nazwę całościowych, a tych popiersi to już mam dosyć dużo...
Był bym wdzięczny za umieszczenie jakiegoś linku do obrazków :) ( http://lud.sakura.ne.jp/index.html
już mam grafiki battlersów )Avara - Sro 12 Paź, 2011 11:08 Szukałam sposobu na łatwe "enterowanie" tekstu w oknie w skrypcie, a ty właśnie go stworzyłaś (lub podałaś ) Wielkie dzięki ten fragment skryptu bardzo mi się przyda
Edit: Hihi "enterowanie" działa bez zarzutu Dzięki Kiti1000 - Czw 17 Maj, 2012 18:59 Hej ;) .
Albo coś nie doczytałam albo nie umiem czegoś zrobić bo mam taki problem jak już
wybiorę te 4 postacie to jak wyjść z tego okna i zacząć grać xd ?
może i to banalne ale nie wiem jak to zrobić jak naciskam esc to wychodzi do wyboru płci
i dalej jak nacisnę to ponownie to do tego wchodzi xd . Z góry thx za pomoc =] Ayene - Czw 17 Maj, 2012 19:46 Po prostu jak masz cztery postacie, to nie wywołuj skryptu.Kiti1000 - Czw 17 Maj, 2012 20:02 Ale ja w tym skrypcie to wybieram . Ayene - Czw 17 Maj, 2012 20:04 A w jaki sposób wywołujesz skrypt? W zdarzeniu?Kiti1000 - Czw 17 Maj, 2012 20:06 Dokładnie .Ayene - Czw 17 Maj, 2012 20:08 No to wystarczy, że po wyborze postaci, nie wywołasz znowu skryptu w zdarzeniu.Kiti1000 - Czw 17 Maj, 2012 20:08 Aha , thx .Laura - Sob 06 Paź, 2012 16:03 A można jakoś zrobić by nie dodawało bohaterów tylko zamieniało?makerowiec64 - Nie 07 Paź, 2012 11:42 Zastanawiam się jakim cudem Ayene potrafi robić takie fajne skrypty...
Dziennik Misji
Wybór Postaci II
inne...
To naprawdę są profesjonalizmy,lecz Wybór Postaci II i Dziennik Misji bije je
na głowę!(moim zdaniem)Bardzo mi się podoba ten skrypt ze względu
na fajną budowę i ogólnie...no po prostu bardzo mi się podoba.
--------------------------------------------------------------------------------
Pytanie do Ayene:Ty w ogóle lubisz robić te skrypty,czy tak bardziej
z przymusu,bo (No dobra,coś tam zrobię,bo dawno nie ma nowości)?egzudus - Sro 19 Gru, 2012 13:45 A dałoby rade zrobić aby nie dodawały się kolejne Postaci do drużyny, lecz zamieniły się z tymi(tą), które są w drużynie?Ayene - Pią 21 Gru, 2012 00:26 Egzudus, nie do tego skrypt służy. Jeśli chcesz taki na zmianę drużyny, to sprawdź, np. skrypt Prexusa http://www.ultimateam.pl/viewtopic.php?t=2049 lub KGC http://www.rpgmakervx.net...showtopic=46235egzudus - Pią 21 Gru, 2012 12:14 Dzięki :3