Jump to content

Ajuda para otimizar


Recommended Posts

function onPlayerCommand(command)
	if command == "msg" then
		cancelEvent()
		outputChatBox("Use o comando /pm em vez deste comando", source, 255, 0, 0)
		playSoundFrontEnd(source, 40)
	end
end
addEventHandler("onPlayerCommand", root, onPlayerCommand)

local blockPM = {}
local replyPM = {}
local timePM = {}
local timeReply = {}

function privateMessage(player, command, target, ...)
	local target = getPlayerFromPartialName(target)
	if timePM[player] then
		local tempo = math.floor(getTimerDetails(timePM[player])/1000) 
		outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEspere "..tempo.." segundos para enviar outra mensagem", player, 255, 255, 255, true)
		playSoundFrontEnd(player, 40)
		return
	end
	if blockPM[target] then
		outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEste jogador bloqueou o recebimento de mensagens", player, 255, 255, 255, true)
		playSoundFrontEnd(player, 40)
		return
	end
	if target == player then
		outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFVocê não pode enviar mensagem para si mesmo", player, 255, 255, 255, true)
		playSoundFrontEnd(player, 40)
		return
	end
	local text = table.concat({...}, " ")
	if text ~= "" then
		if isElement(target) then
			outputChatBox("#0080FF[PM] recebida de #FFFFFF"..getPlayerName(player).."#FFFFFF: "..text, target, 255, 255, 255, true)
			outputChatBox("#0080FF[PM] para #FFFFFF"..getPlayerName(target).."#FFFFFF: "..text, player, 255, 255, 255, true)
			replyPM[player] = target
			replyPM[target] = player
			triggerClientEvent(target, "playNotifyPM", resourceRoot)
			timePM[player] = setTimer(function()
				timePM[player] = false
			end, 3000, 1, player)
		else
			outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFO jogador especificado não foi encontrado", player, 255, 255, 255, true)
		end
	else
		outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFSYNTAX: /pm <jogador> <mensagem>", player, 255, 255, 255, true)
	end
end
addCommandHandler("pm", privateMessage)

function replyMessage(player, command, ...)
	local target = replyPM[player]
	if timeReply[player] then
		local tempo = math.floor(getTimerDetails(timeReply[player])/1000)
		outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEspere "..tempo.." segundos para responder outra mensagem", player, 255, 255, 255, true)
		playSoundFrontEnd(player, 40)
		return
	end
	if blockPM[target] then
		outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEste jogador bloqueou o recebimento de mensagens", player, 255, 255, 255, true)
		playSoundFrontEnd(player, 40)
		return
	end
	local text = table.concat({...}, " ")
	if text ~= "" then
		if isElement(target) then
			outputChatBox("#0080FF[PM] recebida de #FFFFFF"..getPlayerName(player).."#FFFFFF: "..text, target, 255, 255, 255, true)
			outputChatBox("#0080FF[PM] para #FFFFFF"..getPlayerName(target).."#FFFFFF: "..text, player, 255, 255, 255, true)
			triggerClientEvent(target, "playNotifyPM", resourceRoot)
			timeReply[player] = setTimer(function()
				timeReply[player] = false
			end, 3000, 1, player)
			else
			outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFVocê ainda não recebeu mensagem de ninguém", player, 255, 255, 255, true)
		end
	else
		outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFSYNTAX: /re <mensagem>", player, 255, 255, 255, true)
	end
end
addCommandHandler("re", replyMessage)

function blockPrivateMessage(player)
	if not blockPM[player] then
		blockPM[player] = true
		outputChatBox("#0080FF[PM] #FFFFFFVocê bloqueou o recebimento de mensagens", player, 255, 255, 255, true)
		playSoundFrontEnd(player, 1)
	else
		blockPM[player] = false
		outputChatBox("#0080FF[PM] #FFFFFFVocê desbloqueou o recebimento de mensagens", player, 255, 255, 255, true)
		playSoundFrontEnd(player, 40)
	end
