Ayene - Czw 27 Sty, 2011 10:43 Temat postu: 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.
Piszcie w razie problemów.MrBoomGood - Pon 02 Maj, 2011 22:16 Super skrypt! Tego szukałem, i w końcu znalazłem! Wielki dzięki, jesteś wielka!!!pokecath - Wto 03 Maj, 2011 11:00 Wielkie dzięki! Tony - Sro 18 Maj, 2011 18:32 DobreDeathFuj - Pią 09 Wrz, 2011 17:01 Temat postu: DziałaDziała wszysztko jest ;)[/scroll]Narfann - Pon 24 Paź, 2011 19:23 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...Ayene - 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.AvenCrazy - Pią 28 Paź, 2011 15:53 Świetny skrypt, ale dodałbym taki bajer, że od razu pokazuje, jakie statystyki są wymagane do itemka. Ayene - Pią 28 Paź, 2011 17:37 A jakieś sugestie, gdzie miałoby się coś takiego wyświetlać? tracersgta - Pią 28 Paź, 2011 17:40 @AvenCrazy Możesz to po prostu napisać w opisie przedmiotu... Np. Długi żelazny miecz. Wymaga 20 siły i 10 zwinności. AvenCrazy - Pią 28 Paź, 2011 23:26 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.doa1996 - Pią 25 Lis, 2011 11:12 Fajny skrypt :D Działa mi w 100%przemusiek25 - Nie 05 Lut, 2012 14:29 a można by tak dodać do skryptu ograniczenie względem Max HP i Max MP?przemusiek25 - Wto 07 Lut, 2012 10:05 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
def terminate
aye_itspec_sceq_ter
@spec_window.dispose
end
def update
@spec_window.update
if @spec_window.active
update_spec_selection
end
aye_itspec_sceq_update
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 !(@item.spec_level <= @actor.level and
@item.spec_atk <= @actor.atk and @item.spec_def <= @actor.def and
@item.spec_spi <= @actor.spi and @item.spec_agi <= @actor.agi and
@item.spec_maxhp <= @actor.maxhp and @item.spec_maxmp <= @actor.maxmp)
Sound.play_buzzer
@spec_window.set_text(@item.spec_text, 1)
@spec_window.visible = true
@spec_window.active = true
@item_window.active = false
else
Sound.play_equip
@actor.change_equip(@equip_window.index, @item_window.item)
@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 < 50 ? @frame += 1 : @frame = 0
if @frame == 50
@spec_window.visible = false
@item_window.active = true
@spec_window.active = false
end
end
end
#===================================================================
# Window_Help
#===================================================================
class Window_Help < Window_Base
def initialize(x=0, y=0, w=544, h=WLH + 32)
super(x, y, w, h)
end
end
[ Komentarz dodany przez: Ayene: Wto 07 Lut, 2012 10:52 ] BrawaWeeto - Sob 03 Mar, 2012 11:03 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 ?Ayene - Nie 04 Mar, 2012 20:10 Aktualizacja skryptu! Dodano m.in. opcję, dzięki której można wprowadzić wymóg posiadania odpowiedniej umiejętności.Weeto - Pon 05 Mar, 2012 20:46 Bardzo ci dziękuje. Prosiłem o to bo wydawało mi się głupie by np. mieć krotki miecz który dodaje załóżmy 30 ataku (czyli siły ) wymagane jest 20 siły.kolkav5 - Czw 21 Cze, 2012 11:04 Pomocne.
Praktyczne.
Łatwe.
Przydatne ITP.
Bardzo fajny!