• 04 Juin 2026, 00:23:56


Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - S4T3K

Pages: [1] 2
1
Showroom SA:MP / Re : Re : [GM]Carson City
« le: 04 Juillet 2014, 01:38:34 »
En raison de la fermeture de mon serveur,j'offre mon GM à tous ceux qui le veulent.





salut qu'elle image voit tu -_-

@Anonyme56.


2
Scripting SA-MP [Pawn center] / Re : SYSREQ ou pas ?
« le: 19 Juin 2014, 20:07:13 »
Je vois plus ou moins ce que tu veux faire, je regarde si ça pourrait marcher.

3
Scripting SA-MP [Pawn center] / Re : SYSREQ ou pas ?
« le: 18 Juin 2014, 17:37:50 »
Pourquoi pas, le problème reste le même en soi : comment je peux détecter, dans les arguments qu'aura passé le codeur, les tableaux ?

Le seul moyen que j'ai trouvé c'est l'assembly, et comme je trouve ça assez chaud, bah je continue d'apprendre.

4
@Gzsume Si tu es toujours intéressé par la solution, j'ai fini par la trouver hier soir.

Le warning à la compilation est parti, donc ça peut vouloir dire que c'est enfin la bonne solution.

J'ai simplement refait la macro "S_CreateDynamic3DTextLabel" en lui faisant retourner l'ID du label créé, attaché à InfoLabel[l][label] et j'ai rajouté le tag "Text3D:" devant le nom de la fonction. Je MàJ le pastebin tout de suite.

5
Scripting SA-MP [Pawn center] / Re : SYSREQ ou pas ?
« le: 18 Juin 2014, 11:33:15 »
Ce fix était à l'origine pour être utilisé pour moi, j'ai seulement deux timers qui n'ont pas de paramètre "playerid" mais qui ont besoin de passer des tableaux, donc au niveau de l'opti ça reste raisonnable.

@Gzsume Si tu parles des y_timers, je trouve que Y_Less a trop compliqué son code pour rien, ce qui est dommage d'ailleurs car son système est pas mal. Si tu ne parles pas des y_timers, alors je ne connais (pour les timers) que le patch de Slice qui permet de rendre les délais plus précis.

6
Scripting SA-MP [Pawn center] / Re : SYSREQ ou pas ?
« le: 17 Juin 2014, 16:34:04 »
Bah le système de timer fait en sorte de pouvoir simplement passer des tableaux en paramètres (via un spécificateur s ou a), chose actuellement impossible avec la fonction classique.

Pour faire ça, on a besoin de modifier la fonction SetTimerEx pour qu'on puisse stocker ce que valent les paramètres dans le script, et une fois qu'on a récupéré ce qu'ils valent, on stock ça quelque part, pour ensuite pouvoir s'en servir comme "correspondance" dans CallLocalFunction.

Je vais regarder ton code.

7
Scripting SA-MP [Pawn center] / Re : SYSREQ ou pas ?
« le: 16 Juin 2014, 19:06:32 »
Bah je t'explique tout :

Mon code ci-dessus sert à fixer un défaut des timers simples (SetTimerEx) : on peut pas passer de tableaux en paramètres. Du coup, j'ai étudié un peu l'assembly et j'ai vu que c'était possible en utilisant le #emit.

J'ai donc suivi (plus ou moins en adaptant) le code de ZeeX pour SendClientMessageFormatted afin de récupérer un nombre non fixe d'arguments dans une adresse mémoire (une variable qui comporte cette adresse mémoire quoi) et cette adresse mémoire comporte la "pile" de tout ce à quoi correspondent les arguments dans la fonction. Kilou a eu le même problème de compréhension, donc pour illustrer je te donne un petit exemple

Code: (pawn) [Sélectionner]

new entier, Float:flottant, bool:boolean, tableau[10];

forward Fonction(entier, Float:flottant, bool:boolean, tableau[]);
public Fonction(entier, Float:flottant, bool:boolean, tableau[])
{
      // Faire des choses random ici
}

SetTimerEx("Fonction", 1000, false, /* Le "format" des paramètres */"ifba", /* Ce à quoi ils correspondent dans le code */ entier, flottant, boolean, tableau);

Donc actuellement, ma variable "n" en mémoire vaut, pour cet exemple, les adresses mémoires de "entier", "flottant", "boolean" et "tableau". Comme la native actuelle de samp "SetTimerEx" ne permet pas de passer des tableaux, j'aimerais rendre ça possible mais actuellement je suis bloqué à un endroit :

Je suis parti sur un système utilisant une fonction intermediaire "CallTimer(timerid)" et cette fonction devait à son tour appeler la fonction que le timer devait appeler à l'origine via CallLocalFunction, qui autorise le passage de "string" en paramètre.
Sauf que j'ai aucun moyen de récupérer "n" une fois que ma fonction "CallTimer" a été appelée.
Et c'est ça que j'aimerais savoir, comment la récupérer ?

8
Scripting SA-MP [Pawn center] / Re : SYSREQ ou pas ?
« le: 16 Juin 2014, 12:42:44 »
Yop.

J'ai lu le tuto de Y_Less à propos de ça, mais le truc que j'ai pas compris c'est que :

