Jump to content

[Ayuda] No se ejecutan comandos de MTA.


Enargy,

Recommended Posts

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

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
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
  • Recently Browsing   0 members

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