Jump to content

ayuda


yaver123

Recommended Posts

hola me pueden ayudar a cambiar el comando para abrir el panel admin ( osea "p") cambiarlo para que se abre con "p+altgr"

ya que quiero cambiarlo

--[[**********************************

*

* Multi Theft Auto - Admin Panel

*

* admin_server.lua

*

* Original File by lil_Toady

*

**************************************]]

_root = getRootElement()

_types = { "player", "team", "vehicle", "resource", "bans", "server", "admin" }

_settings = nil

aPlayers = {}

aLogMessages = {}

aInteriors = {}

aStats = {}

aReports = {}

aWeathers = {}

aNickChangeTime = {}

function notifyPlayerLoggedIn(player)

outputChatBox ( "Press 'p' to open your admin panel", player )

local unread = 0

for _, msg in ipairs ( aReports ) do

unread = unread + ( msg.read and 0 or 1 )

end

if unread > 0 then

outputChatBox( unread .. " unread Admin message" .. ( unread==1 and "" or "s" ), player, 255, 0, 0 )

end

end

addEventHandler ( "onResourceStart", _root, function ( resource )

if ( resource ~= getThisResource() ) then

for id, player in ipairs(getElementsByType("player")) do

if ( hasObjectPermissionTo ( player, "general.tab_resources" ) ) then

triggerClientEvent ( player, "aClientResourceStart", _root, getResourceName ( resource ) )

end

end

return

end

_settings = xmlLoadFile ( "conf\\settings.xml" )

if ( not _settings ) then

_settings = xmlCreateFile ( "conf\\settings.xml", "main" )

xmlSaveFile ( _settings )

end

aSetupACL()

aSetupCommands()

for id, player in ipairs ( getElementsByType ( "player" ) ) do

aPlayerInitialize ( player )

if ( hasObjectPermissionTo ( player, "general.adminpanel" ) ) then

notifyPlayerLoggedIn(player)

end

end

local node = xmlLoadFile ( "conf\\interiors.xml" )

if ( node ) then

local interiors = 0

while ( xmlFindChild ( node, "interior", interiors ) ) do

local interior = xmlFindChild ( node, "interior", interiors )

interiors = interiors + 1

aInteriors[interiors] = {}

aInteriors[interiors]["world"] = tonumber ( xmlNodeGetAttribute ( interior, "world" ) )

aInteriors[interiors]["id"] = xmlNodeGetAttribute ( interior, "id" )

aInteriors[interiors]["x"] = xmlNodeGetAttribute ( interior, "posX" )

aInteriors[interiors]["y"] = xmlNodeGetAttribute ( interior, "posY" )

aInteriors[interiors]["z"] = xmlNodeGetAttribute ( interior, "posZ" )

aInteriors[interiors]["r"] = xmlNodeGetAttribute ( interior, "rot" )

end

xmlUnloadFile ( node )

end

local node = xmlLoadFile ( "conf\\stats.xml" )

if ( node ) then

local stats = 0

while ( xmlFindChild ( node, "stat", stats ) ) do

local stat = xmlFindChild ( node, "stat", stats )

local id = tonumber ( xmlNodeGetAttribute ( stat, "id" ) )

local name = xmlNodeGetAttribute ( stat, "name" )

aStats[id] = name

stats = stats + 1

end

xmlUnloadFile ( node )

end

local node = xmlLoadFile ( "conf\\weathers.xml" )

if ( node ) then

local weathers = 0

while ( xmlFindChild ( node, "weather", weathers ) ~= false ) do

local weather = xmlFindChild ( node, "weather", weathers )

local id = tonumber ( xmlNodeGetAttribute ( weather, "id" ) )

local name = xmlNodeGetAttribute ( weather, "name" )

aWeathers[id] = name

weathers = weathers + 1

end

xmlUnloadFile ( node )

end

local node = xmlLoadFile ( "conf\\reports.xml" )

if ( node ) then

local messages = 0

while ( xmlFindChild ( node, "message", messages ) ) do

subnode = xmlFindChild ( node, "message", messages )

local author = xmlFindChild ( subnode, "author", 0 )

local subject = xmlFindChild ( subnode, "subject", 0 )

local category = xmlFindChild ( subnode, "category", 0 )

local text = xmlFindChild ( subnode, "text", 0 )

local time = xmlFindChild ( subnode, "time", 0 )

local read = ( xmlFindChild ( subnode, "read", 0 ) ~= false )

local id = #aReports + 1

aReports[id] = {}

if ( author ) then aReports[id].author = xmlNodeGetValue ( author )

else aReports[id].author = "" end

if ( category ) then aReports[id].category = xmlNodeGetValue ( category )

else aReports[id].category = "" end

if ( subject ) then aReports[id].subject = xmlNodeGetValue ( subject )

else aReports[id].subject = "" end

if ( text ) then aReports[id].text = xmlNodeGetValue ( text )

else aReports[id].text = "" end

if ( time ) then aReports[id].time = xmlNodeGetValue ( time )

else aReports[id].time = "" end

aReports[id].read = read

messages = messages + 1

end

-- Remove duplicates

local a = 1

while a <= #aReports do

local b = a + 1

while b <= #aReports do

if table.cmp( aReports[a], aReports ) then

table.remove( aReports, b )

b = b - 1

end

b = b + 1

end

a = a + 1

end

-- Upgrade time from '4/9 5:9' to '2009-09-04 05:09'

for id, rep in ipairs ( aReports ) do

if string.find( rep.time, "/" ) then

local monthday, month, hour, minute = string.match( rep.time, "^(.-)/(.-) (.-):(.-)$" )

rep.time = string.format( '%04d-%02d-%02d %02d:%02d', 2009, month + 1, monthday, hour, minute )

end

end

-- Sort messages by time

table.sort(aReports, function(a,b) return(a.time < b.time) end)

-- Limit number of messages

while #aReports > g_Prefs.maxmsgs do

table.remove( aReports, 1 )

end

xmlUnloadFile ( node )

end

local node = xmlLoadFile ( "conf\\messages.xml" )

if ( node ) then

for id, type in ipairs ( _types ) do

local subnode = xmlFindChild ( node, type, 0 )

if ( subnode ) then

aLogMessages[type] = {}

local groups = 0

while ( xmlFindChild ( subnode, "group", groups ) ) do

local group = xmlFindChild ( subnode, "group", groups )

local action = xmlNodeGetAttribute ( group, "action" )

local r = tonumber ( xmlNodeGetAttribute ( group, "r" ) )

local g = tonumber ( xmlNodeGetAttribute ( group, "g" ) )

local b = tonumber ( xmlNodeGetAttribute ( group, "b" ) )

aLogMessages[type][action] = {}

aLogMessages[type][action]["r"] = r or 0

aLogMessages[type][action]["g"] = g or 255

aLogMessages[type][action]["b"] = b or 0

if ( xmlFindChild ( group, "all", 0 ) ) then aLogMessages[type][action]["all"] = xmlNodeGetValue ( xmlFindChild ( group, "all", 0 ) ) end

if ( xmlFindChild ( group, "admin", 0 ) ) then aLogMessages[type][action]["admin"] = xmlNodeGetValue ( xmlFindChild ( group, "admin", 0 ) ) end

if ( xmlFindChild ( group, "player", 0 ) ) then aLogMessages[type][action]["player"] = xmlNodeGetValue ( xmlFindChild ( group, "player", 0 ) ) end

if ( xmlFindChild ( group, "log", 0 ) ) then aLogMessages[type][action]["log"] = xmlNodeGetValue ( xmlFindChild ( group, "log", 0 ) ) end

groups = groups + 1

end

end

end

xmlUnloadFile ( node )

end

end )

