Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clan prefix removing/adding instantly #1398

Merged
merged 16 commits into from
May 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 37 additions & 4 deletions mods/lord/Player/clans/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,35 @@ clans.err = {
---@type integer readonly
clans.max_players_in_clan = tonumber(minetest.settings:get("clans.max_players_in_clan")) or 10

---@param player Player|string|nil @Player or player name
---@param clan_title string
---@return boolean @completed or not
local function add_clan_prefix_to_player_name(player, clan_title)
if type(player) == "string" then
player = minetest.get_player_by_name(player)
end
if player then
player:set_nametag_attributes({
text = player:get_player_name() .. " " .. minetest.colorize("lime", "["..clan_title.."]"),
})
return true
end
return false
end

---@param player Player|string|nil @Player or player name
---@return boolean @completed or not
local function reset_player_name(player)
if type(player) == "string" then
player = minetest.get_player_by_name(player)
end
if player then
player:set_nametag_attributes({ text = player:get_player_name(), })
return true
end
return false
end

--- @param name string
--- @param title string
--- @param members string[]
Expand All @@ -54,15 +83,18 @@ function clans.create_clan(name, title, members)
end

clan_storage.set({ name = name, title = title, players = members or {} })
for _, m in ipairs(members) do add_clan_prefix_to_player_name(m, title) end
return true, nil
end

--- @param name string
--- @return boolean,string|nil
function clans.remove_clan(name)
if clans.get_by_name(name) == nil then return false, clans.err[3] end
local clan = clans.get_by_name(name)
if clan == nil then return false, clans.err[3] end

clan_storage.delete(name)
for _, p in ipairs(clan.players) do reset_player_name(p) end
return true, nil
end

Expand All @@ -78,6 +110,7 @@ function clans.add_player_to_clan(clan_name, player_name)

table.insert(clan.players, player_name)
clan_storage.set(clan)
add_clan_prefix_to_player_name(player_name, clan.title)
return true, nil
end

Expand All @@ -99,6 +132,8 @@ function clans.remove_player_from_clan(clan_name, player_name)
clan.players = updated_members
clan_storage.set(clan)

reset_player_name(player_name)

return true, nil
end

Expand Down Expand Up @@ -171,9 +206,7 @@ minetest.register_on_joinplayer(function(player, _)
if not clan then return end

clan_is_online_cache[clan.name] = true
player:set_nametag_attributes({
text = player:get_player_name() .. " " .. minetest.colorize("#3d7", "["..clan.title.."]"),
})
add_clan_prefix_to_player_name(player, clan.title)
end)

minetest.register_on_leaveplayer(function(player, _)
Expand Down
1 change: 1 addition & 0 deletions mods/lord/Player/clans/src/storage.lua
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ local cache = storage2cache()
--- @param name string
--- @return clans.Clan|nil
function clan_storage.get(name)
if cache[name] == nil then return nil end
return table.copy(cache[name])
end

Expand Down
6 changes: 3 additions & 3 deletions util/mt-ide-helper/minetest_types.lua
Original file line number Diff line number Diff line change
Expand Up @@ -608,13 +608,13 @@ function minetest.register_on_prejoinplayer(callback) end
--- * `last_login`: The timestamp of the previous login, or nil if player is new
---
--- [View in lua_api.txt](https://github.com/minetest/minetest/blob/5.4.1/doc/lua_api.txt#L4638-L4640)
--- @param callback fun(player:ObjectRef|Player, last_login)
--- @param callback fun(player:Player, last_login:number)
function minetest.register_on_joinplayer(callback) end
--- * Called when a player leaves the game
--- * `timed_out`: True for timeout, false for other reasons.
---
--- [View in lua_api.txt](https://github.com/minetest/minetest/blob/5.4.1/doc/lua_api.txt#L4641-L4643)
--- @param callback fun(player:ObjectRef|Player, timed_out)
--- @param callback fun(player:Player, timed_out:boolean)
function minetest.register_on_leaveplayer(callback) end
--- * Called when a client attempts to log into an account.
--- * `name`: The name of the account being authenticated.
Expand Down Expand Up @@ -1007,7 +1007,7 @@ function minetest.add_item(pos, item) end
---
--- [View in lua_api.txt](https://github.com/minetest/minetest/blob/5.4.1/doc/lua_api.txt#L4913-L4913)
--- @param name string
--- @return Player
--- @return Player|nil
function minetest.get_player_by_name(name) end
--- Returns a list of
--- ObjectRefs.
Expand Down
Loading