GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Gilux le 26 Novembre 2010, 20:21:51

Titre: [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 26 Novembre 2010, 20:21:51
Bonsoir, et bienvenue dans ce qui servira de TP suite à mon cours et les autres tutoriaux du site.
Ces TP seront corrigés régulièrement, et leur solution sera expliquée.

Pour poster une réponse, merci de la poster sur le pastebin de GTAOnline : http://pastebin.gtaonline.fr/ (http://pastebin.gtaonline.fr/)

Commençons donc, avec une chose assez simple : Comment créer une fonction CreateBlueHouse ?
Cette fonction devra permettre de créer un pickup de maison bleue (ID : 1272), à une position X,Y,Z donnée, et dans un monde virtuel donné.

Si vous coincez, je vous invite à faire un tour par la partie 3 de mon tuto, et par le wiki (CreatePickup)

Bonne chance !

PS : Merci à sasuke de m'avoir autorisé à reprendre le concept du "Topic à exercice" :)
Titre: Re : [TP] On apprend le Pawn avec Gilux ! [Niveau 1 : Créer une fonction]
Posté par: Ssk le 26 Novembre 2010, 20:26:52
J'ai pinned le topic =)

J'espère que celui durera, pas comme le mien qui est mort :p
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 26 Novembre 2010, 20:29:34
Merci, j'ai aussi renommé le topic  ;)
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 26 Novembre 2010, 20:34:52
Bien joué Dizzy ^^
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 26 Novembre 2010, 20:36:19
Ouais, pour l'instant c'est plus pour les débutants (et je pense que ça le restera sans doute  :ninja)
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Ssk le 26 Novembre 2010, 20:58:25
Voila le mien


http://pastebin.gtaonline.fr/pastebin.php?show=942 (http://pastebin.gtaonline.fr/pastebin.php?show=942)


Sinon beurk Dizzy ta oublié le tag Float, et tu retourne pas l'id du pickup créer :p
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Xartrick le 26 Novembre 2010, 21:31:39
Et voilà le mien !

http://pastebin.gtaonline.fr/pastebin.php?show=943 (http://pastebin.gtaonline.fr/pastebin.php?show=943)

N’hésitez pas à me corriger si j'ai faux ;) !
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: S!m le 26 Novembre 2010, 21:46:46
Salut,

je te conseillerais de retourner l'ID du pickup créer, comme ça tu pourra supprimer la maison bleu si besoin (si tu sauvegarde la valeur de retour dans une variable bien sur).

Je vais aussi participer, pour introduire une nouvelle méthode, en introduisant aussi des tags:

Pastebin (http://pastebin.gtaonline.fr/pastebin.php?show=944)

++Sim++
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Xartrick le 28 Novembre 2010, 04:03:26
Bon, moi cette exercice m'a un peu inspiré, donc j'ai continuais dans l'idée d'une commande pour créer cette fameuse maison bleue et une autre pour la supprimer, j'ai donc suivis les conseils très intéressants de Sim et je vous est pondu ceci !

http://pastebin.gtaonline.fr/pastebin.php?show=949 (http://pastebin.gtaonline.fr/pastebin.php?show=946)


Code: (Pawn (others.inc) [Sélectionner]
strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }

    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}

IsNumeric(const string[])
{
for (new i = 0, j = strlen(string); i < j; i++)
{
if (string[i] > '9' || string[i] < '0') return 0;
}
return 1;
}

Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: chneubeul le 28 Novembre 2010, 10:56:45
Salut :)
Pourrais-tu fixer un jour ou les exercices seront corriger ? Comme avant avec Sasuke c'étais le jeudi ou le vendredi je sais plus ^^
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 28 Novembre 2010, 11:28:43
On va dire que la correction se fera 5 jours après la publication :)
Pour celui-ci ça sera le 1er décembre donc :)

