GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Nikko™ le 01 Janvier 2008, 12:56:15
-
Bonjour a tous,
Je suis la car jai esseyer de créé plusieur auto message mais le pb cest qu'avec la technique que je vais vous montrer,
le premier vien se rajouter ac le 2eme, ensuite le 1er et 2eme viennent sajouter au 3eme etc etc... ;D
Ce que je voudrait c'est que toute les 2 min un message différent arive et au bout du 4eme ca recommence. (si vous me suivez) ???
LES FORWARDs:
forward automessage1();
forward automessage2();
forward automessage3();
forward automessage4();
DANS GAME MODE INIT:
SetTimer("automessage1", 200000, 1);
SetTimer("automessage2", 400000, 1);
SetTimer("automessage3", 600000, 1);
SetTimer("automessage4", 800000, 1);
TOUT EN BAS:
public automessage1()
{
SendClientMessageToAll(vert,"~~~~~~~~~~~~");
return 1;
}
public automessage2()
{
SendClientMessageToAll(vert,"~~~~~~~~~~~~");
}
public automessage3()
{
SendClientMessageToAll(vert,"~~~~~~~~~~~~");
return 1;
}
public automessage4()
{
SendClientMessageToAll(vert,"~~~~~~~~~~~~");
return 1;
}
-
il faut utiliser les KillTimer ;)
LES FORWARDs:
forward automessage1();
forward automessage2();
forward automessage3();
forward automessage4();
DANS GAME MODE INIT:
new Auto1=SetTimer("automessage1", 200000, 1);
TOUT EN BAS:
public automessage1()
{
SendClientMessageToAll(vert,"~~~~~~~~~~~~");
KillTimer(Auto1);
new Auto2=SetTimer("automessage2", 200000, 1);
return 1;
}
public automessage2()
{
SendClientMessageToAll(vert,"~~~~~~~~~~~~");
KillTimer(Auto2);
new Auto3=SetTimer("automessage3", 200000, 1);
}
public automessage3()
{
SendClientMessageToAll(vert,"~~~~~~~~~~~~");
KillTimer(Auto3);
new Auto4=SetTimer("automessage4", 200000, 1);
return 1;
}
public automessage4()
{
SendClientMessageToAll(vert,"~~~~~~~~~~~~");
KillTimer(Auto4);
new Auto1=SetTimer("automessage1", 200000, 1);
return 1;
}
Je n'ai pas testé, mais théoriquement sa devrait marche ;)
++
R@f
-
Je vais tester et je revien te le dire merci a toi ;)
-
Il y a 4 erreur et plusieurs warnings : je vous les donnes:
C:\Documents and Settings\USER\Bureau\stunt2.pwn(75) : warning 204: symbol is assigned a value that is never used: "Auto1"
C:\Documents and Settings\USER\Bureau\stunt2.pwn(1497) : error 017: undefined symbol "Auto1"
C:\Documents and Settings\USER\Bureau\stunt2.pwn(1498) : warning 204: symbol is assigned a value that is never used: "Auto2"
C:\Documents and Settings\USER\Bureau\stunt2.pwn(1504) : error 017: undefined symbol "Auto2"
C:\Documents and Settings\USER\Bureau\stunt2.pwn(1505) : warning 204: symbol is assigned a value that is never used: "Auto3"
C:\Documents and Settings\USER\Bureau\stunt2.pwn(1511) : error 017: undefined symbol "Auto3"
C:\Documents and Settings\USER\Bureau\stunt2.pwn(1512) : warning 204: symbol is assigned a value that is never used: "Auto4"
C:\Documents and Settings\USER\Bureau\stunt2.pwn(1518) : error 017: undefined symbol "Auto4"
C:\Documents and Settings\USER\Bureau\stunt2.pwn(1519) : warning 204: symbol is assigned a value that is never used: "Auto1" :(
-
J'avais fait une petite boulette ::)
LES FORWARDs:
forward automessage1();
forward automessage2();
forward automessage3();
forward automessage4();
AU DESSUS DE MAIN :
new Auto1;
new Auto2;
new Auto3;
new Auto4;
DANS GAME MODE INIT:
Auto1=SetTimer("automessage1", 200000, 1);
TOUT EN BAS:
public automessage1()
{
SendClientMessageToAll(vert,"~~~~~~~~~~~~");
KillTimer(Auto1);
Auto2=SetTimer("automessage2", 200000, 1);
return 1;
}
public automessage2()
{
SendClientMessageToAll(vert,"~~~~~~~~~~~~");
KillTimer(Auto2);
Auto3=SetTimer("automessage3", 200000, 1);
}
public automessage3()
{
SendClientMessageToAll(vert,"~~~~~~~~~~~~");
KillTimer(Auto3);
Auto4=SetTimer("automessage4", 200000, 1);
return 1;
}
public automessage4()
{
SendClientMessageToAll(vert,"~~~~~~~~~~~~");
KillTimer(Auto4);
Auto1=SetTimer("automessage1", 200000, 1);
return 1;
}
++
R@f
-
Jcompren po encore plein de warnings:
C:\Documents and Settings\USER\Bureau\stunt2.pwn(78) : warning 219: local variable "Auto1" shadows a variable at a preceding level
C:\Documents and Settings\USER\Bureau\stunt2.pwn(78) : warning 204: symbol is assigned a value that is never used: "Auto1"
C:\Documents and Settings\USER\Bureau\stunt2.pwn(1501) : warning 219: local variable "Auto2" shadows a variable at a preceding level
C:\Documents and Settings\USER\Bureau\stunt2.pwn(1501) : warning 204: symbol is assigned a value that is never used: "Auto2"
C:\Documents and Settings\USER\Bureau\stunt2.pwn(1508) : warning 219: local variable "Auto3" shadows a variable at a preceding level
C:\Documents and Settings\USER\Bureau\stunt2.pwn(1508) : warning 204: symbol is assigned a value that is never used: "Auto3"
C:\Documents and Settings\USER\Bureau\stunt2.pwn(1515) : warning 219: local variable "Auto4" shadows a variable at a preceding level
C:\Documents and Settings\USER\Bureau\stunt2.pwn(1515) : warning 204: symbol is assigned a value that is never used: "Auto4"
C:\Documents and Settings\USER\Bureau\stunt2.pwn(1522) : warning 219: local variable "Auto1" shadows a variable at a preceding level
C:\Documents and Settings\USER\Bureau\stunt2.pwn(1522) : warning 204: symbol is assigned a value that is never used: "Auto1"
-
je vais essayer une fois de le compiler moi même pour voir ce qui ne vas pas ;)
EDIT : je n'ai aucun warning moi ;)
++
R@f
-
Jusque là ça reste gérable mais si tu veux afficher une dizaine de messages, tu vas avoir une dizaine de timers !!!.
Et je ne parle pas du cas où tu voudras enlever un message ...
Voilà une solution plus "universelle" : http://pastebin.gtaonline.fr/pastebin.php?show=260
++
Syg
-
Ok merci beaucoup syg ;)
++ nikko
-
Salut,
Moi personellement, je me sert d'un timer dans ONGameModeInit () qui part le premier message, 8)
Puis dans chaque message je part le prochain message avec un autre timer,
je voudrais savoir si cette technique pourrait causer des bug car les clietns "CRASH" asser fréquament sur mon serveur et j'essai de réduire les risques. >:(
Merci d'avance ;)
public OnGameModeInit()
{
SetTimer("ServM",100000,0);
return 1;
}
Public ServM
{
SendClientMessageToAll(COLOR_GREEN,"Amusez vous bien, les cheaters seront BANNIS!!");
SetTimer("ServM2",1200000);
return 1;
}
et ainsi de suite
-
public OnGameModeInit()
{
SetTimer("ServM",100000,0);
SetTimer("ServM2",100000,0);
SetTimer("ServM3",100000,0);
return 1;
}
public ServM
{
SendClientMessageToAll(COLOR_GREEN,"Amusez vous bien, les cheaters seront BANNIS!!");
KillTimer(ServM);
SetTimer("ServM2",1200000);
return 1;
}
public ServM2
{
SendClientMessageToAll(COLOR_GREEN, "Cheat = Ban");
KillTimer(ServM2);
SetTimer("ServM3", 1200000);
return 1;
}
public ServM3
{
SendClientMessageToAll(COLOR_GREEN, "Visitez www.******.com");
KillTimer(ServM3);
SetTimer(ServM1);
return 1;
}Et un ci de suite pour plus de timer...
-
euh......
je ne met qu'un timer en haut, il lance le premier message, :P
(et puis, pourquoi t'en met plus d'un,ils ne servent a rien et ne font que rajouter des risques de bugs, non??) ??? :blink ???
par la suite, il est terminer donc il ne compte plus :cheers
puis dans chaque message il y a un timer qui lance le message suivant :P
les timers disparaissent les uns après les autres puis le dernier relance le premier ;)
Je voudrais juste savoir si cette technique a plus de risque de causer des CRASH des clients que la votre, :closedeyes :blink
pas ca fonctionne, j'ai jamais eu de probl avec les message directement :D :happy
Sim :(
-
Ta technique fonctionne Sim, comme la mienne, elle ne lance qu'un seul timer à la fois donc son impact sur le serveur est plus ou moins identique.
Mais il existe un petite différence (je pense pas que cette différence est un impact sur la stabilité du serveur) :
- Tu détruis et crées un timer à chaque fois alors que je ne crée qu'un seul timer définitivement (il n'est jamais détruit).
Une autre différence (mais qui n'a rien à voir avec l'exécution du script) :
- Si tu veux ajouter ou supprimer un message, tu dois toucher à plusieurs fonctions un peu partout dans de ton script alors que dans ma solution, on change le nombre de messages et on modifie le tableau (qui se trouve au début du script donc facilement trouvable).
Il y a quelque chose de très important à garder à l'esprit quand on code :
- Est-ce que je pourrais facilement modifier ce que j'ai fais dans 2 mois ?
Ce n'est pas anodin, avec le temps, on oublie forcément ce qu'on a fait dans telle ou telle partie du code et pourquoi on a fait d'une façon et pas d'une autre.
Plus le code est simple, plus il est facile de la modifier plus tard.
L'emploi de commentaires est aussi un très bon moyen d'écrire en français ce que l'on fait et nous évite d'avoir à se poser des questions lorsque l'on reprend un bout de code plusieurs semaines après.
D'ailleurs, les commentaires servent à ça.
++
Syg
-
merci syg,
mais mon code n'est pas si compliqué à changer, :)
pour ajouter un message, il n'y a qu'a changer le timer de l'ex-dernier pour qu'il lance le message ajouté et le timer du nouveau lance le premier message :lock
mais le tien est plus simple, ça c'est sûr, je ne suis qu'un débutant après tout!!
++Sim++
-
Il m'arrive de regarder du code C que j'ai fait il y a très longtemps (presque 20 ans). Et je me rends compte qu'a l'époque je faisais des trucs compliqués pour effectuer des tâches simples. On est tous pareil, l'avantage que j'ai sur d'autres c'est que j'ai de l'expérience.
Mais je n'ai aucun mérite, l'expérience est quelque chose qu'on acquiert automatiquement avec le temps (en contre partie de notre jeunesse perdue :().
Et mon expérience ne remplacera jamais les erreurs que vous pourrez faire, ce sont elles qui vous formerons le mieux.
++
Syg
-
Très belles phrases :)
++
nikko