Postanowiłem umieścić ten skrypt, żeby nie trzeba było się męczyć z szukaniem tego przez dwie godziny, tak jak ja musiałem.
Skrypt stworzony przez Near Fantastica; pozwala zdarzeniom, na wyśledzenie gracza i pogoń, lub zaatakowanie go.
Tutaj oryginał
Spoiler:
Kod:
#==============================================================================
# Veiw Range Script
#------------------------------------------------------------------------------
# By: Near Fantastica
# Date: 25/11/04
#==============================================================================
class View_Range
#--------------------------------------------------------------------------
# ● Range system works by sereching the area of a circle for the Player's xy
# The Veiw is set in each event and is the radius of the circle
# The Eaquation used is (Px-EX)^2 + (Py-Ey)^2 = radius^2
# If the Radius is less than or equal to the View the Player is inside the circle
#--------------------------------------------------------------------------
attr_accessor :event_num
attr_accessor :view_range
#--------------------------------------------------------------------------
# ● Initialization
#--------------------------------------------------------------------------
def initialize(event_num,veiw_range,els)
@event_num = event_num
@event_locial_switch = els
@view_range = veiw_range
@playerx = $game_player.x
@playery = $game_player.y
@eventx = $game_map.events[@event_num].x
@eventy = $game_map.events[@event_num].y
@event_direction = $game_map.events[@event_num].direction
end
#--------------------------------------------------------------------------
# ● check = View_Range.new(EventID, Veiw Range, Local Switch)
# check.enemies_view
#--------------------------------------------------------------------------
def event_view
@playerx-=@eventx
@playerx*=@playerx
@playery-=@eventy
@playery*=@playery
@playerx+=@playery
@view_range*=@view_range
if @playerx <= @view_range
key=[$game_map.map_id, @event_num, @event_locial_switch]
$game_self_switches[key] = true
end
end
#--------------------------------------------------------------------------
# ● check = View_Range.new(EventID, Veiw Range, Local Switch)
# check.enemies_view
#--------------------------------------------------------------------------
def enemies_view
if @event_direction == 2
if @playery >= @eventy
@playerx-=@eventx
@playerx*=@playerx
@playery-=@eventy
@playery*=@playery
@playerx+=@playery
@view_range*=@view_range
if @playerx <= @view_range
key=[$game_map.map_id, @event_num, @event_locial_switch]
$game_self_switches[key] = true
$game_system.timer = 420
$game_system.timer_working = true
$game_map.need_refresh = true
end
end
end
if @event_direction == 4
if @playerx <= @eventx
@playerx-=@eventx
@playerx*=@playerx
@playery-=@eventy
@playery*=@playery
@playerx+=@playery
@view_range*=@view_range
if @playerx <= @view_range
key=[$game_map.map_id, @event_num, @event_locial_switch]
$game_self_switches[key] = true
$game_system.timer = 420
$game_system.timer_working = true
$game_map.need_refresh = true
end
end
end
if @event_direction == 6
if @playerx >= @eventx
@playerx-=@eventx
@playerx*=@playerx
@playery-=@eventy
@playery*=@playery
@playerx+=@playery
@view_range*=@view_range
if @playerx <= @view_range
key=[$game_map.map_id, @event_num, @event_locial_switch]
$game_self_switches[key] = true
$game_system.timer = 420
$game_system.timer_working = true
$game_map.need_refresh = true
end
end
end
if @event_direction == 8
if @playery <= @eventy
@playerx-=@eventx
@playerx*=@playerx
@playery-=@eventy
@playery*=@playery
@playerx+=@playery
@view_range*=@view_range
if @playerx <= @view_range
key=[$game_map.map_id, @event_num, @event_locial_switch]
$game_self_switches[key] = true
$game_system.timer = 420
$game_system.timer_working = true
$game_map.need_refresh = true
end
end
end
end
end
Tutaj przetłumaczona wersja [Raczej niewiele zmienia]
Spoiler:
Kod:
#==============================================================================
# Skrypt Widzenia na Odległość
#------------------------------------------------------------------------------
# Stworzona przez: Near Fantastica
# Data: 25/11/04
#==============================================================================
class View_Range
#--------------------------------------------------------------------------
# ● Ranga systemowa działa przez przeszukanie kolistego terenu dla xy Gracza.
# "Widok" jest w każdym zdarzeniu i ma zasięg koła.
# Użyte równianie to (Px-EX)^2 + (Py-Ey)^2 = zasięg^2
# Jeżeli zasięg jest mniejszy, lub równy widokowi, gracz jest w środku koła.
#--------------------------------------------------------------------------
attr_accessor :event_num
attr_accessor :view_range
#--------------------------------------------------------------------------
# ● Initialization
#--------------------------------------------------------------------------
def initialize(event_num,veiw_range,els)
@event_num = event_num
@event_locial_switch = els
@view_range = veiw_range
@playerx = $game_player.x
@playery = $game_player.y
@eventx = $game_map.events[@event_num].x
@eventy = $game_map.events[@event_num].y
@event_direction = $game_map.events[@event_num].direction
end
#--------------------------------------------------------------------------
# ● check = View_Range.new(EventID, Veiw Range, Local Switch)
# check.enemies_view
#--------------------------------------------------------------------------
def event_view
@playerx-=@eventx
@playerx*=@playerx
@playery-=@eventy
@playery*=@playery
@playerx+=@playery
@view_range*=@view_range
if @playerx <= @view_range
key=[$game_map.map_id, @event_num, @event_locial_switch]
$game_self_switches[key] = true
end
end
#--------------------------------------------------------------------------
# ● check = View_Range.new(EventID, Veiw Range, Local Switch)
# check.enemies_view
#--------------------------------------------------------------------------
def enemies_view
if @event_direction == 2
if @playery >= @eventy
@playerx-=@eventx
@playerx*=@playerx
@playery-=@eventy
@playery*=@playery
@playerx+=@playery
@view_range*=@view_range
if @playerx <= @view_range
key=[$game_map.map_id, @event_num, @event_locial_switch]
$game_self_switches[key] = true
$game_system.timer = 420
$game_system.timer_working = true
$game_map.need_refresh = true
end
end
end
if @event_direction == 4
if @playerx <= @eventx
@playerx-=@eventx
@playerx*=@playerx
@playery-=@eventy
@playery*=@playery
@playerx+=@playery
@view_range*=@view_range
if @playerx <= @view_range
key=[$game_map.map_id, @event_num, @event_locial_switch]
$game_self_switches[key] = true
$game_system.timer = 420
$game_system.timer_working = true
$game_map.need_refresh = true
end
end
end
if @event_direction == 6
if @playerx >= @eventx
@playerx-=@eventx
@playerx*=@playerx
@playery-=@eventy
@playery*=@playery
@playerx+=@playery
@view_range*=@view_range
if @playerx <= @view_range
key=[$game_map.map_id, @event_num, @event_locial_switch]
$game_self_switches[key] = true
$game_system.timer = 420
$game_system.timer_working = true
$game_map.need_refresh = true
end
end
end
if @event_direction == 8
if @playery <= @eventy
@playerx-=@eventx
@playerx*=@playerx
@playery-=@eventy
@playery*=@playery
@playerx+=@playery
@view_range*=@view_range
if @playerx <= @view_range
key=[$game_map.map_id, @event_num, @event_locial_switch]
$game_self_switches[key] = true
$game_system.timer = 420
$game_system.timer_working = true
$game_map.need_refresh = true
end
end
end
end
end
Nie tłumaczyłem części, które wydawały się podejrzane, nie chciałem zniszczyć skryptu.
Do zdarzenia które ma mieć "Widzenia na odległość" musimy dać Wywołaj Skrypt(Script Check) i wpisać:
(1,3,"A") - nie korzystałem jeszcze ze skryptu, ale liczby 1,3 to najprawdopodobniej zasięg widzenia, a co do "A", to nie jestem pewien.
*EDIT:
(1,3,"A") gdzie 1 to ID stwora na mapie który ma mieć View Range.
3 to zasięg widzenia, a A to przełącznik na który zdarzenie ma być odpalane na drugiej stronie.(Np. z wiadomością "Widziałem cię")
SCREENY:
Spoiler:
Ostatnio zmieniony przez Yoroiookami Wto 09 Sie, 2011 00:35, w całości zmieniany 2 razy
EDIT:
(1,3,"A") gdzie 1 to ID stwora na mapie który ma mieć View Range.
3 to zasięg widzenia, a A to przełącznik na który zdarzenie ma być odpalane na drugiej stronie.(Np. z wiadomością "Widziałem cię")
Pomógł: 9 razy Dołączył: 28 Mar 2010 Posty: 173 Skąd: Warszawa
Wysłany: Wto 13 Lip, 2010 18:59
Skrypcik niezły , tylko mam trudności z opanowaniem go , ponieważ nie rozumiem pare rzeczy jak to zazwyczaj widze to zawsze mi parzy tą mądrością , dobra może później go Opanuje, Thx for you.
Mam pytanko. Gdy kopiuje ognisko z dema(http://www.ultimateam.pl/viewtopic.php?t=2795) to gdy wchodzę w pole widzenia to strasznie się tnie i dźwięk ogniska też się tnie. Co to może być?
Najlepiej wyślij mi projekt :I będzie najszybciej, bo nie będzie trzeba zgadywać.
Przesłać możesz mi na PW.
-----------------------------------
EDIT - sprawdziłem i obawiam się, że nie da się nic poradzić. Nieco źle ustawiłeś te zdarzenia, ale nie w tym rzecz. Nie wiem czemu, ale RPG Maker(lub skrypt) jakoś nie toleruje dwóch BGS na jednej mapie, nawet jeśli są takie same o_o'
Myślę że to robota dla kogoś lepszego w te klocki :I no i nie mam pewności czy i ktoś na to coś poradzi.
Proponuję po prostu użyć jednego ogniska, pozostałe mogą być zgaszone xD
Dobrze wszystko było, ale teraz gdy robię zdarzenie z tym skryptem to wyskakuje mi taki błąd:
????? 'View_Range' ? 26 ??? NoMethodError ????????
undefined method 'x' for nil:NilClass
Mi wszystko działa, a sprawdziłem też swoją przetłumaczoną wersję >_> nie używacie przypadkiem polskiej wersji programu? A jeżeli nie, to może ten skrypt kłóci się z jakimś innym który macie :I
Po pierwsze przepraszam że piszę teraz bo dawno w tym temacie nie odpisywano choć skrypt bardzo był mi potrzebny, po drugie jest również kompatybilny z VX. :D Powiem że skrypt już opanowałem, mam nadzieję że inni nie mają z tym problemu. xD Działa na każdym (chyba) systemie poruszania się, u mnie na przykład działa na platformówce. Skrypcik przydatny i bardzo prosty w użytku. :)
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