UltimaForum

Wsparcie [XP] - Uniki / Celność

BloodEye - Pią 11 Maj, 2012 14:23
Temat postu: Uniki / Celność
Mógłby mi ktoś napisać jak są obliczane uniki oraz celność w RMXP ? Oraz , w jakim skrypcie , w której linijce jest wzór za nie odpowiadający :D

Edit
znalazłem tą część skryptu, jednak czy mógłby mi ktoś wyjaśnić jak to działa ?
Kod:
#--------------------------------------------------------------------------
  # * Applying Normal Attack Effects
  #     attacker : battler
  #--------------------------------------------------------------------------
  def attack_effect(attacker)
    # Clear critical flag
    self.critical = false
    # First hit detection
    hit_result = (rand(100) < attacker.hit)
    # If hit occurs
    if hit_result == true
      # Calculate basic damage
      atk = [attacker.atk].max
      self.damage = atk * attacker.str / self.pdef
      # Element correction
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100
      # If damage value is strictly positive
      if self.damage > 0
        # Critical correction
        if rand(100) < 4 * attacker.dex / self.agi
          self.damage *= 1.5
          self.critical = true
        end
        # Guard correction
        if self.guarding?
          self.damage /= 2
        end
      end
      # Dispersion
      if self.damage.abs > 0
        amp = [self.damage.abs * 15 / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # Second hit detection
      eva = 8 * self.agi / attacker.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
    end
    # If hit occurs
    if hit_result == true
      # State Removed by Shock
      remove_states_shock
      # Substract damage from HP
      self.hp -= self.damage
      # State change
      @state_changed = false
      states_plus(attacker.plus_state_set)
      states_minus(attacker.minus_state_set)
    # When missing
    else
      # Set damage to "Miss"
      self.damage = "Unik"
      # Clear critical flag
      self.critical = false
    end
    # End Method
    return true
  end

Chcę aby DMG = attacker.atk * attacker.str / self.def a szansa na trafienie = (attacker.dex/self.agi) - self.eva
A i jeszcze pytanie, która statystyka odpowiada za częstotliwość ataków ( chodzi mi o double w turach ) [/hide]

PaKiTos - Sob 12 Maj, 2012 09:52

Double w turach? W RMXP tego chyba nie ma (chyba że ATB używasz..) ;-)
BloodEye - Sob 12 Maj, 2012 11:00

Chyba jest to możliwe bez tego ATB , albo miałem jakieś lagi , bo jak testowałem jednego potworka to miałem double
Ayene - Sob 23 Cze, 2012 16:01

Wszystko wyliczane jest etapami. Nie wiem jak za bardzo wytłumaczyć coś co jasno wynika ze skryptu (wszystko zresztą tłumaczone jest w komentarzach). Zresztą Twój skrypt różni się od domyślnego. Widać, że były wprowadzane korekty.
Cytat:
a najlepiej jakby ktoś umiał zedytować aby DMG było równe a.str /s.def *Atk

Tylko że ustawiając taki wzór, zawsze będziesz miał równą wartość, bo normalnie przy obliczaniu obrażeń bierze pod uwagę również odporność lub słabość na elementy oraz jakąś wartość losową, a także ewentualność krytyka itd.

Domyślna walka w XP jest turowa, więc nie ma możliwości zrobienia dubla. Za to jaka jest kolejność w turze odpowiada pośrednio linijka 'make_action_speed' w skrypcie 'Game_Battler 1'.

BloodEye - Nie 01 Lip, 2012 16:15

Cytat:
Tylko że ustawiając taki wzór, zawsze będziesz miał równą wartość, bo normalnie przy obliczaniu obrażeń bierze pod uwagę również odporność lub słabość na elementy oraz jakąś wartość losową, a także ewentualność krytyka itd.

Chodziło mi właśnie o basic DMG , gra bez żadnej losowości byłaby nudna ;>

Ayene - Nie 01 Lip, 2012 20:35

Wystarczy, że w swoim skrypcie fragment:
Kod:
atk = [attacker.atk].max
      self.damage = atk * attacker.str / self.pdef

zamienisz po prostu na:
Kod:
self.damage = attacker.atk * attacker.str / self.pdef

Co do trafienia, to pokombinuj z tą linijką:
Kod:
hit_result = (rand(100) < attacker.hit)

Jak widać program losuje liczbę od 0 do 99 i jeśli liczba ta jest mniejsza od trafienia atakującego, to wówczas hit jest celny. Ustawienie zatem Twojego wzoru:
Kod:
(attacker.dex / self.agi) - self.eva

wymaga porządnych obliczeń, jaka ma być szansa tego trafienia.


Powered by phpBB modified by Przemo © 2003 phpBB Group