addEventHandler ( "onResourceStop", _root, function ( resource )

-- Incase the resource being stopped has been deleted

local stillExists = false

for i, res in ipairs(getResources()) do

if res == resource then

stillExists = true

break

end

end

if not stillExists then return end

if ( resource ~= getThisResource() ) then

for id, player in ipairs(getElementsByType("player")) do

if ( hasObjectPermissionTo ( player, "general.tab_resources" ) ) then

triggerClientEvent ( player, "aClientResourceStop", _root, getResourceName ( resource ) )

end

end

else

local node = xmlLoadFile ( "conf\\reports.xml" )

if ( node ) then

while ( xmlFindChild ( node, "message", 0 ) ~= false ) do

local subnode = xmlFindChild ( node, "message", 0 )

xmlDestroyNode ( subnode )

end

else

node = xmlCreateFile ( "conf\\reports.xml", "messages" )

end

for id, message in ipairs ( aReports ) do

local subnode = xmlCreateChild ( node, "message" )

for key, value in pairs ( message ) do

if ( value ) then

xmlNodeSetValue ( xmlCreateChild ( subnode, key ), tostring ( value ) )

end

end

end

xmlSaveFile ( node )

xmlUnloadFile ( node )

end

aclSave ()

end )

function aGetSetting ( setting )

local result = xmlFindChild ( _settings, tostring ( setting ), 0 )

if ( result ) then

result = xmlNodeGetValue ( result )

if ( result == "true" ) then return true

elseif ( result == "false" ) then return false

else return result end

end

return false

end

function aSetSetting ( setting, value )

local node = xmlFindChild ( _settings, tostring ( setting ), 0 )

if ( not node ) then

node = xmlCreateChild ( _settings, tostring ( setting ) )

end

xmlNodeSetValue ( node, tostring ( value ) )

xmlSaveFile ( _settings )

end

function aRemoveSetting ( setting )

local node = xmlFindChild ( _settings, tostring ( setting ), 0 )

if ( node ) then

xmlDestroyNode ( node )

end

xmlSaveFile ( _settings )

end

function iif ( cond, arg1, arg2 )

if ( cond ) then

return arg1

end

return arg2

end

function getVehicleOccupants ( vehicle )

local tableOut = {}

local seats = getVehicleMaxPassengers ( vehicle ) + 1

for i = 0, seats do

local passenger = getVehicleOccupant ( vehicle, i )

if ( passenger ) then table.insert ( tableOut, passenger ) end

end

return tableOut

end

function isValidSerial ( serial )

-- Did you know gmatch returns an iterator function?

return string.gmatch ( serial, "%w%w%w%w-%w%w%w%w-%w%w%w%w-%w%w%w%w" )

end

function getWeatherNameFromID ( weather )

return iif ( aWeathers[weather], aWeathers[weather], "Unknown" )

end

function getPlayerAccountName( player )

local account = getPlayerAccount ( player )

return account and getAccountName ( account )

end

addEvent ( "onPlayerMute", false )

function aSetPlayerMuted ( player, state, length )

if ( setPlayerMuted ( player, state ) ) then

if not state then

aRemoveUnmuteTimer( player )

elseif state and length and length > 0 then

aAddUnmuteTimer( player, length )

end

triggerEvent ( "onPlayerMute", player, state )

return true

end

return false

end

addEventHandler ( "onPlayerJoin", _root, function ()

local player = source

if aHasUnmuteTimer( player ) then

if not isPlayerMuted(player) then

triggerEvent ( "aPlayer", getElementByIndex("console", 0), player, "mute" )

end

end

end )

-- Allows for timed mutes across reconnects

local aUnmuteTimerList = {}

function aAddUnmuteTimer( player, length )

aRemoveUnmuteTimer( player )

local serial = getPlayerSerial( player )

aUnmuteTimerList[serial] = setTimer(

function()

aUnmuteTimerList[serial] = nil

for _,player in ipairs(getElementsByType('player')) do

if getPlayerSerial(player) == serial then

if isPlayerMuted(player) then

triggerEvent ( "aPlayer", getElementByIndex("console", 0), player, "mute" )

end

end

end

end,

length*1000, 1 )

end

function aRemoveUnmuteTimer( player )

local serial = getPlayerSerial( player )

if aUnmuteTimerList[serial] then

killTimer( aUnmuteTimerList[serial] )

aUnmuteTimerList[serial] = nil

end

end

function aHasUnmuteTimer( player )

local serial = getPlayerSerial( player )

if aUnmuteTimerList[serial] then

return true

end

end

addEvent ( "onPlayerFreeze", false )

function aSetPlayerFrozen ( player, state )

if ( toggleAllControls ( player, not state, true, false ) ) then

aPlayers[player]["freeze"] = state

triggerEvent ( "onPlayerFreeze", player, state )

local vehicle = getPedOccupiedVehicle( player )

if vehicle then

setElementFrozen ( vehicle, state )

end

return true

end

return false

end

function isPlayerFrozen ( player )

if ( aPlayers[player]["freeze"] == nil ) then aPlayers[player]["freeze"] = false end

return aPlayers[player]["freeze"]

end

addEventHandler ( "onPlayerJoin", _root, function ()

if ( aGetSetting ( "welcome" ) ) then

outputChatBox ( aGetSetting ( "welcome" ), source, 255, 100, 100 )

end

aPlayerInitialize ( source )

for id, player in ipairs(getElementsByType("player")) do

if ( hasObjectPermissionTo ( player, "general.adminpanel" ) ) then

triggerClientEvent ( player, "aClientPlayerJoin", source, getPlayerIP ( source ), getPlayerUserName ( source ), getPlayerAccountName ( source ), getPlayerSerial ( source ), hasObjectPermissionTo ( source, "general.adminpanel" ), aPlayers[source]["country"] )

end

end

setPedGravity ( source, getGravity() )

end )

function aPlayerInitialize ( player )

local serial = getPlayerSerial ( player )

if ( not isValidSerial ( serial ) ) then

outputChatBox ( "ERROR: "..getPlayerName ( player ).." - Invalid Serial." )

kickPlayer ( player, "Invalid Serial" )

else

bindKey ( player, "p+alt", "down", "admin" )

callRemote ( "https://community.multitheftauto.com/mta/verify.php", aPlayerSerialCheck, player, getPlayerUserName ( player ), getPlayerSerial ( player ) )

aPlayers[player] = {}

aPlayers[player]["country"] = getPlayerCountry ( player )

aPlayers[player]["money"] = getPlayerMoney ( player )

end

end

addEventHandler ( "onPlayerQuit", root, function ()

aPlayers[source] = nil

aNickChangeTime[source] = nil

end )

addEvent ( "aPlayerVersion", true )

