• 15 Mai 2024, 09:19:42


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.


Sujets - S4T3K

Pages: [1]
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 :

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.

2


La majorité des fonctions de cette include ne serviront à rien pour les personnes qui considèrent que le streamer c'est juste une façon différente de créer des objets. On peut considérer ça, mais c'est en réalité un peu plus complexe que ça : ça permet de créer des objets dans un/plusieurs virtualworld, dans un ou plusieurs intérieurs virtuels, etc. Ca permet également de ne plus avoir la limite de 1000 objets créables via CreateObject. Et ça ne s'applique pas qu'aux objets !

Avant tout, l'include n'est pas terminée : je n'avais pas le temps de la terminer complètement (elle est à moitié faite, libre à ceux qui veulent la continuer, sachant qu'il suffit de se baser sur le travail déjà fait pour comprendre comment fabriquer de nouvelles fonctions) donc je la partage (elle a déjà été partagée sur le forum samp) à moitié faite. Pour l'instant, elle inclut déjà pas mal de natives, qui sont (désolé si le code est trop grand, signalez le moi je le mettrais sur pastebin)

Lien pastebin : http://pastebin.com/XHYM3diX

Code: (pawn) [Sélectionner]

/****************
    CountAreas
    ****************/

native CountDynamicPolygons();
native CountDynamicCubes();
native CountDynamicSpheres();
native CountDynamicRectangles();
native CountDynamicCircles();

    /*****************
        Objects
    *****************/
native GetDynamicObjectModel(objectid);
native SetDynamicObjectModel(objectid, modelid);
native GetDynamicObjectStreamParams(objectid, &worldid, &interiorid, &playerid);
native SetDynamicObjectStreamParams(objectid, worldid = -1, interiorid = -1, playerid = -1);
native Float:GetDynamicObjectStreamDistance(objectid);
native Float:GetDynamicObjectDrawDistance(objectid);
native SetDynamicObjectStreamDistance(objectid, Float:streamdistance);
native SetDynamicObjectDrawDistance(objectid, Float:drawdistance);
native IsPlayerInRangeOfDynamicObject(playerid, objectid, Float:radi = 5.0);
native IsDynamicObjectInRangeOfPoint(objectid, Float:x, Float:y, Float:z, Float:radi = 5.0);
native GetNearestObjectFromObject(objectid, Float:radi = 0.3);
native GetNearestObjectFromVehicle(objectid, vehicleid, Float:radi = 1.0);
native GetNearestObjectFromPlayer(objectid, playerid, Float:radi = 0.5);
native GetNearestObjectFromPickup(objectid, pickupid, Float:radi = 1.0);

    /*****************
        Pickups
    *****************/
   
native GetDynamicPickupPos(pickupid, &Float:x, &Float:y, &Float:z);
native SetDynamicPickupPos(pickupid, Float:x, Float:y, Float:z);
native GetDynamicPickupType(pickupid);
native SetDynamicPickupType(pickupid, type);
native GetDynamicPickupStreamParams(pickupid, &worldid, &interiorid, &playerid);
native SetDynamicPickupStreamParams(pickupid, worldid = -1, interiorid = -1, playerid = -1);
native GetDynamicPickupModel(pickupid);
native SetDynamicPickupModel(pickupid, modelid);
native Float:GetDynamicPickupStreamDistance(pickupid);
native SetDynamicPickupStreamDistance(pickupid, Float:strdistance);
native IsPlayerInRangeOfDynamicPickup(playerid, pickupid, Float:range = 3.0);
native IsDynamicPickupInRangeOfPoint(pickupid, Float:x, Float:y, Float:z, Float:range = 3.0);

    /******************
        Checkpoints
    ******************/
   
native GetDynamicCPPos(checkpointid, &Float:x, &Float:y, &Float:z);
native SetDynamicCPPos(checkpointid, Float:x, Float:y, Float:z);
native Float:GetDynamicCPSize(checkpointid);
native SetDynamicCPSize(checkpointid, Float:size);
native GetDynamicCPStreamParams(checkpointid, &worldid, &interiorid, &playerid);
native SetDynamicCPStreamParams(checkpointid, worldid = -1, interiorid = -1, playerid = -1);
native Float:GetDynamicCPStreamDistance(checkpointid);
native SetDynamicCPStreamDistance(checkpointid, Float:streamdistance);
native IsDynamicObjectInRangeOfCP(objectid, checkpointid, Float:range = 5.0);
native IsDynamicCPInRangeOfPoint(checkpointid, Float:x, Float:y, Float:z, Float:range = 5.0);

    /**********************
        Race checkpoints
    **********************/
   