end
addCommandHandler("blockpm", blockPrivateMessage)

function onPlayerQuit()
	if blockPM[source] then
		blockPM[source] = nil
	elseif replyPM[source] then
		replyPM[source] = nil
	elseif timePM[source] then
		timePM[source] = nil
	end
end
addEventHandler("onPlayerQuit", root, onPlayerQuit)

function getPlayerFromPartialName(name)
    local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil
    if name then
        for _, player in ipairs(getElementsByType("player")) do
            local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower()
            if name_:find(name, 1, true) then
                return player
            end
        end
    end
end

Olá pessoal, hoje eu fiz um sistema de mensagem privada, gostaria de saber se tem algo que eu possa otimizar para melhor fluir do script, desde já agradeço.

Link to comment
  • Other Languages Moderators

Você poderia usar o mesmo timePM para a resposta também, já que é o mesmo período de espera e também é considerado outra mensagem enviada. Já que o objetivo é impedir o Spam.
Não vejo necessidade de um timer para responder e outro timer para mandar mensagens.

Se você gosta de um código perfeito, sugiro que corrija a indentação da linha 75 no else. E a última função não está indentada, apenas espaçada.

Edited by Lord Henry
  • Thanks 1
Link to comment
2 hours ago, Lord Henry said:

Você poderia usar o mesmo timePM para a resposta também, já que é o mesmo período de espera e também é considerado outra mensagem enviada. Já que o objetivo é impedir o Spam.
Não vejo necessidade de um timer para responder e outro timer para mandar mensagens.

Se você gosta de um código perfeito, sugiro que corrija a indentação da linha 75 no else. E a última função não está indentada, apenas espaçada.

Obrigado @Lord Henry pelas dicas.

Link to comment
function onPlayerCommand(command)
	if command == "msg" then
		cancelEvent()
		outputChatBox("Use o comando /pm em vez deste comando",source,255,0,0)
		playSoundFrontEnd(source,40)
	end