addEventHandler ( "aPlayerVersion", _root, function ( version )

if checkClient( false, source, 'aPlayerVersion' ) then return end

local bIsPre = false

-- If not Release, mark as 'pre'

if version.type:lower() ~= "release" then

bIsPre = true

else

-- Extract rc version if there

local _,_,rc = string.find( version.tag or "", "(%d)$" )

rc = tonumber(rc) or 0

-- If release, but before final rc, mark as 'pre'

if version.mta == "1.0.2" and rc > 0 and rc < 13 then

bIsPre = true

elseif version.mta == "1.0.3" and rc < 9 then

bIsPre = true

end

-- If version does not have a built in version check, maybe show a message box advising an upgrade

if version.number < 259 or ( version.mta == "1.0.3" and rc < 3 ) then

triggerClientEvent ( source, "aClientShowUpgradeMessage", source )

end

end

-- Try to get new player version

local playerVersion

if getPlayerVersion then

playerVersion = getPlayerVersion(client)

else

playerVersion = version.mta .. "-" .. ( bIsPre and "7" or "9" ) .. ".00000.0"

end

-- Format it all prettyful

local _,_,ver,type,build = string.find ( playerVersion, "(.*)-([0-9])\.(.*)" )

if aPlayers[source] then

aPlayers[source]["version"] = ver .. ( type < '9' and " pre " or " " ) .. "(" .. type .. "." .. build .. ")"

end

end )

function aPlayerSerialCheck ( player, result )

if ( result == 0 ) then kickPlayer ( player, "Invalid serial" ) end

end

addEventHandler ( "onPlayerLogin", _root, function ( previous, account, auto )

if ( hasObjectPermissionTo ( source, "general.adminpanel" ) ) then

triggerEvent ( "aPermissions", source )

notifyPlayerLoggedIn( source )

end

end )

addCommandHandler ( "register", function ( player, command, arg1, arg2 )

local username = getPlayerName ( player )

local password = arg1

if ( arg2 ) then

username = arg1

password = arg2

end

if ( password ~= nil ) then

if ( string.len ( password ) < 4 ) then

outputChatBox ( "register: - Password should be at least 4 characters long", player, 255, 100, 70 )

elseif ( addAccount ( username, password ) ) then

outputChatBox ( "You have successfully registered! Username: '"..username.."', Password: '"..password.."'(Remember it)", player, 255, 100, 70 )

outputServerLog ( "ADMIN: "..getPlayerName ( player ).." registered account '"..username.."' (IP: "..getPlayerIP(player).." Serial: "..getPlayerSerial(player)..")" )

elseif ( getAccount ( username ) ) then

outputChatBox ( "register: - Account with this name already exists.", player, 255, 100, 70 )

else

outputChatBox ( "Unknown Error", player, 255, 100, 70 )

end

else

outputChatBox ( "register: - Syntax is 'register [] '", player, 255, 100, 70 )

end

end )

-- This requires "function.removeAccount" permission for both the admin resource and the player

addCommandHandler ( "unregister", function ( player, command, arg1, arg2 )

local username = arg1 or ""

local result = "failed - No permission"

if ( hasObjectPermissionTo ( player, "function.removeAccount" ) ) then

local account = getAccount ( username )

if not account then

result = "failed - Does not exist"

elseif #aclGetAccountGroups ( account ) > 1 then

result = "failed - Account in more than one ACL group"

elseif removeAccount( account ) then

result = "succeeded"

else

result = "failed - Check resource has permission"

end

end

outputChatBox ( "Unregistering account '"..username.."' "..result, player, 255, 100, 70 )

outputServerLog ( "ADMIN: "..getAdminNameForLog ( player ).." unregistering account '"..username.."' "..result.." (IP: "..getPlayerIP(player).." Serial: "..getPlayerSerial(player)..")" )

end )

-- Returns "name" or "name(accountname)" if they differ

function getAdminNameForLog(player)

local name = getPlayerName( player )

if not isGuestAccount( getPlayerAccount( player ) ) then

local accountName = getAccountName( getPlayerAccount( player ) )

if name ~= accountName then

return name.."("..accountName..")"

end

end

return name

end

function aAdminMenu ( player, command )

if ( hasObjectPermissionTo ( player, "general.adminpanel" ) ) then

triggerClientEvent ( player, "aClientAdminMenu", _root )

aPlayers[player]["chat"] = true

end

end

addCommandHandler ( "admin", aAdminMenu )

function aAction ( type, action, admin, player, data, more )

if ( aLogMessages[type] ) then

function aStripString ( string )

string = tostring ( string )

string = string.gsub ( string, "$admin", getPlayerName ( admin ) )

string = string.gsub ( string, "$by_admin_4all", isAnonAdmin4All( admin ) and "" or " by " .. getPlayerName ( admin ) )

string = string.gsub ( string, "$by_admin_4plr", isAnonAdmin4Victim( admin ) and "" or " by " .. getPlayerName ( admin ) )

string = string.gsub ( string, "$data2", more or "" )

if ( player ) then string = string.gsub ( string, "$player", getPlayerName ( player ) ) end

return tostring ( string.gsub ( string, "$data", data or "" ) )

end

local node = aLogMessages[type][action]

if ( node ) then

local r, g, b = node["r"], node["g"], node["b"]

if ( node["all"] ) then outputChatBox ( aStripString ( node["all"] ), _root, r, g, b ) end

if ( node["admin"] ) and ( admin ~= player ) then outputChatBox ( aStripString ( node["admin"] ), admin, r, g, b ) end

if ( node["player"] ) then outputChatBox ( aStripString ( node["player"] ), player, r, g, b ) end

if ( node["log"] ) then outputServerLog ( aStripString ( node["log"] ) ) end

end

end

end

-- Should admin name be hidden from public chatbox message?

function isAnonAdmin4All ( admin )

return getElementData( admin, "AnonAdmin" ) == true

end

-- Should admin name be hidden from private chatbox message?

function isAnonAdmin4Victim ( admin )

return false

end

addEvent ( "aTeam", true )

addEventHandler ( "aTeam", _root, function ( action, name, r, g, b )

if checkClient( "command."..action, source, 'aTeam', action ) then return end

if ( hasObjectPermissionTo ( source, "command."..action ) ) then

mdata = tostring ( data )

mdata = ""

if ( action == "createteam" ) then

local success = false

if ( tonumber ( r ) ) and ( tonumber ( g ) ) and ( tonumber ( b ) ) then

success = createTeam ( name, tonumber ( r ), tonumber ( g ), tonumber ( b ) )

else

success = createTeam ( name )

end

if ( not success ) then

action = nil

outputChatBox ( "Team \""..name.."\" could not be created.", source, 255, 0, 0 )

end

elseif ( action == "destroyteam" ) then

local team = getTeamFromName ( name )

if ( getTeamFromName ( name ) ) then

destroyElement ( team )

else

action = nil

end

else

action = nil

end

if ( action ~= nil ) then aAction ( "server", action, source, false, mdata, mdata2 ) end

return true

end

outputChatBox ( "Access denied for '"..tostring ( action ).."'", source, 255, 168, 0 )

return false

end )

addEvent ( "aAdmin", true )

