Witam.
Mam prośbę do skrypterów. Potrzebuję tzw victory screen (coś jak z final fantasy).
Co powinien zawierać? W zasadzie podstawy:)
- avatar i nazwę bohatera (paski hp i mp niekoniecznie) Ułożenie bohaterów podobnie jak w screenie opcji, czyli w pionie.
- pasek exp - miło by było gdyby był image based, czyli że wrzucam swoją grafikę, w ostateczności defaultowy gauge z vx
- informację o aktualnym poziomie
- dodatkowo jeśli jest wykonalne to miłoby było gdyby pokazywał otrzymane przedmioty wraz z ikonką przedmiotu.
def wait_for_result
close = false
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
include Ayene
def initialize(exp, level_up)
super(0, 0, 544, 224 + WLH)
@exp = exp
@level_up = level_up
refresh
end
def refresh
self.contents.clear
@item_max = $game_party.members.size
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)
if @level_up.include?(actor)
draw_icon(LEVEL_UP_ICON, 100 + x, y + WLH)
end
end
end
Aye, póki co nie chciało mi zadziałać. Coś mi się stało z projektem że nie potrafi importowanych grafik ani dżwięków znaleść. Zawsze coś zgubi. Nie wiem ock.
edit:
problem rozwiązany, nie wiem co było przyczyną, już się wszystko naprawiło. Jutro potestuję własne grafiki, fajnie byłoby jakbym te obrazki mógł wrzucać do foldeu graphics/system, bo wszystkie obrazkowe modyfikacje umieściłem tam, także byłoby mi po prostu wygodniej;)
Ale screen jak najbardziej mi się podoba:)
Wystarczy, że zamienisz fragment:
Kod:
bitmap = Cache.picture("hp_mp_bar")
na:
Kod:
bitmap = Cache.system("hp_mp_bar")
W razie problemów, daj znać
Tak się właśnie domyślałem, że to ta linijka, ale wolałem niczego nie ruszać na ślepo;) A dałoby radę, żeby ten pasek nie był statyczny tylko dynamiczny, tzn że nabija zdobyte doświadczenie na tym screenie?? Coś jak w ff??
Ja posprawdzam z innych victory screenów linijki i może sobie z tym jakoś poradzę, ale jeśli byłabyś w stanie mnie chociaż nakierować jak to zrobić to będę wdzięczny;)
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
Zalecane dokładne testy, bo nie wiem, czy animacja dobrze 'nabija exp'
Animacja działą bardzo fajnie, zaimplementowałem sobie nawet też te dodatki dźwiękowe;)
Ale...., za drugim razem, kiedy pojawia się screen, to nie można nic zrobić. Nie wychodzi z walki. Testuję dalej...
Domyślny, mam tylko paski hp i mp przeciwnika ozzmy, image based hp i burst gauge, czyli taki dodatkowy pasek ala overdrive. Może być wina tego dźwięku level up. Dzieje się tak kiedy wyskoczy mi level up.
edit:
Przeprowadziłęm kilkadziesiąt walk testowych i zjawisko występuje losowo, tzn raz na kilka odpaleń gry takie coś ma miejsce a czasem działa bez zarzutu.
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