Ogłoszenie 

Uwaga! To forum jest w trybie offline.
Wszelką pomoc uzyskasz pod adresem
forum.ultimateam.pl


Administracja Forum


Poprzedni temat «» Następny temat
Zamknięty przez: Ozzma
Sob 07 Sty, 2012 12:53
Victory screen
Autor Wiadomość
flang3r 




Preferowany:
RPG Maker VX

Pomógł: 1 raz
Dołączył: 11 Lis 2011
Posty: 51
Skąd: Katowice
Wysłany: Pon 02 Sty, 2012 17:51
Victory screen
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.
 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Pon 02 Sty, 2012 17:54
Jak mniej więcej ma wyglądać? Skoro z FF...
http://images.wikia.com/f...esults_ffix.png
http://images.wikia.com/f...ults_ffviii.png
http://images.wikia.com/f...sults_ffvii.png
________________________


 
 
 
flang3r 




Preferowany:
RPG Maker VX

Pomógł: 1 raz
Dołączył: 11 Lis 2011
Posty: 51
Skąd: Katowice
Wysłany: Pon 02 Sty, 2012 18:03
Ten z 7 (ostatni) najlepszy byłby. Najtrudniej chyba będzie te paski image based zaimplementować.
 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Pon 02 Sty, 2012 23:36
Nie dało rady tak ułożyć okienek, bo nie byłoby miejsca na otrzymane przedmioty. Zrobiłam tak, ale w razie czego można poprawić.



Wrzuć to tymczasowo do Pictures (jako 'hp_mp_bar'). W razie jak będziesz miał inną grafikę to się później jakoś dopasuje.


Spoiler:

Kod:
# by Ayene
# www.ultimateam.pl

module Ayene
  DROP_TEXT = "Drużyna zdobyła:"       
  GOLD_ICON = 205
  EXP_ICON = 204
  LEVEL_UP_ICON = 142
end

class Scene_Battle < Scene_Base
  def display_exp_and_gold   
    @message_window.visible = false
    skills = []
    level_up = []
    exp = $game_troop.exp_total
    for actor in $game_party.existing_members
      last_level = actor.level
      last_skills = actor.skills     
      actor.gain_exp(exp, true) 
      (actor.skills - last_skills).each {|skill|     
        skills.push([skill, actor])
      }   
      if last_level < actor.level
        level_up.push(actor)
      end     
    end   
    gold = $game_troop.gold_total
    $game_party.gain_gold(gold)   
    drop_items = []
    for item in $game_troop.make_drop_items
      $game_party.gain_item(item, 1)
      drop_items.push(item)
    end   
    create_result_windows(exp, gold, drop_items, skills, level_up)
    wait_for_result
    @battle_result.dispose
    @item_result.dispose
    $game_message.texts.clear
  end
 
  def display_drop_items
  end
 
  def display_level_up
  end
 
  def create_result_windows(exp, gold, items, skills, level_up)
    @battle_result = Window_Battle_Result.new(exp, level_up)   
    @item_result = Window_Result_Item.new(gold, items, exp, skills)
  end 
 
  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
 
  def draw_actor_graphic_exp(actor, x, y, width = 104)
    bitmap = Cache.picture("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 < s2 ? s1 * width / s2 : width)
    gc1 = Color.new(38,101,131)
    gc2 = Color.new(45,121,157)
    self.contents.gradient_fill_rect(x+8, y+3, gw, 6, gc1, gc2)   
  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(250, 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

________________________


 
 
 
flang3r 




Preferowany:
RPG Maker VX

Pomógł: 1 raz
Dołączył: 11 Lis 2011
Posty: 51
Skąd: Katowice
Wysłany: Wto 03 Sty, 2012 01:04
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:)
 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Wto 03 Sty, 2012 08:03
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ć :->
________________________


 
 
 
flang3r 




Preferowany:
RPG Maker VX

Pomógł: 1 raz
Dołączył: 11 Lis 2011
Posty: 51
Skąd: Katowice
Wysłany: Wto 03 Sty, 2012 16:48
Cytat:
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;)
 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Wto 03 Sty, 2012 20:40
