artekwnc - Sro 18 Sty, 2012 19:00 Temat postu: Lockpick MinigamePosiadam LockpickMinigame i chciałbym użyć go w projekcie. Ale nie w zwykłej formie, tylko że trzeba posiadać item by móc rozpocząć minigre (np wytrych). To jako tako opanowałem, gorzej jest z tym że chce zrobić, że gdy próbujemy otworzyć zamek zbyt długo (przykładowo - 2 minuty) to wytrych nam się łamie i jak mamy kolejny to dalej możemy próbować otworzyć, a jak nie mamy to kończymy minigre. Ktoś wie jak mógłbym to zrobić?
Demo do tej minigry - http://www.mediafire.com/?wqz0wykgyztFeniks - Sro 18 Sty, 2012 19:20 Dołączam się do prośby.
W skrócie:
Załóżmy, że masz 4 wytrychy. Chcesz otworzyć skrzynie. Zaczynasz grać w minigrę. Mijają 2minuty (więcej/mniej) i wytrych się łamie. Zostają 3. Po kolejnym czasie znowu... Jak zostanie 1 i się złamie. Minigra się wyłącza.artekwnc - Sro 18 Sty, 2012 19:41 Ach i zapomniałem dodać, a nie da się edytować - czy da się zrobić, aby background był przeźroczysty? Gdy dałem takowy i podmieniłem - http://screenshooter.net/5423142/tpxhcbqMelvin - Sro 18 Sty, 2012 20:24 Wytrych to przecież klucz Ja nie wyrabiam...
Dobra, ale żeby nie spamować to dam Ci kilka rad jak możesz to zrobić. Net mi na PC siadł, więc jestem na razie na lapie i mogę napisać tyle:
Uruchom w tej klasie Sprite_Timer i daj warunek, że jeśli timer == 0 to restartuje minigre i odejmuje zmienną kluczy o 1. Daj też przy wywoływaniu lockpicka, że jeśli zmienna kluczy == 0, nie włącza się.
Kapisz?artekwnc - Sro 18 Sty, 2012 20:36 Kurde, wytrych to jeden z rodzai klucza, nie zaprzeczam, ale z tą nierównością chodziło mi że to nie jest taki klucz zwykły (bo zrozumiałem że o taki Ci właśnie chodzi). Jeśli nie o to Ci chodzi - nie zrozumieliśmy się.
Co do sposobu - zaraz przetestuje i edit, albo Feniks napisze...artekwnc - Sro 18 Sty, 2012 20:44 Teoretycznie - mniej więcej kapisz, praktycznie - gorzej. Nie wiem jak to zrobić to po pierwsze, a też z innych źródeł dostałem info, że gdy takie coś ustawie, nie bd się np dało kupić wytrycha w sklepie ("Tylko, że wtedy w sklepie jak kupisz wytrych, to ci zmiennej nie doda"). Nie wiem jak to wygląda, ktoś obeznany w temacie może się wypowiedzieć?Melvin - Czw 19 Sty, 2012 12:45 Proszę bardzo:
Spoiler:
Kod:
#=========================================================================
# === SCRIPT ADD-ON ===
#-------------------------------------------------------------------------
# Name: Lockpick Minigame - Add-on "PickLock"
# Author: Melvin
# Version: 1.0
#=========================================================================
# INSTRUKCJA
#=========================================================================
# Wklejić pod skryptem "Lockpick Minigame", nad main.
# Aby wyświetlić ile pozostało czasu do wyłączenia, należy nacisnąć
# "Shift"(A). Działa tylko w trybie testowym.
#-------------------------------------------------------------------------
# W zdarzeniu umieścić warunek, "Jeśli wytrych jest w ekwipunku":
# Wtedy uruchomi się Lockpick.
#=========================================================================
# KONFIGURACJA
#=========================================================================
module Melvin
# ID wytrycha:
PickLockID = 33
# Ograniczony czas otwierania: (po upływie nastąpi powrót do mapy)
Time = true # false
# Utrata wytrycha po wyjściu z minigry:
LoseEsc = false # true
# Utrata wytrycha po skończeniu się czasu:
LoseTime = true # false
#-------------------------------------
# Zaawansowane
#-------------------------------------
# Przedział losowania czasu:
Rand = 3750 # nil - do opcji niżej
# 0 + 3750 = 3750, 3750 + 3750 = 7500
# Zakres = 3750 - 7500
# 5000 = ~2 min
#-------------------------------------
# Jeśli "Rand = nil":
#-------------------------------------
# Główny zakres:
Rand1 = 3750
# Dodaje do obu stron liczbę:
Rand2 = 3750
#-------------------------------------
end
#=========================================================================
class Game_System
attr_accessor :timer_lock
alias gs_ini_mel initialize
def initialize
gs_ini_mel
@timer_lock = 0
end
alias gs_up_mel update
def update
gs_up_mel
if Melvin::Time == true and @timer_lock > 0
@timer_lock -= 1
end
end
end
class Scene_LockpickMinigame < SDK::Scene_Base
alias lm_mv_mel main_variable
def main_variable
lm_mv_mel
if Melvin::Time == true
if Melvin::Rand != nil
@rand = Melvin::Rand
@random_time = rand(@rand)+@rand
else
@random_time = rand(Melvin::Rand1)+Melvin::Rand2
end
$game_system.timer_lock = @random_time
end
end
alias lm_up_mel update
def update
if Input.trigger?(Input::B)
if Melvin::LoseEsc == true
$game_party.lose_item(Melvin::PickLockID, 1)
end
$scene = Scene_Map.new
end
lm_up_mel
if Melvin::Time == true
$game_system.update
if $game_system.timer_lock == 0
if Melvin::LoseTime == true
$game_party.lose_item(Melvin::PickLockID, 1)
end
$scene = Scene_Map.new
end
if $DEBUG and Input.press?(Input::A)
print "Time: #{$game_system.timer_lock}"
end
end
end
end
Druga sprawa - czy możesz zrobić jeszcze tak że po wywaleniu z minigry pokazuje się wiadomość - Złamałeś wytrych...
EDIT - pierwszy błąd wyeliminowany (inny switch trzeba ustawić na drugim screenie)Melvin - Czw 19 Sty, 2012 19:38 Omg... Po co usuwasz wytrych w zdarzeniu? Już jest w skrypcie. Czytałeś wgl instrukcję?
Co do 2, zaraz coś zrobię. Dawaj "Pomógł" za moje nerwy i czas xDartekwnc - Czw 19 Sty, 2012 19:44 Już to zmieniłem, po dodaniu posta...Wcześniej jak zmieniłem w skrypcie na true to i tak mi nie zabrało wytrycha, dlatego dałem potem zdarzenie. Potem znów spróbowałem i zadziałało, więc może nie zauważyłem albo coś... Oczywiście zdarzenie już skasowane. Pomógł leci ;DMelvin - Czw 19 Sty, 2012 20:38 Trzymaj:
Spoiler:
Kod:
#=========================================================================
# === SCRIPT ADD-ON ===
#-------------------------------------------------------------------------
# Name: Lockpick Minigame - Add-on "PickLock"
# Author: Melvin
# Version: 1.1
#-----------------
# HISTORIA ZMIAN
#-----------------
# 1.1:
# Dodano okno informacyjne o końcu czasu.
#=========================================================================
# INSTRUKCJA
#=========================================================================
# Wklejić pod skryptem "Lockpick Minigame", nad main.
# Aby wyświetlić ile pozostało czasu do wyłączenia, należy nacisnąć
# "Shift"(A). Działa tylko w trybie testowym.
#-------------------------------------------------------------------------
# W zdarzeniu umieścić warunek, "Jeśli wytrych jest w ekwipunku":
# Wtedy uruchomi się Lockpick.
#=========================================================================
# KONFIGURACJA
#=========================================================================
module Melvin
# ID wytrycha:
PickLockID = 33
# Ograniczony czas otwierania: (po upływie nastąpi powrót do mapy)
Time = true # false
# Utrata wytrycha po wyjściu z minigry:
LoseEsc = false # true
# Utrata wytrycha po skończeniu się czasu:
LoseTime = true # false
# Pokazanie okna informacyjnego:
Info = true # false
# Tekst na oknie informacji:
InfoText = "Wytych został uszkodzony!"
#-------------------------------------
# Zaawansowane
#-------------------------------------
# Przedział losowania czasu:
Rand = 3750 # nil - do opcji niżej
# 0 + 3750 = 3750, 3750 + 3750 = 7500
# Zakres = 3750 - 7500
# 5000 = ~2 min
#-------------------------------------
# Jeśli "Rand = nil":
#-------------------------------------
# Główny zakres:
Rand1 = 3750
# Dodaje do obu stron liczbę:
Rand2 = 3750
#-------------------------------------
# Czas do pokazania okna informacji:
InfoTime = 50
#-------------------------------------
end
#=========================================================================
class Game_System
attr_accessor :timer_lock
alias gs_ini_mel initialize
def initialize
gs_ini_mel
@timer_lock = 0
end
alias gs_up_mel update
def update
gs_up_mel
if Melvin::Time == true and @timer_lock > 0
@timer_lock -= 1
end
end
end
class Scene_LockpickMinigame < SDK::Scene_Base
alias lm_mv_mel main_variable
def main_variable
lm_mv_mel
if Melvin::Time == true
if Melvin::Rand != nil
@rand = Melvin::Rand
@random_time = rand(@rand)+@rand
else
@random_time = rand(Melvin::Rand1)+Melvin::Rand2
end
$game_system.timer_lock = @random_time
end
end
alias lm_mw_mel main_window
def main_window
@info_window = Window_LockInfo.new
@info_window.back_opacity = 160
@info_window.visible = false
lm_mw_mel
end
alias lm_up_mel update
def update
if Input.trigger?(Input::B)
if Melvin::LoseEsc == true
$game_party.lose_item(Melvin::PickLockID, 1)
end
$scene = Scene_Map.new
end
if @info_window.visible == false
if Melvin::Time == true
if Melvin::Info == true and Melvin::LoseTime == true
if $game_system.timer_lock == Melvin::InfoTime
@info_window.visible = true
end
end
end
lm_up_mel
end
if Melvin::Time == true
$game_system.update
if $game_system.timer_lock == 0
if Melvin::LoseTime == true
$game_party.lose_item(Melvin::PickLockID, 1)
end
$scene = Scene_Map.new
end
if $DEBUG and Input.press?(Input::A)
print "Time: #{$game_system.timer_lock}"
end
end
end
end
class Window_LockInfo < Window_Base
def initialize
super(140, 240, 380, 64)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
def refresh
self.contents.clear
self.contents.font.color = normal_color
self.contents.draw_text(0, 0, 380, 32, Melvin::InfoText)
end
end
Okno włączy się, kiedy licznik będzie wynosił 50(domyślnie).
Tak swoją drogą to wydaje mi się, że lepszym rozwiązaniem było by losowanie liczby na początku i np 10% szansy, że wytrych złamie się przy wkładaniu go do zamka - bardziej prawdopodobne, niż łamanie po jakimś czasie. Później pomyślę nad taką opcją.artekwnc - Czw 19 Sty, 2012 20:44
Cytat:
Tak swoją drogą to wydaje mi się, że lepszym rozwiązaniem było by losowanie liczby na początku
Chodzi o losowanie i zmienianie tej liczby 3750? Tylko wtedy gdyby dało się ustawić, że nie może być mniej niż 3000 a więcej niż 5000... Bo jak np bd ciężki zamek do otwarcia i bd miał 1000 - nie ma szans na otworzenie...Melvin - Czw 19 Sty, 2012 20:48 Nie. Chodzi mi o wyłączenie łamania wytrycha po czasie a jedynie możliwość złamania go na początku - przy starcie minigry.