GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: DexX le 14 Juillet 2011, 22:58:14
-
Bonsoir à tous,
J'ai crée un intérieur de prison (Mapping) avec 21 cellules.
J'aimerais, lorsqu'on tape la commande /jail, que le joueur soit téléporté dans une cellule. Jusque là sa va (Simple SetPlayerPos). J'aimerais modifier un peu cela de tel sorte que si nous mettons plusieurs joueurs en prison, ils ne se retrouvent pas tous dans la même cellule.
J'aimerais donc savoir comment faire pour qu'il soit téléporter dans une cellule aléatoire après l'exécution de la commande mais sans qu'il y est plusieurs joueurs dans la même.
J'ai pensé à la méthode du Random mais pour faire en sorte qu'ils ne soient pas plusieurs dans la même cellule, je ne vois pas trop ... :-[.
Merci d'avance de vos aides.
Amicalement,
DexX
-
Salut,
Crée un tableau contenant les positions (X, Y, Z et l'angle).
Exemple:
<?php
new Float:JailPositions[][4] =
{
{1234.567, 1234.567, 1234.567, 1234.567}, // On initialise une positon avec l'ordre suivant: X, Y, Z, Angle.
// Etc.
};
Dans la commande /jail, tu utilises ensuite ce code de manière à générer aléatoirement les positions du tableau JailPositions:
<?php
if(strcmp(cmdtext, "/jail", true, 5) == 0) // Je ne sais pas si tu utilises cette méthode, DCMD ou autre. À toi de changer par la suite. ^^
{
new jPos = random(sizeof(JailPositions)); // On initialise la variable "jPos" contenant une position aléatoire.
SetPlayerPos(playerid, JailPositions[jPos][0], JailPosition[jPos][1], JailPositions[jPos][2]); // On positionne le joueur. "jPos" sert à indiquer que l'on utilise à chaque fois la même position. 0, 1 et 2 correspondent à "X", "Y" et "Z".
SetPlayerFacingAngle(playerid, JailPositions[jPos][3]); // On change l'angle du joueur. Encore une fois, "jPos" indique que l'on utilise la même position. 3 correspond à "Angle".
return 1;
}
// Etc.
En espérant que cela t'aide. ;)
++
-
DrawKiie a raison mais si il j'ai 2 joueurs vu qu'il y a 21 cellules il a 1/21 de retombé dans la même sinon tu fait une variable telle que :
[code]new Jailled; // La tu créer ta varialbe tout en haut.
if(strcmp(cmdtext, "/jail", true, 5) == 0)
{
Jailled++;//Tu l'incrément revien a fait +1
if(Jailled == 1)
{
SetPlayerPos(playerid, X,Y, Z);//La tu met la position si il y a un seul joueur
SetPlayerFacingAngle(playerid, ANGLE);//Idem
}
else if (Jailled == 2)
{
SetPlayerPos(playerid, X,Y, Z);//La tu met la position si il y a 2 joueurs etc
SetPlayerFacingAngle(playerid, ANGLE);//Idem
}
return 1;
}
if(strcmp(cmdtext, "/unjail", true, 5) == 0)
{
Jailled--;//-1
SetPlayerPos(playerid, X,Y, Z);//La si tu le libère
SetPlayerFacingAngle(playerid, ANGLE);//Idem
return 1;
}
Je pense que t'es tranquille comme ça ?[/code]
-
Salut,
Tu peux faire un mix des deux sinon :
<?php
new Jailled = 0; // La tu créer ta varialbe tout en haut.
new Float:JailPositions[][3] =
{
{1234.567, 1234.567, 1234.567, 1234.567}, // On initialise une positon avec l'ordre suivant: X, Y, Z, Angle.
// Etc.
};
if(strcmp(cmdtext, "/jail", true, 5) == 0)
{
SetPlayerPos(playerid, JailPosition[Jailled][0],JailPosition[Jailled][1],JailPosition[Jailled][2]);//La tu met la position si il y a un seul joueur
SetPlayerFacingAngle(playerid, JailPosition[Jailled][3]);//Idem
Jailled++;//Tu l'incrément revien a fait +1
return 1;
}
if(strcmp(cmdtext, "/unjail", true, 5) == 0)
{
Jailled--;//-1
SetPlayerPos(playerid, X,Y, Z);//La si tu le libère
SetPlayerFacingAngle(playerid, ANGLE);//Idem
return 1;
}
Je n'ai pas testé, le code est a verifier !
Spiirou
++
-
Bonjour,
Merci de votre aide. C'est comme cela que je pensais faire.
Mais en faite pour l'histoire des deux joueurs, ce que je veux dire par là, c'est que je vais jail un joueur. Il va spawn dans une cellule aléatoirement. Si je jail un autre joueur, il ne faudrait pas qu'il soit dans la même cellule que le premier joueur jail. C'est sa que je veux dire...^^.
-
Ma méthode est bien je pense.
-
Salut,
Ma méthode est bien je pense.
ta méthode comporte deux problèmes:
- Code relativement long dès que tu as 4 - 5 positions et plus.
- difficile de modifier les positions, leur nombre etc...
La méthode de spiirou permet de pouvoir modifier les positions en ne touchant qu'un tableau de données.
Toutefois, spiirou a fait une erreur dans sa déclaration de son tableau, il aurait dû faire:
#define MAX_POSITIONS_JAIL (4)//nombre max de positions
new Float:JailPositions[MAX_POSITIONS][4] =//4 éléments par position
{
{1234.567, 1234.567, 1234.567, 1234.567}, // On initialise une positon avec l'ordre suivant: X, Y, Z, Angle.
// Etc.
};
bonne chance
++Sim++
-
Ah oui, désolé pour les erreurs. Ça fait un bout de temps que je n'ai pas touché au pawn ^^'
Bonne chance DexX :)
Spiirou
-
Mais il y a toujours 1/21 position qu'un joueur retombe dans la même cellule ...
-
Donc, en fait, toi tu n'as pas compris ce qu'il veut ! :)
Lui il veut simplement qu'il n'y ai jamais plus d'un joueur par cellule, et pour cela, mon code est correct ( avec la correction de Sim :D ) et plus propre que le tien
Spiirou
++
-
Merci Spiirou ;).
Merci à tous :).