GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Brian Turner le 31 Mai 2010, 18:22:32
-
Bonjour, voila je suis débutant en pawn et pour m'entrainé je me suis lancer dans la création d'un GM de course, bref voici mon probleme :
il était une fois, un débutant en pawn ....
Quand quelqu'un se connecte sur mon serv(moi car je le test) ben sa m'affiche toujours le dernier checkpoint et quand on rentre dedans ben toutes les phrases des autres checkpoint sont écrite mais les autres checkpoint n'apparaisse pas.
Voici un bou de code :
<?php ...
new Check1;
new Check2;
new Check3;
new Check4;
public OnPlayerSpawn(playerid){
Check1 = SetPlayerCheckpoint(playerid, 2866.1811523438, -1659.9093017578, 10.524225234985, 8);
Check2 = SetPlayerCheckpoint(playerid, 2882.18359375, -1187.7048339844, 10.524225234985, 8);
Check3 = SetPlayerCheckpoint(playerid, 2886.9897460938, -662.28234863281, 11.524225234985, 8);
Check4 = SetPlayerCheckpoint(playerid, 2712.0295420156, -264.76336669922, 28.524225234985, 8);
return 1;
}
public OnPlayerEnterCheckpoint(playerid) {
if (Check1){
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 2882.18359375, -1187.7048339844, 10.524225234985, 4);
SendClientMessage(playerid,0xFFFF00AA, "> CheckPoint atteint, au suivant.");
}
if (Check2){
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 2886.9897460938, -662.28234863281, 11.524225234985, 4);
SendClientMessage(playerid,0xFFFF00AA, "> CheckPoint atteint, au suivant.");
}
if (Check3){
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 2712.0295420156, -264.76336669922, 28.524225234985, 4);
SendClientMessage(playerid,0xFFFF00AA, "> CheckPoint atteint, au suivant.");
}
if (Check4){
DisablePlayerCheckpoint(playerid);
SendClientMessage(playerid,0xFFFF00AA, "> CheckPoint atteint, c'est fini.");
}
return 1;
}
Merci de votre aide.
-
tu peu mettre qu'un seul CP en meme temps donc
public OnPlayerSpawn(playerid)
{
Check1 = SetPlayerCheckpoint(playerid, 2866.1811523438, -1659.9093017578, 10.524225234985, 8);
return 1;
}
-
Ok merci je vais essayer.
EDIT : Merci sa marche a merveille. Encore merci.
Double post
A j'ai toujours un problem, des que je rentre dans le 2eme checkpoint sa me téléporte au 1er comment faire?
-
Donnes nous ton code et on pourra peut-être t'aider.
-
Salut le code c'est celui du 1er post mais avec le OnPlayerSpawn modifier :
<?php ...
new Check1;
new Check2;
new Check3;
new Check4;
public OnPlayerSpawn(playerid)
{
Check1 = SetPlayerCheckpoint(playerid, 2866.1811523438, -1659.9093017578, 10.524225234985, 8);
return 1;
}
public OnPlayerEnterCheckpoint(playerid) {
if (Check1){
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 2882.18359375, -1187.7048339844, 10.524225234985, 4);
SendClientMessage(playerid,0xFFFF00AA, "> CheckPoint atteint, au suivant.");
}
if (Check2){
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 2886.9897460938, -662.28234863281, 11.524225234985, 4);
SendClientMessage(playerid,0xFFFF00AA, "> CheckPoint atteint, au suivant.");
}
if (Check3){
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 2712.0295420156, -264.76336669922, 28.524225234985, 4);
SendClientMessage(playerid,0xFFFF00AA, "> CheckPoint atteint, au suivant.");
}
if (Check4){
DisablePlayerCheckpoint(playerid);
SendClientMessage(playerid,0xFFFF00AA, "> CheckPoint atteint, c'est fini.");
}
return 1;
}
-
je ne voit pas pourquoi sa te teleporte la dsl
-
Tu veux peut-être dire que le checkpoint est le premier non ? C'est normal avec ton ancien code, Check2,3,4 ne sont plus utilisés et valent 0. Check1 retourne je ne sais quelle valeur.
Pour que ça marche correctement il faut créer une variable unique (par exemple Check) et lui donner la valeur du checkpoint où tu passes puis vérifier cette valeur (au passage un switch serait plus approprié pour tes conditions).
-
Salut,
vous devriez savoir que les checkpoints n'ont pas d'ID (il n'y en a qu'un)
Il n,existe que 2 ou 3 façons de faire pour savoir quel checkpoint c'est:
- faire un test de position
- un choisi les ID de ses checkpoints et une variable (1 par joueur svp) permet de savoir lequel est en montré (en gros quand tu fais SetPlayerCheckpoint tu change la valeur de la variable au cp correspondant)
- tu t'installe un streamer de checkpoint qui lui te sortira des ID (parce qu'il a un système interne semblable au 2e point)
++Sim++
-
<?php ...
if(PlayerToPoint(8, playerid,2886.9897460938, -662.28234863281, 11.524225234985)) {
....
} sa peux être bon sa?
-
oui
-
Moi j'ai un autre probleme depuis que j'ai changer les CP:
E:\GTA San Andreas\filterscripts\DM1.pwn(26) : error 018: initialization data exceeds declared size
Je ne comprend pas cette érreur.
Voici l'endroit ou sa bloque:
new Float:RSPAWN[5][3] =
{
{-1500.4679,855.2566,7.1875,155.1493},
{-1488.8596,827.5113,7.1875,127.2624},
{-1489.5624,798.7892,7.1853,85.2753},
{-1527.2998,790.7748,7.1805,332.1610},
{-1507.3282,826.0363,14.9413,89.0120},
};
Merci d'avance =)
-
new Float:RSPAWN[5][3] =
{
{-1500.4679,855.2566,7.1875,155.1493},
{-1488.8596,827.5113,7.1875,127.2624},
{-1489.5624,798.7892,7.1853,85.2753},
{-1527.2998,790.7748,7.1805,332.1610},
{-1507.3282,826.0363,14.9413,89.0120}
};
l faut enlever la dernière virgule de la dernière ligne
-
Voila se que j'ai fait mais j'ai des erreurs :
<?php ...
forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);
public OnPlayerEnterCheckpoint(playerid) {
if (Check1) {
new Infernus;
DisablePlayerCheckpoint(playerid);
Infernus = CreateVehicle(411,2866.1811523438, -1659.9093017578, 10.524225234985,200,1,1,5000);
PutPlayerInVehicle(playerid,Infernus,0);
SetPlayerCheckpoint(playerid, 2882.18359375, -1187.7048339844, 10.524225234985, 8);
SendClientMessage(playerid,0xFFFF00AA, "> VOUS ETES SUR LA LIGNE DE DEPART, GOGOGO.");
}
else if(PlayerToPoint(8, playerid,2882.18359375, -1187.7048339844, 10.524225234985)) {
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 2886.9897460938, -662.28234863281, 11.524225234985, 8);
SendClientMessage(playerid,0xFFFF00AA, "> CheckPoint atteint, au suivant.");
}
else if(PlayerToPoint(8, playerid,2886.9897460938, -662.28234863281, 11.524225234985)) {
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 2712.0295420156, -264.76336669922, 28.524225234985, 8);
SendClientMessage(playerid,0xFFFF00AA, "> CheckPoint atteint, au suivant.");
}
else if(PlayerToPoint(8, playerid,2712.0295420156, -264.76336669922, 28.524225234985)) {
DisablePlayerCheckpoint(playerid);
SendClientMessage(playerid,0xFFFF00AA, "> CheckPoint atteint, c'est fini.");
}
return 1;
}
C:\Program Files\Rockstar Games\GTA San Andreas\SERVEUR\gamemodes\gm1.pwn(181) : error 004: function "PlayerToPoint" is not implemented
C:\Program Files\Rockstar Games\GTA San Andreas\SERVEUR\gamemodes\gm1.pwn(187) : error 004: function "PlayerToPoint" is not implemented
C:\Program Files\Rockstar Games\GTA San Andreas\SERVEUR\gamemodes\gm1.pwn(192) : error 004: function "PlayerToPoint" is not implemented
-
Non se n'est pas sa non plus.
new Float:RSPAWN[5][3] =
{
{-1500.4679,855.2566,7.1875,155.1493},
{-1488.8596,827.5113,7.1875,127.2624},
{-1489.5624,798.7892,7.1853,85.2753},
{-1527.2998,790.7748,7.1805,332.1610},
{-1507.3282,826.0363,14.9413,89.0120}
};
Mais j'ai toujours cette érreur:
E:\GTA San Andreas\filterscripts\DM1.pwn(26) : error 018: initialization data exceeds declared size
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
1 Error.
-
Hatomalis essaye de changer [3] par [5] je sais pas xD essaye toujours.
-
Salut,
regarde ton tableau de donnée,
combien y a t'il de ligne?
5 ça va, c'est juste ce qu'il faut
Combien y a t'il de données pas ligne?
4 c,est une de trop, à toi de trouver la quelle
ps. quand tu fais un tableau initialité comme ça et ne veut pas t'embêter avec la taille (sachant que les informations ne seront pas changées par la suite), tu peut l'omettre:
new Float:RSPAWN[][] =
{
{-1500.4679,855.2566,7.1875,155.1493},
{-1488.8596,827.5113,7.1875,127.2624},
{-1489.5624,798.7892,7.1853,85.2753},
{-1527.2998,790.7748,7.1805,332.1610},
{-1507.3282,826.0363,14.9413,89.0120}
};
++Sim++
-
mon erreur de quoi sa vien ?
<?php ...
forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);
public OnPlayerEnterCheckpoint(playerid) {
if (Check1) {
new Infernus;
DisablePlayerCheckpoint(playerid);
Infernus = CreateVehicle(411,2866.1811523438, -1659.9093017578, 10.524225234985,200,1,1,5000);
PutPlayerInVehicle(playerid,Infernus,0);
SetPlayerCheckpoint(playerid, 2882.18359375, -1187.7048339844, 10.524225234985, 8);
SendClientMessage(playerid,0xFFFF00AA, "> VOUS ETES SUR LA LIGNE DE DEPART, GOGOGO.");
}
else if(PlayerToPoint(8, playerid,2882.18359375, -1187.7048339844, 10.524225234985)) {
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 2886.9897460938, -662.28234863281, 11.524225234985, 8);
SendClientMessage(playerid,0xFFFF00AA, "> CheckPoint atteint, au suivant.");
}
else if(PlayerToPoint(8, playerid,2886.9897460938, -662.28234863281, 11.524225234985)) {
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 2712.0295420156, -264.76336669922, 28.524225234985, 8);
SendClientMessage(playerid,0xFFFF00AA, "> CheckPoint atteint, au suivant.");
}
else if(PlayerToPoint(8, playerid,2712.0295420156, -264.76336669922, 28.524225234985)) {
DisablePlayerCheckpoint(playerid);
SendClientMessage(playerid,0xFFFF00AA, "> CheckPoint atteint, c'est fini.");
}
return 1;
}
C:\Program Files\Rockstar Games\GTA San Andreas\SERVEUR\gamemodes\gm1.pwn(181) : error 004: function "PlayerToPoint" is not implemented
C:\Program Files\Rockstar Games\GTA San Andreas\SERVEUR\gamemodes\gm1.pwn(187) : error 004: function "PlayerToPoint" is not implemented
C:\Program Files\Rockstar Games\GTA San Andreas\SERVEUR\gamemodes\gm1.pwn(192) : error 004: function "PlayerToPoint" is not implemented
-
Un grand merci a toi SIM maintenant sa marche =)
Merci du conseille ;)
-
Il est extrêmement dangereux de ne pas mettre la taille d'un tableau.
>:( >:( >:( Je condamne à l'exil définitif tous les scripteurs qui osent mettre des [] sans valeur à l'intérieur >:( >:( >:(!!!
Regardez bien les deux bouts de code ci-dessous :
new Float:RSPAWN[][] =
{
{-1500.4679,855.2566,7.1875,155.1493},
{-1488.8596,827.5113,7.1875,127.2624},
{-1489.5624,798.7892,7.1853,85.2753},
{-1527.2998,790.7748,7.1805,332.1610},
{-1507.3282,826.0363,14.9413,89.0120}
};
new Float:RSPAWN[][] =
{
{-1500.4679,855.2566,7.1875,155.1493},
{-1488.8596,827.5113,7.1875,127.2624},
{-1489.5624,798,7892,7.1853,85.2753},
{-1527.2998,790.7748,7.1805,332.1610},
{-1507.3282,826.0363,14.9413,89.0120}
};
Ces deux bouts de codes se compilent et s'utilisent de la même manière.
Et pourtant, avec le deuxième, tout va très vite partir en sucette et il deviendra pratiquement impossible de savoir pourquoi alors que l'erreur est minime.
D'ailleurs, je vous mets au défi de trouver rapidement (voire de trouver tout court) ce qui cloche dans le deuxième bout de code.
++
Syg
-
erreure troisieme ligne
{-1489.5624,798,7892,7.1853,85.2753},
{-1489.5624,798.7892,7.1853,85.2753},
mais il est vrais que pawn ne renverras pas d'erreur car le tableau n'as pas eu de limite est donc on peu lui inserer des erreure par megarde et pour la rettrouver la misere
-
Je suis donc le seul à mettre des espaces après les virgules ?
-
Je suis donc le seul à mettre des espaces après les virgules ?
je fais exactement la même chose en temps normal
-
Selon notre façon de coder il sera plus ou moins difficile de trouver des erreurs, mais je trouve astucieux de mettre des espaces après chaque virgule ( faut que je m'y mette ) ^^
-
jamais moi ^^ mais par contre j'essaie au max d'aérer mes script
-
Syg quesque tu entend par " EXTREMENT DANGEUREUX " et " Partir en sucète " ??
Parceque moi ne pas mettre la Taille d'un tableau c'est le seul moyen qui marche pour faire disparaitre mon érreur !!
-
look sont deuxieme tableau faux mais qui envoie aucune erreure
est ce transparent ce qu'on post des fois ??
-
Oui, la troisième ligne du deuxième tableau contient 5 valeurs alors que les autre lignes n'en ont que 4.
Les valeurs voulues sont :
-1489.5624 798.7892 7.1853 85.2753
Les valeurs retenues par le compilateur seront :
-1489.5624 798 7892 7.1853
Ce qui n'a rien à voir.
Donc si chaque ligne représente une position, dans le deuxième cas, il y aura certainement un problème.
Quand je dit "extrêmement dangereux", je ne veux pas dire que la vie du scripteur est en danger. Mais ça peut conduire à des plantages inexpliqués du serveur (le serveur part en sucette) qui risquent de remettre en cause la totalité du script puisque l'erreur est quasiment introuvable (car il faut imaginer ce tableau noyé dans plusieurs dizaines de milliers de lignes de codes).
Sinon, en français comme en C ou en PAWN, je mets toujours un espace après un virgule.
Mais ça n'empêchera pas l'erreur commise d'être très difficile à trouver (peut-être même plus difficile encore) :
new Float:RSPAWN[][] =
{
{-1500.4679, 855.2566, 7.1875, 155.1493},
{-1488.8596, 827.5113, 7.1875, 127.2624},
{-1489.5624, 798,7892, 7.1853, 85.2753},
{-1527.2998, 790.7748, 7.1805, 332.1610},
{-1507.3282, 826.0363, 14.9413, 89.0120}
};Ci dessus, la virgule mal placée n'est pas plus facilement détectable que dans le bout de code précédent.
++
Syg
-
Salut,
perso dans mes scripts souvent les positions sont chargées depuis des fichiers. Et je fait presque toujours un print des données chargées (parce que je suis conscient que ça peut être problématique), donc dans le print c'est vachement visible ce genre de truc.
Vive les systèmes automatisés (même si c moins flexible).
EDIT: après vérification, il n'y a aucune position dans mon gm (faudrait vérifier en profondeur mais après un coup d'œil rapide je n'ai rien vu)
EDIT2: le seul tableau initialisé ne porte pas trop à ce genre d'erreur:
enum questions_generales_enum
{
question[96],
reponse[32],
prix
}
new QuestionsGenerales[][questions_generales_enum] =
{
{"Quelle est la couleur du cheval blanc de Napoléon?", "Blanc", 5000},
{"Quel est le nom des zones vertes du serveur?", "Safe-Zone", 5000}
};
j'ai enlevé les lignes qui pourraient ressembler à de la pub
++Sim++
-
Sim, il y a une erreur dans ton script, la cheval blanc, c'était celui d'Henri IV .....
Sinon, initialiser les dimensions d'un tableau est une habitude à prendre qui ne coute rien.
Plus on maîtrise ce que l'on fait, moins il y a de chance pour que le compilateur l'interprète de manière erronée.
Maintenant, concernant ton exemple, ne pas mettre la première dimension t'obligera à utiliser sizeof (qui, par chance, renvoie un nombre d'éléments et non pas un vraie taille comme en C ou en C++).
Sinon, Hatomalis, pour ton erreur de compilation lorsque tu mets la taille du tableau, montre nous le tableau en question, on trouvera la raison.
++
Syg
-
Ouais toujours mettre la taille du tableau c'est mieux ^^
Car par exemple dans un string de ce genre
new Array[][128] =
{
"Salut tout le monde =)",
"Hey un tableau initialiser !",
"=)"
};
C'est un tableau tout à fait normal, mais maintenant si on veut le nombre de string qui la compose naturellement on utilise un sizeof()
or, sizeof() dans ce car la renverra
384 et non pas 3 ^^
Et cela peut se régler avec un define du genre
#define NOMBRE_DE_STRING 3
new Array[NOMBRE_DE_STRING][128] =
{
"Salut tout le monde =)",
"Hey un tableau initialiser !",
"=)"
};
pour éviter le sizeof()
ou bien sizeof() / 128 ( si on connait pas le nombre de string)
-
Euh on peux retourné a moi svp xD, je refait pas une copie, le code et les erreurs sont ne page 2.
Merci
-
Syg, voici mon tableau:
new Float:RSPAWN[5][3] =
{
{-1500.4679,855.2566,7.1875,155.1493},
{-1488.8596,827.5113,7.1875,127.2624},
{-1489.5624,798.7892,7.1853,85.2753},
{-1527.2998,790.7748,7.1805,332.1610},
{-1507.3282,826.0363,14.9413,89.0120},
};
Et mon érreur:
E:\GTA San Andreas\filterscripts\DM1.pwn(26) : error 018: initialization data exceeds declared size
-
Plutôt comme ça
new Float:RSPAWN[6][3] =
-
Syg, voici mon tableau:
new Float:RSPAWN[5][3] =
{
{-1500.4679,855.2566,7.1875,155.1493},
{-1488.8596,827.5113,7.1875,127.2624},
{-1489.5624,798.7892,7.1853,85.2753},
{-1527.2998,790.7748,7.1805,332.1610},
{-1507.3282,826.0363,14.9413,89.0120},
};
Et mon érreur:
E:\GTA San Andreas\filterscripts\DM1.pwn(26) : error 018: initialization data exceeds declared size
je te l'ai dit: tu as 4 données sur une ligne et non pas 3
++Sim++
-
Donc
new Float:RSPAWN[6][4]
(j'avais pas vu ^^)
-
Mais lol vous faites exprer?
-
Réctification:
new Float:RSPAWN[5][4]
C'est bon sa marche merci a tous, et maintenant vous pouvez retourner aider Brian :lmfao
-
up^^
-
Brian Turner osef de la fonction PlayerToPoint utilise IsPlayerInRangeOfPoint (http://wiki.sa-mp.com/wiki/IsPlayerInRangeOfPoint)
-
Ok je vais essaye,r enfete cette fonction est la même que PlayerToPoint d'apres se que j'ai lut.
Encore merci a toi.
-
c'est la meme fonction mais celle ci est integrer dans SAMP
-
Merci, J'aimerai encore une petite aide svp, je sais je suis chient :lmao , j'utilise le systeme de login/register de samp wiki(il utilise dini) comment je pourrai mettre de la musique quand on demande de se connecter et qui se coupe quand on a /login ou /register a oui aussi xD comment eviter que la personne rentre IG quand elle appuis sur spawn en bas au centre ?
EDIT : l'ID de la musique est : 1185
-
Merci Gzsume, j'ai fait un return 0; dans OnPlayerRequestSpawn, dans le script de login/register j'ai mis SpawnPlayer(playerid); quand la personne se /login ou /register(sa le log auto) , enfin tout se que j'ai fait marche mais ma musique s'arrête jamais xD, j'ai mis PlayerPlaySound(playerid, 1185); dans OnPlayerRequestClass mais je pense que sa doit pas etre la qu'on doit le mettre.
-
a ok merci c'est tres clair, encore merci
Brian Turner