UltimaForum

Skrypty [VX] - Okno HP MP EXP

serb7 - Czw 05 Lis, 2009 15:12
Temat postu: Okno HP MP EXP
Oto skrypt który daje Okno Hp Mp Exp . Myśle że niektórym może się przydać ;-)

Spoiler:

Kod:
################################################################################
#                                                                              #
#                      ~~~~~ Copyright 2009 SojaBird ~~~~~                     #
#                                                                              #
################################################################################
# Tłumaczenie i korekta by Ayene
#
# By wyświetlić/ukryć HUD, wywołaj skrypt "hud"
# By wyświetlić/ukryć HUD, wywołaj skrypt "hud(true)" lub "hud(false)"

module AYENE
  # 0 - lewy górny róg
  # 1 - lewy dolny róg
  # 2 - prawy górny róg
  # 3 - prawy dolny róg
  POŁOŻENIE_HUD = 2
end

module HUD_HP_MP_EXP_NAME_FACE_LEVEL
  HUD_WIDTH = 152   # Szerokość okna
  FACE_OPACITY = 50 # przezroczystość twarzy bohatera [0~255]

  BG_DISPLAY = true # Ukrywa / wyświetla tło [true/false]

  EXP_NAME = "PD" # Tekst wyświetlany jako punkty doświadczenia
 
  ACTOR_ID = 0 # ID bohatera, którego statystyki mają się wyświetlać
               #(actor1=0, actor2=1...actorN=N-1)
 
  HIDE = true # Ukryj okno, gdy bohater jest za nim [true/false]
  OPACITY = 100 # Przezroczystość, gdy ukryty [0~255]
 
  HUD_START_DISPLAY = true # Wyświetlanie HUD od początku gry [true/false]
 
  CYCLE = true # Włącza / wyłącza zmianę bohaterów w drużynie za pomocą L&R
end

################################################################################
def hud(arg = nil)
  $game_system.hud_display = !$game_system.hud_display if arg == nil
  $game_system.hud_display = arg if arg != nil
end
################################################################################
class Window_HUD_HP_MP_EXP_NAME_FACE_LEVEL < Window_Base
  include HUD_HP_MP_EXP_NAME_FACE_LEVEL
 
  attr_reader :index
 
  def initialize(index)
    @index = index
    @height = WLH * 4 + 32
    case AYENE::POŁOŻENIE_HUD
      when 0
       super(0, 0, HUD_WIDTH, @height)
      when 1
       super(0, 416-@height, HUD_WIDTH, @height)
      when 2
       super(544-HUD_WIDTH, 0, HUD_WIDTH, @height)
      when 3
       super(544-HUD_WIDTH, 416-@height, HUD_WIDTH, @height)
    end     
    self.visible = $game_system.hud_display
    self.opacity = OPACITY
    self.opacity = 0 if !BG_DISPLAY
    @actor = $game_party.members[@index]
    @width = HUD_WIDTH - 32
    hide_status
    refresh
  end
 
  def refresh
    contents.clear
    @hp = @actor.hp
    @mp = @actor.mp
    @exp = @actor.exp
    @name = @actor.name
    @level = @actor.level
    @face = [@actor.face_name, @actor.face_index]
    draw_actor_face_picture(@actor, 0, 0, FACE_OPACITY)
    draw_actor_name_and_level(@actor, 0, WLH * 0)
    draw_actor_hp(@actor, 0, WLH * 1, @width)
    draw_actor_mp(@actor, 0, WLH * 2, @width)
    draw_actor_exp_HUD(@actor, 0, WLH * 3, @width)
  end
 
  def hide_status
    if HIDE == true
      if $game_player.screen_x + 16 > self.x and
      $game_player.screen_y + 4 > self.y and
      $game_player.screen_x - 16 < self.x + self.width and
      $game_player.screen_y - 28 < self.y + self.height
        self.opacity = OPACITY if BG_DISPLAY
        self.contents_opacity = OPACITY
      else
        self.opacity = 255 if BG_DISPLAY
        self.contents_opacity = 255
      end
    end
  end
 
  def draw_actor_face_picture(actor, x, y, opacity, size = 94)
    bitmap = Cache.face(actor.face_name)
    rect = Rect.new(0, 0, 0, 0)
    rect.x = actor.face_index % 4 * 96 + (96 - size) / 2
    rect.y = actor.face_index / 4 * 96 + (96 - size) / 2
    rect.width = size
    rect.height = size
    self.contents.blt(x, y, bitmap, rect, opacity)
    bitmap.dispose
  end
 
  def draw_actor_name_and_level(actor, x, y)
    self.contents.font.color = hp_color(actor)
    self.contents.draw_text(x, y, @width - 20 - 24, WLH, actor.name)
    self.contents.font.color = system_color
    x = @width / 2
    width = (@width.to_f / 2) / (32 + 24)
    self.contents.draw_text(x, y, width * 32, WLH, Vocab::level_a)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + width * 32, y, width * 24, WLH, actor.level, 2)
  end
 
  def draw_actor_exp_HUD(actor, x, y, width)
    s1 = actor.exp_s
    s2 = actor.next_rest_exp_s + s1
    if s1.is_a? String or s2.is_a? String
      s1 = actor.exp
      s2 = actor.exp
    end
    draw_actor_exp_gauge(actor, x, y, s1, s2, width)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 30, WLH, EXP_NAME)
    self.contents.font.color = normal_color
    last_font_size = self.contents.font.size
    xr = x + width   
    self.contents.draw_text(xr - 120, y, 120, WLH, s1, 2)   
  end
 
  def draw_actor_exp_gauge(actor, x, y, s1, s2, width)
    gw = width * s1 / s2
    gc1 = text_color(31)
    gc2 = text_color(27)
    self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
    self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
  end
 
  def update
    self.visible = $game_system.hud_display
    return if !self.visible
    if @hp != @actor.hp or
      @mp != @actor.mp or
      @exp != @actor.exp or
      @name != @actor.name or
      @level != @actor.level or
      @face != [@actor.face_name, @actor.face_index]
      refresh
    end
    hide_status
  end
