[Include] I_Preview -> Gestion de preview model
#1

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
Exemple de script :

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.
Exemple de script :

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;
}
En gros ici dans "OnGameModeInit" On charge le textdraw (preview model) ensuite avec la commande "/savepreview" on ajoute les positions du preview, celui ci est donc sauvegardй (si vous utilisez la fonction "AddPosPreview" sur un id d'objet qui existe dйjа alors celui-ci sera juste modifiй). Et donc ici j'ai choisit d'afficher l'id 968 donc j'ai dы faire au par avant la commande "/savepreview 968 [rx] [ry] [rz] [zoom]" (avec mes paramиtres), ce qui veut dire que quand le joueur ce connecte ("OnPlayerConnect") le preview est affichй au joueur avec les paramиtres insйrй sur le modelid 968.

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
Reply
#2

On peux avoir des screens aussi?

Merci du partage
Reply
#3

Voilа, screen ajoutй
Reply
#4

Bientфt viendra l'йditeur de previewmodel que je rattacherai avec cette include
Reply
#5

J'ai jamais compris comment affichй un objet comme tu l'as fait, mais bien jouй j'aurais du fouiller mSelection.
Reply
#6

Bah il te faut juste mettre le texdraw en font 5, activй la box, resize la box et utilisй la fonction "TextDrawSetPreviewModel" pour afficher le modelid et "TextDrawSetPreviewRot" pour le zoom et la rotation.
Reply
#7

Quote:
Originally Posted by Ivory
View Post
Bientфt viendra l'йditeur de previewmodel que je rattacherai avec cette include
Je l'attend avec impatience !
Reply
#8

Quote:
Originally Posted by Ivory
View Post
Bah il te faut juste mettre le texdraw en font 5, activй la box, resize la box et utilisй la fonction "TextDrawSetPreviewModel" pour afficher le modelid et "TextDrawSetPreviewRot" pour le zoom et la rotation.
D'accord merci je ne connaissez pas ses fonctions.
Reply
#9

EDIT : Dйsormais "ChargementPosPreview" retourne une valeur.

Code:
if(!ChargementPosPreview(968))
{
    SendClientMessage(playerid, 0xFFFFFFFF, "Cette objet n'est pas rйpertoriй dans le dossier.");
}
else
{
    SendClientMessage(playerid, 0xFFFFFFFF, "Cette objet est rйpertoriй dans le dossier.");
}
return 1;
Reply
#10

Merci du partage.
Only rp sa annonce du lourd.
Reply


Forum Jump:


Users browsing this thread: 9 Guest(s)