• 05 Juin 2026, 20:16:56


Auteur Sujet: Probleme de freeze tres embetant  (Lu 1514 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Dark_revan

  • Serveur RPG : *¤REAL DREAM¤*
  • *
  • Bandit
  • Script Serveur RolePlay.
  • Messages: 338
    • Voir le profil
Probleme de freeze tres embetant
« le: 29 Octobre 2008, 09:23:43 »
Bonjour alors voila j'ai remarquer un tres gros probleme qui est survenue lors d'une MAJ peut de temps apres la MAJ (2h)
Alors le probleme c'est que tout le monde se faisait freeze toute les 6seconde du coup j'ai etait obliger de le mettre OFF mais je ne trouve pas le probleme (dans la MAJ j'ai rajouter un menu donc sa vient peut etre de la ?)
Si vous pourriez m'aider mon serveur est en apnne du coup  :(

merci d'avance ++

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Probleme de freeze tres embetant
« Réponse #1 le: 29 Octobre 2008, 10:14:11 »
Si les joueurs se font "freezés" toutes les 6 secondes, ton problème est sûrement dans un timer où il doit manquer une condition qui encadre TogglePlayerControllable.

++
Syg
Courtesy of GtaManiac

Hors ligne Dark_revan

  • Serveur RPG : *¤REAL DREAM¤*
  • *
  • Bandit
  • Script Serveur RolePlay.
  • Messages: 338
    • Voir le profil
Re : Probleme de freeze tres embetant
« Réponse #2 le: 29 Octobre 2008, 10:26:12 »
Je dit tout les 6 seconde sa peut etre plus ou moin mais tu as raison j'ai fait un systeme de besoin qui encadre une rfonction toggleplayercontrollable dasn un timer ses une fonction dormir genre tout les 10 minute ma variable diminue de 1 jusque la variable 4 ou le personnage et freezer pendant 30 seconde mais j'aimerai quel marche si tu pourrait m'aider a la faire marcher je te montre:
if (strcmp("/dormir", cmdtext, true, 10) == 0)
    {
       if(IsPlayerConnected(playerid))
   {
if( PlayerInHouse[playerid] == 2)
{
           if( dormir[playerid] == 4 || dormir[playerid] == 3 || dormir[playerid] == 2)
       {
                   SendClientMessage(playerid, COLOR_LIGHTBLUE," Vous dormez pendant 4 heure (15 sec)");
                   TogglePlayerControllable(playerid,0);
                   SetTimer("energies",15000,1);
                   LoopingAnim(playerid,"BEACH", "bather", 4.0, 1, 0, 0, 0, 0); // Lay down
                   
   }
     else
       {
           SendClientMessage(playerid, COLOR_GRAD6," Vous n'etes pas fatiguer");
       }
    }
else
{
                  SendClientMessage(playerid, COLOR_GRAD6," Vous ne pouvez pas dormir dehors acheter vous une maison !!");
            }
       }
       return 1;
    }

forward energie();
public energie()
{
    new string[256];
    new sendername[MAX_PLAYER_NAME];
for(new i = 0; i < MAX_PLAYERS; i++)
    if(IsPlayerConnected(i))
    {
  if( dormir[i] == 0)
  {
      dormir[i] += 1;
  return 1;
  }
  if( dormir[i] == 1)
  {
      dormir[i] = 2;
      return 1;
      }
  if( dormir[i] == 2)
  {
      dormir[i] = 3;
      return 1;
  }
      if( dormir[i] == 3)
  {
  GetPlayerName(i, sendername, sizeof(sendername));
  format(string, sizeof(string), "* %s a envie de dormir .", sendername);
      ProxDetector(30.0, i, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
      SendClientMessage(i, COLOR_LIGHTBLUE, "Vous avez envie de dormir!!");
      dormir[i] = 4;
      return 1;
  }
  if( dormir[i] == 4)
  {
  TogglePlayerControllable(i,0);
      SetTimer("energies",30000,1);
  SendClientMessage(i, COLOR_LIGHTBLUE, "Vous dormez pendant 8 heure (30 sec)!!");
      return 1;
      }
    }
    return 1;
}
forward energies();
public energies()
{
  for(new i = 0; i < MAX_PLAYERS; i++)
  if(IsPlayerConnected(i))
  {
    ClearAnimations(i);
    TogglePlayerControllable(i,0);
    dormir[i] = 0;
  }
  return 1;
}


Voila le systeme qui encadre la fonction toggle playercontrollable dans un Timer     SetTimer("energie",1900000,1);

Si il ya un probleme tu pourrait m'aider pour eviter le bug :)
Parse que cette fonction je les faite moi meme mais je suis pas sur de sont fonctionnement et tu as raison c'est peut sa qui fait freezer les player

Merci de me repondre

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Probleme de freeze tres embetant
« Réponse #3 le: 29 Octobre 2008, 11:07:47 »
Ton problème vient de la fonction "energies", il faut faire TogglePlayerControllable(i,1); pour dé-freezer le joueur.
En fait, cette fonction va systématiquement freezer le joueur qui sont connectés.
Et je ne vois pas à quoi sert le timer "energie" (sans s) (J'imagine que c'est un timer global qui force le joueur à dormir au bout d'un moment)

Sinon, ton utilisation des timers n'est pas correcte.
Tout d'abord, tu lances des timers permanents (qui ne s'arrêtent jamais). Ceci est contrôlé par le dernier paramètre de SetTimer.
1 -> Timer permanent
0 -> Timer exécuté qu'une seule fois.
NB : Un timer permanent ne doit être lancé qu'une seule fois sinon les effets sont imprévisibles (plusieurs timers identiques qui tournent en même temps)

Si tu lances un timer "one shot", ce n'est pas la peine de gérer tous les joueurs dedans.

Pour faire ce que tu veux faire, il faut que tu passes par des timers individuels en utilisant la fonction SetTimerEx.

Quand le joueur fait /dormir, tu lances un timer pour ce joueur exclusivement :
SetTimerEx ("energies", 15000, 0, "i", playerid);
Ta fonction "energies" doit avoir un paramètre qui est l'id du player.
Et dedans, il ne faut traiter que le joueur playerid.
forward energies(playerid);
public energies(playerid)
{
  if(IsPlayerConnected(playerid))
  {
    ClearAnimations(playerid);
    TogglePlayerControllable(playerid,1);
    dormir[playerid] = 0;
  }
}

Autre chose, dans ta fonction "energie" (sans s), tu fait des return 1; dans une boucle, ce qui n'est pas du tout judicieux.
Ces return étant systématiques, ta boucle ne traitera que le premier joueur connecté dont la variable dormir est inférieure ou égale à 4. Tous les autres joueurs seront oubliés.
Il faut donc que tu ré-écrives ta fonction "energie".
Et dans le cas où dormir=4, je te conseille de faire dormir = 5 pour éviter que tu relances le timer "energies".

Fais les modifs comme tu peux et reposte, je corrigerais.

++
Syg
Courtesy of GtaManiac

Hors ligne Dark_revan

  • Serveur RPG : *¤REAL DREAM¤*
  • *
  • Bandit
  • Script Serveur RolePlay.
  • Messages: 338
    • Voir le profil
Re : Probleme de freeze tres embetant
« Réponse #4 le: 29 Octobre 2008, 12:28:01 »
Merci beaucoup je suis en train d'y regarder alors tout mon systeme de besoin bug :( faut tout que je refasse :(
Alors je doit retirer les return 1; puis je doit mettre SetTimerEx et ensuite regler le toggleplayercontrollable en 1 pour le defreezer (PS: lol pour le freeze j'ai pas fait attention a ce que j'avait mis)
Une fois que j'aurai fait se que tu ma demedner je testerai et je te donnerai des nouvelle.
Encore merci
++

EDIT:J'ai une petit question est ce que si je met un timer normale comme SetTimer("energie",1900000,1); sa fera diminuer ma variable
Je veut qu'en faite le gars a envie de dormir au bout de 4 fois 30 minute (je diminurai sa fait beaucoup :)) mais qu'un autre soit different par rapport si il se connecter avant ou apres donc j'utilise quoi SetTimer ou SetTimerEx
PS2: le timer est dans Ongamemodeinit ses des que la personne se connect.
« Modifié: 29 Octobre 2008, 12:52:22 par Dark_revan »

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Probleme de freeze tres embetant
« Réponse #5 le: 29 Octobre 2008, 15:53:41 »
Si tu veux que le joueur est envie de dormir au bout de 4 fois 30 minutes (ou une autre durée) après sa connexion, tu vas être obligé d'utiliser SetTimerEx dans OnPlayerConnect.
Si tu utilises un timer général pour faire ça, la première période de 30 minutes risque d'être beaucoup plus courte (par exemple si un joueur se connecte 29 minutes après le démarrage de ton serveur, cette période ne fera qu'une 1 minute puisque le timer aura déjà été lancé depuis 29 minutes).

++
Syg
Courtesy of GtaManiac

Hors ligne Dark_revan

  • Serveur RPG : *¤REAL DREAM¤*
  • *
  • Bandit
  • Script Serveur RolePlay.
  • Messages: 338
    • Voir le profil
Re : Probleme de freeze tres embetant
« Réponse #6 le: 29 Octobre 2008, 16:24:47 »
Ok merci et a ton avis j'ai creer des text draw pour l'affichage des barres a ton avis elle diminuront au fur est a mesure du temps ?
Si tu veut je peut te filer le petit bout de script que j'ai fait pour les show et hide:

EDIT:
Je vient de desseler des bug important et j'auria besoin d'aide pour les retirer alors deja avec mon systeme j'attend 10 minute normale et la direct.
Et apres la meme pas 10 minute apres il me met que je faim donc je mange puis apres encore j'ai faim 2 seconde apres.
doc j'aurai besoin d'aide pour m'aider a rescripter ses bout de coe que j'ai mal fait auparavant.
« Modifié: 29 Octobre 2008, 18:03:54 par Dark_revan »

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Probleme de freeze tres embetant
« Réponse #7 le: 30 Octobre 2008, 15:33:20 »
Oui, tu peux me filer des bouts de codes, ici ou en PM.

++
Syg
Courtesy of GtaManiac

Hors ligne Dark_revan

  • Serveur RPG : *¤REAL DREAM¤*
  • *
  • Bandit
  • Script Serveur RolePlay.
  • Messages: 338
    • Voir le profil
Re : Probleme de freeze tres embetant
« Réponse #8 le: 30 Octobre 2008, 16:42:18 »
Ok merci. je vasi t'envoyer sa par MP :D