addEventHandler ( "aAdmin", _root, function ( action, ... )

if checkClient( true, source, 'aAdmin', action ) then return end

local mdata = ""

local mdata2 = ""

if ( action == "password" ) then

action = nil

if ( not arg[1] ) then outputChatBox ( "Error - Password missing.", source, 255, 0, 0 )

elseif ( not arg[2] ) then outputChatBox ( "Error - New password missing.", source, 255, 0, 0 )

elseif ( not arg[3] ) then outputChatBox ( "Error - Confirm password.", source, 255, 0, 0 )

elseif ( tostring ( arg[2] ) ~= tostring ( arg[3] ) ) then outputChatBox ( "Error - Passwords do not match.", source, 255, 0, 0 )

else

local account = getAccount ( getPlayerAccountName ( source ), tostring ( arg[1] ) )

if ( account ) then

action = "password"

setAccountPassword ( account, arg[2] )

mdata = arg[2]

else

outputChatBox ( "Error - Invalid password.", source, 255, 0, 0 )

end

end

elseif ( action == "autologin" ) then

elseif ( action == "settings" ) then

local cmd = arg[1]

local resName = arg[2]

local tableOut = {}

if ( cmd == "change" ) then

local name = arg[3]

local value = arg[4]

-- Get previous value

local settings = aGetResourceSettings( resName )

local oldvalue = settings[name].current

-- Match type

local changed = false

if type(oldvalue) == 'boolean' then value = value=='true' end

if type(oldvalue) == 'number' then value = tonumber(value) end

if type(oldvalue) == "table" then

value = fromJSON("[["..value.."]]")

changed = not table.compare(value, oldvalue)

else

changed = value ~= oldvalue

end

if changed then

if aSetResourceSetting( resName, name, value ) then

-- Tell the resource one of its settings has changed

local res = getResourceFromName(resName)

local resRoot = getResourceRootElement(res)

if resRoot then

if getVersion().mta < "1.1" then

triggerEvent('onSettingChange', resRoot, name, oldvalue, value, source )

end

end

mdata = resName..'.'..name

mdata2 = type(value) == "table" and string.gsub(toJSON(value),"^(%[ %[ )(.*)( %] %])$", "%2") or tostring(value)

end

end

elseif ( cmd == "getall" ) then

tableOut = aGetResourceSettings( resName )

for name,value in pairs(tableOut) do

if type(value.default) == "table" then

tableOut[name].default = string.gsub(toJSON(value.default),"^(%[ %[ )(.*)( %] %])$", "%2")

tableOut[name].current = string.gsub(toJSON(value.current),"^(%[ %[ )(.*)( %] %])$", "%2")

end

end

end

triggerClientEvent ( source, "aAdminSettings", _root, cmd, resName, tableOut )

if mdata == "" then

action = nil

end

elseif ( action == "sync" ) then

local type = arg[1]

local tableOut = {}

if ( type == "aclgroups" ) then

tableOut["groups"] = {}

for id, group in ipairs ( aclGroupList() ) do

table.insert ( tableOut["groups"] ,aclGroupGetName ( group ) )

end

tableOut["acl"] = {}

for id, acl in ipairs ( aclList() ) do

table.insert ( tableOut["acl"] ,aclGetName ( acl ) )

end

elseif ( type == "aclobjects" ) then

local group = aclGetGroup ( tostring ( arg[2] ) )

if ( group ) then

tableOut["name"] = arg[2]

tableOut["objects"] = aclGroupListObjects ( group )

tableOut["acl"] = {}

for id, acl in ipairs ( aclGroupListACL ( group ) ) do

table.insert ( tableOut["acl"], aclGetName ( acl ) )

end

end

elseif ( type == "aclrights" ) then

local acl = aclGet ( tostring ( arg[2] ) )

if ( acl ) then

tableOut["name"] = arg[2]

tableOut["rights"] = {}

for id, name in ipairs ( aclListRights ( acl ) ) do

tableOut["rights"][name] = aclGetRight ( acl, name )

end

end

end

triggerClientEvent ( source, "aAdminACL", _root, type, tableOut )

elseif ( action == "aclcreate" ) then

local name = arg[2]

if ( ( name ) and ( string.len ( name ) >= 1 ) ) then

if ( arg[1] == "group" ) then

mdata = "Group "..name

if ( not aclCreateGroup ( name ) ) then

action = nil

end

elseif ( arg[1] == "acl" ) then

mdata = "ACL "..name

if ( not aclCreate ( name ) ) then

action = nil

end

end

triggerEvent ( "aAdmin", source, "sync", "aclgroups" )

else

outputChatBox ( "Error - Invalid "..arg[1].." name", source, 255, 0, 0 )

end

elseif ( action == "acldestroy" ) then

local name = arg[2]

if ( arg[1] == "group" ) then

if ( aclGetGroup ( name ) ) then

mdata = "Group "..name

aclDestroyGroup ( aclGetGroup ( name ) )

else

action = nil

end

elseif ( arg[1] == "acl" ) then

if ( aclGet ( name ) ) then

mdata = "ACL "..name

aclDestroy ( aclGet ( name ) )

else

action = nil

end

end

triggerEvent ( "aAdmin", source, "sync", "aclgroups" )

elseif ( action == "acladd" ) then

if ( arg[3] ) then

action = action

mdata = "Group '"..arg[2].."'"

if ( arg[1] == "object" ) then

local group = aclGetGroup ( arg[2] )

local object = arg[3]

if ( not aclGroupAddObject ( group, object ) ) then

action = nil

outputChatBox ( "Error adding object '"..tostring ( object ).."' to group '"..tostring ( arg[2] ).."'", source, 255, 0, 0 )

else

mdata2 = "Object '"..arg[3].."'"

triggerEvent ( "aAdmin", source, "sync", "aclobjects", arg[2] )

end

elseif ( arg[1] == "acl" ) then

local group = aclGetGroup ( arg[2] )

local acl = aclGet ( arg[3] )

if ( not aclGroupAddACL ( group, acl ) ) then

action = nil

outputChatBox ( "Error adding ACL '"..tostring ( arg[3] ).."' to group '"..tostring ( arg[2] ).."'", source, 255, 0, 0 )

else

mdata2 = "ACL '"..arg[3].."'"

triggerEvent ( "aAdmin", source, "sync", "aclobjects", arg[2] )

end

elseif ( arg[1] == "right" ) then

local acl = aclGet ( arg[2] )

local right = arg[3]

local enabled = true

if ( not aclSetRight ( acl, right, enabled ) ) then

action = nil

outputChatBox ( "Error adding right '"..tostring ( arg[3] ).."' to group '"..tostring ( arg[2] ).."'", source, 255, 0, 0 )

else

mdata2 = "Right '"..arg[3].."'"

triggerEvent ( "aAdmin", source, "sync", "aclrights", arg[2] )

end

end

else

action = nil

end

elseif ( action == "aclremove" ) then

--action = nil

if ( arg[3] ) then

action = action

mdata = "Group '"..arg[2].."'"

if ( arg[1] == "object" ) then

local group = aclGetGroup ( arg[2] )

local object = arg[3]

if ( not aclGroupRemoveObject ( group, object ) ) then

action = nil

outputChatBox ( "Error - object '"..tostring ( object ).."' does not exist in group '"..tostring ( arg[2] ).."'", source, 255, 0, 0 )

else

mdata2 = "Object '"..arg[3].."'"

triggerEvent ( "aAdmin", source, "sync", "aclobjects", arg[2] )

end

elseif ( arg[1] == "acl" ) then

local group = aclGetGroup ( arg[2] )

local acl = aclGet ( arg[3] )

if ( not aclGroupRemoveACL ( group, acl ) ) then

action = nil

outputChatBox ( "Error - ACL '"..tostring ( arg[3] ).."' does not exist in group '"..tostring ( arg[2] ).."'", source, 255, 0, 0 )

else

mdata2 = "ACL '"..arg[3].."'"

triggerEvent ( "aAdmin", source, "sync", "aclobjects", arg[2] )

end

elseif ( arg[1] == "right" ) then

local acl = aclGet ( arg[2] )

local right = arg[3]

if ( not aclRemoveRight ( acl, right ) ) then

action = nil

outputChatBox ( "Error - right '"..tostring ( arg[3] ).."' does not exist in ACL '"..tostring ( arg[2] ).."'", source, 255, 0, 0 )

else

mdata = "ACL '"..arg[2].."'"

mdata2 = "Right '"..arg[3].."'"

triggerEvent ( "aAdmin", source, "sync", "aclrights", arg[2] )

end

end

else

action = nil

end

end

if ( action ~= nil ) then aAction ( "admin", action, source, false, mdata, mdata2 ) end

end )

