GTAOnline.net
San Andreas Multiplayer (sa:mp) => Problèmes et bugs => Discussion démarrée par: Americandream le 04 Juin 2011, 22:36:01
-
Bonjour/bonsoir,
Je suis désespéré et j'en viens à la première fois depuis que notre serveur est ouvert a demander de l'aide, notre serveur est un serveur qui évolue et qui monte de plus en plus au nombre de joueurs connectés seulement voilà:
- Dès que nous passons les 24 joueurs connecté les suivant sont mis en spec et ne peuvent pas jouer...
Après quelques étude du bug nous avons remarqué que les spec était toujours fait sur le joueur portant l'ID 0...
Le plus effrayant est que les joueurs en spec reçoivent rarement mais cela arrive des donnée du compte ID 0 (mot de passe, argent, biz, maison, et pire droit du staff).
Le pire scénario nous est arrivé il y a 1 moi quand le bug a été découvert l'id 0 était un admin haut gradé, ces droit on été donné à plus de 5 comptes qui l'avais spec suite au bug...
Je suis donc désespéré et vous demande de l'aide pour que notre serveur puisse continue sa si belle ascenssion...
GM : Miami RP
Hébergeur : Serverffs.com : 35 slots
Merci de bien vouloir nous aider je vous serais énormément reconnaissant
-
Salut,
C'est pas "le" fameux bug de l'id 0 ?
Met un bot sur ton serveur, de cette manière il aura toujours l'ID 0 et aucun autre joueur ne pourra prendre cette ID et plus aucun problème ;)
-
c'est sur ça ?
-
Je ne sais pas, mais tu peux toujours essayer.
-
C'est super embêtant comme bug... Je vais essayer le bot
Mais quand tu dit le fameux bug de lid 0, tu peux m'en dire plus ??
-
C'est ton Gamemode, qui gère mal tout ça, et pour l'id 0 c'est normal vu que 0 est une valeur prise par défaut.
On ne peut rien faire pour toi, si on ne connais pas bien ton gamemode :s
-
Mon Gamemode c'est MiamiRP, tout fonctionne nickel sauf que a 23 joueurs bah il me les met en spec les suivant!
J'ai vraiment besoin d'aide on a trop de monde pour que le bug reste plus longtemps :$
-
Vas dans l'include a_samp de ton pawno il y a un Max_player a 23 change le en 35 .
Toobias,
-
Ok alors note :
ce n'est pas Max_Player puisque le miens était à (500) mais en levant les yeux j'ai vu MAX_PLAYER_NAME (24) je pense que c'est ça =)
Faudra voir ce weekend quand les joueurs pleuvent en masse sur le serveur =)
Merci t'es un dieu je construit un temple a ton image ou tu veux !! =D
Bon après ça reste à vérifier mais je pense que c'est bon
-
euh MAX_PLAYER_NAME comme le nom l'indique c'est pour le pseudo du joueurs donc rien a voir laisse moi sa a 24 et ne touche pas a l'include SAMP STP
-
ça changera rien de changer la constante MAX_PLAYERS_NAME
-
Salut,
sauf si dans le code il y a une erreur et que MAX_PLAYER_NAME a été utilisé à la place de MAX_PLAYERS à un ou plusieurs endroits...
mais ça... c'est difficile à savoir
++Sim++
-
Salut,
Je crois que sa vient du plugin Mysql d'Adrenaline, mais après je sais pas si t'es en sql ou si tu utilise le plugin d'Adrenaline
-
Je ne suis pas en MySQL.
Dans la ligne Max_Player il y avais 500. Le script dans a_samp se présente comme ceci :
#define Max_Player_Name 24
#define Max_Player 500
J'ai augmenté Max_Player puisque si on compte l'id des joueurs, de 0 - 23 il n'y a aucun problème et ça fait bien 24 joueurs, j'ai donc pensé qu'il y avais un lien vous en pensez quoi ?
-
Rien à avoir avec le Max_Player_Name
-
Rien à avoir avec le Max_Player_Name
sa faiut juste 3fois que nous lui disons mais pas grave a mon avis il est borner
Astuce 1/ jete moi ce script
Astuce 2/ Ouvre pawno.exe
Astuce 3/ Go les tutos :)
-
Nan maiss le script marche --' et j'ai changé de Gamemode j'ai pris toujours miamirp modifié et toujours le même problème donc ce weekends on vas monter a 24 - 26 on pourra voir :/ parce que sinon je vois pas qu'est ce qu'il faut modifier !
Aidez moi :/
-
Ok alors note :
ce n'est pas Max_Player puisque le miens était à (500) mais en levant les yeux j'ai vu MAX_PLAYER_NAME (24) je pense que c'est ça =)
Faudra voir ce weekend quand les joueurs pleuvent en masse sur le serveur =)
Merci t'es un dieu je construit un temple a ton image ou tu veux !! =D
Bon après ça reste à vérifier mais je pense que c'est bon
Oui change MAX_PLAYER_NAME mais le a 50 (exemple) quitte le pawno est enregistre.
Aprés ouvre ton gamemode puis recompile le .
"Vous dite que sa n'a rien avoir avec le Max_Player_Name ... mais enfaite si ..... Il dit bien aprés le 24éme JOUEURS ;Il prend le compte d'un autres joueurs connecté est se mais en spec dessu donc sa a bien avoir avec le "NOM"
De plus je l'ai deja eu ce bug , J'ai changer le Max_Player_Name est j'ai plus jamais eu ce probléme.
Enfin bon, De tout de façon vous n'aidez personne ici vous ne faite que critiquer et rabaisser. ;)
-
Toobias ton poste n'est pas acceptable pour moi on aide si on te dit qu'il ne faut pas changer les valeurs dans l'include c'est pour une bonne raison c'est que vous utliser MAX_PLAYER_NAME a la place de MAX_PLAYERS donc STP arrete de dire des sautise aussi enorme Go apprendre a corriger des bug que de buger les includes pour que ton script fonctionne
-
Salut,
sauf si dans le code il y a une erreur et que MAX_PLAYER_NAME a été utilisé à la place de MAX_PLAYERS à un ou plusieurs endroits...
mais ça... c'est difficile à savoir
++Sim++
La réponse est certainement là.
Et pour Americandream ce ne sera certainement pas très difficile de savoir.
Pour vérifier, il faut rechercher toutes les occurrences de MAX_PLAYER_NAME dans le script et vérifier qu'il n'est pas utiliser dans une boucle, dans un test ou dans un tableau autre qu'un nom de joueur.
Et il ne faut SURTOUT PAS changer la valeur de MAX_PLAYER_NAME.
++
Syg
-
Je lai modifier des que j'ai eu la réponse me proposant de changer Max_Player.
Pour l'instant aucun problème a signaler et avec ce long weekends on va pouvoir tester...
Je teste on sais jamais ^^ moi j'ai fait un lien entre le 24 et mon bug a 24 joueurs, on vas tester :$
-
Et pourquoi n'as tu pas fait le lien entre la limite à 24 joueurs et le fait que la journée fasse 24 heures ?
Ou alors que 24 est aussi le numéro atomique du chrome ou le nombre de carats de l'or pur ? (cf http://fr.wikipedia.org/wiki/24_%28nombre%29 (http://fr.wikipedia.org/wiki/24_%28nombre%29)).
Je pense que tu devrais sérieusement prendre en compte la remarque de Sim concernant la mauvaise utilisation de MAX_PLAYER_NAME. Et corriger les endroits où ce define est utilisé à tort.
++
Syg
-
Il est entêté Syg, je crois que pour qu'il comprenne faut écrire en gros.
Vérifie dans ton code si tu n'as pas des boucles qui ont pour limite MAX_PLAYER_NAME, et SURTOUT, SURTOUT ne change pas la valeur de MAX_PLAYER_NAME.
Hum, j'espère que tu comprendra mieux now.
-
Pas sur, il faudrait mettre de la couleur :
Vérifie dans ton code si tu n'as pas des boucles qui ont pour limite MAX_PLAYER_NAME, et SURTOUT, SURTOUT ne change pas la valeur de MAX_PLAYER_NAME.
Si ça marche toujours pas, on augmentera la taille de la police et on écrira en rouge.
++
Syg
-
Voilà on a pas encore monté a 24 joueurs, on est resté à 23 --'
Mais en faisant ce que vous avez dit je suis retombé sur un bout de script qui me semblait étrange, je vous l'envoi :
public Spectator()
{
new string[256];
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(KickPlayer[i]==1) { Kick(i); }
else if(KickPlayer[i]==2) { Ban(i); }
if(Spectate[i] < 253 && Spectate[i] != 255)
{
SetPlayerColor(i,COLOR_SPEC);
TogglePlayerControllable(i, 0);
new targetid = Spectate[i];
if(IsPlayerConnected(targetid))
{
TogglePlayerSpectating(i, 1);
if(PlayerInfo[i][pAdmin] >= 1)
{
new Float:health;
new name[MAX_PLAYER_NAME];
GetPlayerName(targetid, name, sizeof(name));
GetPlayerHealth(targetid, health);
format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~y~%s(ID:%d)~n~~y~vie:%.1f",name,targetid,health);
GameTextForPlayer(i, string, 2500, 3);
}
if(IsPlayerInAnyVehicle(targetid))
{
new carid = GetPlayerVehicleID(targetid);
PlayerSpectateVehicle(i, carid);
}
else
{
PlayerSpectatePlayer(i, targetid);
}
if(GetPlayerInterior(targetid) == 0)
{
SetPlayerInterior(i,0);
}
else if(GetPlayerInterior(targetid) > 0)
{
SetPlayerInterior(i,GetPlayerInterior(targetid));
}
}
}
if(Spectate[i] == 253)
{
TogglePlayerControllable(i, 1);
TogglePlayerSpectating(i, 0);
SetPlayerInterior(i,Unspec[i][sPint]);
PlayerInfo[i][pInt] = Unspec[i][sPint];
PlayerInfo[i][pLocal] = Unspec[i][sLocal];
Unspec[i][sLocal] = 255;
SetSpawnInfo(i, PlayerInfo[i][pTeam], PlayerInfo[i][pModel], Unspec[i][sPx], Unspec[i][sPy], Unspec[i][sPz]-1.0, 1.0, -1, -1, -1, -1, -1, -1);
gTeam[i] = PlayerInfo[i][pTeam];
SetPlayerToTeamColor(i);
MedicBill[i] = 0;
if(PlayerInfo[i][pDonateRank] > 0)
{
SetSpawnInfo(i, PlayerInfo[i][pTeam], PlayerInfo[i][pModel], Unspec[i][Coords][0], Unspec[i][Coords][1], Unspec[i][Coords][2], 10.0, -1, -1, -1, -1, -1, -1);
SpawnPlayer(i);
SetCameraBehindPlayer(i);
}
else
{
SpawnPlayer(i);
}
Spectate[i] = 255;
}
if(Spectate[i] == 254)
{
TogglePlayerControllable(i, 1);
SetPlayerInterior(i,Unspec[i][sPint]);
PlayerInfo[i][pInt] = Unspec[i][sPint];
PlayerInfo[i][pLocal] = Unspec[i][sLocal];
SetPlayerPos(i, Unspec[i][sPx], Unspec[i][sPy], Unspec[i][sPz]);
Spectate[i] = 255;
}
if(Spectate[i] == 256)
{
SetPlayerToTeamColor(i);
Spectate[i] = 255;
}
if(Spectate[i] == 257)
{
Spectate[i] = 254;
}
}
}
}
Si vous pouviez jeter un oeil, y'a des ligne qui indique les même chose que ce que les joueurs qui sont en spec voit...
-
Salut, déjà je te conseil d'aller lire les règles tu devrai savoir que les bouts de code sont à mettre entre les balises code, et les codes de plus de 20 lignes sont à mettre sur Pastebin.
Peut-être que ce code en est la cause, mais nous t'avons dit de chercher une boucle où la limite est MAX_PLAYER_NAME, un truc de ce genre
for( new i = 0; i < MAX_PLAYER_NAME; i++ )
-
Arf désolé j'ai pas trop l'habitude de demander de l'aide ^^'
J'ai justement chercher les boucles, cherché tous les MAX_PLAYER_NAME du script mais rien...
Je me suis demandé si ce script pouvais être la cause aussi mais après je me suis posé une questions :
Es-ce que un Filterscript ou Include peut être une source de ce problème ?
-
Oui, un FS peut mettre le bazar dans un gamemode.
Sinon, pour ton bout de code il manque :
- Comment est initialisée la variable spectate ?
- Où est appelée la fonction Spectator () ?
++
Syg
-
Justement c'est ça qui me rend fou quand je vois cette fonction, elle m'a pas l'air comme les autres et j'en vois pas son utilité...
Tenez tout ce que j'ai sur Spectator :
forward Spectator();
spectatetimer = SetTimer("Spectator", 2000, 1);
new spectatetimer;
KillTimer(spectatetimer);
J'ai que ça sur Spectator et ce qui l'entoure.
-
Et la déclaration du tableau Spectate[] ?
Sinon, j'ai regardé la fonction Spectator.
Elle n'a pas été écrite par quelqu'un qui a beaucoup réfléchi à ce qu'il (ou elle) faisait :
if(Spectate[i] < 253 && Spectate[i] != 255)
Si Spectate est inférieur à 253, il est forcément différent de 255 donc la deuxième partie du test ne sert à rien.
--------------------
if(GetPlayerInterior(targetid) == 0)
{
SetPlayerInterior(i,0);
}
else if(GetPlayerInterior(targetid) > 0)
{
SetPlayerInterior(i,GetPlayerInterior(targetid));
}
Inutile, il suffit de faire :
SetPlayerInterior(i,GetPlayerInterior(targetid));
------------------
Bref, ce code fait surement partie d'un système de spec.
C'est la variable Spectate[] qui décide dans quel état on est.
La valeur 255 désactive la chose donc à voir comment est initialisée la variable Spectate[].
++
Syg
-
Bon alors je n'ai rien touché a part le Max_Player_Name, puis on a eu 25 joueurs pendant 3 secondes, puis 24 pendant 30 minutes j'était deg que personne ne se co --'
Bref tout ça pour vous dire que pendant ces 3 secondes ils ont tous réussit à se co, et un joueur a joué sous l'id 24... je veux encore attendre que l'on monte à 26 avant de faire quoi que ce soit ^^'
Double post
Désolé double poste c'est pour dire qu'on a monté à 27 joueurs pendant 10 minutes : Aucun problème bug résolue.
Merci à tous de vous êtes impliqué même si c'était faux vous avez quand même essayé de nous aider et ça a marché =)
Donc il fallait modifier notre Max_Player_Name.
Merci
++ Americandream-rp
-
Lapin compris ...
++
Syg
-
Faudrait peut-être écrire en TRES GROS, en rouge, en gras, souligné, italique, avec des point d'exclamation de partout pour qu'il comprenne ?
Mais bon c'est pas grave si ça fonctionne autant le laisser :p