Conditional Skills And Equipment by Syvkal ver.2.6.1
Co to w zasadzie jest ??
Jest to skrypt pozwalający na ustalenie szczególnych warunków użycia umiejętności bądź też ekwipunku. Jeśli życzyłbyś sobie , że umiejętność może być użyta gdy twój bohater jest w jakimś stanie , ma mało życia albo musi użyć jakiegoś przedmiotu, to ten skrypt jest dla ciebie
Postarałem się go przełumaczyć tak, ażeby był zrozumiały dla każdego.
Spoiler:
Kod:
#==============================================================================
# ** Conditional Skills And Equipment
#------------------------------------------------------------------------------
# By Syvkal
# Version 2.6.1
# 05-09-08
# tłumaczenie flang3r (www.ultimateam.pl)
#==============================================================================
# - WAŻNE -
# Aby skrypt zadziałał poprawnie, musisz posiadać skrypt Include NOTES, który
# jest do ściągnięcia na naszej stronce w tym samym temacie.
# Bez tego krypt NIE ZADZIAŁA!!!
#
# - WPROWADZENIE -
# Skrypt ten pozwala na ustawienie specjalnych warunków użycia umiejętności i
# ekwipunku.
# Jest ich bardzo wiele, możesz je sprawdzić poniżej:
#
#------------------------------------------------------------------------------
#
# - DODATKI -
#
# Istnieje bardzo dużo warunków, których możesz użyć
# Oto one:
#
# STATE - podane stany zostały wywołane
# WEAPON - podana broń jest założona
# ARMOUR - podany pancerz jest założona
# ITEM - podane przedmioty są w posiadaniu (mogą być używane)
# HP - podana wartość jest większa bądź mniejsza od procentowej liczby MAXHP
# GOLD - drużyna posiada podaną ilość złota (może być wykorzystywane)
# LEVEL - posiada poziom powyżej lub poniżej podanej wartości
# CLASS - klasa bohatera
# PARTYMEMBER - w składzie drużyny jest podany bohater (i nie jest martwy)
# PARTYNUMBER - w składzie drużyny jest podana ilość bohaterów (i nie są martwi)
# FREEHAND - bohater posiada wolną jedną z dłoni
# ATK - bohater posiada podaną wartość ATK
# DEF - bohater posiada podaną wartość DEF
# SPI - bohater posiada podaną wartość SPI
# AGI - bohater posiada podaną wartość AGI
#
# NOSHOW - dodaj to jeśli chcesz ukryć umiejętność gdy nie są spełnione warunki
# do jej użycia
#
# Więcej niż jeden z powyższych warunków może być użyty na raz.
# Jednakże, część z nich można użyć tylko w zakładce umiejętności a część w
# ekwipunku.
#------------------------------------------------------------------------------
#
# - SPOÓB UŻYCIA -
#
# Najpierw stwórz umiejętność/pancerz w bazie danych swoje gry, następnie wklej
# w polu notatek umiejętności/pancerza poniższą treść:
#
# <skill> <equip>
# ..... lub .....
# <skill> <equip>
#
#
# Treść <skill> wklejamy w notkach umiejętności, treść <equip> w notkach
# ekwipunku.
# Wszystkie "tagi" warunków wklejamy w wykropkowane pole.
# Każdy warunek umieszczaj w osobnej linii.
#
# Warunki muszą być powiązane z liczbami, wpisując kilka liczb oddziel je
# przecinkiem ','
# Niektóre z warunków mogą używać dodatku '&'.
#
# Jeśli nie jesteś pewien co i jak, zerknij na poniższe przykłady:
#------------------------------------------------------------------------------
#
# - UMIEJĘTNOŚCI -
#
# Następujące warunki mogą być użyte w przypadku umiejętności:
#
# STATE WEAPON ARMOUR HPLESS HPMORE
# FREEHAND ITEM ITEMUSE GOLD GOLDUSE
# LEVELLESS LEVELMORE CLASS
# PARTYNUMBER PARTYMEMBER
#
#------------------------------------------------------------------------------
#
# - EKWIPUNEK -
#
# Następujące warunki mogą być użyte w przypadku ekwipunku:
#
# LEVELLESS LEVELMORE WEAPON ARMOUR
# ATK DEF SPI AGI
#
#------------------------------------------------------------------------------
#
# - PRZYKŁADY -
#
# Oto przykłady z zastosowaniem poszczególnych warunków wraz z objaśnieniem:
#
# STATE12 - Stan numer 12 z bazy danych musi być wywołany
# WEAPON1 - Broń numer 1 z bazy danych musi być założona
# ARMOUR2,9 - Obydwa pancerze - 2 i 9 muszą być założone
# FREEHAND2 - Obydwie ręce muszą być wolne (brak założonej broni, tarczy)
# HPLESS25 - Ilość HP musi być poniżej 25% wartości MAXHP
# HPMORE50 - Ilość HP musi być powyżej 50% wartości MAXHP
# ITEM1,2 - Musisz posiadać przedmiot numer 1 i 2 aby użyć umiejętności
# ITEMUSE1,2 - musisz posiadać i użyć jeden raz przedmiotu nr 1 i 2
# ITEM1&3,2 - musisz posiadać trzy sztuki przedmiotu nr 1 i przedmiot
# numer 2 aby użyć umiejętności
# ITEMUSE1&3 - musisz posiadać i użyć 3 razy pzedmiotu nr 3
# GOLD1000 - musisz mieć 1000 sztuk złota
# GOLDUSE100 - musisz posiadać i użyć 100 sztuk złota
# CLASS1,2 - Musisz być klasą nr 1 lub nr 2 (domyślnie Paladin, Warrior)
# LEVELLESS5 - poziom doświadczenia musi być poniżej poziomu piątego
# LEVELMORE9 - poziom doświaczenia musi być powyżej poziomu dziewiątego
# PARTYMEMBER4 - w drużynie musisz mieć bohatera nr 4 (RTP:Ylva)
# PARTYNUMBER3 - musisz mieć w drużynie 3 lub więcej bohaterów
# ATK100 - wartość statystyki ATK musi być większa lub równa 100
# DEF100 - wartość statystyki DEF musi być większa lub równa 100
# SPI100 - wartość statystyki SPI musi być większa lub równa 100
# AGI100 - wartość statystyki AGI musi być większa lub równa 100
#
#==============================================================================
#===================================================#
# ** SYSTEM KONFIGURACJI ** #
#===================================================#
# Zdjąć ekwipunek kiedy warunki nie zostały spełnione?
REMOVE_EQUIP = true
# Pokazać wiadomość, że ekwipunek został zdjęty?
SHOW_MESSAGE = true
# Prędkość, po jakiej wiadomość znika
MESSAGE_SPEED = 2 # 1 = Slow 2 = Medium 3+ = Very Fast
# Liczba klatek, w czasie których wiadomość jest widoczna
MESSAGE_STAY = 20 # 20 jest w normie - możesz ją zmniejszyć jeśli trwa za
# długo
# Użyć ikony w wiadomości?
USE_ICON = true
# Wiadomość informująca, co zostało zdjęte
EQUIP_REMOVE = "%s unequipped"
# Wiadomość wyjaśniająca, dlaczego tak się stało
EQUIP_MESSAGE = "%s can't use it anymore"
#===================================================#
# ** KONIEC KONFIGURACJI ** #
#===================================================#
#==============================================================================
# ** Import skryptu
#------------------------------------------------------------------------------
# Dodany do możliwości pracy z lub bez warunkowych umiejętności
#==============================================================================
$imported = {} if $imported == nil
$imported["ConditionalSkill"] = true
#==============================================================================
# ** Game_Battler
#------------------------------------------------------------------------------
# Dodaje sprawdzenia dla warunkowych umiejętności i ekwipunku
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# * Alias Listings ( sprawdzanie terminów??)
#--------------------------------------------------------------------------
alias skill_use_original skill_can_use?
#--------------------------------------------------------------------------
# * Uwzględnia skrypt NOTES module
#--------------------------------------------------------------------------
include NOTES
#--------------------------------------------------------------------------
# * Określa używane umiejętności
#--------------------------------------------------------------------------
def skill_can_use?(skill)
return false unless skill_condition_can_use?(skill)
skill_use_original(skill)
end
#--------------------------------------------------------------------------
# * Określa używane warunki umiejętności
#--------------------------------------------------------------------------
def skill_condition_can_use?(skill)
if has_tag?(skill.note, '<skill>')
@conditions = get_tag_area(skill.note, '<skill>')
if has_tag?(@conditions,'STATE')
@tags = get_tag(@conditions,'STATE')
for i in 0...@tags.size
return false unless state?(@tags[i].to_i)
end
end
if has_tag?(@conditions,'WEAPON')
@tags = get_tag(@conditions,'WEAPON')
for i in 0...@tags.size
return false unless weapons.include?($data_weapons[@tags[i].to_i])
end
end
if has_tag?(@conditions,'ARMOUR')
@tags = get_tag(@conditions,'ARMOUR')
for i in 0...@tags.size
return false unless armors.include?($data_armors[@tags[i].to_i])
end
end
if has_tag?(@conditions,'ITEM')
@tags = get_multiple_tag(@conditions,'ITEM','USE')
for i in 0...@tags.size
if @tags[i].is_a?(Array)
return false unless $game_party.item_number($data_items[@tags[i][0].to_i]) >= @tags[i][1].to_i
else
return false unless $game_party.item_number($data_items[@tags[i].to_i]) >= 1
end
end
end
if has_tag?(@conditions,'ITEM','USE')
@tags = get_multiple_tag(@conditions,'ITEM','USE')
for i in 0...@tags.size
if @tags[i].is_a?(Array)
return false unless $game_party.item_number($data_items[@tags[i][0].to_i]) >= @tags[i][1].to_i
else
return false unless $game_party.item_number($data_items[@tags[i].to_i]) >= 1
end
end
end
if has_tag?(@conditions,'HP','LESS')
@tags = get_tag(@conditions,'HP','LESS')
return false unless hp <= maxhp / (100 / @tags[0].to_i)
end
if has_tag?(@conditions,'HP','MORE')
@tags = get_tag(@conditions,'HP','MORE')
return false unless hp >= maxhp / (100 / @tags[0].to_i)
end
if has_tag?(@conditions,'LEVEL','LESS')
@tags = get_tag(@conditions,'LEVEL','LESS')
return false unless @level < @tags[0].to_i
end
if has_tag?(@conditions,'LEVEL','MORE')
@tags = get_tag(@conditions,'LEVEL','MORE')
return false unless @level > @tags[0].to_i
end
if has_tag?(@conditions,'CLASS')
@tags = get_tag(@conditions,'CLASS')
return false unless @class_id == @tags[0].to_i or @tags[1].to_i
end
if has_tag?(@conditions,'GOLD')
@tags = get_multiple_tag(@conditions,'GOLD','USE')
return false unless $game_party.gold >= @tags[0].to_i
end
if has_tag?(@conditions,'GOLD','USE')
@tags = get_multiple_tag(@conditions,'GOLD','USE')
return false unless $game_party.gold >= @tags[0].to_i
end
if has_tag?(@conditions,'PARTY','NUMBER')
@tags = get_multiple_tag(@conditions,'PARTY','NUMBER')
return false unless $game_party.existing_members.size >= @tags[0].to_i
end
if has_tag?(@conditions,'PARTY','MEMBER')
@tags = get_multiple_tag(@conditions,'PARTY','MEMBER')
return false unless $game_party.existing_members.include?($game_actors[@tags[0].to_i])
end
if has_tag?(@conditions,'FREEHAND')
@tags = get_tag(@conditions,'FREEHAND')
return false unless free_hands >= @tags[0].to_i
end
end
return true
end
#--------------------------------------------------------------------------
# * Określa używane warunki ekwipunku
#--------------------------------------------------------------------------
def equipment_can_use?(equip)
if equip != nil
if has_tag?(equip.note, '<equip>')
@conditions = get_tag_area(equip.note, '<equip>')
if has_tag?(@conditions,'LEVEL','LESS')
@tags = get_tag(@conditions,'LEVEL','LESS')
return false unless @level < @tags[0].to_i
end
if has_tag?(@conditions,'LEVEL','MORE')
@tags = get_tag(@conditions,'LEVEL','MORE')
return false unless @level > @tags[0].to_i
end
if has_tag?(@conditions,'WEAPON')
@tags = get_tag(@conditions,'WEAPON')
for i in 0...@tags.size
return false unless weapons.include?($data_weapons[@tags[i].to_i])
end
end
if has_tag?(@conditions,'ARMOUR')
@tags = get_tag(@conditions,'ARMOUR')
for i in 0...@tags.size
return false unless armors.include?($data_armors[@tags[i].to_i])
end
end
if has_tag?(@conditions,'ATK')
@tags = get_tag(@conditions,'ATK')
return false unless actor.parameters[2, @level] >= @tags[0].to_i
end
if has_tag?(@conditions,'DEF')
@tags = get_tag(@conditions,'DEF')
return false unless actor.parameters[3, @level] >= @tags[0].to_i
end
if has_tag?(@conditions,'SPI')
@tags = get_tag(@conditions,'SPI')
return false unless actor.parameters[4, @level] >= @tags[0].to_i
end
if has_tag?(@conditions,'AGI')
@tags = get_tag(@conditions,'AGI')
return false unless actor.parameters[5, @level] >= @tags[0].to_i
end
end
end
return true
end
#--------------------------------------------------------------------------
# * Określa ukryte umiejętności
#--------------------------------------------------------------------------
def show_skill?(skill)
return true if skill_can_use?(skill)
if has_tag?(skill.note,'NOSHOW')
return skill_condition_can_use?(skill)
end
return true
end
#--------------------------------------------------------------------------
# * Sprawdzanie wolnych rąk ( sprawdzanaie braku broni i tarczy)
#--------------------------------------------------------------------------
def free_hands
@free_hands = 0
@free_hands += @weapon_id==0 ? 1 : 0
@free_hands += @armor1_id==0 ? 1 : 0
return @free_hands
end
end
#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# Dodaje odwołanie się do koniecznych komponentów umiejętności
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# * Alias Listings(jw kilka linijek w górę)
#--------------------------------------------------------------------------
alias execute_skill_original execute_action_skill
#--------------------------------------------------------------------------
# * Uwzględnia skrypt NOTES module
#--------------------------------------------------------------------------
include NOTES
#--------------------------------------------------------------------------
# * Wykonuje animację walki: umiejętność
#--------------------------------------------------------------------------
def execute_action_skill
execute_skill_original
skill = @active_battler.action.skill
if has_tag?(skill.note, '<skill>')
@conditions = get_tag_area(skill.note, '<skill>')
if has_tag?(@conditions,'ITEM','USE')
@tags = get_multiple_tag(@conditions,'ITEM','USE')
for i in 0...@tags.size
if @tags[i].is_a?(Array)
$game_party.lose_item($data_items[@tags[i][0].to_i],@tags[i][1].to_i,true)
else
$game_party.lose_item($data_items[@tags[i].to_i],1,true)
end
end
end
if has_tag?(@conditions,'GOLD','USE')
@tags = get_tag(@conditions,'GOLD','USE')
$game_party.lose_gold(@tags[0].to_i)
end
end
end
end
#==============================================================================
# ** Scene_Skill
#------------------------------------------------------------------------------
# Dodaje odwołanie się do koniecznych warunków umiejętności
#==============================================================================
class Scene_Skill < Scene_Base
#--------------------------------------------------------------------------
# * Alias Listings (jw kilka linijek w górę)
#--------------------------------------------------------------------------
alias use_skill_original use_skill_nontarget
#--------------------------------------------------------------------------
# * Uwzględnia skrypt NOTES module
#--------------------------------------------------------------------------
include NOTES
#--------------------------------------------------------------------------
# * Użycie umiejętności (dodaje efekty na niesojuszników)
#--------------------------------------------------------------------------
def use_skill_nontarget
if has_tag?(@skill.note, '<skill>')
@conditions = get_tag_area(@skill.note, '<skill>')
if has_tag?(@conditions,'ITEM','USE')
@tags = get_multiple_tag(@conditions,'ITEM','USE')
for i in 0...@tags.size
if @tags[i].is_a?(Array)
$game_party.lose_item($data_items[@tags[i][0].to_i],@tags[i][1].to_i,true)
else
$game_party.lose_item($data_items[@tags[i].to_i],1,true)
end
end
end
if has_tag?(@conditions,'GOLD','USE')
@tags = get_tag(@conditions,'GOLD','USE')
$game_party.lose_gold(@tags[0].to_i)
end
use_skill_original
end
end
end
class Window_EquipItem < Window_Item
#--------------------------------------------------------------------------
# * Alias Listings ( jw kilka linijek temu)
#--------------------------------------------------------------------------
alias enable_original enable?
#--------------------------------------------------------------------------
# * określa pokazywanie przedmiotu w stanie możliwym do użycia
#--------------------------------------------------------------------------
def enable?(item)
return false unless @actor.equipment_can_use?(item)
enable_original(item)
end
end
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# Dodaje zdjęcie ekwipunku, gdy warunki nie zostały spełnione
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias update_original update
alias terminate_original terminate
alias start_original start
#--------------------------------------------------------------------------
# * Start processing
#--------------------------------------------------------------------------
def start
start_original
@stay = MESSAGE_STAY
end
#--------------------------------------------------------------------------
# * Termination Processing
#--------------------------------------------------------------------------
def terminate
terminate_original
@notify_window.dispose if @notify_window
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
update_original
if @notify_window
@notify_window.update
@stay -= 1
if @stay <= 0
@notify_window.opacity -= MESSAGE_SPEED
@notify_window.contents_opacity -= MESSAGE_SPEED
end
if @notify_window.opacity == 0
@notify_window.dispose
@notify_window = nil
end
end
if REMOVE_EQUIP
update_equipment
end
end
#--------------------------------------------------------------------------
# * Update Equipment
#--------------------------------------------------------------------------
def update_equipment
for actor in $game_party.members
for i in 0...actor.equips.size
unless actor.equipment_can_use?(actor.equips[i])
if SHOW_MESSAGE
unless @notify_window
@notify_window = Window_Base.new(0, 0, 320, 80)
w = @notify_window.width-32; h = @notify_window.height-32
@notify_window.contents = Bitmap.new(w, h)
@notify_window.x = (544 - @notify_window.width) / 2
@notify_window.y = (416 - @notify_window.height) / 2
@notify_window.z = 9998
icon_index = actor.equips[i].icon_index
if USE_ICON
@notify_window.draw_icon(icon_index, 0, 4,true)
end
@notify_window.contents.draw_text(USE_ICON ? 24 : 0, 0, w, 24, sprintf(EQUIP_REMOVE, actor.equips[i].name), 0)
@notify_window.contents.draw_text(0, 24, w, 24, sprintf(EQUIP_MESSAGE, actor.name), 2)
@stay = MESSAGE_STAY
actor.change_equip(i, nil)
end
end
end
end
end
end
end
#==============================================================================
# ** Scene_Equip
#------------------------------------------------------------------------------
# wyedytowane by do dodać funkcję 'equipment_can_use?'
#==============================================================================
class Scene_Equip < Scene_Base
#--------------------------------------------------------------------------
# * Update Item Selection
#--------------------------------------------------------------------------
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)
if @actor.equipment_can_use?(@item_window.item) # Added 'equipment_can_use?'
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
else
Sound.play_buzzer
end
end
end
end
#==============================================================================
# ** Window_Skill
#------------------------------------------------------------------------------
# Wyedytowane, by ukryć wybrane umiejętności
#==============================================================================
class Window_Skill < Window_Selectable
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
@data = []
for skill in @actor.skills
@data.push(skill) if @actor.show_skill?(skill) # Added 'If' statement
if skill.id == @actor.last_skill_id
self.index = @data.size - 1
end
end
@item_max = @data.size
create_contents
for i in 0...@item_max
draw_item(i)
end
end
end
Sposób użycia:
- aby skrypt zadziałał poprawnie musimy ściągnąć poniższy skrypt i umieścić go POWYŻEJ skryptu, który przedstawiam ( "Conditional skills..."). W przeciwnym razie skrypt NIE ZADZIAŁA. Jeśli wystąpił ci błąd 157 linijki, to znak że umieśćiłeś skrypt w złym miejscu
Spoiler:
Kod:
#==============================================================================
# ** Notes Field System
#------------------------------------------------------------------------------
# By Syvkal
# Version 1.5
# 05-29-08
#==============================================================================
module NOTES
def get_tag(field, tag, extra_tag = "")
note = ""+field
note = note.split("\r\n")
for i in 0...note.size
if note[i].include?(tag + extra_tag)
tags = note[i]
tags.slice!(tag)
if extra_tag != ""
tags.slice!(extra_tag)
end
tags = tags.split(/,\s*/)
return tags
end
end
return nil
end
def get_multiple_tag(field, tag, extra_tag = "")
note = ""+field
note = note.split("\r\n")
for i in 0...note.size
if note[i].include?(tag + extra_tag)
tags = note[i]
tags.slice!(tag)
if extra_tag != ""
tags.slice!(extra_tag)
end
tags = tags.split(/,\s*/)
for i in 0...tags.size
if tags[i].include?('&')
tags[i] = tags[i].split(/\s*\&\s*/)
end
end
return tags
end
end
return nil
end
def has_tag?(field, tag, extra_tag = "")
note = ""+field
if note.include?(tag + extra_tag)
return true
end
return falsehttp://www.ultimateam.pl/googiespell/change_lang.gif
end
def get_tag_area(field, area_tags)
note = ""+field
if note.include?(area_tags)
@yes = false
note = note.split(/#{area_tags}/)
note = note[1]
return note
else
return ""
end
end
end
Wszystko jest opisane dokładnie w skrypcie
Jeśli używasz tego skryptu, to nie zapomnij umieścić jego autora i tłumacza w creditsach
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