end

#------------------------------------------------------------
# * Scene_Map: Attach HUD to map
#------------------------------------------------------------
class Scene_Map < Scene_Base
  alias start_hmexp_name_face_lvl start
  alias terminate_hmexp_name_face_lvl terminate
  alias update_hmexp_name_face_lvl update
  def start
    start_hmexp_name_face_lvl
    @index = HUD_HP_MP_EXP_NAME_FACE_LEVEL::ACTOR_ID
    new_hud
   
  end
  def terminate
    @hp_mp_exp_name_face_hud.dispose
    terminate_hmexp_name_face_lvl
  end
  def update
    update_hmexp_name_face_lvl
    @hp_mp_exp_name_face_hud.update
    return if !HUD_HP_MP_EXP_NAME_FACE_LEVEL::CYCLE
    return if !@hp_mp_exp_name_face_hud.visible
    if Input.trigger?(Input::R)
      if @index == $game_party.members.size - 1
        @index = 0
      else
        @index += 1
      end
    elsif Input.trigger?(Input::L)
      if @index == 0
        @index = $game_party.members.size - 1
      else
        @index -= 1
      end
    end
    new_hud if @index != @hp_mp_exp_name_face_hud.index
  end
 
  def new_hud
    @hp_mp_exp_name_face_hud.dispose if !@hp_mp_exp_name_face_hud.nil?
    @hp_mp_exp_name_face_hud = Window_HUD_HP_MP_EXP_NAME_FACE_LEVEL.new(@index)
  end
end

#------------------------------------------------------------
# * Game_System: Check for display
#------------------------------------------------------------
class Game_System
  alias hud_initialize initialize
  attr_accessor :hud_display
  def initialize
    hud_initialize
    @hud_display = HUD_HP_MP_EXP_NAME_FACE_LEVEL::HUD_START_DISPLAY
  end
end


Azsak von Triger - Czw 05 Lis, 2009 17:20

Cześć :!:
W mojej grze używam ten sam HUD :!:
Tylko ,że zapomniałeś dodać screena a mało kto lubi ściągać na ciemno :-) .
A więc dodaje SCREENA:

Cyklop - Czw 05 Lis, 2009 17:42

Fajne choć przydałoby się nieco poprawić je graficznie żeby tekstu nie zwężało. Ale i tak wielki plus :)
Ayene - Wto 01 Gru, 2009 08:22

Postanowiłam nieco poprawić skrypt zamieszczony przez serb7. Dodałam opcję zmiany położenia HUD - wystarczy zmienić cyfrę przy POŁOŻENIE_HUD. Reszta informacji w skrypcie.

A to skrypt:
Spoiler:

Kod:
################################################################################
#                                                                              #
#                      ~~~~~ Copyright 2009 SojaBird ~~~~~                     #
#                                                                              #
################################################################################
# Tłumaczenie i korekta by Ayene
#
# By wyświetlić/ukryć HUD, wywołaj skrypt "hud"
# By wyświetlić/ukryć HUD, wywołaj skrypt "hud(true)" lub "hud(false)"

module AYENE
  # 0 - lewy górny róg
  # 1 - lewy dolny róg
  # 2 - prawy górny róg
  # 3 - prawy dolny róg
  POŁOŻENIE_HUD = 2 
end

module HUD_HP_MP_EXP_NAME_FACE_LEVEL
  HUD_WIDTH = 152   # Szerokość okna
  FACE_OPACITY = 50 # przezroczystość twarzy bohatera [0~255]

  BG_DISPLAY = true # Ukrywa / wyświetla tło [true/false]

  EXP_NAME = "PD" # Tekst wyświetlany jako punkty doświadczenia
 
  ACTOR_ID = 0 # ID bohatera, którego statystyki mają się wyświetlać
               #(actor1=0, actor2=1...actorN=N-1)
 
  HIDE = true # Ukryj okno, gdy bohater jest za nim [true/false]
  OPACITY = 100 # Przezroczystość, gdy ukryty [0~255]
 
  HUD_START_DISPLAY = true # Wyświetlanie HUD od początku gry [true/false]
 
  CYCLE = true # Włącza / wyłącza zmianę bohaterów w drużynie za pomocą L&R
end

################################################################################
def hud(arg = nil)
  $game_system.hud_display = !$game_system.hud_display if arg == nil
  $game_system.hud_display = arg if arg != nil
