GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Bayshore le 30 Mai 2008, 22:59:57
-
Bonsoir,
je viens de faire un petit GM, aucune erreur mais lorsque je lance le GM depuis la console, ça m'affiche l'erreur suivante:
Script[gamemodes/dm.amx]: Run time error 20: "Invalid index parameter (bad entry point)"
Qu'est-ce que cela veut dire ? ???
++
Alexandre
-
Jai deja eu ce pb ! mais je n'ai jamais su comment enlever ca ... :(
++
nikko
-
La façon de résoudre se problème est simple :
Ajoute des printf un peu partout dans ton code pour déterminer à quelle ligne ton serveur se plante.
La ligne qui plante se trouve après le dernier printf affiché.
Le mieux c'est de mettre un printf pour chaque ligne de code (au moins dans la partie que tu soupçonnes de planter).
Si tu ne sais pas où ça plante commence par mettre des printf au début de chaque fonction et callback.
Une fois la fonction ou la callback identifiée, ajoute des printf dans celle-ci.
Une fois la ligne qui plante trouvée, il ne reste plus qu'à savoir pourquoi et corriger.
++
Syg
-
Syg, tu vien de m'apprendre un truc :P
NV.
-
Syg, je croi que alexandre a un probleme quand il lance le serv, et ca lui affiche ca dans la console je croi ..
++
nikko
-
public OnGameModeInit()
{
print("17");
SetGameModeText("Blank Script");
SetDisabledWeapons(43,44,45);
//for(new skin = 0; skin < 300; skin++) if(IsValidSkin(skin)) AddPlayerClass(skin,-759.5909,1637.8881,27.3184,275.4666,0,0,0,0,0,0);
AddPlayerClass(0,-759.5909,1637.8881,27.3184,275.4666,0,0,0,0,0,0);
/*for(new i=0;i<5;i++) AddStaticVehicle(400+i,-781+(i*10),1631,26.8246,180,-1,-1); // parking near sea
for(new i=0;i<3;i++) AddStaticVehicle(461+i,-756+(i*5),1588-(i*4),26.6771,135,-1,-1); // Parking near cactus
for(new i=0;i<5;i++) AddStaticVehicle(410+i,-865,1541.2203+(i*5),22.5+(i/2),270,-1,-1); // parking near buffalo grill
for(new i=0;i<4;i++) AddStaticVehicle(477+i,-776-(i*15),1437,13.5,90,-1,-1); // teepee motels
for(new i=0;i<3;i++) AddStaticVehicle(466+i,-686+(i*10),1459,17.1745,90,-1,-1); // east south
*/
AddStaticVehicle(471,-842.4831,1478.1012,16.8755,0,-1,-1); // quad
AddStaticVehicle(475,-815.1159,1497.8127,19.7119,270,-1,-1); // sabre
AddStaticVehicle(495,-720.9217,1544.8107,39.8553,0,-1,-1); // sandking
AddStaticVehicle(517,-730.7927,1527.3113,39.2316,180,-1,-1); //tahoma
print("32");
return 1;
}Ça m'affiche 32, puis le message :(
nikko: Je croit qu'il a compris. :happy
-
Donc c'est en dessous de ce code que l'erreur se trouve
après ça :
return 1;
}
-
Regarde la derniere chose que tu a ajouté dans ton GM.
++
nikko
-
stock IsValidSkin(skinid)
{
#define MAX_BAD_SKINS 22
new badSkins[MAX_BAD_SKINS] = { 3, 4, 5, 6, 8, 42, 65, 74, 86, 119, 149, 208, 268, 273, 289 };
for (new i = 0; i < MAX_BAD_SKINS; i++) if (skinid == badSkins[i]) return false;
return true;
}
Mais lorsque je le commente j'ai toujours la même erreur.
Sinon je pense que le problème vient d'ici :
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext, "/money", true))
{
//if(cmdtext[7])
//{
new sMoney[48], pName[16];
GetPlayerName(cmdtext[7], pName, sizeof(pName));
format(sMoney, sizeof(sMoney), "%s have %d$", pName, GetPlayerMoney(cmdtext[7]));
return SendClientMessage(playerid, 0xFFFFFFFF, sMoney);
//}
//else return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /money [playerid]");
}
if(!strcmp(cmdtext, "/kill", true)) return SetPlayerHealth(playerid, 0.0);
if(!strcmp(cmdtext, "/help", true))
{
SendClientMessage(playerid, 0xFFFFFFFF, "LB-DM v1, by ZecKo");
SendClientMessage(playerid, 0xFFFFFFFF, "OBJECTIVE: The objective here is to kill everybody and take their cash");
SendClientMessage(playerid, 0xFFFFFFFF, "RULES: Here all is autorized except sawnoff's C-bug, health hax and weapon hax");
SendClientMessage(playerid, 0xFFFFFFFF, "COMMANDS: /kill to kill you, /money to see money on a player");
if(IsPlayerAdmin(playerid)) SendClientMessage(playerid, 0xFFFFFFFF, "ADMIN: /specplayer /specvehicle /specoff");
return true;
}
return false; //SendClientMessage(playerid, 0xFFFFFFFF, "SERVER: Unknown command mm'kay ?")
}
Ça déconne à block IG, aucune commande ne marche.
EDIT: Enfait seulement /money ne marche pas. :happy
-
je ne sais si ça vient de ça, mais tu a des points d'exclamations devant chaque commande, donc je ne pense pas que ça puisse fonctionner....
if(!strcmp(cmdtext, "/money", true))
if(!strcmp(cmdtext, "/kill", true)) return SetPlayerHealth(playerid, 0.0);
if(!strcmp(cmdtext, "/help", true))
-
Les ! = si la commande n'est pas ..
++
nikko
-
je ne sais si ça vient de ça, mais tu a des points d'exclamations devant chaque commande, donc je ne pense pas que ça puisse fonctionner....
if(!strcmp(cmdtext, "/money", true))
if(!strcmp(cmdtext, "/kill", true)) return SetPlayerHealth(playerid, 0.0);
if(!strcmp(cmdtext, "/help", true))
Non ça n'a rien à voir, vu que strcmp renvoit 0 si les 2 strings sont égaux, et 0 est considéré comme false. :happy
Mais enfait, seul /money ne marche pas maintenant. ???
Les ! = si la commande n'est pas ..
++
nikko
Pas compris. :happy
++
Alexandre
-
Continues à mettre des printf comme tu l'as fait dans OnGameModeInit.
Sauf que la tu les mets dans OnPlayerCommandText.
Sinon, ta commande /money à un paramètre donc tu ne peux pas utiliser cmdtext pour faire la comparaison piisqu'il ne sera jamais égal à "/money" mais à /"money 12000" par exemple.
Il faut passer par un variable intermédiaire dans laquelle tu ne récupères que la commande avec strtok.
++
Syg
-
Ah non en fait je viens de comprendre !
J'avais supprimé la condition compilateur comme un bourrin dans le fichier de base (celle qui détermine si c'est un filterscript), résultat il n'y avai plus de main() :happy
++
Alexandre