26.10.2009, 23:55
I guess I should have given an example
oh well, next suggestion. What about including a YSI style help system? I'm not 100% percent sure but public functions seem to be ok if you pass extra arguments, so you could change the local function calls from
to
without any compatibility problems. If you prefer it could be a compile option, but it shouldn't be necessary.
Then all that's needed is a function like
and if the scripters want, they can do stuff like
As long as they don't use the ZCMD_FunctionHelp function the ZCMD:command(playerid, params[]) format should work as before.

pawn Код:
CallLocalFunction(funcname, "is", playerid, cmdtext[pos])
pawn Код:
CallLocalFunction(funcname, "isi", playerid, cmdtext[pos], false)
Then all that's needed is a function like
pawn Код:
stock ZCMD_FunctionHelp(const playerid, const command[])
{
new funcname[MAX_COMM_FUNC_NAME] = "zcmd_";
for(new pos = 5; pos < sizeof(funcname) - 1 && command[pos - 5] > ' '; pos++) {
funcname[pos] = tolower(command[pos - 5]);
}
return CallLocalFunction(funcname, "isi", playerid, "\1", true);
}
pawn Код:
ZCMD:something(playerid, params[], bool:help)
{
if(help) {
SendClientMessage(playerid, 0x00FF00FF, "This command does something");
return 1;
}
// do something
return 1;
}
ZCMD:help(playerid, params[], bool:help)
{
if(help) {
SendClientMessage(playerid, 0x00FF00FF, "This command displays help");
} else if(isnull(params)) {
SendClientMessage(playerid, 0x00FF00FF, "Server info or something...");
} else if(!ZCMD_FunctionHelp(playerid, params)) {
SendClientMessage(playerid, 0x00FF00FF, "Unknown command. Type /commands for a list of commands");
}
return 1;
}