Opis:
Skrypt pozwala nam utworzyć obszary które będą odbijały bohatera, czy zdarzenie. Jedynym mankamentem może być to, że obszary nie sprawdzają się przy skomplikowanych kształtach zbiorników wodnych...
Info:
Autor: Sephirothtds
Tłumaczenie: Angius Skrypt:
Spoiler:
Kod:
#==============================================================================
# ** TDS Sprite Reflect
# Version: 1.7
#------------------------------------------------------------------------------
# Ten skrypt odbija grafikę zdarzeń/bohaterów w określonych obszarach
#==============================================================================
# Instrukcje:
#
# Stwórz obszary mapy i nazwij je "Reflect".
#
# Dla eventów możemy użyć poniższych tagów w ich nazwie.
#
# Reflect
#
# Każdy event z "Reflect" w nazwie będzie się odbijał w ustawionych obszarach
#
# /OFFSET[#]
#
# [#] = Wartość przesunięcia.
#
# Przykład:
# /OFFSET[10]
#
# Offset zmienia położenie Y odbicia w pikselach. (Jak daleko
# odbicie będzie od źródła - grafiki odbijającej się)
#
# $game_player.reflect_offset = #
#
# # = Przesunięcie odbicia gracza.
#
# Tak samo jak /OFFSET[#], ale dla bohaterów.
#==============================================================================
#=======================================================================
# POTĘŻNA KONFIGURACJA!
#=======================================================================
# Nie zgubcie się w tym gąszczu opcji!
#--------------------------------------------------------------------------
# * Efekt falowania wody?
#--------------------------------------------------------------------------
WATER_WAVE_EFFECT = true
#=======================================================================
# KONIEC POTĘŻNEJ KONFIGURACJI!
#=======================================================================
#==============================================================================
# ** Sprite_Character
#------------------------------------------------------------------------------
# This sprite is used to display characters. It observes a instance of the
# Game_Character class and automatically changes sprite conditions.
#==============================================================================
class Sprite_Reflect < Sprite_Base
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :character
#--------------------------------------------------------------------------
# * Object Initialization
# viewport : viewport
# character : character (Game_Character)
# offset : offset value from the characters starting point.
#--------------------------------------------------------------------------
def initialize(viewport = nil, character = nil, offset = nil)
super(viewport)
self.visible = false
@character = character
@player_offset = $game_player.reflect_offset
@offset = (@character.is_a?(Game_Player) ? @player_offset : offset)
sprite_setup
update
end
#--------------------------------------------------------------------------
# * Sprite Setup
#--------------------------------------------------------------------------
def sprite_setup
self.bitmap = Cache.character(@character.character_name)
self.angle = 180
self.mirror = true
self.opacity = 120
sign = @character.character_name[/^[\!\$]./]
if sign != nil and sign.include?('$')
@cw = bitmap.width / 3
@ch = bitmap.height / 4
else
@cw = bitmap.width / 12
@ch = bitmap.height / 8
end
end
if WATER_WAVE_EFFECT == true
self.wave_amp = 1
self.wave_length = 1
self.wave_speed = 3
end
end
end
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
# This class brings together map screen sprites, tilemaps, etc. It's used
# within the Scene_Map class.
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# * Create Character Sprite
#--------------------------------------------------------------------------
alias tds_sprite_reflection_create_characters create_characters
def create_characters
tds_sprite_reflection_create_characters
@character_sprites = []
@event_reflection_sprite = []
@reflecting_events = []
for i in $game_map.events.keys.sort
sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
@character_sprites.push(sprite)
end
for vehicle in $game_map.vehicles
sprite = Sprite_Character.new(@viewport1, vehicle)
@character_sprites.push(sprite)
end
@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
for i in $game_map.events.keys.sort
@event_name_offset = $game_map.events[i].name
@event_name_offset[ /\/OFFSET\[(.*?)\]/ ]
sprite = Sprite_Reflect.new(@viewport1, $game_map.events[i], $1 != nil ? $1.to_i : 0)
if $game_map.events[i].name.include?("Reflect")
@event_reflection_sprite.push(sprite)
@reflecting_events.push($game_map.events[i])
end
end
@reflection_sprite = Sprite_Reflect.new(@viewport1, $game_player, 0)
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
alias tds_sprite_reflection_update update
def update
tds_sprite_reflection_update
if $game_player.current_area_name == "Reflect"
if $game_player.moving? == false
@reflection_sprite.visible = true
end
else
@reflection_sprite.visible = false
end
for i in 0...@reflecting_events.size
if @reflecting_events[i].current_area_name == "Reflect"
if @reflecting_events[i].moving? == false
@event_reflection_sprite[i].visible = true
end
else
@event_reflection_sprite[i].visible = false
end
end
if @reflection_sprite.visible == true
@reflection_sprite.update
end
for i in 0...@event_reflection_sprite.size
if @event_reflection_sprite[i].visible == true
@event_reflection_sprite[i].update
end
end
end
end
#==============================================================================
# ** Game_Character
#------------------------------------------------------------------------------
# This class deals with characters. It's used as a superclass of the
# Game_Player and Game_Event classes.
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :reflect_offset # Character Reflection Offset
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
alias tds_sprite_reflection_initialize initialize
def initialize
tds_sprite_reflection_initialize
@reflect_offset = 0
end
#--------------------------------------------------------------------------
# * Determine if in Area
# area : Area data (RPG::Area)
#--------------------------------------------------------------------------
def in_area?(area)
return false if area == nil
return false if $game_map.map_id != area.map_id
return false if @x < area.rect.x
return false if @y < area.rect.y
return false if @x >= area.rect.x + area.rect.width
return false if @y >= area.rect.y + area.rect.height
return true
end
#--------------------------------------------------------------------------
# * Current Area Name
#--------------------------------------------------------------------------
def current_area_name
# Checks the areas in the maps
for area in $data_areas.values
# If the character is currently on an area
if in_area?(area) == true
# Give the value of the name of the area to the return variable
return_area_name = area.name
# Break loop
break
end
end
return return_area_name
end
end
#==============================================================================
# ** Game_Event
#------------------------------------------------------------------------------
# This class deals with events. It handles functions including event page
# switching via condition determinants, and running parallel process events.
# It's used within the Game_Map class.
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# * Clear Starting Flag
#--------------------------------------------------------------------------
def name
return @event.name
end
end
Screen: Użycie:
Opisane w nagłówku skryptu. Znajduje się tam też potężna konfiguracja.filiotef - Pią 08 Lip, 2011 23:24 Extra skrypt Aruka21 - Pią 15 Lip, 2011 12:05 Jestem nowy i mam pytanie, a mianowicie jak tworzyć te obszary na mapie ?
Jeśli jest to możliwe to proszę jeszcze dodatkowo krótkie demko.
Pozdrawiam Aruka21Angius - Pią 15 Lip, 2011 14:57 PPM na mapie z listy po lewej i "stwórz obszar". A potem przeciągasz na mapce wyświetlonej w okienku tworząc prostokąty.Aruka21 - Pon 18 Lip, 2011 08:40 Dzięki wielkie Angius,Zeno3939 - Wto 30 Sie, 2011 14:43 Siemka . Mam pytanko co do skryptu . Dodałem go nad main , narysowałem na mapie zbiornik wodny i klikając prawym na nazwę mapy stworzyłem obszar nazwany Reflcet . Włączyłem grę , podchodzę do jeziorka a tu nic , żadnego odbicia . Wie ktoś dlaczego tak się dzieje ?Angius - Wto 30 Sie, 2011 15:06 Powiem szczerze, że mnie też coś nie pyka :/Zeno3939 - Wto 30 Sie, 2011 15:42 to jakim cudem zrobiłeś screena ? skrypt jest mi trochę potrzebny bo zamierzam zrobić coś na styl gry gothic tyle że w 2D , i chciałem jak najbardziej urealnić świat gry ( w tym zmienić grafikę [ całkowicie ! { buhahahahahahahahahahaha }]) .Angius - Wto 30 Sie, 2011 15:44 Screen pochodził z oryginalnego tematu. Do tej pory myślałem, że o wina Twierdzówki, że mi nie działał, ale skoro nie działa też innym...Zeno3939 - Wto 30 Sie, 2011 16:49 Gdyby komuś działał ten skrypt to proszę o pomoc . A teraz idę beczeć Ayene - Sro 31 Sie, 2011 10:46 Zeno3939 - Sro 31 Sie, 2011 11:30 a teraz pytanie : Jak ty to robisz że jesteś tak za@@bista ? :D wielkie dzięki :)MrBoomGood - Sro 31 Sie, 2011 13:55
Zeno3939 napisał/a:
a teraz pytanie : Jak ty to robisz że jesteś tak za@@bista ? :D wielkie dzięki :)
A teraz pytanie: Jak ty to robisz, że tak bardzo się podlizujesz?Zeno3939 - Sro 31 Sie, 2011 15:23 Wiesz talent .
Ha wykombinowałem jak pogodzić odbicia lustrzane ze skryptem wyświetlania się nazw zdarzeń . To bardzo proste . Po prostu trzeba zmienić tą linijkę :
Cytat:
if $game_map.events[i].name.include?("Revlect")
na tą linijkę :
Cytat:
if $game_map.events[i].name.include?("[FS]")
Taki trik dla osób które chcą to połączyć :) Niestety raczej nie ma takiego rozwiazania dla oddalenia odbicia :(bartek2940 - Pon 05 Wrz, 2011 22:39 Nie, żebym się czepiał ale mi skrypt działał od początku bez żadnych poprawek.
Ogółem jest super i git, ale przy skomplikowanych kształtach są problemy z wielką ilością obszarów. Ja na ten przykład miałem na jednej mapie z miastem (tak 40x40) 17 obszarów, w czym niekture po jednej/dwóch kratkach.sled - Pią 30 Wrz, 2011 00:58 Ja mam pytanie - otóż wszystko działa jak należy lecz nie wiem co zrobić by uzyskać odbicie w innym "kafelku". Z tego co kombinowałem zauważyłem że można to zmienić w skrypcie lecz nie mam pojęcia jak ustawić by odbicie występowało np w pierwszym górnym kafelku A1. Co dziwniejsze - skrypt napisany w pierwszym poście działa (i to bez pomocy skryptu Ayene!) i odbija przykładowo ten pierwszy kafelek lecz ma błędy po przeteleportowaniu postaci (tworzy odbicia eventów oraz postaci na mapie które podążają za nami występując ciągle w równych odległościach mimo iż nie powinni się odbijać (brak w nazwie reflect)).
Byłbym naprawdę bardzo wdzięczny za jakąkolwiek pomoc