Exercice en Pawn - Dйbutant
#1

[CENTER][SIZE="4"]Niveau des exercices : [COLOR="Red"]Dйbutant[/COLOR][/SIZE]

Bonjour,
ici vous trouverez des exercices qui seront а faire et а poster а la suite de ce sujet.

Si vous pensez que les exercices indiquйs sont trop faciles pour vous, regardez les autres sujets d'exercices.
Pensez а expliquer votre code, ne le postez pas bкtement, prouvez que vous avez compris ce que vous avez fait.

Vous pouvez poster un exercice, dиs que celui en cours est terminй.
Pensez а indiquer les ressources (callbacks, fonctions, tableaux, boucles etc...) pour chaque exercice afin d'aider un minimum pour rйaliser le code.

[ttable]

[tr]
[td][SIZE="3"][COLOR="DarkRed"][CENTER]Exercice[/CENTER][/COLOR][/SIZE][/td]
[td][SIZE="3"][COLOR="DarkRed"][CENTER]Rйsolution[/CENTER][/COLOR][/SIZE][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3432980#pid3432980"]Exercice : 1[/URL] [Dutheil][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3433524#pid3433524"]Rйsolution [/URL] [Chipardeur][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3435287#pid3435287"]Exercice : 2[/URL] [S4t3k][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3435296#pid3435296"]Rйsolution [/URL] [Baltimore][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3435313#pid3435313"]Exercice : 3[/URL] [S4t3k][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3435820#pid3435820"]Rйsolution [/URL] [Z3N0N][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3447574#pid3447574"]Exercice : 4[/URL] [BreakStore][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3448091#pid3448091"]Rйsolution [/URL] [LordFalcon][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3448102#pid3448102"]Exercice : 5[/URL] [Dutheil][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3448663#pid3448663"]Rйsolution [/URL] [d0wze][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3448693#pid3448693"]Exercice : 6[/URL] [S4t3k][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3448980#pid3448980"]Rйsolution [/URL] [Dutheil][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3449003#pid3449003"]Exercice : 7[/URL] [Dutheil][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3449024#pid3449024"]Rйsolution [/URL] [Chipardeur][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3450416#pid3450416"]Exercice : 8[/URL] [S4t3k][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3450439#pid3450439"]Rйsolution [/URL] [Baltimore][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3450499#pid3450499"]Exercice : 9[/URL] [TheWWorld][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3450533#pid3450533"]Rйsolution [/URL] [Chipardeur][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3450533#pid3450533"]Exercice : 10[/URL] [Chipardeur][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3450681#pid3450681"]Rйsolution [/URL] [Lacrim][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3450693#pid3450693"]Exercice : 11[/URL] [Chipardeur][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3451310#pid3451310"]Rйsolution [/URL] [StreetRP][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3451521#pid3451521"]Exercice : 12[/URL] [Chipardeur][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?tid=571177&page=8"]Rйsolution [/URL] [Z3N0N][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3464780#pid3464780"]Exercice : 13[/URL] [Z3N0N][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3464824#pid3464824"]Rйsolution [/URL] [Dutheil][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3464831#pid3464831"]Exercice : 14[/URL] [Dutheil][td][URL="https://sampforum.blast.hk/showthread.php?pid=3464959#pid3464959"]Rйsolution [/URL] [Azula][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3465179#pid3465179"]Exercice : 15[/URL] [Azula][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3465496#pid3465496"]Rйsolution [/URL] [Squalalah][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3466006#pid3466006"]Exercice : 16[/URL] [Azula][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3466013#pid3466013"]Rйsolution [/URL] [Dutheil][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3502011#pid3502011"]Exercice : 17[/URL] [Dutheil][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3503530#pid3503530"]Rйsolution [/URL] [Papawy][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3503537#pid3503537"]Exercice : 18[/URL] [Dutheil][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3503600#pid3503600"]Rйsolution [/URL] [Florentin77][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3503614#pid3503614"]Exercice : 19[/URL] [Dutheil][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3503623#pid3503623"]Rйsolution [/URL] [Florentin77][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3503804#pid3503804"]Exercice : 20[/URL] [Dutheil][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3503852#pid3503852"]Rйsolution [/URL] [Papawy][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3551586#pid3551586"]Exercice : 21[/URL] [Dutheil][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3552419#pid3552419"]Rйsolution [/URL] [nicolaskettler][/td]
[/tr]

[tr]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3553343#pid3553343"]Exercice : 22[/URL] [Dutheil][/td]
[td][URL="https://sampforum.blast.hk/showthread.php?pid=3553521#pid3553521"]Rйsolution [/URL] [nicolaskettler][/td]
[/tr]
[/ttable]


[/CENTER]
Reply
#2

Rйalisation : Vous devrez coder un petit script de jeu "Plus ou moins".
A partir d'une commande, cela gйnйrera un nombre au hasard entre 1 et 100.
Concrиtement si le joueur tape dans le chat un nombre, vous devrez vйrifier si le nombre est supйrieur ou infйrieur au nombre gйnйrй alйatoirement et l'indiquer au joueur.

Si le joueur trouve le nombre, il gagne 500$ et зa envoit un message а tous les joueurs disant qu'il a trouvй le nombre en indiquant dans le message son pseudo et le nombre.

Il faudra aussi empкcher les joueurs de taper la commande si ils ne sont pas logguйs en RCON et aussi si le nombre n'a pas йtй trouvй.

Ressources : Vous aurez besoin de deux callbacks :
OnPlayerText - Appelй quand un joueur йcrit quelque chose dans le chat.
OnPlayerCommandText - Appelй quand un joueur tape une commande dans le chat.

Des conditions. (if, else if & else)
D'une variable globale et locale.

Des fonctions :
strcmp : а utiliser dans OnPlayerCommandText, voir le wiki.
strval : permet de convertir une chaоne de caractиres vers un entier, voir le wiki.

De crйer votre fonction pour gйnйrer un nombre alйatoire avec 2 paramиtres, voir mon tutoriel sur les directives de prй-processeur.

GivePlayerMoney - Permet de donner de l'argent а un joueur, voir le wiki.
IsPlayerAdmin - Permet de vйrifier si l'id fournie est bien connectй en RCON.
Reply
#3

Merci а toi :)
Reply
#4

[pawn]new bool:jeuEnCours;
new nombreGenere;

CMD:jeu(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Vous devez кtre connectй en RCON pour lancer le jeu.");
if(jeuEnCours) return SendClientMessage(playerid, -1, "Le jeu est dйjа en cours et le nombre n'a pas йtй trouvй.");

nombreGenere = 1+random(100);
return SendClientMessageToAll(-1, "Un nombre alйatoire a йtй gйnйrй, trouvez le en tappant des nombres dans le tchat.");
}

public OnPlayerText(playerid, text[])
{
new string[145], pseudo[MAX_PLAYER_NAME+1];
if(IsPlayerConnected(playerid))
{
if(jeuEnCours)
{
if(strval(text) > nombreGenere) return format(string, sizeof string, "Le nombre est infйrieur а %d", strval(text)), SendClientMessage(playerid, -1, string);
else if(strval(text) < nombreGenere) return format(string, sizeof string, "Le nombre est supйrieur а %d", strval(text)), SendClientMessage(playerid, -1, string);
else if(strval(text) == nombreGenere)
{
GetPlayerName(playerid, pseudo, sizeof pseudo);
GivePlayerMoney(playerid, 500);
format(string, sizeof string, "%s a trouvй le nombre qui йtait %d et remporte 500$.", pseudo, nombreGenere);
return SendClientMessageToAll(-1, string);
}
}
}
return 1;
}[/pawn]

Codй а la va vite, peut-кtre des erreurs. (et j'm'en fou du niveau wsh)
Reply
#5

Gneugneuh.
Dutheil;3432842 Wrote:[CENTER]Pensez а expliquer votre code, ne le postez pas bкtement, prouvez que vous avez compris ce que vous avez fait.[/CENTER]

Et aussi, ta variable jeuEnCours est inutile, autant utiliser la variable nombreGenere, si elle est diffйrente de 0 c'est que le jeu est en cours!
Reply
#6

Ah oui et mon code ne fonctionnera qu'une fois vu que j'oublie de mettre jeuEnCours et nombreGenere а false et 0.
Reply
#7

Un deuxiиme exercice.

Codez une commande /salut qui dira "Salut [pseudo du joueur а qui on le dit] ! Je suis [pseudo du joueur qui a tapй la commande" а chaque joueur connectй sauf йvidement le joueur qui aura tapй la commande.

Vous aurez besoin :

- ZCMD (svp pas OnPlayerCommandText)
- Une boucle (foreach conseillйe)
- GetPlayerName/format/SendClientMessage
Reply
#8

[pawn]COMMAND:salut(playerid, params[])
{
new string[144],
name[MAX_PLAYER_NAME+1],
othername[MAX_PLAYER_NAME+1];

GetPlayerName(playerid, name, sizeof(name));

foreach(new i : Player)
{
if(i == playerid)
continue;

GetPlayerName(i, othername, sizeof(othername));

format(string, sizeof(string), "Salut %s ! Je suis %s.", othername, name);
SendClientMessage(i, -1, string);
}
return 1;
}[/pawn]

Quelque chose du style?
Reply
#9

PHP Code:
COMMAND:salut(playeridparams[])
{
    new 
string[145], nomenvoyeur[21], nomrecepteur[21];
    
GetPlayerName(playeridnomenvoyeur21);
    for(new 
0&ltMAX_PLAYERSi++)
    {
        if(
IsPlayerConnected(i) &amp;&amp!= playerid)
        {
        
GetPlayerName(inomrecepteur21);
        
format(stringsizeof(string), "Salut %s ! Je suis %s"nomrecepteurnomenvoyeur);
        
SendClientMessage(i0xFF0000FF,string);
        }
    }
    return 
1;


Voilа, j'ai un peut optimiser, le code faisait 35lignes :p


---------------
Je suis en retard, bien jouer Baltimore :p
Reply
#10

@Baltimore : Ouaip'

@TWW : Un message peut faire 144 caractиres max (donc 145 avec le nullbyte). Ton code enverra йgalement un message au joueur qui a tapй la commande. Tu peux mettre "21" au lieu de "sizeof(name)" (c'est un calcul en moins vu qu'il est pas nйcessaire). Ensuite, j'ai conseillй une boucle foreach justement pour ne pas avoir а faire une boucle for + un "IsPlayerConnected" (pour habituer les dйbutants а bien coder dиs le dйpart). Ca change pas tellement du code de Baltimore sinon, а part le fait qu'il y ait moins de lignes, mais les espaces influent pas sur la rapiditй. Enfin, ta boucle n'ira pas plus loin que le joueur ID 0, vu que tu mets return 1 а l'intйrieur, ce qui fera sortir de la callback de la commande sans aller plus loin.

Un autre exercice ?

Une commande /lecture qui demandera le lien ******* d'une vidйo au joueur, puis qui lui lira jusqu'а ce qu'il tape /stop.

Vous aurez besoin :

- D'un dialog (et donc d'OnDialogResponse)
- De PlayAudioStreamForPlayer/StopAudioStreamForPlayer
- De manipuler un peu le lien rentrй par le joueur
- D'un player de vidйos ******* en MP3 en ligne (mdr bonne chance pr le trouver moi j'ai la flemme)

Bonne chance.
Reply
#11

