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 :
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
#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/CSdYGAEqVoilà.