fast potion
This commit is contained in:
commit
a8c1435e31
6
README.md
Normal file
6
README.md
Normal file
@ -0,0 +1,6 @@
|
||||
# Stimulators mod
|
||||
|
||||
Adds a potion that gives fast privilege
|
||||
|
||||
## Craft
|
||||
![Craft](craft.png)
|
250
init.lua
Executable file
250
init.lua
Executable file
@ -0,0 +1,250 @@
|
||||
|
||||
--[[
|
||||
|
||||
Copyright 2024 Andrey Stepanov <standmit@yandex.ru>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject
|
||||
to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
||||
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||||
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
]]--
|
||||
|
||||
local S = minetest.get_translator("stimulators")
|
||||
|
||||
local fast_secs = minetest.settings:get("stimulators.fastpotion_duration") or (2 * 60)
|
||||
local timer_check = 5 -- seconds per check
|
||||
|
||||
-- get player timer
|
||||
local function get_timer(user)
|
||||
if not user then
|
||||
return
|
||||
end
|
||||
|
||||
local meta = user:get_meta()
|
||||
if not meta then
|
||||
return ""
|
||||
end
|
||||
|
||||
return meta:get_string("stimulators:fast_timer") or ""
|
||||
end
|
||||
|
||||
-- do we have fast privs
|
||||
local function has_fast(name)
|
||||
return minetest.get_player_privs(name).fast
|
||||
end
|
||||
|
||||
-- set player timer
|
||||
local function set_timer(user, timer)
|
||||
local meta = user:get_meta()
|
||||
if not meta then
|
||||
return
|
||||
end
|
||||
|
||||
meta:set_string("stimulators:fast_timer", timer)
|
||||
end
|
||||
|
||||
-- give or revoke fast priv
|
||||
local function set_fast(user, set)
|
||||
local name = user and user:get_player_name()
|
||||
if not name then
|
||||
return
|
||||
end
|
||||
|
||||
local privs = minetest.get_player_privs(name)
|
||||
privs.fast = set
|
||||
minetest.set_player_privs(name, privs)
|
||||
|
||||
-- when fast removed set timer to temp position
|
||||
if set ~= true then
|
||||
set_timer(user, "-99")
|
||||
end
|
||||
end
|
||||
|
||||
-- after function
|
||||
local function stimulators_set_fast(user)
|
||||
local name = user and user:get_player_name()
|
||||
if not name then
|
||||
return
|
||||
end
|
||||
|
||||
local timer = tonumber(get_timer(user)) or 0
|
||||
|
||||
-- if timer ran out then remove 'fast' privelage
|
||||
if timer <= 0 and timer ~= -99 then
|
||||
set_fast(user, nil)
|
||||
return
|
||||
end
|
||||
|
||||
local privs = minetest.get_player_privs(name)
|
||||
|
||||
-- have we already applied 'fast' privelage?
|
||||
if not privs.fast then
|
||||
set_fast(user, true)
|
||||
end
|
||||
|
||||
-- handle timer
|
||||
timer = timer - timer_check
|
||||
|
||||
-- show expiration message and play sound
|
||||
if timer <= 10 then
|
||||
minetest.chat_send_player(
|
||||
name,
|
||||
minetest.get_color_escape_sequence("#ff5500")
|
||||
.. S("Fast timer about to expire!")
|
||||
)
|
||||
minetest.sound_play(
|
||||
"default_dig_dig_immediate",
|
||||
{to_player = name, gain = 1.0},
|
||||
true
|
||||
)
|
||||
end
|
||||
|
||||
set_timer(user, timer) -- set update timer
|
||||
|
||||
-- restart checks
|
||||
minetest.after(
|
||||
timer_check,
|
||||
function()
|
||||
stimulators_set_fast(user)
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
-- on join /leave
|
||||
minetest.register_on_joinplayer(
|
||||
function(player)
|
||||
-- wait 2 seconds before doing fast checks on player
|
||||
minetest.after(
|
||||
2.0,
|
||||
function(player)
|
||||
-- get player name and timer
|
||||
local name = player and player:get_player_name()
|
||||
if not name then
|
||||
return
|
||||
end
|
||||
|
||||
local timer = get_timer(player)
|
||||
|
||||
-- if timer is blank and player can already fast then default and return
|
||||
if timer == "" and has_fast(name) then
|
||||
set_timer(player, "-99")
|
||||
return
|
||||
end
|
||||
|
||||
timer = tonumber(timer) or 0
|
||||
|
||||
-- if timer is set to default then return
|
||||
if timer == -99 then
|
||||
return
|
||||
end
|
||||
|
||||
-- if we got this far and player is fast then start contdown check
|
||||
if has_fast(name) then
|
||||
minetest.after(
|
||||
timer_check,
|
||||
function()
|
||||
stimulators_set_fast(player)
|
||||
end
|
||||
)
|
||||
end
|
||||
end,
|
||||
player
|
||||
)
|
||||
end
|
||||
)
|
||||
|
||||
-- portion item
|
||||
minetest.register_node(
|
||||
"stimulators:fast_potion",
|
||||
{
|
||||
description = S("Fast Potion"),
|
||||
drawtype = "plantlike",
|
||||
tiles = {"stimulators_fast_potion.png"},
|
||||
inventory_image = "stimulators_fast_potion.png",
|
||||
wield_image = "stimulators_fast_potion.png",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
walkable = false,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.2, -0.37, -0.2, 0.2, 0.31, 0.2}
|
||||
},
|
||||
groupd = {dig_immediate = 3},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
if user.is_fake_player then
|
||||
return
|
||||
end
|
||||
|
||||
-- get info
|
||||
local name = user:get_player_name()
|
||||
local privs = minetest.get_player_privs(name)
|
||||
local timer = get_timer(user)
|
||||
|
||||
if privs.fast then
|
||||
local msg = timer
|
||||
if timer == "" or timer == "-99" then
|
||||
msg = S("unlimited")
|
||||
end
|
||||
|
||||
minetest.chat_send_player(
|
||||
name,
|
||||
minetest.get_color_escape_sequence("#ffff00")
|
||||
.. S("Fast already granted, @1 seconds left!", msg)
|
||||
)
|
||||
return
|
||||
end
|
||||
|
||||
set_timer(user, fast_secs) -- set fast timer
|
||||
|
||||
-- show time remaining
|
||||
minetest.chat_send_player(
|
||||
name,
|
||||
minetest.get_color_escape_sequence("#1eff00")
|
||||
.. S("Fast granted, you gave @1 seconds!", fast_secs)
|
||||
)
|
||||
|
||||
stimulators_set_fast(user) -- start check
|
||||
|
||||
itemstack:take_item() -- take item
|
||||
|
||||
--return empty bottle
|
||||
local inv = user:get_inventory()
|
||||
if inv:room_for_item("main", {name = "vessels:glass_bottle"}) then
|
||||
user:get_inventory():add_item("main", "vessels:glass_bottle")
|
||||
else
|
||||
minetest.add_item(user:get_pos(), {name = "vessels:glass_bottle"})
|
||||
end
|
||||
|
||||
return itemstack
|
||||
end
|
||||
}
|
||||
)
|
||||
|
||||
-- recipe
|
||||
minetest.register_craft(
|
||||
{
|
||||
output = "stimulators:fast_potion 3",
|
||||
recipe = {
|
||||
{"ethereal:etherium_dust", "farming:chili_powder", "ethereal:etherium_dust"},
|
||||
{"farming:sugar", "farming:salt_crystal", "farming:sugar" },
|
||||
{"ethereal:etherium_dust", "wine:bottle_tequila", "ethereal:etherium_dust"}
|
||||
}
|
||||
}
|
||||
)
|
7
locale/stimulators.ru.tr
Normal file
7
locale/stimulators.ru.tr
Normal file
@ -0,0 +1,7 @@
|
||||
# textdomain: stimulators
|
||||
|
||||
Fast Potion=Зелье ускорения
|
||||
Fast timer about to expire!=Таймер ускорения скоро истечёт!
|
||||
unlimited=неограниченно
|
||||
Fast already granted, @1 seconds left!=Ускорение уже выдано, @1 секнуд осталось!
|
||||
Fast granted, you gave @1 seconds!=Ускорение выдано, у вас @1 секунд!
|
3
mod.conf
Normal file
3
mod.conf
Normal file
@ -0,0 +1,3 @@
|
||||
name = stimulators
|
||||
description = Cool potions
|
||||
depends = vessels,ethereal,farming,wine
|
BIN
textures/ethereal_flight_potion.png
Normal file
BIN
textures/ethereal_flight_potion.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 170 B |
BIN
textures/stimulators_fast_potion.png
Normal file
BIN
textures/stimulators_fast_potion.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
Loading…
Reference in New Issue
Block a user