-- seconds to description i.e. "10 mins"

function secondsToTimeDesc( seconds )

if seconds then

local tab = { {"day",60*60*24}, {"hour",60*60}, {"min",60}, {"sec",1} }

for i,item in ipairs(tab) do

local t = math.floor(seconds/item[2])

if t > 0 or i == #tab then

return tostring(t) .. " " .. item[1] .. (t~=1 and "s" or "")

end

end

end

return ""

end

addEvent ( "aPlayer", true )

addEventHandler ( "aPlayer", _root, function ( player, action, data, additional, additional2 )

if checkClient( "command."..action, source, 'aPlayer', action ) then return end

if not isElement( player ) then

return -- Ignore if player is no longer valid

end

if ( hasObjectPermissionTo ( source, "command."..action ) ) then

local admin = source

local mdata = ""

local more = ""

if ( action == "kick" ) then

local reason = data or ""

mdata = reason~="" and ( "(" .. reason .. ")" ) or ""

setTimer ( kickPlayer, 100, 1, player, source, reason )

elseif ( action == "ban" ) then

local reason = data or ""

local seconds = tonumber(additional) and tonumber(additional) > 0 and tonumber(additional)

local bUseSerial = additional2

mdata = reason~="" and ( "(" .. reason .. ")" ) or ""

more = seconds and ( "(" .. secondsToTimeDesc(seconds) .. ")" ) or ""

if bUseSerial and getPlayerName ( player ) then

-- Add banned player name to the reason

reason = reason .. " (nick: " .. getPlayerName ( player ) .. ")"

end

-- Add account name of banner to the reason

local adminAccountName = getAccountName ( getPlayerAccount ( source ) )

if adminAccountName and adminAccountName ~= getPlayerName( source ) then

reason = reason .. " (by " .. adminAccountName .. ")"

end

if bUseSerial then

outputChatBox ( "You banned serial " .. getPlayerSerial( player ), source, 255, 100, 70 )

setTimer ( addBan, 100, 1, nil, nil, getPlayerSerial(player), source, reason, seconds )

else

outputChatBox ( "You banned IP " .. getPlayerIP( player ), source, 255, 100, 70 )

setTimer ( banPlayer, 100, 1, player, true, false, false, source, reason, seconds )

end

setTimer( triggerEvent, 1000, 1, "aSync", _root, "bansdirty" )

elseif ( action == "mute" ) then

if ( isPlayerMuted ( player ) ) then action = "un"..action end

local reason = data or ""

local seconds = tonumber(additional) and tonumber(additional) > 0 and tonumber(additional)

mdata = reason~="" and ( "(" .. reason .. ")" ) or ""

more = seconds and ( "(" .. secondsToTimeDesc(seconds) .. ")" ) or ""

aSetPlayerMuted ( player, not isPlayerMuted ( player ), seconds )

elseif ( action == "freeze" ) then

if ( isPlayerFrozen ( player ) ) then action = "un"..action end

aSetPlayerFrozen ( player, not isPlayerFrozen ( player ) )

elseif ( action == "setnick" ) then

local playername = getPlayerName(player)

if setPlayerName( player, data ) then

outputChatBox ( "You changed '"..playername.."' to '"..data.."'!", source, 255, 100, 70 )

outputChatBox ( "'"..getPlayerName( source ).."' changed your nick to '"..data.."'!", player, 255, 100, 70 )

else

outputChatBox ( "Invalid Nick", source, 255, 0, 0 )

end

elseif ( action == "shout" ) then

local textDisplay = textCreateDisplay ()

local textItem = textCreateTextItem ( "(ADMIN)"..getPlayerName ( source )..":\n\n"..data, 0.5, 0.5, 2, 255, 100, 50, 255, 4, "center", "center" )

textDisplayAddText ( textDisplay, textItem )

textDisplayAddObserver ( textDisplay, player )

setTimer ( textDestroyTextItem, 5000, 1, textItem )

setTimer ( textDestroyDisplay, 5000, 1, textDisplay )

elseif ( action == "sethealth" ) then

local health = tonumber ( data )

if ( health ) then

if ( health > 200 ) then health = 100 end

if ( not setElementHealth ( player, health ) ) then

action = nil

end

mdata = health

else

action = nil

end

elseif ( action == "setarmour" ) then

local armour = tonumber ( data )

if ( armour ) then

if ( armour > 200 ) then armour = 100 end

if ( not setPedArmor ( player, armour ) ) then

action = nil

end

mdata = armour

else

action = nil

end

elseif ( action == "setskin" ) then

local vehicle = getPedOccupiedVehicle ( player )

local jetpack = doesPedHaveJetPack ( player )

local seat = 0

if ( vehicle ) then seat = getPedOccupiedVehicleSeat ( player ) end

local x, y, z = getElementPosition ( player )

data = tonumber ( data )

if ( spawnPlayer ( player, x, y, z, getPedRotation ( player ), data, getElementInterior ( player ), getElementDimension ( player ), getPlayerTeam ( player ) ) ) then

fadeCamera ( player, true )

if ( vehicle ) then warpPedIntoVehicle ( player, vehicle, seat ) end

if ( jetpack ) then givePedJetPack ( player ) end

mdata = data

else

action = nil

end

elseif ( action == "setmoney" ) then

mdata = data

if ( not setPlayerMoney ( player, data ) ) then

outputChatBox ( "Invalid money data", source, 255, 0, 0 )

action = nil

end

elseif ( action == "setstat" ) then

if ( additional ) then

if ( tonumber ( data ) == 300 ) then

if ( setPedFightingStyle ( player, tonumber ( additional ) ) ) then

mdata = "Fighting Style"

more = additional

else

action = nil

end

else

if ( setPedStat ( player, tonumber ( data ), tonumber ( additional ) ) ) then

mdata = aStats[data]

more = additional

else

action = nil

end

end

else

action = nil

end

elseif ( action == "setteam" ) then

if ( getElementType ( data ) == "team" ) then

setPlayerTeam ( player, data )

mdata = getTeamName ( data )

else

action = nil

end

elseif ( action == "removefromteam" ) then

mdata = getTeamName( getPlayerTeam( player ) )

setPlayerTeam ( player, nil )

elseif ( action == "setinterior" ) then

action = nil

for id, interior in ipairs ( aInteriors ) do

if ( interior["id"] == data ) then

local vehicle = getPedOccupiedVehicle ( player )

setElementInterior ( player, interior["world"] )

local x, y, z = interior["x"] or 0, interior["y"] or 0, interior["z"] or 0

local rot = interior["r"] or 0

if ( vehicle ) then

setElementInterior ( vehicle, interior["world"] )

setElementPosition ( vehicle, x, y, z + 0.2 )

else

setElementPosition ( player, x, y, z + 0.2 )

setPedRotation ( player, rot )

end

action = "interior"

mdata = data

end

end

elseif ( action == "setdimension" ) then

local dimension = tonumber ( data )

if ( dimension ) then

if ( dimension > 65535 ) or ( dimension < 0 ) then dimension = 0 end

if ( not setElementDimension ( player, dimension ) ) then

action = nil

end

mdata = dimension

else

action = nil

end

elseif ( action == "jetpack" ) then

if ( doesPedHaveJetPack ( player ) ) then

removePedJetPack ( player )

action = "jetpackr"

else

if ( getPedOccupiedVehicle ( player ) ) then outputChatBox ( "Unable to give a jetpack - "..getPlayerName ( player ).." is in a vehicle", source, 255, 0, 0 )

else

if ( givePedJetPack ( player ) ) then

action = "jetpacka"

end

end

end

elseif ( action == "setgroup" ) then

local account = getPlayerAccount ( player )

if ( not isGuestAccount ( account ) ) then

local group = aclGetGroup ( "Admin" )

if ( group ) then

if ( data == true ) then

aclGroupAddObject ( group, "user."..getAccountName ( account ) )

bindKey ( player, "p+alt", "down", "admin" )

action = "admina"

elseif ( data == false ) then

unbindKey ( player, "p+alt", "down", "admin" )

aclGroupRemoveObject ( group, "user."..getAccountName ( account ) )

aPlayers[player]["chat"] = false

action = "adminr"

end

for id, p in ipairs ( getElementsByType ( "player" ) ) do

if ( hasObjectPermissionTo ( p, "general.adminpanel" ) ) then triggerEvent ( "aSync", p, "admins" ) end

end

else

outputChatBox ( "Error - Admin group not initialized. Please reinstall admin resource.", source, 255, 0 ,0 )

end

else

outputChatBox ( "Error - Player is not logged in.", source, 255, 100 ,100 )

end

elseif ( action == "givevehicle" ) then

local vehicle = getPedOccupiedVehicle ( player )

if ( vehicle ) then

setElementModel(vehicle, data)

fixVehicle(vehicle)

else

local x, y, z = getElementPosition ( player )

local r = getPedRotation ( player )

local vx, vy, vz = getElementVelocity ( player )

vehicle = createVehicle ( data, x, y, z, 0, 0, r )

setElementDimension ( vehicle, getElementDimension ( player ) )

setElementInterior ( vehicle, getElementInterior ( player ) )

warpPedIntoVehicle ( player, vehicle )

setElementVelocity ( vehicle, vx, vy, vz )

end

mdata = getVehicleName ( vehicle )

elseif ( action == "giveweapon" ) then

if ( giveWeapon ( player, data, additional, true ) ) then

mdata = getWeaponNameFromID ( data )

more = additional

else

action = nil

end

elseif ( action == "slap" ) then

if ( getElementHealth ( player ) > 0 ) and ( not isPedDead ( player ) ) then

if ( ( not data ) or ( not tonumber ( data ) ) ) then data = 20 end

if ( ( tonumber ( data ) >= 0 ) ) then

if ( tonumber ( data ) > getElementHealth ( player ) ) then setTimer ( killPed, 50, 1, player )

else setElementHealth ( player, getElementHealth ( player ) - data ) end

local x, y, z = getElementVelocity ( player )

setElementVelocity ( player, x , y, z + 0.2 )

mdata = data

else

action = nil

end

else

action = nil

end

elseif ( action == "warp" ) or ( action == "warpto" ) then

function warpPlayer ( p, to )

function warp ( p, to )

local x, y, z = getElementPosition ( to )

local r = getPedRotation ( to )

x = x - math.sin ( math.rad ( r ) ) * 2

y = y + math.cos ( math.rad ( r ) ) * 2

setTimer ( setElementPosition, 1000, 1, p, x, y, z + 1 )

fadeCamera ( p, false, 1, 0, 0, 0 )

setElementDimension ( p, getElementDimension ( to ) )

setElementInterior ( p, getElementInterior ( to ) )

setTimer ( fadeCamera, 1000, 1, p, true, 1 )

end

if ( isPedInVehicle ( to ) ) then

local vehicle = getPedOccupiedVehicle ( to )

local seats = getVehicleMaxPassengers ( vehicle ) + 1

local i = 0

while ( i < seats ) do

if ( not getVehicleOccupant ( vehicle, i ) ) then

setTimer ( warpPedIntoVehicle, 1000, 1, p, vehicle, i )

fadeCamera ( p, false, 1, 0, 0, 0 )

setTimer ( fadeCamera, 1000, 1, p, true, 1 )

break

end

i = i + 1

end

if ( i >= seats ) then

warp ( p, to )

outputConsole ( "Player's vehicle is full ("..getVehicleName ( vehicle ).." - Seats: "..seats..")", p )

end

else

warp ( p, to )

end

end

if ( action == "warp" ) then

warpPlayer ( source, player )

else

warpPlayer ( player, data )

mdata = getPlayerName ( data )

end

else

action = nil

end

if ( action ~= nil ) then aAction ( "player", action, admin, player, mdata, more ) end

return true

end

outputChatBox ( "Access denied for '"..tostring ( action ).."'", source, 255, 168, 0 )

return false

end )

