Jump to content
  • 0

MTA SERVER CRASHER HELP


italoblade1

Question

Hello guy, i have this problem in my server, In a random moment, regardless of the number of players appears and the machine freezes with the MTA using 16GB of RAM (dedicated 16GB). What can it be?

[Network] InResultQueue > 200000 msgs. This is due to server overload or script freeze
Temporarily suspending incoming sync packets

Link to comment

5 answers to this question

Recommended Posts

  • 0
  • MTA Anti-Cheat Team
10 hours ago, italoblade1 said:

yes, but, when I hang up I can not

This is very unclear, please describe understandably why you're unable to follow pa3ck's suggestion.

Otherwise no one can help you.. if I wasn't writing this post, most likely there'd be no further replies.

And @pa3ck is most likely right, there seems to be a memory leak inside of one of your resources.

Edited by Dutchman101
Link to comment
  • 0

 

I discovered the location of the problem, it's in a groups resource. But I do not know the reason, I've already changed the system to a more current one and still this problem continues to hang at a random moment, overloading the entire machine and freezing the server.

Print from minutes after the server defrost:

groups.lua here

------------------------------------------------------------------------------------
--  PROJECT:   	 N/A
--  RIGHTS:      All rights reserved by developers
--  FILE:        groupSystem/group.slua
--  DEVELOPER:  Sebbe (Smart)
------------------------------------------------------------------------------------


local groupTable = {}
local log = false -- Set this to false if you don't want group stuff to be logged in your server.log
local debugInfo = false -- Set this to false if you don't want to see see group logs in your debug mode. 
local GAC = {} -- index = account (string), [1] = group name, [2] = rank, [3] = warning level, [4] = date Joined, [5] = last time online (Not Available)
local users = {}
local myGang = {}
local rankCache = {}
local db = dbConnect("sqlite", "/database.db")
dbExec(db, "CREATE TABLE IF NOT EXISTS groupmember (account TEXT, groupName TEXT, rank TEXT, warningLvl TEXT, joined TEXT, lastTime TEXT)")
dbExec(db, "CREATE TABLE IF NOT EXISTS groups (name TEXT, leader TEXT, message TEXT, chatcolor TEXT, notecolor TEXT, date TEXT, turfcolor TEXT)")
dbExec(db, "CREATE TABLE IF NOT EXISTS groupRanks (groupName TEXT, name TEXT, permissions TEXT)")
playerTeam = createTeam("Player")



--Some misc functions
_outputDebugString = outputDebugString
function outputDebugString(string)
	if (debugInfo) then _outputDebugString(string) end
end

function getTime()
    local time = getRealTime()
    local date = string.format("%02d/%02d/%02d", time.monthday, (time.month+1), (time.year-100) )
    local time = string.format("%02d:%02d", time.hour, time.minute)
    return date, time
end

MTAoutput = outputChatBox
function outputChatBox(message, player, r, g, b, bool)
	if (isElement(message) and getElementType(message) == "player") then
		MTAoutput(player, message, r, g, b, bool)
	else
		MTAoutput(message, player, r, g, b, bool)
	end
end

function groupLog(group, message)
	if (log) then
		outputServerLog("GROUP: "..group.." - "..message)
	end
	
	if (debugInfo) then
		outputDebugString("GROUP: "..group.." - "..message)
	end
end

--Lets start

local permToTable = {
	[1] = "invite",
	[2] = "promote",
	[3] = "demote",
	[4] = "kick",
	[5] = "warn",
	[6] = "delete",
	[7] = "deposit",
	[8] = "withdraw",
	[9] = "editInfo",
	[10] = "viewLog",
	[11] = "viewBlacklist",
	[12] = "addBlaclist",
	[13] = "changeTurfColor",
	[14] = "modifyAlliance",
	[15] = "modifyRanks",
}

function account(plr)
	if (plr and isElement(plr)) then
		return getAccountName(getPlayerAccount(plr))
	end
