commit 564b79823ca6ee01e5532b0bf716c06a495795f3 Author: sys4-fr Date: Thu Sep 6 20:44:17 2018 +0200 Remplissage du dépôt. diff --git a/depends.txt b/depends.txt new file mode 100755 index 0000000..48fe1d6 --- /dev/null +++ b/depends.txt @@ -0,0 +1,4 @@ +mana +default +mobs +farming \ No newline at end of file diff --git a/init.lua b/init.lua new file mode 100755 index 0000000..58a3f65 --- /dev/null +++ b/init.lua @@ -0,0 +1,124 @@ +local broomstick_time = 120 -- Seconds +local broomstick_mana = 190 +local broomstick_actual_users = {} +local had_fly_privilege = {} +local privs = {} + +-- broomstick file +users_file = minetest.get_worldpath() .. "/broomstick_users.txt" +--load broomstick file +local file = io.open(users_file, "r") +if file then + had_fly_privilege = minetest.deserialize(file:read("*all")) + file:close() + file = nil + if not had_fly_privilege or type(had_fly_privilege) ~= "table" then + had_fly_privilege = {} + end +else + minetest.log("error", "[broomstick] Can not open broomstick_users.txt file !") +end + + +-- funtion save broomstick file +local function save() + local input = io.open(users_file, "w") + if input then + input:write(minetest.serialize(had_fly_privilege)) + input:close() + else + minetest.log("error","[broomstick] Open failed (mode:w) of " .. users_file) + end +end + +-- on join_player remove priv fly +minetest.register_on_joinplayer(function(player) + local playername = player:get_player_name() + if had_fly_privilege[playername] ~= nil then + privs = minetest.get_player_privs(playername) + privs.fly = nil + minetest.set_player_privs(playername, privs) + had_fly_privilege[playername] = nil + save() + end +end) + +-- Broomstick timer +local function broomstick_end(playername) + minetest.chat_send_player(playername, "WARNING ! You'll fall in 10 seconds !") + minetest.after(10, function(playername) + -- Send a message... + minetest.chat_send_player(playername, "End of broomstick. I hope you're not falling down...") + -- Set player privs... + privs = minetest.get_player_privs(playername) + privs["fly"] = nil + minetest.set_player_privs(playername, privs) + -- Remove the player in the list. + for i = 1, #broomstick_actual_users do + if broomstick_actual_users[i] == playername then + table.remove(broomstick_actual_users, i) + end + end + -- Rewrite the broomstick_users.txt file. + had_fly_privilege[playername] = nil + save() + end, playername) +end + +-- Register broomstick +minetest.register_craftitem("broomstick:broomstick", { + description = "Broomstick", + inventory_image = "broomstick.png", + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + local playername = user:get_player_name() + if mana.get(playername) >= broomstick_mana then + local has_already_a_broomstick = false + for i = 1, #broomstick_actual_users do + if broomstick_actual_users[i] == playername then + has_already_a_broomstick = true + end + end + if not has_already_a_broomstick then + privs = minetest.get_player_privs(playername) + -- Set player privs... + if not privs.fly == true then + -- Rewrite the broomstick_users.txt file. + had_fly_privilege[playername] = true + save() + privs.fly = true + minetest.set_player_privs(playername, privs) + else + minetest.chat_send_player(playername, "You known you can fly by yourself, don't you?") + return + end + -- Send a message... + minetest.chat_send_player(playername, "You can now fly during " .. tostring(broomstick_time) .. " seconds.") + minetest.log("action", "Player " .. playername .. " has use a broomstick.") + -- Subtract mana... + mana.subtract(playername, broomstick_mana) + -- Insert player in the list. + table.insert(broomstick_actual_users, playername) + -- And add the function in queue + minetest.after(broomstick_time-10, broomstick_end, playername) + -- Remove broomstick. + return ItemStack("") + else + minetest.chat_send_player(playername, "You already have a broomstick ! Please wait until the end of your actual broomstick.") + end + else + minetest.chat_send_player(playername, "You must have " .. tostring(broomstick_mana) .. " of mana to use a broomstick !") + end + end, +}) + +-- Craft +minetest.register_craft({ + output = "broomstick:broomstick", + recipe = {{"","","farming:string",}, + {"default:stick","default:stick","mobs:minotaur_lots_of_fur",}, + {"","","farming:string",},}, +}) + + +minetest.log("info", "[OK] broomstick") diff --git a/textures/broomstick.png b/textures/broomstick.png new file mode 100755 index 0000000..c693c66 Binary files /dev/null and b/textures/broomstick.png differ