From 9a333629294e40a4595f87eb7e48f8eb0f0ce65f Mon Sep 17 00:00:00 2001 From: Grandolf Date: Tue, 23 May 2017 14:35:57 -0400 Subject: [PATCH] Add files via upload --- classes/change-privs.lua | 47 ++ classes/init.lua | 1694 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 1741 insertions(+) create mode 100644 classes/change-privs.lua create mode 100644 classes/init.lua diff --git a/classes/change-privs.lua b/classes/change-privs.lua new file mode 100644 index 0000000..23e9385 --- /dev/null +++ b/classes/change-privs.lua @@ -0,0 +1,47 @@ +--Change old race privs to new GAME privs + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + local privs = minetest.get_player_privs(name) + if minetest.check_player_privs(name, {male = true, dwarf = true}) then + privs.male, privs.dwarf = nil + privs.GAMEdwarf, privs.GAMEmale = true, true + minetest.set_player_privs(name, privs) + elseif minetest.check_player_privs(name, {male = true, elf = true}) then + privs.male, privs.elf = nil + privs.GAMEelf, privs.GAMEmale = true, true + minetest.set_player_privs(name, privs) + elseif minetest.check_player_privs(name, {male = true, man = true}) then + privs.male, privs.man = nil + privs.GAMEman, privs.GAMEmale = true, true + minetest.set_player_privs(name, privs) + elseif minetest.check_player_privs(name, {male = true, orc = true}) then + privs.male, privs.orc = nil + privs.GAMEorc, privs.GAMEmale = true, true + minetest.set_player_privs(name, privs) + elseif minetest.check_player_privs(name, {male = true, hobbit = true}) then + privs.male, privs.hobbit = nil + privs.GAMEhobbit, privs.GAMEmale = true, true + minetest.set_player_privs(name, privs) + elseif minetest.check_player_privs(name, {female = true, dwarf = true}) then + privs.female, privs.dwarf = nil + privs.GAMEdwarf, privs.GAMEfemale = true, true + minetest.set_player_privs(name, privs) + elseif minetest.check_player_privs(name, {female = true, elf = true}) then + privs.female, privs.elf = nil + privs.GAMEelf, privs.GAMEfemale = true, true + minetest.set_player_privs(name, privs) + elseif minetest.check_player_privs(name, {female = true, man = true}) then + privs.female, privs.man = nil + privs.GAMEman, privs.GAMEfemale = true, true + minetest.set_player_privs(name, privs) + elseif minetest.check_player_privs(name, {female = true, orc = true}) then + privs.female, privs.orc = nil + privs.GAMEorc, privs.GAMEfemale = true, true + minetest.set_player_privs(name, privs) + elseif minetest.check_player_privs(name, {female = true, hobbit = true}) then + privs.female, privs.hobbit = nil + privs.GAMEhobbit, privs.GAMEfemale = true, true + minetest.set_player_privs(name, privs) + end +end) diff --git a/classes/init.lua b/classes/init.lua new file mode 100644 index 0000000..7866b8b --- /dev/null +++ b/classes/init.lua @@ -0,0 +1,1694 @@ +minetest.register_tool("classes:staff_wood", { + description = "Wooden Staff", + inventory_image = "classes_staff_wood_wield.png", + wield_image = "classes_staff_wood_wield.png", + wield_scale = {x=1.5,y=5.5,z=1.5}, + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level=0, + groupcaps={ + crumbly = {times={[1]=4.5, [2]=2.2, [3]=1.2}, uses=10, maxlevel=1}, + }, + damage_groups = {fleshy=3}, + } +}) + +minetest.register_craft({ + output = 'classes_weapons:staff_wood', + recipe = { + {'default:wood'}, + {'default:stick'}, + {'default:wood'}, + } +}) + +minetest.register_entity("classes:fireball", { + textures = {"fireball.png"}, + velocity = 15, + light_source = 200, + on_step = function (self, pos, node, dtime) + local pos = self.object:getpos() + local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) + for k, obj in pairs(objs) do + obj:set_hp(obj:get_hp()-15) + if obj:is_player() then + return + else + obj:set_hp(obj:get_hp()-70) + if obj:get_entity_name() ~= "classes:fireball" then + if obj:get_hp()<=0 then + obj:remove() + end + self.object:remove() + end + end + end + + for dx=-1,1 do + for dy=-1,1 do + for dz=-1,1 do + local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz} + local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} + local n = minetest.env:get_node(p).name +-- if n ~= "classes:fireball" and n ~="hackersheep:hackersheep" and n ~="prohackersheep:prohackersheep" then +-- if minetest.registered_nodes[n].groups.noobhackersheep then --[[or math.random(1, 100) <= 0]] +-- minetest.env:set_node(t, {name=""..n}) +-- else +-- minetest.env:set_node(t, {name=""..n}) +-- end +-- else +if minetest.registered_nodes[n].groups.flammable or minetest.registered_nodes[n].groups.choppy or minetest.registered_nodes[n].groups.oddly_breakable_by_hand or minetest.registered_nodes[n].groups.cracky or minetest.registered_nodes[n].groups.crumbly or n =="default:desert_stone" then + self.hit_node(self, pos, node) + self.object:remove() + return + end + end + end + end + end, + + + hit_node = function(self, pos, node) + local pos = self.object:getpos() +-- for dx=-4,4 do +-- for dy=-4,4 do +-- for dz=-4,4 do +-- local p = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} +-- local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} +-- local n = minetest.env:get_node(pos).name +-- if math.random(1, 50) <= 0 then +-- minetest.env:remove_node(p) +-- end +-- if minetest.registered_nodes[n].groups.flammable or math.random(1, 100) >=500 then +-- minetest.env:set_node(t, {name="air"}) +-- end + local objects = minetest.env:get_objects_inside_radius(pos, 10) + for _,obj in ipairs(objects) do + if obj:is_player() or (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item") then + local obj_p = obj:getpos() + local vec = {x=obj_p.x-pos.x, y=obj_p.y-pos.y, z=obj_p.z-pos.z} + local dist = (vec.x^2+vec.y^2+vec.z^2)^0.5 + local damage = ((80*0.5^dist)*2)+3 + obj:punch(obj, 1.0, { + full_punch_interval=1.0, + damage_groups={fleshy=damage}, + }, vec) + end + end + + minetest.add_particlespawner( + 10, --amount + 0.1, --time + {x=pos.x-3, y=pos.y-3, z=pos.z-3}, --minpos + {x=pos.x+3, y=pos.y+3, z=pos.z+3}, --maxpos + {x=-0, y=-0, z=-0}, --minvel + {x=0, y=0, z=0}, --maxvel + {x=-0.5,y=5,z=-0.5}, --minacc + {x=0.5,y=5,z=0.5}, --maxacc + 0.1, --minexptime + 1, --maxexptime + 50, --minsize + 90, --maxsize + false, --collisiondetection + "flame_pillar.png" --texture + ) + +-- end +-- end +-- end + end +}) +minetest.register_craftitem("classes:firestaff", { + description = "Staff of Fire", + inventory_image = "firestaff.png", + wield_scale = {x=2.5,y=5.5,z=1.5}, + stackable = false, + on_use = function (itemstack, placer, pointed_thing) + local dir = placer:get_look_dir(); + local playerpos = placer:getpos(); + local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+2+dir.y,z=playerpos.z+0+dir.z}, "classes:fireball") + local vec = {x=dir.x*6,y=dir.y*6,z=dir.z*6} + obj:setvelocity(vec) + return itemstack + end, + light_source = 15, +}) +local addvectors = function (v1, v2) + return {x=v1.x+v2.x, y=v1.y+v2.y, z=v1.z+v2.z} +end +--...............................................................................................................................-- +--...............................................................................................................................-- +--...............................................................................................................................-- +--...............................................................................................................................-- +--...............................................................................................................................-- +--...............................................................................................................................-- +--...............................................................................................................................-- +level1 = 1 +level1w_drop = "classes:staff_wood" +level1f_drop = "classes:staff_wood" +level1a_drop = "classes:staff_wood" +level1t_drop = "classes:staff_wood" + +level2 = 10 +level2w_drop = "classes:apprentice_staff" +level2f_drop = "" +level2t_drop = "" +level2a_drop = "" + +level3 = 50 +level3w_drop = "" +level3f_drop = "" +level3t_drop = "" +level3a_drop = "" + +level4 = 100 +level4w_drop = "" +level4f_drop = "" +level4t_drop = "" +level4a_drop = "" + +level5 = 500 +level5w_drop = "classes:lightning" +level5f_drop = "" +level5t_drop = "" +level5a_drop = "" + +level6 = 1000 +level6w_drop = "" +level6f_drop = "" +level6t_drop = "" +level6a_drop = "" + +level7 = 1500 +level7w_drop = "" +level7f_drop = "" +level7t_drop = "" +level7a_drop = "" + +level8 = 2000 +level8w_drop = "" +level8f_drop = "" +level8t_drop = "" +level8a_drop = "" + +level9 = 2500 +level9w_drop = "" +level9f_drop = "" +level9t_drop = "" +level9a_drop = "" + +level10 = 5000 +level10w_drop = "classes:firestaff" +level10f_drop = "" +level10t_drop = "" +level10a_drop = "" + +level11 = 10000 +level11w_drop = "classes:apprentice" +level11f_drop = "" +level11a_drop = "" +level11t_drop = "" + +level12 = 15000 +level12w_drop = "" +level12f_drop = "" +level12t_drop = "" +level12a_drop = "" + +level13 = 20000 +level13w_drop = "" +level13f_drop = "" +level13t_drop = "" +level13a_drop = "" + +level14 = 30000 +level14w_drop = "" +level14f_drop = "" +level14t_drop = "" +level14a_drop = "" + +level15 = 40000 +level15w_drop = "" +level15f_drop = "" +level15t_drop = "" +level15a_drop = "" + +level16 = 50000 +level16w_drop = "" +level16f_drop = "" +level16t_drop = "" +level16a_drop = "" + +level17 = 100000 +level17w_drop = "" +level17f_drop = "" +level17t_drop = "" +level17a_drop = "" + +level18 = 250000 +level18w_drop = "" +level18f_drop = "" +level18t_drop = "" +level18a_drop = "" + +level19 = 500000 +level19w_drop = "" +level19f_drop = "" +level19t_drop = "" +level19a_drop = "" + +level20 = 1000000 +level20w_drop = "" +level20f_drop = "" +level20t_drop = "" +level20a_drop = "" + + +--add an experience orb if player digs node from xp group +minetest.register_on_dignode(function(pos, oldnode, digger) + namer = oldnode.name + see_if_mineral = minetest.get_item_group(namer, "xp") + if see_if_mineral > 0 then + minetest.env:add_entity(pos, "classes:orb") + end +end) +--give a new player some xp +minetest.register_on_newplayer(function(player) + file = io.open(minetest.get_worldpath().."/"..player:get_player_name().."_experience", "w") + file:write("0") + file:close() +end) +--set player's xp level to 0 if they die +--minetest.register_on_dieplayer(function(player) +-- file = io.open(minetest.get_worldpath().."/"..player:get_player_name().."_experience", "w") +-- file:write("0") +-- file:close() +--end) + +--Allow people to collect orbs +minetest.register_globalstep(function(dtime,player_name) + for _,player in ipairs(minetest.get_connected_players()) do + local pos = player:getpos() + pos.y = pos.y+0.5 + for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 1)) do + if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "classes:orb" then + --RIGHT HERE ADD IN THE CODE TO UPGRADE PLAYERS + object:setvelocity({x=0,y=0,z=0}) + object:get_luaentity().name = "STOP" + minetest.sound_play("orb", { + to_player = player:get_player_name(), + }) + xp = io.open(minetest.get_worldpath().."/"..player:get_player_name().."_experience", "r") + experience = nil + + if xp == nil then + xp = io.open (minetest.get_worldpath().."/"..player:get_player_name().."_experience", "w") + xp:write("0") + xp:close() + + xp = io.open (minetest.get_worldpath().."/"..player:get_player_name().."_experience", "r") + if xp ~= nil then + experience = xp:read ("*l") + xp:close() + end + end + + if experience ~= nil then + new_xp = experience + 1 + xp_write = io.open(minetest.get_worldpath().."/"..player:get_player_name().."_experience", "w") + xp_write:write(new_xp) + xp_write:close() + if new_xp == level1 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level1w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level1f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level1t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level1a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + + if new_xp == level2 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level2w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level2f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level2t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level2a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + + if new_xp == level3 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level3w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level3f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level3t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level3a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + + if new_xp == level4 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level4w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level4f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level4t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level4a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + + if new_xp == level5 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level5w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level5f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level5t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level5a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + + if new_xp == level6 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level6w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level6f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level6t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level6a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + + if new_xp == level7 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level7w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level7f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level7t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level7a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + + if new_xp == level8 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level8w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level8f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level8t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level8a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + + if new_xp == level9 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level9w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level9f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level9t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level9a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + + if new_xp == level10 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level10w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level10f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level10t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level10a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + if new_xp == level11 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level11w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level11f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level11t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level11a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + if new_xp == level12 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level12w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level12f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level12t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level12a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + if new_xp == level13 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level13w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level13f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level13t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level13a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + if new_xp == level14 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level14w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level14f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level14t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level14a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + if new_xp == level9 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level14w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level14f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level14t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level14a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + if new_xp == level15 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level15w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level15f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level15t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level15a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + if new_xp == level16 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level17w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level17f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level17t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level17a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + if new_xp == level18 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level18w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level18f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level18t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level18a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + if new_xp == level19 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level19w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level19f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level19t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level19a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + if new_xp == level20 then + if minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) then + minetest.env:add_item(pos, level20w_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + minetest.env:add_item(pos, level20f_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + if not minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) then + if minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) then + minetest.env:add_item(pos, level20t_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + end + else if minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) then + minetest.env:add_item(pos, level20a_drop) + minetest.sound_play("level_up", { + to_player = player:get_player_name(), + }) + if not minetest.check_player_privs(player:get_player_name(),{GAMEarcher=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEthief=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEwizard=true}) + or minetest.check_player_privs(player:get_player_name(),{GAMEfighter=true}) + then + minetest.get_modpath("classes") + local path = minetest.get_modpath("classes") + dofile(path .. "/init.lua") + minetest.show_formspec(name, "race_selector", race_chooser) + end + end + end + end + end + object:remove() + end + end + for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 3)) do + if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "classes:orb" then + if object:get_luaentity().collect then + local pos1 = pos + pos1.y = pos1.y+0.2 + local pos2 = object:getpos() + local vec = {x=pos1.x-pos2.x, y=pos1.y-pos2.y, z=pos1.z-pos2.z} + vec.x = vec.x*3 + vec.y = vec.y*3 + vec.z = vec.z*3 + object:setvelocity(vec) + end + end + end + end +end) + +minetest.register_entity("classes:orb", { + physical = true, + timer = 0, + textures = {"orb.png"}, + visual_size = {x=0.3, y=0.3}, + collisionbox = {-0.17,-0.17,-0.17,0.17,0.17,0.17}, + on_activate = function(self, staticdata) + self.object:set_armor_groups({immortal=1}) + self.object:setvelocity({x=0, y=1, z=0}) + self.object:setacceleration({x=0, y=-10, z=0}) + end, + collect = true, + on_step = function(self, dtime) + self.timer = self.timer + dtime + if (self.timer > 300) then + self.object:remove() + end + local p = self.object:getpos() + local nn = minetest.env:get_node(p).name + noder = minetest.env:get_node(p).name + p.y = p.y - 0.3 + local nn = minetest.env:get_node(p).name + if not minetest.registered_nodes[nn] or minetest.registered_nodes[nn].walkable then + if self.physical_state then + self.object:setvelocity({x=0, y=0, z=0}) + self.object:setacceleration({x=0, y=0, z=0}) + self.physical_state = false + self.object:set_properties({ + physical = false + }) + end + else + if not self.physical_state then + self.object:setvelocity({x=0,y=0,z=0}) + self.object:setacceleration({x=0, y=-10, z=0}) + self.physical_state = true + self.object:set_properties({ + physical = true + }) + end + end + end, +}) + + + + + + + + + + + + + + + + + + + + + + + + + + + +minetest.register_entity("classes:magicmissile", { + textures = {"magicmissile.png"}, + velocity = 15, + light_source = 200, + on_step = function (self, pos, node, dtime) + local pos = self.object:getpos() + local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) + for k, obj in pairs(objs) do + obj:set_hp(obj:get_hp()-5) + if obj:is_player() then + return + else + obj:set_hp(obj:get_hp()-10) + if obj:get_entity_name() ~= "classes:magicmissile" then + if obj:get_hp()<=0 then + obj:remove() + end + self.object:remove() + end + end + end + + for dx=-1,1 do + for dy=-1,1 do + for dz=-1,1 do + local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz} + local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} + local n = minetest.env:get_node(p).name +-- if n ~= "classes:fireball" and n ~="hackersheep:hackersheep" and n ~="prohackersheep:prohackersheep" then +-- if minetest.registered_nodes[n].groups.noobhackersheep then --[[or math.random(1, 100) <= 0]] +-- minetest.env:set_node(t, {name=""..n}) +-- else +-- minetest.env:set_node(t, {name=""..n}) +-- end +-- else +if minetest.registered_nodes[n].groups.flammable or minetest.registered_nodes[n].groups.choppy or minetest.registered_nodes[n].groups.oddly_breakable_by_hand or minetest.registered_nodes[n].groups.cracky or minetest.registered_nodes[n].groups.crumbly or n =="default:desert_stone" then + self.hit_node(self, pos, node) + self.object:remove() + return + end + end + end + end + end, + + + hit_node = function(self, pos, node) + local pos = self.object:getpos() +-- for dx=-4,4 do +-- for dy=-4,4 do +-- for dz=-4,4 do +-- local p = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} +-- local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} +-- local n = minetest.env:get_node(pos).name +-- if math.random(1, 50) <= 0 then +-- minetest.env:remove_node(p) +-- end +-- if minetest.registered_nodes[n].groups.flammable or math.random(1, 100) >=500 then +-- minetest.env:set_node(t, {name="air"}) +-- end + local objects = minetest.env:get_objects_inside_radius(pos, 2) + for _,obj in ipairs(objects) do + if obj:is_player() or (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item") then + local obj_p = obj:getpos() + local vec = {x=obj_p.x-pos.x, y=obj_p.y-pos.y, z=obj_p.z-pos.z} + local dist = (vec.x^2+vec.y^2+vec.z^2)^0.5 + local damage = (10*0.5^dist)*1 + obj:punch(obj, 1.0, { + full_punch_interval=1.0, + damage_groups={fleshy=damage}, + }, vec) + end + end + + minetest.add_particlespawner( + 2, --amount + 0.1, --time + {x=pos.x-3, y=pos.y-3, z=pos.z-3}, --minpos + {x=pos.x+3, y=pos.y+3, z=pos.z+3}, --maxpos + {x=-0, y=-0, z=-0}, --minvel + {x=0, y=0, z=0}, --maxvel + {x=-0.5,y=5,z=-0.5}, --minacc + {x=0.5,y=5,z=0.5}, --maxacc + 0.1, --minexptime + 1, --maxexptime + 50, --minsize + 90, --maxsize + false, --collisiondetection + "magicmissileburst.png" --texture + ) + +-- end +-- end +-- end + end +}) +minetest.register_craftitem("classes:apprentice_staff", { + description = "Staff of the Apprenti", + inventory_image = "apprentice.png", + wield_scale = {x=2.5,y=5.5,z=1.5}, + stackable = false, + on_use = function (itemstack, placer, pointed_thing) + local dir = placer:get_look_dir(); + local playerpos = placer:getpos(); + local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+2+dir.y,z=playerpos.z+0+dir.z}, "classes:magicmissile") + local vec = {x=dir.x*8,y=dir.y*8,z=dir.z*8} + obj:setvelocity(vec) + return itemstack + end, + light_source = 15, +}) +local addvectors = function (v1, v2) + return {x=v1.x+v2.x, y=v1.y+v2.y, z=v1.z+v2.z} +end + + +minetest.register_entity("classes:lightning", { + textures = {"lightningball.png"}, + velocity = 15, + light_source = 200, + on_step = function (self, pos, node, dtime) + local pos = self.object:getpos() + local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) + for k, obj in pairs(objs) do + obj:set_hp(obj:get_hp()-10) + if obj:is_player() then + return + else + obj:set_hp(obj:get_hp()-20) + if obj:get_entity_name() ~= "classes:lightning" then + if obj:get_hp()<=0 then + obj:remove() + end + self.object:remove() + end + end + end + + for dx=-1,1 do + for dy=-1,1 do + for dz=-1,1 do + local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz} + local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} + local n = minetest.env:get_node(p).name +-- if n ~= "classes:fireball" and n ~="hackersheep:hackersheep" and n ~="prohackersheep:prohackersheep" then +-- if minetest.registered_nodes[n].groups.noobhackersheep then --[[or math.random(1, 100) <= 0]] +-- minetest.env:set_node(t, {name=""..n}) +-- else +-- minetest.env:set_node(t, {name=""..n}) +-- end +-- else +if minetest.registered_nodes[n].groups.flammable or minetest.registered_nodes[n].groups.choppy or minetest.registered_nodes[n].groups.oddly_breakable_by_hand or minetest.registered_nodes[n].groups.cracky or minetest.registered_nodes[n].groups.crumbly or n =="default:desert_stone" then + self.hit_node(self, pos, node) + self.object:remove() + return + end + end + end + end + end, + + + hit_node = function(self, pos, node) + local pos = self.object:getpos() +-- for dx=-4,4 do +-- for dy=-4,4 do +-- for dz=-4,4 do +-- local p = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} +-- local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} +-- local n = minetest.env:get_node(pos).name +-- if math.random(1, 50) <= 0 then +-- minetest.env:remove_node(p) +-- end +-- if minetest.registered_nodes[n].groups.flammable or math.random(1, 100) >=500 then +-- minetest.env:set_node(t, {name="air"}) +-- end + local objects = minetest.env:get_objects_inside_radius(pos, 4) + for _,obj in ipairs(objects) do + if obj:is_player() or (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item") then + local obj_p = obj:getpos() + local vec = {x=obj_p.x-pos.x, y=obj_p.y-pos.y, z=obj_p.z-pos.z} + local dist = (vec.x^2+vec.y^2+vec.z^2)^0.5 + local damage = (80*0.5^dist)*2 + obj:punch(obj, 1.0, { + full_punch_interval=1.0, + damage_groups={fleshy=damage}, + }, vec) + end + end + + minetest.add_particlespawner( + 4, --amount + 0.1, --time + {x=pos.x-3, y=pos.y-3, z=pos.z-3}, --minpos + {x=pos.x+3, y=pos.y+3, z=pos.z+3}, --maxpos + {x=-0, y=-0, z=-0}, --minvel + {x=0, y=0, z=0}, --maxvel + {x=-0.0,y=0,z=-0.0}, --minacc + {x=0.1,y=-1,z=0.1}, --maxacc + 0.1, --minexptime + 1, --maxexptime + 300, --minsize + 350, --maxsize + false, --collisiondetection + "lightningbolt.png" --texture + ) + +-- end +-- end +-- end + end +}) +minetest.register_craftitem("classes:lightning_staff", { + description = "Staff of the Vengeful Skies", + inventory_image = "lightningstaff.png", + wield_scale = {x=2.5,y=5.5,z=1.5}, + stackable = false, + on_use = function (itemstack, placer, pointed_thing) + local dir = placer:get_look_dir(); + local playerpos = placer:getpos(); + local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+2+dir.y,z=playerpos.z+0+dir.z}, "classes:lightning") + local vec = {x=dir.x*12,y=dir.y*12,z=dir.z*12} + obj:setvelocity(vec) + return itemstack + end, + light_source = 15, +}) +local addvectors = function (v1, v2) + return {x=v1.x+v2.x, y=v1.y+v2.y, z=v1.z+v2.z} +end +--...............................................................................................................................-- +--...............................................................................................................................-- +--...............................................................................................................................-- +--...............................................................................................................................-- +--...............................................................................................................................-- +--...............................................................................................................................-- +--...............................................................................................................................-- +classes = {} + +minetest.register_privilege("GAMEwizard", { + description = "Wizards, masters of the arcane arts, are a formidible class, and extremly powerful, however they pay for that by not haveing any special heavy armor", + give_to_singleplayer = false, +}) + +minetest.register_privilege("GAMEmale", { + description = "A male player", + give_to_singleplayer = false, +}) +minetest.register_privilege("GAMEfemale", { + description = "A female player", + give_to_singleplayer = false, +}) +minetest.register_privilege("GAMEfighter", { + description = "useing their heavy arms and armor, this class dominates the frontline battlefield", + give_to_singleplayer = false, +}) +minetest.register_privilege("GAMEarcher", { + description = "masters of the bow, at higher levels can fire as many as 3 arrows at once!", + give_to_singleplayer = false, +}) +minetest.register_privilege("GAMEthief", { + description = "Thieves are not particularly strong, but instead rely on speed, stealth, and their resourcfulness", + give_to_singleplayer = false, +}) +--minetest.register_privilege("GAMEorc", { +-- description = "An orc player", +-- give_to_singleplayer = false, +--}) +--minetest.register_privilege("GAMEhobbit", { +-- description = "A hobbit player", +-- give_to_singleplayer = false, +--}) + +dofile(minetest.get_modpath("classes").."/change-privs.lua") +--dofile(minetest.get_modpath("classes").."/allies.lua") + +local race_chooser = "size[8,6]".. + "background[8,6;1,1;gui_formbg.png;true]".. + "tablecolumns[color;text]".. + "tableoptions[background=#00000000;highlight=#00000000;border=false]".. + "table[0,0;6,0.5;race_message;#A52A2A,Please select the race you wish to be:;1]".. + "image[0.25,1.4;0.75,0.75;wizard.png]".. + "button_exit[1,1.5;2,0.5;wizard;Wizard]".. + "image[4.75,1.4;0.75,0.75;archer.png]".. + "button_exit[5.5,1.5;2,0.5;archer;Archer]".. + "image[0.25,2.4;0.75,0.75;fighter.png]".. + "button_exit[1,2.5;2,0.5;fighter;Fighter]".. + "image[4.75,2.4;0.75,0.75;theif.png]".. + "button_exit[5.5,2.5;2,0.5;theif;Theif]".. +-- "image[0.25,3.4;0.75,0.75;hobbit.png]".. +-- "button_exit[1,3.5;2,0.5;hobbit;Hobbit]".. + "dropdown[5.5,3.4;2;gender;Male,Female;1]" + +local fly_stuff = "button[1,4.75;2,0.5;fast;Fast]" .. + "button[3,4.75;2,0.5;fly;Fly]" .. + "button[5,4.75;2,0.5;noclip;Noclip]" .. + "button[2.5,5.5;3,0.5;fast_fly_noclip;Fast, Fly & Noclip]" + +chance = 0 + +local function regen_chance() + chance = math.random(1, 6) +end + +local function give_stuff_fighter(player) + regen_chance() + if chance >= 1 then + player:get_inventory():add_item('main', 'classes:staff_wood') + end +end +local function give_stuff_archer(player) + regen_chance() + if chance >= 1 then + player:get_inventory():add_item('main', 'classes:staff_wood') + end +end + +local function give_stuff_man(player) + regen_chance() + if chance >= 1 then + player:get_inventory():add_item('main', 'classes:staff_wood') + end +end + +local function give_stuff_thief(player) + regen_chance() + if chance >= 1 then + player:get_inventory():add_item('main', 'classes:staff_wood') + end +end + +--local function give_stuff_hobbit(player) +-- regen_chance() +-- if chance >= 1 then +-- player:get_inventory():add_item('main', 'default:pick_stone') +-- end +--end + +local function give_stuff_wizard(player) + regen_chance() + if chance >= 1 then + player:get_inventory():add_item('main', 'classes:staff_wood') + end +end + +minetest.register_on_newplayer(function(player) + local name = player:get_player_name() + local privs = minetest.get_player_privs(name) + if minetest.get_player_privs(name).GAMEwizard then + give_stuff_wizard(player) + end +end) + +--minetest.register_on_joinplayer(function(player) +-- local name = player:get_player_name() +-- local privs = minetest.get_player_privs(name) +-- if minetest.get_player_privs(name).GAMEwizard then +-- multiskin[name].skin = "wizard_skin.png" +-- elseif minetest.get_player_privs(name).GAMEmale then +-- if minetest.get_player_privs(name).GAMEfighter then +-- multiskin[name].skin = "fighter_skin.png" +-- elseif minetest.get_player_privs(name).GAMEarcher then +-- multiskin[name].skin = "archer_skin.png" +-- elseif minetest.get_player_privs(name).GAMEtheif then +-- multiskin[name].skin = "theif_skin.png" +-- elseif minetest.get_player_privs(name).GAMEorc then +-- multiskin[name].skin = "orc_skin.png" +-- elseif minetest.get_player_privs(name).GAMEhobbit then +-- multiskin[name].skin = "hobbit_skin.png" +-- end +-- elseif minetest.get_player_privs(name).GAMEfemale then +-- if minetest.get_player_privs(name).GAMEfighter then +-- multiskin[name].skin = "fighter_skinf.png" +-- elseif minetest.get_player_privs(name).GAMEarcher then +-- multiskin[name].skin = "archer_skinf.png" +-- elseif minetest.get_player_privs(name).GAMEtheif then +-- multiskin[name].skin = "theif_skinf.png" +-- elseif minetest.get_player_privs(name).GAMEwizard then +-- multiskin[name].skin = "wizard_skinf.png" +-- elseif minetest.get_player_privs(name).GAMEhobbit then +-- multiskin[name].skin = "hobbit_skinf.png" +-- end +-- else +-- minetest.after(1, function() +-- if minetest.is_singleplayer() then +-- minetest.show_formspec(name, "race_selector", race_chooser .. fly_stuff) +-- else +-- minetest.show_formspec(name, "race_selector", race_chooser) +-- end +-- end) +-- end +--end) + +local function player_race_stuff(class, text, mf, func, name, privs, player) + minetest.chat_send_player(name, "You are now a member of the class " .. text ..", go forth into the world.") + privs["GAME" .. class] = true + privs["GAME" .. mf] = true + minetest.set_player_privs(name, privs) + func(player) +-- if mf == "male" or race == "fighter" or race == "wizard" then +-- default.player_set_textures(player, {class .. "_skin.png", "lottarmor_trans.png", "lottarmor_trans.png", "lottarmor_trans.png"}) +-- multiskin[name].skin = class .. "_skin.png" +-- elseif mf == "female" then +-- default.player_set_textures(player, {class .. "_skinf.png", "lottarmor_trans.png", "lottarmor_trans.png", "lottarmor_trans.png"}) +-- multiskin[name].skin = class .. "_skinf.png" +-- end +-- minetest.log("action", name.. " chose to be a " .. class) +end + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "race_selector" then return end + local name = player:get_player_name() + local privs = minetest.get_player_privs(name) + if fields.gender == "Male" then + if fields.fighter then + player_race_stuff("fighter", "fighters", "male", give_stuff_fighter, name, privs, player) + elseif fields.archer then + player_race_stuff("archer", "archers", "male", give_stuff_archer, name, privs, player) + elseif fields.wizard then + player_race_stuff("wizard", "wizards", "male", give_stuff_wizard, name, privs, player) + elseif fields.theif then + player_race_stuff("thief", "thieves", "male", give_stuff_thief, name, privs, player) + elseif fields.hobbit then + player_race_stuff("hobbit", "hobbits", "male", give_stuff_hobbit, name, privs, player) + end + elseif fields.gender == "Female" then + if fields.fighter then + player_race_stuff("fighter", "fighters", "female", give_stuff_fighter, name, privs, player) + elseif fields.archer then + player_race_stuff("archer", "archers", "female", give_stuff_archer, name, privs, player) + elseif fields.wizard then + player_race_stuff("wizard", "wizards", "female", give_stuff_wizard, name, privs, player) + elseif fields.theif then + player_race_stuff("thief", "thieves", "female", give_stuff_thief, name, privs, player) + elseif fields.hobbit then + player_race_stuff("hobbit", "hobbits", "female", give_stuff_hobbit, name, privs, player) + end + end +-- if fields.fast then +-- privs.fast = true +-- minetest.set_player_privs(name, privs) +-- return +-- elseif fields.fly then +-- privs.fly = true +-- minetest.set_player_privs(name, privs) +-- return +-- elseif fields.noclip then +-- privs.noclip = true +-- minetest.set_player_privs(name, privs) +-- return +-- elseif fields.fast_fly_noclip then +-- privs.fly, privs.fast, privs.noclip = true, true, true +-- minetest.set_player_privs(name, privs) +-- return +-- end +end) + +minetest.register_chatcommand("class", { + params = "", + description = "print out privileges of player", + func = function(name, param) + param = (param ~= "" and param or name) + if minetest.check_player_privs(param, {GAMEwizard = true}) then + return true, "Class of " .. param .. ": Wizard" + elseif minetest.check_player_privs(param, {GAMEfighter = true}) then + return true, "Class of " .. param .. ": Fighter" + elseif minetest.check_player_privs(param, {GAMEarcher = true}) then + return true, "Class of " .. param .. ": Archer" + elseif minetest.check_player_privs(param, {GAMEtheif = true}) then + return true, "Class of " .. param .. ": Thief" +-- elseif minetest.check_player_privs(param, {GAMEorc = true}) then +-- return true, "Race of " .. param .. ": Orc" +-- elseif minetest.check_player_privs(param, {GAMEhobbit = true}) then +-- return true, "Race of " .. param .. ": Hobbit" + elseif minetest.check_player_privs(param, {shout = true}) ~= nil then + if param == name then + if minetest.is_singleplayer() then + minetest.show_formspec(name, "race_selector", race_chooser .. fly_stuff) + else + minetest.show_formspec(name, "race_selector", race_chooser) + end + else + return true, param .. " has not chosen a class!" + end + else + return true, param .. " does not exist!" + end + end, +}) + + + + +