![Wymagania Ekwipunku / Equipment Requirements [VX] Wymagania Ekwipunku / Equipment Requirements [VX]](/tagteam/images/scripts/scripts_equipment_requirements.png)

Autor: Ayene [ Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie obsługi JavaScript. ]

Kompatybilność:
RPG Maker 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. 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ład:
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.

Skrypt:
#===================================================================
# 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
#===================================================================
# Game_Actor
#===================================================================
class Game_Actor < Game_Battler
def equip_allowed?(item)
return true if (item.spec_params[0] <= level && item.spec_params[1] <= base_maxhp &&
item.spec_params[2] <= base_maxmp && item.spec_params[3] <= base_atk &&
item.spec_params[4] <= base_def && item.spec_params[5] <= base_spi &&
item.spec_params[6] <= base_agi) && equip_skill_allowed?(item)
return false
end
def equip_skill_allowed?(item)
item.spec_params[7].each{|skill_id|
return false if !skill_learn?($data_skills[skill_id])
}
return true
end
end
#===================================================================
# Game_Interpreter
#===================================================================
class Game_Interpreter
def check_change_equip(actor)
for i in 0..4
item = actor.equips[i]
actor.change_equip(i, nil) if !item.nil? && !actor.equip_allowed?(item)
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
iterate_actor_id(@params[0]) do |actor|
check_change_equip(actor)
end
end
end
#===================================================================
# Window_Help
#===================================================================
class Window_Equip_Help < Window_Base
def initialize(item, data, actor, skill)
if skill.empty? or !AYENE::ItemSpec::SHOW_SKILL_REC
height = (data.size+1) / 2 * WLH + WLH + 32
else
height = (data.size+1) / 2 * WLH + WLH + 32 + WLH * [skill.size, 7].min
end
super(42, 180 - height/2, 460, height)
self.back_opacity = 255
self.contents.font.color = crisis_color
self.contents.draw_text(4, 0, self.width - 40, WLH, item.spec_text, 1)
x = 10
y = WLH
data.each_with_index{|array, i|
self.contents.font.color = system_color
self.contents.draw_text(x+i%2*240, y+i/2*WLH, 200, WLH, AYENE::ItemSpec::PARAM_NAMES[array[0]].to_s, 0)
self.contents.font.color = normal_color
self.contents.draw_text(x+120+i%2*240, y+i/2*WLH, 40, WLH, array[1].to_s, 2)
}
if !skill.empty? and AYENE::ItemSpec::SHOW_SKILL_REC
size = (data.size+1)/2*WLH
self.contents.font.color = system_color
self.contents.draw_text(x, y+size, 200, WLH, AYENE::ItemSpec::PARAM_NAMES[7].to_s, 0)
self.contents.font.color = normal_color
skill.each_with_index{|id, i|
self.contents.draw_text(x+140, y+size+WLH*i, 200, WLH, "- #{$data_skills[id].name}", 0)
}
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

Dodatkowe informacje:
1. Wklej skrypt nad "Main" w Edytorze Skryptu.
2. Reszta instrukcji znajduje się w treści skryptu.