Xorifelse
I'd love to elaborate about discussions...........
- Reaction score
- 87
I'm trying to make a command system but I'm stuck on something.
The reason is because you're not allowed to have "code" arrays.
Now I need a work around on this issue, otherwise the script doesnt know which code to execute for which command.
This is how I intended to make commands:
Does anyone have a workaround this issue?
The reason is because you're not allowed to have "code" arrays.
Now I need a work around on this issue, otherwise the script doesnt know which code to execute for which command.
JASS:
library Commands requires UserData, Triggers
globals
constant string COMMANDS_PREFIX = "-"
endglobals
struct command
trigger t
string command
string toExecute
static method onCommandEvent takes nothing returns nothing
local command c = GetTriggerData( GetTriggeringTrigger() )
local integer i = StringLength( COMMANDS_PREFIX )
local integer l = StringLength( c.command )
local string s = GetEventPlayerChatString()
local string a = ""
if SubString( s, i, i + l ) == c.command then
// It all works until here..
// Since I can't have code arrays, the only 2 ways I can think of is a "return bug", and a ExecuteFunc( "str" )
// However, for the return bug I need I2H, and ExecuteFunc is a bit.. not easy for the end user.
endif
endmethod
endstruct
function registerCommandForUser takes user u, string cmdstr, string toExecute returns nothing
local command cmd = 0
if u.isPlayingUser then
set cmd. = command.create()
set cmd.t = NewTrigger()
set cmd.command = cmdstr
set cmd.toExecute = toExecute
call SetTriggerData( cmd.t, cmd )
call TriggerRegisterPlayerChatEvent( cmd.t, u.p, COMMANDS_PREFIX + cmdstr, false )
call TriggerAddAction( cmd.t, function command.onCommandEvent )
endif
endfunction
function registerCommand takes string cmdstr, string toExecute returns nothing
local command cmd = command.create()
local user u = 0
set cmd.t = NewTrigger()
set cmd.command = cmdstr
set cmd.toExecute = toExecute
call SetTriggerData( cmd.t, cmd )
loop
exitwhen integer(u) > 11
if u.isPlaying then
call TriggerRegisterPlayerChatEvent( cmd.t, u.p, COMMANDS_PREFIX + cmdstr, false )
endif
set u = integer(u) + 1
endloop
call TriggerAddAction( cmd.t, function command.onCommandEvent )
endfunction
endlibrary
This is how I intended to make commands:
JASS:
scope testCommands initializer init
private function codeToExecute takes nothing returns nothing
endfunction
private function anotherCodeToExecute takes nothing returns nothing
endfunction
private function init takes nothing returns nothing
call registerCommandForPlayer( 0, "whatCmd", function codeToExecute )
call registerCommand( "cmdWhat", function anotherCodeToExecute )
endfunction
endscope
Does anyone have a workaround this issue?