• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Pawn] I need help with Assembly (#emit or __emit)
#1
I want to make a simple hook through the #emit
PHP Code:
native CallLocalFunction(const funcname[], const format[], {Float,_}:...);
native printf(const output[], {Float,_}:...);

stock __CallLocalFunction(const funcname[], const format[], {Float,_}:...) {
    static retval;
    if(funcidx(funcname) == -1) {
        retval 0;
        printf("Function not defined: %s.\n"funcname);
    } else {
        if(numargs() == 2) {
            retval CallLocalFunction(funcnameformat);
        } else {
            // "emit" code to call function with args and return value to "retval"
        }
    }
    return retval;

I've tried using codes like SendClientMessageEx or EasyDialog, but I need it to return the value
If possible comment the code so I can study it
  Reply
#2
Try this

PHP Code:
native CallLocalFunction(const funcname[], const format[], {Float,_}:...);
native printf(const output[], {Float,_}:...);


stock __CallLocalFunction(const funcname[], const format[], {Float,_}:...) {
    static retval;


    if (funcidx(funcname) == -1) {

        retval 0;
        printf("Function not defined: %s.\n"funcname);
    } else {

        if (numargs() == 2) {

            retval CallLocalFunction(funcnameformat);
        } else {

            new arguments[128];
            formatex(argumentssizeof(arguments), format);


            #emit __emit_function_call funcname arguments
        }
    }


    return retval;
}


public 
__emit_function_call(const funcname[], arguments[]) {
    new Function:func funcidx(funcname);
    new result;

    switch (numargs(arguments)) {
        case 0result CallLocalFunction(funcname); break;
        case 1result CallLocalFunction(funcnamearguments[0]); break;
        case 2result CallLocalFunction(funcnamearguments[0], arguments[1]); break;

    }

    // Store the result
    retval result;

  Reply


Forum Jump: