module Gallade
module SkillSystem
#############################################
# ISTRUZIONI
#############################################
#Scrivete "-exp:xx" nelle notetag di una skill per far guadagnare xx esperienza
#nell'arma equipaggiata.
#Nella tab Classi, scrivete "-Weaponskill" come nota in una skill da apprendere
#in modo che venga appresa aumentando il livello dell'abilità con l'arma
#anzichè il livello del personaggio.
#Nelle formule del danno, usate "a.wskill(x)" per usare il livello di abilità
#con un tipo di arma nella formula.
#Scrivete "-levreq:xx" nelle note di un'arma per rendere necessario un certo
#livello di abilità per equipaggiarla.
###########################################
#CONFIGURAZIONE
###########################################
#Formula dell'esperienza. Scrivete "Linear" per far aumentare il livello
#delle abilità in maniera lineare (10 exp, poi 20,30,40 e così via).
#Scrivete "Quad" per farlo aumentare in maniera quadratica
#(Prima 10, poi 40,90,160)
#Scrivete un'altra formula se la volete personalizzare: il livello
#dell'abilità è "sklv".
ExpFormula = "Linear"
# Attivate o disattivate la modalità Auto, che calibrerà il sistema
# automaticamente in questo modo:
# Le abilità verranno apprese automaticamente e daranno esperienza in base
# alle armi necessarie per utilizzarle
# Inoltre, le abilità verranno apprese in base ai livelli di competenza
# dell'arma anche se non specificato, se serve un'arma particolare per
# utilizzarle.
# Inoltre, usare una skill darà esperienza con l'arma pari al suo costo
# in MP+TP (gli attacchi normali ne daranno 1)
AutoMode = false
end
end
################################################
#END OF CONFIG
################################################
class Game_Actor < Game_Battler
attr_accessor :sklvl
attr_accessor :skexp
alias GKsetup setup
def setup(actor_id)
GKsetup(actor_id)
@sklvl = []
@skexp = []
sklvl[0] = 0
for i in 1...99
@sklvl[i] = 1
@skexp[i] = 0
end
end
def wskill(id)
return sklvl[weapons[0].wtype_id] if id == 0
return sklvl[id]
end
def tonextlevel(sklv)
case Gallade::SkillSystem::ExpFormula
when "Linear"
sklv *10
when "Quad"
(sklv * 10) ** 2
else
Gallade::SkillSystem::ExpFormula
end
end
def added_weapon_types
features_set(FEATURE_EQUIP_WTYPE)
end
def check_level_up(wtype)
while skexp[wtype] >= tonextlevel(sklvl[wtype])
skexp[wtype] -= tonextlevel(sklvl[wtype])
sklvl[wtype] += 1
end
check_learnable_skills
end
def learning_is_weaponskill(learning)
(Gallade::SkillSystem::AutoMode or learning.note.slice(/-Weaponskill/i) !=nil) and ($data_skills[learning.skill_id].required_wtype_id1 + $data_skills[learning.skill_id].required_wtype_id2) > 0
end
def check_learnable_skills
self.class.learnings.each do |learning|
if learning_is_weaponskill(learning)
if [sklvl[$data_skills[learning.skill_id].required_wtype_id1],sklvl[$data_skills[learning.skill_id].required_wtype_id2]].max >= learning.level
learn_skill(learning.skill_id)
end
end
end
end
def add_weapon_exp(wtype, exp)
skexp[wtype] += exp
check_level_up(wtype)
end
def level_up
@level += 1
self.class.learnings.each do |learning|
learn_skill(learning.skill_id) if learning.level == @level and !learning_is_weaponskill(learning)
end
end
def init_equips(equips)
@equips = Array.new(equip_slots.size) { Game_BaseItem.new }
equips.each_with_index do |item_id, i|
etype_id = index_to_etype_id(i)
slot_id = empty_slot(etype_id)
@equips[slot_id].set_equip(etype_id == 0, item_id) if slot_id
end
end
alias oldeguipgal? equippable?
def equippable?(item)
if item.is_a?(RPG::Weapon) and item.note.slice(/-LEVREQ:[0-9]+$/i) !=nil
levreq = item.note.slice(/-LEVREQ:[0-9]+$/i).slice(/[0-9]+$/).to_i
p levreq
else
levreq = 0
end
return false if item.is_a?(RPG::Weapon) and levreq > @sklvl[item.wtype_id]
return oldeguipgal?(item)
end
end
class Window_Status < Window_Selectable
def draw_block3(y)
draw_parameters(32, y)
draw_skillevels(228, y)
end
def tonextlevel(sklv)
case Gallade::SkillSystem::ExpFormula
when "Linear"
sklv *10
when "Quad"
(sklv * 10) ** 2
else
Gallade::SkillSystem::ExpFormula
end
end
def draw_skillevels(x,y)
change_color(system_color)
draw_text(x+20, y, width, line_height, "Abilità")
draw_text(x+130, y, width, line_height, "Liv.")
draw_text(x+180, y, width, line_height, "Esp.")
reset_font_settings
i = 1
@actor.added_weapon_types.each do |item|
name = $data_system.weapon_types[item]
draw_text_ex(x, y + 24 * i, name)
draw_text_ex(x+130, y + 24 * i, @actor.sklvl[item])
draw_text_ex(x+180, y + 24 * i, @actor.skexp[item].to_i.to_s + "/" + tonextlevel(@actor.sklvl[item]).to_i.to_s)
i +=1
end
end
end
class Game_Battler < Game_BattlerBase
alias allthatstuff make_damage_value
def make_damage_value(user, item)
allthatstuff(user,item)
return unless $data_skills[item.id] == item
if user.actor? then
return if user.weapons[0] == nil
if item.required_wtype_id1 + item.required_wtype_id2 > 0 then
if user.weapons[0].wtype_id == item.required_wtype_id1 or user.weapons[0].wtype_id == item.required_wtype_id2
user.add_weapon_exp(user.weapons[0].wtype_id, weapon_exp(item))
else
user.add_weapon_exp(user.weapons[1].wtype_id, weapon_exp(item))
end
else
user.add_weapon_exp(user.weapons[0].wtype_id, weapon_exp(item))
if user.weapons[1] != nil
user.add_weapon_exp(user.weapons[1].wtype_id, weapon_exp(item))
end
end
end
end
end
class Game_BattlerBase
def weapon_exp(skill)
return 1 if skill.id == attack_skill_id
return exr * (skill.mp_cost + skill.tp_cost) if Gallade::SkillSystem::AutoMode
return exr * skill.note.slice(/-EXP:[0-9]+$/i).slice(/[0-9]+$/).to_i if skill.note.slice(/-EXP:[0-9]+$/i) !=nil
return 0
end
end