Pour mon code, j'appelle la fonction CallTimer(timerid) via un SetTimerEx simple, le hic c'est que je sais pas où stocker "n", qui vaut pour le moment "tous mes paramètres" (enfin plutôt ceux à quoi ils correspondent dans le script).

1 : Je le stocke dans une variable normale "stockCorr[fixi] = n", mais dans ce cas là je prends pas en compte les flottants ni les tableaux, et ça va pas
2 : J'appelle le timer via SetTimerEx mais pour appeler la fonction du timer via CallLocalFunction, je mets quoi en dernier paramètre ? Puisque je pourrais pas récupérer ce que le codeur a rentré la première fois

Et c'est ça que j'arrive pas à comprendre.

9
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 :

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.

10
Je viens de fixer un petit bug qui permet maintenant l'utilisation propre de l'include.

Par contre, vous ne pouvez plus utiliser les fonctions "traditionnelles". Utilisez à la place soit directement S_SetPlayerAttachedObject et S_RemovePlayerAttached object, soit FIX_Attached_Object et FIX_Remove_Attached.


11
Ah, d'accord, j'ai compris.
Désolé du dérangement alors.

12
Bah ce serait en gros de pouvoir détecter la touche que presse un joueur autrement que par les touches définies pour le jeu.

Exemple, on peut pas détecter quand le joueur appuie sur "T" en jeu via GetPlayerKeys, bah le plugin le permettrait. Après, comme je l'ai dit, je suis une grosse bouse en c++, donc je sais pas comment faire (mais alors pas du tout), je sais juste que iPLEOMAX l'a fait pour son éditeur de textdraws

Hotkey 'C': Copy (While you are editing a textdraw)
Hotkey 'Z': Undo (While you are editing a textdraw)
Hold 'Left Shift' while editing to move/resize textdraws slowly for precision.
Hold 'Spacebar' while editing to move/resize textdraws faster.
Hotkey 'F': Change Font
Hotkey 'P': Change Position
Hotkey 'S': Change Size (If you are resizing font, use 'lettersize mode', 'size mode' only works on texture/box size)
Hotkey 'Y': Change Text
Hotkey 'L': Change LetterSize
Hotkey 'Q': Change Color
Hotkey 'B': Change Background Color
Hotkey 'U': Toggle Box ON/OFF
Hotkey 'I': Change Box Color
Hotkey 'O': Change Outline Size
Hotkey 'W': Change Shadow Size
Hotkey 'G': Toggle Global/Player Textdraw
Hotkey 'A': Toggle Alignment Type
Hotkey 'K': Toggle Selectability
Hotkey 'R': Toggle Proportionality
Hotkey 'M': Textdraw List Dialog
Hotkey 'N': New Textdraw Dialog

(Pris du post officiel de iPLEOMAX Textdraw editor)
Je sais pas si ça pourrait te servir, mais il a mit le .cpp à disposition : http://www.mediafire.com/download/tvjnm8dc67pqbmo/iTD+Source.rar

13
Yop.

Ah d'accord, bah désolé alors.
Mais pourtant iPLEMOAX l'a fait pour son éditeur de textdraw.

14
Yop.

Toujours d'actualité ?
Si oui, j'aurais une petite demande à faire (je suis une énorme bouse en C++)

Nom du plugin: Advanced Keys
Système d'exploitation du serveur: De préférence Linux ET Windows
Version du serveur: 0.3z actuellement
Fonctionnalités du plugins:

Comme le nom l'indique, j'aimerais un plugin qui permette de détecter la touche pressée par le joueur dans n'importe quel cas, pas seulement les touches mises à disposition via "OnPlayerKeyStateChange" ou "GetPlayerKeys".
Par exemple, si le joueur appuie sur "Y" (par défaut KEY_YES), j'aimerai qu'il y ait une fonction permettant de retourner 'Y' et non 'KEY_YES'.

Si c'est un petit peu trop flou, je pourrais mieux expliquer (par contre prévoyez du temps pour la lecture :p)
Les fonctions basiques seraient "AdGetPlayerKeys(playerid, &keys)". Ajouter également une définition de chaque touche en fonction du nombre de bits qu'elle représente (exemple : "#define KEY_A (NombreDeBits)", "#define KEY_Z (NombreDeBits)", etc).
Rajouter également une fonction "ForcePressedKeys(playerid, keys[])", qui ferait croire au serveur que le joueur correspondant à "playerid" a appuyé sur les touches listées dans le tableau "keys", et ForceReleaseKey(playerid, keys[]), qui ferait croire au serveur que le joueur a relâché les touches contenus dans le tableau keys, et (prévisible) ForceHoldingKeys(playerid, keys[]) qui ferait croire au serveur que le joueur maintient les touches contenus dans le tableau "keys".

Voilà, merci d'avance ;)

15
Oh putain, j'étais tellement crevé ce matin que j'ai oublié le lien.
J'édite ça tout de suite après t'avoir répondu :

Pour qu'une variable contienne un texte 3D, le tag n'est pas Text: (Textdraws) mais Text3D. On peut voir dans l'enum tInfo que j'ai bien déclaré "label" avec le tag 3DText, c'est ça que je comprends pas trop.

Je mets le lien tout de suite, désolé.

Pages: [1] 2