31-01-15, 23:01
Czy ktoś mógłby pomóc mi z przerobieniem skryptu Cienie pod zdarzeniami:
...tak aby można było wykluczyć ze skryptu pewne zdarzenia, np. za pomocą dopisania [X] w nazwie. Coś takiego jak widziałem w skrypcie Nazwy nad zdarzeniami:
Linijka:
# Jeżeli wybrano u góry true, nazwę zdarzenia można ukryć dopisując [FNS]
# w jego edycji...
# np. Statek[FNS]
FLOAT_NAME_NOT_SHOW_TAG = '[FNS]'
Tylko, że zamiast ukrywania nazwy niech wyłączy się cień. Potrzebuję, żeby ktoś to zrobił, ponieważ skrypt ma problem z niektórymi obrazkami w zdarzeniach. Wyskakuje błąd:
Bardzo proszę o pomoc. To dla mnie ważne.
Kod:
# Cienie pod zdarzeniami [XP]
# Autor : Minto
# Tłumaczenie i poprawki: KillYou
# Przerobione na XP przez Ayene
#------------------------------------------------------------------------------
# Skrypt umożliwia dodanie cienia pod zdarzeniem
#==========================================================================
# Zapisz obrazek w folderze Graphics/Pictures jako 'Shadow'
#==========================================================================
# KONFIGURACJA:
# Cień wyświetli się pod zdarzeniem, jeśli w nazwie zdarzenia
# wpiszesz 'S%'. Jeżeli chcesz, by cień był pod każdym zdarzeniem,
# zmień poniższy fragment "S%" na "" (pozostaw pusty bez spacji)
NAZWA_ZDARZENIA = ""
#==========================================================================
# Sprite_Shadow_Module
#------------------------------------------------------------------------------
module Sprite_Shadow_Module
def dispose
unless @character_shadow.nil? then
@character_shadow.bitmap.dispose
@character_shadow.dispose
end
super
end
#--------------------------------------------------------------------------
# Opcje
#--------------------------------------------------------------------------
def character_shadow_set
@character_shadow = Sprite.new(self.viewport)
# Nazwa obrazka w cieniem w folderze Pictures
@character_shadow.bitmap = RPG::Cache.picture("Shadow")
# Przejrzystość
@character_shadow.opacity = (self.character.opacity / 2)
# Rozmiar cienia / pozycja
@shadow_size = @character_shadow.bitmap.width
@character_shadow.zoom_x = ((@cw * 100) / @shadow_size) / 100.0
@character_shadow.zoom_y = @character_shadow.zoom_x
ox_rate = ((32 * 100) / @cw) / 100.0
oy_rate = ((48 * 100) / @ch) / 100.0
@character_shadow.ox = self.ox * ox_rate
@character_shadow.oy = ((self.oy * oy_rate) / 2) - 4
@last_character_name = @character_name.dup
update_character_shadow
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
def update_character_shadow
if @character_shadow == nil then
return
end
if @character.jumping? then
@character_shadow.visible = false
return
end
if @last_character_name_shadow != @character_name
@last_character_name_shadow = @character_name
@shadow_size = @character_shadow.bitmap.width
@character_shadow.zoom_x = ((@cw * 100) / @shadow_size) / 100.0
@character_shadow.zoom_y = @character_shadow.zoom_x
@zoom_ox = @character_shadow.zoom_x
@zoom_oy = @character_shadow.zoom_y
ox_rate = ((32 * 100) / @cw) / 100.0
oy_rate = ((48 * 100) / @ch) / 100.0
@character_shadow.ox = self.ox * ox_rate
@character_shadow.oy = ((self.oy * oy_rate) / 2) - 4
end
@character_shadow.x = self.x
@character_shadow.y = self.y
@character_shadow.zoom_x = @zoom_ox * self.zoom_x
@character_shadow.zoom_y = @zoom_oy * self.zoom_y
@character_shadow.visible = (self.visible and @character_name != "")
@character_shadow.opacity = (self.character.opacity / 2)
end
end
#==========================================================================
# Game_Event
#------------------------------------------------------------------------------
class Game_Event < Game_Character
attr_reader :event
end
#==========================================================================
# Sprite_Character
#------------------------------------------------------------------------------
class Sprite_Character < RPG::Sprite
include(Sprite_Shadow_Module)
alias :MINTO_Character_Shadow_initialize :initialize
def initialize(viewport, character = nil)
MINTO_Character_Shadow_initialize(viewport, character)
case @character
when Game_Player then
character_shadow_set
when Game_Event then
if @character.event.name.include?(NAZWA_ZDARZENIA) == true then
character_shadow_set
end
end
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
alias :update_MINTO_Character_Shadow :update
def update
update_MINTO_Character_Shadow
update_character_shadow
end
end
Kod:
#===============================================================
# [XP] Unoszące się nazwy zdarzeń
# Skrypt wyświetla na mapie nazwy zdarzeń.
# Skrypt przerobiony z wersji VX na XP by Ayene
#--------------------------------------------------------------
# Autor VX: Woratana [woratana@hotmail.com]
# Tłumaczenie i poprawki: Ayene [yurika@o2.pl]
#--------------------------------------------------------------
# Umieść skrypt nad Main
#=================================================================
module Ayene
KOLOR_CZCIONKI = Color.new(0,0,127, 255) # Kolor RGB i przezroczystość 0~255
ROZMIAR_CZCIONKI = 16 # Rozmiar czcionki
NAZWA_CZCIONKI = "Arial" # Czcionka (folder Fonts)
KURSYWA = false # Kursywa (true / false)
POGRUBIENIE = false # Pogrubienie (true / false)
end
class Sprite_Character < RPG::Sprite
#=================================================================
# POCZĄTEK KONFIGURACJI
#=================================================================
FLOAT_NAME_SHOW_ALL = false
# Czy chcesz, aby wyświetlały się nazwy wszystkich zdarzeń?
# (true - tak / false - nie)
# Jeżeli wybrano u góry false, nazwę zdarzenia można wyświetlić dopisując [FS]
# w jego edycji...
# np. Statek[FS]
FLOAT_NAME_SHOW_TAG = '[FS]'
# Jeżeli wybrano u góry true, nazwę zdarzenia można ukryć dopisując [FNS]
# w jego edycji...
# np. Statek[FNS]
FLOAT_NAME_NOT_SHOW_TAG = '[FNS]'
# Tutaj można ukryć słowa, które mają się nie wyświetlać w nazwie zdarzenia
# np. FLOAT_NAME_NOT_SHOW_WORDS = ['[ny]', '[ss]', 'lol']
# Wówczas w nazwie zdarzenia nie wyświetlą się słowa [ny], [ss] i lol.
FLOAT_NAME_NOT_SHOW_WORDS = []
FLOAT_NAME_X_OFFSET = 10 # Przesunięcie nazwy zdarzenia w poziomie (+ / -)
FLOAT_NAME_Y_OFFSET = 0 # Przesunięcie nazwy zdarzenia w pionie (+ / -)
FLOAT_NAME_Z = 198 # Przesunięcie nazwy zdarzenia nad (+) lub pod (-) inne zdarzenia.
#=================================================================
# KONIEC KONFIGURACJI
#=================================================================
alias wora_floatevn_sprcha_dis dispose
alias wora_floatevn_sprcha_upd update
def dispose
if !@charname_box.nil? and @charname_box.is_a?(Sprite)
@charname_box.bitmap.dispose
@charname_box.dispose
end
wora_floatevn_sprcha_dis
end
def update
wora_floatevn_sprcha_upd
if @character.is_a?(Game_Event)
if @charname_box.nil?
if (FLOAT_NAME_SHOW_ALL and !@character.event.name.include?(FLOAT_NAME_NOT_SHOW_TAG)) or
(!FLOAT_NAME_SHOW_ALL and @character.event.name.include?(FLOAT_NAME_SHOW_TAG))
@float_charname = @character.event.name.dup
not_show_words = FLOAT_NAME_NOT_SHOW_WORDS.clone.push FLOAT_NAME_SHOW_TAG,
FLOAT_NAME_NOT_SHOW_TAG
not_show_words.each {|w| @float_charname.gsub!(w) {''} }
@charname_box = Sprite.new
@charname_box.z = FLOAT_NAME_Z
bitmap = Bitmap.new(1,1)
nsize = bitmap.text_size(@float_charname)
bitmap.dispose
@charname_box.bitmap = Bitmap.new(nsize.width, nsize.height)
@charname_box.bitmap.font.color = Ayene::KOLOR_CZCIONKI
@charname_box.bitmap.font.size = Ayene::ROZMIAR_CZCIONKI
@charname_box.bitmap.font.name = Ayene::NAZWA_CZCIONKI
@charname_box.bitmap.font.italic = Ayene::KURSYWA
@charname_box.bitmap.font.bold = Ayene::POGRUBIENIE
@charname_box.bitmap.draw_text(0, 0, nsize.width, nsize.height, @float_charname)
else
@charname_box = 0
end
end
if @charname_box.is_a?(Sprite)
# @charname_box.x = self.x + FLOAT_NAME_X_OFFSET
# @charname_box.y = self.y + FLOAT_NAME_Y_OFFSET
@charname_box.x = self.x - (@charname_box.bitmap.width / 2) + FLOAT_NAME_X_OFFSET
@charname_box.y = self.y - self.oy - @charname_box.bitmap.height + FLOAT_NAME_Y_OFFSET
end
end
end
end
class Game_Event < Game_Character
attr_reader :event
end
# Jeżeli wybrano u góry true, nazwę zdarzenia można ukryć dopisując [FNS]
# w jego edycji...
# np. Statek[FNS]
FLOAT_NAME_NOT_SHOW_TAG = '[FNS]'
Tylko, że zamiast ukrywania nazwy niech wyłączy się cień. Potrzebuję, żeby ktoś to zrobił, ponieważ skrypt ma problem z niektórymi obrazkami w zdarzeniach. Wyskakuje błąd:
Spoiler: (Otwórz)