[Ajuda] Congelamento do servidor
#1

Bem galera quando um player novato entra no servidor ele й obrigado a ver um tutorial a nгo ser que ele pressione espaзo, estou com um problema que quando o jogador estб no tutorial e sai do servidor o servidor simplesmente congela nгo permite mais que ninguйm entre, pensei que podia ser algumas variбveis bool (quando nгo coloca false no onplayerdisconnect isso й comum acontecer) mas jб olhei todo o cуdigo do tutorial e estб tudo correto, й um cуdigo bem grande mas queria tirar um dъvida, se eu nгo coloco o hide da textdraw no disconnect pode dar problema? ex.:
PHP код:
public OnPlayerDisconnect(playeridreason)
{
TextDrawHideForPlayer(playeridtext[playerid]); 
Se nгo botar isso da problema?
Reply
#2

Loop infinito, procure por loops no cуdigo do tutorial (for, while).
Reply
#3

Quote:
Originally Posted by RodrigoMSR
Посмотреть сообщение
Loop infinito, procure por loops no cуdigo do tutorial (for, while).
Uso loop apenas para limpar o chat acredito que se o player desconectar nгo haverб algum problema .-.


Se for isso serб que dessa forma resolve? vou testar
PHP код:
if(IsPlayerConnected(playerid)) {
for(new 
0!= 32i++) SendClientMessage(playerid, -1" ");

@edit: nгo funcionou
Reply
#4

new i = 0;

Se vocк cria uma variavel , ela automaticamente jб vem com o valor zero, sendo desnecessбrio esse " formato do C "

i != 32

Se vocк faz isso, talvez de alguma forma o i ficar maior, e nunca terminar o loop, jб que o 32 jб passou

...
for(new i; i < 32; ++i)


------- Bom eu antes tive um problema parecido, eu desmontei meu gamemode todo pra descobrir o problema
era um loop q eu tinha feito no OnPlayerDisconnect, e por causa dele os outros HOOK nгo foram chamados
Reply
#5

Quote:
Originally Posted by zLink
Посмотреть сообщение
new i = 0;

Se vocк cria uma variavel , ela automaticamente jб vem com o valor zero, sendo desnecessбrio esse " formato do C "

i != 32

Se vocк faz isso, talvez de alguma forma o i ficar maior, e nunca terminar o loop, jб que o 32 jб passou

...
for(new i; i < 32; ++i)


------- Bom eu antes tive um problema parecido, eu desmontei meu gamemode todo pra descobrir o problema
era um loop q eu tinha feito no OnPlayerDisconnect, e por causa dele os outros HOOK nгo foram chamados
Mesma coisa.. o player permanece conectado mesmo saindo e o servidor trava, e isso tem acontecido apуs adicionar esse ajuda aos novatos
Reply
#6

Sу tem esse loop? E dentro das funзхes que sгo chamadas na callback?

Provavelmente o problema estб na funзгo IntroNovatos.
Reply
#7

Ixi lembrei que estou usando um Switch, sу que assim acredito que ele nгo й...

PHP код:
forward IntroNovatos(playerid);
public 
IntroNovatos(playerid)
{
PlayerTextDrawShow(playeridintronot[playerid]);
PlayerTextDrawSetString(playeridintronot[playerid],
"ASSISTENTE DE AJUDA AOS NOVATOS..~n~~w~Seja Bem Vindo ao servidor, antes de voce comecar a jogar leia atentamente:~n~O nosso servidor e Deathmatch (DM) ou seja MATA-MATA~n~seu objetivo e matar ou sera morto~n~crie um cla no servidor e recrute seus amigos e crie aliados");
SetTimerEx("IntroNovatos2"15000false"i"playerid);
return 
1;

Reply
#8

Veja a funзгo IntroNovatos2.

Se o switch possuir cases altos demais pode congelar por um tempo.
Reply
#9

Quote:
Originally Posted by RodrigoMSR
Посмотреть сообщение
Veja a funзгo IntroNovatos2.

Se o switch possuir cases altos demais pode congelar por um tempo.
ele congela de vez e possui 18 case, mas tambйm no Wiki nгo diz que hб um limite..
e um IntroNovato chama o outro a cada 15 segundos para mudar o texto e o local atй o IntroNovato7 onde encerra tudo.

@edit: diminui os cases atй 4 cases para um teste rбpido e mesmo assim o servidor volta a travar

Os cases estгo dentro do
PHP код:
public OnPlayerFinishInterpolateCamera(playeridtype
e esse mйtodo й chamado assim:
PHP код:
SetTimerEx("OnPlayerFinishInterpolateCamera"5000-6000"id"playerid0); 
e o switch :
PHP код:
switch(type
ficando assim:

PHP код:
public OnPlayerFinishInterpolateCamera(playeridtype)
{
    switch(
type)
    {
        case 
0:
        {
... 
Reply
#10

Sу para deixar um FeedBack aqui foi resolvido o problema, no meu loop envйs de usar:
PHP код:
for(new 0!= 32i++) SendClientMessage(playerid, -1" "); 
Eu fiz assim:
PHP код:
for(new 0MAX_PLAYERS++) SendClientMessage(playerid, -1" "); 
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)