Krótki opis:
To swoista kontynuacja skryptu głodu i pragnienia, ich uzupełnienie, które pochodzi z tejże samej strony, co w.w. skrypt.
Funkcje skryptu:
- Blokowanie biegania jeśli wytrzymałość zejdzie
- Odejmowanie wytrzymałości za bieg
- Odejmowanie jej za skok (teoretycznie kompatybilny ze skryptem skoku)
- Przechowywanie wartości w zmiennej (można dowolnie zmieniać)
- HUD na mapie zanikający, gdy nieużywane
- Okienko w menu
- Dodawanie max wytrzymałości co poziom
- Dodawanie max wytrzymałości komendą w zdarzeniu
- Blokowanie zużywania wytrzymałości
Autor:
Jet10985 (Jet) z pomocą Mithran
Kompatybilność:
Na VX-ie śmiga na pewno, na XP nie sprawdzałem.
Nie gryzie się z menu jednoosobowym, ale o pasku w menu możemy zapomnieć (HUD działa)
Skrypt:
Spoiler:
Kod:
#===============================================================================
# Stamina System
# By Jet10985 (Jet)
# Help by: Mithran
#===============================================================================
# This snippet will add a stamina system to your game. Stamina, meaning that
# when the player dashes, they will lose stamina. When the stamina runs out
# the player will not be able to dash until it is re-charged.
# This script has: 20 customization options.
#===============================================================================
# Overwritten Methods:
# None
#-------------------------------------------------------------------------------
# Aliased methods:
# Game_Character: jump, increase_steps
# Scene_Map: start, update, terminate
# Game_Player: dash?
# Scene_Menu: start, update, terminate
# Scene_File: write_save_data, read_save_data
#===============================================================================
=begin
Instrukcja:
Aby zwiększyć poziom wytrzymałości, użyj komendy "Script...":
increase_max_stamina(amount)
amount = ilość, do której ma wzrosnąć wytrzymałość
Aby zatrzymać utratę wytrzymałości użyj:
stamina_loss(option)
option = either true or false. True gives them infinite stamina, false makes
the stamina go donw once again.
=end
module Jet_Stamina
# Użyj ikonę lub literę, by wyświetlić wskaźnik?
USE_LETTER = true
# ID ikony, jeśli powyżej false.
ICON_STAMINA_ID = 50
# Litera wyświetlana przy pasku wytrzymałości, by było wiadomo, że to ona
STAMINA_INITIAL = "S"
# Poziomy, na których ilość wytrzymałości wzrasta (domyślnie cztery)
STAMINA_LEVELS = [60, 80, 95, 110]
# This actor's level will determine the stamina level set above
# (Poziom tego aktora określi poziom wytrzymałości powyżej?)
ACTOR_STAMINA_ID = 0
# Ilość, o którą wzrasta wytrzymałość co poziom (nieokreślony powyzej)
BASE_STAMINA_RAISE = 10
# Ilość wytrzymałości tracona na jedną kratkę biegu.
STAMINA_DOWN_PER_SQUARE = 3
# Ilość wytrzymałości przywracanej na każdą sekundę stania.
STAMINA_REGEN_PER_SECOND = 2
# Zmienna, w której zapisywana jest wytrzymałość.
STAMINA_TO_VARIABLE_ID = 55
# Pokazywać wytrzymałość na mapie?
STAMINA_ON_MAP = true
# Koordynaty ekranu na których wyświetlany będzie pasek
MAP_WINDOW_COORDS = [386, 360]
# Przełącznik, który włącza i wyłącza pasek wytrzymałości.
MAP_ONOFF_SWITCH = 61
# Przeźroczystość HUD-a z paskiem.
# 0 dla samego paska bez okienka, 255 dla kompletnego okienka.
MAP_WINDOW_OPACITY = 200
# Pokazywać wytrzymałość w menu?
STAMINA_IN_MENU = true
# Pokazywać regenerację wytrzymałości w menu?
UPDATE_STAMINA_IN_MENU = true
# Koordynaty pokazywania paska w menu (radzę podnieść to do góry, bo zasłania złoto)
# W menu jednoosobowym nie jest wyświetlane wogóle!)
MENU_WINDOW_COORDS = [0, 360]
# Pokazywać ilość wytrzymałośći liczbowo (true), czy samym paskiem (false)?
STAMINA_BAR_WITH_NUMBERS = true
# Jeśli używasz systemu skoku zaznacz true.
JUMP_SYSTEM_COMPATABILITY = false
# Ilość wytrzymałości traconej na skok.
STAMINA_JUMP_LOSS = 6
end
#===============================================================================
# NIE EDYTUJ PONIŻEJ, CHYBA, ŻE WIESZ, CO ROBISZ.
#===============================================================================
class Game_Stamina
def update_stamina
get_max_stamina
$game_stamina.stamina_gain += 1 unless $game_player.moving? && $game_player.dash?
if $game_stamina.stamina_gain == 60
$game_stamina.stamina += STAMINA_REGEN_PER_SECOND
$game_stamina.stamina_gain = 0
if $game_stamina.stamina > $game_stamina.max_stamina
$game_stamina.stamina = $game_stamina.max_stamina
end
end
$game_variables[STAMINA_TO_VARIABLE_ID] = $game_stamina.stamina
end
def get_initial_stamina
if $game_party.members[ACTOR_STAMINA_ID].level < STAMINA_LEVELS.size
$game_stamina.stamina = STAMINA_LEVELS[$game_party.members[ACTOR_STAMINA_ID].level - 1]
else
$game_stamina.stamina = STAMINA_LEVELS.max + (($game_party.members[ACTOR_STAMINA_ID].level - (STAMINA_LEVELS.size - 1)) * BASE_STAMINA_RAISE)
end
end
def get_max_stamina
if $game_party.members[ACTOR_STAMINA_ID].level > STAMINA_LEVELS.size
$game_stamina.max_stamina = STAMINA_LEVELS.max + (($game_party.members[ACTOR_STAMINA_ID].level - (STAMINA_LEVELS.size - 1)) * BASE_STAMINA_RAISE) + $game_stamina.max_stamina_plus
else
$game_stamina.max_stamina = STAMINA_LEVELS[$game_party.members[ACTOR_STAMINA_ID].level - 1] + $game_stamina.max_stamina_plus
end
return $game_stamina.max_stamina
end
end
$game_stamina = Game_Stamina.new
class Game_Interpreter
def stamina_loss(option)
if option == true || option == false
$game_stamina.disable_stamina_loss = option
else
p "The option you chose was neither true or false. Please error check and try again"
end
end
def increase_max_stamina(amount)
$game_stamina.max_stamina_plus += amount
end
end
class Game_Character
include Jet_Stamina
if JUMP_SYSTEM_COMPATABILITY
alias jet5902_jump jump unless $@
def jump(*args)
$game_stamina.stamina -= STAMINA_JUMP_LOSS
jet5902_jump(*args)
end
end
alias jet9211_increase_steps increase_steps unless $@
def increase_steps(*args)
$game_stamina.stamina -= STAMINA_DOWN_PER_SQUARE if $game_player.dash? && $game_stamina.disable_stamina_loss && self.is_a?(Game_Player)
jet9211_increase_steps(*args)
end
end
class Window_Stamina < Window_Base
def initialize(x, y)
super(x, y, 160, WLH + 32)
self.opacity = MAP_WINDOW_OPACITY if $scene.is_a?(Scene_Map)
refresh
end
def refresh
self.contents.clear
draw_actor_stamina(0, 0)
end
def update
refresh
end
end
class Window_Base
include Jet_Stamina
def stamina_color
return crisis_color if $game_stamina.stamina < $game_stamina.get_max_stamina / 4
return normal_color
end
def draw_actor_stamina(x, y, width = 120)
draw_actor_stamina_gauge(x, y, width)
self.contents.font.color = system_color
if USE_LETTER
self.contents.draw_text(x, y, 30, WLH, STAMINA_INITIAL)
else
draw_icon(ICON_STAMINA_ID, x, y)
end
self.contents.font.color = stamina_color
last_font_size = self.contents.font.size
xr = x + width
if STAMINA_BAR_WITH_NUMBERS
if width < 120
self.contents.draw_text(xr - 44, y, 44, WLH, $game_stamina.stamina, 2)
else
self.contents.draw_text(xr - 99, y, 44, WLH, $game_stamina.stamina, 2)
self.contents.font.color = normal_color
self.contents.draw_text(xr - 55, y, 11, WLH, "/", 2)
self.contents.draw_text(xr - 44, y, 44, WLH, $game_stamina.get_max_stamina, 2)
end
end
end
def draw_actor_stamina_gauge(x, y, width = 120)
gw = width * $game_stamina.stamina / $game_stamina.max_stamina
gc1 = STAMINA_GAUGE_COLOR1
gc2 = STAMINA_GAUGE_COLOR2
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
end
class Scene_Map
include Jet_Stamina
alias jet0221_start start unless $@
def start
$game_stamina.update_stamina
unless $game_stamina.got_initial_stamina
$game_stamina.get_initial_stamina
$game_stamina.got_initial_stamina = true
end
@stamina_window = Window_Stamina.new(MAP_WINDOW_COORDS[0], MAP_WINDOW_COORDS[1]) if STAMINA_ON_MAP
@stamina_window.visible = false
jet0221_start
end
alias jet5021_update update unless $@
def update
$game_stamina.update_stamina
if !$game_switches[MAP_ONOFF_SWITCH] && STAMINA_ON_MAP
@stamina_window.visible = false
elsif STAMINA_ON_MAP
@stamina_window.visible = true
end
@stamina_window.update if STAMINA_ON_MAP
if @stamina_window.visible && !$game_player.dash?
@stamina_window.opacity -= 1
if @stamina_window.opacity == 10
@stamina_window.openness -= 1
end
elsif @stamina_window.visible && $game_player.dash?
@stamina_window.opacity += 1 unless @stamina_window.opacity == 255
@stamina_window.openness += 1 unless @stamina_window.openness == 255
end
jet5021_update
end
alias jet2048_terminate terminate unless $@
def terminate
@stamina_window.dispose if STAMINA_ON_MAP
jet2048_terminate
end
end
class Game_Player
alias jet6902_dash? dash? unless $@
def dash?
return false if $game_stamina.stamina < Jet_Stamina::STAMINA_DOWN_PER_SQUARE
jet6902_dash?
end
end
class Scene_Menu
include Jet_Stamina
alias jet5893_start start unless $@
def start
jet5893_start
@stamina_window = Window_Stamina.new(MENU_WINDOW_COORDS[0], MENU_WINDOW_COORDS[1]) if STAMINA_IN_MENU
end
alias jet6942_update update unless $@
def update
jet6942_update
$game_stamina.update_stamina if UPDATE_STAMINA_IN_MENU
@stamina_window.update if STAMINA_IN_MENU
end
alias jet7692_terminate terminate unless $@
def terminate
@stamina_window.dispose if STAMINA_IN_MENU
jet7692_terminate
end
end
class Scene_File
alias jet3891_write_save_data write_save_data unless $@
def write_save_data(file)
jet3891_write_save_data(file)
Marshal.dump($game_stamina, file)
end
alias jet5931_read_save_data read_save_data unless $@
def read_save_data(file)
jet5931_read_save_data(file)
$game_stamina = Marshal.load(file)
end
end
unless $engine_scripts.nil?
JetEngine.active("Stamina System", 1)
end
Demo:
Screeny:
Spoiler:
Pasek [S]taminy zasłania złoto
Pasek [S]taminy jako HUD na mapie
Instalacja:
Wrzucasz nad main.
Konfiguracja opisana w skrypcie.
Zastosowanie pokazane w demie.
Pomógł: 22 razy Dołączył: 27 Kwi 2010 Posty: 136 Skąd: że znowu
Wysłany: Sro 01 Gru, 2010 19:21
Wielkie dzięki.Skrypt będzie nieodzownym elementem mojej gry.Nawet jeśli chcesz dam cię do credits, za znalezienie tego skryptu (xDDD).No, ale krytyka musi być.Na początku chciałbym powiedzieć : na cholerę dodawałeś RTP do dema?Następnie dodałbym : demo ma kilka będów i widać, że robione na szybko.No a teraz mam pytanie nie dotyczące krytyki : Czy można aby HUD pokazywany był jako grafika(pasek też)?
Fakt, demko robiłem na szybko, a rtp dodałem odruchowo
Hud jako grafika? Tzn. jakaś grafika *.png zamiast okienka, tak? Przyznam się szczerze, że nie wiem jak to zrobić. Ja to tylko przetłumaczyłem i wrzuciłem do osobnego tematu
Musiałbyś zwrócić się do Ayene, albo kogoś, kto zna ruby
________________________
"Na trolla pewne są tylko dwie pewne metody, jedna samopowtarzalna i druga, wymagająca przeładowania ręcznego."
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Czw 02 Gru, 2010 21:30
Poster27, ale w menu również ma wyświetlać HUD obrazkowy? Trochę dziwnie będzie to wyglądać. Dobrze by było żebyś podał również wymiary rzekomego obrazka.
Pomógł: 22 razy Dołączył: 27 Kwi 2010 Posty: 136 Skąd: że znowu
Wysłany: Pią 03 Gru, 2010 17:47
1.Nie, chciałbym, aby opcja w menu ogólnie zniknęła.
2.Wymiary?Nie zastanawiałem się skąd wezmę grafiki gdy to pisałem.Po prostu chciałbym żeby było ładniej, ponieważ sam widok pasków i okienek typowych jak w menu mnie obrzydza.
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Sob 04 Gru, 2010 15:58
To nie kwestia nałożenia, tylko nadpisywania klasy. Dlatego używa się aliasów Przecież i tak nie chciałeś okna w menu. Umieść zatem skrypt nad skryptem z oknem lokacji, wówczas ten bliżej Main będzie się wyświetlał
W menu pokazuje domyślnie. Możliwe, że HUD MP, HP zasłania hud wyczerpania, więc spróbuj zmienić jego położenie w konfiguracji. Domyslnie jest to prawy dolny róg.
Lub po prostu nie uruchomiłeś odpowiedniego przełącznika...
________________________
"Na trolla pewne są tylko dwie pewne metody, jedna samopowtarzalna i druga, wymagająca przeładowania ręcznego."
Ayene, ja mam taki błąd z linijką 325, ale dopiero wtedy gdy włączę menu w grze. Myślę, że to przez to, że mam skrypt lokacja w menu... Chciałbym by pasek wyt był tylko na mapie, a na mapie wgl go nie ma... Jak coś to mam jeszcze w grze hud hp oraz hud eq. Pomożesz?
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