Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Pią 26 Mar, 2010 18:28
Wymagania broni i pancerza XP
~ Wymagania broni i pancerza XP ~
Krótki opis
Wielokrotnie na forum pojawiały się prośby o skrypt, który umożliwiałby ustawienie wymagań dla broni i pancerza, przykładowo ekwipowanie bohatera w topór dwuręczny byłoby możliwe dopiero po osiągnięciu konkretnego poziomu lub posiadaniu odpowiedniej siły. Otóż po wielu próbach i podejściach wreszcie udało mi się coś takiego zrobić. Mam nadzieję, że skrypt będzie działał bez zarzutów.
Zalecane dokładne testy kompatybilności z innymi (niż domyślny) systemami walki.
Autor skryptu
Ayene [yurika@o2.pl]
Kompatybilność
Tylko XP
Skrypt
Spoiler:
Kod:
#===================================================================
# Wymagania broni i pancerza [XP]
# by Ayene
# 26.03.2010 ver 1.3
# 04.03.2012 - dodano wymóg posiadania 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 należy skonfigurować wymagania (osobno dla każdej
# broni i pancerza) poniżej, zgodnie ze wzorem:
#
# WEAPON [ID broni] = [lv, maxhp, maxsp, str, dex, agi, int, [skill_id, skill_id, ...]]
#
# gdzie:
# LV - wymagany poziom postaci
# MAXHP - maksymalne HP (max HP)
# MAXMP - maksymalne MP (max MP)
# STR - siła (strength)
# DEX - zręczność (dexterity)
# AGI - szybkość (agility)
# INT - inteligencja (intelligence)
# SKILL_ID - ID umiejętności
#
# Przykładowo:
# Jeśli chcesz, by postać mogła ekwipować broń ID 2 na poziomie 6, dodatkowo
# pod warunkiem, że ma 120 max. HP, 40 siły i 70 inteligencji
# poniżej w sekcji BRONIE wpisz:
# WEAPON [2] = [6, 120, 0, 40, 0, 0, 70, []]
#
# Natomiast, aby założyć pancerz ID 3, który "wymaga" odpowiedniej zręczności
# i znajomości umiejętności o ID 10 i 40:
# ARMOR [3] = [0, 0, 0, 0, 70, 0, 0, [10, 40]]
#
#===================================================================
SHOW_SKILL_REQ = true # Czy wyświetlać, jakiej umiejętności brakuje?
WLH = 32
end
end
#===================================================================
# Game_Actor
#===================================================================
class Game_Actor < Game_Battler
include AYENE::EQUIP_REQ
#--------------------------------------------------------------------------
# * Determine if Item can be Equiped (Actor's Parameters)
# stat : stats
#--------------------------------------------------------------------------
def equip_allowed?(stat)
return true if stat[0] <= level && stat[1] <= base_maxhp &&
stat[2] <= base_maxsp && stat[3] <= base_str &&
stat[4] <= base_dex && stat[5] <= base_agi &&
stat[6] <= base_int && equip_skill_allowed?(stat)
return false
end
#--------------------------------------------------------------------------
# * Determine if Item can be Equiped (Actor's Skills )
# stat : stats
#--------------------------------------------------------------------------
def equip_skill_allowed?(stat)
return true if stat[7].empty?
stat[7].each{|skill_id|
return false if !skill_learn?(skill_id)
}
return true
end
#--------------------------------------------------------------------------
# * Check Change Equip
#--------------------------------------------------------------------------
def check_change_equip
for i in 0..4
case i
when 0
item = $data_weapons[@weapon_id]
stat = WEAPON[item.id]
if !stat.nil? && !equip_allowed?(stat)
$game_party.gain_weapon(@weapon_id, 1)
@weapon_id = 0
end
when 1
item = $data_armors[@armor1_id]
stat = ARMOR[item.id]
if !stat.nil? && !equip_allowed?(stat)
$game_party.gain_armor(@armor1_id, 1)
@armor1_id = 0
end
when 2
item = $data_armors[@armor2_id]
stat = ARMOR[item.id]
if !stat.nil? && !equip_allowed?(stat)
$game_party.gain_armor(@armor2_id, 1)
@armor2_id = 0
end
when 3
item = $data_armors[@armor3_id]
stat = ARMOR[item.id]
if !stat.nil? && !equip_allowed?(stat)
$game_party.gain_armor(@armor3_id, 1)
@armor3_id = 0
end
when 4
item = $data_armors[@armor4_id]
stat = ARMOR[item.id]
if !stat.nil? && !equip_allowed?(stat)
$game_party.gain_armor(@armor4_id, 1)
@armor4_id = 0
end
end
end
end
end
#===================================================================
# Scene_Equip
#===================================================================
class Scene_Equip
include AYENE::EQUIP_REQ
#--------------------------------------------------------------------------
# * Aliased Definitions
#--------------------------------------------------------------------------
alias ayene_item_stats_sceq_update update
alias ayene_item_stats_sceq_update_item update_item
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
@req_window != nil ? update_spec_selection : ayene_item_stats_sceq_update
end
#--------------------------------------------------------------------------
# * Frame Update (when item window is active)
#--------------------------------------------------------------------------
def update_item
@stat = nil
item = @item_window.item
case item
when RPG::Weapon
@stat = WEAPON[item.id]
else
@stat = ARMOR[item.id]
end
unless @stat == nil
if Input.trigger?(Input::C) && !@actor.equip_allowed?(@stat)
$game_system.se_play($data_system.buzzer_se)
@item_window.active = false
show_spec_window
return
end
end
ayene_item_stats_sceq_update_item
check_change_equip if Input.trigger?(Input::C)
end
#--------------------------------------------------------------------------
# * Check Change Equip
#--------------------------------------------------------------------------
def check_change_equip
@actor.check_change_equip
@right_window.refresh
@item_window1.refresh
@item_window2.refresh
@item_window3.refresh
@item_window4.refresh
@item_window5.refresh
end
#--------------------------------------------------------------------------
# * Frame Update (when requirements window is active)
#--------------------------------------------------------------------------
def update_spec_selection
@frame < 100 ? @frame += 1 : @frame = 0
if @frame == 100 or Input.trigger?(Input::C) or Input.trigger?(Input::B)
@req_window.dispose
@req_window = nil
@item_window.active = true
end
end
#--------------------------------------------------------------------------
# * Show Requirements Window
#--------------------------------------------------------------------------
def show_spec_window
@frame = 0
data = []
@stat.each_with_index {|value, type|
data.push([type, value]) if value > 0 if type < 7
}
data.sort!{|a,b| a[0] <=> b[0]}
skill = @stat[7]
@req_window = Window_EquipReq.new(@item, data, @actor, skill)
end
end
#===================================================================
# Game_Interpreter
#===================================================================
class Interpreter
include AYENE::EQUIP_REQ
#--------------------------------------------------------------------------
# * Aliased Definitions
#--------------------------------------------------------------------------
alias aye_command_315 command_315
alias aye_command_316 command_316
alias aye_command_317 command_317
alias aye_command_318 command_318
#--------------------------------------------------------------------------
# * Change EXP
#--------------------------------------------------------------------------
def command_315
aye_command_315
iterate_actor(@parameters[0]) do |actor|
check_change_equip(actor)
end
end
#--------------------------------------------------------------------------
# * Change Level
#--------------------------------------------------------------------------
def command_316
aye_command_316
iterate_actor(@parameters[0]) do |actor|
check_change_equip(actor)
end
end
#--------------------------------------------------------------------------
# * Change Parameters
#--------------------------------------------------------------------------
def command_317
aye_command_317
iterate_actor(@parameters[0]) do |actor|
check_change_equip(actor)
end
end
#--------------------------------------------------------------------------
# * Change Skills
#--------------------------------------------------------------------------
def command_318
aye_command_318
iterate_actor(@parameters[0]) do |actor|
check_change_equip(actor)
end
end
#--------------------------------------------------------------------------
# * Check Equipment
# actor : actor
#--------------------------------------------------------------------------
def check_change_equip(actor)
for i in 0..4
case i
when 0
item = $data_weapons[actor.weapon_id]
stat = WEAPON[item.id]
when 1
item = $data_armors[actor.armor1_id]
stat = ARMOR[item.id]
when 2
item = $data_armors[actor.armor2_id]
stat = ARMOR[item.id]
when 3
item = $data_armors[actor.armor3_id]
stat = ARMOR[item.id]
when 4
item = $data_armors[actor.armor4_id]
stat = ARMOR[item.id]
end
actor.equip(i, 0) if !stat.nil? && !actor.equip_allowed?(stat)
end
end
end
Demo
niepotrzebne
Screenshot
Spoiler:
Instrukcja
1. Wklej skrypt nad "Main" w Edytorze Skryptu.
2. Reszta instrukcji znajduje się w treści skryptu.
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Sob 10 Kwi, 2010 14:03
Skrypt działa w polskiej wersji bez zarzutów. Najwyraźniej ponownie pojawił się problem kompatybilności. Należałoby przejrzeć wszystkie skrypty i sprawdzić, które z nich ingerują w Scene_Equip w trzy najważniejsze definicje: main, update i update_item. Można również spróbować przesunąć po prostu skrypt tak, aby był najbliżej Main (pod innymi dodatkowymi skryptami).
Jest tylko jeden malutki błąd, jeśli ktoś chce użyć skryptu w polskiej wersji RM. Nie wyświetla się napis informujący o tym, że nie można jeszcze używać przedmiotu.
Aby to zmienić należy odnaleźć linijkę:
Hej mam prośbe bo jak czsytam to co piszesz to za ch^j niewiem oco kaman mugłbyś zrobic by było napisane konkretnie gdzie co bo nieczaje gdzie kody wpisywac co to module te by broni wymóg zrobic plisss!!!!!!!!!!
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Wto 16 Lis, 2010 19:16
Faktycznie do d^py taka robota, że musisz się k^wa głowić nad jakimś skryptem. "Mugłbym" zrobić by było konkretnie napisane, choć wystarczy postępować zgodnie ze wzorem:
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