mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-27 11:35:22 +09:00
Working on ranks
This commit is contained in:
@@ -29,7 +29,7 @@ Color, Game, Event = require('/locale/StdLib/load'){'Color','Game','Event'}
|
||||
-- loads the ExpLib, functions are plased into the lua global
|
||||
local ExpLib = require 'ExpLib'
|
||||
ExpLib._unpack_to_G(ExpLib)
|
||||
--_G.discord_emit = nil -- un-comment this line if you are not using the json.data
|
||||
_G.discord_emit = nil -- un-comment this line if you are not using the json.data
|
||||
|
||||
-- loads the ExpCore files these are need in order to run the other addons
|
||||
Ranking, Server, Gui = require('/locale/ExpCore/load'){'Ranking','Server','Gui'}
|
||||
@@ -19,11 +19,10 @@ local StdExpCoreLib = {}
|
||||
|
||||
require '/commands'
|
||||
StdExpCoreLib.Server = require '/server'
|
||||
StdExpCoreLib.Ranking = {}
|
||||
StdExpCoreLib.Gui = {}
|
||||
--[[StdExpCoreLib.Ranking = require '/ranking'
|
||||
StdExpCoreLib.Ranking = require '/ranking'
|
||||
require '/ranks'
|
||||
StdExpCoreLib.Gui = require '/gui'
|
||||
--[[StdExpCoreLib.Gui = require '/gui'
|
||||
require '/GuiParts/inputs'
|
||||
require '/GuiParts/toolbar'
|
||||
require '/GuiParts/center'
|
||||
|
||||
175
locale/ExpCore/ranking.lua
Normal file
175
locale/ExpCore/ranking.lua
Normal file
@@ -0,0 +1,175 @@
|
||||
--[[
|
||||
Explosive Gaming
|
||||
|
||||
This file can be used with permission but this and the credit below must remain in the file.
|
||||
Contact a member of management on our discord to seek permission to use our code.
|
||||
Any changes that you may make to the code are yours but that does not make the script yours.
|
||||
Discord: https://discord.gg/r6dC2uK
|
||||
]]
|
||||
--Please Only Edit Below This Line-----------------------------------------------------------
|
||||
local Ranking = {}
|
||||
|
||||
-- this function is to avoid errors - see /ranks.lua
|
||||
function Ranking._form_links()
|
||||
return false
|
||||
end
|
||||
|
||||
-- this function is to avoid errors - see /ranks.lua
|
||||
function Ranking._ranks()
|
||||
return {}
|
||||
end
|
||||
|
||||
-- this function is to avoid errors - see /ranks.lua
|
||||
function Ranking._groups()
|
||||
return {}
|
||||
end
|
||||
|
||||
--- Returns a rank object given a player or rank name
|
||||
-- @usage Ranking.get_rank(game.player)
|
||||
-- Ranking.get_rank('admin')
|
||||
-- @param mixed player|player index|player name|rank name|rank|'server'|'root' what rank to get
|
||||
-- @treturn table the rank that is linked to mixed
|
||||
function Ranking.get_rank(mixed)
|
||||
local ranks = Ranking._ranks()
|
||||
return game.players[mixed] and ranks[game.players[mixed].permission_group.name]
|
||||
or mixed.index and game.players[mixed.index] and ranks[mixed.permission_group.name]
|
||||
or is_type(mixed,'table') and mixed.group and mixed
|
||||
or is_type(mixed,'string') and ranks[string.lower(mixed)] and ranks[string.lower(mixed)]
|
||||
or is_type(mixed,'string') and mixed == 'server' and ranks['root']
|
||||
or is_type(mixed,'string') and mixed == 'root' and ranks['root']
|
||||
or false
|
||||
-- ranks[mixed] and ranks[mixed] is to avoid returning nil given any string
|
||||
end
|
||||
|
||||
--- Returns the group object used to sort ranks given group name or see Ranking.get_rank
|
||||
-- @usage Ranking.get_group(game.player)
|
||||
-- Ranking.get_group('root')
|
||||
-- @param mixed player|player index|player name|rank name|rank|'server'|'root'|group name|group what group to get
|
||||
-- @treturn table the group that is linked to mixed
|
||||
function Ranking.get_group(mixed)
|
||||
local groups = Ranking._groups()
|
||||
local rank = Ranking.get_rank(mixed)
|
||||
return rank and rank.group
|
||||
or is_type(mixed,'table') and mixed.ranks and mixed
|
||||
or is_type(mixed,'string') and groups[mixed] and groups[mixed]
|
||||
or false
|
||||
end
|
||||
|
||||
--- Prints to all rank of greater/lower power of the rank given
|
||||
-- @usage Ranking.print('admin','We got a grifer')
|
||||
-- @param rank_base the rank that acts as the cut off point (rank is always included)
|
||||
-- @param rtn what do you want to return to the players
|
||||
-- @tparam bolean below if true rank below base are printed to
|
||||
function Ranking.print(rank_base,rtn,below)
|
||||
local rank_base = Ranking.get_rank(rank_base)
|
||||
local ranks = Ranking._ranks()
|
||||
if below then
|
||||
for power,rank in pairs(ranks) do
|
||||
if rank_base.power >= power then rank:print(rtn) end
|
||||
end
|
||||
else
|
||||
for power,rank in pairs(ranks) do
|
||||
if rank_base.power <= power then rank:print(rtn) end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- Gives a user a rank
|
||||
-- @usage Ranking.give_rank(1,'admin')
|
||||
-- @param player the player to give the rank to
|
||||
-- @param rank the rank to give to the player
|
||||
-- @param[opt='server'] by_player the player who is giving the rank
|
||||
-- @param[opt=game.tick] tick the tick that the rank is being given on
|
||||
function Ranking.give_rank(player,rank,by_player,tick)
|
||||
local tick = tick or game.tick
|
||||
local by_player_name = Game.get_player(by_player).name or game.player and game.player.name or 'server'
|
||||
local rank = Ranking.get_rank(rank)
|
||||
local player = Game.get_player(player)
|
||||
local old_rank = Ranking.get_rank(player)
|
||||
local message = 'ranking.rank-down'
|
||||
-- messaging
|
||||
if old_rank.name == rank.name then return end
|
||||
if rank.power < old_rank.power then message = 'ranking.rank-up' end
|
||||
game.print{message,player.name,rank.name,by_player_name}
|
||||
if not rank.group.name == 'User' then player.print{'ranking.rank-given',rank.name} end
|
||||
if not player.tag == old_rank.tag then player.print{'ranking.tag-reset'} end
|
||||
-- rank change
|
||||
player.permission_group = game.permissions.get_group(rank.name)
|
||||
player.tag = rank.tag
|
||||
if not old_rank.group.name == 'Jail' then Ranking._presets().old[player.index] = rank.name end
|
||||
if Ranking._presets()._event then
|
||||
script.raise_event(Ranking._presets()._event,{
|
||||
tick=tick,
|
||||
player=player,
|
||||
by_player_name=by_player_name,
|
||||
new_rank=rank,
|
||||
old_rank=old_rank
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
--- Revert the last change to a players rank
|
||||
-- @usage Ranking.revert(1)
|
||||
-- @param player the player to revert the rank of
|
||||
-- @param[opt=nil] by_player the player who is doing the revert
|
||||
function Ranking.revert(player,by_player)
|
||||
local player = Game.get_player(player)
|
||||
Ranking.give_rank(player,Ranking._presets().old[player.index],by_player)
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- this is the base rank object, do not store in global
|
||||
Ranking._rank = {}
|
||||
|
||||
--- Is this rank allowed to open this gui or use this command etc.
|
||||
-- @usage rank:allowed('server-interface')
|
||||
-- @tparam teh action to test for
|
||||
-- @treturn bolean is it allowed
|
||||
function Ranking._rank:allowed(action)
|
||||
return self.allowed[action] or self.is_root or false
|
||||
end
|
||||
|
||||
--- Get all the players in this rank
|
||||
-- @usage rank:get_players()
|
||||
-- @tparam bolean online get only online players
|
||||
-- @treturn table a table of all players in this rank
|
||||
function Ranking._rank:get_players(online)
|
||||
local _return = {}
|
||||
if online then
|
||||
for _,player in pairs(game.connected_players) do
|
||||
if Ranking.get_rank(player).name == self.name then table.insert(_return,player) end
|
||||
end
|
||||
else
|
||||
for _,player in pairs(game.players) do
|
||||
if Ranking.get_rank(player).name == self.name then table.insert(_return,player) end
|
||||
end
|
||||
end
|
||||
return _return
|
||||
end
|
||||
|
||||
--- Print a message to all players of this rank
|
||||
-- @usage rank:print('foo')
|
||||
-- @param rtn any value you want to return
|
||||
function Ranking._rank:print(rtn)
|
||||
if not Server or not Server._thread then
|
||||
for _,player in pairs(self:get_players()) do
|
||||
player_return(rtn,player)
|
||||
end
|
||||
else
|
||||
-- using threads to make less lag
|
||||
local thread = Server.new_thread{data={rank=self,rtn=rtn}}
|
||||
thread.on_event('resolve',function(thread)
|
||||
return self.data:get_players(true)
|
||||
end)
|
||||
thread.on_event('success',function(thread,players)
|
||||
for _,player in pairs(players) do
|
||||
player_return(rtn,player)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
-- this is the base rank object, do not store in global
|
||||
Ranking._group = {}
|
||||
|
||||
return Ranking
|
||||
11
locale/ExpCore/ranks.lua
Normal file
11
locale/ExpCore/ranks.lua
Normal file
@@ -0,0 +1,11 @@
|
||||
--[[
|
||||
Explosive Gaming
|
||||
|
||||
This file can be used with permission but this and the credit below must remain in the file.
|
||||
Contact a member of management on our discord to seek permission to use our code.
|
||||
Any changes that you may make to the code are yours but that does not make the script yours.
|
||||
Discord: https://discord.gg/r6dC2uK
|
||||
]]
|
||||
--Please Only Edit Below This Line-----------------------------------------------------------
|
||||
|
||||
local ranks = {}
|
||||
Reference in New Issue
Block a user