[Ajuda] Em relaзгo a Contagem..
#1

Olб,
eu criei teste sistema de contagem sу para players perto, mais estб bugando..
quando estou sozinho no servidor, ele funciona sertinho, mбs, quando eu coloco + alguйm, ele buga.
alguйm mi ajuda

pawn Код:
forward CountDownEx(pid, Float:Dis, Float:_Xi,Float: _Yi, Float:_Zi);
public CountDownEx(pid, Float:Dis,  Float:_Xi,Float: _Yi, Float:_Zi)
{
    for(new i; i < SLOTS; ++i)
    {
        if(IsPlayerConnected(i) && i != pid && IsPlayerInRangeOfPoint(i, Dis, _Xi, _Yi, _Zi))
        {
            if(Count[i] == 0)
            {
                GameTextForPlayer(i, "Go Go Go]", 1000, 3);
                Count[i] = 5;
                return 0;
            }
            if(Count[i] == 5)
            {
                format(string, sizeof(string),"[INFO]: %s[ID:%i] Iniciou uma contagem!", GetNick(pid), pid);
                SendClientMessageToAll(-1, string);
            }
            GameTextForPlayer(i,  rvalstr(Count[i]), 1000, 3);
            PlayerPlaySound(i, 1056, 0,0,0);
            Count[i] --;
            SetTimerEx("CountDownEx", 1000, false, "iffff", i, Dis, Float:_Xi,Float: _Yi, Float:_Zi);
        }
    }
    return 1;
}



- Carol.
Reply
#2

Este cуdigo :


Код:
SetTimerEx("CountDownEx", 1000, false, "iffff", i, Dis, Float:_Xi,Float: _Yi, Float:_Zi);
Deveria estar declarado assim, e logo antes do return (ou seja, fora do loop, para o Timer nгo ser criado vбrias vezes) :


Код:
SetTimerEx("CountDownEx", 1000, false, "iffff", pid, Dis, Float:_Xi,Float: _Yi, Float:_Zi);

Pois assim o Timer serб executado novamente e em condiзхes idкnticas бs da primeira vez que callback foi chamada .


Do jeito que estб no cуdigo que vocк postou, o Timer rodaria uma vez tendo o ID pid (do jogador que iniciou a contagem) como primeiro parвmetro, mas nas prуximas vezes, rodaria tendo como primeiro parвmetro o ID de cada outro jogador que estб perto do que iniciou a contagem, e como hб a presenзa deste cуdigo: pid != i, pode-se imaginar o problema que isso causaria .



Espero ter ajudado .
Reply
#3

nгo funcionou.
pawn Код:
forward CountDownEx(pid, Float:Dis, Float:_Xi,Float: _Yi, Float:_Zi);
public CountDownEx(pid, Float:Dis,  Float:_Xi,Float: _Yi, Float:_Zi)
{
    for(new i; i < SLOTS; ++i)
    {
        if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i, Dis, _Xi, _Yi, _Zi))
        {
            if(Count[i] == 0)
            {
                GameTextForPlayer(i, "Go Go Go]", 1000, 3);
                Count[i] = 5;
                return 0;
            }
            if(Count[i] == 5)
            {
                format(string, sizeof(string),"[INFO]: %s[ID:%i] Iniciou uma contagem!", GetNick(pid), pid);
                SendClientMessageToAll(-1, string);
            }
            GameTextForPlayer(i,  rvalstr(Count[i]), 1000, 3);
            PlayerPlaySound(i, 1056, 0,0,0);
            Count[i] --;
            SetTimerEx("CountDownEx", 1000, false, "iffff", i, Dis, Float:_Xi,Float: _Yi, Float:_Zi);
        }
    }
    return 1;
}
eu quero que quando chamo esta public, ele mostrarб a contagem sу para quem estiver perto do player, no caso PID.
Reply
#4

Quote:
Originally Posted by [O.z]Caroline
Посмотреть сообщение
nгo funcionou.

eu quero que quando chamo esta public, ele mostrarб a contagem sу para quem estiver perto do player, no caso PID.
Mas й isso o que comentei no meu ъltimo post .


Bem, use este cуdigo aqui :


pawn Код:
forward CountDownEx(pid, Float:Dis, Float:_Xi,Float: _Yi, Float:_Zi);
public CountDownEx(pid, Float:Dis,  Float:_Xi,Float: _Yi, Float:_Zi)
{
    new x = 0;
    for(new i; i < SLOTS; ++i)
    {
        if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i, Dis, _Xi, _Yi, _Zi))
        {
            if(Count[i] == 0)
            {
                GameTextForPlayer(i, "Go Go Go]", 1000, 3);
                Count[i] = 5;
                x = i;
                continue;
            }
            if(Count[i] == 5)
            {
                format(string, sizeof(string),"[INFO]: %s[ID:%i] Iniciou uma contagem!", GetNick(pid), pid);
                SendClientMessageToAll(-1, string);
            }
            GameTextForPlayer(i,  rvalstr(Count[i]), 1000, 3);
            PlayerPlaySound(i, 1056, 0,0,0);
            Count[i] --;
            x = i;
        }
    }
    if(Count[x] != 5) SetTimerEx("CountDownEx", 1000, false, "iffff", pid, Dis, Float:_Xi,Float: _Yi, Float:_Zi);
    return 1;
}


@EDIT


Se jб o tiver pegado, pegue-o novamente , detectei um possнvel problema, por isso troquei o return 0; por continue no loop, para que este nгo pare quando um dos ifs tiver avaliaзгo resultando positivo .



Espero ter ajudado .
Reply
#5

eu mudei o sistema, darei reputation por tentar me ajudar xP
Reply
#6

Quote:
Originally Posted by [O.z]Caroline
Посмотреть сообщение
quando estou sozinho no servidor
O.o
Reply
#7

Quote:
Originally Posted by Cristhian
Посмотреть сообщение
O.o
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK " Estou sozinho no servidor " nгo deveria ser sozinha?
Reply
#8

Tente usar assim

pawn Код:
forward ClockDown(playerid);
public ClockDown(playerid)
{
    new Float:Pos[3], string[128];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    for(new i = 0; i <= MAX_PLAYERS; ++i)
    {
        if(IsPlayerConnected(i))        
        {        
            if(!IsPlayerInRangeOfPoint(i,5.0,Pos[0],Pos[1],Pos[2]))
            if(Count[i] == 0)        
            {
                GameTextForPlayer(i,"Go Go Go", 1000, 3);
                Count[i] =5
                return 0;        
            }        
            format(string,sizeof(string),"%d",Count[i]);        
            GameTextForPlayer(i,string, 1000, 3);
            PlayerPlaySound(i, 1056, 0,0,0);              
            SetTimerEx("ClockDown",1000,false,"fff",Pos[0],Pos[1],Pos[2]);
            return Count[i] --;        
        }
    }
    return true;                
}
C:
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)