GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Showroom SA:MP => Discussion démarrée par: inbox le 18 Décembre 2008, 16:27:07
-
effacé...
-
Salut,
bravo belle initiative,
j'ai pas regardé le script, mais serait t'il possible de mettre un lien pastebin stp??
++Sim++
-
Bonjour,
Je vient de le faire :)
cordialement,
-
beau travail.
Je n'ai pas encore testé mais si tu veu un ptit "+", dans une prochainne version, rajoute le nombre de joueur peut etre ...
++
nikko
-
Bonsoir,
Que veux tu dire par Ajouter le nombre de joueur ?
Cordialement,
-
nan oublie c'est stupide ^^
++
nikko
-
Salut,
non, nikko, ce n'est pas stupide, ca peut être pratique comme fonction,
ce que Nikko désirais était ajouté le nombre de joueur à ton textdraw,
à ce moment, tu aurais deux choix, faire le compte à l'aide d'une boucle à chaque appel de la fonction (fini par être lourd ^^)
ou tu donne comme instruction d'ajouter une fonction à OnPlayerConnect et OnPlayerDisconnect
ça te donnerais à peu près ça:
Script sur pastebin.com (http://pastebin.com/m65ceea82)
++Sim++
-
Oui je trouve ceci pas mal
Je vais le mettre pour la prochaine version :)
j'y avait pas penser mais très bonne idée
Cordialement,
-
ah bah finalement cest bien mon idée :)
++
nikko
-
Je n'ai pas testé ton include mais ce dont je suis sur c'est qu'il ne va pas marcher.
La raison est simple, tu n'as qu'un seul TextDraw.
Ainsi, lorsque le premier joueur arrive, tu vas appeler AB_DateHeure(playerid, Titre[]) et donc créer le TextDraw pour ce joueur.
Quand le deuxième joueur va arriver, tu vas "écraser" l'id de l'ancien TextDraw (celui du premier joueur) par celui du deuxième car tu vas créer un nouveau TextDraw (le premier sera donc perdu) mais en utilisant le même ID (Text:AB_Date).
Ceci ne se verra pas car le TextDraw (le deuxième) sera affiché correctement à tous les joueurs.
Le problème, c'est quand un des deux joueurs va se déconnecter et que tu vas appeler AB_Destruction(playerid) ...
Le TextDraw (le seul qui est affiché) sera détruit.
Par chance, comme le problème est le même avec le timer (il n'y en a qu'un pour tout les joueurs), et que ce timer sera arrêté à l'appel de AB_Destruction(playerid), le serveur ne plantera pas en essayant d'afficher un TextDraw qui n'existe plus.
Ce qui va se passer, c'est que le TextDraw va disparaître (on se figer, je suis pas sûr) pour les joueurs qui resteront sur le serveur.
Et il réapparaitra lorsque qu'un nouveau joueur se connectera ....
Bref, l'idée est très bonne mais il faut creuser un peu plus pour que ça marche.
Tu as donc 2 solutions (je donne la meilleure en premier) :
1 - Créer un seul TextDraw dans OnGameModeInit pour tous les joueurs (que tu affiches lorsque le joueur spawn) et un seul timer qui met à jour la chaîne de ce TextDraw. Le TextDraw et le timer devront être détruits dans OnGameModeExit.
L'avantage de cette solution c'est qu'elle ne consomme qu'un seul TextDraw et un seul timer.
2 - Créer un TextDraw et un timer par joueur à l'aide d'un tableau (new Text:AB_Date[MAX_PLAYERS];) pour que chaque joueur est sont TextDraw à lui, sans gêner les autres. L'avantage de cette solution c'est que ça ne fait pas trop modifier ton code.
++
Syg
-
Bonjour,
Si je met la fonction dans OnGameModeInit le TextDraw ne se lance pas
comment veux tu qui se lance sauf si je le met dans OnPlayerconnect il marche très bien
J'ai fait comme ceci
public OnGameModeInit()
{
for (new i=0;i<MAX_PLAYERS;i++)
{
AB_DateHeure(i, "patienter...");
}
AddPlayerClass(.......................
AddPlayerClass(.......................
return 1;
}
Cordialement,
-
Relis bien mon post, j'ai dit : "Créer un seul TextDraw dans OnGameModeInit pour tous les joueurs".
Toi tu en crées 200 (MAX_PLAYERS) dont 199 de perdu.
Le problème des script SA-MP c'est que souvent on les teste en étant tout seul sur le serveur (avec l'ID 0 en plus). Mais pour être sûr, il faut tester avec plus de joueurs (au moins 2) car ce qui marche pour le seul joueur d'ID 0 ne marche pas forcément pour 2 joueurs.
Ce que je dit n'est pas très compliqué, tu devrais pouvoir reprendre ton script pour qu'il fonctionne.
Relis tranquillement la solution 1 de mon post.
++
Syg
-
Salut,
j'ai corrigé ton script afin d'avoir qu'un textdraw pour tous,
il faut placer:
AB_DateHeure dans OnGameModeInit
AB_Destruction dans OnGameModeExit
AB_message pour chagner le message (n'importe où)
PlayerCountConnect dans OnPlayerConnect
PlayerCountDisConnect dans OnPlayerDisconnect
AB pastebin.com (http://pastebin.com/m4e27e168)
et si le code ne fonctionne pas, enlève les TextDrawShowForAll, ajoute le paramètre playerid à PlayerCountConnect et PlayerCountDisconnect et un TextDrawShowForPlayer
++Sim++
-
Bonsoir,
Merci Sim :)
Je regarde ceci dés demain.
Cordialement,
-
Jolie travaille ;) Moi je l'aime bien :D
Idée " Faire un Systeme en temps réeles "
Ex: Quand il est 18 Heure alors SetPlayerTime(playerid,18,00);
-
Bonjour,
La version N° 2 du script est fini
voir sur le premier sujet :)
cordialement,