native GetDynamicRaceCPType(checkpointid);
native SetDynamicRaceTPType(checkpointid, type);
native GetDynamicRCPPos(checkpointid, &Float:x, &Float:y, &Float:z);
native GetDynamicRCPNextPos(checkpointid, &Float:x, &Float:y, &Float:z);
native SetDynamicRCPPos(checkpointid, Float:x, Float:y, Float:z);
native SetDynamicRCPNextPos(checkpointid, Float:x, Float:y, Float:z);
native Float:GetDynamicRCPSize(checkpointid);
native SetDynamicRCPSize(checkpointid, Float:size);
native GetDynamicRCPStreamParams(checkpointid, &worldid, &interiorid, &playerid);
native SetDynamicRCPStreamParams(checkpointid, worldid = -1, interiorid = -1, playerid = -1);
native Float:GetDynamicRCPStreamDistance(checkpointid);
native SetDynamicRCPStreamDistance(checkpointid, Float:streamdistance);



Seul bug que j'ai pas réussi à patcher : A la compilation de l'include, au niveau de la macro S_CreateDynamic3DTextLabel, j'ai une erreur 203 : tag mismatch, avis à ceux qui savent comment réparer ça.

Crédits :


Incognito : Streamer
Patrick_, Vince : GetDistanceBetweenPoints (avec le VectorSize), aide sur l'utilisation de la fonction
Moi : Bah toute les fonctions déjà créées


Pré-requis :


SAMP 0.3z (ne fonctionne pas sur les versions antérieures)
"Streamer plugin" d'incognito


3



Yo.

C'est une include que je tiens vraiment à voir sur un maximum de serveurs, aussi bien RP que DM, car quand on a des accessoires (du genre des lunettes) et qu'on vise avec l'appareil photo ou le sniper, on a l'accessoire qui apparaît sur l'écran selon l'index ou la partie du corps sur lequel il est attaché.

