Ogłoszenie 

Uwaga! To forum jest w trybie offline.
Wszelką pomoc uzyskasz pod adresem
forum.ultimateam.pl


Administracja Forum


Poprzedni temat «» Następny temat
Zamknięty przez: Nhadala
Pią 20 Lip, 2012 06:41
Problem z paskiem EXP. XAS ABS
Autor Wiadomość
emag789 



Dołączył: 14 Lip 2012
Posty: 5
Wysłany: Wto 17 Lip, 2012 12:33
Problem z paskiem EXP. XAS ABS
Witajcie. Mam problem z wyświetlaniem paska exp. Używam XAS ABS i torchę przerobiłem skrypt. Jestem zielony w skryptowaniu. Oto mój problem:
Pasek na pierwszym levelu napełnia się prawidłowo. Wartość exp. początkowa wynosi 0 ,a na następny level potrzebuje 50 exp.
Gdy zdobędziemy level, to nasza wartość expa wynosi 50 a do następnego poziomu brakuje 100 pkt exp.
I tu jest problem, bo pasek już jest na połowie, a chciałbym, żeby leciał od początku, czyli:
50 - to początek paska
100 - koniec paska

Tak samo z kolejnymi levelami.

Dałby radę ktoś coś zaradzić, lub po swojemu by przerobił?
Z góry dziękuje ;)

Kod:

def create_exp
      @low_exp = LOWHP
      @exp = @actor.exp
      @exp_flow = 0
      @exp_damage_flow = 0 
      @exp_old = @actor.exp
      @exp_ref = @exp_old
      @exp_refresh = false
      #Number EXP ----
      @exp_number_image = Cache.system("Hud_Exp_Number")
      @exp_number_sprite = Sprite.new
      @exp_number_sprite.bitmap = Bitmap.new(@exp_number_image.width,@exp_number_image.height)
      @exp_number_sprite.z = 153
      @exp_number_sprite.x = HUD[0] + EXP_NUMBER[0]
      @exp_number_sprite.y = HUD[1] + EXP_NUMBER[1]
      @im_cw = @exp_number_image.width / 10
      @im_ch = @exp_number_image.height / 2   
      #Meter EXP -----
      @exp_image = Cache.system("Hud_Exp_Meter")
      @exp_range = @exp_image.width / 1
      @exp_height = @exp_image.height / 1
      @exp_width = @exp_range * @actor.exp / @actor.next_exp
      @exp_sprite = Sprite.new
      @exp_sprite.bitmap = Bitmap.new(@exp_image.width,@exp_image.height)
      @exp_sprite.z = 152
      @exp_sprite.x = HUD[0] + EXP_METER[0]
      @exp_sprite.y = HUD[1] + EXP_METER[1]
      exp_flow_update
      exp_number_refresh   
  end


Kod:

#--------------------------------------------------------------------------
  # ● exp_number_update
  #--------------------------------------------------------------------------
  def exp_number_update
       @exp_refresh = true
       if @exp_old < @actor.exp
           @exp_ref = 5 * (@actor.exp - @exp_old) / 100
           @exp_ref = 1 if @exp_ref < 1
           @exp += @exp_ref     
           if $game_temp.hud_face_type != 1
              $game_temp.hud_face_type = 1
              $game_temp.hud_face_refresh = true
              @face_sprite.x = HUD[0] + FACE[0]
           end           
           if @exp >= @actor.exp
              @exp_old = @actor.exp
              @exp = @actor.exp   
              @exp_ref = 0
             if @actor.exp < @actor.next_exp * @low_exp / 100 and
                $game_temp.hud_face_type != 4
                $game_temp.hud_face_type = 4
                $game_temp.hud_face_time = 30               
             elsif $game_temp.hud_face_type != 0
                $game_temp.hud_face_type = 0
                $game_temp.hud_face_time = 30
             end   
           end 
           
        elsif @exp_old > @actor.exp   
           @exp_refresh = true
           @exp_ref = 5 * (@exp_old - @actor.exp) / 100
           @exp_ref = 1 if @exp_ref < 1
           @exp -= @exp_ref               
           if $game_temp.hud_face_type != 2
              $game_temp.hud_face_type = 2
              $game_temp.hud_face_refresh = true             
           end
           if @exp <= @actor.exp
              @exp_old = @actor.exp
              @exp = @actor.exp   
              @exp_ref = 0
            if $game_temp.hud_face_type != 0
                $game_temp.hud_face_time = 30
             end   
           end           
         end 
         end
  end 
     
  #--------------------------------------------------------------------------
  # &#9679; exp_number_refresh
  #--------------------------------------------------------------------------
  def exp_number_refresh
      @exp_number_sprite.bitmap.clear
      @exp_number_text = @exp.abs.to_s.split(//)
      lowexp2 = @actor.next_exp * @low_exp / 100
      if @actor.exp < lowexp2
         @health2 = @im_ch
      else
         @health2 = 0
      end
      @exp_health = @health2
      for r in 0..@exp_number_text.size - 1         
         @exp_number_abs = @exp_number_text[r].to_i
         @exp_src_rect = Rect.new(@im_cw * @exp_number_abs, @exp_health, @im_cw, @im_ch)
         @exp_number_sprite.bitmap.blt(@im_cw *  r, 0, @exp_number_image, @exp_src_rect)       
       end 
       @exp_refresh = false if @exp == @actor.exp
  end
     
  #--------------------------------------------------------------------------
  # &#9679; Exp Flow Update
  #--------------------------------------------------------------------------
  def exp_flow_update
      @exp_sprite.bitmap.clear
      @exp_width = @exp_range * @actor.exp / @actor.next_exp
      #EXP Real------------------------------------
      @exp_src_rect = Rect.new(@exp_flow, 0,@exp_width, @exp_height)
      @exp_sprite.bitmap.blt(0,0, @exp_image, @exp_src_rect)         
      @exp_flow += METER_FLOW_SPEED 
      if @exp_flow >= @exp_image.width - @exp_range
         @exp_flow = 0 
      end
 
    end
 
 
pw1602 



Preferowany:
RPG Maker VX

Pomógł: 11 razy
Dołączył: 09 Paź 2011
Posty: 119
Wysłany: Wto 17 Lip, 2012 13:35
To może zamiast dawać 100 expa na następny lvl daj 150? Może akurat pasek będzie od zera leciał? Jeśli to nie pomoże to czekaj na odpowiedź jakiegoś skryptera, bo ja się na tym nie znam.
________________________



 
 
emag789 



Dołączył: 14 Lip 2012
Posty: 5
Wysłany: Wto 17 Lip, 2012 13:37
Wartość 100 podałem powiedzmy, że przykładową. Jakby było 150 to pasek zaczynałby się od 1/3.
 
 
pw1602 



Preferowany:
RPG Maker VX

Pomógł: 11 razy
Dołączył: 09 Paź 2011
Posty: 119
Wysłany: Wto 17 Lip, 2012 22:59
Musiałbyś pokombinować trochę. Zrób powiedzmy tak:
Potwory dodają nie dużo pkt. doświadczenia.
Ilość expa na 2 lvl będzie wynosić 25 pkt. Na następny o 4 razy więcej, lecz potwory powinny być do tego dostosowane w dodawaniu expa. Wtedy pasek powinien iść od zera. Jeśli ci to nie pasuje to na razie nie mam pomysłu na rozwiązanie tego problemu. Może jakiś skrypter się wypowie?!


@Edit
Trochę tam popatrzyłem po tym skrypcie i czy:
Kod:
elsif @exp_old > @actor.exp
<- nie powinno tutaj być oddzielnie els i if? Jeśli nie to sorry za błąd.

Spróbuj może zamiast:
Kod:
@exp_ref = 1 if @exp_ref < 1


daj

Kod:
@exp_ref = 1 if @exp_ref < 0


Nie wiem czy to coś zmieni, ale w kolejnej części skryptu jest jeszcze raz to samo, więc też możesz zmienić. Może jakieś liczby powodują taki błąd?

@Edit 2
Kod:
@exp_refresh = false if @exp == @actor.exp


A czasem nie ma być tutaj true?
________________________



 
 
emag789 



Dołączył: 14 Lip 2012
Posty: 5
Wysłany: Wto 17 Lip, 2012 23:11
Ogólnie to już kombinuję sporo czasu. Jak wspomniałem jestem zielony w tym języku. Najwięcej chyba zależy od tego równia:
@exp_width = @exp_range * @actor.exp / @actor.next_exp
Zamiast tego @actor.exp powinna być chyba różnica @actor.next_exp - @actor.exp. Wtedy długość paska wyznaczało by to ile brakuję do kolejnego levela. Jednak jak to u względnie to nadal jakieś głupoty wychodzą. No nic, czekam na odpowiedź doświadczonego skryptera. pw1602 - dzięki za zainteresowanie ;)

@Edit. Trochę chyba w błąd wprowadziłem, mogłem mniejszą ilość kodu skopiować. Te zmienne, o których wspominasz dotyczą się expa, ale w postaci liczbowej ;)

@Edit2. Z tym kombinowaniem expa to nie głupi pomysł, ale to już jutro sprawdzę, dzięki :)

@Edit3. Nie mogę ustawić takiej różnicy expa jak powiedziałeś, że do następnego potrzeba aż 4 razy więcej. Pasek raczej nie szedłby od początku, bo by było 25/100, czyli zajmowałby już 1/4.
 
 
emag789 



Dołączył: 14 Lip 2012
Posty: 5
Wysłany: Czw 19 Lip, 2012 15:30
Problem rozwiązany
Te 2 równania:
@exp_width = @exp_range * @actor.exp / @actor.next_exp
Powinny wyglądać tak:
@exp_width = @exp_range * (@actor.exp-@actor.current_level_exp)/(@actor.next_level_exp-@actor.current_level_exp)


Temat do zamknięcia.
 
 
Wyświetl posty z ostatnich:   
Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi
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
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group | Template Klam by Ayene