GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Falcon le 10 Janvier 2010, 18:57:09
-
Bonjour,
Voilà, je suis débutant sous PAWNO et j'ai voulu réaliser un script (à priori pas trop compliqué) qui permettrait de définir le nombre de spawns en fonction du nombre de joueurs connectés.
Cela serait pour éviter à la fois les spawnkills ainsi que de devoir traverser toute la map pour trouver un joueur.
J'ai réalisé ce script. Pouvez-vous s'il vous plaît me dire s'il est correct et, dans le cas contraire, ce qui cloche?
Merci, Falcon.
#define FILTERSCRIPT
#include <a_samp>
new NombreJoueursConnectes[MAX_PLAYERS];
new Float:Spawns1Joueur[2][3] = { // 2 positions aléatoires (si nbre de joueurs connectés est compris entre 6 et 10)
{1958.3783,1343.1572,15.3746},
{2199.6531,1393.3678,10.8203}
};
new Float:Spawns2Joueur[3][3] = { // 3 positions aléatoires (si nbre de joueurs connectés est compris entre 11 et 15)
{1958.3783,1343.1572,15.3746},
{2199.6531,1393.3678,10.8203},
{2483.5977,1222.0825,10.8203}
};
new Float:Spawns3Joueur[4][3] = { // 3 positions aléatoires (si nbre de joueurs connectés est compris entre 16 et 20)
{1958.3783,1343.1572,15.3746},
{2199.6531,1393.3678,10.8203},
{2637.2712,1129.2743,11.1797},
{2483.5977,1222.0825,10.8203}
};
new Float:Spawns4Joueur[5][3] = { // 5 positions aléatoires (si nbre de joueurs connectés est strictement supérieur à 20)
{1958.3783,1343.1572,15.3746},
{2199.6531,1393.3678,10.8203},
{2637.2712,1129.2743,11.1797},
{2637.2712,1129.2743,11.1797},
{2483.5977,1222.0825,10.8203}
};
public OnFilterScriptInit()
{
print("\n--------------------------------------");
print("Random Spawn by Falcon");
print("--------------------------------------\n");
return 1;
}
public OnPlayerConnect(playerid) // Quand un joueur se connecte
{
NombreJoueursConnectes[playerid]++; // Nombre de joueurs connectés : +1
return 1;
}
public OnPlayerSpawn(playerid)
{
new rand1 = random(sizeof(Spawns1Joueur));
new rand2 = random(sizeof(Spawns2Joueur));
new rand3 = random(sizeof(Spawns3Joueur));
new rand4 = random(sizeof(Spawns4Joueur));
if(NombreJoueursConnectes[playerid]<=5) // Si le nombre de joueurs connectés est inférieur ou égal à 5
{
SetPlayerPos(playerid, 1523.5126,-1012.0200,24.0504); // Le joueur apparaitra aux positions définies
}
else if(NombreJoueursConnectes[playerid]>>5 && NombreJoueursConnectes[playerid]<=10) // Si le nombre de joueurs connectés est compris entre 6 et 10
{
SetPlayerPos(playerid, Spawns1Joueur[rand1][0], Spawns1Joueur[rand1][1], Spawns1Joueur[rand1][2]); // Le joueur apparaitra aléatoirement à une des 2 positions définies
}
else if(NombreJoueursConnectes[playerid]>>10 && NombreJoueursConnectes[playerid]<=15) // Si le nombre de joueurs connectés est compris entre 11 et 15
{
SetPlayerPos(playerid, Spawns2Joueur[rand2][0], Spawns2Joueur[rand2][1], Spawns2Joueur[rand2][2]); // Le joueur apparaitra aléatoirement à une des 3 positions définies
}
else if(NombreJoueursConnectes[playerid]>>15 && NombreJoueursConnectes[playerid]<=20) // Si le nombre de joueurs connectés est compris entre 16 et 20
{
SetPlayerPos(playerid, Spawns3Joueur[rand3][0], Spawns3Joueur[rand3][1], Spawns3Joueur[rand3][2]); // Le joueur apparaitra aléatoirement à une des 4 positions définies
}
else // Si le nombre de joueurs connectés est strictement supérieur à 20
{
SetPlayerPos(playerid, Spawns4Joueur[rand4][0], Spawns4Joueur[rand4][1], Spawns4Joueur[rand4][2]); // Le joueur apparaitra aléatoirement à une des 4 positions définies
}
return 1;
}
public OnPlayerDisconnect(playerid) // Quand un joueur se déconnecte
{
NombreJoueursConnectes[playerid]++; // Nombre de joueurs connectés : -1
return 1;
}
-
Salut.
Je n'ai pas testé et donc je ne sais pas s'il fonctionne bien ou non. Cependant il y a quelques petits points qui me chiffonnes:
Tout d'abord il y a ça : " if(NombreJoueursConnectes[playerid]>>5 ". Je n'avais encore jamais vu >>. Si tu veux que ce soit supérieur à un Nombre, il suffit d'en mettre 1
Ensuite, dans OnPlayerConnect(playerid) tu écrit NombreJoueursConnectes[playerid]++ (chose qui à l'air juste ), mais dans OnPlayerDisconnect(playerid) tu remet ++ (ce qui augmente encore le nombre de joueurs). Essaye plutôt de mettre -- à la place ;)
Pour le reste, je n'ai pas regarder en profondeur ni même Tester donc je ne suis pas sur d'avoir raison ;)
-
Ton code ne fonctionnera strictement pas ^^
enfin presque mais pas comme tu le veut lol
Sinon voila ma func. pour savoir combien de joueur sont connecté
public CombienDeConnecter();
public CombienDeConnecter()
{
new connecter = NULL;
for(new i = 0; i < MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i) && !IsPlayerNPC(i))
{
connecter ++;
}
}
return connecter;
}
On l' utilise comme ca
if(CombienDeConnecter() > 5){}
Ton code c' est un FS ?
Si, non retire le #define FILTERSCRIPT
Sinon pas besoin de crée plusieurs tableau pour stocker les positions ^^
tu peut en faire qu' un seul et ca suffira
-
Tu as commis une petite erreur sasuke, forward CombienDeConnecter(); pour la premiere non ?
-
c' est la même chose ^^
public function();
private function();
forward function();
Je ne suis pas sûr pour private ^^
-
Bonjour,
Merci beaucoup de vos réponses.
Je vais regarder ça plus attentivement et si jamais je ne comprends pas je reposterai un message sur le même topic.
PS : Je ne vois pas bien comment on ne peut faire qu'un seul tableau et, de plus, en compilant, il me dit qu'il ne connait pas "NULL".
Merci encore, ++
Falcon
-
Salut,
NULL c'est 0 en fait (dans ce cas)
c un nombre vide, tous les bits sont à 0...
++Sim++
-
Arg ouais j' ai oublié qu' en pawn il y a pas de NULL ^^