Duvida em relaзao a variaveis globais -
3War - 03.10.2015
Tenho uma duvida em relaзao a variaveis globais,darei um exemplo:
Dada a variavel:
Код HTML:
new PARTY_CREATOR;
e o seguinte comando sendo que para criar a festa deve-se convidar ao menos 1 jogador de inicio:
Код HTML:
CMD:criarfesta(playerid, params[])
{
new INVITE_MEMBER_PARTY;
if(sscanf(params, "u",INVITE_MEMBER_PARTY)) return SendClientMessage(playerid,-1,"Use: /criarfesta [id do membro]");
PARTY_CREATOR = playerid;
ShowPlayerDialog(INVITE_MEMBER_PARTY,DIALOG_PARTY,DIALOG_STYLE_MSGBOX,"CONVITE PARA FESTA","CONVITE PARA FESTA","Aceitar","Recusar");
return true;
}
e o seguinte dialog vai para o jogador convidado:
Код HTML:
public party_DialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_PARTY:
{
if(!response) return SendClientMessage(PARTY_CREATOR,-1,"[FESTA] O membro recusou entrar em sua festa!");
SetPlayerTeam(PARTY_CREATOR,1); //Seta o time do jogador lider da festa
SetPlayerTeam(playerid,1); //Seta o time do jogador convidado
SendClientMessage(PARTY_CREATOR,-1,"[FESTA] A festa foi criada,use: /ajudafesta para ver os comandos de lider.");
SendClientMessage(playerid,-1,"[FESTA] Voce entrou em uma festa.");
return 1;
}
Minha duvida й a seguinte,levando em conta que
PARTY_CREATOR й uma variavel global registrando o
id do
criador da festa se outro jogador usar o mesmo comando ao mesmo tempo ou mesma que ja em tempo diferente,pode ocorrer algum erro ao pegar o
id do lider?
Minha opniao: Acho que nгo devido ao fato do comando nгo ser usado exatamente ao mesmo tempo,assim nao registrando uma ID de um outro jogador por ventura.Logo,se um jogador usar o comando,a variavel global PARTY_CREATOR registra o id do lider e logo que o outro jogador utilizar o mesmo comando,ela registra a do outro jogador.Mas mesmo assim ainda fico com duvida,se der um leve atraso no processamento do codigo,nem que seja de 1 segundo e registrar encima do comando do outro.Isso seria mesmo possivel?
OBS: 2 Solicitaзхes de festa й enviada ao mesmo tempo no dialog,se um dos jogadores responder primeiro a variavel global no dialog iria mudar e causaria um erro no lider do grupo.
Teria alguma forma mais segura de fazer esse comando?
Re: Duvida em relaзao a variaveis globais -
Dolby - 03.10.2015
Pawn abstract machine й single thread, ou seja, cada instruзгo й executada de uma vez, como na espйcie de uma fila.
Se o jogador utilizar o comando, e outro utiliza-lo ao mesmo tempo, o servidor vai processar primeiro aquele que ele recebeu primeiro.
Mas o que acontece, й que caso dois jogadores utilizem o mesmo comando, atй o jogador responder ao dialog, a variбvel assume outro valor. Entгo a forma mais segura de fazer isto, seria utilizando pVars.
PHP код:
CMD:criarfesta(playerid, params[])
{
new INVITE_MEMBER_PARTY;
if(sscanf(params, "u",INVITE_MEMBER_PARTY)) return SendClientMessage(playerid,-1,"Use: /criarfesta [id do membro]");
SetPVarInt(INVITE_MEMBER_PARTY, "PARTY_CREATOR", playerid);
ShowPlayerDialog(INVITE_MEMBER_PARTY,DIALOG_PARTY,DIALOG_STYLE_MSGBOX,"CONVITE PARA FESTA","CONVITE PARA FESTA","Aceitar","Recusar");
return true;
}
// Dialog response:
case DIALOG_PARTY:
{
new PARTY_CREATOR = GetPVarInt(playerid, "PARTY_CREATOR")
if(!response) return SendClientMessage(PARTY_CREATOR,-1,"[FESTA] O membro recusou entrar em sua festa!");
SetPlayerTeam(PARTY_CREATOR,1); //Seta o time do jogador lider da festa
SetPlayerTeam(playerid,1); //Seta o time do jogador convidado
SendClientMessage(PARTY_CREATOR,-1,"[FESTA] A festa foi criada,use: /ajudafesta para ver os comandos de lider.");
SendClientMessage(playerid,-1,"[FESTA] Voce entrou em uma festa.");
return 1;
}
Abraзos.
Re: Duvida em relaзao a variaveis globais -
3War - 03.10.2015
Obrigado por esclarecer minha duvida!