end
################################################################################
class Window_HUD_HP_MP_EXP_NAME_FACE_LEVEL < Window_Base
  include HUD_HP_MP_EXP_NAME_FACE_LEVEL
 
  attr_reader :index
 
  def initialize(index)
    @index = index
    @height = WLH * 4 + 32
    case AYENE::POŁOŻENIE_HUD
      when 0
       super(0, 0, HUD_WIDTH, @height)
      when 1
       super(0, 416-@height, HUD_WIDTH, @height)
      when 2
       super(544-HUD_WIDTH, 0, HUD_WIDTH, @height)
      when 3
       super(544-HUD_WIDTH, 416-@height, HUD_WIDTH, @height)
    end     
    self.visible = $game_system.hud_display
    self.opacity = OPACITY
    self.opacity = 0 if !BG_DISPLAY
    @actor = $game_party.members[@index]
    @width = HUD_WIDTH - 32
    hide_status
    refresh
  end
 
  def refresh
    contents.clear
    @hp = @actor.hp
    @mp = @actor.mp
    @exp = @actor.exp
    @name = @actor.name
    @level = @actor.level
    @face = [@actor.face_name, @actor.face_index]
    draw_actor_face_picture(@actor, 0, 0, FACE_OPACITY)
    draw_actor_name_and_level(@actor, 0, WLH * 0)
    draw_actor_hp(@actor, 0, WLH * 1, @width)
    draw_actor_mp(@actor, 0, WLH * 2, @width)
    draw_actor_exp_HUD(@actor, 0, WLH * 3, @width)
  end
 
  def hide_status
    if HIDE == true
      if $game_player.screen_x + 16 > self.x and
      $game_player.screen_y + 4 > self.y and
      $game_player.screen_x - 16 < self.x + self.width and
      $game_player.screen_y - 28 < self.y + self.height
        self.opacity = OPACITY if BG_DISPLAY
        self.contents_opacity = OPACITY
      else
        self.opacity = 255 if BG_DISPLAY
        self.contents_opacity = 255
      end
    end
  end
 
  def draw_actor_face_picture(actor, x, y, opacity, size = 94)
    bitmap = Cache.face(actor.face_name)
    rect = Rect.new(0, 0, 0, 0)
    rect.x = actor.face_index % 4 * 96 + (96 - size) / 2
    rect.y = actor.face_index / 4 * 96 + (96 - size) / 2
    rect.width = size
    rect.height = size
    self.contents.blt(x, y, bitmap, rect, opacity)
    bitmap.dispose
  end
 
  def draw_actor_name_and_level(actor, x, y)
    self.contents.font.color = hp_color(actor)
    self.contents.draw_text(x, y, @width - 20 - 24, WLH, actor.name)
    self.contents.font.color = system_color
    x = @width / 2
    width = (@width.to_f / 2) / (32 + 24)
    self.contents.draw_text(x, y, width * 32, WLH, Vocab::level_a)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + width * 32, y, width * 24, WLH, actor.level, 2)
  end
 
  def draw_actor_exp_HUD(actor, x, y, width)
    s1 = actor.exp_s
    s2 = actor.next_rest_exp_s + s1
    if s1.is_a? String or s2.is_a? String
      s1 = actor.exp
      s2 = actor.exp
    end
    draw_actor_exp_gauge(actor, x, y, s1, s2, width)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 30, WLH, EXP_NAME)
    self.contents.font.color = normal_color
    last_font_size = self.contents.font.size
    xr = x + width   
    self.contents.draw_text(xr - 120, y, 120, WLH, s1, 2)   
  end
 
  def draw_actor_exp_gauge(actor, x, y, s1, s2, width)
    gw = width * s1 / s2
    gc1 = text_color(31)
    gc2 = text_color(27)
    self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
    self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
  end
 
  def update
    self.visible = $game_system.hud_display
    return if !self.visible
    if @hp != @actor.hp or
      @mp != @actor.mp or
      @exp != @actor.exp or
      @name != @actor.name or
      @level != @actor.level or
      @face != [@actor.face_name, @actor.face_index]
      refresh
    end
    hide_status
  end
end

#------------------------------------------------------------
# * Scene_Map: Attach HUD to map
#------------------------------------------------------------
class Scene_Map < Scene_Base
  alias start_hmexp_name_face_lvl start
  alias terminate_hmexp_name_face_lvl terminate
  alias update_hmexp_name_face_lvl update
  def start
    start_hmexp_name_face_lvl
    @index = HUD_HP_MP_EXP_NAME_FACE_LEVEL::ACTOR_ID
    new_hud
   
  end
  def terminate
    @hp_mp_exp_name_face_hud.dispose
    terminate_hmexp_name_face_lvl
  end
  def update
    update_hmexp_name_face_lvl
    @hp_mp_exp_name_face_hud.update
    return if !HUD_HP_MP_EXP_NAME_FACE_LEVEL::CYCLE
    return if !@hp_mp_exp_name_face_hud.visible
    if Input.trigger?(Input::R)
      if @index == $game_party.members.size - 1
        @index = 0
      else
        @index += 1
      end
    elsif Input.trigger?(Input::L)
      if @index == 0
        @index = $game_party.members.size - 1
      else
        @index -= 1
      end
    end
    new_hud if @index != @hp_mp_exp_name_face_hud.index
  end
 
  def new_hud
    @hp_mp_exp_name_face_hud.dispose if !@hp_mp_exp_name_face_hud.nil?
    @hp_mp_exp_name_face_hud = Window_HUD_HP_MP_EXP_NAME_FACE_LEVEL.new(@index)
  end
end

#------------------------------------------------------------
# * Game_System: Check for display
#------------------------------------------------------------
class Game_System
  alias hud_initialize initialize
  attr_accessor :hud_display
  def initialize
    hud_initialize
    @hud_display = HUD_HP_MP_EXP_NAME_FACE_LEVEL::HUD_START_DISPLAY
  end
end



A tu w razie czego screenshot:
Spoiler:


Morhyg - Pią 19 Lut, 2010 18:29

Dobra a mam jedno pytanie bo ja jestem nowy na forum. Jak to sciągnąć?
Ayene - Pią 19 Lut, 2010 18:31

U góry w spoilerze znajduje się kod, który należy skopiować i wkleić według załączonej instrukcji :arrow: http://www.ultimateam.pl/viewtopic.php?t=1896
radek02 - Pią 19 Lut, 2010 18:32

Morhyg :
skopiuj skrypt ;-)

Sprocik - Czw 03 Cze, 2010 09:22

