| |
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.
|
|