Strona 1 z 1

Pszełoncznik [VX]

: 01 lis 2017, 17:06
autor: Yoroiookami
Jak wiecie, na niektórych mapkach w Kabelku gra się przycinała, szczególnie na słabszych tosterach z 2005 roku. :L
Ponieważ typowe zdarzenie z ubrankami oraz ze skillami są dwukrotnie większe niż w Kable III, chciałbym żeby przełączniki uruchamiały się jedynie po wyjściu z menu. (Czyli po zmianie ekwipunku)
Istnieje jakiś sposób na uruchomienie przełącznika gdzieś w skryptach? Albo na wywołanie skryptu?
Cokolwiek oszczędniejszego.

Pytam, bo pamiętam że kiedyś gra strasznie się zacinała gdy miałem zbyt wiele opcji w warunkach, a zdarzenie typowe które je sprawdzało było odpalone cały czas.

Trochę nietypowa prośba, ale może ktoś coś wie. :lol:

Re: Pszełoncznik [VX]

: 01 lis 2017, 19:09
autor: Soul
$game_switches[n] = true/false ?

Re: Pszełoncznik [VX]

: 01 lis 2017, 23:03
autor: Dragon Kamillo
Ja to zawsze rozwiązywałem tak, że zablokowywałem dostęp do menu.
Potem typowe równoległe zdarzenie z warunkiem jeśli gracz wciśnie przycisk - wywołaj menu, a poniżej wstawiasz co chcesz np wywołujesz ten przełącznik itp.

Szczerze to był mój mus skrypt w każdym projekcie jaki robiłem w XP czy w 2k/3. Bez tego ciężko było o cokolwiek XD.

Re: Pszełoncznik [VX]

: 01 lis 2017, 23:46
autor: Yoroiookami
Nie jestem pewien, gdzie to wstawić Soul.

A twoje rozwiązanie Dragon Kamillo dosyć ciekawe, ale wolałbym bez takiego kombinowania. :>

Re: Pszełoncznik [VX]

: 08 lis 2017, 00:25
autor: Rave
Ty tych switchy używasz do widocznego ekwipunku (na mapie)? Jak tak, to nie dałoby się twojego rozwiązania zastąpić skryptem na widoczny ekwipunek? Jak poprosisz na RMWeb, to pewnie ktoś coś znajdzie.

/edit: Ew. zrób sobie label na końcu eventu po sprawdzeniu ubranek i daj jump to label po "założeniu" właściwych ubranek, żeby RM nie sprawdzał warunków które i tak nie mają prawa się spełnić.

Np. Jeśli masz np. taki event:

Kod: Zaznacz cały

<>If Actor A has Ubranie1 equipped
  <>Change graphic Actor A, Ubranie1
<>If Actor A has Ubranie2 equipped
  <>Change graphic Actor A, Ubranie2
<>If Actor A has Ubranie3 equipped
  <>Change graphic Actor A, Ubranie3
...


to zrób z tego


Kod: Zaznacz cały

<>If Actor A has Ubranie1 equipped
  <>Change graphic Actor A, Ubranie1
  <>Jump to label 1
<>If Actor A has Ubranie2 equipped
  <>Change graphic Actor A, Ubranie2
  <>Jump to label 1
<>If Actor A has Ubranie3 equipped
  <>Change graphic Actor A, Ubranie3
  <>Jump to label 1
...
<>Label 1


Uwaga: Nawet jeśli masz warunki w Else, to i tak ta optymalizacja zadziała gdyż interpreter eventów w RM jest niezbyt optymalnie napisany, szczególnie w XP/VX. Jest to nieco odwlekanie problemu w czasie, ale przynajmniej przez pierwsze kilka godzin (?) zabawy gracz nic nie zauważy, a potem będzie chciał skończyć twoją grę to przeżyje.

A jeśli ubrania zależą nie od założonego EQ, tylko od np. zmiennej, to jeszcze lepiej, bo możesz połączyć poprzednią optymalizację z takim czymś:

Kod: Zaznacz cały

<>If Variable 1>6
  <>Jump to label 3
<>If Variable 1>3
  <>Jump to label 2
<>If Variable 1==1
  <>Change graphic Actor A, Ubranie1
  <>Jump to label 1
<>If Variable 1==2
  <>Change graphic Actor A, Ubranie2
  <>Jump to label 1
