Ultima Forum

Pełna wersja: Małe przerobienie skryptu
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Czy ktoś mógłby pomóc mi z przerobieniem skryptu Cienie pod zdarzeniami:
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
...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:
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
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:
Spoiler: (Otwórz)
Bardzo proszę o pomoc. To dla mnie ważne.
# 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 = ""
:roll:
Czyli to: NAZWA_ZDARZENIA = ""
Zamień na to: NAZWA_ZDARZENIA = "S%"
I tam gdzie chcesz mieć cień dajesz w nazwie zdarzenia S% np. S% Bohater

Czytajcie bo zginiecie!!!
(02-02-15 20:28)Adrapnikram napisał(a): [ -> ]I tam gdzie chcesz mieć cień dajesz w nazwie zdarzenia S% np. S% Bohater

Wiem, że tak można. Jednak to jest dużo roboty, żeby w każdym evencie pisać jakiś znaczek. Ja chcę, żeby cień był pod każdym zdarzeniem automatycznie, jednak z kilkoma wyjątkami.
Stranger141, to tak się nie da. Czasami nie da się pójść na łatwiznę :) Rozwiązanie Adrapnikrama jest jedynym właściwym i logicznym.
Venesard, oczywiście, że się da :)
Wystarczy ciąg znaków wykluczający użycie cienia dla danego zdarzenia i do tego odpowiednia reguła.
@spartanPAGE, co nie zmienia faktu że wciąż wymagałoby to wprowadzania tego ciągu znaków do każdego zdarzenia, więc na jedno i to samo wychodzi :)
Do każdego zdarzenia które >wyklucza< cień, a to jest różnica ;P Różnica o tyle znacząca, że tego potrzebuje autor
Sprawdź to:
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ń nie wyświetli się pod zdarzeniem, jeśli w nazwie zdarzenia
  # dodasz '[X]'.
  NAZWA_ZDARZENIA = "[X]"
  
#==========================================================================  
# 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) == false then
        character_shadow_set
      end
    end
  end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
  alias :update_MINTO_Character_Shadow :update
  def update
    update_MINTO_Character_Shadow
    update_character_shadow
  end
end
Co za niespodzianka... razz
Ayene znowu ratuje dzień.
Wszystko działa. Jak zawsze jesteś niezastąpiona, Ayene!

To zaoszczędzi mi dużo pracy!
Przekierowanie