GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Spike4395 le 09 Novembre 2008, 17:17:14
-
Bonjours tout le monde :)
Alors voila sa fait 1 semain que je cherche un TUTO pour créer des TEAM avec leader et Rangs (Comme Godfather) mais sans rien trouver
J'ai utuliser la fonction rechercher du serveur
J'ai chercher sur le Forum de SA-MP
J'ai chercher sur Google (Suicidaire ^^)
Mais toujours rien...
Donc je me demande si quelqu'un aurai un TUTO ou pourai en créer un :)
Voila :P
Aurevoir et Merci d'avance
-
Salut,
alors tu peut commencer par créé des variables avec différents niveau, le mieux c'est de définir des constantes pour les niveaux et les équipes...
#define TEAM_DEFENDER 0
#define TEAM_ATTACKER 1
#define LEVEL_SOLDIER 0
#define LEVEL_OFFICER 1
#define LEVEL_LEADER 2
enum TeamLevels
{
TeamJoueur,
LevelJoueur,
NbKill
}
new TeamPlayers[MAX_PLAYERS][teamLevels];
alors là tu aurais tes variables pour les team et les niveaux..
ensuite dans ton OnPlayerRequestClass, tu assigne les équipes que tu désire selon le skin ( tu peut le faire avec une commande ou un autre truc si tu le désire):
public OnPlayerRequestClass(playerid,classid)
{
if(classid == 0) TeamPlayers[playerid][TeamJoueur] = TEAM_DEFENDER;
if(classid == 1) TeamPlayers[playerid][TeamJoueur] = TEAM_ATTACKER;
return 1;
}
puis tu fais comme tu veut pour définir les niveaux, je te recommande selon le nombre de kill, tu défini un nombre minimum pour les niveaux et pour le niveau le plus haut, je m,arrangerais pour que le joueur qui a le plus de kill soit le seul de ce niveau...
exemple:
en haut:
#define NB_KILL_OFFICER 5
#define NB_KILL_LEADER 15
puis lorsque les joueurs tuent:
public OnPlayerDeath(playerid,killerid,reason)
{
if(killerid == INVALID_PLAYER_ID) return 1;
TeamPlayers[killerid][NbKill]++;
if(TeamPlayers[killerid][LevelJoueur] == LEVEL_SOLDIER){
if(TeamPlayers[killerid][NbKill] == NB_KILL_OFFICER){
TeamPlayers[killerid][LevelJoueur] = LEVEL_OFFICER;
GameTextForPlayer(killerid,"Congratulation, you are now an Officer!",3500,5);
return 1;
}
}
else if(TeamPlayers[killerid][LevelJoueur] == LEVEL_OFFICER){
if(TeamPlayers[killerid][NbKill] >= NB_KILL_LEADER){
new IsThereALeader;
for(new i; <MAX_PLAYERS; i++){
if(IsPlayerConnected(i)){
if(TeamPlayers[i][LevelJoueur] == LEVEL_LEADER && TeamPlayers[killerid][TeamJoueur] == TeamPlayers[i][TeamJoueur]){//SI UN JOUEUR DE LA MÊME ÉQUIPE EST LEADER
IsThereAleader = 1;
if(TeamPlayers[i][NbKill] >= TeamPlayers[killerid][NbKill])break;//INUTILE DE CONTINUER, AU MOINS UN JOUEUR EST ÉGAL OU MEILLEUR
TeamPlayers[i][LevelJoueur] = LEVEL_OFFICER;//on le descend de rang
TeamPlayers[killerid][LevelJoueur] = LEVEL_LEADER;//on le monte de rang
GameTextForPlayer(i,"You are no more the leader of your team!",2500,5);
GametextForPlayer(killerid,"Congratulation, you are noew the leaer of your team!",3500,5);//
return 1;
}
}
}
}
}
return 1;
}
je crois que s'y est a peu près, je rajouterai des explications prochaine fois que je le regarderai
P.S. il y a peut-être des fautes, je l'ai composé sur le forum..
++Sim++
-
Re Salut
Merci a toi :)
mais ses pas ce que je cherche :(
Je cherche un tuto pour faire une Team avec leader et rangs
avec un truck du style que l'admin (Lui seul) Peux faire /makeleader (Id /partie du nom du joueur) (Id de la team (ou le nom) )
Apres le Leader peux faire ces commands
/recruter ID (Permet de recruter un autre joueur dans la team)
/uprank ID (ID du rank) (Permet de monter/descendre le grade du joueur de la team)
Voila :D
PS : L'autre tuto que tu ma fait va m'aider pour mon serveur Dm :D
-
salut,
tu peut changer le système comme tu le désie, tu renomme les team puis tu met un truc du genre
if(!strcmp(cmdtext,"/repair",true)){
if(TeamPlayers[playerid][TeamPlayer] != TEAM_MECANO)return SendClientmessage(playerid,COLOR_RED,"Tu ne peut faire cette commande, tu n'est pas mécano!");
et puis les niveaux tu fais comme tu veut, une commande pour les admins, qu'ils changent les niveaux des gens,
au lieu du NbKill, tu écrit Points, et ça a une toute autre signification...
ensuite, si il fait un boulot, tu lui donne des points, à un certains nb de point, il monte de niveau etc...
les niveaux, tu leurs mets les noms que tu veut:
#define LEVEL_DEBUTANT 0
#define LEVEL_INTERMATIDAIRE 1
#define LEVEL_HABITUER 2
#define LEVEL_CONNAISSEUR 3
#define LEVEL_EXPERT 4
#define LEVEL_MEILLEUR 4
et voilà tu as des team pour un rpg, enfin, à peu près
++Sim++
-
A oui :D
:laugh Merci encore
-
Désolé de remonte le Sujet mais si je veux que les informations ce sauvegarde je fais comment ? ( Dini j'ai du mal a m'en servire )
et on fait comment pour faire une command ( /grade ) suivi de l'id pour qu'elle ce fait que sur L'id designié
-
Salut,
pour l'include dini, tu doit en premier créer le fichier (dini_create(adresse) ou encore fcreate(adresse))
alors par exemple, pour stocké les fichiers dans un dossiers users, tu vas avoir, comme adresse /Users/NOMDUJOUEUR
mais, afin d'avoir le nom du joueur, et ne pas insérer les caractères inutilisables pour les fichiers, tu dois utiliser format et udb_encode
format(string,sizeof(string),"/Users/%s",udb_encode(name));
puis, tu te fie à l'utilité de chacune des fonctions, voici la liste, environ:
- dini_get, dini_set: receuillir/enregistrer des strings.
- dini_Int, dini_IntSet : receuillir/enregister un nombre entier
- dini_Bool, dini_BoolSet : receuilir/enregistrer des valeurs booléenne(vrai/faux) (mais perso j'aime pas trop son fonctionnement)
- dini_exist : savoir si un ifchier existe, que tu peut remplacer par fexost qui effectue exactement la même chose
- dini_remove : supprimer un fichier, comme fremove, mais avec un test fexist, donc si le fichier n'existe pas,retourne 0
- dini_create : créer un fichier
- dini_dini_PRIVATE_ExtractKey, dini_PRIVATE_ExtractValue : pour retrouver la partie devant l'espace(key) (dans le fichier, si tu as récupéré toute la ligne) ou la partie après (value)
- dini_Float, dini_FloatSet : récupérer/enregistrer un nombre à virgules
- dini_UnSet : éffacer une ligne du fichier
- dini_IsSet : retourne 1 si une valeur à été trouvé pour la ligne en question, 0 dans le cas contraire
sinon, après tu te sert correctement de ces fonctions et tu devrais être capable de t'arranger, en apssant, dans le plupart des cas, les fonctions sont sous la forme suivante:
pour les enregistrement : dini_***(adresse du fichier, le mot avant le = dans le fichier,valeur à enregistrer);
pour les récupération de valeur: dini_***(adresse, teme) et la fonction retourne la valeur trouvé
voici un petit exemple:
OnPlayerDisConnect(playerid,reason)
{
new Name[MAX_PLAYER_NAME];
new string[128];
GetPlayerName(playerid,Name,MAX_PLAYER_NAME);
if(reason != 2){//si il n'a pas été gentil XD
format(string,sizeof(string),"/Users/%s",udb_encode(Name)
dini_IntSet(string,"Cash",GetPlayerMoney(playerid));//pour le fichier avec le nmom du joueur, à la ligne nommé "cash" on place son argent!!
}
return 1;
}
++Sim++
-
:)
Merci Sim
:) [/b]
Tout ce que je peux faire pour te remercié c'est de te mettre dans les crédits :happy
Pas grand chose mais bon...
Merci encore :)
-
Salut,
ne te sens pas obligé, je ne l'ai pas fait pour être dans les crédits mais bien pour t'aider...
++Sim++