TheWWorld;3435308 Wrote:
PHP Code:
COMMAND:salut(playeridparams[])
{
    new 
string[255], nomenvoyeur[21], nomrecepteur[21];
    
GetPlayerName(playeridnomenvoyeursizeof(nomenvoyeur));
    for(new 
0&ltMAX_PLAYERSi++)
    {
        if(
IsPlayerConnected(i))
        {
        
GetPlayerName(inomrecepteursizeof(nomrecepteur));
        
format(stringsizeof(string), "Salut %s ! Je suis %s"nomrecepteurnomenvoyeur);
        
SendClientMessage(i0xFF0000FF,string);
        return 
1;
        }
    }
    return 
1;


Voilа, j'ai un peut optimiser, le code faisait 35lignes :p

Ta version est moins optimisйe que celle de Baltimore.
Sachant que SCM ne peut avoir que 144 caractиres et si on prend en compte le nullbyte, le mieux est donc de dйclarer ton tableau а 145 et il a utilisй foreach pour que зa soit plus rapide.

De plus, ta version enverra un message au joueur ayant tapй la commande, or S4t3k l'a dit :
Quote:а chaque joueur connectй [COLOR="Red"]sauf йvidement le joueur qui aura tapй la commande[/COLOR].

Edit : Et ta boucle s'arrкtera au premier joueur connectй, car tu as un return dans ta boucle.
Reply
#12

Dutheil;3435315 Wrote:Ta version est moins optimisйe que celle de Baltimore.
Sachant que SCM ne peut avoir que 144 caractиres et si on prend en compte le nullbyte, le mieux est donc de dйclarer ton tableau а 145 et il a utilisй foreach pour que зa soit plus rapide.

De plus, ta version enverra un message au joueur ayant tapй la commande, or S4t3k l'a dit :


Edit : Et ta boucle s'arrкtera au premier joueur connectй, car tu as un return dans ta boucle.

J'ai tout re-modifier :) Sa envoie plus seulement au premier joueur et зa enverra pas au joueur qui a tapй la commande.
J'ai modifier la longueur des tableaux et enlever les sizeof.
Quelqu'un peut m'envoyer Foreach en MP ?
Reply
#13

Tйlйcharge carrйment YSI 4.0 (quelqu'un l'a rй-upload), y'a pas que y_iterate qui est utile dans la bibliothиque ;)
Reply
#14

Include autorisй ? https://sampforum.blast.hk/showthread.php?tid=291288
Reply
#15

Nop' Alexis, sinon quel intйrкt ?
Reply
#16

D'йviter de chercher X heures le *******-mp3.
Reply
#17

Je conseillerais aux participants d'utiliser cette include plus simple d'utilisation pour vos dialogues.
Reply
#18

....
Reply
#19

@Maximum je doute fortement que sa fonctionne de cette faзon lа
Reply
#20

Maximun;3435726 Wrote:
PHP Code:
new MusicOn[MAX_PLAYERS];
public 
OnPlayerCommandText(playeridcmdtext[])
{
    if(
strcmp(cmd"/lecture"true) == 0)
    {
        if(
IsPlayerConnected(playerid))
        {
            if(
MusicOn[playerid] == 0)
            {
                
ShowPlayerDialog(playerid,1,DIALOG_STYLE_LIST,"-| Music |-","Lost Frequencies - Are You With Me","Ecouter","Fermer");
            }
        }
        return 
1;
    }
    if(
strcmp(cmd"/stop"true) == 0)
    {
        if(
IsPlayerConnected(playerid))
        {
            if(
MusicOn[playerid] == 1)
            {
                
StopAudioStreamForPlayer(playerid);
                
MusicOn[playerid] = 0;
                
SendClientMessage(playerid, -1,"[Music] Vous venez d'arreter la music.");
            }
        }
        return 
1;
    }
    return 
0;
}

public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    if(
dialogid == 1)
    {
        if(
response)
        {
            if(
listitem == 0)
            {
                
PlayAudioStreamForPlayer(playerid"https://www.youtube.com/watch?v=VjHMDlAPMUw");
                
MusicOn[playerid] = 1;
            }
        }
        return 
1;
    }
    return 
0;


Ce n'est pas зa. Lа tu as prй-enregistrй ton Stream et surtout ce n'est pas ce qui est demandй. Ce qui est demandй, c'est que tu rentres toi-mкme dans un dialogue de type DIALOG_STYLE_INPUT ton url et que la musique soit dйmarrйe а partir de ton url.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)