PS : Comme j'ai dit à Sim hier, j'ai décidé d'arrêter complètement SA:MP suite à l'échec de notre projet, et de me consacrer au développement Web (PHP,JS,Ajax....)
J'invite donc les autres personnes, si elles le souhaitent, à poster des petits exercices du genre, car moi je ne viendrai plus très souvent...
++
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Armans le 02 Décembre 2010, 18:56:41
Je sais je suis très en retard mais voila comme je suis apprentie et comme j'aimera avoir plus d'explication donc je voulais savoir si se code et bien ?
http://pastebin.gtaonline.fr/pastebin.php?show=959 (http://pastebin.gtaonline.fr/pastebin.php?show=959) donc si vous trouver qu'il y a trot d'erreur dit le moi même si vous avez envie moquer vous de moi voila  :lmao  :snip :snip allez a la prochaine.
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 02 Décembre 2010, 18:58:05
Désolé, je n'ai pas trop le temps de corriger actuellement, sinon la majorité des codes qui ont été postés sont corrects, il y a juste à créer une fonction :)
Le corrigé en détail je le ferai ce soir :)
a+
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: cristab le 02 Décembre 2010, 19:18:56
pourquoi 2 TD???
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: cristab le 02 Décembre 2010, 19:24:32
un seul TD suffit
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Xartrick le 02 Décembre 2010, 19:24:47
samir_luccioni, ton code comporte des erreurs, tu ne peut effectuer des actions après avoir retourné une valeur !
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Boomerkuigi le 02 Décembre 2010, 22:41:40
http://pastebin.gtaonline.fr/pastebin.php?show=960 (http://pastebin.gtaonline.fr/pastebin.php?show=960)

J'ai fait sa vite fait
Il marche tres bien, redemarrage, zonegang en plus .... , sauf au niveau du TD du nombre de buts ya un pti blem
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Armans le 08 Décembre 2010, 18:01:38
Citer
samir_luccioni, ton code comporte des erreurs, tu ne peut effectuer des actions après avoir retourné une valeur !

Merci enfin quelqu'un qui ma dit ok merci XPATRICK mais tu vois je suis un nouveaux question scripte donc voila et en plus je cherche quelqu'un qui prend un apprentis alors quant j'ai vue comme quoi il y a des cours c'est une aubaine que j'ai saisie et ok pour la le retourne 0 donc sa veut dire si je retourne je peut plus faire d'action en plus sais logique --' je suis tros bête .
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Boomerkuigi le 10 Décembre 2010, 20:03:05
Si je en dis pas de betise ...
Quand tu fait un return dans une fonction c'est pour sortir de cette derniere
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: spiirou le 10 Décembre 2010, 20:53:50
Bonjour,

Je vais proposer un exercice simple, a la portée de tous.



Un système de 'pause', qui permettrai au joueur de signaler qu'il est afk.
Avec deux commandes /afk et /back.
Quand le joueur est afk, sa couleur change en gris ( 0x9F9F9FFF ) et il est téléporte dans une zone spéciale et fermée !
Quand il utilise /back, il retrouve sa couleur initiale et sa position.
Il faudrait aussi l’empêcher de se déplacer et signaler aux autres lorsque qu'il est AFK / ne l'est plus ( message dans le chat ).

Coté script, il serait bien de permettre la modification de la couleur, des emplacements de téléportation dans le haut du script.



Voila, j'ai donné tout les renseignements necessaires. Voire plus ^^

Bon script,
Spiirou

NB : Quand on récupère la couleur, elle est noire si on ne lui en assigne pas à la connection ;)
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: cristab le 29 Décembre 2010, 15:21:10
comme personne ne repond a l'exercice de SpIrOo voila ma participation


http://pastebin.gtaonline.fr/pastebin.php?show=991 (http://pastebin.gtaonline.fr/pastebin.php?show=991)
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Pixect le 29 Décembre 2010, 17:20:39
Salut,

