I can't create any commands.
#11
If you want to send a message to all players, you could use broadcast.
cRoot:Get():BroadcastChat()
Reply
Thanks given by:
#12
(09-12-2014, 05:59 AM)LO1ZB Wrote: Why do you use the same function for a Hook and a command?
It is called first from the hook, then you after sending the message to the player, you are returning "true", which means "hook successfully executed", if you want that the command get executed, you have to return "false".

I saw it on a wiki example.

In other words, i have no idea what that line of code does it seems, as i thought it was needed to make the command(s) work.
If i change true to false, it executes both commands, on just 1 command..

Painfully obvious by now i am a scripting noob!

(09-12-2014, 06:22 AM)Seadragon91 Wrote: If you want to send a message to all players, you could use broadcast.
cRoot:Get():BroadcastChat()

So in stead of this:

-- RollJoint:
function RollJoint(Player, j)
Player:SendMessage("§b" .. Player:GetName() .. " is rolling a joint.")
return false
end

change it to this: ?

-- RollJoint:
function RollJoint(Player, j)
cRoot:Get():BroadcastChat("§b" .. Player:GetName() .. " is rolling a joint.")
return false
end
Reply
Thanks given by:
#13
(09-12-2014, 07:15 AM)Lo_Pan Wrote: I saw it on a wiki example.

In other words, i have no idea what that line of code does it seems, as i thought it was needed to make the command(s) work.
If i change true to false, it executes both commands, on just 1 command..

Painfully obvious by now i am a scripting noob!

If you set return to true inside the function:
user send command -> enter hook -> enter function -> finish
set it to false:
user send command -> enter hook -> enter function -> enter command handler -> enter function again -> finish

You shouldn't use the same function for both, unless you know what you are doing. Wink
Reply
Thanks given by:
#14
(09-12-2014, 07:36 AM)LO1ZB Wrote: If you set return to true inside the function:
user send command -> enter hook -> enter function -> finish
set it to false:
user send command -> enter hook -> enter function -> enter command handler -> enter function again -> finish

You shouldn't use the same function for both, unless you know what you are doing. Wink

That's the problem, I have no idea what I'm doing!
I thought the code with the HOOK was part of the command.
If I change the name of that, it fails and I get a "(no name)" error in console.

So I am actually more confused now then 10 minutes ago!

Btw, sorry for hijacking Guandor's topic, but as I had the same problem (in the beginning at least) I thought making a new topic for it would be a bit overkill.
Reply
Thanks given by:
#15
(09-12-2014, 08:24 AM)Lo_Pan Wrote: That's the problem, I have no idea what I'm doing!
I thought the code with the HOOK was part of the command.
If I change the name of that, it fails and I get a "(no name)" error in console.

So I am actually more confused now then 10 minutes ago!

Btw, sorry for hijacking Guandor's topic, but as I had the same problem (in the beginning at least) I thought making a new topic for it would be a bit overkill.

When you change the name of the function, which is called in the hook, you have to create a function with that name. Wink
Reply
Thanks given by:
#16
(09-12-2014, 08:34 AM)LO1ZB Wrote: When you change the name of the function, which is called in the hook, you have to create a function with that name. Wink

Right, so, the name of the function in the hook is the same as the actuall function, which I have done but still it fails. See code bellow

The hook is PluginInfo and the function is PluginInfo, so that should be right then, right?!

-- This will initialize the plugin to the server.

function Initialize(Plugin)
        Plugin:SetName("STONED")
        Plugin:SetVersion(1)
        
        -- Hooks
        
        cPluginManager:AddHook(cPluginManager.HOOK_EXECUTE_COMMAND, PluginInfo);        
        cPluginManager:AddHook(cPluginManager.HOOK_EXECUTE_COMMAND, RollJoint);
        cPluginManager:AddHook(cPluginManager.HOOK_EXECUTE_COMMAND, SmokeJoint);       

        PLUGIN = Plugin
         
        -- Command Bindings
        
        cPluginManager.BindCommand("/pi", "STONED.pi", PluginInfo, " - display plugin version."); -- PluginInfo binding
        cPluginManager.BindCommand("/j", "STONED.j", RollJoint, " - player is rolling a joint."); -- RollJoint binding       
        cPluginManager.BindCommand("/l", "STONED.l", SmokeJoint, " - player is smoking a joint."); -- SmokeJoint binding
        
        LOG("Initialised " ..Plugin:GetName() .. " v." .. Plugin:GetVersion())
        return true