witam
dodałem właśnie ten skrypt ale mi się coś nie pokazuje ten HUD co mam robić ?

FilipsO - Czw 03 Cze, 2010 10:25

Ja mam problem: chcę aby HUD było w lewym dolnym rogu,
ale nie umiem zmienić położenia. Proszę o pomoc.
(nie mówcie tylko abym zmienił cyrfrę przy Położenie_Hud, bo nie umiem)

Ayene - Czw 03 Cze, 2010 11:00

Na samej górze skryptu masz dodane:
Kod:
module AYENE
  # 0 - lewy górny róg
  # 1 - lewy dolny róg
  # 2 - prawy górny róg
  # 3 - prawy dolny róg
  POŁOŻENIE_HUD = 2
end


Wystarczy że zmienisz cyferkę przy:
Kod:
POŁOŻENIE_HUD = 2

FilipsO - Czw 03 Cze, 2010 17:53

Wiem, ale mi się to nie zmienia.
Gra się uruchamia, wszystko chodzi,
ale położenie się nie zmienia.

CreeperCrisis - Sob 05 Cze, 2010 10:08

Sprocik, na samej górze jest fragment:
Kod:
# By wyświetlić/ukryć HUD, wywołaj skrypt "hud(true)" lub "hud(false)"

Karos - Sob 26 Cze, 2010 18:59

witam wszystkich. jestem poczatkujacy w tych sprawach i mam drobny problem, a mianowicie nie wiem jak w RPG MAKER VX zrobic aby za pomocą klawisza X ( w grze A) wyswietlala sie minimapka, a po ponownym wcisnieciu aby sie wylaczala. prosze o szybka odpowiedz
Ayene - Sob 26 Cze, 2010 20:07

Najszybciej będzie jak znajdziesz:
Kod:
if Input.trigger?(Input::R)

i dodasz przed tym:
Kod:
if Input.trigger?(Input::X)
      if @hp_mp_exp_name_face_hud.visible
        @hp_mp_exp_name_face_hud.visible = false
      else
        @hp_mp_exp_name_face_hud.visible = true
      end     
    end

oraz znajdziesz i postawisz znaczek "#" na początku poniższych linijek:
Kod:
return if !@hp_mp_exp_name_face_hud.visible

Kod:
self.visible = $game_system.hud_display

Ostania pojawia się dwa razy w skrypcie.
Powinno działać.

Karos - Nie 27 Cze, 2010 10:59

dzieki wielkie, wszystko dziala :)
kongi93 - Czw 08 Lip, 2010 22:09

Jestem nowy i mam pytanie czy da się zrobić żeby Okno Hp Mp Exp pokazywało się na rpg maker xp?
Ulvran - Czw 08 Lip, 2010 22:10

Od RPG Makera XP jest osobny dział ;)
masz tu linka na HUD do XP'ka
http://www.ultimateam.pl/viewtopic.php?t=2383

kongi93 - Pią 09 Lip, 2010 09:56

A. Dzięki za pomoc.
PtasiAGrypAA - Sro 25 Sie, 2010 22:37

A wiec ja mam prosbe z innej manki :mrgreen: otoz nie moge obczaic jak tworzyc misje w stylu -Misja 1 -idz i zaciukaj 4pelzaki - Misja 2 idz i zaciukaj 4 pszczoly :lol: blagam pomoz ktos bo sie z tym mecze... z gory wielkie T.H.X.
cj2 - Czw 26 Sie, 2010 07:54

Po zabiciu pszczoły czy pełzka dodaj 1 do zmiennej, a w innym warunku że równe 4

Lub

Wszystko po ustalonej drodze.

PtasiAGrypAA - Pią 10 Wrz, 2010 19:49

jajco2 napisał/a:
Po zabiciu pszczoły czy pełzka dodaj 1 do zmiennej, a w innym warunku że równe 4

Lub

Wszystko po ustalonej drodze.
Dzieki ze wogole odpowiedziales , ale jesli mozna by troche jasniej dla nowicjuszy :lol:
Tjef - Sob 02 Paź, 2010 10:17

Mam mały problem z HUDEM. Znaczy się - wszystko działa, ale zamiast Face Bohatera chciałbym jego character. ;-(
Ayene - Sob 02 Paź, 2010 19:07

Znajdź w skrypcie:
Kod:
draw_actor_face_picture(@actor, 0, 0, FACE_OPACITY)

i zamień na:
Kod:
draw_actor_graphic(@actor, 0, 0)

Tjef - Sob 02 Paź, 2010 20:05

Dzięki Ayene :)
Marvolo37 - Pon 11 Paź, 2010 20:12

Yo?
Itaki - Pon 18 Paź, 2010 18:28

Fajny skrypt może się przyda w moim projekcie
PaKiTos - Sro 20 Paź, 2010 15:29

Fajny HUD, przydaje się na ABSy!
Angius - Pon 08 Lis, 2010 18:14

A ja mam pytanko... Czy dałoby się maksymalnie zminimalizować tego HUD-a?
W sensie, same paski, bez żadnych napisów. I kolory jakoś zmienić (MP niebieskie, HP czerwone, EXP żółty)?

Ayene - Pon 08 Lis, 2010 22:01

Sprawdź to:
Spoiler:

Kod:
################################################################################
#                                                                              #
#                      ~~~~~ Copyright 2009 SojaBird ~~~~~                     #
#                                                                              #
################################################################################
# Tłumaczenie i korekta by Ayene
#
# By wyświetlić/ukryć HUD, wywołaj skrypt "hud"
# By wyświetlić/ukryć HUD, wywołaj skrypt "hud(true)" lub "hud(false)"