J'en ai profité pour faire le mien (http://pastebin.gtaonline.fr/pastebin.php?show=994).
EDIT: Modification sur le script: Possibilité de changer la couleur AFK, les positions, et le Virtual World AFK en passant simplement par les #define.

++
Lloyd
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: cristab le 29 Décembre 2010, 17:23:37
bien jouer j'ai pas penser au VirtualWorld xD par contre comme juste tu le change de VW tu n'est pas obliger de save sa position actuel
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Pixect le 29 Décembre 2010, 17:26:03
Salut,

Spiirou a cependant indiqué qu'il fallait le positionner dans un endroit spécial et fermé.
C'est ce que j'ai fais. :P

++
Lloyd
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: cristab le 29 Décembre 2010, 17:29:18
oui ^^ moi je les mis dans l'interieur du gros avion (desoler je ne sais plus le nom xD)
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: spiirou le 31 Décembre 2010, 19:21:02
Les deux scripts sont corrects visiblement :p
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: cristab le 01 Février 2011, 15:53:03
Comme je voit qu'il n'y a pas d'exercice en cours j'en propose un :P

Faire un systeme de sauvegarde des stats du serveur :)

nombre de commande
nombre de relance du serveur
nombre de commande taper
nombre de joueur tuer
nombre de vehicule detruit
nombre de connexion joueur
nombre de kick
nombre de timeout

Voila le tout afficher dans la remote console les statistiques au lancement du serveur
faire une commande /serverstats pour afficher les stat du server
option qui est un plus faire la commande serverstats pour la remote console en utilisant public OnRconCommand(cmd[]) lien wiki =>http://wiki.sa-mp.com/wiki/OnRconCommand (http://wiki.sa-mp.com/wiki/OnRconCommand)
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 20 Mai 2011, 21:09:32
Salut !

Le topic à exercice reprend du service !
Avec un exercice corrigé ou 2 par semaine !

Chaque exercice sera divisé en 2 ou 3 consignes de difficulté différente, pour que tout le monde puisse y arriver !

(http://www.restoaparis.com/restoaparis/restogen.nsf/icone-attention.gif) Je rappelle que ce topic est un exercice et non pas un concours. Il n'y a pas de gagnant, et il a pour but de vous aider à progresser ! N'hésitez pas à participer, même si vous débutez !


Donc voici l'exercice de ce soir :

"Une nuit bien arrosée !"
Le but de cet exercice est de proposer au joueur de s'alcooliser.  :ninja

Easy : Donner une bouteille au joueur.
Le but est ici facile. Dans une boite de nuit, placez un pickup devant le bar (Modèle de votre choix). Quand le joueur marche sur le pickup, donnez-lui une bouteille, grâce à une SpecialAction.

Easy : Garchon ! La carte !
Cet exercice consiste à faire un menu proposant différentes boissons. En fonction de la boisson choisie, l'argent est retiré (A condition qu'il en ait assez !), et on ajoute un certain degré d'alcoolémie au joueur.

Moyen : Donner une bouteille au joueur V2.
Un peu plus compliqué que le 1er exercice, celui-ci consiste à donner une bouteille, mais cette bouteille doit être un objet ! Le joueur devra porter sa bouteille à la main.

Difficile (quoique...) : Boire tue !
Eh oui, certains joueurs vont se retrouver en coma ethylique ! Enlevez 0.2 point de vie au joueur dès qu'il sera en état d'ébriété !


Les solutions seront publiées dimanche soir !


N'oubliez pas que je suis disponible pour tout problème. Vous n'êtes pas obligés de poster la source, ces exercices sont, comme je l'ai déjà dit, un entraînement et non pas un concours !
Si vous avez des idées d'exercices pour la suite, n'hésitez pas à me contacter par PM !


Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Xartrick le 21 Mai 2011, 18:09:21
Voici ma solution.

