Sabikku - Sob 01 Maj, 2010 22:12 Temat postu: CMS z serduszek.
~ CMS z serduszek ~
Krótki opis
Skrypt dodaje okienko pełne serduszek, reprezentujących pojedyncze punkty zdrowia pierwszej postaci z drużyny. Może przyda się komuś przy robieniu własnego ABSa. Właściwości:
* jeden punkt zdrowia (hp) oznacza jedno serduszko,
* zmiana położenia okienka (jeden z czterech rogów ekranu),
* modyfikacja położenia okienka (konkretne modyfikatory do x i y),
* dowolna ilość mieszczących się serduszek (zależnie od ich szerokości), okienko dopasowuje się do ich rozmiarów i ilości maksymalnych punktów zdrowia,
* okienko aktualizuje się przy każdej zmianie aktualnych punktów zdrowia i rozszerza/zwęża przy zmianie maksymalnych punktów zdrowia,
* okienko zanika, gdy w tle działa scenka.
Autor skryptu
Sabikku/slabix, czyli ja.
Kompatybilność
Tylko XP; nie powinno kłócić się z innymi skryptami.
class Scene_Map
attr_accessor :hud_window
# Main. --------------------------------------------------------
alias sab_map_main main
def main
# Making a hud window.
@hud_window=Window_Hud.new
# Remembering actor hp and maxhp.
@rem_hp=$game_party.actors[0].hp
@rem_maxhp=$game_party.actors[0].maxhp
sab_map_main # Normal initialize.
# Disposing a hud window.
@hud_window.dispose
end
# Update. ------------------------------------------------------
alias sab_map_update update
def update
# Checking actor hp and maxhp.
if @rem_hp!=$game_party.actors[0].hp
@rem_hp=$game_party.actors[0].hp
@hud_window.refresh # Refreshing hearts.
end
if @rem_maxhp!=$game_party.actors[0].maxhp
@rem_maxhp=$game_party.actors[0].maxhp
@hud_window.dispose
@hud_window=Window_Hud.new # Recorrecting a window size.
end
# Updating a hud window.
@hud_window.update
sab_map_update # Normal update.
end
end
# ================================================================
# ACTUAL SCRIPT
# ================================================================
class Window_Hud < Window_Base
# Initialize. --------------------------------------------------
def initialize
# Making a window.
char=$game_party.actors[0]
if ALIGN==3 or ALIGN==4
x=640-16-char.maxhp*HEART_WIDTH; y=480-HEART_HEIGHT-32
else
x=0; y=0
end
width=16+char.maxhp*HEART_WIDTH
super(x+HUD_X_MODIFICATOR, y+HUD_Y_MODIFICATOR, width, HEART_HEIGHT+32)
self.opacity=0
self.contents_opacity=0
# Making a bitmap.
self.contents = Bitmap.new(width - 32, height - 32)
# Drawing contents.
refresh
end
# Update. ------------------------------------------------------
def update
super
# Updating visibility.
unless $game_system.map_interpreter.running?
self.opacity=[self.opacity+50, HUD_OPACITY].min
self.contents_opacity=[self.contents_opacity+50, 255].min
else
self.opacity=[self.opacity-50, 0].max
self.contents_opacity=[self.contents_opacity-50, 0].max
end
end
# Refresh. -----------------------------------------------------
def refresh
self.contents.clear
# Drawing contents of the window.
hearts_max=(640/HEART_WIDTH).to_i
for i in 0...hearts_max
# Heart opacity settings.
char=$game_party.actors[0]
if char.hp > i
opacity=HEART_OPACITY
elsif i < char.maxhp
opacity=(HEART_OPACITY/3).to_i
else
opacity=0
end
# Drawing one heart.
self.contents.blt(i*HEART_WIDTH, 0, RPG::Cache.picture(HEART_NAME), Rect.new(0, 0, HEART_WIDTH, HEART_HEIGHT), opacity)
end
end
end
Instrukcja
Wklej skrypt nad "Main" w Edytorze Skryptów.
Konfiguracja (na początku skryptu):
ALIGN --> położenie okienka. 1 - lewy-górny róg, 2 - prawy-górny, 3 - lewy-dolny, 4 - prawy-dolny.
HUD_OPACITY --> przezroczystość okienka huda (0-255).
HUD_X_MODIFICATOR --> modyfikator położenia x okienka (np. +5, -10).
HUD_Y_MODIFICATOR --> modyfikator położenia y okienka (np. +5, -10).
HEART_NAME --> nazwa pliku grafiki serduszka, znajdującej się w folderze Pictures.
HEART_WIDTH --> szerokość obrazka serduszka (można zwiększyć, by zrobić odstępy między serduszkami).
HEART_HEIGHT --> wysokość obrazka serduszka.
HEART_OPACITY --> przezroczystość obrazka serduszka (obrazującego posiadane punkty zdrowia).
W razie problemów pisać.wito35 - Wto 22 Cze, 2010 22:30 Fajny skrypt, ale mam pytanie czy da się zmienić tą grafikę, tych kółek na jakąś inną ? Chodzi mi oto żeby była jednolitym dużym czerwonym paskiem hp z wyświetlanym w liczbach ile zostało ci życia.
PS: Proszę o pomoc.Sabikku - Wto 22 Cze, 2010 22:40 Znajdź inny hud, dobrze poszukaj. Tutaj miałem na celu zrobienie czegoś prostego, do prostych adventurów na styl zeldy. Paski i liczby są w innych hudach wito35 - Wto 22 Cze, 2010 22:47 Aha, a jak dam np. załóżmy że to jest ten pasek hp- [ 10 ] i zaatakuje mnie potworek i j zabierze mi 1 hp to zmieni się na takie ? [ 9 ]. Czy muszę mieć więcej obrazków ?Izaya - Czw 24 Cze, 2010 13:18 wito35, Opowiem Ci coś:
Masz w swoim projekcie załóżmy właśnie ten Skrypt.
załóżmy że tak jak na SS masz 6 "Serduszek".
Gdy zaatakuje Cie potwór tracisz jedno serduszko.
Możesz zrobić by po wypiciu jakiej mikstury serduszko wracało.
Widziałem ten Skrypt w grze "Dragon Adventure" i tak tam właśnie było.
Takie coś koguto-podobne mnie zaatakowało z 5 razy i musiałem grac od nowa Skaciu - Nie 27 Lut, 2011 12:13 Siemka, mam pytanko odnośnie skryptu. Korzystam ze skryptu na intro przed ekranem tytułowym, gdzie podawany jest w obrazkach autor, nazwa gry itd. I podczas tego to okienko poprostu zasłania część tych napisów. Nie wiesz może jak wykasować skrypt, na czas intra a potem uruchomić go do gry? Wiem że chyba trzeba coś zrobić w poleceniu "Wywołaj skrypt", lub w pozycji tego okienka, ale sam tego nie umiem. Z góry dzięki.Sabikku - Nie 27 Lut, 2011 13:26 Dwa sposoby.
1. Standardowo okienko chowa się automatycznie, podczas zdarzeń z triggerem player touch / event touch / autostart. Twoje intro musiałoby więc działać na autostarcie - jest to do zrobienia, ale trochę męczące, więc mamy też opcję drugą.
2. Znajdź ten fragment:
I zamień $game_system.map_interpreter.running? na $game_switches[1]
Dzięki temu włączenie przełącznika o id 1 spowoduje schowanie huda. Włączysz więc na początku intra i wyłączysz po wejściu we właściwą grę.Skaciu - Nie 27 Lut, 2011 14:09 Dzięki bardzo, już wszystko ładnie działa