L'include répare ça et rajoute même des fonctions utiles sur les accessoires comme "GetAttachedObjectModelByIndex" et autres.
Le fonctionnement est assez simple : j'ai créé une fonction appelée S_SetPlayerAttachedObject qui attache l'objet au joueur et qui stocke toutes les infos passées en paramètre dans un tableau ayant dix cases par joueur (une case par index), et lorsque le joueur vise (if(HOLDING(KEY_HANDBRAKE)), ça retire tous les accessoires équipés, puis lorsqu'il arrête de viser (if(RELEASED(KEY_HANDBRAKE)), ça lui remet.

Pré-requis

• y_hooks (YSI - Y_Less)


Liste des fonctions ajoutées :

Code: (pawn) [Sélectionner]

native GetPlayerAttachedObject(playerid, index); // Retourne l'id du model sur l'index, 0 si il n'y en a pas
native GetPlayerBodyPartUsed(playerid, index); // Retourne la partie du corps sur l'index,
native GetPlayerIndexByModel(playerid, model); // Retourne l'index qu'utilise le model, -1 si il n'est jamais utilisé
native GetPlayerAccOffSet(playerid, index, &Float:offsetX, &Float:offsetY, &Float:offsetZ); // Passe par référence les offset x, y et z de l'accessoire utilisé par l'index, retourne 0 si il n'est pas utilisé
native GetPlayerAccRot(playerid, index, &Float:rotX, &Float:rotY, &Float:rotZ); // Passe par référence les valeurs de rotation x, y et z de l'accessoire utilisé par l'index, retourne 0 si il n'est pas utilisé
native GetPlayerAccScale(playerid, index, &Float:scaleX, &Float:scaleY, &Float:scaleZ); // Passe par référence l'échelonnage x, y et z de l'accessoire utilisé par l'index, retourne 0 si il n'est pas utilisé
native GetPlayerAccMaterial(playerid, index, &col1, &col2); // Passe par référence les couleurs "matérielles" de l'accessoire utilisé par l'index, retourne 0 si il n'est pas utilisé
native RemovePlayerAttachedObjectModel(playerid, modelid); // Enlève un accessoire attaché au joueur en spécifiant son model et non plus son index, retourne 0 si le model n'est pas attaché au joueur. Retourne 1 si l'accessoire a été enlevé correctement (note qu'il enlève tous les models attachés au joueur correspondant à ce modelid, pas seulement le premier).

Pour utilisé l'include, ne rajoutez que

Code: (pawn) [Sélectionner]

#include <s_zoom_fix>


Juste en dessous de l'include a_samp.
Et utilisez les fonctions classiques pour attacher et retirer un objet, ou utilisez les fonctions ajoutées de façon tout à fait normale.

Lien du pastebin : http://pastebin.com/CSdYGAEq

Voilà.

4
Showroom SA:MP / [INC] s_changes - Callback de changement
« le: 06 Juin 2014, 22:46:16 »


(Pour moi, Apprenti = quelqu'un qui sait ce que c'est qu'une callback)

Yop.

Ca a été ma première include, je viens de finir la MàJ v3.1 pour rendre tout ça plus clean. J'ai pas pour habitude de tester mes codes; la raison est simple : avec moi ils marchent jamais (+nofake). Je tiens juste à préciser que j'ai créé mon include AVANT celle d'Emmet_. Je l'ai juste release après. (Et j'avais pas vu qu'y'avait déjà la sienne de rel)

L'include comporte 14 callbacks crées par mes soins et pouvant être extrêmement utiles dans le cadre de la fabrication d'un anti cheat, ou simplement de scripts plus détaillés.

Pré-requis : (Merci à Sasuke)


• YSI 4.0


Les callbacks sont :

• OnPlayerAmmoChange(playerid, olda, newa, weapona) : Appelée lorsque les munitions de l'arme d'un joueur changent. Le paramètre "weapona" correspond à l'arme équipée (weapon armed).

• OnPlayerWeaponChange(playerid, oldw, neww) : Appelée lorsqu'un joueur change d'arme en main.

• OnPlayerHealthChange(playerid, Float:oldh, Float:newh) : Appelée lorsque la barre de vie d'un joueur change

• OnPlayerArmourChange(playerid, Float:olda, Float:newa) : Appelée lorsque la barre d'armure d'un joueur change

• OnServerConnectedPlayersChange(oldc, newc) : Appelée lorsque le nombre de connectés sur un serveur change.

• OnPlayerPosChange(playerid, Float:oldx, Float:newx, Float:oldy, Float:newy, Float:oldz, Float:newz) : Appelée lorsque la position d'un joueur change.

• OnPlayerFPSChange(playerid, oldfps, newfps) : Appelée lorsque les fps (frames per second) d'un joueur changent.

• OnPlayerMoneyChange(playerid, oldm, newm) : Appelée quand l'argent du joueur change

• OnPlayerSpeedChange(playerid, Float:oldsx, Float:newsx, Float:oldsy, Float:newsy, Float:oldsz, Float:newsz) : Appelée quand la vitesse du joueur change (à pied seulement)

• OnPlayerVehicleSpeedChange(playerid, vehicleid, Float:oldsx, Float:newsx, Float:oldsy, Float:newsy, Float:oldsz, Float:newsz) : Appelée quand la vitesse d'un véhicule conduit par un joueur change.

• OnPlayerAnimationChange(playerid, oldal[], newal[], oldan[], newan[]) : Appelée quand l'animation effectuée par un joueur change

• OnPlayerScoreChange(playerid, olds, news) : Appelée quand le score d'un joueur change

• OnPlayerPingChange(playerid, oldp, newp) : Appelée quand le ping d'un joueur change

• OnPlayerNameChange(playerid, oldn[], newn[]) : Appelée quand le nom d'un joueur change

Ces callbacks sont, me direz-vous, très simplistes, mais je trouve que c'est mieux de les avoir sous la main.

Pour les utiliser, c'est simple. Téléchargez le fichier, et rajoutez ce bout de code en haut de votre FS/GM :

#include <s_changes>

Ajoutez ensuite la callback voulue à votre FS/GM comme ceci (par exemple OnPlayerHealthChange)

#define USE_HEALTH

public OnPlayerHealthChange(playerid, Float:oldh, Float:newh)
{
     // Actions
     return 1;
}


Voilà ! Et j'ai failli oublier le plus important, les liens :

Pastebin de l'include (Dernière mise à jour : 6 juin 2014)

Changelog :

3.1 : 6 Juin 2014

• Grand nettoyage
• Suppression de la callback "OnPlayerFire" (remplacée par [url=http://wiki.sa-mp.com/wiki/OnPlayerWeaponShot]OnPlayerWeaponShot[/url] sur la 0.3z)
• Ajout de la callback "OnPlayerFPSChange"
• Utilisation de y_hooks pour éviter l'utilisation de fonctions intra callbacks (Crédits : Y_Less)
• Utilisation de foreach (y_iterate) pour éviter l'utilisation d'une boucle for sur 500 valeurs (Crédits : Y_Less)
• Utilisation des callbacks passée en pré-processeur (nouvelle méthode d'utilisation, crédits : Matthieu381)
• Ajout d'un système de "hook" include (ALS) pour empêcher la multi inclusion

Liste des pré-processeurs disponibles


#define USE_WEAPON - Active la callback "OnPlayerWeaponChange"
#define USE_AMMO - Active la callback "OnPlayerAmmoChange"
#define USE_HEALTH - Active la callback "OnPlayerHealthChange"
#define USE_ARMOUR - Active la callback "OnPlayerArmourChange"
#define USE_MONEY - Active la callback "OnPlayerMoneyChange"
#define USE_CONNECTED - Active la callback "OnServerConnectedChange"
#define USE_POS - Active la callback "OnPlayerPosChange"
#define USE_SPEED - Active les callbacks "OnPlayerSpeedChange" (si le joueur est à pied) et "OnPlayerVehicleSpeedChange" (si le joueur est en véhicule)
#define USE_ANIMATIONS - Active la callback "OnPlayerAnimationChange" (également appelée lorsqu'une animation appliquée à un joueur se termine)
#define USE_SCORE - Active la callback "OnPlayerScoreChange"
#define USE_PING - Active la callback "OnPlayerPingChange"
#define USE_NAME - Active la callback "OnPlayerNameChange"
#define USE_FPS - Active la callback "OnPlayerFPSChange"


NB : Mettre les pré-processeurs voulus AVANT d'inclure la bibliothèque
 
Peace.

Pages: [1]