http://pastebin.gtaonline.fr/pastebin.php?show=1091 (http://pastebin.gtaonline.fr/pastebin.php?show=1091)

Pour la consigne numéro 3, c'est actuellement impossible (SAMP 0.3c).
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 21 Mai 2011, 18:52:30
Pour le 3, je pense que AttachObjectToPlayer est possible  ;)
Sinon pas mal, mais tu n'as pas besoin de créer une variable PlayerAlcoholLevel (Il y a GetPlayerDrunkLevel et SetPlayerDrunkLevel pour ça)
++
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Ssk le 21 Mai 2011, 19:02:41
Pour la bouteille, il y a déjà une fonction de SAMP faites pour, elle contient SpecialAction dans son nom si je me souviens bien ^^
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Xartrick le 21 Mai 2011, 20:04:36
Citation de: Gilux
Pour le 3, je pense que AttachObjectToPlayer est possible 
Sinon pas mal, mais tu n'as pas besoin de créer une variable PlayerAlcoholLevel (Il y a GetPlayerDrunkLevel et SetPlayerDrunkLevel pour ça)
++

Justement, ce n'est pas possible avec AttachObjectToPlayer, du moins, pas sur la main.
Pour les fonctions GetPlayerDrunkLevel et SetPlayerDrunkLevel, le fait maison, c'est mieux :).
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 22 Mai 2011, 11:35:26
Salut,
Ce soir je n'aurai sûrement pas le temps de poster la solution, alors je le fais maintenant :

1) Donner une bouteille au joueur.
Pour cet exercice facile, il suffisait juste d'utiliser la fonction SetPlayerSpecialAction et un système de pickups.

En haut du script, on crée un pickup :
new pickupalcool;

Dans OnGameModeInit, on crée ce pickup :
pickupalcool = CreatePickup(1247, 23, 499.1586,-20.6216,1000.6797, -1);

Quand le joueur ramasse ce pickup, on lui donne une bouteille :
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == pickupalcool)
{
   SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DRINK_BEER);
}
return 1;
}



2) Garchon ! La carte !
Pour cet exercice, il fallait créer une boîte de dialogue (ou un menu avec CreateMenu, comme vous voulez) :
Mais avant toute chose, on définit la boite de dialogue par un nom plutôt que par un chiffre : (A placer en haut du script)

#define DIALOG_ALCOOL    10



public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/carte", cmdtext, true, 10) == 0)
{
ShowPlayerDialog(playerid,DIALOG_ALCOOL,DIALOG_STYLE_LIST,"Consommations","{00FF00}Sprunk | {FFFFFF}2$\n{00FF00}Vin | {FFFFFF}4$\n{00FF00}Bière | {FFFFFF}3$\n{00FF00}Whisky | {FFFFFF}6$\n{00FF00}Pastis | {FFFFFF}6$\n{00FF00}Rhum | {FFFFFF}7$\n{00FF00}Vodka | {FFFFFF}5$","Acheter", "Annuler");
return 1;
}
return 0;
}

Ensuite, on traite ce que le joueur a choisi :

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_ALCOOL && response)
{
   new boissonchoisie;
boissonchoisie = listitem; // On met le numéro de la ligne que le joueur a choisi dans la variable boissonchoisie.
switch(boissonchoisie)
{
case 0: // Sprunk
{
   BuyDrink(playerid,2,0); // 2$, pas d'alcool en plus.
                        }
                        case 1: // Vin
                        {
                            BuyDrink(playerid,4,1000); // 4$, + 1000
}
case 2: // Bière
{
   BuyDrink(playerid,3,750);
}
case 3: // Whisky
{
   BuyDrink(playerid,6,2300);
}
case 4: // tchiot jaune x)
{
   BuyDrink(playerid,6,3000);
}
case 5: // Rhum
{
   BuyDrink(playerid,7,2600);
}
case 6: // Vodka
{
   BuyDrink(playerid,5,3000);
}
}
}
return 1;
}


