mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
279
gamemodes/ixhl2rp/plugins/groupmanager/libs/sh_group.lua
Normal file
279
gamemodes/ixhl2rp/plugins/groupmanager/libs/sh_group.lua
Normal file
@@ -0,0 +1,279 @@
|
||||
--[[
|
||||
| This file was obtained through the combined efforts
|
||||
| of Madbluntz & Plymouth Antiquarian Society.
|
||||
|
|
||||
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||||
| Maloy, DrPepper10 @ RIP, Atle!
|
||||
|
|
||||
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||||
--]]
|
||||
|
||||
|
||||
local PLUGIN = PLUGIN
|
||||
|
||||
GROUP_LEAD = 0
|
||||
GROUP_MOD = 1
|
||||
GROUP_MEMBER = 999
|
||||
|
||||
local GROUP = ix.meta.group or {}
|
||||
GROUP.id = GROUP.id or 0
|
||||
GROUP.name = GROUP.name or "Undefined"
|
||||
GROUP.color = GROUP.color or Color(math.random(1, 255), math.random(1, 255), math.random(1, 255))
|
||||
GROUP.hidden = GROUP.hidden == nil and true or GROUP.hidden
|
||||
GROUP.info = GROUP.info or ""
|
||||
GROUP.lore = GROUP.lore or ""
|
||||
GROUP.forum = GROUP.forum or ""
|
||||
GROUP.active = GROUP.active == nil and false or GROUP.active
|
||||
GROUP.roles = GROUP.roles or {}
|
||||
GROUP.members = GROUP.members or {}
|
||||
|
||||
function GROUP:GetID()
|
||||
return self.id
|
||||
end
|
||||
|
||||
function GROUP:GetName()
|
||||
return self.name
|
||||
end
|
||||
|
||||
function GROUP:GetMemberCharacters()
|
||||
return table.GetKeys(self.members)
|
||||
end
|
||||
|
||||
function GROUP:GetMembersCount()
|
||||
return table.Count(self.members)
|
||||
end
|
||||
|
||||
function GROUP:GetOnlineMembers()
|
||||
local members = {}
|
||||
|
||||
for _, v in ipairs(player.GetAll()) do
|
||||
local character = v:GetCharacter()
|
||||
|
||||
if (character and self.members[character:GetID()]) then
|
||||
table.insert(members, v)
|
||||
end
|
||||
end
|
||||
|
||||
return members
|
||||
end
|
||||
|
||||
function GROUP:GetTable()
|
||||
return {
|
||||
id = self.id,
|
||||
name = self.name,
|
||||
color = self.color,
|
||||
hidden = self.hidden,
|
||||
info = self.info,
|
||||
lore = self.lore,
|
||||
forum = self.forum,
|
||||
active = self.active,
|
||||
roles = self.roles,
|
||||
members = self.members
|
||||
}
|
||||
end
|
||||
|
||||
function GROUP:Save(bSync)
|
||||
local query = mysql:Update("ix_groups")
|
||||
query:Where("id", self.id)
|
||||
query:Update("name", self.name)
|
||||
query:Update("active", self.active and 1 or 0)
|
||||
query:Update("hidden", self.hidden and 1 or 0)
|
||||
query:Update("color_r", self.color.r)
|
||||
query:Update("color_g", self.color.g)
|
||||
query:Update("color_b", self.color.b)
|
||||
query:Update("color_a", self.color.a)
|
||||
query:Update("roles", util.TableToJSON(self.roles))
|
||||
query:Update("members", util.TableToJSON(self.members))
|
||||
query:Update("info", self.info)
|
||||
query:Update("lore", self.lore)
|
||||
query:Update("forum", self.forum)
|
||||
query:Execute()
|
||||
|
||||
if (bSync) then
|
||||
self:Sync()
|
||||
end
|
||||
end
|
||||
|
||||
function GROUP:CreateDB(character)
|
||||
self.members[character:GetID()] = GROUP_LEAD
|
||||
|
||||
local query = mysql:Insert("ix_groups")
|
||||
query:Insert("name", self.name)
|
||||
query:Insert("active", self.active and 1 or 0)
|
||||
query:Insert("hidden", self.hidden and 1 or 0)
|
||||
query:Insert("color_r", self.color.r)
|
||||
query:Insert("color_g", self.color.g)
|
||||
query:Insert("color_b", self.color.b)
|
||||
query:Insert("color_a", self.color.a)
|
||||
query:Insert("roles", util.TableToJSON(self.roles))
|
||||
query:Insert("members", util.TableToJSON(self.members))
|
||||
query:Insert("info", self.info)
|
||||
query:Insert("lore", self.lore)
|
||||
query:Insert("forum", self.forum)
|
||||
query:Callback(function(result, _, insertID)
|
||||
self.id = insertID
|
||||
PLUGIN.stored[insertID] = self
|
||||
|
||||
self:AddMember(character, GROUP_LEAD)
|
||||
|
||||
self:Sync()
|
||||
end)
|
||||
query:Execute()
|
||||
end
|
||||
|
||||
function GROUP:FromDB(group)
|
||||
self.id = group.id
|
||||
self.name = group.name
|
||||
self.color = Color(group.color_r, group.color_g, group.color_b, group.color_a)
|
||||
self.hidden = group.hidden == 1
|
||||
self.info = group.info
|
||||
self.lore = group.lore
|
||||
self.forum = group.forum
|
||||
self.active = group.active == 1
|
||||
self.roles = util.JSONToTable(group.roles)
|
||||
self.members = util.JSONToTable(group.members)
|
||||
|
||||
PLUGIN.stored[self.id] = self
|
||||
end
|
||||
|
||||
function GROUP:FromTable(group)
|
||||
self.id = group.id
|
||||
self.name = group.name
|
||||
self.color = group.color
|
||||
self.hidden = group.hidden
|
||||
self.info = group.info
|
||||
self.lore = group.lore
|
||||
self.forum = group.forum
|
||||
self.active = group.active
|
||||
self.roles = group.roles
|
||||
self.members = group.members
|
||||
end
|
||||
|
||||
function GROUP:FromTableThird(group)
|
||||
self.id = group.id
|
||||
self.name = group.name
|
||||
end
|
||||
|
||||
function GROUP:GetRole(characterID)
|
||||
return self.roles[self.members[characterID]]
|
||||
end
|
||||
|
||||
function GROUP:GetRoleID(characterID)
|
||||
return self:GetRole(characterID).id
|
||||
end
|
||||
|
||||
function GROUP:GetRoles()
|
||||
return self.roles
|
||||
end
|
||||
|
||||
function GROUP:GetRoleData(role)
|
||||
return self.roles[role]
|
||||
end
|
||||
|
||||
if (SERVER) then
|
||||
function GROUP:Sync(client)
|
||||
netstream.Start(client, "ixGroupSync", self:GetTable())
|
||||
end
|
||||
|
||||
function GROUP:SyncThird(client)
|
||||
local tbl = {}
|
||||
tbl.id = self.id
|
||||
tbl.name = self.name
|
||||
netstream.Start(client, "ixGroupSyncNotOwned", tbl)
|
||||
if client then
|
||||
local character = client:GetCharacter() or nil
|
||||
|
||||
if character and self.members[character:GetID()] then
|
||||
netstream.Start(client, "ixGroupSync", self:GetTable())
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function GROUP:AddMember(character, role)
|
||||
if (character) then
|
||||
self.members[character:GetID()] = role or GROUP_MEMBER
|
||||
character:SetGroupID(self:GetID())
|
||||
character:Save()
|
||||
self:Sync()
|
||||
|
||||
if (self:GetMembersCount() > 3 and !self.active) then
|
||||
self.active = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function GROUP:KickMember(characterID)
|
||||
if (self.members[characterID]) then
|
||||
local character = ix.char.loaded[characterID]
|
||||
local deleting = false
|
||||
|
||||
if (self:GetRoleID(characterID) == GROUP_LEAD and !self.active) then
|
||||
self:NotifyAll("Leader has disbanded your group.")
|
||||
deleting = true
|
||||
end
|
||||
|
||||
self.members[characterID] = nil
|
||||
|
||||
if (character) then
|
||||
character:SetGroupID(-1)
|
||||
character:Save()
|
||||
|
||||
self:Sync(character:GetPlayer())
|
||||
else
|
||||
local query = mysql:Update("ix_characters")
|
||||
query:Update("group", -1)
|
||||
query:Where("id", characterID)
|
||||
query:Execute()
|
||||
PLUGIN.cache[characterID] = nil
|
||||
end
|
||||
|
||||
if (table.IsEmpty(self.members) or deleting) then
|
||||
PLUGIN:DeleteGroup(self.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function GROUP:SetRole(characterID, role)
|
||||
self.members[characterID] = self.roles[role] and role
|
||||
end
|
||||
|
||||
function GROUP:AddRole(data)
|
||||
if (data.id) then
|
||||
self.roles[data.id] = data
|
||||
else
|
||||
local id = table.insert(self.roles, data)
|
||||
self.roles[id].id = id
|
||||
end
|
||||
end
|
||||
|
||||
function GROUP:EditRole(role, data)
|
||||
if (self.roles[role]) then
|
||||
self.roles[role] = data
|
||||
end
|
||||
end
|
||||
|
||||
function GROUP:NotifyAll(text)
|
||||
for _, v in pairs(self:GetOnlineMembers()) do
|
||||
v:NotifyLocalized(text)
|
||||
end
|
||||
end
|
||||
|
||||
if (table.IsEmpty(GROUP:GetRoles())) then
|
||||
GROUP:AddRole({
|
||||
id = GROUP_LEAD,
|
||||
name = "Group Lead"
|
||||
})
|
||||
|
||||
GROUP:AddRole({
|
||||
id = GROUP_MOD,
|
||||
name = "Group Moderator"
|
||||
})
|
||||
|
||||
GROUP:AddRole({
|
||||
id = GROUP_MEMBER,
|
||||
name = "Member"
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
ix.meta.group = GROUP
|
||||
Reference in New Issue
Block a user