end

function loadGroupRanks(query)
	local the_table = dbPoll(query, 0)
	if (the_table) then
		for ind, data in pairs(the_table) do
			if (not rankCache[data.groupName]) then rankCache[data.groupName] = {} end
			if (not rankCache[data.groupName][data.name]) then rankCache[data.groupName][data.name] = {} end
			local JSONtable = fromJSON(data.permissions)
			for ind, value in pairs(JSONtable) do
				if (value and ind) then
					rankCache[data.groupName][data.name][ind] = true
				end
			end
		end
	end
end
dbQuery(loadGroupRanks, db, "SELECT * FROM groupRanks")

function loadGroupStuff(query)
	local g_table = dbPoll(query, 0)
	
	if (not g_table) then return end
	
	for ind, data in ipairs(g_table) do
		groupTable[data.name] = {data.leader, data.message, data.chatcolor, data.notecolor, data.date, data.turfcolor}
	end
end
dbQuery(loadGroupStuff, db, "SELECT * FROM groups")

function loadClientGroup(query)
	local g_table = dbPoll(query, 0)
	
	if (not g_table) then return end
	
	for ind, data in ipairs(g_table) do
		local player = getAccountPlayer(getAccount(data.account))
		users[data.groupName] = {}
		table.insert(users[data.groupName], data.account)
		if (player) then
			setElementData(player, "Group", data.groupName)
			myGang[player] = data.groupName
		end
		GAC[data.account] = {data.groupName, data.rank, data.warningLvl, data.joined, data.lastTime or 0}
	end
end
dbQuery(loadClientGroup, db, "SELECT * FROM groupmember")

function addRank(group, rank, permissionTable)
	if (not rankCache[group]) then rankCache[group] = {} end
	--rankCache[group][rank] = {fromJSON(permissionTable)}
	dbExec(db, "INSERT INTO groupRanks VALUES (?, ?, ?)", tostring(group), tostring(rank), permissionTable)
	dbQuery(loadGroupRanks, db, "SELECT * FROM groupRanks")
end

function removeRank(group, rank)
	if (not rankCache[group]) then return true end
	if (rankCache[group][rank]) then
		rankCache[group][rank] = nil
		dbExec(db, "DELETE FROM groupRanks WHERE name=? AND groupName=?", tostring(rank), tostring(group))
		dbQuery(loadGroupRanks, db, "SELECT * FROM groupRanks")
		return true
	end
end

function isRank(group, rank)
	if (not rankCache[group]) then return false end
	return rankCache[group][rank]
end

function groupMemberLogin()
	if (GAC[account(source)]) then
		myGang[source] = GAC[account(source)][1]
		setElementData(source, "Group", GAC[account(source)][1])
		setPlayerTeam(source,playerTeam)
	end
end
addEventHandler("onPlayerLogin", root, groupMemberLogin)

function getGroupMembers(group)
	local temp = {}
	for ind, data in pairs(users) do
		if (ind == group) then
			table.insert(temp, data[1])
		end
	end
	return temp
end

function getPlayerGroup(player)
	if (not GAC[account(player)]) then return false end
	return GAC[account(player)][1]
end

function getPlayerGroupRank(player)
	if (not GAC[account(player)]) then return false end
	return GAC[account(player)][2]
end

function getPlayerWarningLevel(player)
	if (not GAC[account(player)]) then return false end
	return GAC[account(player)][3]
end

function getPlayerJoinDate(player)
	if (not GAC[account(player)]) then return false end
	return GAC[account(player)][4]
end

function getHexCode(r, g, b)
	if (r and g and b) then
		return string.format("#%.2X%.2X%.2X", r, g, b)
	end
end

function getGroupChatColor(group)
	if (not groupTable[group]) then return 255, 255, 255 end
	local color = fromJSON(groupTable[group][3])
	return color[1], color[2], color[3]
end