<>If Variable 1==3
  <>Change graphic Actor A, Ubranie3
  <>Jump to label 1
<>Label 2
<>If Variable 1==4
  <>Change graphic Actor A, Ubranie4
  <>Jump to label 1
<>If Variable 1==5
  <>Change graphic Actor A, Ubranie5
  <>Jump to label 1
<>If Variable 1==6
  <>Change graphic Actor A, Ubranie6
  <>Jump to label 1
<>Label 3
<>If Variable 1==7
  <>Change graphic Actor A, Ubranie7
  <>Jump to label 1
<>If Variable 1==8
  <>Change graphic Actor A, Ubranie8
  <>Jump to label 1
<>If Variable 1==9
  <>Change graphic Actor A, Ubranie9
  <>Jump to label 1
<>Label 1


Wiem, goto i te sprawy, wygląda to tragicznie, ale tak trzeba w makerze kombinować żeby jakoś działało. Jak mam rację co do odpowiednich sekcji ubrań opartych na zmiennych a przełączniki są tylko po to aby sprawdzić czy zmiana jest potrzebna, ew. do parallel eventa w bazie, to podziel odpowiednio na sekcje, niekoniecznie tak małe, to tylko przykład. Niestety w oryginalnym problemie ci pomóc nie mogę, bo nie znam RGSS2 na tyle, ale mogę ci pomóc zoptymalizować ubrankowe eventy.

Radziłbym też poczytać posty na rpgmaker.net o optymalizacji eventów (także tutki i artykuły), większość jest do 2k3, ale generalne koncepty pasują do każdego makera.

Re: Pszełoncznik [VX]

: 08 lis 2017, 08:24
autor: Yoroiookami
Kurczę, Rave, dzięki za rozpisanie się. :>
Faktycznie mógłbym użyć takiego skryptu, chyba nawet poszukam. Bo skoro jest lepsze rozwiązanie, to nie będę niepotrzebnie się męczyć.

Nie wiedziałem, że etykiety tak dziwnie działają. :I

Kod: Zaznacz cały

<>If Actor A has Ubranie1 equipped
  <>Change graphic Actor A, Ubranie1
  <>Jump to label 1
<>If Actor A has Ubranie2 equipped
  <>Change graphic Actor A, Ubranie2
  <>Jump to label 1
<>If Actor A has Ubranie3 equipped
  <>Change graphic Actor A, Ubranie3
  <>Jump to label 1
...
<>Label 1

Czy w tym przykładzie warunek i tak nie będzie ciągle sprawdzany? Bo odsyła nas na koniec, ale dopiero po sprawdzeniu. @_@

Re: Pszełoncznik [VX]

: 08 lis 2017, 09:19
autor: Dragon Kamillo
Nie jeśli na końcu dasz przełącznik który wyłącza to zdarzenia. Ale wtedy nadal musisz go uruchomić zaraz po wyjściu z menu.

Jeśli używasz podstawowego (cudzego w sumie też, powinni być podobnie) menu to znajdź w skryptach zakładkę scene_menu (czy coś podobnego), a w tej zakładce znajdź w kodzie coś związanego ze scene_map i przed linijkę która to zawiera wklej to co napisał soul wyżej. Wtedy powinien się włączać przełącznik przy wyjściu z menu. A przynajmniej tak to można zrobić w RMXP i będzie śmigało, VX ma jakieś dziwne te skrypty, co prawda lepiej zoptymalizowane, ale przez to straciły cechę "na chłopski rozum" którą stosowałem w RMXP XD.

Re: Pszełoncznik [VX]

: 08 lis 2017, 13:15
autor: Yoroiookami
Wielkie dzięki, Kamillo. Wrzuciłem to tutaj i wszystko działa jak powinno. :>

Kod: Zaznacz cały

#--------------------------------------------------------------------------
  # * Update Command Selection
  #--------------------------------------------------------------------------
  def update_command_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $game_switches[98] = true
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::C)
      if $game_party.members.size == 0 and @command_window.index < 4
        Sound.play_buzzer
        return
      elsif $game_system.save_disabled and @command_window.index == 4
        Sound.play_buzzer
        return
      end
      Sound.play_decision
      case @command_window.index
      when 0      # Item
        $scene = Scene_Item.new
      when 1,2  # Skill, equipment, status
        start_actor_selection
      when 3      # End Game
        $scene = Scene_End.new
      end
    end
  end