1
Scripting SA-MP [Pawn center] / SYSREQ ou pas ?
« le: 14 Juin 2014, 16:57:51 »
Yop.
Je suis toujours en train de taffer sur mon fix pour les timers, permettant d'ajouter le spécifier "a" (ou s, je verrais) pour les tableaux, et actuellement, via la directive de pré-processeur #emit, j'ai récupéré dans "n" (avant de nettoyer le stack via ClearStack) les paramètres de la fonction (et donc Kilou, tu avais tord, c'est possible même si le nombre de paramètres est pas fixe, jtm), mais je suis censé lancer une requête système (via #emit SYSREQ.C nom_de_la_native).
Sauf que moi, je compte appeler une fonction "CallTimer(timerid)" qui appelera la fonction publique passée en paramètre via CallLocalFunction.
Donc je mets quoi en SYSREQ ? Et si je dois pas en mettre, je récupère tout les arguments où ?
Voilà mon code actuel :
Voilà, merci d'avance.
PS : Je poste ici sur demande de Kilou. Il m'a dit qu'il y aurait plus de personnes aptes à m'aider ici que sur le forum samp français.
Je suis toujours en train de taffer sur mon fix pour les timers, permettant d'ajouter le spécifier "a" (ou s, je verrais) pour les tableaux, et actuellement, via la directive de pré-processeur #emit, j'ai récupéré dans "n" (avant de nettoyer le stack via ClearStack) les paramètres de la fonction (et donc Kilou, tu avais tord, c'est possible même si le nombre de paramètres est pas fixe, jtm), mais je suis censé lancer une requête système (via #emit SYSREQ.C nom_de_la_native).
Sauf que moi, je compte appeler une fonction "CallTimer(timerid)" qui appelera la fonction publique passée en paramètre via CallLocalFunction.
Donc je mets quoi en SYSREQ ? Et si je dois pas en mettre, je récupère tout les arguments où ?
Voilà mon code actuel :
Code: (pawn) [Sélectionner]
stock EFIX_SetTimerEx(const funcname[35], interval, bool:repeating, format[121], {Float, _}:...)
{
for(fixi = 0; fixi < MAX_TIMERS; fixi++)
{
if(!InfoTimer[fixi][tRunning]) break;
}
static const num_args = 0;
new n = (numargs() - num_args) * BYTES_PER_CELL;
if(n == 3 * 4) SetTimer(funcname, interval, repeating);
if(n)
{
new
arg_start,
arg_end;
#emit CONST.alt 8
#emit LCTRL 5
#emit ADD
#emit STOR.S.pri arg_start
#emit LOAD.S.alt n
#emit ADD
#emit STOR.S.pri arg_end
do
{
#emit LOAD.I
#emit PUSH.pri
arg_end -= BYTES_PER_CELL;
#emit LOAD.S.pri arg_end
}
while (arg_end > arg_start);
#emit PUSH.S funcname
#emit PUSH.S interval
#emit PUSH.S repeating
#emit PUSH.S format
n += BYTES_PER_CELL * STATIC_ARGS;
#emit PUSH.S n
#emit SYSREQ.C
ClearStack(n);
}
return 1;
}
stock ClearStack(var)
{
var += BYTES_PER_CELL;
#emit LCTRL 4
#emit LOAD.S.alt n
#emit ADD
#emit SCTRL 4
}
Voilà, merci d'avance.
PS : Je poste ici sur demande de Kilou. Il m'a dit qu'il y aurait plus de personnes aptes à m'aider ici que sur le forum samp français.