GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: resame le 25 Mars 2013, 18:11:25
-
Bonjour,
Voilà j'ai un problème avec un pickup.
Je voudrais que quand je suis sur le pickup un menu apparaisse, celà fait plusieurs jour que je suis coincé sur ce code.
j'ai fait un enum avec les dialogs
<?php
enum
{
pickupaMilli
}
puis
new pickupaMilli; Bon jusqu’à la je pense que tout est bon ^^
dans le OnGameModeInit
j'ai sa:
pickupMilli = CreatePickup(1239, 2, 408.4558,2527.0054,16.5275,1);ps : j'ai aussi essayer avec AddStaticPickup
Et là mon OnPlayerPickUpPickup
if(pickupid == pickupMilli)
{
ShowPlayerDialog(playerid, pickupaMilli, DIALOG_STYLE_LIST, "Equipement millitaires", "AK47(250) [30000]\nGrenade(10) [15000]\nLance-roquette(10) [200000]\nGilet par balles [35000]\nMorphine [20000]\nDeagle [35000]", "Acheter", "Quitter");
}
return 1;
}
[spoiler]Ou cas ou je met OnDialogResponse
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch( dialogid )
{
case DIALOG_REGISTER:
{
if (!response) return Kick(playerid);
if(response)
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""COL_WHITE"Registering...",""COL_RED"You have entered an invalid password.\n"COL_WHITE"Type your password below to register a new account.","Register","Quit");
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteInt(File,"Password",udb_hash(inputtext));
INI_WriteInt(File,"Cash",0);
INI_WriteInt(File,"Score",0);
INI_WriteInt(File,"Admin",0);
INI_WriteInt(File,"Kills",0);
INI_WriteInt(File,"Deaths",0);
INI_Close(File);
ShowPlayerDialog(playerid, DIALOG_SUCCESS_1, DIALOG_STYLE_MSGBOX,""COL_WHITE"Success!",""COL_GREEN"Great! Your Y_INI system works perfectly. Relog to save your stats!","Ok","");
}
}
case DIALOG_LOGIN:
{
if ( !response ) return Kick ( playerid );
if( response )
{
if(udb_hash(inputtext) == PlayerInfo[playerid][pPass])
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
GivePlayerMoney(playerid, PlayerInfo[playerid][pCash]);
SetPlayerScore(playerid, PlayerInfo[playerid][pScore]);
ShowPlayerDialog(playerid, DIALOG_SUCCESS_2, DIALOG_STYLE_MSGBOX,""COL_WHITE"Success!",""COL_GREEN"You have successfully logged in!","Ok","");
}
else
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_RED"You have entered an incorrect password.\n"COL_WHITE"Type your password below to login.","Login","Quit");
}
return 1;
}
}
}
if(dialogid == pickupaMilli)
{
if(response)
{
if(listitem == 0)
{
if(GetPlayerMoney(playerid) >= 30000)
{
GivePlayerWeapon(playerid, 31, 250);
GivePlayerMoney(playerid, -30000);
SendClientMessage(playerid, COLOR_GREEN, "Sergent dit: Voilà ton M4 !");
}
else if(GetPlayerMoney(playerid) <= 29999)
{
SendClientMessage(playerid, COLOR_GREEN, "Tu n'a pas assez d'argent.");
}
return 1;
}
if(listitem == 1)
{
if(GetPlayerMoney(playerid) >= 15000)
{
GivePlayerWeapon(playerid, 16, 10);
GivePlayerMoney(playerid, -15000);
SendClientMessage(playerid, COLOR_GREEN, "Sergent dit: Voilà tes grenades camarades !");
}
else if(GetPlayerMoney(playerid) <= 14999)
{
SendClientMessage(playerid, COLOR_GREEN, "Tu n'a pas assez d'argent.");
}
return 1;
}
if(listitem == 2)
{
if(GetPlayerMoney(playerid) >= 200000)
{
GivePlayerWeapon(playerid, 36, 5);
GivePlayerMoney(playerid, -200000);
SendClientMessage(playerid, COLOR_GREEN, "Sergent dit: Voilà ton HS rocket l'ami !");
}
else if(GetPlayerMoney(playerid) <= 199999)
{
SendClientMessage(playerid, COLOR_GREEN, "Tu n'a pas assez d'argent.");
}
return 1;
}
if(listitem == 3)
{
if(GetPlayerMoney(playerid) >= 35000)
{
SetPlayerArmour(playerid, 100.0);
GivePlayerMoney(playerid, -35000);
SendClientMessage(playerid, COLOR_GREEN, "Sergent dit: Voilà ton gilet par balles l'ami !");
}
else if(GetPlayerMoney(playerid) <= 34999)
{
SendClientMessage(playerid, COLOR_GREEN, "Tu n'a pas assez d'argent.");
}
return 1;
}
if(listitem == 4)
{
if(GetPlayerMoney(playerid) >= 20000)
{
SetPlayerHealth(playerid, 100.0);
SetPlayerArmour(playerid, 10.0);
GivePlayerMoney(playerid, -20000);
SendClientMessage(playerid, COLOR_GREEN, "Sergent dit: Voilà ton kit l'ami !");
}
else if(GetPlayerMoney(playerid) <= 19999)
{
SendClientMessage(playerid, COLOR_GREEN, "Tu n'a pas assez d'argent.");
}
return 1;
}
if(listitem == 5)
{
if(GetPlayerMoney(playerid) >= 35000)
{
GivePlayerWeapon(playerid, 24, 250);
GivePlayerMoney(playerid, -35000);
SendClientMessage(playerid, COLOR_GREEN, "Sergent dit: Voilà ton desert eagle l'ami !");
}
else if(GetPlayerMoney(playerid) <= 34999)
{
SendClientMessage(playerid, COLOR_GREEN, "Tu n'a pas assez d'argent.");
}
return 1;
}
}
return 1;
}
return 1;
}[/spoiler]
-
Tu crée la variable pickupaMilli mais tu utilises une variable nommée pickupMilli, si c'est la même chose dans le code, l'erreur devrait venir de là.
Si justement c'est la même chose dans le code, je vais t'expliquer l'erreur.
Tu énumère pickupaMilli(enum), puis tu crée pickupaMilli (variable), lors de l'utilisation de ShowPlayerDialog, l'id du dialogue sera pickupaMilli. Quand tu vas écrire pickupaMilli en tant qu'id de dialogue, le script ne va pas savoir si il doit utiliser la variable pickupaMilli où l'enumération. Normalement, le compilateur doit fournir une erreur à ce sujet.
Je te conseille d'utiliser un #define où un chiffre pour l'id de dialogue, c'est toujours plus rapide que d'utiliser une énumération et aussi plus compréhensible.
-
j'ai mis #define pickupaMilli 5 (vu que j'avais d'autre dialog)
puis modifier new pickupaMilli; en new pickupMilli;
J'ai modifier le dialog
case pickupaMilli:
if(response)
{
if(listitem == 0)
{
if(GetPlayerMoney(playerid) >= 30000)
{
GivePlayerWeapon(playerid, 31, 250);
GivePlayerMoney(playerid, -30000);
SendClientMessage(playerid, COLOR_GREEN, "Sergent dit: Voilà ton M4 !");
}
else if(GetPlayerMoney(playerid) <= 29999)
{
SendClientMessage(playerid, COLOR_GREEN, "Tu n'a pas assez d'argent.");
}
return 1;
}
if(listitem == 1)
{
if(GetPlayerMoney(playerid) >= 15000)
{
GivePlayerWeapon(playerid, 16, 10);
GivePlayerMoney(playerid, -15000);
SendClientMessage(playerid, COLOR_GREEN, "Sergent dit: Voilà tes grenades camarades !");
}
else if(GetPlayerMoney(playerid) <= 14999)
{
SendClientMessage(playerid, COLOR_GREEN, "Tu n'a pas assez d'argent.");
}
return 1;
}
if(listitem == 2)
{
if(GetPlayerMoney(playerid) >= 200000)
{
GivePlayerWeapon(playerid, 36, 5);
GivePlayerMoney(playerid, -200000);
SendClientMessage(playerid, COLOR_GREEN, "Sergent dit: Voilà ton HS rocket l'ami !");
}
else if(GetPlayerMoney(playerid) <= 199999)
{
SendClientMessage(playerid, COLOR_GREEN, "Tu n'a pas assez d'argent.");
}
return 1;
}
if(listitem == 3)
{
if(GetPlayerMoney(playerid) >= 35000)
{
SetPlayerArmour(playerid, 100.0);
GivePlayerMoney(playerid, -35000);
SendClientMessage(playerid, COLOR_GREEN, "Sergent dit: Voilà ton gilet par balles l'ami !");
}
else if(GetPlayerMoney(playerid) <= 34999)
{
SendClientMessage(playerid, COLOR_GREEN, "Tu n'a pas assez d'argent.");
}
return 1;
}
if(listitem == 4)
{
if(GetPlayerMoney(playerid) >= 20000)
{
SetPlayerHealth(playerid, 100.0);
SetPlayerArmour(playerid, 10.0);
GivePlayerMoney(playerid, -20000);
SendClientMessage(playerid, COLOR_GREEN, "Sergent dit: Voilà ton kit l'ami !");
}
else if(GetPlayerMoney(playerid) <= 19999)
{
SendClientMessage(playerid, COLOR_GREEN, "Tu n'a pas assez d'argent.");
}
return 1;
}
if(listitem == 5)
{
if(GetPlayerMoney(playerid) >= 35000)
{
GivePlayerWeapon(playerid, 24, 250);
GivePlayerMoney(playerid, -35000);
SendClientMessage(playerid, COLOR_GREEN, "Sergent dit: Voilà ton desert eagle l'ami !");
}
else if(GetPlayerMoney(playerid) <= 34999)
{
SendClientMessage(playerid, COLOR_GREEN, "Tu n'a pas assez d'argent.");
}
return 1;
}
}
}
le if(pickupid == pickupMilli) je l'es laisser pareil, mais sa ne fonctionne pas :/
-
Et la boite de dialog à la même id que le pickup, je me trompe??
-
Non, l'id du dialog est pickupaMilli et celui du pickup est pickupMilli
-
Tu ne peux pas définir deux symboles avec le même nom, c'est du suicide. :ninja:
-
Moi perso pour le nom de mes pickup je fais comme ceci:
new p_Militaire;
Et pour mes dialog
new d_Militaie;
Ce qui rend mon code plus clair et je m'embrouille pas :p
-
Pour les boîtes de dialogue, c'est inutile, cela utilise de la mémoire pour rien, le mieux est d'utiliser des #define.
Pour les pickups c'est obligatoire puisque la fonction qui les créer retourne un indice vers le pickup crée.
-
Ah oui exact pour les dialog xartrick. Je sais pas pourquoi j'ai mit ça en plus car j'utilise les Define ><
-
Ah oui exact pour les dialog xartrick. Je sais pas pourquoi j'ai mit ça en plus car j'utilise les Define ><
Je connais quelqu'un qui n'a pas bien révisé ses cours particuliers... :p