Codice:
local mob_rewards = {
["tushkano"] = 3,
["cat"] = 5,
["dog"] = 7,
["boar"] = 11,
["fracture"] = 12,
["flesh"] = 15,
["zombie"] = 18,
["pseudodog"] = 22,
["chimera"] = 26,
["burer"] = 29,
["poltergeist"] = 32,
["controller"] = 35,
["snork"] = 38,
["bloodsucker"] = 42,
["gigant"] = 47, -- ad ogni tipologia di mostro si abbini un valore
}
local mob_prof = {
["weak"] = 1, -- ad ogni rango si abini il moltiplicatore
["normal"] = 2,
["strong"] = 3,
}
local act_rank = db.actor:character_rank() -- cerca il rango n dell'attore
local act_weap = my_mod.get_weapon_used(db.actor) -- cerca il nome dell'arma usata dall'attore
local weap_type = my_mod.weap_type(act_weap) -- ritorna un valore che indica la tipologia di arma
-- (bianca, a corta distanza, a distanza...)
function load_mob_info(obj) -- ritorna i due valore delle table(valore, moltiplicatore)
local sect = obj:section()
local mob_sect, prof = 0, 1
for k, v in pairs(mob_rewards) do
if string.find(sect, k) then
mob_sect = v
break
end
end
for k, v in pairs(mob_prof) do
if string.find(sect, k) then
prof = v
break
end
end
return mob_sect, prof, 0
end
function calculate_reward(obj) -- chiamata nel metodo generic_object_binder:death_callback(victim, who) in bind_monster.script
local species, profile, rwrd = load_mob_info(obj) -- assegna i valori ritornati dalla funzione precedente
if (act_rank > 0) and (weap_type ~= 0) then
local rew_ex = my_mod.load_var("mob_reward", 0) -- carica un eventuale valore precedente del premio
rwrd = math.ceil(((species * profile) * (weap_type / 2 + 1) * (math.log(act_rank + 2))) + (tonumber(rew_ex)))
-- calcola il premio per l'ultima uccisione ed eventualmente lo aggiunge ad uno precedente
my_mod.save_var("mob_reward", rwrd) -- salva il nuovo valore
end
end
function reset_reward() -- azzera il premio
local rwrd = my_mod.load_var("mob_reward", 0)
if rwrd > 0 then
my_mod.save_var("mob_reward", 0)
end
end
------------------------------------------------------------------------------------------------
-- da usare nei dialoghi
function check_mob_rewards(trader, actor) -- verifica se vi č un premio
local rw = my_mod.load_var("mob_reward", 0)
if rw > 0 then
return true
end
return false
end
function give_rewards_for_mob_killing(trader) -- da il premio in denaro
local rw = my_mod.load_var("mob_reward", 0)
if rw > 0 then
dialogs.relocate_money(trader, rw, "in")
end
end
-- ovviamente si possono inseriire unmondo di variabili che
-- inflenzeranno il premio finale come il livello nel quale ci si
-- trova, lo stato i salute nel momento in cui si uccide il
-- mostro, il tempo atmosferico ( se č libero o piove forte)
-- ...