Merge pull request #12 from shamoanjac/master

Verbosity
This commit is contained in:
agrecascino 2016-08-12 11:14:32 -04:00 committed by GitHub
commit 048e0a1d6d
2 changed files with 80 additions and 14 deletions

View File

@ -5,9 +5,9 @@
--
--! @file chatcommnd.lua
--! @brief factions chat interface
--! @copyright Sapier
--! @author Sapier
--! @date 2013-05-08
--! @copyright Sapier, agrecascino, shamoanjac
--! @author Sapier, agrecascino, shamoanjac
--! @date 2016-08-12
--
-- Contact sapier a t gmx net
-------------------------------------------------------------------------------
@ -240,7 +240,6 @@ factions.register_command("leave", {
description = "Leave your faction.",
on_success = function(player, faction, pos, chunkpos, args)
faction:remove_player(player)
--TODO: message?
return true
end
})
@ -254,7 +253,6 @@ factions.register_command("kick", {
if factions.players[victim.name] == faction.name
and victim.name ~= faction.leader then -- can't kick da king
faction:remove_player(player)
--TODO: message?
return true
else
send_error(player, "Cannot kick player "..victim.name)
@ -294,7 +292,6 @@ factions.register_command("join", {
if new_faction:can_join(player) then
if player_faction then -- leave old faction
player_faction:remove_player(player)
--TODO: message
end
new_faction:add_player(player)
else
@ -395,6 +392,7 @@ factions.register_command("who", {
minetest.chat_send_player(player, "There is nobody in this faction ("..faction.name..")")
return true
end
minetest.chat_send_player(player, "Players in faction "..faction.name..": ")
for player, rank in pairs(faction.players) do
minetest.chat_send_player(player, player.." ("..rank..")")
end
@ -542,6 +540,14 @@ factions.register_command("free", {
end
})
factionsm.register_command("chat", {
description = "Send a message to your faction's members"
on_success = function(player, faction, pos, chunkpos, args)
local msg = table.concat(args.other, " ")
faction:broadcast(msg, player)
end
})
-------------------------------------------------------------------------------
-- name: cmdhandler(playername,parameter)
--
@ -561,7 +567,7 @@ factions_chat.cmdhandler = function (playername,parameter)
if parameter == nil or
parameter == "" then
if player_faction then
minetest.chat_send_player(playername, player_faction.description)
minetest.chat_send_player(playername, "You are in faction "..player_faction..". Type /f help for a list of commands.")
else
minetest.chat_send_player(playername, "You are part of no faction")
end

View File

@ -4,10 +4,10 @@
-- License WTFPL
--
--! @file factions.lua
--! @brief factions core file containing datastorage
--! @copyright Sapier
--! @author Sapier
--! @date 2013-05-08
--! @brief factions core file
--! @copyright Sapier, agrecascino, shamoanjac
--! @author Sapier, agrecascino, shamoanjac
--! @date 2016-08-12
--
-- Contact sapier a t gmx net
-------------------------------------------------------------------------------
@ -32,6 +32,7 @@ factions.power_per_chunk = .5
---------------------
--! @brief returns whether a faction can be created or not (allows for implementation of blacklists and the like)
--! @param name String containing the faction's name
factions.can_create_faction = function(name)
if factions.factions[name] then
return false
@ -52,24 +53,53 @@ util = {
factions.Faction.__index = factions.Faction
-- Faction permissions:
--
-- disband: disband the faction
-- claim: (un)claim chunks
-- playerslist: invite/kick players and open/close the faction
-- build: dig and place nodes
-- description: set the faction's description
-- ranks: create and delete ranks
-- spawn: set the faction's spawn
-- banner: set the faction's banner
-- promote: set a player's rank
function factions.Faction:new(faction)
faction = {
--! @brief power of a faction (needed for chunk claiming)
power = 0.,
--! @brief maximum power of a faction
maxpower = 0.,
--! @brief list of player names
players = {},
--! @brief table of ranks/permissions
ranks = {["leader"] = {"disband", "claim", "playerslist", "build", "description", "ranks", "spawn", "banner", "promote"},
["moderator"] = {"claim", "playerslist", "build", "spawn"},
["member"] = {"build"}
},
--! @brief name of the leader
leader = nil,
--! @brief default joining rank for new members
default_rank = "member",
--! @brief default rank assigned to the leader
default_leader_rank = "leader",
--! @brief faction's description string
description = "Default faction description.",
--! @brief list of players currently invited (can join with /f join)
invited_players = {},
--! @brief table of claimed chunks (keys are chunkpos strings)
land = {},
--! @brief table of allies
allies = {},
--! @brief table of enemies
enemies = {},
--! @brief table of chunks/factions that are under attack
attacked_chunks = {},
--! @brief whether faction is closed or open (boolean)
join_free = false,
--! @brief banner texture string
banner = "bg_white.png",
} or faction
setmetatable(faction, self)
@ -77,6 +107,7 @@ function factions.Faction:new(faction)
end
--! @brief create a new empty faction
factions.new_faction = function(name)
local faction = factions.Faction:new(nil)
faction.name = name
@ -110,6 +141,8 @@ function factions.Faction.remove_player(self, player)
factions.save()
end
--! @param chunkpos position of the wanted chunk
--! @return whether this faction can claim a chunkpos
function factions.Faction.can_claim_chunk(self, chunkpos)
local fac = factions.chunks[chunkpos]
if fac then
@ -124,6 +157,7 @@ function factions.Faction.can_claim_chunk(self, chunkpos)
return true
end
--! @brief claim a chunk, update power and update global chunks table
function factions.Faction.claim_chunk(self, chunkpos)
-- check if claiming over other faction's territory
local otherfac = factions.chunks[chunkpos]
@ -137,6 +171,7 @@ function factions.Faction.claim_chunk(self, chunkpos)
self:on_claim_chunk(chunkpos)
factions.save()
end
--! @brief claim a chunk, update power and update global chunks table
function factions.Faction.unclaim_chunk(self, chunkpos)
factions.chunks[chunkpos] = nil
self.land[chunkpos] = nil
@ -144,6 +179,8 @@ function factions.Faction.unclaim_chunk(self, chunkpos)
self:on_unclaim_chunk(chunkpos)
factions.save()
end
--! @brief disband faction, updates global players and chunks table
function factions.Faction.disband(self)
for k, _ in pairs(self.players) do -- remove players affiliation
factions.players[k] = nil
@ -155,12 +192,17 @@ function factions.Faction.disband(self)
factions.factions[self.name] = nil
factions.save()
end
--! @brief change the faction leader
function factions.Faction.set_leader(self, player)
self.leader = player
self.players[player] = self.default_leader_rank
self:on_new_leader()
factions.save()
end
--! @brief check permissions for a given player
--! @return boolean indicating permissions. Players not in faction always receive false
function factions.Faction.has_permission(self, player, permission)
local p = self.players[player]
if not p then
@ -179,27 +221,32 @@ function factions.Faction.set_description(self, new)
self:on_change_description()
factions.save()
end
--! @brief places player in invite list
function factions.Faction.invite_player(self, player)
self.invited_players[player] = true
self:on_player_invited(player)
factions.save()
end
--! @brief removes player from invite list (can no longer join via /f join)
function factions.Faction.revoke_invite(self, player)
self.invited_players[player] = nil
self:on_revoke_invite(player)
factions.save()
end
function factions.Faction.is_invited(self, player)
return table.contains(self.invited_players, player)
end
--! @brief set faction openness
function factions.Faction.toggle_join_free(self, bool)
self.join_free = bool
self:on_toggle_join_free()
factions.save()
end
--! @return true if a player can use /f join, false otherwise
function factions.Faction.can_join(self, player)
return self.join_free or self.invited_players[player]
end
function factions.Faction.new_alliance(self, faction)
self.allies[faction] = true
self:on_new_alliance(faction)
@ -226,16 +273,26 @@ function factions.Faction.end_enemy(self, faction)
self:on_end_enemy(faction)
factions.save()
end
--! @brief faction's member will now spawn in a new place
function factions.Faction.set_spawn(self, pos)
self.spawn = {x=pos.x, y=pos.y, z=pos.z}
self:on_set_spawn(pos)
factions.save()
end
--! @brief create a new rank with permissions
--! @param rank the name of the new rank
--! @param rank a list with the permissions of the new rank
function factions.Faction.add_rank(self, rank, perms)
self.ranks[rank] = perms
self:on_add_rank(rank)
factions.save()
end
--! @brief delete a rank and replace it
--! @param rank the name of the rank to be deleted
--! @param newrank the rank given to players who were previously "rank"
function factions.Faction.delete_rank(self, rank, newrank)
for player, r in pairs(self.players) do
if r == rank then
@ -246,14 +303,17 @@ function factions.Faction.delete_rank(self, rank, newrank)
self:on_delete_rank(rank, newrank)
factions.save()
end
--! @param newbanner texture string of the new banner
function factions.Faction.set_banner(self, newbanner)
self.banner = newbanner
self:on_new_banner()
end
--! @brief set a player's rank
function factions.Faction.promote(self, member, rank)
self.players[member] = rank
self:on_promote(member)
end
--! @brief send a message to all members
function factions.Faction.broadcast(self, msg, sender)
local message = self.name.."> "..msg
if sender then