mirror of
https://github.com/lhofhansl/rangedweapons.git
synced 2025-03-13 13:42:32 +01:00
refactored the entire skill system
This commit is contained in:
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@ -0,0 +1 @@
|
||||
* text eol=lf
|
@ -1,5 +1,6 @@
|
||||
# textdomain:rangedweapons
|
||||
@1 skill degraded!=Geschick mit @1 verloren!
|
||||
You've improved your @1 skill!=Geschick mit @1 verbessert!
|
||||
Handgun=Handfeuerwaffe
|
||||
Machine Pistol=Maschinenpistole
|
||||
S.M.G.=S.M.G.
|
||||
@ -8,4 +9,6 @@ Heavy MG=Schweres MG
|
||||
A.Rifle=Sturmgewehr
|
||||
Revolver/magnum=Revolver/Magnum
|
||||
Rifle=Gewehr
|
||||
Throwing weapons=Wurfwaffen
|
||||
Throwing weapons=Wurfwaffen
|
||||
Gun efficiency: increases damage, accuracy and crit chance.=Waffenwirksamkeit: erhöht Schaden, Genauigkeit und Volltrefferwahrscheinlichkeit.
|
||||
Done=Fertig
|
@ -31,6 +31,9 @@ rangedweapons_mob_dmg_multiplier (Mob Damage Multiplier) float 1.0
|
||||
# Amount of blood (0 to disable)
|
||||
rangedweapons_bloodyness (Bloodyness) int 10
|
||||
|
||||
# Whether skill system is enabled
|
||||
rangedweapons.skill_system (Skill System) bool true
|
||||
|
||||
# Maximum Gun Skill (set to 100 to disable gaining skill)
|
||||
rangedweapons_max_gun_efficiency (Maximum Gun Skill) int 300
|
||||
|
||||
|
213
skills.lua
213
skills.lua
@ -1,115 +1,100 @@
|
||||
local S = minetest.get_translator("rangedweapons")
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
local meta = player:get_meta()
|
||||
if meta:get_int("handgun_skill") == 0
|
||||
then
|
||||
meta:set_int("handgun_skill",100)
|
||||
end
|
||||
if meta:get_int("mp_skill") == 0
|
||||
then
|
||||
meta:set_int("mp_skill",100)
|
||||
end
|
||||
if meta:get_int("smg_skill") == 0
|
||||
then
|
||||
meta:set_int("smg_skill",100)
|
||||
end
|
||||
if meta:get_int("shotgun_skill") == 0
|
||||
then
|
||||
meta:set_int("shotgun_skill",100)
|
||||
end
|
||||
if meta:get_int("heavy_skill") == 0
|
||||
then
|
||||
meta:set_int("heavy_skill",100)
|
||||
end
|
||||
if meta:get_int("arifle_skill") == 0
|
||||
then
|
||||
meta:set_int("arifle_skill",100)
|
||||
end
|
||||
if meta:get_int("revolver_skill") == 0
|
||||
then
|
||||
meta:set_int("revolver_skill",100)
|
||||
end
|
||||
if meta:get_int("rifle_skill") == 0
|
||||
then
|
||||
meta:set_int("rifle_skill",100)
|
||||
end
|
||||
if meta:get_int("throw_skill") == 0
|
||||
then
|
||||
meta:set_int("throw_skill",100)
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
minetest.register_chatcommand("gunskills", {
|
||||
func = function(name, param)
|
||||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
local meta = player:get_meta()
|
||||
local handguns = meta:get_int("handgun_skill")
|
||||
local mps = meta:get_int("mp_skill")
|
||||
local smgs = meta:get_int("smg_skill")
|
||||
local shotguns = meta:get_int("shotgun_skill")
|
||||
local heavy = meta:get_int("heavy_skill")
|
||||
local arifle = meta:get_int("arifle_skill")
|
||||
local revolver = meta:get_int("revolver_skill")
|
||||
local rifle = meta:get_int("rifle_skill")
|
||||
local throw = meta:get_int("throw_skill")
|
||||
minetest.show_formspec(name, "rangedweapons:gunskills_form",
|
||||
"size[11,7]"..
|
||||
"label[0,0;Gun efficiency: increases damage, accuracy and crit chance.]"..
|
||||
"image[0,1;1,1;rangedweapons_handgun_img.png]"..
|
||||
"label[1,1.2;Handgun efficiency: " .. handguns .. "%]"..
|
||||
"image[0,2;1,1;rangedweapons_machinepistol_img.png]"..
|
||||
"label[1,2.2;M.Pistol efficiency: " .. mps .. "%]"..
|
||||
"image[0,3;1,1;rangedweapons_smg_img.png]"..
|
||||
"label[1,3.2;S.M.G efficiency: " .. smgs .. "%]"..
|
||||
"image[0,4;1,1;rangedweapons_shotgun_img.png]"..
|
||||
"label[1,4.2;Shotgun efficiency: " .. shotguns .. "%]"..
|
||||
"image[0,5;1,1;rangedweapons_heavy_img.png]"..
|
||||
"label[1,5.2;Heavy.MG efficiency: " .. heavy .. "%]"..
|
||||
"image[0,6;1,1;rangedweapons_arifle_img.png]"..
|
||||
"label[1,6.2;A.rifle efficiency: " .. arifle .. "%]"..
|
||||
"image[5,1;1,1;rangedweapons_revolver_img.png]"..
|
||||
"label[6,1.2;Revl./mgn. efficiency: " .. revolver .. "%]"..
|
||||
"image[5,2;1,1;rangedweapons_rifle_img.png]"..
|
||||
"label[6,2.2;Rifle efficiency: " .. rifle .. "%]"..
|
||||
"image[5,3;1,1;rangedweapons_yeetable_img.png]"..
|
||||
"label[6,3.2;Throwing efficiency: " .. throw .. "%]"..
|
||||
"button_exit[9,0;2,1;exit;Done]")
|
||||
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
local S = minetest.get_translator("rangedweapons")
|
||||
|
||||
local skill_list = {
|
||||
{id="handgun_skill",name="Handgun"},
|
||||
{id="mp_skill",name="Machine Pistol"},
|
||||
{id="smg_skill",name="S.M.G."},
|
||||
{id="shotgun_skill",name="Shotgun"},
|
||||
{id="heavy_skill",name="Heavy MG"},
|
||||
{id="arifle_skill",name="A.Rifle"},
|
||||
{id="revolver_skill",name="Revolver/magnum"},
|
||||
{id="rifle_skill",name="Rifle"},
|
||||
{id="throw_skill",name="Throwing weapons"},
|
||||
}
|
||||
|
||||
local min_gun_efficiency = tonumber(minetest.settings:get("rangedweapons_min_gun_efficiency")) or 40
|
||||
local timer = 0
|
||||
minetest.register_globalstep(function(dtime, player)
|
||||
timer = timer + dtime;
|
||||
|
||||
if timer > 60 then
|
||||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
local meta = player:get_meta()
|
||||
for _,skill in ipairs(skill_list) do
|
||||
if math.random(1, 40) == 1 then
|
||||
if meta:get_int(skill.id) > min_gun_efficiency then
|
||||
meta:set_int(skill.id, meta:get_int(skill.id) - 1)
|
||||
minetest.chat_send_player(player:get_player_name(), minetest.colorize("#ff0000",S("@1 skill degraded!", S(skill.name))))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
timer = 0
|
||||
end
|
||||
end
|
||||
end)
|
||||
{id="handgun_skill",name="Handgun",img="rangedweapons_handgun_img"},
|
||||
{id="mp_skill",name="Machine Pistol",img="rangedweapons_machinepistol_img"},
|
||||
{id="smg_skill",name="S.M.G.",img="rangedweapons_smg_img"},
|
||||
{id="shotgun_skill",name="Shotgun",img="rangedweapons_shotgun_img"},
|
||||
{id="heavy_skill",name="Heavy MG",img="rangedweapons_heavy_img"},
|
||||
{id="arifle_skill",name="A.Rifle",img="rangedweapons_arifle_img"},
|
||||
{id="revolver_skill",name="Revolver/magnum",img="rangedweapons_revolver_img"},
|
||||
{id="rifle_skill",name="Rifle",img="rangedweapons_rifle_img"},
|
||||
{id="throw_skill",name="Throwing weapons",img="rangedweapons_yeetable_img"},
|
||||
}
|
||||
|
||||
local min_gun_efficiency = tonumber(minetest.settings:get("rangedweapons_min_gun_efficiency")) or 40
|
||||
local max_gun_efficiency = tonumber(minetest.settings:get("rangedweapons_max_gun_efficiency")) or 300
|
||||
local skill_system = minetest.settings:get_bool("rangedweapons.skill_system",true)
|
||||
local timer = 0
|
||||
|
||||
minetest.register_chatcommand("gunskills", {
|
||||
func = function(name, param)
|
||||
local meta = minetest.get_player_by_name(name):get_meta()
|
||||
local t = {"formspec_version[3]size[11,7]label[1,1;"}
|
||||
table.insert(t,S("Gun efficiency: increases damage, accuracy and crit chance."))
|
||||
table.insert(t,"]")
|
||||
for i,skill in ipairs(skill_list) do
|
||||
local x = i>5 and 6 or 1
|
||||
local y = (i-1)%5+1.5
|
||||
table.insert(t,"image[")
|
||||
table.insert(t,x)
|
||||
table.insert(t,",")
|
||||
table.insert(t,y)
|
||||
table.insert(t,";1,1;")
|
||||
table.insert(t,skill.img)
|
||||
table.insert(t,".png]")
|
||||
x=x+1.2
|
||||
y=y+0.5
|
||||
table.insert(t,"label[")
|
||||
table.insert(t,x)
|
||||
table.insert(t,",")
|
||||
table.insert(t,y)
|
||||
table.insert(t,";")
|
||||
table.insert(t,skill.name)
|
||||
table.insert(t,": ")
|
||||
table.insert(t,meta:contains(skill.id) and meta:get_int(skill.id) or 100)
|
||||
table.insert(t,"%]")
|
||||
end
|
||||
table.insert(t,"button_exit[9,6;2,1;exit;"..S("Done").."]")
|
||||
minetest.show_formspec(name, "rangedweapons:gunskills_form",table.concat(t))
|
||||
end
|
||||
})
|
||||
|
||||
if skill_system then
|
||||
minetest.register_globalstep(function(dtime, player)
|
||||
timer = timer + dtime;
|
||||
|
||||
if timer > 60 then
|
||||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
local meta = player:get_meta()
|
||||
for _,skill in ipairs(skill_list) do
|
||||
if math.random(1, 40) == 1 then
|
||||
local skill_value = meta:contains(skill.id) and meta:get_int(skill.id) or 100
|
||||
if skill_value > min_gun_efficiency then
|
||||
meta:set_int(skill.id, skill_value - 1)
|
||||
minetest.chat_send_player(player:get_player_name(), minetest.colorize("#ff0000",S("@1 skill degraded!", S(skill.name))))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
timer = 0
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
local skill_name_from_id = {}
|
||||
for _,skill in ipairs(skill_list) do
|
||||
skill_name_from_id[skill.id] = skill.name
|
||||
end
|
||||
rangedweapons_gain_skill = function(player,skill,chance)
|
||||
if skill_system then
|
||||
if math.random(1, chance) == 1 then
|
||||
local meta = player:get_meta()
|
||||
local skill_value = meta:contains(skill) and meta:get_int(skill) or 100
|
||||
if skill_value < max_gun_efficiency then
|
||||
meta:set_int(skill, skill_value + 1)
|
||||
minetest.chat_send_player(player:get_player_name(), "" ..core.colorize("#25c200",S("You've improved your @1 skill!", S(skill_name_from_id[skill]))))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if not skill_system then
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
local meta = player:get_meta()
|
||||
for _,skill in ipairs(skill_list) do
|
||||
meta:set_string(skill.id, "")
|
||||
end
|
||||
end)
|
||||
end
|
Reference in New Issue
Block a user