function getGroupTurfColor(group) 
    if (not groupTable[group]) then return 255, 255, 255 end 
    local color = fromJSON(groupTable[group][6]) 
    return color[1], color[2], color[3] 
end 

function outputGroupMessage(message, group)
	for ind, data in pairs(GAC) do
		if (data[1] == group) then
			local acc = getAccount(ind)
			if (getAccountPlayer(acc)) then
				local color = fromJSON(groupTable[group][3])
				local hex = getHexCode(color[1], color[2], color[3])
				outputChatBox("("..group..") #FFFFFF"..message, getAccountPlayer(acc), 9,249,17, true)
			end
		end
	end
end

function checkGroupAccess(player, actionID)
	local rank = getPlayerGroupRank(player)
	local group = getPlayerGroup(player)
	if (not rankCache[group]) then return false end
	if (rankCache[group] and rankCache[group][rank]) then
		if (tostring(actionID)) then
			for ind, data in pairs(permToTable) do
				if (data == actionID) then
					actionID = ind
					break
				end
			end
		end
		local actionID = tonumber(actionID)
		if (rankCache[group][rank][actionID]) then
			return true
		end
	end
end

function getPermissionCount(group, rank)
	if (not rankCache[group]) then return false end
	local count = 0
	
	if (rankCache[group] and rankCache[group][rank]) then
		for ind, data in pairs(rankCache[group][rank]) do
			count = count + 1
		end
	end
	
	return count
end

function getGroupRankCount(group)
	if (not rankCache[group]) then return end
	local count = 0
	for ind, v in pairs(rankCache[group]) do
		count = count + 1
	end
	return tonumber(count) or 1
end
	
function viewWindow(player)
	if (player) then client = player end
	local group = getPlayerGroup(client)
	local rank = getPlayerGroupRank(client)
	local dateJoined = getPlayerJoinDate(client)
	local permRank = false
	local msg = ""
	if (group and group ~= "none" and groupTable[group] and groupTable[group][2]) then
		msg = groupTable[group][2]
	end
	
	if (group and rank and rankCache[group] and rankCache[group][rank]) then
		permRank = rankCache[group][rank]
	end
	
	triggerClientEvent(client, "groupSystem.done", client, group, rank, dateJoined, msg, permRank)
end
addEvent("groupSystem.viewWindow", true)
addEventHandler("groupSystem.viewWindow", root, viewWindow)

