UltimaForum

Skrypty [VX] - Zasięg Widzenia Eventu

Angius - Wto 21 Cze, 2011 19:57
Temat postu: Zasięg Widzenia Eventu
Zasięg Widzenia


Opis:
Ten skrypt pozwala na to, by zdarzenia nas zauważały. Przydatne do sekwencji skradankowych, gonitw, etc.

Info:
Autor: BigEd781
Konfig: Angius

Skrypt:
Spoiler:

Kod:

#======================================================
#                  ~~ZASIĘG WIDZENIA~~
#======================================================
#                      Autor: BigEd781
#         Dopisanie tych komentarzy: Angius
#            Specjalnie dla UltimaTeam.pl
#======================================================
#======================================================
# Konfiguracja:
#======================================================
# Chcielibyście... Tu nie ma co konfigurować, serio!
# Jedynie mogę opisać jak toto wywołać. Otóż przydatna jest ta linijka:
# $game_map.player_in_range?(event_id, range)
# Jako event_id wpisujecie ID zdarzenia (toto co się jako domyślna nazwa wyświetla)
# Jako range wpisujecie promień pola widzenia.
# Taa-daam!
#======================================================
# Jak tej linijki użyć? To proste! Używamy jej w warunku/conditional branch
# wybierając z ostatniej karty "skrypt" i tam toto wklejając.
# Taa-daam!
#======================================================
#            TEGO LEPIEJ NIE DOTYKAĆ
#======================================================
class Point
 
  attr_reader :y
  attr_reader :x
 
  def initialize(x, y)
    @x = x
    @y = y
  end
 
end

class Game_Map
 
  def event_in_range?(event_id1, event_id2, range)
    e_loc1 = Point.new(events[event_id1].x, events[event_id1].y)
    e_loc2 = Point.new(events[event_id2].x, events[event_id2].y)     
    return (get_distance(e_loc1, e_loc2) <= range)
  end
 
  def player_in_range?(event_id, range)
    p_loc = Point.new($game_player.x, $game_player.y)
    e_loc = Point.new(events[event_id].x, events[event_id].y)     
    return (get_distance(p_loc, e_loc) <= range)
  end

  def get_distance(p1, p2) 
    dx = (p1.x - p2.x)**2   
    dy = (p1.y - p2.y)**2   
    return Math.sqrt(dx + dy).to_i
  end
 
end


Sposób użycia:
Wyjaśnione w skrypcie (dzięki Ayene :-) )
Lub w demku: http://www.ultimateam.pl/files/Zasieg_Widzenia.exe

Aruka21 - Wto 28 Cze, 2011 11:07

Nie zbyt rozumiem.
Czy mógłbym Cię prosić o demko ? :-D



Pozdrawiam Aruka21 :papa:

Angius - Wto 28 Cze, 2011 14:00

Demko zrobione. Niestety u mnie wywala jakiś błąd :/
http://www.mediafire.com/?qgbr9734a2b37xy

Aruka21 - Wto 28 Cze, 2011 20:16

u mnie także wyskakuje błąd.
Angius - Wto 28 Cze, 2011 20:17

Czyli co? Czakamy na kogoś, kto zna się na Ruby? :mrgreen:
Aruka21 - Wto 28 Cze, 2011 20:40

popieram pomysł :mrgreen:
Albo można poprosić Ayene :-D
Napiszę do niej.

Ayene - Wto 28 Cze, 2011 21:02

Wyskakuje błąd, gdyż samo:
Kod:
player_in_range?(1, 5)

nie wystarczy... zapytanie powinno wyglądać tak:
Kod:
$game_map.player_in_range?(1, 5)


PS Edytowałam demo zamieszczone wcześniej przez Angiusa :arrow: http://www.ultimateam.pl/files/Zasieg_Widzenia.exe

Angius - Wto 28 Cze, 2011 21:43

Dzięki, Ayene, uzupełniłem pierwszy post :przytul:
Aruka21 - Sob 21 Sty, 2012 13:55

Sorrki że piszę post, pod postem ale między nimi jest różnica kilku miesięcy przerwy, mam pytanie, a mianowicie czy można zrobić tak aby zdarzenie widziało tylko to co jest przed nim ? Chodzi o to aby ten zasięg widzenia nie był okręgiem dookoła zdarzenia tylko linią przed nim. Mam nadzieję iż rozumiecie o co mi chodzi. Chętnego podjęcia się tego wyzwania(przerobienie aktualnego skryptu) proszę o napisanie mi na pw. Oczywiście będzie pomógł i przy najbliższej okazji odwdzięczę się jak tylko potrafię.

Pozdrawiam i czekam na wiadomości prywatne Aruka21 ;-)


Powered by phpBB modified by Przemo © 2003 phpBB Group