Salut,
observons le code....
ObserverSwitchToNextVehicle(playerid)
{
new x=0;
while(x!=MAX_PLAYERS) { // MAX_PLAYERS iterations
gPlayerObserving[playerid]++;
if(gPlayerObserving[playerid] == MAX_PLAYERS) {
// we need to cycle back to the start
gPlayerObserving[playerid] = 0;
}
// see if the target player has a vehicle,
// if so assign this player to observe it
if(gPlayerVehicles[gPlayerObserving[playerid]] != 0) {
PlayerSpectateVehicle(playerid,gPlayerVehicles[gPlayerObserving[playerid]]);
return;
}
x++;
}
// didn't find any vehicles to observe. we'll have to default to last
PlayerSpectateVehicle(playerid,gPlayerVehicles[gPlayerObserving[playerid]]);
}
voilà la fonction, il nous faut maintenant la décortiquer....
new x=0;
while(x!=MAX_PLAYERS) { // MAX_PLAYERS iterations
x++;
comme tu le vois, la loop continue jusqu'à ce que l'on est fais le tour de tous les joueurs (la loop a exécutée un tour complet de tous les 200 joueurs, ou une quantité différente si l'on change la valeur de MAX_PLAYERS)
par la suite, la loop vérifie si l'on est rendu au plus haut possible, quand il n'y a plus de joueur, il faudrait sans doute revenir au début pour faire une belle fonction, c'est d'ailleurs exactement ce que fais le code, on augmente le nombre correspondant au joueur regardé par le spectateur puis si l'on est rendu au bout, on recommence au début:
gPlayerObserving[playerid]++;
if(gPlayerObserving[playerid] == MAX_PLAYERS) {
// we need to cycle back to the start
gPlayerObserving[playerid] = 0;
}
puis le dernier ne te concerne pas tellement, comme dans barron le joueur doit ce trouver dans un rc pour être regardé, on test s'il y est et on assigne le spectateur à ce joueur...
if(gPlayerVehicles[gPlayerObserving[playerid]] != 0) {
PlayerSpectateVehicle(playerid,gPlayerVehicles[gPlayerObserving[playerid]]);
return;
}
dans ton cas, ton joueur serait en spectateur sur le joueur qui l'as tué, il faudrait une variable qui conserve le ID de ce joueur, puis tu exécute l'équivaleut de ce code selon le critère que tu désireras, par contre si tu veut l'exécuter en sens in verse tu n'as qu'à changer 2 choses:
gPlayerObserving[playerid]--;
if(gPlayerObserving[playerid] < 0) {
// we need to cycle back to the start
gPlayerObserving[playerid] = MAX_PLAYERS;
}
et voilà, en espérant que ce code soit plus claire pour toi :D
++Sim++