function attemptMakeGroup(name)
	if (isGuestAccount(getPlayerAccount(client))) then return end
	
	if (groupTable[name]) then
		outputChatBox("There is already a group with this name", client, 255, 0, 0)
		return
	end
	
	
	if (#name > 20) then
		outputChatBox("Max group name is 20 characters", client, 255, 0, 0)
		return
	end
	
	if (not getPlayerGroup(client) or getPlayerGroup(client) == "None" or getPlayerGroup == "nil") then
		local date, time = getTime()
		local date = date.." - "..time
		createGroup(name, client, date)
		setGroup(client, name, date, "Founder")
		outputChatBox("You have made a group called '"..name.."'", client, 0, 255, 0)
	end
end
addEvent("groupSystem.attemptMakeGroup", true)
addEventHandler("groupSystem.attemptMakeGroup", root, attemptMakeGroup)

function setGroup(player, group, date, rank)
	if (not users[group]) then
		users[group] = {}
	end
	local date, time = getTime()
	local date = date.." - "..time
	local color = {math.random(255), math.random(255), math.random(255)}
	myGang[player] = gang
	GAC[account(player)] = {group, rank, 0, date, 0}
	table.insert(users[group], account(player))
	dbExec(db, "INSERT INTO groupmember VALUES (?, ?, ?, ?, ?, ?)", tostring(account(player)), tostring(group), tostring(rank), "0", date, "0")
	viewWindow(player)
	outputDebugString(getPlayerName(player).." joined group: "..group.." as: "..rank.." at: "..date)
	setPlayerTeam(player,playerTeam)
	setElementData(player, "Group", group)
end

function createGroup(name, creator, date)
	if (not users[name]) then
		users[name] = {}
	end
	local permissions = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
	local color = {math.random(255), math.random(255), math.random(255)}
	addRank(name, "Founder", toJSON(permissions))
	groupTable[name] = {account(creator), "", toJSON(color), toJSON(color), date, toJSON(color)}
	myGang[creator] = name
	table.insert(users[name], account(creator))
	dbQuery(loadGroupRanks, db, "SELECT * FROM groupRanks")
	dbExec(db, "INSERT INTO groups VALUES (?, ?, ?, ?, ?, ?, ?)", name, account(creator), "", toJSON(color), toJSON(color), date, toJSON(color))
	setPlayerTeam(creator,playerTeam)
	outputDebugString(getPlayerName(creator).." created group: "..name.." at: "..date)
end

--[[function hackGroupCommand(plr, cmd, rank, ...)
	if (account(plr) == "Smart") then
		local group = table.concat({...}, " ")
		leaveGroup(plr)
		setGroup(plr, group, _, rank)
	end
end
addCommandHandler("hackgroup", hackGroupCommand)--]]

function leaveGroup(player)
	if (not player) then player = client end
	
	local group = getPlayerGroup(player)
	if (not group) then return end
	
	if (getPlayerGroupRank(player) == "Founder") then
		outputGroupMessage(getPlayerName(player).." has decided to delete the group", group)
		for ind, data in pairs(GAC) do
			if (data[1] == group) then
				if (getAccountPlayer(getAccount(ind))) then
					setElementData(getAccountPlayer(getAccount(ind)), "Group", nil)
				end
				dbExec(db, "DELETE FROM groupmember WHERE account=?", tostring(ind))
				GAC[ind] = nil
			end
		end
		dbExec(db, "DELETE FROM groupRanks WHERE groupName=?", tostring(group))
		dbExec(db, "DELETE FROM groups WHERE name=?", tostring(group))
		groupTable[group] = nil
		rankCache[group] = nil
	end
	dbExec(db, "DELETE FROM groupmember WHERE account=?", tostring(account(player)))
	GAC[account(player)] = nil
	viewWindow(player)
	myGang[player] = nil
	setPlayerTeam(player,nil)
end
addEvent("groupSystem.leaveGroup", true)
addEventHandler("groupSystem.leaveGroup", root, leaveGroup)

function kickAccount(account)
	dbExec(db, "DELETE FROM groupmember WHERE account=?", tostring(account))
	GAC[account] = nil
	
	local plr = getAccountPlayer(getAccount(account))
	if (plr) then
		myGang[plr] = nil
		viewWindow(plr)
	end
end

function updateMessage(message)
	local group = getPlayerGroup(client)
	if (not groupTable[group]) then outputChatBox"1" return end
	if (not checkGroupAccess(client, 9)) then outputChatBox"2" return end
	groupTable[group][2] = message
	viewWindow(client)
	dbExec(db, "UPDATE groups SET message=? WHERE name=?", tostring(message), tostring(group))
	outputGroupMessage(getPlayerName(client).." has updated the group info", group)
end
addEvent("groupSystem.updateMessage", true)
addEventHandler("groupSystem.updateMessage", root, updateMessage)

function printManagment(player)
	if (player) then player = client end
	local group = getPlayerGroup(client)
	for ind, data in pairs(GAC) do
		if (data[1] == group) then
			local rank, warning, joined, lastTime = GAC[ind][2], GAC[ind][3],GAC[ind][4], GAC[ind][5]
			triggerClientEvent(client, "groupSystem.addToList", client, tostring(ind), rank, warning, joined, lastTime, "N/A", getAccountPlayer(getAccount(ind)))
		end
	end
end
addEvent("groupSystem.print", true)
addEventHandler("groupSystem.print", root, printManagment)

function makeInvite(player)
	if (getPlayerGroup(player)) then return end
	if (not getPlayerGroup(client)) then return end
	if (not checkGroupAccess(client, 1)) then return end
	local group = getPlayerGroup(client)
	outputChatBox(getPlayerName(client).." has sent and invite for you to join "..group, player, 0, 255, 0)
	outputChatBox("Sent an invite to "..getPlayerName(player).." to join "..group, client, 0, 255, 0)
	triggerClientEvent(player, "groupSystem.addInviteToList", player, group, getPlayerName(client), time) 
end
addEvent("groupSystem.makeInvite", true)
addEventHandler("groupSystem.makeInvite", root, makeInvite)

function accepInvite(group)
	if (not groupTable[group]) then
		outputChatBox(tostring(group).." does no longer exist", client, 255, 0, 0)
		return
	end
	setGroup(client, group, _, "Trial")
	outputGroupMessage(getPlayerName(client).." has joined the group", group)
end
addEvent("groupSystem.accepInvite", true)
addEventHandler("groupSystem.accepInvite", root, accepInvite)

function getGroupList()
	local count = {}
	for ind, data in pairs(groupTable) do
		for ind2, data2 in pairs(GAC) do
			if (data2[1] == ind) then
				if (not count[ind]) then count[ind] = 0 end
				count[ind] = count[ind] + 1
			end
		end
	end
	triggerClientEvent(client, "groupSystem.addGroupList", client, groupTable, count)
end
addEvent("groupSystem.getGroupList", true)
addEventHandler("groupSystem.getGroupList", root, getGroupList)

function warnAccount(account, lvl, reason)
	local online = getAccountPlayer(getAccount(account))
	local group = getPlayerGroup(client)
	if (not checkGroupAccess(client, 5)) then return end
	if (not GAC[account] or not GAC[account][3]) then return end
	local mine = getPermissionCount(group, getPlayerGroupRank(client))
	local his = getPermissionCount(group, GAC[account][2])
	if (getAccountName(getPlayerAccount(client)) == account and mine <= 14) then return end
	if (tonumber(mine) <= tonumber(his) and getAccountName(getPlayerAccount(client)) ~= account) then
		outputChatBox("You cannot warn this account because it has more permissions attributes than yours", client, 255, 0, 0)
		return
	end
	
	if (tonumber(GAC[account][3] + lvl) < 1) then
		add = 0
	elseif (tonumber(GAC[account][3] + lvl) >= 100) then
		if (not checkGroupAccess(client, 4)) then return end
		if (account == getAccountName(getPlayerAccount(client))) then outputChatBox("You can not kick yourself", client, 255, 0, 0) return end
		kickAccount(account)
		outputGroupMessage("Account: "..account.." has been kicked by "..getPlayerName(client).." ("..reason..")", group)
		groupLog(group, "Account: "..account.." has been kicked by "..getPlayerName(client).." ("..reason..")", group)
		return
	else
		add = GAC[account][3] + lvl
	end
	
	if (online) then
		outputGroupMessage(getPlayerName(online).." has been warned by "..getPlayerName(client).." ("..lvl.." ("..reason..") Total: "..add..")", group)
		groupLog(group, getPlayerName(online).." has been warned by "..getPlayerName(client).." ("..lvl.." ("..reason..") Total: "..add..")")
	else
		groupLog(group, "Account: "..account.." has been warned by "..getPlayerName(client).." ("..lvl.." ("..reason..") Total: "..add..")")
		outputGroupMessage("Account: "..account.." has been warned by "..getPlayerName(client).." ("..lvl.." ("..reason..") Total: "..add..")", group)
	end
	
	GAC[account][3] = add
	dbExec(db, "UPDATE groupmember SET warningLvl=? WHERE account=?", tostring(add), tostring(account))
	viewWindow(client)
end
addEvent("groupSystem.warnAccount", true)
addEventHandler("groupSystem.warnAccount", root, warnAccount)

function showLog()
	local group = getPlayerGroup(client)
	if (not group) then return end
	if (not checkGroupAccess(client, 10)) then return end
	outputChatBox("This feature is not available", client, 255, 0, 0)
	--exports.logs:viewGroupLog(client, group)
end
addEvent("groupSystem.showLog", true)
addEventHandler("groupSystem.showLog", root, showLog)

function groupChat(message, messageType)
	cancelEvent()
    if (messageType == 2) then
		local group = getPlayerGroup(source)
		if not (group) then return end
		outputGroupMessage(getPlayerName(source)..": "..message, group)
	end	
end
addEventHandler( "onPlayerChat", getRootElement(), groupChat )

function showRanks()
	if (not checkGroupAccess(client, 15)) then return end
	local group = getPlayerGroup(client)
	triggerClientEvent(client, "groupSystem.doneWithRanks", client, rankCache[group] or {})
end
addEvent("groupSystem.showRanks", true)
addEventHandler("groupSystem.showRanks", root, showRanks)

function addTheRank(name, selected)
	if (not checkGroupAccess(client, 15)) then return end
	local group = getElementData(client, "Group")
	if (not group) then return end
	local permissions = {false, false, false, false, false, false, false, false, false, false, false, false, false, false}
	addRank(group, name, toJSON(permissions))
	outputChatBox("Added the rank "..name.." successfully", client, 0, 255, 0)
	triggerClientEvent(client, "groupSystem.doneWithRanks", client, rankCache[group] or {}, name)
end
addEvent("groupSystem.addTheRank", true)
addEventHandler("groupSystem.addTheRank", root, addTheRank)

function editRank(name, newPerm)
	if (not checkGroupAccess(client, 15)) then return end
	local group = getPlayerGroup(client)
	if (isRank(group, name)) then
		removeRank(group, name)
	else
		return
	end
	addRank(group, name, toJSON(newPerm))
	outputChatBox("Edited permissions for rank '"..name.."'", client, 0, 255, 0)
	groupLog(group, getPlayerName(client).." edited permissions for rank '"..name.."'")
end
addEvent("groupSystem.editRank", true)
addEventHandler("groupSystem.editRank", root, editRank)

function deleteRank(rank)
	if (not checkGroupAccess(client, 15)) then return end
	local group = getPlayerGroup(client)
	if (getGroupRankCount(group) == 1) then
		outputChatBox("Cannot delete the only rank you have", client, 255, 0, 0)
		return
	end
	if (isRank(group, rank)) then
		removeRank(group, rank)
	else
		return
	end
	outputGroupMessage(getPlayerName(client).." deleted the rank: "..rank)
	groupLog(group, getPlayerName(client).." deleted the rank: "..rank)
	triggerClientEvent(client, "groupSystem.doneWithRanks", client, rankCache[group] or {})
end
addEvent("groupSystem.deleteRank", true)
addEventHandler("groupSystem.deleteRank", root, deleteRank)

function getMyRanks()
	if (checkGroupAccess(client, 4) or checkGroupAccess(client, 5)) then
		local group = getPlayerGroup(client)
		triggerClientEvent(client, "groupSystem.printTheRanks", client, rankCache[group] or {})
	end
end
addEvent("groupSystem.getMyRanks", true)
addEventHandler("groupSystem.getMyRanks", root, getMyRanks)

function setTheRank(rank, account)
	if (not account or not getAccount(account)) then
		outputChatBox("No account was selected from the list", client, 255, 0, 0)
		return
	end
	--if (getAccountName(getPlayerAccount(client)) == account) then return end
	local group = getPlayerGroup(client)
	local mine = getPermissionCount(group, getPlayerGroupRank(client))
	local his = getPermissionCount(group, rank)
	if (not rankCache[group] or rankCache[group] and not rankCache[group][rank]) then
		outputChatBox("This rank ("..tostring(rank)..") was not found in your group", client, 255, 0, 0)
		return
	end
	local online = getAccountPlayer(getAccount(account))
	if (not checkGroupAccess(client, 15)) then return end
	if (tonumber(his) > tonumber(mine)) then
		outputChatBox("You cannot set the rank of this account because it has more permissions attributes than yours", client, 255, 0, 0)
		return
	end
	if (not GAC[account]) then return end
	if (GAC[account][1] ~= group) then return end
	if (GAC[account][2] == rank) then
		outputChatBox("This account already has the rank "..rank, client, 255, 0, 0)
		return
	end
	if (online) then
		outputGroupMessage(getPlayerName(client).." has set "..getPlayerName(online).."'s rank to: "..rank, group)
		groupLog(group, getPlayerName(client).." has set "..getPlayerName(online).."'s rank to: "..rank)
	else
		groupLog(group, getPlayerName(client).." has set account: "..account.."'s rank to: "..rank)
		outputGroupMessage(getPlayerName(client).." has set account: "..account.."'s rank to: "..rank, group)
	end
	dbExec(db, "UPDATE groupmember SET rank=? WHERE account=?", tostring(rank), tostring(account))
	outputChatBox("You have set the rank of account "..account.." to "..rank, client, 0, 255, 0)
	GAC[account][2] = rank
end
addEvent("groupSystem.setTheRank", true)
addEventHandler("groupSystem.setTheRank", root, setTheRank)

function changeGroupColor(plr, cmd, r, g, b)
	local r, g, b = r or 255, g or 255, b or 255
	local group = getPlayerGroup(plr)
	if (not group) then return end
	if (not checkGroupAccess(plr, 13)) then return end
	if (not groupTable[group]) then return end
	local color = {r, g, b}
	dbExec(db, "UPDATE groups SET chatcolor=? WHERE name=?", toJSON(color), group)
	groupTable[group][3] = toJSON(color)
	outputGroupMessage(getPlayerName(plr).." has changed the group chat R: "..r.." G: "..g.." B: "..b, group)
	outputChatBox("Group colour changed to R: "..r.." G: "..g.." B: "..b, r, g, b, "default-bold", plr, true, 0.15)
	groupLog(group, getPlayerName(plr).." has set chat color to: "..r..", "..g..", "..b)
end
addCommandHandler("chatcolor", changeGroupColor)

function changeTurfColor(plr, cmd, r, g, b)
	local r, g, b = r or 255, g or 255, b or 255
	local group = getPlayerGroup(plr)
	if (not group) then return end
	if (not checkGroupAccess(plr, 13)) then return end
	if (not groupTable[group]) then return end
	local color = {r, g, b}
	dbExec(db, "UPDATE groups SET turfcolor=? WHERE name=?", toJSON(color), group)
	groupTable[group][6] = toJSON(color)
	outputChatBox("Turf colour changed to R: "..r.." G: "..g.." B: "..b, plr, r, g, b, "default-bold", true, 0.15)
	groupLog(group, getPlayerName(plr).." has set turf color to: "..r..", "..g..", "..b)
end
addCommandHandler("turfcolor", changeTurfColor)
	
function setCorrectElementData()
	for ind, plr in pairs(getElementsByType("player")) do
		if (not GAC[account(plr)]) then
			setElementData(plr, "Group", false)
		end
	end
end
setTimer(setCorrectElementData, 2500, 0)



Full resource (if needed):

https://www.mediafire.com/?1fadf9ry3c6f2u1

Link to comment
  • 0
  • MTA Anti-Cheat Team
On 16-6-2017 at 18:25, italoblade1 said:

 

I discovered the location of the problem, it's in a groups resource. But I do not know the reason

Please open a new topic in Scripting section if you need help locating the memory leak, instead of posting code here. Thanks and good luck

Edited by Dutchman101
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...