end
addEventHandler("onPlayerCommand",root,onPlayerCommand)
privateMessage = {
	players = {},
	getPlayer = function(playerPart)
			local pl = getPlayerFromName(playerPart)
			if isElement(pl) then
				return pl
			else
				for i,v in ipairs(getElementsByType("player")) do
					if (string.find(getPlayerName(v):lower(),playerPart:lower())) then
						return v
					elseif (string.find(string.gsub(getPlayerName(v),"#%x%x%x%x%x%x",""):lower(),playerPart:lower())) then
						return v
					end
				end
			end
		end,
	start = function(player)
			privateMessage.players[player] = {
				delay = false,
				replyPlayer = false,
				blockPlayer = {}
			}
		end,
	stop = function(player)
			privateMessage.players[player] = nil
		end,
	send = function(player,cmd,toPlayer,...)
			local pmMessage = nil for k,v in pairs({...}) do if pmMessage == nil then pmMessage = v else pmMessage = pmMessage.." "..v end end
			local toPlayer = privateMessage.getPlayer(toPlayer)
			if not toPlayer or pmMessage == nil or pmMessage=="" then
				return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFSYNTAX: /pm <jogador> <mensagem>",player,255,255,255,true)
			end
			if toPlayer == player then
				playSoundFrontEnd(player,40)
				return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFVocê não pode enviar mensagem para si mesmo",player,255,255,255,true)
			end
			if privateMessage.players[player].delay then
				local tempo = math.floor(getTimerDetails(privateMessage.players[player].delay)/1000)
				playSoundFrontEnd(player,40)
				return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEspere "..tempo.." segundos para enviar outra mensagem",player,255,255,255,true)
			end
			if privateMessage.players[toPlayer].blockPlayer[player] then
				playSoundFrontEnd(player,40)
				return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEste jogador bloqueou o recebimento de mensagens",player,255,255,255,true)
			end
			outputChatBox("#0080FF[PM] recebida de #FFFFFF"..getPlayerName(player).."#FFFFFF: "..pmMessage,toPlayer,255,255,255,true)
			outputChatBox("#0080FF[PM] para #FFFFFF"..getPlayerName(toPlayer).."#FFFFFF: "..pmMessage,player,255,255,255,true)
			privateMessage.players[toPlayer].replyPlayer = player
			privateMessage.players[player].replyPlayer = toPlayer
			triggerClientEvent(toPlayer,"playNotifyPM",resourceRoot)
			privateMessage.players[player].delay = setTimer(
				function(player)
					privateMessage.players[player].delay = false
				end
			,3000,1,player)
		end,
	reply = function(player,cmd,...)
			local pmMessage = nil for k,v in pairs({...}) do if pmMessage == nil then pmMessage = v else pmMessage = pmMessage.." "..v end end
			local toPlayer = privateMessage.players[player].replyPlayer
			if not isElement(toPlayer) then
				return outputChatBox("#0080FF[PM] #FF1717ERROR: player nao encontrado",player,255,255,255,true)
			end
			if pmMessage == nil or pmMessage=="" then
				return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFSYNTAX: /re <mensagem>",player,255,255,255,true)
			end
			if privateMessage.players[player].delay then
				local tempo = math.floor(getTimerDetails(privateMessage.players[player].delay)/1000)
				playSoundFrontEnd(player,40)
				return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEspere "..tempo.." segundos para enviar outra mensagem",player,255,255,255,true)
			end
			if privateMessage.players[toPlayer].blockPlayer[player] then
				playSoundFrontEnd(player,40)
				return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEste jogador bloqueou o recebimento de mensagens",player,255,255,255,true)
			end
			outputChatBox("#0080FF[PM] recebida de #FFFFFF"..getPlayerName(player).."#FFFFFF: "..pmMessage,toPlayer,255,255,255,true)
			outputChatBox("#0080FF[PM] para #FFFFFF"..getPlayerName(toPlayer).."#FFFFFF: "..pmMessage,player,255,255,255,true)
			privateMessage.players[toPlayer].replyPlayer = player
			privateMessage.players[player].replyPlayer = toPlayer
			triggerClientEvent(toPlayer,"playNotifyPM",resourceRoot)
			privateMessage.players[player].delay = setTimer(
				function(player)
					privateMessage.players[player].delay = false
				end
			,3000,1,player)
		end,
	block = function(player,cmd,toPlayer)
			local toPlayer = privateMessage.getPlayer(toPlayer)
			if not toPlayer then
				return outputChatBox("#0080FF[PM] #FF1717ERROR: player nao encontrado",player,255,255,255,true)
			end
			if not privateMessage.players[player].blockPlayer[toPlayer] then
				privateMessage.players[player].blockPlayer[toPlayer] = true
				return outputChatBox("#0080FF[PM] #FFFFFFVoce deu pmblock no jogador "..getPlayerName(toPlayer),player,255,255,255,true)
			end
		end,
	unblock = function(player,cmd,toPlayer)
			local toPlayer = privateMessage.getPlayer(toPlayer)
			if not toPlayer then
				return outputChatBox("#0080FF[PM] #FF1717ERROR: player nao encontrado",player,255,255,255,true)
			end
			if privateMessage.players[player].blockPlayer[toPlayer] then
				privateMessage.players[player].blockPlayer[toPlayer] = nil
				return outputChatBox("#0080FF[PM] #FFFFFFVoce deu unblock no jogador "..getPlayerName(toPlayer),player,255,255,255,true)
			end
		end,	
}
addCommandHandler("pmunblock",privateMessage.unblock)
addCommandHandler("pmblock",privateMessage.block)
addCommandHandler("pm",privateMessage.send)
addCommandHandler("re",privateMessage.reply)
for _,player in ipairs(getElementsByType("player")) do
	privateMessage.start(player)
end
addEventHandler("onPlayerJoin",root,function() privateMessage.start(source) end)
addEventHandler("onPlayerQuit",root,function() privateMessage.stop(source) end)