end

function OnDisable()
        LOG(PLUGIN:GetName() .. " is shutting down!")
end

-- Commands

-- PluginInfo
function PluginInfo(Player, pi)
        Player:SendMessage("§eSTONED v1.0.0.3")
        return false
end

-- RollJoint: 
function RollJoint(Player, j)
        cRoot:Get():BroadcastChat("§b" .. Player:GetName() .. " is rolling a joint.")
        return false
end

-- SmokeJoint:
function SmokeJoint(Player, l)
        cRoot:Get():BroadcastChat("§b" .. Player:GetName() .. " is smoking a joint.")
        return false
end
Reply
Thanks given by:
#17
function Initialize(Plugin)
        Plugin:SetName("STONED")
        Plugin:SetVersion(1)

        PLUGIN = Plugin
         
        -- Command Bindings
        
        cPluginManager.BindCommand("/pi", "STONED.pi", PluginInfo, " - display plugin version."); -- PluginInfo binding
        cPluginManager.BindCommand("/j", "STONED.j", RollJoint, " - player is rolling a joint."); -- RollJoint binding       
        cPluginManager.BindCommand("/l", "STONED.l", SmokeJoint, " - player is smoking a joint."); -- SmokeJoint binding
        
        LOG("Initialised " .. Plugin:GetName()  .. " v." .. Plugin:GetVersion())
        return true
end

function OnDisable()
        LOG(PLUGIN:GetName() .. " is shutting down!")
end

-- PluginInfo
function PluginInfo(Player)
        Player:SendMessage("§eSTONED v1.0.0.3")
        return true
end

-- RollJoint: 
function RollJoint(Player)
        cRoot:Get():BroadcastChat("§b" .. Player:GetName() .. " is rolling a joint.")
        return true
end

-- SmokeJoint:
function SmokeJoint(Player)
        cRoot:Get():BroadcastChat("§b" .. Player:GetName() .. " is smoking a joint.")
        return true
end
Reply
Thanks given by:
#18
Gentlemen, please post your code with [ shcode=lua ] tag, not the [ php ] tag. Thank you.
Reply
Thanks given by:
#19
Lo_Pan: to implement a command you don't need to use a hook at all. That hook is only for plugins that want to intercept **other plugins' commands** and modify or disable them. For normal command processing, just bind the command, nothing else.
Reply
Thanks given by:
#20
Your callback is wrong. The first parameter the command callback receives is the Split - the text that the player entered, split at each space. The second parameter is the cPlayer object.

-- PluginInfo
function PluginInfo(a_Split, a_Player)
        a_Player:SendMessage("§eSTONED v1.0.0.3")
        return true
end
 
-- RollJoint:
function RollJoint(a_Split, a_Player)
        if (a_Split[2] ~= nil) then
                -- The player gave us a parameter for the command:
                cRoot:Get():BroadcastChat("§b" .. a_Player:GetName() .. " is rolling a joint with an extra " .. a_Split[2] .. " inside.")
        else
                -- There was no parameter, so it's a simple joint:
                cRoot:Get():BroadcastChat("§b" .. a_Player:GetName() .. " is rolling a joint.")
        end
        return true
end
 
-- SmokeJoint:
function SmokeJoint(a_Split, a_Player)
        cRoot:Get():BroadcastChat("§b" .. a_Player:GetName() .. " is smoking a joint.")
        return true
end
Reply
Thanks given by:




Users browsing this thread: 17 Guest(s)