Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Sob 24 Kwi, 2010 11:24
Menu Final Fantasy IX [VX]
~ Menu Final Fantasy IX [VX] ~
KrĂłtki opis
Skrypt tworzy Menu na wzĂłr menu z gry Final Fantasy IX [PSX] - patrz screenshot.
Autor skryptu
BigEd781 ~ PainHurt
TĹumaczenie i korekta
Ayene [yurika@o2.pl]
KompatybilnoĹÄ
Tylko VX.
Skrypt
Spoiler:
Kod:
# ============================================================================ #
# Menu Final Fantasy IX [VX]
# by BigEd781 ~ PainHurt
# TĹumaczenie i korekta: Ayene
# Skrypt tworzy Menu na wzĂłr menu z gry Final Fantasy IX [PSX].
# ============================================================================ #
# Do poprawnego dziaĹania niektĂłrych funkcji skryptu wymagane jest uĹźycie
# skryptu poszerzajÄ cego klasÄ 'Window'.
# ============================================================================ #
module FF9_Config
# UĹźycie wĹasnego tĹa w menu (true / false)
USE_CUSTOM_BACK = false
# Nazwa obrazka, ktĂłre ma byÄ tĹem (gdy wybrano powyĹźej true).
# Obrazek naleĹźy umieĹciÄ w folderze Graphics/Pictures.
BACK_NAME = 'StoneBackground'
# JeĹli wybrano 'true' w projekcie naleĹźy dodatkowo umieĹciÄ skrypt
# poszerzajÄ cy klasÄ 'Window'. ZnaleĹşÄ go moĹźna na stronie:
# http://www.rpgmakervx.net/index.php?showtopic=8042&hl=
# lub na
# http://www.ultimateam.pl/viewtopic.php?t=3274&p=26367#26367
USE_TILED_WINDOW = true
# Animowany kursor - do przodu i do tyĹu (true / false)
ANIMATE_CURSOR = false
# Nazwa czcionki (domyĹlna)
# JeĹli chcesz jÄ zmieniÄ zamiasta 'Font.default_name' wpisz nazwÄ czcionki,
# np. 'Centaur'
DEFAULT_FONT = Font.default_name
# Ustala czcionkÄ i przezroczystoĹÄ dla wszystkich okien. Zalecane 'true'.
USE_FOR_ALL = true
# ID ikonki zĹota w zestawie ikon.
GOLD_ICON_ID = 194
end
if FF9_Config::USE_FOR_ALL
Font.default_name = FF9_Config::DEFAULT_FONT
class Window_Base < Window
alias :eds_pre_ff9_menu_base_initialize :initialize
def initialize(*args)
eds_pre_ff9_menu_base_initialize(*args)
self.stretch = false if FF9_Config::USE_TILED_WINDOW
self.back_opacity = 255
end
end
end
def draw_caption
unless @caption.nil?
h = @caption_sprite.bitmap.height
w = @caption_sprite.bitmap.width
rect = Rect.new( 0, h / 2, w, h / 4 )
@caption_sprite.bitmap.fill_rect(rect, Color.new(0, 0, 0, 96))
@caption_sprite.bitmap.draw_text(@caption_sprite.src_rect, @caption)
end
end
alias :eds_pre_caption_window_dispose :dispose
def dispose
eds_pre_caption_window_dispose
@caption_sprite.dispose
end
def find_window_width(text)
return Bitmap.new(544, 416).text_size(text).width + 32
end
end
class Window_TimeGold < Window_Base
def initialize(x, y)
width = find_window_width("9999999")
width = 140 if width < 140
super(x, y, width, WLH + 58)
self.back_opacity = 255
self.stretch = false if FF9_Config::USE_TILED_WINDOW
self.contents.font.name = FF9_Config::DEFAULT_FONT
self.caption = "Czas i ZĹoto"
@time_icon = Cache.picture('Timer')
@intern_frame_count = 0
refresh
end
def draw_time
sec = (Graphics.frame_count / 60) % 60
min = (Graphics.frame_count / 3600) % 60
hrs = Graphics.frame_count / 216000
self.contents.font.color = Color.new(255, 255, 255)
time = "%02d:%02d:%02d" % [hrs, min, sec]
self.contents.draw_text(0, 0, self.contents.width, WLH, time, 2)
end
def draw_currency_value(value, x, y, width)
gold_text = Vocab.gold
cx = contents.text_size(gold_text[0,1]).width
self.contents.font.color = normal_color
self.contents.draw_text(x, y, width - cx - 2, WLH, value, 2)
self.contents.font.color = system_color
# just print the first character of Vocab::gold
self.contents.draw_text(x, y, width, WLH, gold_text[0,1], 2)
end
def update
super
@intern_frame_count += 1
return if (@intern_frame_count % 60) != 0
refresh
end
def find_window_width(text)
return Bitmap.new(544, 416).text_size(text).width + 80
end
def refresh
self.contents.clear
self.contents.draw_text(0, 0, self.contents.width, WLH, @map_name, 1)
end
def find_window_width(text)
return Bitmap.new(544, 416).text_size(text).width + 48
end
end
class Window_Command < Window_Selectable
alias :eds_pre_ff9_menu_win_command_init :initialize
def initialize(*args)
@font_name = Font.default_name
eds_pre_ff9_menu_win_command_init(*args)
end
#--------------------------------------------------------------------------
# * OVERWRITTEN
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.name = @font_name
for i in 0...@item_max
draw_item(i)
end
end
def font_name=(name)
@font_name = name
end
end
class Window_Uses < Window_Base
def initialize(right, y, item)
@remaining_text = "Remaining: #{$game_party.item_number(item)}"
w = 160
x = right ? (544 - w) : 0
super(x, y, w, WLH + 32)
self.stretch = false if FF9_Config::USE_TILED_WINDOW
self.contents.font.name = FF9_Config::DEFAULT_FONT
refresh
end
end
#--------------------------------------------------------------------------
# * OVERWRITTEN
#--------------------------------------------------------------------------
def create_command_window
s1 = Vocab::item
s2 = Vocab::skill
s3 = Vocab::equip
s4 = Vocab::status
s5 = Vocab::save
s6 = Vocab::game_end
@command_window = Window_Command.new(155, [s1, s2, s3, s4, s5, s6])
@command_window.index = @menu_index
@command_window.stretch = false if FF9_Config::USE_TILED_WINDOW
if $game_party.members.size == 0 # If number of party members is 0
@command_window.draw_item(0, false) # Disable item
@command_window.draw_item(1, false) # Disable skill
@command_window.draw_item(2, false) # Disable equipment
@command_window.draw_item(3, false) # Disable status
end
if $game_system.save_disabled # If save is forbidden
@command_window.draw_item(4, false) # Disable save
end
# new stuff here
@command_window.font_name = FF9_Config::DEFAULT_FONT
@command_window.x = 528 - @command_window.width
@command_window.y = 16
@command_window.back_opacity = 255
end
#--------------------------------------------------------------------------
# * This method is intended to fix some compatibility problems
# that scripts run into when they change the command window
# in some way. So, we let them override "create_command_window"
# and we simply don't call it from the "start" method.
# Instead, we call this method which does some extra checking.
#--------------------------------------------------------------------------
def eds_create_command_window
create_command_window
old_commands = @command_window.commands
return if old_commands == [ Vocab::item,
Vocab::skill,
Vocab::equip,
Vocab::status,
Vocab::save,
Vocab::game_end ]
# so we know that the default command window is not being used
# we don't want to create another window, so we manually resize it
# before the player can see.
long = ''
# dynamically size the width based on the longest command
old_commands.each { |command| long = command if command.length > long.length }
# set the index to -1 so that the rectangle disappears.
# if we don't do this, you can see the selection rectangle resize.
@command_window.index = -1
@command_window.width = @command_window.contents.text_size(long).width + 42
@command_window.contents = Bitmap.new( @command_window.width - 32,
@command_window.height - 32 )
@command_window.font_name = FF9_Config::DEFAULT_FONT
@command_window.x = 528 - @command_window.width
@command_window.y = 16
@command_window.back_opacity = 255
@command_window.refresh
@command_window.index = @menu_index
end
#--------------------------------------------------------------------------
# * OVERWRITTEN
#--------------------------------------------------------------------------
def start
super
create_menu_background
#call this method for compatibility
eds_create_command_window
@gold_window = Window_TimeGold.new(372, 342)
@gold_window.y -= @gold_window.height
@gold_window.x = 528 - @gold_window.width
@status_window = Window_MenuStatus.new(0, 12)
@location_window = Window_MenuLocation.new(0, 0)
@location_window.x = 528 - @location_window.width
@location_window.y = 398 - @location_window.height
end
#--------------------------------------------------------------------------
# * Termination Processing
#--------------------------------------------------------------------------
alias :eds_pre_ff9_menu_scene_menu_terminate :terminate
def terminate
eds_pre_ff9_menu_scene_menu_terminate
@location_window.dispose
end
def dispose
if !self.disposed?
for i in @sprites
i[1].dispose if i[1]
@sprites[i[0]]=nil
end
for i in 0...@sidebitmaps.length
@sidebitmaps[i].dispose if @sidebitmaps[i]
@sidebitmaps[i]=nil
end
@blankcontents.dispose
@cursorbitmap.dispose if @cursorbitmap
@backbitmap.dispose if @backbitmap
@sprites.clear
@sidebitmaps.clear
@_windowskin=nil
@_contents=nil
@disposed=true
end
end
def openness=(value)
@openness=value
@openness=0 if @openness<0
@openness=255 if @openness>255
privRefresh
end
def stretch=(value)
@stretch=value
privRefresh(true)
end
def visible=(value)
@visible=value
privRefresh
end
def viewport=(value)
@viewport=value
for i in @spritekeys
@sprites[i].dispose
if @sprites[i].is_a?(Sprite)
@sprites[i] = Sprite.new(@viewport)
elsif @sprites[i].is_a?(Plane)
@sprites[i] = Plane.new(@viewport)
else
@sprites[i] = nil
end
end
privRefresh(true)
end
def z=(value)
@z=value
privRefresh
end
def disposed?
return @disposed
end
def contents=(value)
@contents=value
privRefresh
end
def windowskin=(value)
@_windowskin=value
if value && value.is_a?(Bitmap) && !value.disposed? && value.width==128
@rpgvx=true
else
@rpgvx=false
end
privRefresh(true)
end
def ox=(value)
@ox=value
privRefresh
end
def active=(value)
@active=value
privRefresh(true)
end
def cursor_rect=(value)
if !value
@cursor_rect.empty
else
@cursor_rect.set(value.x,value.y,value.width,value.height)
end
end
def oy=(value)
@oy=value
privRefresh
end
def width=(value)
@width=value
privRefresh(true)
end
def height=(value)
@height=value
privRefresh(true)
end
def pause=(value)
@pause=value
@pauseopacity=0 if !value
privRefresh
end
def x=(value)
@x=value
privRefresh
end
def y=(value)
@y=value
privRefresh
end
def opacity=(value)
@opacity=value
@opacity=0 if @opacity<0
@opacity=255 if @opacity>255
privRefresh
end
def back_opacity=(value)
@back_opacity=value
@back_opacity=0 if @back_opacity<0
@back_opacity=255 if @back_opacity>255
privRefresh
end
def contents_opacity=(value)
@contents_opacity=value
@contents_opacity=0 if @contents_opacity<0
@contents_opacity=255 if @contents_opacity>255
privRefresh
end
def tone=(value)
@tone=value
privRefresh
end
def color=(value)
@color=value
privRefresh
end
def blend_type=(value)
@blend_type=value
privRefresh
end
def flash(color,duration)
return if disposed?
@sprites.each {|sprite| sprite[1].flash(color,duration)}
end
def update
return if disposed?
mustchange=false
if @active
if @cursorblink==0
@cursoropacity-=8
@cursorblink = 1 if @cursoropacity<=128
else
@cursoropacity+=8
@cursorblink=0 if @cursoropacity>=255
end
mustchange=true if !@cursor_rect.isEmpty?
else
mustchange=true if @cursoropacity!=128
@cursoropacity=128
end
if @pause
@pauseframe=(Graphics.frame_count / 8) % 4
@pauseopacity=[@pauseopacity+64,255].min
mustchange=true
end
privRefresh if mustchange
for i in @sprites
i[1].update
end
end
private
def ensureBitmap(bitmap,dwidth,dheight)
if !bitmap||bitmap.disposed?||bitmap.width<dwidth||bitmap.height<dheight
bitmap.dispose if bitmap
bitmap=Bitmap.new([1,dwidth].max,[1,dheight].max)
end
return bitmap
end
def tileBitmap(dstbitmap,dstrect,srcbitmap,srcrect)
return if !srcbitmap || srcbitmap.disposed?
left=dstrect.x
top=dstrect.y
y=0;loop do break unless y<dstrect.height
x=0;loop do break unless x<dstrect.width
dstbitmap.blt(x+left,y+top,srcbitmap,srcrect)
x+=srcrect.width
end
y+=srcrect.height
end
end
Dodatki konieczne
UmieĹÄ w folderze Graphics/Pictures
Spoiler:
Wybierz ktĂłrÄ Ĺ z poniĹźszych strzaĹek i zapisz jako 'Pointer'
___________________________
Zapisz jako 'Timer'
___________________________
Zapisz jako 'StoneBackground'
___________________________
Zapisz jako 'FF9_MenuBar'
Dodatki opcjonalne
UmieĹÄ w folderze Graphics/System
Spoiler:
Zapisz jako 'Window'
Demo
niepotrzebne
Screenshot
Spoiler:
Instrukcja
1. Wklej oba skrypty nad "Main" w Edytorze Skryptu. Skrypt poszerzajÄ cy klasÄ 'Window' powinien byÄ na samej gĂłrze sekcji.
2. Reszta instrukcji znajduje siÄ w treĹci skryptu.
A da siÄ pod to podpiÄ Ä:
Materia System ATB
w zwiÄ zku z tym, Ĺźe zajmujÄ one zbyt duĹźo, abym napisaĹ je w wiadomoĹci zamieszczÄ je w notatniku.
Nie potrzebujÄ game end, wiÄc moĹźna to ominÄ Ä xP
________________________
(╯°□°)╯︵ ┻━┻
"A jeĹli... Boga nie ma, to co z ciebie za szatan?"
Mam problem. Gdy chce zapisaÄ to siÄ nie da, a jak chcÄ wyĹÄ czyÄ grÄ to siÄ pokazuje okno zapisu, dlaczego? czyli nie da siÄ wyĹÄ czyÄ a zapisuje siÄ wciskajÄ c koniec! Dlaczego?
________________________ JeĹli pomogĹem, daj
Spoiler:
POMĂGĹ
Uwielbiam siÄ bawiÄ na zdarzeniach w VX-ie... WiÄc jeĹli masz jakieĹ pytanie jak coĹ zrobiÄ na zdarzeniach to napisz. JeĹli bÄdÄ wiedziaĹ to odpowiem
def wait_for_result
close = false
loop do
update_basic
@battle_result.update
break if @battle_result.stop
end
loop do
update_basic
if Input.trigger?(Input::C)
close = true
end
if close
@battle_result.opacity -= 10
@battle_result.contents_opacity -= 10
@item_result.opacity -= 10
@item_result.contents_opacity -= 10
end
break if @battle_result.opacity == 0
end
end
end
class Window_Battle_Result < Window_Base
attr_accessor :stop
include Ayene
def initialize(exp, level_up)
super(0, 0, 544, 224 + WLH)
@exp = exp
@level_up = level_up
@rate = {}
@max = []
for actor in $game_party.members
lv = actor.level - @level_up[actor]
s1 = actor.gained_exp(lv, actor.exp - @exp)
s2 = actor.needed_exp(lv)
gw = [s1 * WIDTH / s2, WIDTH].min
@rate[actor] = gw
end
@stop = false
refresh
end
def refresh
self.contents.clear
for actor in $game_party.members
draw_actor_face(actor, actor.index % 2 * 260, actor.index / 2 * 96 + WLH / 2, 92)
x = 114 + actor.index % 2 * 260
y = 10 + actor.index / 2 * 96 + WLH / 2
draw_actor_name(actor, x, y)
draw_actor_level(actor, x, y + WLH * 1)
draw_actor_graphic_exp(actor, x, 10 + y + WLH * 2)
end
end
def update_bars
for actor in $game_party.members
x = 114 + actor.index % 2 * 260
y = 10 + actor.index / 2 * 96 + WLH / 2
draw_actor_graphic_exp(actor, x, 10 + y + WLH * 2)
end
end
def draw_actor_graphic_exp(actor, x, y, width = WIDTH)
bitmap = Cache.system("hp_mp_bar")
src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
self.contents.blt(x, y, bitmap, src_rect)
s1 = actor.gained_exp(actor.level, actor.exp)
s2 = actor.needed_exp(actor.level)
gw = [s1 * WIDTH / s2, WIDTH].min
gc1 = Color.new(38,101,131)
gc2 = Color.new(45,121,157)
@max.push(gw)
if @level_up[actor] > 0
w = [@rate[actor], width].min
if @rate[actor] == width
@level_up[actor] -= 1
@rate[actor] = 0
draw_icon(LEVEL_UP_ICON, 100 + x, y - WLH * 2)
self.contents.clear_rect(x, y - WLH * 1 - 10, 64, WLH)
draw_actor_level(actor, x, y - WLH * 1 - 10)
end
else
w = [@rate[actor], gw].min
if @rate[actor] == @max.max
@stop = true
end
end
self.contents.gradient_fill_rect(x+8, y+3, w, 6, gc1, gc2)
bitmap.dispose
end
def draw_actor_level(actor, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 32, WLH, Vocab::level_a)
self.contents.font.color = normal_color
self.contents.draw_text(x + 32, y, 24, WLH, actor.level - @level_up[actor], 2)
end
def update
for actor in $game_party.members
@rate[actor] += 1
end
update_bars
end
end
class Window_Result_Item < Window_Base
include Ayene
def initialize(gold, items, exp, skills)
super(0, 248, 544, 144 + WLH)
@items = items
@gold = gold
@exp = exp
@skills = skills
refresh
end
def refresh
self.contents.clear
@skills.each_with_index {|tab, i|
actor = tab[1]
skill = tab[0]
text = sprintf("%s poznaĹ - %s", actor.name, skill.name)
self.contents.draw_text(230, i * WLH, self.width, WLH, text)
break if i == 4
}
self.contents.draw_text(0, 0, self.width, WLH, DROP_TEXT)
draw_icon(EXP_ICON, 26, WLH)
self.contents.draw_text(50, WLH, self.width, WLH, @exp.to_s)
draw_icon(GOLD_ICON, 26, WLH * 2)
self.contents.draw_text(50, WLH * 2, self.width, WLH, @gold.to_s)
for i in 0...@items.size
draw_item_name(@items[i], 26, WLH * 3 + i * WLH)
end
end
end
class Game_Actor < Game_Battler
def gained_exp(current_level, current_exp)
return (current_exp - @exp_list[current_level])
end
def needed_exp(current_level)
return (@exp_list[current_level + 1] - @exp_list[current_level])
end
end
Auto walka
Prosty skrypt Sideview
Hp\Mp przeciwnikĂłw
MOG Hud
Pisanie klawiaturÄ
Yanfly Engine RD
Nazwy lokacji
UĹźyj / UsuĹ Przedmiot (Ayene)
ZwierzÄ tko (Pet)
Thomas Edison
Deriru's Simple Storage System
Dodatek do Menu Final Fantasy IX
I oczywiĹcie Menu Final Fantasy IX
W kodzie nic nie zmieniaĹem, a gdy prĂłbuje daÄ normalnie zapis sĹychaÄ buczek...
________________________ JeĹli pomogĹem, daj
Spoiler:
POMĂGĹ
Uwielbiam siÄ bawiÄ na zdarzeniach w VX-ie... WiÄc jeĹli masz jakieĹ pytanie jak coĹ zrobiÄ na zdarzeniach to napisz. JeĹli bÄdÄ wiedziaĹ to odpowiem
masz moĹźe jakiĹ pomysĹ na rozwiÄ zanie problemu Gdy daĹem nowy projekt dokĹadnie to samo...
Spoiler:
MoĹźe to wina polskiego makera?
________________________ JeĹli pomogĹem, daj
Spoiler:
POMĂGĹ
Uwielbiam siÄ bawiÄ na zdarzeniach w VX-ie... WiÄc jeĹli masz jakieĹ pytanie jak coĹ zrobiÄ na zdarzeniach to napisz. JeĹli bÄdÄ wiedziaĹ to odpowiem
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