Enargy, Posted October 13, 2015 Share Posted October 13, 2015 Hola, Estoy haciendo un sistema de chat personalizado que cancela el mensaje y envía el mensaje, elemento, tipo de mensaje, mediante un triggeo. En sí; no estoy usando onPlayerChat, solo lo hago para cancelar el mensaje y enviar un triggeo global(triggerEvent), uso un addCommandHandler para enviar el mensaje function isCommand(player, text) local c1, c2 = string.find(text, "/") if not c1 or c1 ~= 1 then return false end text = text:sub(2, #text) if #text:gsub("%s", "") == 0 then return true end local command = text:split(" ") local argList = "" for i=2, #command do argList = argList.." "..command[i] end if not hasObjectPermissionTo(player, "command.".. text, true) then return end executeCommandHandler(command[1], player, argList) triggerClientEvent(player, "onClientExecuteCommand", player, command, argList) return true end function string:split(sep) local sep, fields = sep or ":", {} local pattern = string.format("([^%s]+)", sep) self:gsub(pattern, function(c) fields[#fields+1] = c end) return fields end Este código me permite ejecutar comandos existente; pero solo comandos que están dentro de un script pero al momento de usarlo con comandos de MTA como debugscript, nick, whois, etc... No funciona. Así trabaja mi código: addEvent("onPlayerSendMessage", true) function chatMessage( player, type, message ) if isCommand(player,message) then return end if type == "Global" then --bla bla bla end end addEventHandler( "onPlayerSendMessage", root, chatMessage) Link to comment
Tomas Posted October 13, 2015 Share Posted October 13, 2015 No hay forma de trabajar con los comandos default de MTA.. al menos que yo sepa. Link to comment
Razor64 Posted October 14, 2015 Share Posted October 14, 2015 No se si comprendi bien lo que quieres, pero a lo que entendi podria servirte lo siguiente... function onPlayerChat(mensaje, tipo_mensaje) triggerEvent("onPlayerSendMessage", source, mensaje, tipo_mensaje) -- Aqui se envia el trigger con el tipo de mensaje y el mensaje, para tu crear un mensaje personalizado. cancelEvent() -- Y con esto se cancela el envio del mensaje predeterminado. end addEventHandler( "onPlayerChat", getRootElement(), onPlayerChat ) addEvent("onPlayerSendMessage", true) function chatMessage( mensaje, tipo_mensaje ) if isCommand(source, mensaje) then return end if (tipo_mensaje == 0) then -- Si el player envia un mensaje comun (precionando la tecla T) saldra un 'outputChatBox' con tag de 'Global'. outputChatBox("#990000[Global]#FFFFFF "..getPlayerName(source).."#FFFFFF: "..mensaje, root, 255, 255, 255, true) end end addEventHandler( "onPlayerSendMessage", root, chatMessage) function isCommand(player, text) local c1, c2 = string.find(text, "/") if not c1 or c1 ~= 1 then return false end text = text:sub(2, #text) if #text:gsub("%s", "") == 0 then return true end local command = text:split(" ") local argList = "" for i=2, #command do argList = argList.." "..command[i] end if not hasObjectPermissionTo(player, "command.".. text, true) then return end executeCommandHandler(command[1], player, argList) triggerClientEvent(player, "onClientExecuteCommand", player, command, argList) return true end function string:split(sep) local sep, fields = sep or ":", {} local pattern = string.format("([^%s]+)", sep) self:gsub(pattern, function(c) fields[#fields+1] = c end) return fields end Con esto cancelaras el mensaje default que se envia al precionar la tecla T y en su lugar saldra un mensaje mas personalizado, no se bien por que requieres de un trigger yo en hubiese hecho todo de forma directa, pero de igual manera sirve aun que es mas largo :v si tienes alguna al respecto hazla saber. Link to comment
Enargy, Posted October 14, 2015 Author Share Posted October 14, 2015 No se si comprendi bien lo que quieres, pero a lo que entendi podria servirte lo siguiente... function onPlayerChat(mensaje, tipo_mensaje) triggerEvent("onPlayerSendMessage", source, mensaje, tipo_mensaje) -- Aqui se envia el trigger con el tipo de mensaje y el mensaje, para tu crear un mensaje personalizado. cancelEvent() -- Y con esto se cancela el envio del mensaje predeterminado. end addEventHandler( "onPlayerChat", getRootElement(), onPlayerChat ) addEvent("onPlayerSendMessage", true) function chatMessage( mensaje, tipo_mensaje ) if isCommand(source, mensaje) then return end if (tipo_mensaje == 0) then -- Si el player envia un mensaje comun (precionando la tecla T) saldra un 'outputChatBox' con tag de 'Global'. outputChatBox("#990000[Global]#FFFFFF "..getPlayerName(source).."#FFFFFF: "..mensaje, root, 255, 255, 255, true) end end addEventHandler( "onPlayerSendMessage", root, chatMessage) function isCommand(player, text) local c1, c2 = string.find(text, "/") if not c1 or c1 ~= 1 then return false end text = text:sub(2, #text) if #text:gsub("%s", "") == 0 then return true end local command = text:split(" ") local argList = "" for i=2, #command do argList = argList.." "..command[i] end if not hasObjectPermissionTo(player, "command.".. text, true) then return end executeCommandHandler(command[1], player, argList) triggerClientEvent(player, "onClientExecuteCommand", player, command, argList) return true end function string:split(sep) local sep, fields = sep or ":", {} local pattern = string.format("([^%s]+)", sep) self:gsub(pattern, function(c) fields[#fields+1] = c end) return fields end Con esto cancelaras el mensaje default que se envia al precionar la tecla T y en su lugar saldra un mensaje mas personalizado, no se bien por que requieres de un trigger yo en hubiese hecho todo de forma directa, pero de igual manera sirve aun que es mas largo :v si tienes alguna al respecto hazla saber. En teoría no trabaja así mi código, solo cancelo el evento, el triggeo se hace por comando. addEventHandler( "onPlayerChat", root, function() cancelEvent() end ) function playerChat( player, type, ... ) local messageType = type local message = table.concat({...}, " ") if isCommand( player, message ) then -- Si el texto es conocido como un comando existente. return end triggerEvent( "onPlayerSendMessage", root, player, messageType, message ) end cmd = { {"Global"}, {"Clan"}, {"Local"}, } for i = 1, #cmd do addCommandHandler( cmd[i][1], playerChat ) end Anyway, de todas formas gracias. Link to comment
UserToDelete Posted October 16, 2015 Share Posted October 16, 2015 Los comandos de MTA por defecto no se pueden modificar o ver, por razones de seguridad, son "MTA Hardcored Commands"o algo asi Link to comment
Recommended Posts