Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Czw 27 Sty, 2011 10:43
Wymagania broni i pancerza VX
~ Wymagania broni i pancerza VX ~
Krótki opis
Skrypt umożliwia ustawienie wymagań dla broni i pancerza. Na przykład ekwipowanie bohatera w topór dwuręczny byłoby możliwe dopiero po osiągnięciu konkretnego poziomu lub posiadaniu odpowiedniej statystyki.
04.03.2012 r.
Dodano opcję, dzięki której można wprowadzić wymóg posiadania odpowiedniej umiejętności.
Zalecane dokładne testy.
Autor skryptu
Ayene [yurika@o2.pl]
Kompatybilność
Tylko VX
Skrypt
Spoiler:
Kod:
#===================================================================
# Wymagania broni i pancerza [VX] / Equipment Requirements [VX]
# by Ayene
# 27.01.2010 ver 1.2
# 04.03.2012 - dodano wymóg posiadania odpowiedniej umiejętności
# 10.08.2012 - poprawiono zmianę ekwipunku w Scene_Equip
# www.ultimateam.pl
#===================================================================
# Opis:
# Skrypt umożliwia ustawienie wymagań dla broni i pancerza.
# Na przykład ekwipowanie bohatera w topór dwuręczny byłoby możliwe
# dopiero po osiągnięciu konkretnego poziomu lub posiadaniu odpowiedniej
# statystyki. Ponadto dodano opcję, dzięki której można wprowadzić wymóg
# posiadania odpowiedniej umiejętności.
#
# Instrukcja:
# By skorzystać ze skryptu w oknie 'Note' przy danym elemencie ekwipunku
# w Bazie Danych umieść tekst <wymagania LV, MAXHP, MAXMP, ATK, DEF, SPI, AGI>,
# gdzie:
# LV - wymagany poziom postaci
# MAXHP - maksymalne HP (max HP)
# MAXMP - maksymalne MP (max MP)
# ATK - atak (attack)
# DEF - obrona (defence)
# SPI - wola (spirit)
# AGI - zręczność/zwinność (agility)
#
# Przykładowo:
# Jeśli chcesz, by postać mogła ekwipować broń na poziomie 6, dodatkowo
# pod warunkiem, że ma 120 max. HP, 40 ataku i 70 obrony
# to w oknie 'Note' tej broni należy wpisać:
# <wymagania 6, 120, 0, 40, 70, 0, 0>
#
# Natomiast, gdy bohater ma mieć tylko odpowiednią zręczność:
# <wymagania 0, 0, 0, 0, 0, 0, 50>
#
# Aby dodać wymóg posiadania umiejętności, wystarczy w oknie notek wpisać:
# <umiejetnosc_wymagana ID, ID, ...>
# gdzie ID to id umiejętności w Bazie Danych
#===================================================================
module AYENE
module ItemSpec
ITEM_SPEC = /<(?:WYMAGANIA|wymagania)\s*(\d+)\s*, \s*(\d+), \s*(\d+), \s*(\d+), \s*(\d+), \s*(\d+), \s*(\d+)>/i
WEAPON_TEXT = "By założyć tę broń musisz mieć:"
ARMOR_TEXT = "By założyć ten pancerz musisz mieć:"
ACC_TEXT = "By założyć ten przedmiot musisz mieć:"
PARAM_NAMES = ["Poziom", "Żywotność", "Mana", "Atak", "Obrona", "Wola", "Zwinność", "Umiejętności:"]
SKILL_SPEC = /<(?:UMIEJETNOSC_WYMAGANA|umiejetnosc_wymagana)[ ]*(\d+(?:[ ]*,[ ]*\d+)*)>/i
SHOW_SKILL_REC = true # Czy wyświetlać, jakiej umiejętności brakuje?
end
end
#===================================================================
# RPG::BaseItem
#===================================================================
class RPG::BaseItem
attr_accessor :spec_params
def item_spec_ini
@spec_params = {}
(0..6).each{|i| @spec_params[i] = 0}
@spec_params[7] = []
self.note.split(/[\r\n]+/).each { |line|
case line
when AYENE::ItemSpec::ITEM_SPEC
@spec_params[0] = $1.to_i
@spec_params[1] = $2.to_i
@spec_params[2] = $3.to_i
@spec_params[3] = $4.to_i
@spec_params[4] = $5.to_i
@spec_params[5] = $6.to_i
@spec_params[6] = $7.to_i
end
}
self.note.split(/[\r\n]+/).each { |line|
case line
when AYENE::ItemSpec::SKILL_SPEC
$1.scan(/\d+/).each { |num|
skill_id = num.to_i
@spec_params[7].push(skill_id) if $data_skills[skill_id] != nil
}
end
}
end
end
#===================================================================
# RPG::Weapon
#===================================================================
class RPG::Weapon < RPG::BaseItem
def spec_text
return AYENE::ItemSpec::WEAPON_TEXT
end
end
#===================================================================
# RPG::Armor
#===================================================================
class RPG::Armor < RPG::BaseItem
def spec_text
case kind
when 3
return AYENE::ItemSpec::ACC_TEXT
else
return AYENE::ItemSpec::ARMOR_TEXT
end
end
end
#===================================================================
# Window_EquipItem
#===================================================================
class Window_EquipItem < Window_Item
def enable?(item)
return @actor.equip_allowed?(item)
end
end
#===================================================================
# Scene_Title
#===================================================================
class Scene_Title < Scene_Base
alias aye_sctit_loaddata load_database
def load_database
aye_sctit_loaddata
for group in [$data_weapons, $data_armors]
for obj in group
next if obj.nil?
obj.item_spec_ini
end
end
end
end
#===================================================================
# Scene_Equip
#===================================================================
class Scene_Equip < Scene_Base
alias aye_itspec_sceq_update update
def update
if @spec_window != nil
update_spec_selection
else
aye_itspec_sceq_update
end
end
def update_item_selection
if Input.trigger?(Input::B)
Sound.play_cancel
@equip_window.active = true
@item_window.active = false
@item_window.index = -1
elsif Input.trigger?(Input::C)
@item = @item_window.item
if @item != nil and !@actor.equip_allowed?(@item)
Sound.play_buzzer
@item_window.active = false
show_spec_window
else
Sound.play_equip
@actor.change_equip(@equip_window.index, @item_window.item)
for i in 0..4
item = @actor.equips[i]
@actor.change_equip(i, nil) if !item.nil? && !@actor.equip_allowed?(item)
end
@equip_window.active = true
@item_window.active = false
@item_window.index = -1
@equip_window.refresh
for item_window in @item_windows
item_window.refresh
end
end
end
end
def update_spec_selection
@frame < 200 ? @frame += 1 : @frame = 0
if @frame == 200 or Input.trigger?(Input::C) or Input.trigger?(Input::B)
@spec_window.dispose
@spec_window = nil
@item_window.active = true
end
end
def show_spec_window
@frame = 0
data = []
@item.spec_params.each {|type, value|
data.push([type, value]) if value > 0 if type < 7
}
data.sort!{|a,b| a[0] <=> b[0]}
skill = @item.spec_params[7]
@spec_window = Window_Equip_Help.new(@item, data, @actor, skill)
end
end
Demo
niepotrzebne
Screenshot
Spoiler:
Instrukcja
1. Wklej skrypt nad "Main" w Edytorze Skryptu.
2. Reszta instrukcji znajduje się w treści skryptu.
Wszystko jest ok, ale jest mały problemik, jeśli np. nasz gracz ma zręczność 51 ( a wymagania są 50) po czym po przez zdarzenie zmienimy jego zręczność na 49 to broń nadal jest zdolna do użytku...
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Sro 26 Paź, 2011 11:11
Skrypt jedynie blokuje ekwipowanie. W przypadku, który opisujesz wystarczy sprawdzić, czy gracz spełnia wymagania i ewentualnie ściągnąć mu ekwipunek. Dodaj na końcu skryptu ten fragment:
Spoiler:
Kod:
#===================================================================
# Game_Interpreter
#===================================================================
class Game_Interpreter
def check_change_equip(actor)
for equip in actor.equips
unless equip.nil?
if equip.spec_level > actor.level or
equip.spec_atk > actor.atk or equip.spec_def > actor.def or
equip.spec_spi > actor.spi or equip.spec_agi > actor.agi
case equip
when RPG::Weapon
actor.change_equip(0, nil)
when RPG::Armor
actor.change_equip(equip.kind+1, nil)
end
end
end
end
end
alias aye_command_315 command_315
def command_315
aye_command_315
iterate_actor_id(@params[0]) do |actor|
check_change_equip(actor)
end
end
alias aye_command_316 command_316
def command_316
aye_command_316
iterate_actor_id(@params[0]) do |actor|
check_change_equip(actor)
end
end
alias aye_command_317 command_317
def command_317
aye_command_317
actor = $game_actors[@params[0]]
if actor != nil
check_change_equip(actor)
end
end
end
Zalecane testy. Nie wiem, czy przewidziałam wszelkie zmiany parametrów. Pozdrawiam.
Ayene, wraz z komunikatem, który się wyświetla, mogłoby to wygląda w ten sposób - "Nie potrafisz jeszcze korzystać z tej broni, brakuje ci x siły i y zręczności". Coś w ten deseń ;)
tracersgta, fakt, pomyślałem o tym, ale zdaje mi się, że im dłuższy jest opis, tym jest mniej estetyczny.
Jako iż nie pomogłaś mi Ayene, wykorzystałem swoją początkową wiedzę z tworzenia skryptów. I sam dodałem sobie wymagania.
Chyba nie masz nic przeciwko, dla zainteresowanych skrypt:
Spoiler:
Kod:
#===================================================================
# Wymagania broni i pancerza [VX]
# by Ayene
# Dodatkowo wymagania HP i MP by Przemusiek25
# 27.01.2010 ver 1.0
# www.ultimateam.pl
#===================================================================
# Opis:
# Skrypt umożliwia ustawienie wymagań dla broni i pancerza.
# Na przykład ekwipowanie bohatera w topór dwuręczny byłoby możliwe
# dopiero po osiągnięciu konkretnego poziomu lub posiadaniu odpowiedniej
# statystyki.
#
# Instrukcja:
# By skorzystać ze skryptu w oknie 'Note' przy danym elemencie ekwipunku
# w Bazie Danych umieść tekst <wymagania LV, ATK, DEF, SPI, AGI, MAXHP, MAXMP>,
# gdzie:
# LV - wymagany poziom postaci
# ATK - atak (attack)
# DEF - obrona (defence)
# SPI - wola (spirit)
# AGI - zręczność/zwinność (agility)
# MAXHP - maksymalne HP (max. HP)
# MAXMP - maksymalne MP (max. MP)
#
# Przykładowo:
# Jeśli chcesz, by postać mogła ekwipować broń na poziomie 6, dodatkowo
# pod warunkiem, że ma 40 ataku i 70 obrony, oraz 60 Maksymalnego HP
# to w oknie 'Note' tej broni należy wpisać:
# <wymagania 6, 40, 70, 0, 0, 60, 0>
#
# Natomiast, gdy bohater ma mieć tylko odpowiednią zręczność:
# <wymagania 0, 0, 0, 0, 50, 0, 0>
#===================================================================
module AYENE
module ItemSpec
ITEM_SPEC = /<(?:WYMAGANIA|wymagania)\s*(\d+)\s*, \s*(\d+), \s*(\d+), \s*(\d+), \s*(\d+), \s*(\d+), \s*(\d+)>/i
WEAPON_TEXT = "Nie potrafisz jeszcze korzystać z tej broni."
ARMOR_TEXT = "Nie potrafisz jeszcze nosić tego pancerza."
end
end
#===================================================================
# RPG::BaseItem
#===================================================================
class RPG::BaseItem
def item_spec_ini
@spec_level = 0
@spec_atk = 0
@spec_def = 0
@spec_spi = 0
@spec_agi = 0
@spec_maxhp = 0
@spec_maxmp = 0
self.note.split(/[\r\n]+/).each { |line|
case line
when AYENE::ItemSpec::ITEM_SPEC
@spec_level = $1.to_i
@spec_atk = $2.to_i
@spec_def = $3.to_i
@spec_spi = $4.to_i
@spec_agi = $5.to_i
@spec_maxhp = $6.to_i
@spec_maxmp = $7.to_i
end
}
end
def spec_level
item_spec_ini if @spec_level == nil
return @spec_level
end
def spec_atk
item_spec_ini if @spec_atk == nil
return @spec_atk
end
def spec_def
item_spec_ini if @spec_def == nil
return @spec_def
end
def spec_spi
item_spec_ini if @spec_spi == nil
return @spec_spi
end
def spec_agi
item_spec_ini if @spec_agi == nil
return @spec_agi
end
def spec_maxhp
item_spec_ini if @spec_maxhp == nil
return @spec_maxhp
end
def spec_maxmp
item_spec_ini if @spec_maxmp == nil
return @spec_maxmp
end
end
#===================================================================
# RPG::Weapon
#===================================================================
class RPG::Weapon < RPG::BaseItem
def spec_text
return AYENE::ItemSpec::WEAPON_TEXT
end
end
#===================================================================
# RPG::Armor
#===================================================================
class RPG::Armor < RPG::BaseItem
def spec_text
return AYENE::ItemSpec::ARMOR_TEXT
end
end
#===================================================================
# Scene_Equip
#===================================================================
class Scene_Equip < Scene_Base
alias aye_itspec_sceq_start start
alias aye_itspec_sceq_ter terminate
alias aye_itspec_sceq_update update
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