• 15 Juillet 2019, 20:53:31


Auteur Sujet: [TP] Le topic à exercice ! [Version 2]  (Lu 25126 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8187
    • Voir le profil
Re : [TP] Le topic à exercice ! [Version 2]
« Réponse #30 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 ^^



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1396
    • Voir le profil
    • Xartrick's Area
Re : [TP] Le topic à exercice ! [Version 2]
« Réponse #31 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 :).

Hors ligne Gilux

  • *
  • Mafioso
  • GOOBY PLS
  • Messages: 2209
    • Voir le profil
Re : [TP] Le topic à exercice ! [Version 2]
« Réponse #32 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(124723499.1586,-20.6216,1000.6797, -1);

Quand le joueur ramasse ce pickup, on lui donne une bouteille :
public OnPlayerPickUpPickup(playeridpickupid)
{
	
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(playeridcmdtext[])
{
	
if (
strcmp("/carte"cmdtexttrue10) == 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(playeriddialogidresponselistiteminputtext[])
{
	
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

Il faut utiliser la fonction SetPlayerAttachedObject.
if (strcmp("/bouteille"cmdtexttrue10) == 0)
	
{
        
SetPlayerAttachedObject(playerid314876);
	
	
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 
iMAX_PLAYERSi++)
	
{
	
    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;
}
« Modifié: 22 Mai 2011, 15:33:48 par Gilux »
Je ne donne pas d'aide en MP ou skype, le forum est là pour ça :wink:


Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1396
    • Voir le profil
    • Xartrick's Area
Re : [TP] Le topic à exercice ! [Version 2]
« Réponse #33 le: 22 Mai 2011, 16:17:42 »
Ils disent des bêtises sur le forum de SAMP :).

Hors ligne S!m

  • *
  • Messages: 2354
    • Voir le profil
Re : [TP] Le topic à exercice ! [Version 2]
« Réponse #34 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++





Hors ligne Gilux

  • *
  • Mafioso
  • GOOBY PLS
  • Messages: 2209
    • Voir le profil
Re : [TP] Le topic à exercice ! [Version 2]
« Réponse #35 le: 26 Mai 2011, 22:19:31 »
Merci !
J'ajouterai de nouveaux exercices demain ;)
++
Je ne donne pas d'aide en MP ou skype, le forum est là pour ça :wink:


Hors ligne Gilux

  • *
  • Mafioso
  • GOOBY PLS
  • Messages: 2209
    • Voir le profil
Re : [TP] Le topic à exercice ! [Version 2]
« Réponse #36 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
« Modifié: 28 Mai 2011, 11:57:09 par Gilux »
Je ne donne pas d'aide en MP ou skype, le forum est là pour ça :wink:


Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8187
    • Voir le profil
Re : [TP] Le topic à exercice ! [Version 2]
« Réponse #37 le: 28 Mai 2011, 11:52:26 »
Sympa, mais je suis débordé pour y participer en deux jours :s



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Gilux

  • *
  • Mafioso
  • GOOBY PLS
  • Messages: 2209
    • Voir le profil
Re : [TP] Le topic à exercice ! [Version 2]
« Réponse #38 le: 28 Mai 2011, 11:56:30 »
C'est vrai que c'est un petit délai ^^ Je vais repousser ça à Jeudi prochain.
Je ne donne pas d'aide en MP ou skype, le forum est là pour ça :wink:


Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1396
    • Voir le profil
    • Xartrick's Area
Re : [TP] Le topic à exercice ! [Version 2]
« Réponse #39 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 ;).

Hors ligne Gilux

  • *
  • Mafioso
  • GOOBY PLS
  • Messages: 2209
    • Voir le profil
Re : [TP] Le topic à exercice ! [Version 2]
« Réponse #40 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 :)
Je ne donne pas d'aide en MP ou skype, le forum est là pour ça :wink:


Hors ligne cristab

  • *
  • Messages: 8390
    • Voir le profil
Re : [TP] Le topic à exercice ! [Version 2]
« Réponse #41 le: 08 Juin 2011, 23:24:10 »
demain je tente de poster les 3Codes pour te soulager :)
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne Xolokos

  • PAWN/XHTML/CSS/PHP/SQL/JS
  • *
  • Grand Banditisme
  • What are you waiting for ?
  • Messages: 681
    • Voir le profil
Re : [TP] Le topic à exercice ! [Version 2]
« Réponse #42 le: 05 Juillet 2011, 21:44:40 »
Donc voilà le code avec les Statistiques.

Le Pastebin de l'exercice de Gilux.
« Modifié: 06 Juillet 2011, 11:46:26 par Xolokos »
Nippah !

Hors ligne Gilux

  • *
  • Mafioso
  • GOOBY PLS
  • Messages: 2209
    • Voir le profil
Re : [TP] Le topic à exercice ! [Version 2]
« Réponse #43 le: 22 Juillet 2011, 15:05:38 »
Merci à toi (Désolé du retard xD)  :)
Je ne donne pas d'aide en MP ou skype, le forum est là pour ça :wink:


Hors ligne Vellric

  • *
  • Nouveau
  • Messages: 9
    • Voir le profil
Re : [TP] Le topic à exercice ! [Version 2]
« Réponse #44 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