module AYENE
  # 0 - lewy górny róg
  # 1 - lewy dolny róg
  # 2 - prawy górny róg
  # 3 - prawy dolny róg
  POŁOŻENIE_HUD = 2
  GRADIENT_HP = [Color.new(255,0,0), Color.new(252,111,111)]
  GRADIENT_MP = [Color.new(0,18,255), Color.new(97,108,255)]
  GRADIENT_EXP = [Color.new(255,246,0), Color.new(253,249,146)]
end

module HUD_HP_MP_EXP_NAME_FACE_LEVEL
  HUD_WIDTH = 152   # Szerokość okna
  FACE_OPACITY = 50 # przezroczystość twarzy bohatera [0~255]

  BG_DISPLAY = true # Ukrywa / wyświetla tło [true/false]

  EXP_NAME = "PD" # Tekst wyświetlany jako punkty doświadczenia
 
  ACTOR_ID = 0 # ID bohatera, którego statystyki mają się wyświetlać
               #(actor1=0, actor2=1...actorN=N-1)
 
  HIDE = true # Ukryj okno, gdy bohater jest za nim [true/false]
  OPACITY = 100 # Przezroczystość, gdy ukryty [0~255]
 
  HUD_START_DISPLAY = true # Wyświetlanie HUD od początku gry [true/false]
 
  CYCLE = true # Włącza / wyłącza zmianę bohaterów w drużynie za pomocą L&R
end

################################################################################
def hud(arg = nil)
  $game_system.hud_display = !$game_system.hud_display if arg == nil
  $game_system.hud_display = arg if arg != nil
end
################################################################################
class Window_HUD_HP_MP_EXP_NAME_FACE_LEVEL < Window_Base
  include HUD_HP_MP_EXP_NAME_FACE_LEVEL
 
  attr_reader :index
 
  def initialize(index)
    @index = index
    @height = WLH * 4 + 32
    case AYENE::POŁOŻENIE_HUD
      when 0
       super(0, 0, HUD_WIDTH, @height)
      when 1
       super(0, 416-@height, HUD_WIDTH, @height)
      when 2
       super(544-HUD_WIDTH, 0, HUD_WIDTH, @height)
      when 3
       super(544-HUD_WIDTH, 416-@height, HUD_WIDTH, @height)
    end     
    self.visible = $game_system.hud_display
    self.opacity = OPACITY
    self.opacity = 0 if !BG_DISPLAY
    @actor = $game_party.members[@index]
    @width = HUD_WIDTH - 32
    hide_status
    refresh
  end
 
  def refresh
    contents.clear
    @hp = @actor.hp
    @mp = @actor.mp
    @exp = @actor.exp
    @name = @actor.name
    @level = @actor.level
    @face = [@actor.face_name, @actor.face_index]
    draw_actor_face_picture(@actor, 0, 0, FACE_OPACITY)
    draw_actor_name_and_level(@actor, 0, WLH * 0)
    draw_actor_hp_HUD(@actor, 0, WLH * 1, @width)
    draw_actor_mp_HUD(@actor, 0, WLH * 2, @width)
    draw_actor_exp_HUD(@actor, 0, WLH * 3, @width)   
  end
 
  def hide_status
    if HIDE == true
      if $game_player.screen_x + 16 > self.x and
      $game_player.screen_y + 4 > self.y and
      $game_player.screen_x - 16 < self.x + self.width and
      $game_player.screen_y - 28 < self.y + self.height
        self.opacity = OPACITY if BG_DISPLAY
        self.contents_opacity = OPACITY
      else
        self.opacity = 255 if BG_DISPLAY
        self.contents_opacity = 255
      end
    end
  end
 
  def draw_actor_face_picture(actor, x, y, opacity, size = 94)
    bitmap = Cache.face(actor.face_name)
    rect = Rect.new(0, 0, 0, 0)
    rect.x = actor.face_index % 4 * 96 + (96 - size) / 2
    rect.y = actor.face_index / 4 * 96 + (96 - size) / 2
    rect.width = size
    rect.height = size
    self.contents.blt(x, y, bitmap, rect, opacity)
    bitmap.dispose
  end
 
  def draw_actor_name_and_level(actor, x, y)
    self.contents.font.color = hp_color(actor)
    self.contents.draw_text(x, y, @width - 20 - 24, WLH, actor.name)
    self.contents.font.color = system_color
    x = @width / 2
    width = (@width.to_f / 2) / (32 + 24)
    self.contents.draw_text(x, y, width * 32, WLH, Vocab::level_a)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + width * 32, y, width * 24, WLH, actor.level, 2)
  end
 
  def draw_actor_hp_HUD(actor, x, y, width = 120)
    gw = width * actor.hp / actor.maxhp
    gc1 = AYENE::GRADIENT_HP[0]
    gc2 = AYENE::GRADIENT_HP[1]
    self.contents.fill_rect(x, y + WLH - 13, width, 8, Color.new(0,0,0))
    self.contents.fill_rect(x + 1, y + WLH - 12, width - 2, 6, gauge_back_color)
    self.contents.gradient_fill_rect(x + 1, y + WLH - 12, gw - 2, 6, gc1, gc2)
  end
 
  def draw_actor_mp_HUD(actor, x, y, width = 120)
    gw = width * actor.mp / [actor.maxmp, 1].max
    gc1 = AYENE::GRADIENT_MP[0]
    gc2 = AYENE::GRADIENT_MP[1]
    self.contents.fill_rect(x, y + WLH - 13, width, 8, Color.new(0,0,0))
    self.contents.fill_rect(x + 1, y + WLH - 12, width - 2, 6, gauge_back_color)
    self.contents.gradient_fill_rect(x + 1, y + WLH - 12, gw - 2, 6, gc1, gc2)
  end 
 
  def draw_actor_exp_HUD(actor, x, y, width = 120)
    s1 = actor.gained_exp(actor.level, actor.exp)
    s2 = actor.needed_exp(actor.level)
    gw = (s1 < s2 ? s1 * width / s2 : width)
    gc1 = AYENE::GRADIENT_EXP[0]
    gc2 = AYENE::GRADIENT_EXP[1]
    self.contents.fill_rect(x, y + WLH - 13, width, 8, Color.new(0,0,0))
    self.contents.fill_rect(x + 1, y + WLH - 12, width - 2, 6, gauge_back_color)
    self.contents.gradient_fill_rect(x + 1, y + WLH - 12, gw - 2, 6, gc1, gc2)   
  end 
 
  def update
    self.visible = $game_system.hud_display
    return if !self.visible
    if @hp != @actor.hp or
      @mp != @actor.mp or
      @exp != @actor.exp or
      @name != @actor.name or
      @level != @actor.level or
      @face != [@actor.face_name, @actor.face_index]
      refresh
    end
    hide_status
  end
