Sobre ShowPlayerDialog -
Ley - 02.08.2013
Bom dia, estou com pequenas dъvidas sobre a funзгo, irei explicar detalhadamente.
Eu criei um comando, na qual seria possнvel um player vender arma para outro. Atй ai tudo bem, o cуdigo ficou da seguinte maneira:
PHP код:
CMD:verderak(playerid, params[])
{
new idP;
if(sscanf(params, "i", idP)) return SCM(playerid, -1,"{F40000}››{FFFFFF} Uso correto: /venderak [id]");
format(formato, sizeof(formato),"{FFFFFF}%s estб lhe vendendo uma Ak-47 pelo valor de R$1000, aceitar?", VerNome(playerid));
ShowPlayerDialog(playerid, 658, DIALOG_STYLE_MSGBOX, "Venda de Arma", formato, "Aceitar", "Cancelar");
return 1;
}
Ai agora chega a parte da
OnDialogResponse, que й aonde eu tenho minha dъvida. Queria saber como dar o dinheiro da venda da arma para o playerid do comando 'verderak'.
PHP код:
if(dialogid == 658) // Venda de Armas
{
if(response)
{
SCM(playerid, 0x6895FFAA,"Vocк aceitou comprar uma Ak47 pelo preзo de R$1000.");
GivePlayerWeapon(playerid, 30, 1000);
GivePlayerMoney(playerid, - 1000);
}
else
{
SCM(playerid, -1,"Vocк recusou a oferta ilegal de arma.");
}
}
Ai й a parte que o player recebe a arma, e perde o dinheiro junto com o envio da mensagem da resposta. E como faзo para dar o dinheiro para o player que vendeu a arma, jб que estб em locais separados?
Alguйm pode me ajudar? Aguardo respostas.
Respuesta: Sobre ShowPlayerDialog -
DartakousLien - 02.08.2013
voce pode fazeer de duas formas! Variavel global ou variavel do player! a diferenзa й que a global fica salva na memoria do servidor, enquanto a do player fica na memoria do player
vou dar os dois exemplos
pawn Код:
//coloque isto no topo do GM depois das include e dos #define
new plyvende[MAX_PLAYERS];
CMD:verderak(playerid, params[])
{
new idP;
if(sscanf(params, "i", idP)) return SCM(playerid, -1,"{F40000}››{FFFFFF} Uso correto: /venderak [id]");
if(plyvende[idP] != INVALID_PLAYER_ID) return SCM(playerid, -1,"Esse player ja tem uma oferta!");
format(formato, sizeof(formato),"{FFFFFF}%s estб lhe vendendo uma Ak-47 pelo valor de R$1000, aceitar?", VerNome(playerid));
ShowPlayerDialog(idP, 658, DIALOG_STYLE_MSGBOX, "Venda de Arma", formato, "Aceitar", "Cancelar");
plyvende[idP] = playerid;
return 1;
}
if(dialogid == 658) // Venda de Armas
{
if(response)
{
SCM(playerid, 0x6895FFAA,"Vocк aceitou comprar uma Ak47 pelo preзo de R$1000.");
GivePlayerWeapon(playerid, 30, 1000);
GivePlayerMoney(plyvende[playerid], 1000);
GivePlayerMoney(playerid, - 1000);
plyvende[playerid] = INVALID_PLAYER_ID;
}
else
{
SCM(playerid, -1,"Vocк recusou a oferta ilegal de arma.");
}
}
//ou
//voce tem de colocar isso em OnPlayerConnect porque a funcao GetPVarInt quando nao tem um valor atribuido retorna a 0, mas no caso, 0 й o id do primeiro player, entao nao funcionaria corretamente!
SetPVarInt(playerid,"plyvende",INVALID_PLAYER_ID);
CMD:verderak(playerid, params[])
{
new idP;
if(sscanf(params, "i", idP)) return SCM(playerid, -1,"{F40000}››{FFFFFF} Uso correto: /venderak [id]");
if(GetPVarInt(idP,"plyvende") != INVALID_PLAYER_ID) return SCM(playerid, -1,"Esse player ja tem uma oferta!");
format(formato, sizeof(formato),"{FFFFFF}%s estб lhe vendendo uma Ak-47 pelo valor de R$1000, aceitar?", VerNome(playerid));
ShowPlayerDialog(idP, 658, DIALOG_STYLE_MSGBOX, "Venda de Arma", formato, "Aceitar", "Cancelar");
SetPVarInt(idP,"plyvende",playerid);
return 1;
}
if(dialogid == 658) // Venda de Armas
{
if(response)
{
SCM(playerid, 0x6895FFAA,"Vocк aceitou comprar uma Ak47 pelo preзo de R$1000.");
GivePlayerWeapon(playerid, 30, 1000);
GivePlayerMoney(GetPVarInt(playerid,"plyvende"), 1000);
GivePlayerMoney(playerid, - 1000);
SetPVarInt(playerid,"plyvende",INVALID_PLAYER_ID);
}
else
{
SCM(playerid, -1,"Vocк recusou a oferta ilegal de arma.");
}
}
outra coisa, voce estava mostrando a dialog para o player que digita o comando