Świetny skrypt. Ale czy ktoś mógłby go nieco przerobić? Chciałbym by skrypt pozwalał zmieniać statystyki tylko jednego bohatera (tak więc komendy "poprzedni" i "następny" mogłyby zostać usunięte) i by można było zwiększać również HP i SP.
Pomógł: 1 raz Dołączył: 07 Sty 2012 Posty: 46 Skąd: Polska
Wysłany: Pią 24 Lut, 2012 19:40
Mnie tam to nie przeszkadza, bo sam w "Miasteczko Nowoczesne" pozwalam na pięć gości w drużynie. A co do skryptu, to dałem własny mechanizm automatycznego wywoływania ekranu rozwoju.
Cytat:
Po każdej walce komputer sprawdza, ilu bohaterów awansowało. Jeśli w walce uczestniczył przynajmniej jeden, któremu XPL skoczyło w górę (XPL.abs > 0), to po wciśnięciu Entera przez gracza wyskoczy okno wyboru. Wybranie opcji "Rozwój postaci" wywołuje ekran rozwoju drużyny, ale tylko dla uczestników walki, którzy awansowali, bez względu na to, czy opuścili drużynę podczas walki, czy nie. Po wybraniu opcji "Zakończ walkę" gracz od razu wraca na mapę. Jeśli liczba awansujących w walce wynosi zero, okno wyboru nie pojawia się. Ten system działa w fazówce ("Miasteczko Nowoczesne 6" używa SSJ8_ATB) i standardowej biegówce ("Miasteczko Nowoczesne 6" używa SSJ8_Run). ABS (w "Miasteczko Nowoczesne 6" jest to SSJ8_ABS) nie korzysta z tego systemu.
________________________ Ryzykując, że zrobisz super gniota, możesz zrobić super hit lub super gniota.
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Pon 27 Lut, 2012 13:03
Nathaniel125, sprawdź to:
Spoiler:
Kod:
#====================================================================
# Autor Blizzard
# Modyfikacja by Ayene
#====================================================================
module BlizzCFG
#====================================================================
STARTING_POINTS = 10 # liczba punktów startowych
POINTS_PER_LEVEL = 5 # punkty do rozdania co poziom
DISPLAY_ICON = true # wyświetl ikonę true/false
ADD_HP_SP = 20 # o ile wzrasta HP i SP
ICON_DATA = [612, 452, 192]
EVASION = 'Unik'
HP_LIMIT = 9999 # max. hp
SP_LIMIT = 9999 # max. sp
STR_LIMIT = 999 # max. siły
DEX_LIMIT = 999 # max. zręczności
AGI_LIMIT = 999 # max.szybkości
INT_LIMIT = 999 # max.inteligencji
WINDOW_MODE = true # true/false
AUTOMATIC_CALL = false # true/false
AUTOMATIC_MAP_CALL = false # true/false
#====================================================================
ATTR_LIMITS = [HP_LIMIT, SP_LIMIT, STR_LIMIT, DEX_LIMIT, AGI_LIMIT, INT_LIMIT]
#====================================================================
end
#====================================================================
class Array
def sum
result = 0
self.each {|i| result += i if i.is_a?(Numeric)}
return result
end
end
#====================================================================
class Game_Actor < Game_Battler
#====================================================================
attr_reader :points
alias setup_sds_later setup
def setup(actor_id)
@points = BlizzCFG::STARTING_POINTS
setup_sds_later(actor_id)
end
alias exp_sds_later exp=
def exp=(exp)
old_level = @level
exp_sds_later(exp)
add_stat_points((@level - old_level) * BlizzCFG::POINTS_PER_LEVEL)
end
def add_stat_points(val)
@points += val if val > 0
end
def remove_stat_points(val)
@points = [@points-val, 0].max
end
alias draw_actor_parameter_sds_later draw_actor_parameter
def draw_actor_parameter(actor, x, y, type)
if type == 7
self.contents.font.color = system_color
self.contents.draw_text(x, y, 120, 32, BlizzCFG::EVASION)
self.contents.font.color = normal_color
self.contents.draw_text(x + 120, y, 36, 32, actor.eva.to_s, 2)
else
draw_actor_parameter_sds_later(actor, x, y, type)
end
end
end
#====================================================================
class Window_Distribution_Status < Window_Base
#====================================================================
attr_accessor :actor
def initialize(actor)
super(BlizzCFG::WINDOW_MODE ? 160 : 0, 0, 480, 480)
@actor = actor
self.contents = Bitmap.new(width - 32, height - 32)
if $fontface != nil
self.contents.font.name = "Comic Sans MS"
self.contents.font.size = 22
self.contents.font.bold = true
elsif $defaultfonttype != nil
self.contents.font.name = "Comic Sans MS"
self.contents.font.size = 22
self.contents.font.bold = true
end
refresh
end
def add_points
attr = [@actor.maxhp, @actor.maxsp, @actor.str, @actor.dex, @actor.agi, @actor.int]
if @points < @actor.points &&
attr[index]+@att[index] < BlizzCFG::ATTR_LIMITS[index]
@points = [@points + 1, @actor.points].min
case index
when 0,1; num = BlizzCFG::ADD_HP_SP
else ; num = 1
end
@att[index] = [@att[index]+num, @points*num+@att[index]].min
return true
end
return false
end
def remove_points
if @points > 0 && @att[index] > 0
@points = [@points - 1, 0].max
case index
when 0,1; num = BlizzCFG::ADD_HP_SP
else ; num = 1
end
@att[index] = [@att[index] - num, 0].max
return true
end
return false
end
def update
super
return unless self.active
if Input.repeat?(Input::RIGHT)
if add_points
$game_system.se_play($data_system.cursor_se)
refresh
else
$game_system.se_play($data_system.buzzer_se)
end
elsif Input.repeat?(Input::LEFT)
if remove_points
$game_system.se_play($data_system.cursor_se)
refresh
else
$game_system.se_play($data_system.buzzer_se)
end
end
end
def update_cursor_rect
if @index < 0 || !self.active
self.cursor_rect.empty
else
self.cursor_rect.set(32, (@index+1)*WLH*2, 64, WLH)
end
end
end
#====================================================================
class Window_Sure < Window_Command
#====================================================================
attr_accessor :actor
def update
if @command_window.active
@command_window.update
update_main_command
elsif @sure_window != nil
@sure_window.update
update_sure
elsif @distro_window.active
@distro_window.update
if Input.trigger?(Input::B) or Input.trigger?(Input::C)
$game_system.se_play($data_system.cancel_se)
@command_window.active, @distro_window.active = true, false
end
end
end
def update_main_command
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
if @distro_window.points != 0
@command_window.index, @command_window.active = 3, false
make_sure_window
else
$scene = @scene.new
end
elsif Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
case @command_window.index
when 0 then @command_window.active, @distro_window.active = false, true
when 1
if @distro_window.points != 0
@command_window.active = false
make_sure_window
else
$scene = @scene.new
end
end
end
end
def update_sure
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@sure_window.dispose
@sure_window, @command_window.active = nil, true
elsif Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
if @sure_window.index > 0
@distro_window.set_new_attributes if @sure_window.index == 1
$scene = @scene.new
end
@sure_window.dispose
@sure_window, @command_window.active = nil, true
end
end
end
#====================================================================
class Scene_Battle
#====================================================================
alias main_sds_later main
def main
main_sds_later
if BlizzCFG::AUTOMATIC_CALL &&
$game_party.actors.any? {|actor| actor.points > 0}
$scene = Scene_Points.new
end
end
end
#====================================================================
class Scene_Map
#====================================================================
alias main_sds_later main
def main
main_sds_later
@notify.dispose if @notify != nil
end
Już traciłem nadzieje na to że ktoś odpowie
Dziękuje Ayene,
Mam jeszcze jedno pytanie: jak określić o ile wzrośnie HP i SP wraz z każdym rozdanym punktem? Bo domyślnie rośnie o 1 a to trochę mało.
Edit:
Ayene wygląda na to że wszystko jest ok ;) Dziękuje
Podczas gdy ktoś awansuje w menu mam dostępną zakładkę "statystyki" gdzie można rozdawać punkty statystyk. Za każdym razem pojawia się okienko z pierwszą postacią, problem polega na tym, że chciałbym zmienić w skrypcie tak, żeby bezpośrednio można było wskazać postać której "okno rozdawania statystyk" ma się pojawić oraz pozbyć się "następny" i "poprzedni" z menu opcji rozdawania
ręcznie, tak jak ktoś podał w tym temacie , zastąpiłem już istniejące statystyki w menu tylko podmieniłem je komendą która wywołuje skrypt rozdawania statystyk xD tak, że wszystko raczej standardowe
aa sorka z tymi ' ' to już sam kombinowałem i omyłkowo wkleiłem z tym ;p
No ale błąd i tak wywala po skopiowaniu tego co kazałaś mi wrzucić ;P
(Ten skrypt statystyk mam z HP i SP co jest kilka postów wyżej)
ciągle jest taki błąd w tej mojej 306 linijce :
@actor, @scene = $game_party.actors[actor], $scene.class
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