end

#------------------------------------------------------------
# * Scene_Map: Attach HUD to map
#------------------------------------------------------------
class Scene_Map < Scene_Base
  alias start_hmexp_name_face_lvl start
  alias terminate_hmexp_name_face_lvl terminate
  alias update_hmexp_name_face_lvl update
  def start
    start_hmexp_name_face_lvl
    @index = HUD_HP_MP_EXP_NAME_FACE_LEVEL::ACTOR_ID
    new_hud
   
  end
  def terminate
    @hp_mp_exp_name_face_hud.dispose
    terminate_hmexp_name_face_lvl
  end
  def update
    update_hmexp_name_face_lvl
    @hp_mp_exp_name_face_hud.update
    return if !HUD_HP_MP_EXP_NAME_FACE_LEVEL::CYCLE
    return if !@hp_mp_exp_name_face_hud.visible
    if Input.trigger?(Input::R)
      if @index == $game_party.members.size - 1
        @index = 0
      else
        @index += 1
      end
    elsif Input.trigger?(Input::L)
      if @index == 0
        @index = $game_party.members.size - 1
      else
        @index -= 1
      end
    end
    new_hud if @index != @hp_mp_exp_name_face_hud.index
  end
 
  def new_hud
    @hp_mp_exp_name_face_hud.dispose if !@hp_mp_exp_name_face_hud.nil?
    @hp_mp_exp_name_face_hud = Window_HUD_HP_MP_EXP_NAME_FACE_LEVEL.new(@index)
  end
end

#------------------------------------------------------------
# * Game_System: Check for display
#------------------------------------------------------------
class Game_System
  alias hud_initialize initialize
  attr_accessor :hud_display
  def initialize
    hud_initialize
    @hud_display = HUD_HP_MP_EXP_NAME_FACE_LEVEL::HUD_START_DISPLAY
  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


Jeśli nie chcesz imienia i poziomu usuń linijkę:
Kod:
draw_actor_name_and_level(@actor, 0, WLH * 0)

Angius - Wto 09 Lis, 2010 18:08

Dzięki bardzo :)
Avara - Czw 16 Gru, 2010 13:10

Po dodaniu tego skryptu do gry przy próbie jej uruchomienia wyskakuje mi błąd



Pomógłby mi ktoś zrozumieć dlaczego?

Ayene - Czw 16 Gru, 2010 13:14

A masz w ogóle jakiegoś bohatera w drużynie?
Avara - Czw 16 Gru, 2010 14:51

Tak jednego
Ayene - Czw 16 Gru, 2010 14:57

A próbowałaś umieścić skrypt w czystym projekcie? Spróbuj, może to problem kompatybilności. Ewentualnie możesz spakować swój projekt, shostować go na www.mediafire.com i wysłać mi link na PW. Zobaczę wtedy, co w nim jest "nie tak".
Avara - Czw 16 Gru, 2010 15:43

W nowym projekcie jest wszystko ok. W tej chwili bawię się różnymi skryptami i któryś musi się najwyraźniej z tym kłócić. Sprawdzę z którym i zobaczymy. Dzięki za pomoc.
Killerczyc - Sro 19 Sty, 2011 07:54

A dałoby się usunąć okno - windowskin - wokół HUD'a, by zostały same paski HP/MP?
Ayene - Sro 19 Sty, 2011 15:11

A nie możesz zmienić wartości?
Kod:
OPACITY = 100 # Przezroczystość, gdy ukryty [0~255]

Daj 0, a okienko będzie przezroczyste.

Killerczyc - Sro 19 Sty, 2011 18:29

Tylko to zadziała jak główny bohater będzie za Hud'em - i właśnie w tym momencie gdy ustawiłem OPACITY = 100 # Przezroczystość, gdy ukryty [0~255] - Okno całkiem znikło...
Chodziło mi o usunięcie tła a pozostawienie pasków HP/MP i nie gdy bohater wejdzie za Hud.
Mam nadzieje że pomożesz Ayene, bo nie chce mi się tak nabijać postów...

Ayene - Wto 25 Sty, 2011 14:58

Podmień skrypt na ten:
Spoiler:

Kod:
################################################################################
#                                                                              #
#                      ~~~~~ Copyright 2009 SojaBird ~~~~~                     #
#                                                                              #
################################################################################
# Tłumaczenie i korekta by Ayene
#
# By wyświetlić/ukryć HUD, wywołaj skrypt "hud"
# By wyświetlić/ukryć HUD, wywołaj skrypt "hud(true)" lub "hud(false)"

