Translatable effect names and cleanup

-added translatable effect names to the API
-made /effect utilize those descriptions
-cleaned up variables/constants to go with further API changes
This commit is contained in:
the-real-herowl 2023-10-27 05:02:43 +02:00
parent d85e582e8c
commit f1e9c3b563
3 changed files with 46 additions and 30 deletions

View file

@ -24,9 +24,8 @@ minetest.register_chatcommand("effect",{
if not P[1] then
return false, S("Missing effect parameter!")
elseif P[1] == "list" then
local regs = mcl_potions.get_registered_effects()
local effects = "heal"
for name, _ in pairs(regs) do
for name, _ in pairs(mcl_potions.registered_effects) do
effects = effects .. ", " .. name
end
return true, effects
@ -57,20 +56,21 @@ minetest.register_chatcommand("effect",{
P[3] = 1
end
if mcl_potions.is_effect_registered(P[1]) then
local def = mcl_potions.registered_effects[P[1]]
if def then
if P[3] == "F" then
local given = mcl_potions.give_effect(P[1], minetest.get_player_by_name(name), tonumber(P[4]), tonumber(P[2]))
if given then
return true, S("@1 effect given to player @2 for @3 seconds with factor of @4.", P[1], name, P[2], P[4])
return true, S("@1 effect given to player @2 for @3 seconds with factor of @4.", def.description, name, P[2], P[4])
else
return false, S("Giving effect @1 to player @2 failed.", P[1], name)
return false, S("Giving effect @1 to player @2 failed.", def.description, name)
end
else
local given = mcl_potions.give_effect_by_level(P[1], minetest.get_player_by_name(name), tonumber(P[3]), tonumber(P[2]))
if given then
return true, S("@1 effect on level @2 given to player @3 for @4 seconds.", P[1], P[3], name, P[2])
return true, S("@1 effect on level @2 given to player @3 for @4 seconds.", def.description, P[3], name, P[2])
else
return false, S("Giving effect @1 to player @2 failed.", P[1], name)
return false, S("Giving effect @1 to player @2 failed.", def.description, name)
end
end
else

View file

@ -1,5 +1,8 @@
local S = minetest.get_translator(minetest.get_current_modname())
local EF = {}
local registered_effects = {}
mcl_potions.registered_effects = {}
local registered_effects = mcl_potions.registered_effects -- shorthand ref
local EFFECT_TYPES = 0
minetest.register_on_mods_loaded(function()
@ -8,7 +11,6 @@ minetest.register_on_mods_loaded(function()
end
end)
-- ██████╗░███████╗░██████╗░██╗░██████╗████████╗███████╗██████╗
-- ██╔══██╗██╔════╝██╔════╝░██║██╔════╝╚══██╔══╝██╔════╝██╔══██╗
-- ██████╔╝█████╗░░██║░░██╗░██║╚█████╗░░░░██║░░░█████╗░░██████╔╝
@ -51,7 +53,9 @@ end
-- API - registers an effect
-- required parameters in def:
-- name - string - effect name in code
-- description - translated string - actual effect name in game
-- optional parameters in def:
-- get_tt - function(factor) - returns tooltip description text for use with potions
-- icon - string - file name of the effect icon in HUD - defaults to one based on name
-- res_condition - function(object) - returning true if target is to be resistant to the effect
-- on_start - function(object, factor) - called when dealing the effect
@ -70,25 +74,33 @@ end
-- modifier_priority - integer - priority passed when registering damage_modifier - defaults to -50
function mcl_potions.register_effect(def)
local modname = minetest.get_current_modname()
if def.name == nil then
local name = def.name
if name == nil then
error("Unable to register effect: name is nil")
end
if def.name == "list" then
if type(name) ~= "string" then
error("Unable to register effect: name is not a string")
end
if name == "list" then
error("Unable to register effect: list is a reserved word")
end
if def.name == "heal" then
if name == "heal" then
error("Unable to register effect: heal is a reserved word")
end
if registered_effects[name] then
error("Effect named "..name.." already registered!")
end
local name = def.name
if not def.description or type(def.description) ~= "string" then
error("Unable to register effect: description is not a string")
end
local pdef = {}
pdef.description = def.description
if not def.icon then
pdef.icon = modname.."_effect_"..name..".png"
else
pdef.icon = def.icon
end
pdef.get_tt = def.get_tt
pdef.res_condition = def.res_condition
pdef.on_start = def.on_start
pdef.on_load = def.on_load
@ -134,20 +146,9 @@ function mcl_potions.register_effect(def)
EF[name] = {}
end
function mcl_potions.get_registered_effects()
return table.copy(registered_effects)
end
function mcl_potions.is_effect_registered(name)
if registered_effects[name] then
return true
else
return false
end
end
mcl_potions.register_effect({
name = "invisibility",
description = S("Invisiblity"),
on_start = function(object, factor)
mcl_potions.make_invisible(object, true)
end,
@ -163,6 +164,7 @@ mcl_potions.register_effect({
mcl_potions.register_effect({
name = "poison",
description = S("Poison"),
res_condition = function(object)
local entity = object:get_luaentity()
return (entity and (entity.harmed_by_heal or string.find(entity.name, "spider")))
@ -181,6 +183,7 @@ mcl_potions.register_effect({
mcl_potions.register_effect({
name = "regeneration",
description = S("Regeneration"),
res_condition = function(object)
local entity = object:get_luaentity()
return (entity and entity.harmed_by_heal)
@ -202,6 +205,7 @@ mcl_potions.register_effect({
mcl_potions.register_effect({
name = "strength",
description = S("Strength"),
res_condition = function(object)
return (not object:is_player())
end,
@ -210,6 +214,7 @@ mcl_potions.register_effect({
mcl_potions.register_effect({
name = "weakness",
description = S("Weakness"),
res_condition = function(object)
return (not object:is_player())
end,
@ -218,6 +223,7 @@ mcl_potions.register_effect({
mcl_potions.register_effect({
name = "water_breathing",
description = S("Water Breathing"),
on_step = function(dtime, object, factor, duration)
if not object:is_player() then return end
if object:get_breath() then
@ -231,6 +237,7 @@ mcl_potions.register_effect({
mcl_potions.register_effect({
name = "leaping",
description = S("Leaping"),
res_condition = function(object)
return (not object:is_player())
end,
@ -248,6 +255,7 @@ mcl_potions.register_effect({
mcl_potions.register_effect({
name = "swiftness",
description = S("Swiftness"),
res_condition = function(object)
return (not object:is_player())
end,
@ -265,6 +273,7 @@ mcl_potions.register_effect({
mcl_potions.register_effect({
name = "slowness",
description = S("Slowness"),
res_condition = function(object)
return (not object:is_player())
end,
@ -282,6 +291,7 @@ mcl_potions.register_effect({
mcl_potions.register_effect({
name = "night_vision",
description = S("Night Vision"),
res_condition = function(object)
return (not object:is_player())
end,
@ -303,6 +313,7 @@ mcl_potions.register_effect({
mcl_potions.register_effect({
name = "fire_resistance",
description = S("Fire Resistance"),
res_condition = function(object)
return (not object:is_player())
end,
@ -313,11 +324,13 @@ mcl_potions.register_effect({
mcl_potions.register_effect({
name = "bad_omen",
description = S("Bad Omen"),
particle_color = "#0b6138",
})
mcl_potions.register_effect({
name = "withering",
description = S("Withering"),
res_condition = function(object)
local entity = object:get_luaentity()
return (entity and string.find(entity.name, "wither"))
@ -696,7 +709,7 @@ function mcl_potions.make_invisible(obj_ref, hide)
end
function mcl_potions._use_potion(item, obj, color)
function mcl_potions._use_potion(obj, color)
local d = 0.1
local pos = obj:get_pos()
minetest.sound_play("mcl_potions_drinking", {pos = pos, max_hear_distance = 6, gain = 1})

View file

@ -8,14 +8,17 @@ mcl_potions = {}
-- duration effects of glowstone are a time factor of 1/2
-- splash potion duration effects are reduced by a factor of 3/4
mcl_potions.II_FACTOR = 2
mcl_potions.POTENT_FACTOR = 2
mcl_potions.PLUS_FACTOR = 8/3
mcl_potions.INV_FACTOR = 0.50
mcl_potions.DURATION = 180
mcl_potions.DURATION_PLUS = mcl_potions.DURATION * mcl_potions.PLUS_FACTOR
mcl_potions.DURATION_2 = mcl_potions.DURATION / mcl_potions.II_FACTOR
mcl_potions.DURATION_INV = mcl_potions.DURATION * mcl_potions.INV_FACTOR
mcl_potions.II_FACTOR = mcl_potions.POTENT_FACTOR -- TODO remove at some point
mcl_potions.DURATION_PLUS = mcl_potions.DURATION * mcl_potions.PLUS_FACTOR -- TODO remove at some point
mcl_potions.DURATION_2 = mcl_potions.DURATION / mcl_potions.II_FACTOR -- TODO remove at some point
mcl_potions.INV_FACTOR = 0.50
mcl_potions.SPLASH_FACTOR = 0.75
mcl_potions.LINGERING_FACTOR = 0.25