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.
#===================================================================
# 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 12: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
Dało by się zmienić ten skrypt tak aby nałożyć broń trzeba mieć odpowiednie umiejętności
np. Długi żelazny miecz : wymagania Broń dwuręczna II ?
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