addEvent ( "aVehicle", true )

addEventHandler ( "aVehicle", _root, function ( player, action, data )

if checkClient( "command."..action, source, 'aVehicle', action ) then return end

if ( hasObjectPermissionTo ( source, "command."..action ) ) then

if ( not player ) then return end

local vehicle = getPedOccupiedVehicle ( player )

if ( vehicle ) then

local mdata = ""

if ( action == "repair" ) then

fixVehicle ( vehicle )

local rx, ry, rz = getVehicleRotation ( vehicle )

if ( rx > 110 ) and ( rx < 250 ) then

local x, y, z = getElementPosition ( vehicle )

setVehicleRotation ( vehicle, rx + 180, ry, rz )

setElementPosition ( vehicle, x, y, z + 2 )

end

elseif ( action == "customize" ) then

if ( data[1] == "remove" ) then

for id, upgrade in ipairs ( getVehicleUpgrades ( vehicle ) ) do

removeVehicleUpgrade ( vehicle, upgrade )

end

action = "customizer"

else

for id, upgrade in ipairs ( data ) do

addVehicleUpgrade ( vehicle, upgrade )

if ( mdata == "" ) then mdata = tostring ( upgrade )

else mdata = mdata..", "..upgrade end

end

end

elseif ( action == "setpaintjob" ) then

mdata = data

if ( not setVehiclePaintjob ( vehicle, data ) ) then

action = nil

outputChatBox ( "Invalid Paint job ID", source, 255, 0, 0 )

end

elseif ( action == "setcolor" ) then

for k, color in ipairs ( data ) do

local c = tonumber ( color )

if ( c ) then

if ( c < 0 ) or ( c > 126 ) then

action = nil

end

else

action = nil

end

end

if ( action ~= nil ) then

if ( not setVehicleColor ( vehicle, tonumber(data[1]), tonumber(data[2]), tonumber(data[3]), tonumber(data[4]) ) ) then

action = nil

end

end

elseif ( action == "blowvehicle" ) then

setTimer ( blowVehicle, 100, 1, vehicle )

elseif ( action == "destroyvehicle" ) then

setTimer ( destroyElement, 100, 1, vehicle )

else

action = nil

end

if ( action ~= nil ) then

local seats = getVehicleMaxPassengers ( vehicle )

if seats then

for i = 0, seats do

local passenger = getVehicleOccupant ( vehicle, i )

if ( passenger ) then

aAction ( "vehicle", action, source, passenger, mdata )

end

end

end

end

end

return true

end

outputChatBox ( "Access denied for '"..tostring ( action ).."'", source, 255, 168, 0 )

return false

end )

