You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.7 KiB
96 lines
2.7 KiB
class PersoController < ApplicationController
|
|
skip_before_action :verify_authenticity_token
|
|
def perso
|
|
# On récupère les possibilités en fonction de la classe, ainsi que la classe pour la base
|
|
mes_jeux = Game.where(id: params[:jeu])
|
|
if (mes_jeux.size != 1)
|
|
@error = "Jeu non trouvé"
|
|
return 1
|
|
else
|
|
mon_jeu = mes_jeux[0]
|
|
@jeu_titre = mon_jeu.hack
|
|
end
|
|
|
|
mes_classes = Classe.where(id: params[:classe])
|
|
if (mes_classes.size != 1)
|
|
@error = "Classe non trouvée"
|
|
return 1
|
|
else
|
|
ma_classe = mes_classes[0]
|
|
@classe_titre = ma_classe.titre
|
|
@base = ma_classe.base
|
|
end
|
|
|
|
equipements = Equipement.where(classe: ma_classe.id)
|
|
if (equipements.size < 1)
|
|
@error = "Liste d'équipements non trouvés"
|
|
return 1
|
|
end
|
|
|
|
# tirage aléatoire FOR/DEX/VOL/PV en fonction des spécificité de la classe
|
|
if (ma_classe.for == 3)
|
|
@force = lance(3,6,0)
|
|
elsif (ma_classe.for == 2)
|
|
@force = lance(2,6,6)
|
|
else
|
|
@error = "Valeur de force non implémentée"
|
|
return 1
|
|
end
|
|
|
|
if (ma_classe.dex == 3)
|
|
@dexterite = lance(3,6,0)
|
|
elsif (ma_classe.dex == 2)
|
|
@dexterite = lance(2,6,6)
|
|
else
|
|
@error = "Valeur de dextérité non implémentée"
|
|
return 1
|
|
end
|
|
|
|
if (ma_classe.vol == 3)
|
|
@volonte = lance(3,6,0)
|
|
elsif (ma_classe.vol == 2)
|
|
@volonte = lance(2,6,6)
|
|
else
|
|
@error = "Valeur de volonté non implémentée"
|
|
return 1
|
|
end
|
|
|
|
# pv avec type et pv_min
|
|
pvmin = ma_classe.pv_min
|
|
@pv = rand(ma_classe.pv).to_i + 1
|
|
if (@pv < pvmin)
|
|
@pv = pvmin
|
|
end
|
|
|
|
# Equipement en fonction des tirages précédents
|
|
max_car = [@force, @dexterite, @volonte].max
|
|
liste_equip = equipements.select{ |item| item[:haute] == max_car && item[:pv] == @pv }
|
|
# si trouvé, prendre aléatoire parmi ceux trouvés
|
|
if (liste_equip.size > 0)
|
|
@equip = liste_equip[rand(liste_equip.size).to_i][:liste]
|
|
# sinon chercher avec valeur basse
|
|
else
|
|
seuil_min = equipements.min { |a, b| a[:haute] <=> b[:haute] }[:haute]
|
|
liste_pv = equipements.select{ |item| item[:haute] == seuil_min && item[:pv] == @pv }
|
|
liste_tot = equipements.select{ |item| item[:haute] == seuil_min }
|
|
if (liste_pv.size > 0)
|
|
@equip = liste_pv[rand(liste_pv.size).to_i][:liste]
|
|
# sinon aléatoire dans toute la liste
|
|
elsif (liste_tot.size > 0)
|
|
@equip = liste_tot[rand(liste_tot.size).to_i][:liste]
|
|
else
|
|
@error = "Aucun equipement/capacité disponible"
|
|
return 1
|
|
end
|
|
end
|
|
end
|
|
|
|
def lance(nb,type,bonus)
|
|
v = 0
|
|
nb.times do
|
|
v += rand(type).to_i + 1
|
|
end
|
|
v += bonus
|
|
return v
|
|
end
|
|
end
|
|
|