[Ajuda] Duvida em relaзao a variaveis globais
#1

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?
Reply
#2

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(playeridparams[])
{
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.
Reply
#3

Obrigado por esclarecer minha duvida!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)