Yoroiookami - Nie 06 Cze, 2010 09:25 Temat postu: View RangePostanowił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:
Izaya - Nie 06 Cze, 2010 16:38 Podoba mi się. Może wystąpi w mojej grze Yoroiookami - Pon 21 Cze, 2010 08:28 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ę")Izaya - Nie 11 Lip, 2010 10:59 Coś podobnego jest w Metin2
czyli przyda się np. gdy potwór jest agresywny, przykład "Agresywny wilk".
Na prawdę bardzo fajny skrypt R.I.P. - 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.
Pozdr. R.I.P. smakowy155 - Sob 06 Lis, 2010 14:57 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ć?Yoroiookami - Sob 06 Lis, 2010 15:28 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 xDsmakowy155 - Czw 11 Lis, 2010 21:17 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:NilClassHESEE - Pią 17 Gru, 2010 13:57 Mi wywala błąd:
Script 'Wywoływanie zdarzeń' line 26: NoMethodError occurred.
undefined method `x' for nil:NilClassYoroiookami - Pią 17 Gru, 2010 16:03 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 :ICreeperCrisis - Pon 09 Maj, 2011 21:04 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. :)Dr.man - Nie 16 Gru, 2012 15:57 Mam mały jeden problem.
Jak zrobić by po zauważeniu gracza, potwór przestał gonić jeśli bohater oddali się, np: 0 sześć kratek?
A i jeszcze jedno, jak wyłączyć ten liczony czas w prawym górnym rogu?
Nie ogarniam skryptu. ;p