Avec la fonction BuyDrink (Facultatif bien entendu, mais réduit le code) à mettre ou vous voulez dans le script, tant qu'elle n'est pas dans une callback, qui traite la commande :

stock BuyDrink(playerid,price,value)
{
if(GetPlayerMoney(playerid) < price)
{
   SendClientMessage(playerid,0xFF0000FF,"Tu ne peux te payer ceci.");
}
else
{
   GivePlayerMoney(playerid, - price);
SetPlayerDrunkLevel(playerid,GetPlayerDrunkLevel(playerid) + value);
}
return 1;
}

La structure de BuyDrink est la suivante : BuyDrink(playerid,prix de la boisson,alcool ajouté);

3) Donner une bouteille au joueur V2.
@Xartrick : Si si, c'est possible ! :P
(http://i27.servimg.com/u/f27/14/77/47/47/sa-mp-19.jpg)
Il faut utiliser la fonction SetPlayerAttachedObject.
if (strcmp("/bouteille", cmdtext, true, 10) == 0)
{
        SetPlayerAttachedObject(playerid, 3, 1487, 6);
return 1;
}
La bouteille ne spawn pas précisément, mais il est possible de modifier sa position relative au joueur avec des paramètres facultatifs (voir wiki).


4) Boire tue !
Il fallait évidemment choisir un timer !
Dans OnGameModeInit, on crée le timer :
SetTimer("limitealcool",500,true);
Sans oublier le forward en haut du script :
forward limitealcool();

Le contenu de la fonction appelée par le timer est le suivant :
public limitealcool()
{
for(new i; i < MAX_PLAYERS; i++)
{
   if(GetPlayerDrunkLevel(i) > 10000)
   {
       new Float:health;
GetPlayerHealth(i,health);
       SetPlayerHealth(i,health-0.2); // On retire 0.2 pt de vie toutes les 500ms si le joueur a un DrunkLevel supérieur à 10000.
}
}
return 1;
}
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Xartrick le 22 Mai 2011, 16:17:42
Ils disent des bêtises sur le forum de SAMP :).
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: S!m le 22 Mai 2011, 16:19:13
Salut,

je me doit de te féliciter Gilux.

tu as su créer un exercice avec un bon niveau de difficulté, accessible mais pas trop facile.
De plus, tu as intégré une fonction relativement récente de sa-mp. (bah 0.3c quoi...)
Les solutions sont claires et bien conçues (avec couleur^^).

Bref: Bravo

++Sim++
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 26 Mai 2011, 22:19:31
Merci !
J'ajouterai de nouveaux exercices demain ;)
++
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 28 Mai 2011, 11:44:44
Mince j'ai zappé, désolé du double post.

Voici les exercices v2. Cette semaine, il n'y en aura que 2, mais comme ils seront un peu plus longs, ils vont bien vous occuper quand même :P

Cette semaine, le thème est le DeathMatch.



Easy : Créer un système de statistiques.
Un exercice assez simple, il suffit de faire un système ou l'on voit : Kills, morts, ratio, suite de kill actuelle, et meilleure suite de kills. Vous devrez ensuite faire une commande qui ouvrira boite de dialogue (de type Msgbox) avec le nom de tous les joueurs connectés, leur nombre de kills, de morts, etc.
Vous pouvez aussi offrir des récompenses pour 3,5,10,15 kills de suite...

Optionnel (Niveau Hard) : Vous pouvez ensuite faire un système de sauvegarde avec des fichiers / base de données si vous le souhaitez. Sachez toutefois que cet exercice ne sera pas corrigé. Vous pouvez vous aider du tutoriel Dini de Cristab si vous voulez ;)


Moyen : Créer un DM.
Cet exercice consiste à créer un DM dans le casino de LV, avec ses commandes /dm et /dmquit.
Libre à vous d'utiliser la méthode, les armes, les spawns de votre choix.