Se eu tivesse feito, meu código ficaria assim ;D

tenta tirar algo de util pra voce, ver se acha algo novo pra voce sei la fica avonts.

  • Thanks 1
Link to comment
53 minutes ago, Gw8 said:

function onPlayerCommand(command)
	if command == "msg" then
		cancelEvent()
		outputChatBox("Use o comando /pm em vez deste comando",source,255,0,0)
		playSoundFrontEnd(source,40)
	end
end
addEventHandler("onPlayerCommand",root,onPlayerCommand)
privateMessage = {
	players = {},
	getPlayer = function(playerPart)
			local pl = getPlayerFromName(playerPart)
			if isElement(pl) then
				return pl
			else
				for i,v in ipairs(getElementsByType("player")) do
					if (string.find(getPlayerName(v):lower(),playerPart:lower())) then
						return v
					elseif (string.find(string.gsub(getPlayerName(v),"#%x%x%x%x%x%x",""):lower(),playerPart:lower())) then
						return v
					end
				end
			end
		end,
	start = function(player)
			privateMessage.players[player] = {
				delay = false,
				replyPlayer = false,
				blockPlayer = {}
			}
		end,
	stop = function(player)
			privateMessage.players[player] = nil
		end,
	send = function(player,cmd,toPlayer,...)
			local pmMessage = nil for k,v in pairs({...}) do if pmMessage == nil then pmMessage = v else pmMessage = pmMessage.." "..v end end
			local toPlayer = privateMessage.getPlayer(toPlayer)
			if not toPlayer or pmMessage == nil or pmMessage=="" then
				return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFSYNTAX: /pm <jogador> <mensagem>",player,255,255,255,true)
			end
			if toPlayer == player then
				playSoundFrontEnd(player,40)
				return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFVocê não pode enviar mensagem para si mesmo",player,255,255,255,true)
			end
			if privateMessage.players[player].delay then
				local tempo = math.floor(getTimerDetails(privateMessage.players[player].delay)/1000)
				playSoundFrontEnd(player,40)
				return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEspere "..tempo.." segundos para enviar outra mensagem",player,255,255,255,true)
			end
			if privateMessage.players[toPlayer].blockPlayer[player] then
				playSoundFrontEnd(player,40)
				return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEste jogador bloqueou o recebimento de mensagens",player,255,255,255,true)
			end
			outputChatBox("#0080FF[PM] recebida de #FFFFFF"..getPlayerName(player).."#FFFFFF: "..pmMessage,toPlayer,255,255,255,true)
			outputChatBox("#0080FF[PM] para #FFFFFF"..getPlayerName(toPlayer).."#FFFFFF: "..pmMessage,player,255,255,255,true)
			privateMessage.players[toPlayer].replyPlayer = player
			privateMessage.players[player].replyPlayer = toPlayer
			triggerClientEvent(toPlayer,"playNotifyPM",resourceRoot)
			privateMessage.players[player].delay = setTimer(
				function(player)
					privateMessage.players[player].delay = false
				end
			,3000,1,player)
		end,
	reply = function(player,cmd,...)
			local pmMessage = nil for k,v in pairs({...}) do if pmMessage == nil then pmMessage = v else pmMessage = pmMessage.." "..v end end
			local toPlayer = privateMessage.players[player].replyPlayer
			if not isElement(toPlayer) then
				return outputChatBox("#0080FF[PM] #FF1717ERROR: player nao encontrado",player,255,255,255,true)
			end
			if pmMessage == nil or pmMessage=="" then
				return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFSYNTAX: /re <mensagem>",player,255,255,255,true)
			end
			if privateMessage.players[player].delay then
				local tempo = math.floor(getTimerDetails(privateMessage.players[player].delay)/1000)
				playSoundFrontEnd(player,40)
				return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEspere "..tempo.." segundos para enviar outra mensagem",player,255,255,255,true)
			end
			if privateMessage.players[toPlayer].blockPlayer[player] then
				playSoundFrontEnd(player,40)
				return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEste jogador bloqueou o recebimento de mensagens",player,255,255,255,true)
			end
			outputChatBox("#0080FF[PM] recebida de #FFFFFF"..getPlayerName(player).."#FFFFFF: "..pmMessage,toPlayer,255,255,255,true)
			outputChatBox("#0080FF[PM] para #FFFFFF"..getPlayerName(toPlayer).."#FFFFFF: "..pmMessage,player,255,255,255,true)
			privateMessage.players[toPlayer].replyPlayer = player
			privateMessage.players[player].replyPlayer = toPlayer
			triggerClientEvent(toPlayer,"playNotifyPM",resourceRoot)
			privateMessage.players[player].delay = setTimer(
				function(player)
					privateMessage.players[player].delay = false
				end
			,3000,1,player)
		end,
	block = function(player,cmd,toPlayer)
			local toPlayer = privateMessage.getPlayer(toPlayer)
			if not toPlayer then
				return outputChatBox("#0080FF[PM] #FF1717ERROR: player nao encontrado",player,255,255,255,true)
			end
			if not privateMessage.players[player].blockPlayer[toPlayer] then
				privateMessage.players[player].blockPlayer[toPlayer] = true
				return outputChatBox("#0080FF[PM] #FFFFFFVoce deu pmblock no jogador "..getPlayerName(toPlayer),player,255,255,255,true)
			end
		end,
	unblock = function(player,cmd,toPlayer)
			local toPlayer = privateMessage.getPlayer(toPlayer)
			if not toPlayer then
				return outputChatBox("#0080FF[PM] #FF1717ERROR: player nao encontrado",player,255,255,255,true)
			end
			if privateMessage.players[player].blockPlayer[toPlayer] then
				privateMessage.players[player].blockPlayer[toPlayer] = nil
				return outputChatBox("#0080FF[PM] #FFFFFFVoce deu unblock no jogador "..getPlayerName(toPlayer),player,255,255,255,true)
			end
		end,	
}
addCommandHandler("pmunblock",privateMessage.unblock)
addCommandHandler("pmblock",privateMessage.block)
addCommandHandler("pm",privateMessage.send)
addCommandHandler("re",privateMessage.reply)
for _,player in ipairs(getElementsByType("player")) do
	privateMessage.start(player)