addEvent ( "aResource", true )

addEventHandler ( "aResource", _root, function ( name, action )

if checkClient( "command."..action, source, 'aResource', action ) then return end

local pname = getPlayerName ( source )

if ( hasObjectPermissionTo ( source, "command."..action ) ) then

local text = ""

if ( action == "start" ) then if ( startResource ( getResourceFromName ( name ), true ) ) then text = "started" end

elseif ( action == "restart" ) then if ( restartResource ( getResourceFromName ( name ) ) ) then text = "restarted" end

elseif ( action == "stop" ) then if ( stopResource ( getResourceFromName ( name ) ) ) then text = "stopped" end

else action = nil

end

if ( text ~= "" ) then

outputServerLog ( "ADMIN: Resource \'" .. name .. "\' " .. text .. " by " .. getAdminNameForLog ( source ) )

for id, player in ipairs(getElementsByType("player")) do

triggerClientEvent ( player, "aClientLog", _root, text )

end

end

return true

end

outputChatBox ( "Access denied for '"..tostring ( action ).."'", source, 255, 168, 0 )

return false

end )

addEvent ( "aServer", true )

addEventHandler ( "aServer", _root, function ( action, data, data2 )

if checkClient( "command."..action, source, 'aServer', action ) then return end

if ( hasObjectPermissionTo ( source, "command."..action ) ) then

local mdata = tostring ( data )

local mdata2 = ""

if ( action == "setgame" ) then

if ( not setGameType ( tostring ( data ) ) ) then

action = nil

outputChatBox ( "Error setting game type.", source, 255, 0, 0 )

end

triggerEvent ( "aSync", source, "server" )

elseif ( action == "setmap" ) then

if ( not setMapName ( tostring ( data ) ) ) then

action = nil

outputChatBox ( "Error setting map name.", source, 255, 0, 0 )

end

triggerEvent ( "aSync", source, "server" )

elseif ( action == "setwelcome" ) then

if ( ( not data ) or ( data == "" ) ) then

action = "resetwelcome"

aRemoveSetting ( "welcome" )

else

aSetSetting ( "welcome", tostring ( data ) )

mdata = data

end

elseif ( action == "settime" ) then

if ( not setTime ( tonumber ( data ), tonumber ( data2 ) ) ) then

action = nil

outputChatBox ( "Error setting time.", source, 255, 0, 0 )

end

mdata = data..":"..data2

elseif ( action == "setpassword" ) then

if ( not data or data == "" ) then

setServerPassword ( nil )

action = "resetpassword"

elseif ( string.len ( data ) > 32 ) then

outputChatBox ( "Set password: 32 characters max", source, 255, 0, 0 )

elseif ( not setServerPassword ( data ) ) then

action = nil

outputChatBox ( "Error setting password", source, 255, 0, 0 )

end

triggerEvent ( "aSync", source, "server" )

elseif ( action == "setweather" ) then

if ( not setWeather ( tonumber ( data ) ) ) then

action = nil

outputChatBox ( "Error setting weather.", source, 255, 0, 0 )

end

mdata = data.." "..getWeatherNameFromID ( tonumber ( data ) )

elseif ( action == "blendweather" ) then

if ( not setWeatherBlended ( tonumber ( data ) ) ) then

action = nil

outputChatBox ( "Error setting weather.", source, 255, 0, 0 )

end

elseif ( action == "setgamespeed" ) then

if ( not setGameSpeed ( tonumber ( data ) ) ) then

action = nil

outputChatBox ( "Error setting game speed.", source, 255, 0, 0 )

end

elseif ( action == "setgravity" ) then

if ( setGravity ( tonumber ( data ) ) ) then

for id, player in ipairs ( getElementsByType ( "player" ) ) do

setPedGravity ( player, getGravity() )

end

else

action = nil

outputChatBox ( "Error setting gravity.", source, 255, 0, 0 )

end

elseif ( action == "setwaveheight" ) then

if ( not setWaveHeight ( data ) ) then

outputChatBox ( "Error setting wave height.", source, 255, 0, 0 )

action = nil

else

mdata = data

end

else

action = nil

end

if ( action ~= nil ) then aAction ( "server", action, source, false, mdata, mdata2 ) end

return true

end

outputChatBox ( "Access denied for '"..tostring ( action ).."'", source, 255, 168, 0 )

return false

end )

addEvent ( "aMessage", true )

addEventHandler ( "aMessage", _root, function ( action, data )

if checkClient( false, source, 'aMessage', action ) then return end

if ( action == "new" ) then

local time = getRealTime()

local id = #aReports + 1

aReports[id] = {}

aReports[id].author = getPlayerName ( source )

aReports[id].category = tostring ( data.category )

aReports[id].subject = tostring ( data.subject )

aReports[id].text = tostring ( data.message )

aReports[id].time = string.format( '%04d-%02d-%02d %02d:%02d', time.year + 1900, time.month + 1, time.monthday, time.hour, time.minute )

aReports[id].read = false

-- PM all admins to say a new message has arrived

for _, p in ipairs ( getElementsByType ( "player" ) ) do

if ( hasObjectPermissionTo ( p, "general.adminpanel" ) ) then

outputChatBox( "New Admin message from " .. aReports[id].author .. " (" .. aReports[id].subject .. ")", p, 255, 0, 0 )

end

end

-- Keep message count no greater that 'maxmsgs'

while #aReports > g_Prefs.maxmsgs do

table.remove( aReports, 1 )

end

end

if ( hasObjectPermissionTo ( source, "general.adminpanel" ) ) then

if ( action == "get" ) then

triggerClientEvent ( source, "aMessage", source, "get", aReports )

elseif ( action == "read" ) then

if ( aReports[data] ) then

aReports[data].read = true

end

elseif ( action == "delete" ) then

if ( aReports[data] ) then

table.remove ( aReports, data )

end

triggerClientEvent ( source, "aMessage", source, "get", aReports )

else

action = nil

end

end

for id, p in ipairs ( getElementsByType ( "player" ) ) do

if ( hasObjectPermissionTo ( p, "general.adminpanel" ) ) then triggerEvent ( "aSync", p, "messages" ) end

end

end )

