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

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;
}