Correction le lundi 30 mai jeudi 2 Juin dans la soirée.
Bonne chance ;)

PS : Si la participation est bonne, il serait sympathique de faire des concours, avec des petits lots à gagner :P
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Ssk le 28 Mai 2011, 11:52:26
Sympa, mais je suis débordé pour y participer en deux jours :s
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 28 Mai 2011, 11:56:30
C'est vrai que c'est un petit délai ^^ Je vais repousser ça à Jeudi prochain.
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Xartrick le 28 Mai 2011, 13:50:10
Dommage, je ne peux pas participé, je suis vraiment très occupé !
J'essayerais de poster le code de l'exercice facile ;).
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 08 Juin 2011, 23:08:44
Désolé du retard pris pour la correction, mais j'ai beaucoup de boulot en ce moment. Si quelqu'un peut proposer une petite correction (juste le code, je le commenterai/modifierai) ça serait sympa. D'ailleurs, il n'y aura pas d'exercices jusqu'après le bac, c'est à dire le 24 Juin. Merci de votre compréhension :)
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: cristab le 08 Juin 2011, 23:24:10
demain je tente de poster les 3Codes pour te soulager :)
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Xolokos le 05 Juillet 2011, 21:44:40
Donc voilà le code avec les Statistiques.

Le Pastebin de l'exercice de Gilux. (http://pastebin.gtaonline.fr/pastebin.php?show=1127)
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 22 Juillet 2011, 15:05:38
Merci à toi (Désolé du retard xD)  :)
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Vellric le 02 Septembre 2011, 04:33:33
Salut,

Donc je crois qu'ici est la meilleure place où poster pour ce que je veux ^^'

J'aimerais quelque chose dans le même genre que ce sujet, qui m'a l'air 'mort', enfin je ne sais pas si Gilux l'a oublié ou quoi que ce soit, mais bon ^^

Donc en gros, je ne sais pas vraiment mon niveau de codage du pawn, mais j'ai assez de difficulté avec la création de commande. Quand il s'agit de modifier des commandes pour qu'elles fassent X ou Y chose ou changer ses conditions, c'est de la rigolade. En gros, je suis bon pour éditer du pawn, mais rendu à la création de fonctions & commandes, je suis nul et je bloque un peu, même après avoir suivi X nombre de fois je ne sais combien de tuto (dont ceux de Gilux). J'aimerais donc que des gens me donnent des exercices pour m'améliorer puis qu'ils me corrigent après, enfin un genre de cours mais ici avec vous :p, et je suis sûr que ça pourrait aider plus d'un de faire des choses du genre.

Merci d'avance de vos réponses ou de votre aide, ou si je ne suis pas à la bonne place simplement me rediriger l'erreur est humaine ^^

Précision : La commande que j'ai créé avec le plus de succès jusqu'à date est une commande très basique en me basant sur les tutoriels de Gilux
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Vellric le 02 Septembre 2011, 13:51:09
Merci à toi je vais regarder pou faire ça et je la mettrai sur le sujet pour voir ce que ça donne ^^
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 30 Octobre 2011, 12:39:48
Salut !

Ça faisait longtemps que je n'avais rien posté, alors je vais m'inspirer de ce que j'ai fait hier (enfin, très tôt ce matin) pour un petit exercice :)

Cet exercice est plus mathématique que lié au Pawn, enfin c'est pas grave ça vous fera du bien  :ninja

J'avais préparé une demande d'aide avant de réussir à le faire par moi-même :fier:
Donc je remet le schéma que j'avais préparé :