module AYENE
  # 0 - lewy górny róg
  # 1 - lewy dolny róg
  # 2 - prawy górny róg
  # 3 - prawy dolny róg
  POŁOŻENIE_HUD = 2
end

module HUD_HP_MP_EXP_NAME_FACE_LEVEL
  HUD_WIDTH = 152   # Szerokość okna
  FACE_OPACITY = 100 # przezroczystość twarzy bohatera [0~255]

  BG_DISPLAY = true # Ukrywa / wyświetla tło [true/false]

  EXP_NAME = "PD" # Tekst wyświetlany jako punkty doświadczenia
 
  ACTOR_ID = 0 # ID bohatera, którego statystyki mają się wyświetlać
               #(actor1=0, actor2=1...actorN=N-1)
 
  HIDE = true # Ukryj okno, gdy bohater jest za nim [true/false]
  OPACITY = 100 # Przezroczystość, gdy ukryty [0~255]
 
  HUD_START_DISPLAY = true # Wyświetlanie HUD od początku gry [true/false]
 
  CYCLE = true # Włącza / wyłącza zmianę bohaterów w drużynie za pomocą L&R
end

################################################################################
def hud(arg = nil)
  $game_system.hud_display = !$game_system.hud_display if arg == nil
  $game_system.hud_display = arg if arg != nil
end
################################################################################
class Window_HUD_HP_MP_EXP_NAME_FACE_LEVEL < Window_Base
  include HUD_HP_MP_EXP_NAME_FACE_LEVEL
 
  attr_reader :index
 
  def initialize(index)
    @index = index
    @height = WLH * 4 + 32
    case AYENE::POŁOŻENIE_HUD
      when 0
       super(0, 0, HUD_WIDTH, @height)
      when 1
       super(0, 416-@height, HUD_WIDTH, @height)
      when 2
       super(544-HUD_WIDTH, 0, HUD_WIDTH, @height)
      when 3
       super(544-HUD_WIDTH, 416-@height, HUD_WIDTH, @height)
    end     
    self.visible = $game_system.hud_display
    self.opacity = 0
    self.contents_opacity = OPACITY
    self.contents_opacity = 0 if !BG_DISPLAY
    @actor = $game_party.members[@index]
    @width = HUD_WIDTH - 32
    hide_status
    refresh
  end
 
  def refresh
    contents.clear
    @hp = @actor.hp
    @mp = @actor.mp
    @exp = @actor.exp
    @name = @actor.name
    @level = @actor.level
    @face = [@actor.face_name, @actor.face_index]
    draw_actor_face_picture(@actor, 0, 0, FACE_OPACITY)
    draw_actor_name_and_level(@actor, 0, WLH * 0)
    draw_actor_hp(@actor, 0, WLH * 1, @width)
    draw_actor_mp(@actor, 0, WLH * 2, @width)
    draw_actor_exp_HUD(@actor, 0, WLH * 3, @width)
  end
 
  def hide_status
    if HIDE == true
      if $game_player.screen_x + 16 > self.x and
      $game_player.screen_y + 4 > self.y and
      $game_player.screen_x - 16 < self.x + self.width and
      $game_player.screen_y - 28 < self.y + self.height
        self.contents_opacity = OPACITY if BG_DISPLAY
        self.contents_opacity = OPACITY
      else
        self.contents_opacity = 255 if BG_DISPLAY
        self.contents_opacity = 255
      end
    end
  end
 
  def draw_actor_face_picture(actor, x, y, opacity, size = 94)
    bitmap = Cache.face(actor.face_name)
    rect = Rect.new(0, 0, 0, 0)
    rect.x = actor.face_index % 4 * 96 + (96 - size) / 2
    rect.y = actor.face_index / 4 * 96 + (96 - size) / 2
    rect.width = size
    rect.height = size
    self.contents.blt(x, y, bitmap, rect, opacity)
    bitmap.dispose
  end
 
  def draw_actor_name_and_level(actor, x, y)
    self.contents.font.color = hp_color(actor)
    self.contents.draw_text(x, y, @width - 20 - 24, WLH, actor.name)
    self.contents.font.color = system_color
    x = @width / 2
    width = (@width.to_f / 2) / (32 + 24)
    self.contents.draw_text(x, y, width * 32, WLH, Vocab::level_a)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + width * 32, y, width * 24, WLH, actor.level, 2)
  end
 
  def draw_actor_exp_HUD(actor, x, y, width)
    s1 = actor.exp_s
    s2 = actor.next_rest_exp_s + s1
    if s1.is_a? String or s2.is_a? String
      s1 = actor.exp
      s2 = actor.exp
    end
    draw_actor_exp_gauge(actor, x, y, s1, s2, width)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 30, WLH, EXP_NAME)
    self.contents.font.color = normal_color
    last_font_size = self.contents.font.size
    xr = x + width   
    self.contents.draw_text(xr - 120, y, 120, WLH, s1, 2)   
  end
 
  def draw_actor_exp_gauge(actor, x, y, s1, s2, width)
    gw = width * s1 / s2
    gc1 = text_color(31)
    gc2 = text_color(27)
    self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
    self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
  end
 
  def update
    self.visible = $game_system.hud_display
    return if !self.visible
    if @hp != @actor.hp or
      @mp != @actor.mp or
      @exp != @actor.exp or
      @name != @actor.name or
      @level != @actor.level or
      @face != [@actor.face_name, @actor.face_index]
      refresh
    end
    hide_status
  end
end

