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

Titre: Run time error 20:
Posté 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:
Code: (pawn) [Sélectionner]
Script[gamemodes/dm.amx]: Run time error 20: "Invalid index parameter (bad entry point)"
Qu'est-ce que cela veut dire ? ???

++
Alexandre
Titre: Re : Run time error 20:
Posté par: Nikko™ le 30 Mai 2008, 23:01:30
Jai deja eu ce pb ! mais je n'ai jamais su comment enlever ca ...  :(

++
nikko
Titre: Re : Run time error 20:
Posté par: Syg le 31 Mai 2008, 11:39:26
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
Titre: Re : Run time error 20:
Posté par: NatiVe™ le 31 Mai 2008, 11:47:03
Syg, tu vien de m'apprendre un truc :P

NV.

Titre: Re : Run time error 20:
Posté par: Nikko™ le 31 Mai 2008, 12:05:40
Syg, je croi que alexandre a un probleme quand il lance le serv, et ca lui affiche ca dans la console je croi ..

++
nikko
Titre: Re : Run time error 20:
Posté par: Bayshore le 31 Mai 2008, 12:16:32
Code: (pawn) [Sélectionner]
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
Titre: Re : Run time error 20:
Posté par: [StAfF]MaN le 31 Mai 2008, 12:38:11
Donc c'est en dessous de ce code que l'erreur se trouve

après ça :


return 1;

}

Titre: Re : Run time error 20:
Posté par: Nikko™ le 31 Mai 2008, 12:47:10
Regarde la derniere chose que tu a ajouté dans ton GM.

++
nikko
Titre: Re : Run time error 20:
Posté par: Bayshore le 31 Mai 2008, 13:01:53
Code: (pawn) [Sélectionner]
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 :
Code: (pawn) [Sélectionner]
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
Titre: Re : Run time error 20:
Posté par: [StAfF]MaN le 31 Mai 2008, 13:13:31
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))
Titre: Re : Run time error 20:
Posté par: Nikko™ le 31 Mai 2008, 13:14:07
Les ! = si la commande n'est pas ..

++
nikko
Titre: Re : Re : Run time error 20:
Posté par: Bayshore le 31 Mai 2008, 15:04:57
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
Titre: Re : Run time error 20:
Posté par: Syg le 02 Juin 2008, 12:16:13
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
Titre: Re : Run time error 20:
Posté par: Bayshore le 02 Juin 2008, 18:10:05
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