GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Eloctro le 12 Avril 2010, 23:11:13

Titre: Timer Économique ?
Posté par: Eloctro le 12 Avril 2010, 23:11:13
Bonsoir ,
Je me posais une Question sur un Moyen d'économiser les Timers .
Esqu'il est mieux de lancer un Timer dans le OnGameModeInit .
Et Compter le temp avec les Variables .
Ou lancer plusieurs Timer en même temp ?
Titre: Re : Timer Économique ?
Posté par: Ssk le 12 Avril 2010, 23:20:35
Bonsoir ,
Je me posais une Question sur un Moyen d'économiser les Timers .
Esqu'il est mieux de lancer un Timer dans le OnGameModeInit .
Et Compter le temp avec les Variables .
Ou lancer plusieurs Timer en même temp ?

C'est comme tu veux, mais pour la premiere méthode ce sera peut être moins précis et plus dur à organiser !

Mais la seconde méthode utilise peut être plus de CPU, mais elle est plus facile à géré ^^
Titre: Re : Timer Économique ?
Posté par: Syg le 13 Avril 2010, 15:14:46
Le mécanisme de gestion des timers ne consomment pas beaucoup de CPU.
Donc il vaut mieux créer plusieurs timers.
Par contre, il y a une limite au nombre de timers que l'on peut créer je crois. Si on en fait trop, le serveur ne fonctionne plus correctement.
Mais je ne connais pas cette limite (qui a peut-être changée avec la 0.3).

++
Syg
Titre: Re : Timer Économique ?
Posté par: Ssk le 13 Avril 2010, 19:43:48
Il n'y a jamais eu de limite pour les timer, vu que c'est indépendant du pawn, je ne pense pas qu'il se saoulerons pour mettre une limite donc changez la lib pawn ^^

Titre: Re : Timer Économique ?
Posté par: Syg le 14 Avril 2010, 09:48:31
Ce n'est jamais PAWN qui limite quoi que ce soit, c'est la plupart du temps SAMP (nombre de véhicules, nombre de textdraw, ...).
Dans les autres cas, la limite n'est pas forcément voulue par SAMP, elle vient de la machine par exemple.
Pour les timers, je me rappelle qu'à partir d'un certain nombre, on constatait des problèmes (timers qui ne s'arrêtent pas quand on fait KillTimer). Mais ces problèmes ont peut-être disparus.
Pour info, sur Lalu's Stunt il y a 10 timers permanent (variants de 100 ms à 5 minutes) plus plein de timers "one-shot" et aucun problème constaté clairement.

++
Syg
Titre: Re : Timer Économique ?
Posté par: Ssk le 14 Avril 2010, 15:06:01
Oui,c'est ce que je disais ^^ il n'y a pas de limite imposé par la team SAMP, c'est géré par le PAWN qui lui aussi n'impose pas de limite ^^
Titre: Re : Timer Économique ?
Posté par: Eloctro le 14 Avril 2010, 20:52:16
Ok beaucoup dise qu'il faut utilise qu'un timer .
Il appelle ça l'optimisation .
Mais bon je te fait confiance .
J'ai comeme réduit beaucoup de timer sur un seul .
Avec une boucle pour les joueurs .
Titre: Re : Timer Économique ?
Posté par: Ssk le 14 Avril 2010, 21:06:19
Moi je te conseil d'utilisé le nombre de timer qu'il te faut, mais si tu peut par exemple en inclure 2 en un seul c'est aussi bien ^^

genre toute les 20 seconde tu doit appelé une fonction et c'est la pour une autre fonction ( peut importe le moment ou il doit être appeler )

tu fait
SetTimer("Appeler_les_fonctions",20000,1);

public Appeler_les_fonctions()
{
fonction1();
fonction2();
}
Titre: Re : Re : Re : Timer Économique ?
Posté par: Ssk le 14 Avril 2010, 21:16:49
Moi je te conseil d'utilisé le nombre de timer qu'il te faut, mais si tu peut par exemple en inclure 2 en un seul c'est aussi bien ^^

genre toute les 20 seconde tu doit appelé une fonction et c'est la pour une autre fonction ( peut importe le moment ou il doit être appeler )

tu fait
SetTimer("Appeler_les_fonctions",20000,1);

public Appeler_les_fonctions()
{
fonction1();
fonction2();
}

J'appelle pas ça de l'optimisation, mais plutôt de la logique dans ce cas. ^^

J'ai pas dit que c'était de l'optimisation lol, mais plutôt que ça permet de se facilité la tache à la programmation =)
Titre: Re : Timer Économique ?
Posté par: Eloctro le 14 Avril 2010, 21:28:46
Sa fait longtemp que j'ai compris le Pawno xd .
J'ai meme une tactic plus efficace que la tienne .
Exemple :
En haut :
new TempMenote[MAX_PLAYERS];
Dans un Timer qui s'éxécute toutes les secondes tu met :
public Timer()
{


for(new i = 0; i < MAX_PLAYERS; i++)
{
   if(IsPlayerConnected(i))
   {

if (TempMenote[i] >= 0)//Timer Menottes
{
if(TempMenote[i]==1)
{
TempMenote[i]=-1;
//On demenotte
}
else
{
TempMenote[i]--;
}
}
   }
}
        return 1;
}

Et pour lancer le Timer :
TempMenote[playerid]=7;
Et ne pas oublier de mettre la variable a Zero à la deconnexion/connexion du Joueur
Mais sinon je me posais la question qu'esse qu'il faut optimiser pour réduire les crashs ?