end
addEventHandler("onPlayerJoin",root,function() privateMessage.start(source) end)
addEventHandler("onPlayerQuit",root,function() privateMessage.stop(source) end)

Se eu tivesse feito, meu código ficaria assim ;D

tenta tirar algo de util pra voce, ver se acha algo novo pra voce sei la fica avonts.

Muito obrigado, vou rever com calma pra tentar sugar algo kk.

Link to comment

Você podia ter explicado o que exatamente precisa de otimização, pelo que eu vi, não tem nada que você deva se preocupar em relação à performance. Talvez você esteja falando sobre a idéia do seu código? Eu achei meio que sem necessidade o comando /re pra responder sendo que poderia ser usado /pm independente de ser uma resposta de uma mp. Mas talvez seja por não precisar do jogador menssagem que é do /pm. Eu pessoalmente faria um painel pra isso, embora o que possa ter te motivado seja ter uma experiência nova criando um código seu.

Sobre o timer eu também achei um pouco mais longo. Digamos que o jogador responda apenas com 'ok', então certamente ele teria que esperar um pouco pra responder.

Acho até que o código tá bem otimizado dentro do possível, tirando que você podia ter usado uma só tabela pros timers que o Lord Henry já mencionou.

Edit: percebi que você usou resourceRoot pra passar no triggerClientEvent, o que mostra que você se preocupou em não definir sourceElement como root. E também as variáveis locais.

Edited by DNL291
  • Thanks 1
Link to comment
12 hours ago, DNL291 said:

Você podia ter explicado o que exatamente precisa de otimização, pelo que eu vi, não tem nada que você deva se preocupar em relação à performance. Talvez você esteja falando sobre a idéia do seu código? Eu achei meio que sem necessidade o comando /re pra responder sendo que poderia ser usado /pm independente de ser uma resposta de uma mp. Mas talvez seja por não precisar do jogador menssagem que é do /pm. Eu pessoalmente faria um painel pra isso, embora o que possa ter te motivado seja ter uma experiência nova criando um código seu.

Sobre o timer eu também achei um pouco mais longo. Digamos que o jogador responda apenas com 'ok', então certamente ele teria que esperar um pouco pra responder.

Acho até que o código tá bem otimizado dentro do possível, tirando que você podia ter usado uma só tabela pros timers que o Lord Henry já mencionou.

Edit: percebi que você usou resourceRoot pra passar no triggerClientEvent, o que mostra que você se preocupou em não definir sourceElement como root. E também as variáveis locais.

@DNL291 Na real foi pra ver se realmente o código estava bem otimizado, eu corrigi o código com essas dicas, não entendi a parte do ´Edit´ que você disse.

  • Like 1
Link to comment
5 hours ago, MainSCR said:

@DNL291 Na real foi pra ver se realmente o código estava bem otimizado, eu corrigi o código com essas dicas, não entendi a parte do ´Edit´ que você disse.

Achei bem otimizado pra ser sincero. Como um scripter Lua há alguns anos, eu consigo às vezes julgar o quanto de conhecimento a pessoa tem em Lua olhando para um código dela, e se eu fizesse esse script seu, faria praticamente da mesma forma.

Sobre o "Edit", foi uma edição que fiz no meu comentário depois.

Uma pequena correção no seu código: nos setTimer's você passa o player como argumento, mas esqueceu de usá-lo na função.

Edited by DNL291
  • Thanks 1
Link to comment
1 hour ago, DNL291 said:

Achei bem otimizado pra ser sincero. Como um scripter Lua há alguns anos, eu consigo às vezes julgar o quanto de conhecimento a pessoa tem em Lua olhando para um código dela, e se eu fizesse esse script seu, faria praticamente da mesma forma.

Sobre o "Edit", foi uma edição que fiz no meu comentário depois.

Uma pequena correção no seu código: nos setTimer's você passa o player como argumento, mas esqueceu de usá-lo na função.

Ah verdade, já corrigi, muito obrigado @DNL291

Link to comment

Não sei se no MTA funcionaria a operação ternária, mas no SA-MP funciona.

 

function privateMessage(player, command, target, ...)
	local target = getPlayerFromPartialName(target)
	if timePM[player] then
		local tempo = math.floor(getTimerDetails(timePM[player])/1000)
		outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEspere "..tempo.." segundos para enviar outra mensagem", player, 255, 255, 255, true)
		playSoundFrontEnd(player, 40)
		return
	end
    outputChatBox(blockPM[target] ? "#0080FF[PM] #FF1717ERROR: #FFFFFFEste jogador bloqueou o recebimento de mensagens" : target == player ? "#0080FF[PM] #FF1717ERROR: #FFFFFFVocê não pode enviar mensagem para si mesmo" : "", player, 255, 255, 255, true)
	playSoundFrontEnd(player, 40)

	local text = table.concat({...}, " ")
	if text ~= "" then
		if !isElement(target) then outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFO jogador especificado não foi encontrado", player, 255, 255, 255, true)
		outputChatBox("#0080FF[PM] recebida de #FFFFFF"..getPlayerName(player).."#FFFFFF: "..text, target, 255, 255, 255, true)
		outputChatBox("#0080FF[PM] para #FFFFFF"..getPlayerName(target).."#FFFFFF: "..text, player, 255, 255, 255, true)
		replyPM[player] = target
		replyPM[target] = player
		triggerClientEvent(target, "playNotifyPM", resourceRoot)
		timePM[player] = setTimer(function() timePM[player] = false end, 3000, 1, player)			
	else
		outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFSYNTAX: /pm <jogador> <mensagem>", player, 255, 255, 255, true)
	end
end

 

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...