From 564b79823ca6ee01e5532b0bf716c06a495795f3 Mon Sep 17 00:00:00 2001 From: sys4-fr Date: Thu, 6 Sep 2018 20:44:17 +0200 Subject: [PATCH] =?UTF-8?q?Remplissage=20du=20d=C3=A9p=C3=B4t.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- depends.txt | 4 ++ init.lua | 124 ++++++++++++++++++++++++++++++++++++++++ textures/broomstick.png | Bin 0 -> 1021 bytes 3 files changed, 128 insertions(+) create mode 100755 depends.txt create mode 100755 init.lua create mode 100755 textures/broomstick.png 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 0000000000000000000000000000000000000000..c693c664e833ad9d573f9c2e5619bb614f24a6a7 GIT binary patch literal 1021 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0U{Ve632_B-|Nq#tAW7i! zwm=fX1~R@s&pEe~{lzu+w^xdR+z(INfFuO{eBA_L0M+bice=K!2*|j;x(Fx;)P8+U z@y)d*FHcpRo*fHOc6nL$mHlGx9#!pVvIeR=IWr0<4kWLwD!jZbXJ?Dun+MfE@tw^! zo2m?ejIDKMKoW>HR~xM@(cDm>`~0fc&o|9qUv__dkhHo`WmSRlmshji-iiM4vi$X} zz)ueofav?H=C4mP-aklLnko7AZUB(+^=ZOG&qKnhSm!yj=Ne7Y=OEaaGX2~qgmRpuByDVF7dA`(&T*Vdn$}5Ug zR^}LSgx#p*yGtt~fLSE0YY(r81a;f5-s?d_VEH+w!f5%%b0 z__K@A&#(EtxE%Z9X5!1+F)weYy}lFk`cA^@J1IbyzrC0K_I~=iyJ7F{MZdcr`|f`B zyN9*!AEvy2nEn1y-G>KJK(Bpx5dYyp>W4>JA0Fj?cwG45as9`~g`XZJetKH^>1pMs zr}dwncYc1H_2p^mm#5iZo@IW0n)U5@`S<6U-(MB|c#-+zW#Nxkr9WPm{d}GO^L6>} zw|UAnGiL!4N=!+RUoZnBGczk2I|nBxAD@7rptyvzf})Cwnwpx1mbSLOzJYZ z+FuubAKJfxSt~Roin&*+-K$t|!cFr+ix;dSVs~};c62s+oHw3&G)-Ahz*9EsbwJ(< zMwgyC^={{N4r*UB9&WrYd1A@ITvH1%29bR-VWlpH4q{RLH?p`z>WYpC3M(W#rPx@% z;}f~aE5kRNNz(Y%iN%MwPF(rDs`AZtLB@%x{Z3|vwX%=bGO<|2z6~}$?kZ|2=qDtg zGH*`w{e3qz*Prp{FJ@7^Wv|}7{rT^i?MqWN3l&~u|9kT@%iLOdwSgyh%Zs|awR`r& z>MapH?&Wad_}^o<9)G&)9JfS`<9D2G?fvLmJ_U@Eu6H*tU;M*C!AN7KuE#gVt`B#P iC@e7iY~Hs2C+ml6KCa9bmde2BVeoYIb6Mw<&;$Sjx*a9} literal 0 HcmV?d00001