Salut,
désolé de remonté ce "vieux" topic mais je tien à effectué une précision,
comme on peut le voir dans le script de UrbanGhetto :
public OnPlayerEnterCheckpoint(playerid)
LA CALLBACK NE COMPORTE PAS DE PARAMÈTRE CHECKPOINTID, alors tous vos test sur check1, check 2 etc.. ne servent à rien, du moins, pas de la façon dont vous le faites
vous pourriez utiliser un checkpoint streamer comme
celui-ci ou encore
celui-cipas contre, si vous faites de vous même un "streamer", ce qui serait effectivement recommandé si vous avez peu de checkpoint...
utilisez plutôt la fonction IsPlayerToPoint (comme mentionné plus tôt) ou IsPlayerInArea afin de décider si un joueur peut voir ou non un checkpoint,
dans ce streamer, vous devriez faire une variable informant le script si le joueur voit un checkpoint ou non, à ce moment, le test ne sera plus le même, il serait même possible de faire un streamer qui montre tout simplement le checkpoint le plus près...
bref:
au lieu de faire des tests du genre:
public OnPlayerEnterCheckpoint(playerid)
{
switch(desbomb[playerid])
{
case 1:
{
//Commande
}
case 2:
{
//commande
}
}
return 1;
}
Pensez plutôt a un test du genre:
public OnPlayerEnterCheckpoint(playerid)
{
if(IsPlayerToPoint(playerid,X,Y,Z,DISTANCE))//les paramètres X,Y,Z pourraient provenir d'un tableau de données et distance devrait être une constante défini au haut du script
{
....
}else if(IsPlayerToPoint(playerid,X,Y,Z,DISTANCE))
}
...
}
return 1;
}
P.S. un tableau de donnéee serait un code du genre:
enum CHECKPOINT_ENUM
{
Float:X,
Float:Y,
Float:Z,
Float:Taille,//le rayon(ou diamètre) du checkpoint
Float:Distance,//distance pour le voir
}
new CheckpointList[][CHECKPOINT_ENUM] = {
{123.32,432.12,3.231,12,250},//checkpoint ID 0
{123.32,432.12,3.231,12,250},//CheckPoint ID 1
{123.32,432.12,3.231,12,250},//.....
{123.32,432.12,3.231,12,250}
};
new PlayerCheckpointID[MAX_PLAYERS];
new TimerCheckStreamer;
forward StreamCheck();
public OnGameModeInit()
{
TimerCheckStreamer = SetTimer("StreamCheck",1000,1);
return 1;
}
public OnGameModeExit()
{
KillTimer(TimerCheckStreamer);
return 1;
}
public StreamCheck()
{
for(new i; i<MAX_PLAYERS; i++){
if(IsPlayerConnected(i)){
for(new o; o<sizeof(CheckpointList);o++){
if(IsPlayerToPoint(i,CheckpointList[o][X],CheckpointList[o][Y],CheckpointList[o][Z],CheckpointList[o][Distance]){
CreatePlayerCheckPoint(i,CheckpointList[o][X],CheckpointList[o][Y],CheckpointList[o][Z],CheckpointList[o][Taille]);
PlayerCheckpointID[i] = o;
break;//on stoppe la seconde boucle
}
}
}
}
}
//ET FINALEMENT
public OnPlayerEnterCheckPoint(playerid)
{
if(PlayerCheckpointID[playerid] == ...)
{
.....
}
......
return 1;
}
en espérant que le code fonctionne ou presque (composé sur le forum)
++Sim++