Gain experience toward skills by crafting

remotes/ExcaliburZero/master
Brandon 2015-12-06 15:50:26 -06:00
parent 1fe2bfdb4c
commit e769d22a00
2 changed files with 27 additions and 14 deletions

View File

@ -76,6 +76,25 @@ function skills.add_exp(name, exp)
end
end
function skills.add_skill_exp(name, skill_id, exp)
local sk = skills.get_skill(name,skill_id)
local skill = skills.available_skills[skill_id]
local next_level = math.floor(((sk.level^1.75) * skill.level_exp))
local pskills = pd.get(name,"skills")
pskills[skill_id].exp = pskills[skill_id].exp + exp
local increased = false
while pskills[skill_id].exp >= next_level and pskills[skill_id].level < skill.max_level do
increased = true
pskills[skill_id].level = pskills[skill_id].level + 1
pskills[skill_id].exp = pskills[skill_id].exp - next_level
next_level = math.floor(((pskills[skill_id].level^1.75) * skill.level_exp))
end
pd.set(name,"skills",pskills)
return increased
end
function skills.get_probability(name, skill1, skill2)
--print("get_probablilty("..name..","..tostring(skill1)..","..tostring(skill2)..")")
if ( name == nil or name == "" ) then
@ -116,20 +135,8 @@ minetest.register_on_joinplayer(function (player)
local name = player:get_player_name()
local skill_id = tonumber(listname)
local exp_dropped = stack:get_definition().exp_value * stack:get_count()
local sk = skills.get_skill(name,skill_id)
local skill = skills.available_skills[skill_id]
local next_level = math.floor(((sk.level^1.75) * skill.level_exp))
local pskills = pd.get(name,"skills")
pskills[skill_id].exp = pskills[skill_id].exp + exp_dropped
while pskills[skill_id].exp >= next_level and pskills[skill_id].level < skill.max_level do
pskills[skill_id].level = pskills[skill_id].level + 1
pskills[skill_id].exp = pskills[skill_id].exp - next_level
next_level = math.floor(((pskills[skill_id].level^1.75) * skill.level_exp))
end
pd.set(name,"skills",pskills)
skills.add_skill_exp(name,skill_id,exp_dropped)
stack:clear()
inv:set_stack(listname,index,stack)

View File

@ -84,11 +84,17 @@ end
local function on_craft(itemstack,player,old_craftgrid,craft_inv)
if itemstack:get_definition().skill ~= nil then
local probability = skills.get_probability(player:get_player_name(),SKILL_CRAFTING,itemstack:get_definition().skill)
local name = player:get_player_name()
local probability = skills.get_probability(name,SKILL_CRAFTING,itemstack:get_definition().skill)
local rangeLow = ( probability - 10 ) / 100
probability = probability / 100
local wear = math.floor(50000 - ( 50000 * math.random(rangeLow,probability) ))
itemstack:add_wear(wear)
local i = skills.add_skill_exp(name,SKILL_CRAFTING,1)
local ii = skills.add_skill_exp(name,itemstack:get_definition().skill,1)
if i or ii then
minetest.chat_send_player(name,"Your skills are increasing!")
end
return itemstack
end
return nil