#------------------------------------------------------------
# * Scene_Map: Attach HUD to map
#------------------------------------------------------------
class Scene_Map < Scene_Base
  alias start_hmexp_name_face_lvl start
  alias terminate_hmexp_name_face_lvl terminate
  alias update_hmexp_name_face_lvl update
  def start
    start_hmexp_name_face_lvl
    @index = HUD_HP_MP_EXP_NAME_FACE_LEVEL::ACTOR_ID
    new_hud
   
  end
  def terminate
    @hp_mp_exp_name_face_hud.dispose
    terminate_hmexp_name_face_lvl
  end
  def update
    update_hmexp_name_face_lvl
    @hp_mp_exp_name_face_hud.update
    return if !HUD_HP_MP_EXP_NAME_FACE_LEVEL::CYCLE
    return if !@hp_mp_exp_name_face_hud.visible
    if Input.trigger?(Input::R)
      if @index == $game_party.members.size - 1
        @index = 0
      else
        @index += 1
      end
    elsif Input.trigger?(Input::L)
      if @index == 0
        @index = $game_party.members.size - 1
      else
        @index -= 1
      end
    end
    new_hud if @index != @hp_mp_exp_name_face_hud.index
  end
 
  def new_hud
    @hp_mp_exp_name_face_hud.dispose if !@hp_mp_exp_name_face_hud.nil?
    @hp_mp_exp_name_face_hud = Window_HUD_HP_MP_EXP_NAME_FACE_LEVEL.new(@index)
  end
end

#------------------------------------------------------------
# * Game_System: Check for display
#------------------------------------------------------------
class Game_System
  alias hud_initialize initialize
  attr_accessor :hud_display
  def initialize
    hud_initialize
    @hud_display = HUD_HP_MP_EXP_NAME_FACE_LEVEL::HUD_START_DISPLAY
  end
end


Azux - Czw 03 Mar, 2011 17:24

skrypcik fajny ale mam taki pomysl ze na poczatku gry pojawia sie obrazek ze wstepem (w malej wiosc zyl..bleblebel)ten obrazek chcialbym miec na calej mapie lecz zaslania go wlasnie te okienko da sie zrobic jakos zeby on nie pojawial sie na samym poczatku gry tylko po zniknieciu obrazka (obrazek raz sie wyswietla w grze wiec zeby po zmianie mapy okienko bylo odrazu )
Seyfer - Sob 19 Mar, 2011 12:15

A dałoby radę przerobić tak ten skrypt, aby HUD pokazywał się po iluś tam sekundach jeżeli nie ruszamy naszym bohaterem?
Azzazeal - Nie 10 Kwi, 2011 11:06

Witam.
Mam 2 sprawy co do tego skryptu.

Uno:
Dla mojej gry muszę mieć pustą drużynę startową i chciałbym się dowiedzieć co muszę zrobić żeby nie wywalało błędu jak nie mam żadnego bohatera w drużynie.

Drugo:
Chciałbym zmienić odstępy między tymi paskami.najlepiej jak by były minimalne :)

Pozdrawiam.

Ayene - Nie 10 Kwi, 2011 16:11

Można przed wyrzuceniem wszystkich graczy z drużyny wywołać za pomocą polecenia 'Script' w zdarzeniu odpowiednio:
Kod:
# By wyświetlić/ukryć HUD, wywołaj skrypt "hud(true)" lub "hud(false)"

Albo można wrzucić trzy warunki w skrypt:
znajdź linijikę:
Kod:
@index = HUD_HP_MP_EXP_NAME_FACE_LEVEL::ACTOR_ID

linijkę pod nią:
Kod:
new_hud

zamień na:
Kod:
new_hud if $game_party.members.size > 0   

następnie znajdź:
Kod:
@hp_mp_exp_name_face_hud.dispose

zamień na:
Kod:
@hp_mp_exp_name_face_hud.dispose if $game_party.members.size > 0

kolejno znajdź:
Kod:
@hp_mp_exp_name_face_hud.update

przed tą linijką dodaj:
Kod:
return if $game_party.members.size == 0


Żeby zmniejszyć odległości między paskami (swoją drogą sprawi to, że napisy będą na siebie nachodzić), wystarczy znaleźć fragment:
Kod:
draw_actor_hp(@actor, 0, WLH * 1, @width)
draw_actor_mp(@actor, 0, WLH * 2, @width)
draw_actor_exp_HUD(@actor, 0, WLH * 3, @width)

na przykładzie pierwszej linijki, argumenty w nawiasie odpowiadają kolejno:
@actor - bohater, którego parametry mają zostać wyświetlone
0 - współrzędna x paska,
WLH * 1 - współrzędna y paska, gdzie WLH to stała wartość odległości między kolejnymi liniami w oknach, taka interlinia, która domyślnie wynosi 24.
@width - długość paska.
Spróbuj edytować tę wartość WLH * 1, np. na '15*1' albo na stałą wartość - 20, itd.
Zastanów się do tego, czy nie lepiej by było skorzystać z tego przerobionego już skryptu :arrow: http://www.ultimateam.pl/...p?p=52482#52482

Azzazeal - Wto 31 Maj, 2011 09:08

Ok dzięki, poradziłem sobie z tym błędem odrobinę inaczej :) a dokładniej w drużynie na początku jest bohater bez twarzy, a potem kiedy ma się gra zacząć to jest dodawany główny bohater i usuwany ten już nie potrzebny pusty :)
mazik - Czw 23 Cze, 2011 18:19

THX Zaje skrypt !!! bardzo mi pomogles :)
qadam - Sob 01 Paź, 2011 14:04

wiem wiem ...
Kenji666 - Nie 29 Lip, 2012 15:18

Siemanko mam pytanie ponieważ wgrałem tego skypta i podczas uruchomiania sie walki wyskakuje mi blad. "Line 88 NoMethodError occured." Co z tym zrobic?

Powered by phpBB modified by Przemo © 2003 phpBB Group