########################################################
#Инструкция
########################################################
#Dice.roll(x,y) или Dice.roll("xdy")
#
#Бросает x y-гранних дайсов и возвращает сумму. Вы можете заменить x и y на "vx" (с ковычками) что бы #использовать переменные.
#Например, Dice.roll("v3","v6") и Dice.roll("v3dv6") бросят колличество (variable 3) (variable 6)- гранних #дайсов.
#
#Dice.rolls(x,y) или Dice.rolls("xdy")
#Вовзаращает массив с бросками всех x y-гранних дайсов. Вы можете использовать операторы, например #Dice.rolls("3d6").max даст вам максимальный из бросков 3 дайсов с 6-гранних. Вы можете использовать #переменные как и с Dice.roll.
#
#Dice.saverolls(z,x,y) или Dice.saverolls(z,"xdy")
#Бросает x y-гранних дайсов и записывает каждый результат в переменную, начиная с переменной z. #Dice.saverolls(11, #"3d20") бросит три 20-гранних дайса и запишет результат в переменные 11, 12 и 13 #соответственно.
#
#a.weaponroll
#Вы можете использовать эту запись в формуле урона для привязки урона от оружия к броску кубиков.
#Что бы задать урон бросками дайсов, добавьте эту запись в заметки к оружию:
#DiceDamage:xdy
#
#Например:
#Эрик с 16 Атаки, экипирован топором дровосека, у которого в заметках запись DiceDamage:2d6
#Обычная формула атаки измененна на a.weaponroll + (a.atk-10)/2 - b.def
#Таким образом, обычная атака от Эрика по цели без защиты нанесёт 2d6+3 урона, или между 5 и 15 урона.
#
########################################################
#ISTRUZIONI
########################################################
# Potete usare i seguenti comandi in script call, formule del danno,
# operatori variabili e altri script.
########################################################
# Dice.roll(x,y) OPPURE Dice.roll("xdy")
#-------------------------------------------------------
# Simula il lancio di x dadi a y facce e restituisce la somma.
# Potete sostituire x e y con "vx" (virgolette incluse) per usare invece
# la variabile numero x.
# Per esempio, Dice.roll("v5", "v6") lancerà un numero di dadi pari
# alla variabile 5, ciascuno con un numero di facce pari alla variabile 6.
########################################################
# Dice.rolls(x,y) OPPURE Dice.rolls("xdy")
#-------------------------------------------------------
# Restituisce un array con tutti i risultati di x lanci di un dado a y facce.
# Potete applicare degli operatori, ad esempio Dice.rolls("4d6").max per
# restituire il risultato più alto di 4 lanci di un dado a 6 facce.
# Anche qui si possono usare le variabili.
########################################################
# Dice.saverolls(z, x, y) OPPURE Dice.saverolls(z, "xdy")
#-------------------------------------------------------
# Lancia x dadi a y facce e salva i valori in un gruppo di variabili a partire
# dalla numero z. Ad esempio, Dice.saverolls(11, "4d4") lancerà quattro dadi
# a quattro facce e salverà i risultati nelle variabili 11, 12, 13 e 14.
# Anche qui si possono usare le variabili.
########################################################
# weaponroll
#-------------------------------------------------------
# Questa funzione permette di far infliggere alle armi danni
# basati su lanci di dado. Scrivete nelle note dell'arma
# "DiceDamage:xdy" (senza virgolette), dopodichè usate nelle
# formule del danno delle abilità interessate "a.weaponroll"
# per usare il danno a dadi dell'arma equipaggiata dall'utilizzatore.
########################################################
module Dice
def self.roll_the_dice(dice,value)
rolls = []
if value == nil
n = dice.index(/d/i)
x = dice.slice!(0, n)
dice.slice!("d")
y = dice
else
x = dice
y = value
end
if x.is_a?(String) and x.slice(/v/i) != nil
x = $game_variables[x.slice(1,x.size - 1).to_i]
else
x = x.to_i
end
if y.is_a?(String) and y.slice(/v/i) != nil
y = $game_variables[y.slice(1,y.size - 1).to_i]
else
y = y.to_i
end
if x == 0
x = 1
end
while x > 0
roll = y == 0 ? 0 : rand(y) + 1
rolls.push(roll)
x-=1
end
return rolls
end
def self.roll(dice, value = nil)
result = 0
rolls = roll_the_dice(dice,value)
return rolls.inject{|sum, n| sum + n}
end
def self.rolls(dice, value = nil)
return roll_the_dice(dice,value)
end
def self.saverolls(var, dice, value = nil)
rolls = roll_the_dice(dice,value)
z = var
rolls.each do |i|
$game_variables[z] = i
z +=1
end
end
end
class Game_Battler < Game_BattlerBase
def weaponroll
if !actor?
dicedamage1 = $data_enemies[enemy_id].note.to_s.slice(/^DiceDamage:v?[0-9]+dv?[0-9]+$/i)
dicedamage1 = dicedamage1.slice(/v?[0-9]+dv?[0-9]+/i)
dicedamage1 = Dice.roll(dicedamage1)
return dicedamage1
end
if actor?
if weapons[0] != nil
dicedamage1 = weapons[0].note.to_s.slice(/^DiceDamage:v?[0-9]+dv?[0-9]+$/i)
dicedamage1 = dicedamage1.slice(/v?[0-9]+dv?[0-9]+/i)
dicedamage1 = Dice.roll(dicedamage1)
else
dicedamage1 = 0
end
if weapons[1] != nil
dicedamage2 = weapons[1].note.to_s.slice(/^DiceDamage:[0-9]+d[0-9]+$/i)
dicedamage2 = dicedamage2.slice(/v?[0-9]+dv?[0-9]+/i)
dicedamage2 = Dice.roll(dicedamage2)
else
dicedamage2 = 0
end
return dicedamage1 + dicedamage2
end
end
end