(http://i47.servimg.com/u/f47/14/77/47/47/schama10.png)

Le schéma était préparé pour un système de montgolfière. C'est à dire que le joueur est dans son ballon au point A.
Le ballon doit se diriger sur une distance de 5 unités (=5m) vers le FacingAngle du joueur quand celui-ci appuie sur Espace ou Majuscule selon les configs (KEY_SPRINT). C'est à dire que si le joueur est dirigé vers le nord-est, le ballon ira vers cette direction, mais il parcourra TOUJOURS 5m.
Le but est ici de calculer AC et AD pour trouver les coordonnées précises du point B.

Les fonctions qui pourraient vous être utiles :

• GetPlayerFacingAngle
• floatcos
• floatsqroot

Si vous n'avez pas encore la 0.3d, pas grave, n'hésitez pas à ne faire que l'algorithme si vous voulez ;)

Bonne chance ;)
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Ssk le 30 Octobre 2011, 13:29:52
Comme ça ?

MoveObjectFromAngle( objectid, Float:Angle, Float:Distance )
{
new Float:posX = 0.0, Float:posY = 0.0, Float:posZ = 0.0;
GetObjectPos( objectid, posX, posY, posZ );
posX += Distance * -floatsin( Angle );
posX += Distance * -floatcos( Angle );
MoveObject( objectid, posX, posY, posZ, 1.0 );
}
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 30 Octobre 2011, 13:44:36
Ça semble bon, moi j'ai mis beaucoup plus de lignes que ça par contre  :happy
Titre: Re : Re : [TP] Le topic à exercice ! [Version 2]
Posté par: S!m le 05 Novembre 2011, 21:08:12
Salut,

petite erreur sasuke:

posX += Distance * -floatsin( Angle );
posX += Distance * -floatcos( Angle );

Sinon c'est pas mal bon. Je ne sais pas si MoveObject retourne une valeur particulière (par exemple en cas d'objet inexistant), mais on pourrait la rendre utilisable ainsi:

MoveObjectFromAngle( objectid, Float:Angle, Float:Distance )
{
new Float:posX = 0.0, Float:posY = 0.0, Float:posZ = 0.0;
GetObjectPos( objectid, posX, posY, posZ );
posX += Distance * -floatsin( Angle );
posY += Distance * -floatcos( Angle );
return MoveObject( objectid, posX, posY, posZ, 1.0 );
}

sinon, tes montgolfières ne devraient pas pouvoir monter et descendre?
Pour faire un truc plus réaliste ce serait bien de faire une matrice de vents (je parle de tableau bidimensionnel bien sur) qui dépendent de la position en x et y. On pourrait ainsi imposer le déplacement en X et Y à la montgolfière comme c'est le cas en réalité.
La matrice pourrait être modifié à tous les X minutes et le joueur pourrait contrôler le bruleur de la montgolfière. Le bruleur devrait avoir un effet sur l'altitude de la montgolfière, effet retardé de quelques secondes vu le délai pour la répartition de l'air dilaté... Bref, ça devient un script intéressant.

++Sim++
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Gilux le 12 Novembre 2011, 22:35:47
Salut,
Petit corrigé rapide (Sans code, l'algorithme seul était à trouver) :
Il fallait utiliser les fonction floatcos et floatsin avec le paramètre degrees (Ou Radians si vous vouliez, mais bon c'était totalement inutile...)
Après, les opérations de trigonométrie faisaient le reste : Calcul du coté BD en fonction de l'angle, et application du théorème de Pythagore pour trouver AD en fonction de AB et BD. (AD² = AB² + BD²)
Comme BD = CA, on connaît la distance du point C et du point D par rapport au point A, ce qui permet de trouver les bons paramètres de nouvelle position pour la fonction MoveObject !

++
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: WaTsoN le 13 Novembre 2011, 17:03:50
 :birthday
(http://www.gtaonline.fr/forums/Themes/proton/images/warnwarn.gif) Freepost
Titre: Re : [TP] Le topic à exercice ! [Version 2]
Posté par: Xolokos le 18 Novembre 2011, 11:49:20
Et ben dit donc je vais devoir me remettre a la trigo' ça ma bien aidé merci.