addEvent ( "aBans", true )

addEventHandler ( "aBans", _root, function ( action, data )

if checkClient( "command."..action, source, 'aBans', action ) then return end

if ( hasObjectPermissionTo ( source, "command."..action ) ) then

local mdata = ""

local more = ""

if ( action == "banip" ) then

mdata = data

if ( not addBan ( data,nil,nil,source ) ) then

action = nil

end

elseif ( action == "banserial" ) then

mdata = data

if ( isValidSerial ( data ) ) then

if ( not addBan ( nil,nil, string.upper ( data ),source ) ) then

action = nil

end

else

outputChatBox ( "Error - Invalid serial", source, 255, 0, 0 )

action = nil

end

elseif ( action == "unbanip" ) then

mdata = data

action = nil

for i,ban in ipairs(getBans ()) do

if getBanIP(ban) == data then

action = removeBan ( ban, source )

end

end

elseif ( action == "unbanserial" ) then

mdata = data

action = nil

for i,ban in ipairs(getBans ()) do

if getBanSerial(ban) == string.upper(data) then

action = removeBan ( ban, source )

end

end

else

action = nil

end

if ( action ~= nil ) then

aAction ( "bans", action, source, false, mdata, more )

triggerEvent ( "aSync", source, "sync", "bansdirty" )

end

return true

end

outputChatBox ( "Access denied for '"..tostring ( action ).."'", source, 255, 168, 0 )

return false

end )

addEvent ( "aExecute", true )

addEventHandler ( "aExecute", _root, function ( action, echo )

if checkClient( "command.execute", source, 'aExecute', action ) then return end

if ( hasObjectPermissionTo ( source, "command.execute" ) ) then

local result = loadstring("return " .. action)()

if ( echo == true ) then

local restring = ""

if ( type ( result ) == "table" ) then

for k,v in pairs ( result ) do restring = restring..tostring ( v )..", " end

restring = string.sub(restring,1,-3)

restring = "Table ("..restring..")"

elseif ( type ( result ) == "userdata" ) then

restring = "Element ("..getElementType ( result )..")"

else

restring = tostring ( result )

end

outputChatBox( "Command executed! Result: " ..restring, source, 0, 0, 255 )

end

outputServerLog ( "ADMIN: "..getAdminNameForLog ( source ).." executed command: "..action )

end

end )

addEvent ( "aAdminChat", true )

addEventHandler ( "aAdminChat", _root, function ( chat )

if checkClient( true, source, 'aAdminChat' ) then return end

for id, player in ipairs(getElementsByType("player")) do

if ( aPlayers[player]["chat"] ) then

triggerClientEvent ( player, "aClientAdminChat", source, chat )

end

end

end )

addEventHandler('onElementDataChange', root,

function(dataName, oldValue )

if getElementType(source)=='player' and checkClient( false, source, 'onElementDataChange', dataName ) then

setElementData( source, dataName, oldValue )

return

end

end

)

-- returns true if there is trouble

function checkClient(checkAccess,player,...)

if client and client ~= player and g_Prefs.securitylevel >= 2 then

local desc = table.concat({...}," ")

local ipAddress = getPlayerIP(client)

outputDebugString( "Admin security - Client/player mismatch from " .. tostring(ipAddress) .. " (" .. tostring(desc) .. ")", 1 )

cancelEvent()

if g_Prefs.clientcheckban then

local reason = "admin checkClient (" .. tostring(desc) .. ")"

addBan ( ipAddress, nil, nil, getRootElement(), reason )

end

return true

end

if checkAccess and g_Prefs.securitylevel >= 1 then

if type(checkAccess) == 'string' then

if hasObjectPermissionTo ( player, checkAccess ) then

return false -- Access ok

end

if hasObjectPermissionTo ( player, "general.adminpanel" ) then

outputDebugString( "Admin security - Client does not have required rights ("..checkAccess.."). " .. tostring(ipAddress) .. " (" .. tostring(desc) .. ")" )

return true -- Low risk fail - Can't do specific command, but has access to admin panel

end

end

if not hasObjectPermissionTo ( player, "general.adminpanel" ) then

local desc = table.concat({...}," ")

local ipAddress = getPlayerIP(client or player)

outputDebugString( "Admin security - Client without admin panel rights trigged an admin panel event. " .. tostring(ipAddress) .. " (" .. tostring(desc) .. ")", 2 )

return true -- High risk fail - No access to admin panel

end

end

return false

end

function checkNickOnChange(old, new)

if aNickChangeTime[source] and aNickChangeTime[source] + tonumber(get("*nickChangeDelay")) > getTickCount() then

cancelEvent()

outputChatBox("You can only change your name once every "..(tonumber(get("*nickChangeDelay"))/1000).." seconds", source, 255, 0, 0)

return false

else

aNickChangeTime[source] = getTickCount()

end

end

addEventHandler("onPlayerChangeNick", root, checkNickOnChange)

Link to comment

aca paso los dos que creo que sirven espero em ayuden....

PORFAVOR

function aPlayerInitialize ( player )

local serial = getPlayerSerial ( player )

if ( not isValidSerial ( serial ) ) then

outputChatBox ( "ERROR: "..getPlayerName ( player ).." - Invalid Serial." )

kickPlayer ( player, "Invalid Serial" )

else

bindKey ( player, "p", "down", "admin" )

callRemote ( "https://community.multitheftauto.com/mta/verify.php", aPlayerSerialCheck, player, getPlayerUserName ( player ), getPlayerSerial ( player ) )

aPlayers[player] = {}

aPlayers[player]["country"] = getPlayerCountry ( player )

aPlayers[player]["money"] = getPlayerMoney ( player )

end

end

elseif ( action == "setgroup" ) then

local account = getPlayerAccount ( player )

if ( not isGuestAccount ( account ) ) then

local group = aclGetGroup ( "Admin" )

if ( group ) then

if ( data == true ) then

aclGroupAddObject ( group, "user."..getAccountName ( account ) )

bindKey ( player, "p", "down", "admin" )

action = "admina"

elseif ( data == false ) then

unbindKey ( player, "p", "down", "admin" )

aclGroupRemoveObject ( group, "user."..getAccountName ( account ) )

aPlayers[player]["chat"] = false

action = "adminr"

end

for id, p in ipairs ( getElementsByType ( "player" ) ) do

if ( hasObjectPermissionTo ( p, "general.adminpanel" ) ) then triggerEvent ( "aSync", p, "admins" ) end

end

else

outputChatBox ( "Error - Admin group not initialized. Please reinstall admin resource.", source, 255, 0 ,0 )

end

Link to comment
  • Recently Browsing   0 members

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