12.07.2014, 20:23
(
Last edited by Ivory; 13/07/2014 at 12:27 PM.
)
I_Preview
Salut а tous, alors voilа j'ai crйй cette include pour faciliter le positionnement (rx, ry, rz, zoom) d'un objet dans le cadre d'un texdraw configurй en previewmodel.
Le fonctionnement est simple :
Fonctions :
AddPosPreview(modelid, Float:rx, Float:ry, Float:rz, Float:zoom)
GetPosPreview(modelid, &Float:rx, &Float:ry, &Float:rz, &Float:zoom)
ChargementPosPreview(modelid)
1. Tout d'abord vous avez une 1er fonction qui vous sert а ajouter une position destiner а un id d'objet :
Code:
AddPosPreview(modelid, Float:rx, Float:ry, Float:rz, Float:zoom) Paramиtres : modelid : id de l'objet rx : Rotation x de l'objet dans le preview ry : Rotation y de l'objet dans le preview rz : Rotation z de l'objet dans le preview zoom : Niveau du zoom -> Ne retourne aucune valeur spйcifique. /!\ Les information fournie par cette fonction sont sauvegardй dans un fichier .ini unique pour le modelid insйrй. Vous devez par consйquent crйer dans le dossier scriptfile le dossier "PreviewModel" qui contiendra tout les fichiers .ini. Info : Vous pouvez aussi modifier l'emplacement des fichiers en modifiant dans le code la define "EMPLACEMENT_FICHIER".
2. Ensuite nous avons une 2иme fonction qui sert а rйcupйrer les rotation rx, ry, rz et le la valeur du zoom du prйview ajoutй.
Code:
GetPosPreview(modelid, &Float:rx, &Float:ry, &Float:rz, &Float:zoom) Paramиtres : modelid : id de l'objet &rx : Retourne la rotation x de l'objet dans le preview &ry : Retourne la rotation y de l'objet dans le preview &rz : Retourne la rotation z de l'objet dans le preview &zoom : Retourne le niveau du zoom -> Retourne les valeurs rx, ry, rz et zoom
Code:
new phrase[256], Float:rx, Float:ry, Float:rz, Float:zoom; GetPosPreview(968, rx, ry, rz, zoom); format(phrase, sizeof(phrase), "Modelid : %d - rx : %f, ry : %f, rz : %f, zoom : %f", 968, rx, ry, rz, zoom); SendClientMessage(playerid, 0xFFFFFFFF,phrase);
3. Cette derniиre fonction sert а charger les informations (rx, ry, rz, zoom) du modelid ajoutй (а mettre dans "OnGameModeInit").
Code:
ChargementPosPreview(modelid) Paramиtres : modelid : id de l'objet а charger (doit кtre situй dans le dossier PreviewModel) -> Retourne la valeur de 1 si l'objet а bientфt йtait chargй sinon retourne 0 si l'objet n'existe pas dans le dossier.
Code:
public OnGameModeInit() { ChargementPosPreview(968); return 1; }
Voici un exemple de script complet :
Code:
public OnGameModeInit() //On charge le textdraw et le ou les infos preview enregistrй { ChargementPosPreview(968); // Chargement du preview de l'objet id 968 Preview_Textdraw = TextDrawCreate(250.000000, 140.000000, "_"); TextDrawBackgroundColor(Preview_Textdraw, 255); TextDrawFont(Preview_Textdraw, 5); TextDrawLetterSize(Preview_Textdraw, 0.500000, 1.000000); TextDrawColor(Preview_Textdraw, -1); TextDrawSetOutline(Preview_Textdraw, 0); TextDrawSetProportional(Preview_Textdraw, 1); TextDrawSetShadow(Preview_Textdraw, 1); TextDrawUseBox(Preview_Textdraw, 1); TextDrawBoxColor(Preview_Textdraw, 0xFFFFFF00); TextDrawTextSize(Preview_Textdraw, 150.000000, 130.000000); TextDrawSetSelectable(Preview_Textdraw, 0); TextDrawSetPreviewModel(Preview_Textdraw, 968); return 1; } public OnPlayerConnect(playerid) // On affiche un preview а la connexion (exemple) { new Float:rx, Float:ry, Float:rz, Float:zoom; GetPosPreview(968, rx, ry, rz, zoom); TextDrawSetSelectable(Preview_Textdraw, 968); TextDrawSetPreviewRot(Preview_Textdraw, rx, ry, rz, zoom); TextDrawShowForPlayer(playerid, Preview_Textdraw); return 1; } public OnPlayerCommandText(playerid, cmdtext[]) { new cmd[128], idx; cmd = strtok(cmdtext, idx); if(strcmp(cmd,"/savepreview",true)==0) { new modelid[128], rx[128], ry[128], rz[128], zoom[128]; modelid = strtok(cmdtext, idx); rx = strtok(cmdtext, idx); ry = strtok(cmdtext, idx); rz = strtok(cmdtext, idx); zoom = strtok(cmdtext, idx); if(!modelid) {SendClientMessage(playerid, 0xFFFFFFFF, "CMD : /savepreview [modelid] [Rx] [Ry] [Rz] [Zoom]"); return 1; } AddPosPreview(modelid, floatstr(rx), floatstr(ry), floatstr(rz), floatstr(zoom)); SendClientMessage(playerid, 0xFFFFFFFF, "Position preview sauvegardй"); return 1; } return 1; }
Petit screen (pour Noliax :P) :
Par exemple ici j'ai rйalisй un systиme de poche et les positions preview s'adapte automatiquement en fonction de l'id de l'objet.
Source :
Pastebin : http://pastebin.com/4iFcwvxE
Pour le systиme de sauvegarde vous devez inclure "Dini.inc" dans vos includes :
Dini : http://dracoblue.net/downloads/dini/
MODIFICATION :
- 13/07/2014 : Dйsormais "ChargementPosPreview" retourne une valeur.
Voilа j’espиre que cela servira а certain, sur ce bonne continuation а tous
Ivory