Sprawdź teraz:
Spoiler:

Kod:
# by Ayene
# www.ultimateam.pl

module Ayene
  DROP_TEXT = "Drużyna zdobyła:"       
  GOLD_ICON = 205
  EXP_ICON = 204
  LEVEL_UP_ICON = 142
  WIDTH = 104
end

class Scene_Battle < Scene_Base
  def display_exp_and_gold   
    @message_window.visible = false
    skills = []
    level_up = {}
    exp = $game_troop.exp_total
    for actor in $game_party.existing_members
      last_level = actor.level
      last_skills = actor.skills     
      actor.gain_exp(exp, true) 
      (actor.skills - last_skills).each {|skill|     
        skills.push([skill, actor])
      }       
      if last_level < actor.level
        level_up[actor] = actor.level - last_level
      else
        level_up[actor] = 0
      end     
    end   
    gold = $game_troop.gold_total
    $game_party.gain_gold(gold)   
    drop_items = []
    for item in $game_troop.make_drop_items
      $game_party.gain_item(item, 1)
      drop_items.push(item)
    end   
    create_result_windows(exp, gold, drop_items, skills, level_up)
    wait_for_result
    @battle_result.dispose
    @item_result.dispose
    $game_message.texts.clear
  end
 
  def display_drop_items
  end
 
  def display_level_up
  end
 
  def create_result_windows(exp, gold, items, skills, level_up)
    @battle_result = Window_Battle_Result.new(exp, level_up)   
    @item_result = Window_Result_Item.new(gold, items, exp, skills)
  end 
 
  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' :->
________________________


 
 
 
AI-RPG


Dołączył: 03 Cze 2010
Posty: 152
Wysłany: Wto 03 Sty, 2012 21:03
Gratuluje skilla. Przez was chyba zdradzę 2k3 XD
To się może przydać. Mi się podoba.
 
 
Rouch 



Pomógł: 1 raz
Dołączył: 02 Sty 2012
Posty: 21
Wysłany: Sro 04 Sty, 2012 11:17
Bajerancka animacja. :shock: mogę też tego użyć? :*

@edit
A dało by radę dać jakiś SE, gdy wchodzi poziom?
 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Sro 04 Sty, 2012 11:37
Nikt przecież Tobie nie zabroni :roll: Cieszę się, że przypadła do gustu.

Co do dźwięku, znajdź linijkę:
Kod:
WIDTH = 104

i dodaj po niej:
Kod:
LEVEL_UP_SE = "Decision2"

następnie znajdź:
Kod:
draw_actor_level(actor, x, y - WLH * 1 - 10)

i po niej dodaj:
Kod:
RPG::SE.new(LEVEL_UP_SE, 100, 100).play
________________________


 
 
 
flang3r 




Preferowany:
RPG Maker VX

Pomógł: 1 raz
Dołączył: 11 Lis 2011
Posty: 51
Skąd: Katowice
Wysłany: Sro 04 Sty, 2012 20:02
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...
 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Sro 04 Sty, 2012 20:08
A jaki masz system walki?
________________________


 
 
 
flang3r 




Preferowany:
RPG Maker VX

Pomógł: 1 raz
Dołączył: 11 Lis 2011
Posty: 51
Skąd: Katowice
Wysłany: Sro 04 Sty, 2012 20:25
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.
 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Sro 04 Sty, 2012 20:35
A sprawdzałeś na czystym projekcie? Może wrzuć jakieś demko z tym problemem np. na mediafire.com. Wtedy zobaczę, co może powodować problem.
________________________


 
 
 
Wyświetl posty z ostatnich:   
Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi
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
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group | Template Klam by Ayene