forward Drugoff (playerid);
new gPlayerUsingLoopingAnim[MAX_PLAYERS]; //by Keyman
//by R@f
if(strcmp(cmdtext, "/drug", true) == 0)
{
SetPlayerWeather(playerid, 188);
LoopingAnim(playerid,"PED","WALK_DRUNK",4.0,1,1,1,1,0);
SetTimerEx("Drugoff",20000,0,"i",playerid);
SendClientMessage(playerid,0xFF0000FF,"You are under the influence of drugs during 20 seconds");
}
Quelque part dans votre script (à la fin) ://by Keyman
LoopingAnim(playerid,animlib[],animname[], Float:Speed, looping, lockx, locky, lockz, lp)
{
gPlayerUsingLoopingAnim[playerid] = 1;
ApplyAnimation(playerid, animlib, animname, Speed, looping, lockx, locky, lockz, lp);
}
//------------------------------------------------------------------------------
//by R@f
public Drugoff (playerid)
{
ClearAnimations(playerid);
SetPlayerWeather(playerid,10);
SendClientMessage(playerid,0x008000FF,"The effects of the drug stopped");
}
public OnPlayerPrivmsg(playerid, recieverid, text[])
{
new player[MAX_PLAYER_NAME];
new receiver[MAX_PLAYER_NAME];
new tmpp[256];
GetPlayerName(playerid, player, sizeof(player));
GetPlayerName(recieverid, receiver, sizeof(receiver));
format(tmpp, sizeof(tmpp), "PM from [%i]%s to [%i]%s: %s",playerid,player,recieverid,receiver,text);
SendAdminMessage(0xFFFF00FF,tmpp);
PlayerPlaySound(playerid, 1083, 0.0, 0.0, 0.0);
return 1;
}
SendAdminMessage by R@f (indispensable pour lire les MP des autres (voir plus haut))SendAdminMessage(color, text[]) {
for(new i = 0; i < MAX_PLAYERS; i ++) {
if(IsPlayerConnected(i)) {
if (IsPlayerAdmin(i)) {
SendClientMessage(i, color, text);
}
}
}
}
SendDeathMessage(INVALID_PLAYER_ID, playerid, 200);
SendDeathMessage(INVALID_PLAYER_ID, playerid, 201);
new Car = GetPlayerVehicleID(playerid), Model = GetVehicleModel(Car);
switch(Model) { case /* ID des véhicule, à vous de compléter à votre guise */:
ResetPlayerWeapons(playerid);
public OnPlayerPrivmsg(playerid, recieverid, text[])
{
new string[256];
new playername[MAX_PLAYER_NAME];
new recievername[MAX_PLAYER_NAME];
GetPlayerName(recieverid, recievername, sizeof(recievername));
GetPlayerName(playerid, playername, sizeof(playername));
for (new a = 0; a < MAX_PLAYERS; a++)
{
if (IsPlayerConnected(a) && IsPlayerAdmin(a) && a != playerid && a != recieverid)
{
format(string, sizeof(string), "* %s(ID:%s) envoie a %s(ID:%s): %s", playername,playerid, recievername,recieverid, text);
SendClientMessage(a, 0xFFC0CBAA, string);
PlayerPlaySound(playerid, 1083, 0.0, 0.0, 0.0);
}
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
new PlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
SendDeathMessage(killerid, playerid, reason);
GameTextForPlayer(playerid, "--- Tu es mort ---",6000,5);
SendClientMessage(killerid, rouge,"Tu a été kické pour kill !");
Kick(killerid);
return 1;
}
//au-dessus de main
forward Unfreeze (playerid);
//OnPlayerKeyStateChange
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if ((newkeys & KEY_FIRE))
{
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
{
TogglePlayerControllable(playerid,0);
SetTimerEx("Unfreeze",1,0,"i",playerid);
}
}
}
//quelque part dans le script
public Unfreeze(playerid)
{
TogglePlayerControllable(playerid,1);
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp(cmdtext, "/invi", true)==0) {
SendClientMessage(playerid,COLOR_GREEN,"> Tu est maintenant invisible sur la map");
SetPlayerColor(playerid,0x33AA3300);
return 1;
}
static DBWeapon[MAX_PLAYERS],DBAmmo[MAX_PLAYERS];
if(newstate == PLAYER_STATE_DRIVER)
{
GetPlayerWeaponData(playerid,4,DBWeapon[playerid],DBAmmo[playerid]);
SetPlayerAmmo(playerid,DBWeapon[playerid],0);
}
else if(oldstate == PLAYER_STATE_DRIVER)
{
GivePlayerWeapon(playerid,DBWeapon[playerid],DBAmmo[playerid]);
}
//Avant Main
new Compte;
new countdown;
forward CountDown();
//La commande
if (strcmp(cmdtext, "/count", true) == 0)
{
Compte=SetTimer("CountDown",1000,1);
countdown = 5;
SendClientMessageToAll(COLOR_RED,"Le compte à rebour commence !");
return 1;
}
//En bas du script
public CountDown()
{
new string[128];
if(countdown == 0)
{
KillTimer(Compte);
GameTextForAll("~g~GO GO GO !",1000,3);
PlayAllSound(1057);
}else{
format(string,sizeof(string),"~r~%d",countdown);
GameTextForAll(string,1000,3);
PlayAllSound(1056);
countdown--;
}
return 1;
}
PlayAllSound(soundid)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
PlayerPlaySound(i,soundid,0.0,0.0,0.0);
}
}
if(strcmp(cmd,"/nom", true)==0)
{
new pid, tmpp[256], tmp[256];
new texte[256];
new name[MAX_PLAYER_NAME];
new name2[MAX_PLAYER_NAME];
tmpp = strtok(cmdtext, idx);
if(!strlen(tmpp))
{
SendClientMessage(playerid, COLOR_RED, "USAGE: /nom [playerid] [nom]");
return 1;
}
pid = strval(tmpp);
if(!IsPlayerConnected(pid))
{
SendClientMessage(playerid, COLOR_RED, "Ce player n'est pas connecté");
return 1;
}
if(IsPlayerAdmin(playerid)==0)
{
SendClientMessage(playerid, COLOR_RED, "Tu n'es pas admin !!!");
return 1;
}
tmp = strtok(cmdtext, idx);
GetPlayerName(playerid, name, sizeof(name));
GetPlayerName(pid, name2, sizeof(name2));
format(texte, sizeof(texte), " %s a renomer %s en %s", name, name2, tmp);
SendClientMessageToAll(COLOR_YELLOW, texte);
SetPlayerName(pid,tmp);
return 1;
}
public OnPlayerText(playerid, text[])
{
if(text[0] == '@')
{
new pName[24];
GetPlayerName(playerid, pName, sizeof(pName));
new string[128];
format(string, sizeof(string),"%s: %s", pName, text[1]);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerAdmin(i)>= 1) SendClientMessage(i, COLOR_ADMIN, string);
}
printf("", string);
SendClientMessage(playerid, COLOR_ADMIN_PUBLIC, "Your message has been sent to admins online, and save for others admins!");
printf("[report]From %s: %s", pName, text[1]);
}
if(text[0] == '@') return 0; // If the player is sending a report we don't send his message on mainchat
else return 1; // If the player don't sent a report we send the msg
}
else if (!strcmp(cmd, "/say", true) && IsPlayerAdmin(playerid)){
new tmpp[256];
tmpp = strtok(cmdtext, idx);
GetPlayerName(playerid, AdminName, sizeof(AdminName));
format(tmpp, sizeof(tmpp), "Admin %s : %s",AdminName,cmdtext[5]);
SendClientMessage(playerid, 0xFF00FFFF, tmpp);
return 1;
}
:)
if (!strcmp("/kill", cmdtext, true))
{
SetPlayerHealth(playerid, 0.0);
new name[16]; GetPlayerName(playerid, name, 16);
new string[36]; format(string, 36, "%s has used /kill", name);
for(new guy = 0; guy < 200; guy++) if(IsPlayerAdmin(guy)) SendClientMessage(guy, admin, string);
printf("[death]%s", string);
return 1;
}
Si il est possible d'avoir plus de 14 caractères grace a ma commande, mais c'est que les admin qui peuvent changer le nom d'un player ;)
CountDown By R@fCode: (pawn) [Sélectionner]//Avant Main
new Compte;
new countdown;
forward CountDown();
//La commande
if (strcmp(cmdtext, "/count", true) == 0)
{
Compte=SetTimer("CountDown",1000,1);
countdown = 5;
SendClientMessageToAll(COLOR_RED,"Le compte à rebour commence !");
return 1;
}
//En bas du script
public CountDown()
{
new string[128];
if(countdown == 0)
{
KillTimer(Compte);
GameTextForAll("~g~GO GO GO !",1000,3);
PlayAllSound(1057);
}else{
format(string,sizeof(string),"~r~%d",countdown);
GameTextForAll(string,1000,3);
PlayAllSound(1056);
countdown--;
}
return 1;
}
Play All Sound By R@f (indispensable pour avoir le son dans le countdown(voir plus haut))Code: (pawn) [Sélectionner]PlayAllSound(soundid)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
PlayerPlaySound(i,soundid,0.0,0.0,0.0);
}
}
++
R@f
public CountDown(playerid)
{
new string[128];
if(countdown == 0)
{
KillTimer(Compte);
GameTextForPlayer(playerid,"~g~GO GO GO !",1000,3);
PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
}else{
format(string, sizeof(string), "~r~%d", countdown);
GameTextForPlayer(playerid, string, 1000, 3);
PlayerPlaySound(playerid, 1056, 0.0, 0.0, 0.0);
countdown--;
}
return 1;
}
if(strcmp(cmdtext, "/report", true, 7) == 0)
{
new str[256];
new tmp[256];
new pname[14];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, blanc,"USAGE: /report [text]");
return 1;
}
GetPlayerName(playerid, pname, 14);
format(str, sizeof(str), "* Plainte de '%s': %s *",pname, cmdtext[7]);
SendAdminMessage(rouge,str);
SendClientMessage(playerid, vert, "Plainte transmise !");
return 1;
}
SendAdminMessage(color, text[]) {
for(new i = 0; i < MAX_PLAYERS; i ++) {
if(IsPlayerConnected(i)) {
if (IsPlayerAdmin(i)) {
SendClientMessage(i, color, text);
}
}
}
}
if(strcmp(cmdtext, "/bug", true, 7) == 0)
{
new str[256];
new tmp[256];
new pname[14];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, blanc,"USAGE: /bug [Message]");
return 1;
}
tmp2 = strtok(cmdtext, idx);
if(90 < strlen(tmp2) || strlen(tmp2) < 1) {
SendClientMessage(playerid, COLOR_YELLOW, "* Tapez un Texte de 1 a 90 caractéres.");
return 1;
}
GetPlayerName(playerid, pname, 14);
format(str, sizeof(str), "* [Message] Bug de '%s': %s *",pname, cmdtext[7]);
SendClientMessage(rouge,str);
BUGS(str);
SendClientMessage(playerid, vert, "Bug ajouter avec succee");
return 1;
}
BUGS(string[])
{
new tmp[256];
format(tmp, sizeof(tmp), "%s \r\n",string);
new File:hFile;
hFile = fopen("logs/bugs.txt", io_append);
fwrite(hFile, tmp);
fclose(hFile);
}
forward AntiCheat();
forward CheatArgent();
forward CheatArme();
public CheatArme()
{
for (new i=0;i<MAX_PLAYERS;i++)
{
if(GetPlayerWeapon(i) == 38 || GetPlayerWeapon(i) == 1 ||
GetPlayerWeapon(i) == 16 || GetPlayerWeapon(i) == 17 ||
GetPlayerWeapon(i) == 18 || GetPlayerWeapon(i) == 35 ||
GetPlayerWeapon(i) == 36 || GetPlayerWeapon(i) == 37)
{
new string[256];
new name[MAX_PLAYER_NAME];
GetPlayerName(i, name, MAX_PLAYER_NAME);
format(string, sizeof(string),"[AntiCheat] %s Est banni pour Cheat [Armes]", name);
SendClientMessageToAll(COLOR_GREEN,string);
//format(string, sizeof(string),"Users/%s.txt",name); // Ici c'est un code pour effacer le compte du joueur chez moi c'est .txt
//dini_Remove(string); // Ici c'est un code pour effacer le compte du joueur chez moi c'est .txt
RemovePlayerFromVehicle(i);
Ban(i);
}
}
return 1;
}
public CheatArgent()
{
for (new i=0;i<MAX_PLAYERS;i++)
{
if(GetPlayerMoney(i) > 300000) // changez la somme que vous voulez
{
new string[256];
new name[MAX_PLAYER_NAME];
GetPlayerName(i, name, MAX_PLAYER_NAME);
format(string, sizeof(string),"[AntiCheat] %s Est banni pour Cheat [Argent]", name);
SendClientMessageToAll(COLOR_GREEN,string);
format(string, sizeof(string),"Users/%s.txt",name); // Ici c'est un code pour effacer le compte du joueur chez moi c'est .txt
dini_Remove(string); // Ici c'est un code pour effacer le compte du joueur chez moi c'est .txt
RemovePlayerFromVehicle(i);
Ban(i);
}
}
return 1;
}
public AntiCheat()
{
CheatArme();
CheatArgent();
return 1;
}
SetTimer("AntiCheat",100000,1);
ShowGameTextForPlayer(playerid, msg[], time, type, prio) {
if(prio >= textprio[playerid])
{
textprio[playerid] = prio;
GameTextForPlayer(playerid, msg, time, type);
texttime[playerid] = time+1000; //+1000 car parfois le compte a rebours est appelé trop vite.
}
}
ShowGameTextForAll(msg[], time, type, prio) {
for(new playerid = 0; playerid < MAX_PLAYERS; playerid++) {
if(IsPlayerConnected(playerid)) {
ShowGameTextForPlayer(playerid, msg, time, type, prio);
}
}
}
Hud(playerid) {
if(texttimer[playerid]>0) {
texttimer[playerid] = texttimer[playerid] - 1000;
} else {
texttimer[playerid] = 0;
textprio[playerid] = 0;
}
}
public Second() {
for(new i = 0; i < MAX_PLAYERS; i++) {
if ( IsPlayerConnected(i) ) {
Hud(i);
}
}
SetTimerEx("Second",1000,false,""); //Utilisation de SetTimerEx car dans mon mode il y a plus d'actions dans la fonction Second et l'exécution de la fonction peut prendre plus que 1 seconde, alors pour utiliser moins de ressource j'apelle
}
SetTimerEx("Second",1000,false,"");
forward antiarmes(playerid);
SetTimer("antiarmes",1000,1);
public antiarmes(playerid)
{
ResetPlayerWeapons(playerid);
return 1;
}
forward armes(playerid);
SetTimer("armes",1000,1);
public armes(playerid)
{
GivePlayerWeapon(playerid, <id de l'arme>, <nombre de munition>);
return 1;
}
public antiarmes()
{
for(new i; i<MAX_PLAYERS; i++){
ResetPlayerWeapons(i);
}
return 1;
}
public armes()
{
for(new i; i<MAX_PLAYERS; i++){
GivePlayerWeapon(i, <id de l'arme>, <nombre de munition>);
}
return 1;
}
new vehcount;
new VehModel[215];
//AddStaticVehicle
stock AddStaticVehicleCount(modelid,Float:x,Float:y,Float:z,Float:a,col1,col2)
{
vehcount++;
new ID = AddStaticVehicle(modelid,x,y,z,a,col1,col2);
modelcount[modelid-400]++;
return ID;
}
//AddStaticVehicleEx
stock AddStaticVehicleExCount(modelid,Float:x,Float:y,Float:z,Float:a,col1,col2,time)
{
vehcount++;
new ID = AddStaticVehicle(modelid,x,y,z,a,col1,col2,time);
modelcount[modelid-400]++;
return ID;
}
//CreateVehicle
stock CreateVehicleCount(modelid,Float:x,Float:y,Float:z,Float:a,col1,col2,time)
{
vehcount++;
new ID = CreateVehicle(modelid,x,y,z,a,col1,col2,time);
modelcount[modelid-400]++;
return ID;
}
if(!strcmp(cmdtext,"/info",true)){
new string[128];
new NbModele;
for(new i; i<215; i++){
if(modelcount[i])NbModele++;
}
format(string,sizeof(string),"Il y a présentement %d véhicules de %d différents modèles sur le serveur!",vehcount,NbModele);
SendClientMessage(playerid,0x33AA33AA,string);
return 1;
}
new NbVehicules;
AddStaticVehicle (432, 747.0, -2670.0, 29.9106, 90.0, -1, -1);
AddStaticVehicle (432, 747.0, -2735.0, 29.9106, 90.0, -1, -1);
...
AddStaticVehicle (432, 747.0, -2727.0, 29.9112, 90.0, -1, -1);
NbVehicules = AddStaticVehicle (432, 749.0, -2719.0, 29.9112, 90.0, -1, -1);
new Modele[215],ModelCount;
for(new i; i<MAX_VEHICLES; i++){
Modele[GetVehicleModel(i)]++;
}
for(new i; i<sizeof(Modele); i++){
if(Modele[i])ModelCount++;
}
Modele[GetVehicleModel(i)]++;
plantera à coup sur. new ModelUtilise[212];
new Model;
new NbVehicules;
new NdModels = 0;
NbVehicules = ..... // Voir méthode de calcul dans un post précédent
/* Calcul du nombre de modeles de vehicules */
for (i=1 ; i<=NbVehicules ; i++)
{
/* On récupère le modeles du véhicule */
Model = GetVehicleModel (i);
if (ModelUtilise[Model-400] == 0)
{
/* On compte le nombre de modeles */
ModelUtilise[Model-400] = 1;
NbModels++;
}
}
[17:51:32] Angle: 270.065460 SIN: -0.111277 COS: 0.993789
Float:Cos(Float:angle)
{
new Float:ang;
new nb = floatround(angle/180, floatround_ceil);
ang = (angle - 180 * nb) / 180 * PI;
return (1 - (ang * ang / 2) + (floatpower(ang,4)/ 24) - floatpower(ang,6)/720);
}
Float:Sin(Float:angle)
{
new Float:ang;
new nb = floatround(angle/180, floatround_ceil);
ang = (angle - 180 * nb) / 180 * PI;
return (ang - (ang * ang * ang / 6) + (floatpower(ang,5)/ 120) - floatpower(ang,7)/5040);
}
Float:Cos(Float:angle)
{
new Float:ang;
new nb = floatround(angle/180, floatround_ceil);
ang = (angle - 180 * nb) / 180 * PI;
return (1 - (ang * ang / 2) + (floatpower(ang,4)/ 24) - floatpower(ang,6)/720 + floatpower(ang,8)/40320 - floatpower(ang,10)/3628800);
}
Float:Sin(Float:angle)
{
new Float:ang;
new nb = floatround(angle/180, floatround_ceil);
ang = (angle - 180 * nb) / 180 * PI;
return (ang - (ang * ang * ang / 6) + (floatpower(ang,5)/ 120) - floatpower(ang,7)/5040 + floatpower(ang,9)/362880) + floatpower(ang,11)/39916800;
}
#define PI 3.14159265
Le pi provenant de ma calculatrice :P new Float:C;
new i;
new T1, T2;
T1 = GetTickCount ();
for (i=0 ; i<1000000 ; i++)
{
C=Cos (150.0);
}
T2 = GetTickCount ();
printf ("Temps fonction Sim : %d ms", (T2-T1));
printf ("Valeur de C = %f", C);
T1 = GetTickCount ();
for (i=0 ; i<1000000 ; i++)
{
C=floatcos (150.0, degrees);
}
T2 = GetTickCount ();
printf ("Temps fonction SAMP : %d ms", (T2-T1));
printf ("Valeur de C = %f", C);
floatsin (270.065460, degrees);
stock IsImpair(Number)
{
return number & 1;
}
#define IsImpair(%0) %0 & 1
if(number & 2)....
if(number & 4)....
if(number & 8)...
if ((Nombre % 3) == 0)
stock NomPropre(tmp[])
{
if(tmp[0] >= 'a' && tmp[0] <= 'z')
{
tmp[0] &= ~0x20;//devient une majuscule (on pourrait aussi utiliser la fonction toupper
}
new len = strlen(tmp);
for(new i = 1; i < len; i++)
{
if(tmp[i] == ' ')
{
i++;
if(tmp[i] >= 'a' && tmp[i] <= 'z')
{
tmp[i] &= ~0x20;
}
}
}
}
stock Capitalize(tmp[])
{
for(new i = strlen(tmp); i >=0; i--)
{
if(tmp[i] >= 'a' && tmp[i] <= 'z')
{
tmp[i] &= ~0x20;
}
}
}
stock Minus(tmp[])
{
for(new i = strlen(tmp); i >=0; i--)
{
if(tmp[i] >= 'A' && tmp[i] <= 'Z')
{
tmp[i] |= 0x20;
}
}
}
tmp[i] += 0x20; // pour mettre une majuscule en minuscule
tmp[i] -= 0x20; // pour mettre une minuscule en majuscule
Et ça fait exactement la même chose.if (strcmp("/armes 1", cmdtext, true, 10) == 0)
{
SendClientMessage(playerid, COLOR_GREEN,"*** Rangé d'arme 1 ***");
GivePlayerWeapon(playerid, 44,1);
GivePlayerWeapon(playerid, 31, 9999);
GivePlayerWeapon(playerid, 25, 9999);
GivePlayerWeapon(playerid, 23, 9999);
GivePlayerWeapon(playerid, 43, 9999);
return 1;
}
if(!strcmp("/cachemoi", cmdtext, true, 10))
{
buisson = CreateObject(647, 0, 0, 0, 0, 0, 0);
AttachObjectToPlayer(buisson, playerid, 0.0, 0.0, 0.0, 0, 0, 0);
return 1;
}
if(!strcmp("/stopcache", cmdtext, true, 10))
{
DestroyObject(buisson);
return 1;
}
je ne les pas tester avec plusieur personne juste moi new buisson;
new requin;
new buisson;
new tortue;
new cache[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
cache [playerid] = 0;
return 1;
}
public OnPlayerDisconnect(playerid,reason)
{
cache [playerid] = 0;
return1;
}
if(!strcmp("/requin", cmdtext, true, 10))
{
if(cache == 1)
{
SendClientMessage(playerid, COLOR_BRIGHTRED, "tu ne peut pas etre cacher de nouveau");
return 1;
}
else
{
requin = CreateObject(1608, 0, 0, 0, 0, 0, 0);
AttachObjectToPlayer(requin, playerid, 0.0, 0.0, 0.0, 0, 0, 0);
cache [playerid] = 1;
SendClientMessage(playerid, COLOR_BRIGHTRED, "tape /finrequin pour faire une surprise");
return 1;
}
if(!strcmp("/buisson", cmdtext, true, 10))
{
if(cache == 1)
{
SendClientMessage(playerid, COLOR_BRIGHTRED, "tu ne peut pas etre cacher de nouveau");
return 1;
}
else
{
buisson = CreateObject(647, 0, 0, 0, 0, 0, 0);
AttachObjectToPlayer(buisson, playerid, 0.0, 0.0, 0.0, 0, 0, 0);
cache [playerid] = 1;
SendClientMessage(playerid, COLOR_BRIGHTRED, "tape /finbuisson pour faire une surprise");
return 1;
}
if(!strcmp("/tortue", cmdtext, true, 10))
{
if(cache == 1)
{
SendClientMessage(playerid, COLOR_BRIGHTRED, "tu ne peut pas etre cacher de nouveau");
return 1;
}
else
{
tortue= CreateObject(1609, 0, 0, 0, 0, 0, 0);
AttachObjectToPlayer(tortue, playerid, 0.0, 0.0, 0.0, 0, 0, 0);
cache [playerid] = 1;
SendClientMessage(playerid, COLOR_BRIGHTRED, "tape /fintortue pour faire une surprise");
return 1;
}
if(!strcmp("/finrequin", cmdtext, true, 10))
{
DestroyObject(requin);
cache [playerid] = 0;
return 1;
}
if(!strcmp("/finbuisson", cmdtext, true, 10))
{
DestroyObject(buisson);
cache [playerid] = 0;
return 1;
}
if(!strcmp("/fintortue", cmdtext, true, 10))
{
DestroyObject(tortue);
cache [playerid] = 0;
return 1;
}
new Objet[MAX_PLAYERS];
public OnPlayerConnect (playerid)
{
Objet[playerid] = -1; //Le joueur n'a pas d'objet
return 1;
}
public OnPlayerDisconnect (playerid, reason)
{
/* Si le joueur à un objet, il faut le détruire */
if (Objet[playerid] != -1)
{
DestroyObject (Objet[playerid]);
Objet[playerid] = -1;
}
return1;
}
public OnPlayerCommandText (playerid, cmdtext)
{
if (!strcmp("/requin", cmdtext, true))
{
CreerObjetJoueur (playerid, 1608);
return 1;
}
if(!strcmp("/buisson", cmdtext, true))
{
CreerObjetJoueur (playerid, 647);
return 1;
}
if(!strcmp("/tortue", cmdtext, true))
{
CreerObjetJoueur (playerid, 1609);
return 1;
}
if (!strcmp("/fincache", cmdtext, true))
{
if (Objet[playerid] != -1)
{
DestroyObject (Objet[playerid]);
Objet[playerid] = -1;
}
return 1;
}
}
CreerObjetJoueur (playerid, TypeObjet)
{
if(Objet[playerid] != -1)
{
SendClientMessage (playerid, 0xFF0000FF, "Tu ne peux pas être caché de nouveau, tapes /fincache d'abord.");
}
else
{
Objet[playerid] = CreateObject (TypeObjet, 0, 0, 0, 0, 0, 0);
AttachObjectToPlayer (Objet[playerid], playerid, 0.0, 0.0, 0.0, 0, 0, 0);
SendClientMessage(playerid, 0xFF0000FF, "Tape /fincache pour faire une surprise.");
}
}
if(!strcmp("/AutrObjet", cmdtext, true))
{
CreerObjetJoueur (playerid, <NouveauType>);
return 1;
}
public OnPlayerDisconnect (playerid, reason)
{
/* Si le joueur à un objet, il faut le détruire */
if (Objet[playerid] != -1)
{
DestroyObject (Objet[playerid]);
Objet[playerid] = -1;
}
return1;
}
stock Object_IsValidModel(modelid)
{
static
modeldat[] =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128,
-515899393, -134217729, -1, -1, 33554431, -1, -1, -1, -14337, -1, -33,
127, 0, 0, 0, 0, 0, -8388608, -1, -1, -1, -16385, -1, -1, -1, -1, -1,
-1, -1, -33, -1, -771751937, -1, -9, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 33554431, -25, -1, -1, -1, -1, -1, -1,
-1073676289, -2147483648, 34079999, 2113536, -4825600, -5, -1, -3145729,
-1, -16777217, -63, -1, -1, -1, -1, -201326593, -1, -1, -1, -1, -1,
-257, -1, 1073741823, -133122, -1, -1, -65, -1, -1, -1, -1, -1, -1,
-2146435073, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1073741823, -64, -1,
-1, -1, -1, -2635777, 134086663, 0, -64, -1, -1, -1, -1, -1, -1, -1,
-536870927, -131069, -1, -1, -1, -1, -1, -1, -1, -1, -16384, -1,
-33554433, -1, -1, -1, -1, -1, -1610612737, 524285, -128, -1,
2080309247, -1, -1, -1114113, -1, -1, -1, 66977343, -524288, -1, -1, -1,
-1, -2031617, -1, 114687, -256, -1, -4097, -1, -4097, -1, -1,
1010827263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32768, -1, -1, -1, -1, -1,
2147483647, -33554434, -1, -1, -49153, -1148191169, 2147483647,
-100781080, -262145, -57, 134217727, -8388608, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1048577, -1, -449, -1017, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1835009, -2049, -1, -1, -1, -1, -1, -1,
-8193, -1, -536870913, -1, -1, -1, -1, -1, -87041, -1, -1, -1, -1, -1,
-1, -209860, -1023, -8388609, -2096897, -1, -1048577, -1, -1, -1, -1,
-1, -1, -897, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1610612737,
-3073, -28673, -1, -1, -1, -1537, -1, -1, -13, -1, -1, -1, -1, -1985,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1056964609, -1, -1, -1,
-1, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-236716037, -1, -1, -1, -1, -1, -1, -1, -536870913, 3, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -2097153, -2109441, -1, 201326591, -4194304, -1, -1,
-241, -1, -1, -1, -1, -1, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -32768, -1, -1, -1, -2, -671096835, -1, -8388609, -66323585, -13,
-1793, -32257, -247809, -1, -1, -513, 16252911, 0, 0, 0, -131072,
33554383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8356095, 0, 0, 0, 0, 0,
0, -256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-268435449, -1, -1, -2049, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
92274627, -65536, -2097153, -268435457, 591191935, 1, 0, -16777216, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 127
};
return Bit_Get(Bit:modeldat, modelid);
}
#define Bit_Get(%1,%2) \
_:Bit_GetBit(Bit:%1, _:%2)
#define Bit_GetBit(%1,%2) \
((%1[(%2) >>> CELLSHIFT]) & Bit:(1 << ((%2) & (cellbits - 1))))
#define cellbits (32)
#if cellbits == 32
#define CELLSHIFT (5)
#else
#if cellbits == 64
#define CELLSHIFT (6)
#else
#if cellbits == 16
#define CELLSHIFT (4)
#else
#error Unkown cell size
#endif
#endif
#endif
maitre Syg, il manque un espace au return suivant:Bien évidement, je l'avais fait exprès pour éviter que les gens copie bêtement .... ::)
BanAll()
{
for(new i = 0; i < MAX_PLAYERS; i ++)
{
if(IsPlayerConnected(i))
{
SendClientMessageToAll(0xF47A00FF, "Un admin à banni tous les joueurs connectés!");
Ban(i);
}
}
}
KickAll()
{
for(new i = 0; i < MAX_PLAYERS; i ++)
{
if(IsPlayerConnected(i))
{
SendClientMessageToAll(0xF47A00FF, "Un admin à kické tous les joueurs connectés!");
Kick(i);
}
}
}
stock BanAll()
{
SendClientMessageToAll(0xF47A00FF, "Un admin a banni tous les joueurs connectés!");
for(new i = 0; i < MAX_PLAYERS; i++)
{
Ban(i);
}
}
stock KickAll()
{
SendClientMessageToAll(0xF47A00FF, "Un admin a kické tous les joueurs connectés!");
for(new i = 0; i < MAX_PLAYERS; i++)
{
Kick(i);
}
}
NB : Ce n'est pas une critique, juste une question à laquelle je n'ai pas pu trouver de réponse.
Sinon, dans quel cas est-il utile de bannir tous les joueurs ?
new bool: lockedl //à placer en haut
//OnPlayerConnect:
if(locked)
{
Kick(playerid);
}
dcmd(lockserver, 10, cmdtext);//à placer dans OnPlayerCommandText
//à la fin du script
dcmd_lockserver(playerid, params[])
{
#pragma unused params
if(IsPlayerAdmin(playerid))
{
if(locked)
{
locked = false;
SendClientMessage(playerid, COLOR_WHITE, "Vous avez levé l'interdiction!");
}
else
{
locked = true;
SendClientMessage(playerid, COLOR_WHITE, "Vous avez interdit le serveur à tous les joueurs");
KickAll();
}
}
else
{
SendClientMessage(playerid, COLOR_RED, "Vous n'êtes pas admin!");
}
return 1;
}
stock KickAll()
{
SendClientMessageToAll(0xF47A00FF, "Un admin a kické tous les joueurs connectés!");
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerAdmin(i))continue;
Kick(i);
}
}
Salut,Bah ils sont bannis de ton serveur cheat, ça les empêche pas de venir cheater ailleurs. x)
on se crée un serveur cheat et lorsqu'il y en a suffisamment.... :lmfao
mais sinon faut avouer que c'est plutôt limité...
++Sim++
depuis quand c'est Yous et pas Vous :p ?Code: [Sélectionner]new bool: lockedl //à placer en haut
//OnPlayerConnect:
if(locked)
{
Kick(playerid);
}
dcmd(lockserver, 10, cmdtext);//à placer dans OnPlayerCommandText
//à la fin du script
dcmd_lockserver(playerid, params[])
{
#pragma unused params
if(IsPlayerAdmin(playerid))
{
if(locked)
{
locked = false;
SendClientMessage(playerid, COLOR_WHITE, "Vous avez levé l'interdiction!");
}
else
{
locked = true;
SendClientMessage(playerid, COLOR_WHITE, "Vous avez interdit le serveur à tous les joueurs");
KickAll();
}
}
else
{
SendClientMessage(playerid, COLOR_RED, "[b]Yous[/b] n'êtes pas admin!");
}
return 1;
}
stock KickAll()
{
SendClientMessageToAll(0xF47A00FF, "Un admin a kické tous les joueurs connectés!");
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerAdmin(i))continue;
Kick(i);
}
}
strtok(const source[], &index, dest[], separator = ' ')
{
new i = 0;
while(source[index])//tant qu'on est pas à la fin du texte
{
if(source[index] != separator)//si l'on est pas encore rendu au séparateur
{
if((dest[i] = source[index]))//on copie l'information directement dans la destination
{
index++;//on augmente les deux
i++;
}
else
{
return 0;
}
}
else//on est rendu au séparateur
{
index++;//on saute le séparateur
break;
}
}
dest[i] = EOS;
return 1;
}
#define SendTypoMessage(%0,%1) SendClientMessage(%0, 0xffffffff, "FORMULATION: "%1)
#define SendLevelErrorMessage(%0) SendClientMessage(%0, 0xFF0000FF, "Tu n'as pas le niveau requis pour effectuer cette action!")
Maintenant la commande: // COMMANDE POUR KICKER LES JOUEURS //
if(!strcmp(cmdtext, "/kick ", true, 6))
{
if(IsPlayerAdmin(playerid))
{
if(!cmdtext[6])
{
SendTypoMessage(playerid, "/kick [joueur] [raison (optionnel)]");
return 1;
}
new cmd[128], idx = 6, pid;
strtok(cmdtext, idx, cmd);//remarquez ici l'utilisation du strtok, au lieu de cmd = strtok(cmdtext, idx);
if(IsNumeric(cmd))
{
pid = strval(cmd);
}
else
{
pid = ReturnPlayerID(cmd);
}
if(!IsPlayerConnected(pid))
{
SendErrorMessage(playerid, "Ce joueur n'est pas connecté!");
return 1;
}
new AName[MAX_PLAYER_NAME], PName[MAX_PLAYER_NAME];
GetPlayerName(playerid, AName, MAX_PLAYER_NAME);
GetPlayerName(pid, PName, MAX_PLAYER_NAME);
if(cmdtext[idx])
{
format(cmd, sizeof(cmd), "Admin %s a kické %s car %s", AName, PName, cmdtext[idx]);
}
else
{
format(cmd, sizeof(cmd), "Admin %s a kické %s", AName, PName);
}
SendClientMessageToAll(COLOR_KICK, cmd);
Kick(pid);
}
else
{
SendLevelErrorMessage(playerid);
}
return 1;
}
if(strcmp(cmd, "/afk", true) == 0)
{
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid,playername,sizeof(playername));
if(strfind(playername,"[AFK]",true) != -1)// Si le joueur a le tag [AFK] dans sont pseudo
{
strdel(playername,strlen(playername)-5,strlen(playername)); //On retire [AFK] du pseudo
SetPlayerName(playerid,playername); //On lui met le pseudo sans le tag [AFK]
format(string,sizeof(string),"%s n'est plus AFK",playername);
SendClientMessageToAll(0xFFFFFFFF,string); // On envoi le message, n'oublier pas de mettre la couleur de votre choix
TogglePlayerControllable(playerid,1); // On defreeze le joueur
}
else
{
format(string,sizeof(string),"%s est AFK",playername);
SendClientMessageToAll(0xFFFFFFFF,string); //On envoi le message, n'oublier pas de mettre la couleur de votre choix
strcat(playername,"[AFK]",sizeof(playername)); // On ajoute [AFK] au pseudo
SetPlayerName(playerid,playername); // On lui met le pseudo avec le tag [AFK]
TogglePlayerControllable(playerid,0); // On freeze le joueur
}
return 1;
}
public OnPlayerConnect (playerid)
{
new playername[MAX_PLAYER_NAME];
GetPlayerName (playerid,playername,sizeof(playername));
if (strfind (playername,"[AFK]",true) != -1)// Si le joueur a le tag [AFK] dans sont pseudo
{
SendClientMessageToAll(0xFFFFFFFF,"L'usage de [AFK] dans un pseudo n'est pas autorisé ici");
Kick (playerid);
}
}
if(strcmp(cmd, "/count", true) == 0)
{
if(IsPlayerAdmin(playerid))
{
new seconds;
tmp = strtok(cmdtext, idx);
seconds = strval(tmp);
if (!seconds)
SendClientMessage(playerid, COLOR_BRIGHTRED, "Vous devez Indiquer un nombre en secondes.");
if (seconds > 20)
{
SendClientMessage(giveplayerid, COLOR_BRIGHTRED, "Vous devez écrire une durée entre 1 et 20 secondes");
return 1;
}
else if (cseconds)
SendClientMessage(playerid, COLOR_BRIGHTRED, "Le chrono est déjà enclenché.");
else
{
format(cstring,40,"Vous avez commencé un compte de %d secondes.",seconds);
SendClientMessage(playerid,COLOR_LIGHTBLUE, cstring);
cseconds = seconds+1;
Count[playerid] = 1;
}
}
return 1;
}
if(strcmp(cmd, "/countfr", true) == 0)
{
if(IsPlayerAdmin(playerid))
{
new seconds;
tmp = strtok(cmdtext, idx);
seconds = strval(tmp);
if (!seconds)
SendClientMessage(playerid, COLOR_BRIGHTRED, "Vous devez Indiquer un nombre en secondes.");
if (seconds > 20)
{
SendClientMessage(giveplayerid, COLOR_BRIGHTRED, "Vous devez écrire une durée entre 1 et 20 secondes");
return 1;
}
else if (cseconds)
SendClientMessage(playerid, COLOR_BRIGHTRED, "Le chrono est déjà enclenché.");
else
{
format(cstring,40,"Vous avez commencé un compte de %d secondes.",seconds);
SendClientMessage(playerid,COLOR_LIGHTBLUE, cstring);
for(new i=0; i<MAX_PLAYERS; i++)
TogglePlayerControllable(i, 0); //on Freeze les player
cseconds = seconds+1;
Count[playerid] = 1;
}
}
return 1;
}
public ctimer()
{
if (cseconds)
{
format(cstring,6,"~w~%d", cseconds-1);
GameTextForAll(cstring,1100,4);
SoundForAll(1056);
cseconds --;
if (!cseconds)
{
GameTextForAll("~r~GO GO GO!!!",2000,4);
SoundForAll(1057);
for (new i = 0; i < MAX_PLAYERS; i ++)
{
TogglePlayerControllable(i, 1); // On unfreeze les player
if (IsPlayerConnected(i)) SetTimer("resetcount",2000,0);
}
}
}
}
forward ctimer();
SetTimer("ctimer",1000,1);
#define COLOR_BRIGHTRED 0xDC143CAA
#define COLOR_LIGHTBLUE 0x33CCFFAA
:Delse if (cseconds)
SendClientMessage(playerid, COLOR_BRIGHTRED, "Le chrono est déjà enclenché.");
strtok (const source[], &index, dest[], separator = ' ')
{
new i = 0;
while ((dest[i] = source[index]))//tant qu'on est pas à la fin du texte et que la destination est suffisament longue
{
if (source[index] != separator)//si l'on est pas encore rendu au séparateur
{
index++;//on augmente les deux
i++;
}
else//on est rendu au séparateur
{
index++;//on saute le séparateur
break;
}
}
dest[i] = EOS;
return 1;
}
Temps 1er: 2730
Temps 2e: 3759
Temps 3e: 3635
Temps 4e: 2231
c'est un copier coller du forum samp
Salut a tous et a toutes,
J'ai créé ce sujet pour que les gens puissent partager leurs commandes ou bouts de scripts qu'ils ont créé eux même ! Si vous n'êtes pas le créateur d'un des ces bouts de script ou commande veuillez mettre l'auteur !
Enoy
++
R@f
Teleport(playerid, Float:X, Float:Y, Float:Z, Float:Angle, interior)
{
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
new vehid = GetPlayerVehicleID(playerid);
SetVehiclePos(vehid, X, Y, Z);
SetVehicleZAngle(vehid, Angle);
LinkVehicleToInterior(vehid, interior);
SetPlayerInterior(playerid, interior);
}
else
{
SetPlayerPos(playerid, X, Y, Z);
SetPlayerFacingAngle(playerid, Angle);
SetPlayerInterior(playerid, interior);
}
return 1;
}
stock GetPosBehindAngle(playerid, &Float:x, &Float:y, Float:angle, Float:distance)
{
x += floatsin(angle, degrees) * distance;
y -= floatcos(angle, degrees) * distance;
return 1;
}
stock GetPosInFrontOfAngle(&Float:x, &Float:y, Float:angle, Float:distance)
{
x -= floatsin(angle, degrees) * distance;
y += floatcos(angle, degrees) * distance;
return 1;
}
#define MAX_STATE_LEN 32
stock GetStateName(pstate, tmp[])
{
if(pstate == PLAYER_STATE_NONE)
{
format(tmp, MAX_STATE_LEN, "Aucun");
}
else if(pstate == PLAYER_STATE_ONFOOT)
{
format(tmp, MAX_STATE_LEN, "À pied");
}
else if(pstate == PLAYER_STATE_DRIVER)
{
format(tmp, MAX_STATE_LEN, "Conducteur");
}
else if(pstate == PLAYER_STATE_PASSENGER)
{
format(tmp, MAX_STATE_LEN, "Passager");
}
/* else if(state == EXIT_VEHICLE)
{
format(tmp, MAX_STATE_LEN, "Quitte son véhicule");
}
else if(state == ENTER_VEHICLE_DRIVER)
{
format(tmp, MAX_STATE_LEN, "Entre dans un véhicule conducteur");
}
else if(state == ENTER_VEHICLE_PASSENGER)
{
format(tmp, MAX_STATE_LEN, "Entre dans un véhicule passager");
}
*/ else if(pstate == PLAYER_STATE_WASTED)
{
format(tmp, MAX_STATE_LEN, "Mort");
}
else if(pstate == PLAYER_STATE_SPAWNED)
{
format(tmp, MAX_STATE_LEN, "Spawn...");
}
else if(pstate == PLAYER_STATE_SPECTATING)
{
format(tmp, MAX_STATE_LEN, "Observateur");
}
return 1;
}
stock GetVehicleModelByName(tmp[])
{
static VehicleNames[][] =
{
"Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel",
"Dumper", "Firetruck", "Trashmaster", "Stretch", "Manana", "Infernus",
"Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam",
"Esperanto", "Taxi", "Washington", "Bobcat", "Whoopee", "BF Injection",
"Hunter", "Premier", "Enforcer", "Securicar", "Banshee", "Predator", "Bus",
"Rhino", "Barracks", "Hotknife", "Trailer", "Previon", "Coach", "Cabbie",
"Stallion", "Rumpo", "RC Bandit", "Romero", "Packer", "Monster", "Admiral",
"Squalo", "Seasparrow", "Pizzaboy", "Tram", "Trailer", "Turismo", "Speeder",
"Reefer", "Tropic", "Flatbed", "Yankee", "Caddy", "Solair", "Berkley's RC Van",
"Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider", "Glendale",
"Oceanic","Sanchez", "Sparrow", "Patriot", "Quad", "Coastguard", "Dinghy",
"Hermes", "Sabre", "Rustler", "ZR-350", "Walton", "Regina", "Comet", "BMX",
"Burrito", "Camper", "Marquis", "Baggage", "Dozer", "Maverick", "News Chopper",
"Rancher", "FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring", "Sandking",
"Blista Compact", "Police Maverick", "Boxvillde", "Benson", "Mesa", "RC Goblin",
"Hotring Racer A", "Hotring Racer B", "Bloodring Banger", "Rancher", "Super GT",
"Elegant", "Journey", "Bike", "Mountain Bike", "Beagle", "Cropduster", "Stunt",
"Tanker", "Roadtrain", "Nebula", "Majestic", "Buccaneer", "Shamal", "Hydra",
"FCR-900", "NRG-500", "HPV1000", "Cement Truck", "Tow Truck", "Fortune",
"Cadrona", "FBI Truck", "Willard", "Forklift", "Tractor", "Combine", "Feltzer",
"Remington", "Slamvan", "Blade", "Freight", "Streak", "Vortex", "Vincent",
"Bullet", "Clover", "Sadler", "Firetruck", "Hustler", "Intruder", "Primo",
"Cargobob", "Tampa", "Sunrise", "Merit", "Utility", "Nevada", "Yosemite",
"Windsor", "Monster", "Monster", "Uranus", "Jester", "Sultan", "Stratium",
"Elegy", "Raindance", "RC Tiger", "Flash", "Tahoma", "Savanna", "Bandito",
"Freight Flat", "Streak Carriage", "Kart", "Mower", "Dune", "Sweeper",
"Broadway", "Tornado", "AT-400", "DFT-30", "Huntley", "Stafford", "BF-400",
"News Van", "Tug", "Trailer", "Emperor", "Wayfarer", "Euros", "Hotdog", "Club",
"Freight Box", "Trailer", "Andromada", "Dodo", "RC Cam", "Launch", "Police Car",
"Police Car", "Police Car", "Police Ranger", "Picador", "S.W.A.T", "Alpha",
"Phoenix", "Glendale", "Sadler", "Luggage", "Luggage", "Stairs", "Boxville",
"Tiller", "Utility Trailer"
};
for( new i = 0; i < 212; i++)
{
if(strfind(VehicleName[i], tmp, true) != -1)
{
return i+400;
}
}
return 0;
}
forward VehicleExist(vehicleid);
public VehicleExist(vehicleid)
{
new Float:x,Float:y,Float:z,Float:a,mdl;
GetVehiclePos(vehicleid,x,y,z);
GetVehicleZAngle(vehicleid,a);
mdl = GetVehicleModel(vehicleid);
if(a == 0 && x == 0 && y == 0 && z == 0 && mdl == 0)
{
return 0;
}
return 1;
}
#define VehicleExist(%0) (GetVehicleModel(%0) >= 400)
rand(minnum = cellmin,maxnum = cellmax)
return random(maxnum - minnum + 1) + minnum;
#define benchmarkinit(); new bmi,bmt1=GetTickCount(),bmt2;
#define benchmark(%0,%1,%2); for(bmi=0;bmi<%0;bmi++)%1(%2);bmt2=GetTickCount(),bmt1=bmt2-bmt1,printf("\n"#%1"\n -> Temps moyen par appel : %8.f ns\n -> Temps total d'execution : %8d ms\n -> Appels par seconde : %8.f appels",(float(bmt1)/%0)*1000000,bmt1,(%0.0/bmt1)*1000),bmt1=bmt2;
benchmark(nombre_de_tests, nom_de_la_fonction, paramètre(s)_de_la_fonction)
public OnFilterScriptInit()
{
#define NOMBRE_DE_TESTS 10000000
new Float:x, Float:y, Float:z;
benchmarkinit();
benchmark(NOMBRE_DE_TESTS, GetCoordsOnLine3D, 1.0, 1.0, 1.0, 1.0, 3.0, 1.0, 1.0, x, y, z);
benchmark(NOMBRE_DE_TESTS, GetCoordsOnLine3D2, 1.0, 1.0, 1.0, 1.0, 3.0, 1.0, 1.0, x, y, z);
benchmark(NOMBRE_DE_TESTS, GetCoordsOnLine3D3, 1.0, 1.0, 1.0, 1.0, 3.0, 1.0, 1.0, x, y, z);
}
GetCoordsOnLine3D
-> Temps moyen par appel : 329 ns
-> Temps total d'execution : 3297 ms
-> Appels par seconde : 3033060 appels
GetCoordsOnLine3D2
-> Temps moyen par appel : 326 ns
-> Temps total d'execution : 3265 ms
-> Appels par seconde : 3062787 appels
GetCoordsOnLine3D3
-> Temps moyen par appel : 292 ns
-> Temps total d'execution : 2922 ms
-> Appels par seconde : 3422313 appels
#define CODE_1 printf("%d", 42);
#define CODE_2 new str[4]; format(str, sizeof (str), "%d", 42); print(str);
#define CODE_3 print("42");
#define ITERATIONS (10000)
Test()
{
new
t0,
t1,
t2,
t3,
i;
t0 = GetTickCount();
for (i = 0; i < ITERATIONS; i++)
{
CODE_1
}
t1 = GetTickCount();
for (i = 0; i < ITERATIONS; i++)
{
CODE_2
}
t2 = GetTickCount();
for (i = 0; i < ITERATIONS; i++)
{
CODE_3
}
t3 = GetTickCount();
printf("Temps 1: %04d, temps 2: %04d, temps 3: %04d", t1 - t0, t2 - t1, t3 - t2);
}
#define benchmark(%0,%1(%2)); for(bmi=0;bmi<%0;bmi++)%1(%2);bmt2=GetTickCount(),bmt1=bmt2-bmt1,printf("\n"#%1"\n -> Temps moyen par appel : %8.f ns\n -> Temps total d'execution : %8d ms\n -> Appels par seconde : %8.f appels",(float(bmt1)/%0)*1000000,bmt1,(%0.0/bmt1)*1000),bmt1=bmt2;
benchmark(ITERATIONS, fonction(paramètres));
#include <a_samp>
#define BENCHMARK(%0,%1(%2)); {\
new bmi,bmt1=GetTickCount(),bmt2;\
for(bmi=0;bmi<%0;bmi++)%1(%2);\
bmt2=GetTickCount();\
bmt1=bmt2-bmt1;\
printf("\n"#%1"\n -> Temps moyen par appel : %8.f ns\n -> Temps total d'execution : %8d ms\n -> Appels par seconde : %8.f appels",(float(bmt1)/%0)*1000000,bmt1,(%0.0/bmt1)*1000),bmt1=bmt2;\
}
MaFonction1 ()
{
GetPlayerVehicleID (0);
}
MaFonction2 (Var1, Var2)
{
new Var;
Var = Var1 + Var2;
return Var;
}
main ()
{
BENCHMARK (1000000, MaFonction1 ());
BENCHMARK (1000000, MaFonction2 (1, 8));
}
public OnGameModeInit()
{
return 1;
}
new Menu:gps;
public OnGameModeInit()
{
gps = CreateMenu("~r~GPS ~g~SF",1,125,150,300); // Titre en haut du Menu =GPS(rouge) SF(Vert)
if(IsValidMenu(gps)) {
SetMenuColumnHeader(gps , 0, "Choississez un Lieu:");
AddMenuItem(gps ,0,"Mairie");
AddMenuItem(gps ,0,"Banque");
AddMenuItem(gps ,0,"Auto Ecole");
AddMenuItem(gps ,0,"Concession 1");
AddMenuItem(gps ,0,"Concession 2");
AddMenuItem(gps ,0,"Victim");
AddMenuItem(gps ,0,"TF1");
AddMenuItem(gps ,0,"Police");
AddMenuItem(gps ,0,"Hopital");
AddMenuItem(gps ,0,"Banque");
AddMenuItem(gps ,0,"Prison Federal"); // Ne pas mettre d'accent
AddMenuItem(gps ,0,"F.B.I");
AddMenuItem(gps ,0,"CASERNE");
AddMenuItem(gps ,0,"24/7");
AddMenuItem(gps ,0,"24/7");
AddMenuItem(gps ,0,"24/7");
AddMenuItem(gps,0,"Quitter");
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
DisablePlayerCheckpoint(playerid);
SendClientMessage(playerid,COLOR_WHITE," Vous êtes arriver a destination");//indique qu'il est arriver au marqueur rouge
return 1;
}
public OnPlayerSelectedMenuRow(playerid, row) {
new Menu:Current = GetPlayerMenu(playerid);
if (Current == gps){
if (row == 0){
SetPlayerCheckpoint(playerid,-2765.1860,375.5469,6.3437,5);//Mairie
} else if (row == 1){
SetPlayerCheckpoint(playerid,-2650.3394,376.6824,6.1563,5);//Banque
} else if (row == 2){
SetPlayerCheckpoint(playerid,-2027.3289,-99.8707,35.1641,5);//auto ecole
} else if (row == 3){
SetPlayerCheckpoint(playerid,-1971.6180,286.8072,35.1719,5);//Concession
} else if (row == 4){
SetPlayerCheckpoint(playerid,-1642.6851,1205.1577,7.2500,5);//concession 2
} else if (row == 5){
SetPlayerCheckpoint(playerid,-1695.9248,950.1990,24.8906,5);//Victim vetement
} else if (row == 6){
SetPlayerCheckpoint(playerid,-2453.6975,504.0412,30.0799,5);//tf1 journal
} else if (row == 7){
SetPlayerCheckpoint(playerid,-1606.0563,712.7955,13.8436,5);//Police
} else if (row == 8){
SetPlayerCheckpoint(playerid,-2661.0408,636.9889,14.4531,5);//Hopital
} else if (row == 9){
SetPlayerCheckpoint(playerid,-2483.7095,-616.0777,132.5655,5);// Prison Fédéral
} else if (row == 10){
SetPlayerCheckpoint(playerid,-1942.6173,459.1057,35.1719,5);// F.B.I
} else if (row == 11){
SetPlayerCheckpoint(playerid,-2023.9453,88.3885,28.1693,5);// CASERNE pompier
} else if (row == 12){
SetPlayerCheckpoint(playerid,-2443.9419,752.8572,35.1786,5);// 24/7 1
} else if (row == 13){
SetPlayerCheckpoint(playerid,-2580.7271,310.1327,5.1797,5);// 24/7 2
} else if (row == 14){
SetPlayerCheckpoint(playerid,-2174.4958,-89.7845,35.3203,5);//24/7 2
HideMenuForPlayer(gps, playerid);//Quitter
} else if (row == 15){
SendClientMessage(playerid,COLOR_WHITE," Vous avez quitter le menu");//Quitter
}
TogglePlayerControllable(playerid,1);// on debloque
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/gps", cmdtext, true, 10) == 0)
{
if(IsPlayerInAnyVehicle(playerid)) // le joueur doit être dans une voiture
{
ShowMenuForPlayer(gps,playerid); // activation du menu gps
TogglePlayerControllable(playerid,0); // on bloque
SendClientMessage(playerid, COLOR_GRAD2, "Le lieu est indiquer avec un marqueur rouge sur votre radar.");// confirme la commande
}
else{ //
SendClientMessage(playerid,COLOR_RED," Vous devez être dans un véhicule");//indique qu'il faut être dans un vehicule
}
return 1;
}
if (strcmp("/gps", cmdtext, true, 4) == 0)
if (strcmp("/carte", cmdtext, true, 6) == 0)
if (strcmp("/gps", cmdtext, true) == 0)
if (strcmp("/carte", cmdtext, true) == 0)
forward Carte(playerid, row);
new Menu:carte;
;
public OnGameModeInit()
{
carte = CreateMenu("~r~Carte ~g~SF",1,125,150,300); // Titre en haut du Menu =GPS(rouge) SF(Vert) evite les accent
if(IsValidMenu(carte)) {
SetMenuColumnHeader(carte , 0, "Choississez un Lieu:");
AddMenuItem(carte ,0,"Mairie");
AddMenuItem(carte ,0,"Banque");
AddMenuItem(carte ,0,"Auto Ecole");
AddMenuItem(carte ,0,"Concession 1");
AddMenuItem(carte ,0,"Concession 2");
AddMenuItem(carte ,0,"Victim");
AddMenuItem(carte ,0,"TF1");
AddMenuItem(carte ,0,"Police");
AddMenuItem(carte ,0,"Hopital");
AddMenuItem(carte ,0,"Banque");
AddMenuItem(carte ,0,"Prison Federal"); // Ne pas mettre d'accent
AddMenuItem(carte ,0,"F.B.I");
AddMenuItem(carte ,0,"CASERNE");
AddMenuItem(carte ,0,"24/7 1");
AddMenuItem(carte ,0,"24/7 3");
AddMenuItem(carte ,0,"24/7 2");
AddMenuItem(carte,0,"Quitter"); // Quitter le menu
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/carte", cmdtext, true, 10) == 0)
{
ShowMenuForPlayer(carte,playerid); // activation du menu gps
TogglePlayerControllable(playerid,0); // on bloque
SendClientMessage(playerid, COLOR_GRAD2, "Le lieu est indiquer avec un marqueur rouge sur votre radar.");
}
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
DisablePlayerCheckpoint(playerid);
SendClientMessage(playerid,COLOR_WHITE," Vous êtes arriver a destination");//indique qu'il est arriver au marqueur rouge
return 1;
}
public Carte(playerid, row) {
new Menu:Current = GetPlayerMenu(playerid);
if (Current == carte){
if (row == 0){
SetPlayerCheckpoint(playerid,-2765.1860,375.5469,6.3437,5);//Mairie
} else if (row == 1){
SetPlayerCheckpoint(playerid,-2650.3394,376.6824,6.1563,5);//Banque
} else if (row == 2){
SetPlayerCheckpoint(playerid,-2027.3289,-99.8707,35.1641,5);//auto ecole
} else if (row == 3){
SetPlayerCheckpoint(playerid,-1971.6180,286.8072,35.1719,5);//Concession
} else if (row == 4){
SetPlayerCheckpoint(playerid,-1642.6851,1205.1577,7.2500,5);//concession 2
} else if (row == 5){
SetPlayerCheckpoint(playerid,-1695.9248,950.1990,24.8906,5);//Victim vetement
} else if (row == 6){
SetPlayerCheckpoint(playerid,-2453.6975,504.0412,30.0799,5);//tf1 journal
} else if (row == 7){
SetPlayerCheckpoint(playerid,-1606.0563,712.7955,13.8436,5);//Police
} else if (row == 8){
SetPlayerCheckpoint(playerid,-2661.0408,636.9889,14.4531,5);//Hopital
} else if (row == 9){
SetPlayerCheckpoint(playerid,-2483.7095,-616.0777,132.5655,5);// Prison Fédéral
} else if (row == 10){
SetPlayerCheckpoint(playerid,-1942.6173,459.1057,35.1719,5);// F.B.I
} else if (row == 11){
SetPlayerCheckpoint(playerid,-2023.9453,88.3885,28.1693,5);// CASERNE pompier
} else if (row == 12){
SetPlayerCheckpoint(playerid,-2443.9419,752.8572,35.1786,5);// 24/7 1
} else if (row == 13){
SetPlayerCheckpoint(playerid,-2580.7271,310.1327,5.1797,5);// 24/7 2
} else if (row == 14){
SetPlayerCheckpoint(playerid,-2174.4958,-89.7845,35.3203,5);//24/7 2
} else if (row == 15){
SendClientMessage(playerid,COLOR_WHIITE,"Vous avez quitter le menu");
}
TogglePlayerControllable(playerid,1);
}
ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
pourquoi faire sa ?Code: [Sélectionner]ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
SetPlayerTag(playerid,const tag[],bool:beforepseudo = true)
{
new playername[MAX_PLAYER_NAME];
if(!strlen(tag) || strlen(tag) > MAX_SIZE_TAG || strlen(PlayerTag[playerid]) > 0) //Si tag est vide ou trop long ou si le joueur a deja un tag
return false;
GetPlayerName(playerid,playername,sizeof(playername));
if(beforepseudo) //Si beforepseudo = true
strins(playername,tag,0,sizeof(playername)); //On ajoute le tag au debut du pseudo
else //Sinon
strins(playername,tag,strlen(playername),sizeof(playername)); // On ajoute le tag a la fin du pseudo
strmid(PlayerTag[playerid],tag,0,strlen(tag),sizeof(PlayerTag[])); //On stocke le tag
SetPlayerName(playerid,playername);//On aplique le pseudo au joueur
return true;
}
RemovePlayerTag(playerid)
{
new playername[MAX_PLAYER_NAME];
if(!strlen(PlayerTag[playerid])) //Si aucun tag na été defini
return false;
GetPlayerName(playerid,playername,sizeof(playername));
new postag = strfind(playername,PlayerTag[playerid]);
if(postag == -1)//Si le tag n'est pas trouvé dans le pseudo (au cas ou le pseudo aurait été modifier ailleur dans le script)
{
strdel(PlayerTag[playerid],0,sizeof(PlayerTag[])); // On vide la variable contenant le tag
return false;
}
strdel(playername,postag,(postag+strlen(PlayerTag[playerid]))); //On retire le tag
strdel(PlayerTag[playerid],0,sizeof(PlayerTag[])); // On vide la variable contenant le tag
SetPlayerName(playerid,playername); //On aplique le pseudo au joueur
return true;
}
#define MAX_SIZE_TAG 10 // Nombre de caractere maximum que peux avoir un tag
new PlayerTag[MAX_PLAYERS][MAX_SIZE_TAG];
strmid(PlayerTag[playerid],"",0,sizeof(PlayerTag[]),sizeof(PlayerTag));
Bon attention l'instalation de c'est fonction nececsite quelque petite chose
En haut de votre script ajouter:Code: (pawn) [Sélectionner]#define MAX_SIZE_TAG 10 // Nombre de caractere maximum que peux avoir un tag
new PlayerTag[MAX_PLAYERS][MAX_SIZE_TAG];
Dans OnPlayerConnect ajouter:Code: (pawn) [Sélectionner]strmid(PlayerTag[playerid],"",0,sizeof(PlayerTag[]),sizeof(PlayerTag));
AddStaticVehicle(411, -2015.9924, -146.3494, 35.0474, 90.3450, 64, 1);
AddVehicle(1, 411, -2015.9924, -146.3494, 35.0474, 90.3450, 64, 1, 0, "coucou");
#define MAX_IDV 700
new Pveh[MAX_IDV];
AddVehicle(IDV,VehId,Float:X,Float:Y,Float:Z,Float:A,Col1,Col2,Int,Plate[])
{
Pveh[IDV] = AddStaticVehicle(VehId,Float:X,Float:Y,Float:Z,Float:A,Col1,Col2);
SetVehicleNumberPlate(Pveh[IDV], Plate);
LinkVehicleToInterior(Pveh[IDV], Int);
SetVehicleToRespawn(Pveh[IDV]);
new string[256];
format(string, sizeof(string),"Vehicule cree(Numero :%d,Id: %d,PosX:%f,PosY: %f,PosZ: %f,Angle %f,Couleur1: %d,Couleur2: %d,Plaque: %s,Interiore: %d);",IDV,VehId,Float:X,Float:Y,Float:Z,Float:A,Col1,Col2,Plate,Int);
printf(string);
}
Vspawn(vehicleid,Int,Plate[])
{
SetVehicleNumberPlate(vehicleid, Plate);
LinkVehicleToInterior(vehicleid, Int);
}
public OnVehicleSpawn(vehicleid)
{
if(vehicleid == Pveh[1])
{
Vspawn(vehicleid,0,"voiture1");
}
if(vehicleid == Pveh[2])
{
Vspawn(vehicleid,0,"voiture2");
}
return 1;
}
IsValidEmail(const email[])
{
new atpos = strfind(email,"@");
if(atpos == -1)
return false;
new pointpos = strfind(email,".",false,atpos);
if(pointpos == -1)
return false;
new str[2][256];
strmid(str[0],email,0,atpos,sizeof(str[]));
strmid(str[1],email,atpos+1,pointpos,sizeof(str[]));
if(!strlen(str[0]) || !strlen(str[1]) || strlen(email[pointpos+1]) < 2)
return false;
return true;
}
KickEx(playerid,raison[])
{
print(raison);
ecrfic(raison);
Kick(playerid);
}
ecrfic(contenue[])
{
new File:Fic;
Fic = fopen ("kicklog.ini", io_readwrite);
fwrite(Fic,contenue);
fclose (Fic);
}
KickEx(giveplayerid,raison);
ecrfic(contenue[])
{
new File:Fic;
Fic = fopen ("kicklog.ini", io_append);
fwrite(Fic, contenue);
fclose (Fic);
}
ecrfic(contenue[])
{
new File:Fic;
Fic = fopen ("kicklog.ini"); // NB : le mode io_readwrite est le mode par défaut il n'est donc pas utile de le mettre
fseek (Fic, 0, seek_end); // Se positionne à la fin du fichier
fwrite(Fic, contenue);
fclose (Fic);
}
forward ScanTimer();
#define AHEAD_OF_CAR_DISTANCE 40.0
#define BEHIND_OF_CAR_DISTANCE 20.0
#define SCAN_RADIUS 20.0
A placer dans le coin fonction du filescript :stock GetXYInfrontOfMe(i,Float:distance, &Float:x, &Float:y)
{
new Float:z, Float:angle, currentveh;
GetPlayerPos(i,x,y,z);
currentveh = GetPlayerVehicleID(i);
GetVehicleZAngle(currentveh, angle);
x += (distance * floatsin(-angle, degrees));
y += (distance * floatcos(-angle, degrees));
}
stock GetXYBehindOfMe(i,Float:distance, &Float:x, &Float:y)
{
new Float:z, Float:angle, currentveh;
GetPlayerPos(i,x,y,z);
currentveh = GetPlayerVehicleID(i);
GetVehicleZAngle(currentveh, angle);
x -= (distance * floatsin(-angle, degrees));
y -= (distance * floatcos(-angle, degrees));
}
public ScanTimer()
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
if(IsPlayerInAnyVehicle(playerid))
{
for(new j=0;j<MAX_PLAYERS;j++)
{
if(IsPlayerStreamedIn(i,j))
{
GetPlayerPos(i, Xs, Ys, Zs);
GetXYInfrontOfMe(i,AHEAD_OF_CAR_DISTANCE,Xs,Ys);
if(IsPlayerInRangeOfPoint(j,40.0,Xs,Ys,Zs))
{
if(avantaffiche != 1)
{
// SendClientMessage(i, COLOR_GREEN, "ya du monde devant");
TextDrawShowForPlayer(i,Textdraw0);
avantaffiche = 1;
}
}
else
{
TextDrawHideForPlayer(i,Textdraw0);
avantaffiche = 0;
}
GetPlayerPos(i, Xs, Ys, Zs);
GetXYBehindOfMe(i,BEHIND_OF_CAR_DISTANCE,Xs,Ys);
if(IsPlayerInRangeOfPoint(j,SCAN_RADIUS,Xs,Ys,Zs))
{
if(derriereaffiche != 1)
{
//SendClientMessage(i, COLOR_GREEN, "ya du monde derriere");
TextDrawShowForPlayer(i,Textdraw2);
derriereaffiche = 1;
}
}
else
{
TextDrawHideForPlayer(i,Textdraw2);
derriereaffiche = 0;
}
}
}
}
}
}
}
SetTimer("ScanTimer",500,1);
Textdraw0 = TextDrawCreate(348.000000,32.000000,"ATTENTION");
Textdraw2 = TextDrawCreate(233.000000,345.000000,"Attention");
TextDrawAlignment(Textdraw0,0);
TextDrawAlignment(Textdraw2,0);
TextDrawBackgroundColor(Textdraw0,0x000000ff);
TextDrawBackgroundColor(Textdraw2,0x000000ff);
TextDrawFont(Textdraw0,1);
TextDrawLetterSize(Textdraw0,0.799999,3.400002);
TextDrawFont(Textdraw2,1);
TextDrawLetterSize(Textdraw2,1.000000,3.400000);
TextDrawColor(Textdraw0,0xff0000ff);
TextDrawColor(Textdraw2,0xff0000ff);
TextDrawSetOutline(Textdraw0,1);
TextDrawSetOutline(Textdraw2,1);
TextDrawSetProportional(Textdraw0,1);
TextDrawSetProportional(Textdraw2,1);
TextDrawSetShadow(Textdraw0,5);
TextDrawSetShadow(Textdraw2,1);
ConnectcarNPC(playerid,"bot1",voiturebot1,47);
Connectped(playerid,"bot2",136);
ConnectcarNPC(playerid,nombot[],nomcar,skinid)
{
if(IsPlayerNPC(playerid))
{
new npcname[MAX_PLAYER_NAME];
GetPlayerName(playerid, npcname, sizeof(npcname));
if(!strcmp(npcname, nombot, true))
{
PutPlayerInVehicle(playerid, nomcar, 0);
SetPlayerColor(playerid,0xFFFFFFAA);
SetPlayerSkin(playerid, skinid);
}
}
}
Connectped(playerid,nombot[],skinid)
{
new npcname[MAX_PLAYER_NAME];
GetPlayerName(playerid, npcname, sizeof(npcname));
if(!strcmp(npcname, nombot, true))
{
SetPlayerSkin(playerid, skinid);
}
}
DropHealth(playerid)
{
new Float:X,Float:Y,Float:Z;
GetPlayerPos(playerid, X, Y, Z);
CreatePickup ( 1240, 19, X, Y, Z );
printf("pickupcree %f %f %f",X,Y,Z);
}
if (killerid != INVALID_PLAYER_ID)
{
DropHealth(playerid);
}
[quote author=cristab link=topic=2149.msg140921#msg140921 date=1253291287]
Je vous presente une fonction pour les vehicules en gros sa sert pas a grand chose mais sa evite d'avoir des centaine de lignes dans la OnGameModeInit
en faite on va passer de ceci
[code]AddStaticVehicle(411, -2015.9924, -146.3494, 35.0474, 90.3450, 64, 1);
AddVehicle(1, 411, -2015.9924, -146.3494, 35.0474, 90.3450, 64, 1, 0, "coucou");
non c'etait pour changer la plaque d'immatriculation :)
new PlayerText3D:playertextid[MAX_PLAYERS];
stock AddTextPlayer3D(playerid,COLOR,text[],Float:Distance)
{
playertextid[playerid] = PlayerText3D:Create3DTextLabel(text, COLOR, 0.0,0.0,0.0, Distance, 0, 0);
Attach3DTextLabelToPlayer(Text3D:playertextid[playerid], playerid, 0.0, 0.0, -0.4);
return 1;
}
stock DeletePlayerText(playerid)
{
Delete3DTextLabel(playertextid[playerid]);
return 1;
}
AddTextPlayer3D(playerid,0xFFFFFFAA,"Mon nom est Mike",40.0);
DeletePlayerText(playerid)
toujour a cause du stream oui :( a mon avis il faut voir de ce coter sa doit etre encore faisable puisque la fonction est toujours presente
sinon pour toi scott je vient de faire ceci vite fait
en haut de ton GMCode: [Sélectionner]new PlayerText3D:playertextid[MAX_PLAYERS];
tout en bas de ton GMCode: [Sélectionner]stock AddTextPlayer3D(playerid,COLOR,text[],Float:Distance)
{
playertextid[playerid] = PlayerText3D:Create3DTextLabel(text, COLOR, 0.0,0.0,0.0, Distance, 0, 0);
Attach3DTextLabelToPlayer(Text3D:playertextid[playerid], playerid, 0.0, 0.0, -0.4);
return 1;
}
stock DeletePlayerText(playerid)
{
Delete3DTextLabel(playertextid[playerid]);
return 1;
}
pour ajouter un text sur un joueur tu as juste a faire ceciCode: [Sélectionner]AddTextPlayer3D(playerid,0xFFFFFFAA,"Mon nom est Mike",40.0);
pour le detruireCode: [Sélectionner]DeletePlayerText(playerid)
Vola en esperant que sa servent :)
#include <a_samp>
new Plate[MAX_VEHICLES][128];
new Locked[MAX_VEHICLES];
new Objective[MAX_VEHICLES];
/*
native SetVehicleNumberPlateEx(vehicleid,numberplate[]);
native SetVehicleParamsForPlayerEx(vehicleid,playerid,objective,doorslocked);
*/
public OnGameModeInit()
{
for(new i = 0;i < MAX_VEHICLES;i++)
{
Plate[i] = "";
Locked[i] = false;
Objective[i] = false;
}
return 1;
}
public OnGameModeExit()
{
return 1;
}
public OnVehicleStreamIn(vehicleid, forplayerid)
{
SetVehicleParamsForPlayer(vehicleid,forplayerid,Objective[vehicleid],Locked[vehicleid]);
if(strlen(Plate[vehicleid]) != 0)
{
SetVehicleNumberPlate(vehicleid,Plate[vehicleid]);
}
return 1;
}
forward SetVehicleNumberPlateEx(vehicleid,numberplate[]);
public SetVehicleNumberPlateEx(vehicleid,numberplate[])
{
SetVehicleNumberPlate(vehicleid,numberplate);
format(Plate[vehicleid],sizeof(Plate),"%s",numberplate);
}
forward SetVehicleParamsForPlayerEx(vehicleid,playerid,objective,doorslocked);
public SetVehicleParamsForPlayerEx(vehicleid,playerid,objective,doorslocked)
{
if(vehicleid > 0 && vehicleid < MAX_VEHICLES +1)
{
SetVehicleParamsForPlayer(vehicleid,playerid,objective,doorslocked);
if(objective){Objective[vehicleid] = true;}else{Objective[vehicleid] = false;}
if(doorslocked){Locked[vehicleid] = true;}else{Locked[vehicleid] = false;}
}
return 0;
}
Quand un joueur rentre dans un véhicule a la place de son nom il aurai "Mon nom est Mike"? S'est super ^^, je n'ai plus qu'a le modifier a ma sauce
Notes:
- SetVehicleNumberplate does not work. This function can't work due to SA's internal coding which only assigns 1 numplate per vehicle model. The function itself will be left in for future use if it can be made to work.
new Text3D: textidbot; //a changer pour chaque bot
public OnPlayerSpawn(playerid)
{
if(IsPlayerNPC(playerid))
{
DeletePlayer3DTextLabel(playerid, textidbot);
SetPlayerColor(playerid,0xFFFFFF00);// le rend invisible sur la map et le nom en blanc ( pour les rp surtout ;) )
new name[256];
new botinfo[256];
GetPlayerName(playerid, name, sizeof(name));
format(botinfo, sizeof(botinfo),"%s(%d)",name,playerid);
textidbot = Create3DTextLabel(botinfo, 0xFFFFFFAA, 0.0,0.0,0.0,40,0,0);
Attach3DTextLabelToPlayer(textidbot, playerid, 0.0, 0.0, 0.3);//attache son nom au dessus de sa tete et en blanc
return 1;
}
}
vehiculedanseau()
{
for(new c; c<MAX_VEHICLES; c++)
{
new Float:cY,Float:cX,Float:cZ;
GetVehiclePos(c, cY,cX,cZ);
if(cZ < 0)
{
SetVehicleHealth(c,0.0);
}
}
return 1;
}
vehiculedanseau();
vehiculedanseau()
{
new Libre;
for(new c; c<MAX_VEHICLES; c++)
{
new Float:cY,Float:cX,Float:cZ;
GetVehiclePos(c, cY,cX,cZ);
if(cZ < 0)
{
Libre = 1;
for (new =0 ; p<MAX_PLAYERS && Libre==1 ; p++)
{
if (IsPlayerConnected (p) && IsPlayerInVehicle (p, c))
{
Libre = 0; // Le véhicule n'est pas libre
}
}
/* Si personne n'est dans le véhicule */
if (Libre == 1)
{
SetVehicleHealth (c,0.0);
}
}
}
return 1;
}
if (strcmp("/respawnallcar", cmdtext) == 0)
{
new Vehicle[MAX_VEHICLES];
for(new i = 1;i < MAX_VEHICLES;i++)
{
for(new b = 0;b < MAX_PLAYERS;b++)
{
if(!IsPlayerInVehicle(b,i))
{
SetVehicleToRespawn(i);
}
}
}
return 1;
}
Code: [Sélectionner]if (strcmp("/respawnallcar", cmdtext) == 0)
{
new Vehicle[MAX_VEHICLES];
for(new i = 1;i < MAX_VEHICLES;i++)
{
for(new b = 0;b < MAX_PLAYERS;b++)
{
if(!IsPlayerInVehicle(b,i))
{
SetVehicleToRespawn(i);
}
}
}
return 1;
}
Voila une commande qui respawn tout les vehicules ou il y a personne dedans je n' est pas tester désolé donc je ne peut pas vous dire si ca fonctionne a merveille ^^
:D
Et puis j'ai remarquer aussi qu'il ne marchais pas du moin pour moi !
DOnc du coup en discutant avec un amis et avec mes talent ( je sait je suis pas super)
J'ai fait un ptit RespawnAuto
en haut
[code]forward IsVehicleOccupied(vehicleid);
forward Respawn(playerid);
SetTimer("Respawn", 30000, 1);
public Respawn(playerid)
{
for(new i=0;i<MAX_VEHICLES;i++)
{
if(IsVehicleOccupied(i) == 0)
{
SetVehicleToRespawn(i) ;
}
}
return 1;
}
public IsVehicleOccupied(vehicleid)
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerInVehicle(i,vehicleid)) return 1;
}
return 0;
}
forward Repair(playerid);
new Autorep[MAX_PLAYERS];
SetTimer("Repair", 10000, 1);
if (strcmp("/autorep", cmdtext, true, 10) == 0)
{
if(Autorep[playerid]==0)
{
Autorep[playerid]=1;
GameTextForPlayer(playerid,"~n~~b~Autorep ~n~~g~Activer !",5000,3);
}
else
{
Autorep[playerid]=0;
GameTextForPlayer(playerid,"~n~~b~Autorep ~n~~r~DesActiver !",5000,3);
}
return 1;
}
public Repair(playerid)
{
if(Autorep[playerid]==1)
{
for (new i=0 ; i<MAX_PLAYERS ; i++)// Pour tout les players en même temps
{
if (IsPlayerConnected (i))
{
if(IsPlayerInAnyVehicle(playerid))// Si le player est dans un vehicule
{
RepairVehicle(GetPlayerVehicleID(i));
}
}
}
}
return 1;
}
[/code]
new VehicleObjective[MAX_PLAYERS][MAX_VEHICLES][2];
public OnVehicleStreamIn(vehicleid,forplayerid)
{
SetVehicleParamsForPlayer(vehicleid,forplayerid,VehicleObjective[forplayerid][vehicleid][0],VehicleObjective[forplayerid][vehicleid][1]);
return 1;
}
stock SetVehicleParamsForPlayerEx(vehicleid, playerid, objective, doorslocked)
{
SetVehicleParamsForPlayer(vehicleid, playerid, objective, doorslocked);
VehicleObjective[playerid][vehicleid][0] = objective;
VehicleObjective[playerid][vehicleid][1] = doorslocked;
return 1;
}
Donc on utiliser la fonction SetVehicleParamsForPlayrerEx de la même manière qu'on utilise SetVehicleParamsForPlayer ;)stock SetVehicleLock(vehicleid,bool:locked,exception = INVALID_PLAYER_ID)
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i) && i != exception)
SetVehicleParamsForPlayerEx(vehicleid,i,VehicleObjective[i][vehicleid][0],locked);
}
return 1;
}
forward OnPlayerFinishEnterVehicle(playerid, vehicleid, seat);
public OnPlayerFinishEnterVehicle(playerid, vehicleid, seat)
{
//Code a executer quand le joueur a FINI d'entrer dans un vehicule
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(oldstate == PLAYER_STATE_ONFOOT && (newstate == PLAYER_STATE_PASSENGER || newstate == PLAYER_STATE_DRIVER)) //Fini d'entrer dans un vehicule en tant que passager ou conducteur
{
OnPlayerFinishEnterVehicle(playerid,GetPlayerVehicleID(playerid),GetPlayerVehicleSeat(playerid));
}
return 1;
}
SapinCreat(Float:sapinx,Float:sapiny,Float:sapinz)
{
CreateObject(656, sapinx, sapiny, Float:sapinz-10, 0.0000, 0.0000, 0.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz-8, 0.0000, 0.0, 72.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz-6, 0.0000, 0.0, 144.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz-4, 0.0000, 0.0, 216.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz-2, 0.0000, 0.0, 288.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz, 0.0000, 00000, 255.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz+2, 0.0000, 0.0000, 0.0000);
printf("sapin cree");
return 1;
}
if(strcmp(cmd,"/sapin",true)==0)
{
new Float:px,Float:py,Float:pz;
GetPlayerPos(playerid,px,py,pz);
SapinCreat(px,py,pz);
SetPlayerPos(playerid,px,py+2,pz+1);
SendClientMessage(playerid,COLOR_ORANGE, "sapin cree");
return 1;
}
CallRemoteFunction("OnPlayerFinishEnterVehicle", "iii", playerid, GetPlayerVehicleID(playerid), GetPlayerVehicleSeat(playerid));
Intéressant la commande au sapin^^Voila le code qui vous permettras de faire une foret de sapin de noel :)lol GG ^^
a venir: la saveCode: [Sélectionner]SapinCreat(Float:sapinx,Float:sapiny,Float:sapinz)
{
CreateObject(656, sapinx, sapiny, Float:sapinz-10, 0.0000, 0.0000, 0.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz-8, 0.0000, 0.0, 72.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz-6, 0.0000, 0.0, 144.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz-4, 0.0000, 0.0, 216.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz-2, 0.0000, 0.0, 288.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz, 0.0000, 00000, 255.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz+2, 0.0000, 0.0000, 0.0000);
printf("sapin cree");
return 1;
}
PS voila la commandeCode: [Sélectionner]if(strcmp(cmd,"/sapin",true)==0)
{
new Float:px,Float:py,Float:pz;
GetPlayerPos(playerid,px,py,pz);
SapinCreat(px,py,pz);
SetPlayerPos(playerid,px,py+2,pz+1);
SendClientMessage(playerid,COLOR_ORANGE, "sapin cree");
return 1;
}
ps si vous conaisser deja la position que vous souhaiter dans le OnGameModeInit ajouter ceci
SapinCreat(Float:sapinx,Float:sapiny,Float:sapinz); avec les positions desirer est le sapin ce creera :)
if(strcmp(cmd,"/vitesse",true)==0)
{
if(!IsPlayerInAnyVehicle(playerid))
{
new Float:Angle5;
new Float:Xx, Float:Yy, Float:Zz;
GetPlayerFacingAngle(playerid, Angle5);
GetPlayerPos(playerid, Xx, Yy, Zz);
new Float:DeltaX = 2 * (-floatsin(Angle5,degrees));
new Float:DeltaY = 2 * floatcos(Angle5,degrees);
SetPlayerVelocity(playerid, DeltaX, DeltaY, 0.1);
return 1;
}
if(IsPlayerInAnyVehicle(playerid))
{
new Float:Angle6;
GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle6);
new Float:DeltaX = 2 * (-floatsin(Angle6,degrees));
new Float:DeltaY = 2 * floatcos(Angle6,degrees);
SetVehicleVelocity(GetPlayerVehicleID(playerid), DeltaX, DeltaY, 0.0);
return 1;
}
}
Hello,
Revenant d'un cours de Maths d'hier, je me suis dit que j'allais utiliser ce que j'ai appris.
Pour cela, j'ai fait une petite commande, qui est pratique, car un peu gonflant d'avoir un SetVehicleVelocity où l'on peut que aller en X ou Y :
Cette commande vous sert à vous donner un bon coup de boost vers l'angle auquel vous êtes orienté.Code: [Sélectionner]if(strcmp(cmd,"/vitesse",true)==0)
{
if(!IsPlayerInAnyVehicle(playerid))
{
new Float:Angle5;
new Float:Xx, Float:Yy, Float:Zz;
GetPlayerFacingAngle(playerid, Angle5);
GetPlayerPos(playerid, Xx, Yy, Zz);
new Float:DeltaX = 2 * (-floatsin(Angle5,degrees));
new Float:DeltaY = 2 * floatcos(Angle5,degrees);
SetPlayerVelocity(playerid, DeltaX, DeltaY, 0.1);
return 1;
}
if(IsPlayerInAnyVehicle(playerid))
{
new Float:Angle6;
GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle6);
new Float:DeltaX = 2 * (-floatsin(Angle6,degrees));
new Float:DeltaY = 2 * floatcos(Angle6,degrees);
SetVehicleVelocity(GetPlayerVehicleID(playerid), DeltaX, DeltaY, 0.0);
return 1;
}
}
En haut de votre GM, vérifiez que vous ayez bien ceci : #include <float>
Intégrez cette commande dans "OnPlayerCommandText".
Je vous laisse profiter ! ;D
if(strcmp(cmd,"/vitesse",true)==0)
{
if(IsPlayerAdmin(playerid)){
if(!IsPlayerInAnyVehicle(playerid))
{
new Float:Angle5;
new Float:Xx, Float:Yy, Float:Zz;
GetPlayerFacingAngle(playerid, Angle5);
GetPlayerPos(playerid, Xx, Yy, Zz);
new Float:DeltaX = 2 * (-floatsin(Angle5,degrees));
new Float:DeltaY = 2 * floatcos(Angle5,degrees);
SetPlayerVelocity(playerid, DeltaX, DeltaY, 0.1);
return 1;
}
if(IsPlayerInAnyVehicle(playerid))
{
new Float:Angle6;
GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle6);
new Float:DeltaX = 2 * (-floatsin(Angle6,degrees));
new Float:DeltaY = 2 * floatcos(Angle6,degrees);
SetVehicleVelocity(GetPlayerVehicleID(playerid), DeltaX, DeltaY, 0.0);
return 1;
}}
}
Code: [Sélectionner]if(strcmp(cmd,"/vitesse",true)==0)
{
if(IsPlayerAdmin(playerid)){
if(!IsPlayerInAnyVehicle(playerid))
{
new Float:Angle5;
new Float:Xx, Float:Yy, Float:Zz;
GetPlayerFacingAngle(playerid, Angle5);
GetPlayerPos(playerid, Xx, Yy, Zz);
new Float:DeltaX = 2 * (-floatsin(Angle5,degrees));
new Float:DeltaY = 2 * floatcos(Angle5,degrees);
SetPlayerVelocity(playerid, DeltaX, DeltaY, 0.1);
return 1;
}
if(IsPlayerInAnyVehicle(playerid))
{
new Float:Angle6;
GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle6);
new Float:DeltaX = 2 * (-floatsin(Angle6,degrees));
new Float:DeltaY = 2 * floatcos(Angle6,degrees);
SetVehicleVelocity(GetPlayerVehicleID(playerid), DeltaX, DeltaY, 0.0);
return 1;
}}
}
for(new id=0;id<300;id++) {
if(id==3 || id==8 || id==42 || id==65 || id==74 || id==86 || id==119 || id==149 || id==208 || id==266 || id==273 || id==289)
{
continue;
}
AddPlayerClass(id,0.0,0.0,0.0,0.0,0,0,0,0,0,0);
}
new BadSkins[16] = {3, 4, 5, 6, 8, 42, 65, 74, 86, 119, 149, 208, 266, 273, 289, -1};
public OnGameModeInit ()
{
...
/* Ajout de tous les persos valides */
for (new i=0, j=0 ; i<300 ; i++)
{
if (i != BadSkins[j])
{
AddPlayerClass (i, 1930.8340, -1394.4470, 13.7947, 151.9744, 0, 0, 0, 0, 0, 0);
}
else
{
/* Mauvais skin suivant */
j++;
}
}
...
}
afin d'aider les personne debutante en PAWN j'ai fais ceci pour trouver votre couleur dont vous avez besoin http://cristab.com/colorpwn.html (http://cristab.com/colorpwn.html)
Cristab ta page est vierge ^^
Y a rien qui apparait lol
Cristab ta page est vierge ^^
Y a rien qui apparait lol
Cristab ta page est vierge ^^
Y a rien qui apparait lol
+1 je le voit plus je regarde sa ...
Cristab ta page est vierge ^^
Y a rien qui apparait lol
+1 je le voit plus je regarde sa ...
Jolie Cristab ^^
Sinon Coco76 pour les skins invalides ça crash le client, mais sous 0.3 normalement ça ne crash pas,ça affiche un message d'erreur et garde le skin que le joueur avait ^^
Sinon je peut vous fournir un samp modifié pour pouvoir faire plus de screen ( 999 initialement je peut allé jusque 999999999 )
Questions :En version 0.3, il n'est plus possible de faire planter le client avec un skin invalide (j'ai essayé).
Sa fait quoi si on met un Skin invalide ?
Old le /rs. ^^
RGB(r,g,b)
{
return (r << 24) | (g << 16) | (b << 8) | (255);
}
RGBA(r,g,b,a)
{
return (r << 24) | (g << 16) | (b << 8) || (a);
}
SendClientMessage(playerid,RGB(255,0,0),"Salut je suis rouge !");
SendClientMessage(playerid,RGB(0,255,0),"Salut je suis Vert !");
SendClientMessage(playerid,RGB(0,0,255),"Salut je suis bleu !");
SendClientMessage(playerid,RGBA(255,0,0,255),"Salut je suis rouge opaque!");
SendClientMessage(playerid,RGBA(0,255,0,128),"Salut je suis Vert semi opaque!");
SendClientMessage(playerid,RGBA(0,0,255,0),"Salut je suis bleu transparant !");
#define RBG(%0,%1,%2) ((%0 << 24)|(%1 << 16)|(%2 << 8)|(255))
#define RBGA(%0,%1,%2,%3) ((%0 << 24)|(%1 << 16)|(%2 << 8)|(%3))
//tant quà y être pour les lumières des véhicules....
#define Lights(%0,%1,%2,%3) ((%0 << 3)|(%1 << 2)|(%2 << 1)|(%3))
Si quelqu'un peut confirmer pour les lumières comme je ne suis pas certains (ps. chaque paramètre = 1 lumière (1 = allumée, 0 = éteinte, autre valeur = bug))CMD:skin(playerid, params[])
CMD:skin(playerid, params[])
{
new skin = 0;
if(sscanf(params, "i", skin))
{
SendClientMessage(playerid, COLOR_WHITE, "Formulation: /skin [skinid]");
}
else
{
SetPlayerSkin(playerid, skin);
}
return 1;
}
public RenameFile(File[],newFile[]);
public RenameFile(File[],newFile[])
{
if(!fexist(File) && fexist(newFile)){return false;}
new File:f = File:0,File:nf = File:0;
f = fopen(File,io_read);
nf = fopen(newFile,io_write);
new str[256] = "";
while(fread(f,str,sizeof(str))
{
fwrite(nf,str);
}
fclose(nf);
fclose(f);
fremove(File);
return true;
}
ffit(filename[], string[], index=0, bool:ignorecase=true)
{
new File:Filefit;
Filefit = fopen(filename, io_read);
if(Filefit)
{
fseek(Filefit, index);
new tmp[256];//peut-être changer la taille si vos fichiers comportent de longues lectures
while(fread(Filefit, tmp))
{
if(strfind(tmp, string, ignorecase) != -1)
{
fclose(Filefit);
return 1;
}
}
fclose(Filefit);
}
return 0;
}
En gros, cette fonction permet de savoir si un bout de texte se retrouve dans un fichierif(ffit("/Users/Sim.ini", "password"))
{
//si le mot password se trouve dans le fichier Sim.ini dans le dossier Users
}
( Je pense que le test est un peu inutile, non ? )
stock PlayerLookPlayer( playerid, lookatid )
{
if( IsPlayerConnected( playerid ) && IsPlayerConnected( lookatid ))
{
new Float:x, Float:y, Float:z,
Float:x1, Float:y1, Float:z1;
GetPlayerPos( playerid, x, y, z );
GetPlayerPos( lookatid, x1, y1, z1 );
SetPlayerFacingAngle( playerid, atan2( y1 - y, x1 - x ) -180 );
}
}
stock DeuxJoueursSeRegarde( playerid, playerid2 ) // Hihi nom de fonction merdique désolé :(
{
if( IsPlayerConnected( playerid ) && IsPlayerConnected( playerid2 ))
{
new Float:x, Float:y, Float:z,
Float:x1, Float:y1, Float:z1;
GetPlayerPos( playerid, x, y, z );
GetPlayerPos( playerid2, x1, y1, z1 );
SetPlayerFacingAngle( playerid, atan2( y1 - y, x1 - x ) -180 );
SetPlayerFacingAngle( playerid2, atan2( y - y1, x - x1 )-180 );
}
}
stock JoueurLePlusProche( playerid )
{
if(!IsPlayerConnected( playerid )){return -1;}
new Playerid = -1;
new Float:Distance = 3000000000000.0; // Distance que je pense être impossbile entre deux joueurs ^^
new Float:x, Float:y, Float:z,
Float:x1, Float:y1, Float:z1;
GetPlayerPos(playerid, x, y, z);
#define DISTANCE(%1,%2,%3,%4,%5,%6) floatsqroot( floatpower(%1 - %4, 2) + floatpower(%2 - %5, 2) + floatpower(%3 - %6, 2))
for(new i = 0; i < GetMaxPlayers(); i++)
{
if(!IsPlayerConnected( i )){continue;}
GetPlayerPos(playerid, x1, y1, z1);
if(DISTANCE(x, y, z, x1, y1, z1) < Distance)
{
Distance = DISTANCE(x, y, z, x1, y1, z1);
Playerid = i;
}
}
return Playerid;
}
Ok merci ^^
Mais pourquoi ne pas mettre un return 1;
stock MoveObjectEx( objectid, Float:x, Float:y, Float:z, Float:Speed, time )
{
SetTimerEx("MoveObject",time,0, "iffff", objectid, x, y, z, Speed );
}
if(strcmp(cmd, "/temps", true) == 0)
{
if (PlayerInfo[playerid][pAdmin] < 1)
{
SendClientMessage(playerid, COLOR_GREY, "Vous n'ête pas autoriser");
return 1;
}
tmp = strtok(cmdtext,idx);
if (!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GREY, "[Usage]: /temps [ID]");
return 1;
}
giveplayerid = ReturnUser(tmp);
if (giveplayerid == INVALID_PLAYER_ID)
{
SendClientMessage(playerid, COLOR_GREY, "Ce joueurs est Hors ligne");
return 1;
}
if (PlayerInfo[giveplayerid][pJailTime] > 0)
{
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
format(string, sizeof(string), "%s: %d Secondes de Jail restant ", giveplayer, PlayerInfo[playerid][pJailTime]-0);
SendClientMessage(playerid, COLOR_INVITER, string);
}
return 1;
}
for(new i = 0; i < GetMaxPlayers(); i++)
{
if(!IsPlayerConnected( i )){continue;}
GetPlayerPos(playerid, x1, y1, z1);
if(DISTANCE(x, y, z, x1, y1, z1) < Distance)
{
Distance = DISTANCE(x, y, z, x1, y1, z1);
Playerid = i;
}
}
Le mien (qui fait la même chose) : for(new i = 0; i < GetMaxPlayers(); i++)
{
if (IsPlayerConnected (i)) // On ne traite que les joueurs connectés
{
GetPlayerPos (playerid, x1, y1, z1);
if (DISTANCE (x, y, z, x1, y1, z1) < Distance)
{
Distance = DISTANCE (x, y, z, x1, y1, z1);
Playerid = i;
}
}
}
stock JoueurLePlusProche( playerid )
{
if(!IsPlayerConnected( playerid )){return -1;}
new PlusProcheJoueur = INVALID_PLAYER_ID;
new Float:Distance = 3000000000000.0; // Distance que je pense être impossible entre deux joueurs ^^
new Float:x, Float:y, Float:z, Float:x1, Float:y1, Float:z1, Float:D;
GetPlayerPos(playerid, x, y, z);
for(new i = 0; i < GetMaxPlayers (); i++)
{
if (IsPlayerConnected (i) && i != playerid) // Il ne faut pas faire le test pour le joueur lui-même
{
GetPlayerPos (i, x1, y1, z1);
D=(x-x1)*(x-x1)+(y-y1)*(y-y1)+(z-z1)*(z-z1);
if(D < Distance*Distance)
{
Distance = floatsqroot (D);
PlusProcheJoueur = i;
}
}
}
return PlusProcheJoueur;
}
NB : Les crédits restent à sazuke car c'est lui qui a eu l'idée de cette fonction, ce qui est certainement la chose le plus difficile en programmation (avoir des idées).
NB : Les crédits restent à sazuke car c'est lui qui a eu l'idée de cette fonction, ce qui est certainement la chose le plus difficile en programmation (avoir des idées).
Code: [Sélectionner] CarInfo[Voit][vendu]= dini_Int(CarAccount(Voit), "vendu"); |
stock JoueurLePlusProche( playerid )
{
if(!IsPlayerConnected( playerid )){return INVALID_PLAYER_ID;}
new PlusProcheJoueur = INVALID_PLAYER_ID;
new Float:Distance = 3000000000000.0; // Distance que je pense être impossible entre deux joueurs ^^
new Float:x, Float:y, Float:z, Float:x1, Float:y1, Float:z1, Float:D;
GetPlayerPos(playerid, x, y, z);
for(new i = 0; i < GetMaxPlayers (); i++)
{
if (IsPlayerConnected (i) && i != playerid) // Il ne faut pas faire le test pour le joueur lui-même
{
GetPlayerPos (i, x1, y1, z1);
D=(x-x1)*(x-x1)+(y-y1)*(y-y1)+(z-z1)*(z-z1);
if(D < Distance*Distance)
{
Distance = floatsqroot (D);
PlusProcheJoueur = i;
}
}
}
return PlusProcheJoueur;
}
if(strcmp(cmdtext, "/pos", true) == 0)
{
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /pos [commentaire]");
return 1;
}
if (IsPlayerAdmin(playerid))
{
new Float:px, Float:py, Float:pz;
new Float:angle;
if(IsPlayerInAnyVehicle(playerid)) { GetVehicleZAngle(GetPlayerVehicleID(playerid), angle); }
else { GetPlayerFacingAngle(playerid, angle); }
GetPlayerPos(playerid, px, py, pz);
SendClientMessage(playerid, COLOR_YELLOW, "Position sauvegardée");
new coordsstring[256];
format(coordsstring, 256, "%.4f,%.4f,%.4f,%.4f // %s\n", px, py, pz,angle,result);
new File:hFile;
hFile = fopen("Position.txt", io_append);
fwrite(hFile, coordsstring);
fclose(hFile);
}
printf("INVALID_PLAYER_ID %d\n", INVALID_PLAYER_ID );
Ah ok, mais moi je partais du principe que si y a une erreur on retourne la même valeur ^^On fait comme on veut en fait.
Cette commande équivaut au /save mais plus facile.
Il faut être connecté à la RCON, on fait /pos commentaire IG et ça nous ouvre un fichier positon txt ça nous ecris la position, l'angle, on peux directement copier coller les coordonnée.
Salut j'aimerai savoir où est-ce que le fichier est créer ? Et si c'est dans le fichier de GTA , peut-on changer le chemin ?
Merci ,
Beno++
[]
new KillerNom[MAX_PLAYER_NAME];
new KilledNom[MAX_PLAYER_NAME];
GetPlayerName(playerid,KilledNom,sizeof(KilledNom));
GetPlayerName(killerid,KillerNom,sizeof(KillerNom));
new message[158];
format(message,sizeof(message),"%s a tué %s ( Avec l'arme : %s )",KillerNom,KilledNom,NomArme[reason]);
SendClientMessageToAll(0xFF2F2489,message);
#define DIALOG_CMDS (2345)//changer pour n'avoir aucun conflit de dialog
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_CMD)
{
if(response)
{
if(inputtext[0] == '/')
{
CallRemoteFunction("OnPlayerCommandText", "is", playerid, inputtext);
}
}
}
return 1;
}
CMD:cmds(playerid, params[])
{
ShowPlayerDialog(playerid, DIALOG_CMD, DIALOG_STYLE_LIST, "Commands", "/menu\n/dance\n/handsup\n/sit\n/cell\n/beer\n/smoke\n/wine\n/sprunk\n/cmd2", "Ok", "Cancel");
return 1;
}
NB. j'utilise zcmd dans cet exemple, mais le système est compatible avec tous les systèmes de commandes.#define CARACTERE_DE_SEPARATION " "
#define DIALOG_CMDS (2345)//changer pour n'avoir aucun conflit de dialog
public OnDialogResponse()
{
new idx = 0;
if(dialogid == DIALOG_CMDS)
{
if(response)
{
if(inputtext[0] == '/')
{
idx = strfind(inputtext, CARACTERE_DE_SEPARATION);//cherche le caractère de séparation et permet de couper si description il y a
if(idx != -1)//found the char
{
inputtext[idx] = '\0';//on retire la partie de description
}
CallRemoteFunction("OnPlayerCommandText", "is", playerid, inputtext);
}
}
}
return 1;
}
CMD:cmds(playerid, params[])
{
ShowPlayerDialog(playerid, DIALOG_CMD, DIALOG_STYLE_LIST, "Commands", "/menu Menu des options joueurs\n/dance Pour dancer!\n/handsup Pour lever les mains\n/sit Pour s'asseoir\n/cell Pour utiliser le cellulaire\n/beer Pour boire de la bière\n/smoke Pour fumer(pas recommandé)\n/wine Pour boire du vin\n/sprunk Pour boire une boisson gazeuse\n/cmd2 La suite des commandes", "Ok", "Cancel");
return 1;
}
PS. je n'ai pas testé cette version mais elle devrait fonctionner normalement...Syg m'avait fait remarqué en message privé durant une discussion que lors de l'utilisation d'une boîte de dialogue de type "LIST", le texte envoyé (inputtext) était le contenu de la ligne qui avait été sélectionnée.
Syg m'avait fait remarqué en message privé durant une discussion que lors de l'utilisation d'une boîte de dialogue de type "LIST", le texte envoyé (inputtext) était le contenu de la ligne qui avait été sélectionnée.Je confirme, j'utilise ceci dans le script de Lalu's Stunt (notamment dans la commande /vlist en grande partie faite par Gzsume).
C'est de toi Dizzy?:lmfao
ou http://wiki.sa-mp.com/wiki/ColorFix (http://wiki.sa-mp.com/wiki/ColorFix) ?
Float:MyCos(Float:angle, termes, rad_ou_degre = 0)
{
new t1 = GetTickCount();
new Float:val = 0.0;
termes *= 2;//ainsi, avec 1 terme, on calcul à 1 - x²/2, 2 terme: 1 - x²/2 + x^4/6
if(rad_ou_degre)angle *= (3.1415926535/180);
for(new i = 0; i <= termes; i+=2)
{
val += (floatpower(angle, i)/Factorielle(i) * floatpower((-1), i/2));
}
new t2 = GetTickCount();
printf("execution time: %dms", t2-t1);
return val;
}
Float:MySin(Float:angle, termes, rad_ou_degre = 0)
{
new t1 = GetTickCount();
new Float:val = 0.0;
termes = termes * 2 - 1;//ainsi, avec 1 terme, on calcul à x, 2 terme: x - x³/6
if(rad_ou_degre)angle *= (3.1415926535/180);
for(new i = 1; i <= termes; i+=2)
{
val += (floatpower(angle, i)/Factorielle(i) * floatpower((-1), (i-1)/2));
}
new t2 = GetTickCount();
printf("execution time: %dms", t2-t1);
return val;
}
Factorielle(x)
{
new val = 1;
for(new i = 2; i <= x; i++)
{
val *= i;
}
printf("%d! = %d", x, val);
return val;
}
Faut dire que je l'ai principalement fait car en Calcul Avancé on a fait une petite révision des séries de Taylor. Je voulais les faire avec la possibilité de choisir la précision de l'approximation (avec le nombre de termes).stock CreerPickup(Id,Mode,Float:x,Float:y,Float:z,text[],Color,Float:Distance)
{
AddStaticPickup(Id, Mode, x,y,z);
Create3DTextLabel(text,Color, x,y,z+1,Distance,0);
}
stock IsAnUsedVehicle(vehid)
{
for(new player=0; player<MAX_PLAYERS; player++)
{
if(IsPlayerInAnyVehicle(player))
{
if(GetPlayerVehicleID(player) == vehid)
{
return 1;
}
}
}
return 0;
}
Voici 2 petites fonctions qui pourrons peut-être aidé quelqu'unCode: (pawn) [Sélectionner]stock CreerPickup(Id,Mode,Float:x,Float:y,Float:z,text[],Color,Float:Distance)
{
AddStaticPickup(Id, Mode, x,y,z);
Create3DTextLabel(text,Color, x,y,z+1,Distance,0);
}
stock IsAnUsedVehicle(vehid)
{
for(new player=0; player<MAX_PLAYERS; player++)
{
if(IsPlayerInAnyVehicle(player))
{
if(GetPlayerVehicleID(player) == vehid)
{
return 1;
}
}
}
return 0;
}
stock IsAnUsedVehicle(vehid)
{
for(new player=0; player<MAX_PLAYERS; player++)
{
if (IsPlayerInVehicle (player, vehid))
{
return 1;
}
}
return 0;
}
FuckPlayer(nom[30], sanction[5])
{
new name[MAX_PLAYERS][128];
for( new i = 0; i<MAX_PLAYERS; i++)
{
GetPlayerName(i,name[i],sizeof(name));
if(strfind(name[i],nom))
{
if(strcmp(sanction, "kick") == 0) return Kick(i);
else if(strcmp(sanction, "ban") == 0) return Ban(i);
else return 0;
}
}
return 1;
}
public OnPlayerConnect(playerid)
{
FuckPlayer("turlututu","kick"); // Si le joueur qui se connecte a un pseudo contenant "turlututu", il sera kick.
return 1;
}
FuckPlayer( playerid, nom[], sanction[] )
{
new name[MAX_PLAYER_NAME] = "";
GetPlayerName( playerid, name, sizeof(name) );
if( strfind( name, nom ) )
{
if(strcmp(sanction, "kick") == 0) return Kick(playerid);
else if(strcmp(sanction, "ban") == 0) return Ban(playerid);
else return 0;
}
return 1;
}
Code: (pawno) [Sélectionner]public OnPlayerConnect(playerid)
{
FuckPlayer(playerid,"zizi","kick");
return 1;
}Code: (console) [Sélectionner]Incoming connection: 127.0.0.1:64828
[join] zizi_fou has joined the server (0:127.0.0.1)
[part] zizi_fou has left the server (0:2)
#define SANCTION_KICK 0x00000001 // Kicker le joueur
#define SANCTION_BAN 0x00000010 // Bannir le joueur
#define SANCTION_BJR 0x00000100 // Dire bonjour au joueur
FuckPlayer( playerid, nom[], sanction )
{
new name[MAX_PLAYER_NAME] = "";
GetPlayerName( playerid, name, sizeof(name) );
if( strfind( name, nom ) )
{
if( sanction & SANCTION_BJR )
SendClientMessage( playerid, 0xFFFFFFFF, "Bonjour !" );
if( sanction & SANCTION_KICK )
Kick( playerid );
if( sanction & SANCTION_BAN )
BaBan( playerid );
}
return 1;
}
FuckPlayer( playerid, "AFK", SANCTION_KICK );
FuckPlayer( playerid, "Salut", SANCTION_BJR );
FuckPlayer( playerid, "Cheat", SANCTION_BJR + SANCTION_KICK );
CSAMPUserData
NextServer()
CSAMPUserDataWriter* Userdata = new CSAMPUserDataWriter( 47 ); // Ici je met le 47 pour dire que je vais créer 47 serveurs
for( int i = 0; i < 47; i++ ) // Ici une boucle pour les 47 serveurs
{
Userdata->SetServerHost( i, "127.0.0.1" ); // ici je leurs met comme IP 127.0.0.1
Userdata->SetServerName( i, "yooooh" ); // Je leurs donne comme nom yooooh
Userdata->SetServerport( i, 7777 + i ); // et la le port 7777 + la valeur de i
}
Userdata->WriteFile( "C:\\Users\\Sasuke78200\\Documents\\GTA San Andreas User Files\\SAMP\\USERDATA.DAT" ); // Ensuite je dit d'écrire les serveurs dans le fichier USERDATA.DAT, et si on ouvre SAMP, on verra 47 serveurs nommé yooooh
new pseudo[ MAX_PLAYER_NAME ] = ""; // Et il ne faut pas oublier d'initialiser ^^
#include <a_samp>
forward AddAllPlayerClass(Float:X, Float:Y, Float:Z, Float:Angle);
public AddAllPlayerClass(Float:X, Float:Y, Float:Z, Float:Angle)
{
new BadSkin[16] = {3, 4, 5, 6, 8, 42, 53, 65, 74, 86, 91, 119, 149, 208, 273, 289};
for(new i = 0; i <= 299; i++)
{
if (i == BadSkin[0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 15])
{}
else
{
AddPlayerClass(i, Float:X, Float:Y, Float:Z, Float:Angle, 0, 0, 0, 0, 0, 0);
}
}
}
Page introuvable pour le lien de Cristab.
J'ai également était surprit du fonctionnement de ce code mais ça marche :P.
0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 15
Sort une valeur, donc ton code est validé par pawno, par contre si tu utilise la fonction, il ne testera que l'un des skins en question, il suffit de tester avec des printf:main()
{
printf("Valeur: %i", 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 15);
new BadSkin[16] = {3, 4, 5, 6, 8, 42, 53, 65, 74, 86, 91, 119, 149, 208, 273, 289};
for(new i = 0; i < sizeof(BadSkin); i++)
{
if (BadSkin[i] == BadSkin[0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 15])
{
printf("Skin %d : invalide!", BadSkin[i]);
}
else
{
printf("Skin %d : valide!", BadSkin[i]);
}
}
}
[09:27:08] Valeur: 1
[09:27:08] Skin 3 : valide!
[09:27:08] Skin 4 : invalide!
[09:27:08] Skin 5 : valide!
[09:27:08] Skin 6 : valide!
[09:27:08] Skin 8 : valide!
[09:27:08] Skin 42 : valide!
[09:27:08] Skin 53 : valide!
[09:27:08] Skin 65 : valide!
[09:27:08] Skin 74 : valide!
[09:27:08] Skin 86 : valide!
[09:27:08] Skin 91 : valide!
[09:27:08] Skin 119 : valide!
[09:27:08] Skin 149 : valide!
[09:27:08] Skin 208 : valide!
[09:27:08] Skin 273 : valide!
[09:27:08] Skin 289 : valide!
TextMinInMaj(Text[])
{
for(new i = 0; i < strlen(Text); i++)
{
if(Text[i] >= 'a' && Text[i] <= 'z')
{
Text[i] -= 'a' - 'A';
}
}
}
Qui à dit qu'il est interdit de modifier la valeur d'un tableau ? Sinon ça ne servirai plus à rien d'avoir des variables :p
EDIT: voila pour mettre un miniscule en majusculeCode: [Sélectionner]
TextMinInMaj(Text[])
{
for(new i = 0; i < strlen(Text); i++)
{
if(Text[i] >= 'a' && Text[i] <= 'z')
{
Text[i] -= 'a' - 'A';
}
}
}
TextMinInMaj (Text[])
{
for(new i = 0; i < strlen(Text); i++)
{
if(Text[i] >= 'a' && Text[i] <= 'z')
{
Text[i] -= 'a' - 'A';
}
else
{
switch (Text[i])
{
case 'à', 'â' :
{
Text[i] = 'A';
}
case 'é', 'è', 'ê':
{
Text[i] = 'E';
}
case 'î' :
{
Text[i] = 'I';
}
case 'ô' :
{
Text[i] = 'O';
}
case 'ù', 'û' :
{
Text[i] = 'U';
}
case 'ç' :
{
Text[i] = 'C';
}
}
}
}
return Text;
}
Code: [Sélectionner] #define MP 10 //ici mettre le nombre de slot de votre serveur samp |
Code: [Sélectionner] main() |
----------
Loaded log file: "server_log.txt".
----------
SA-MP Dedicated Server
----------------------
v0.3c RC2, (C)2005-2010 SA-MP Team
[20:48:29]
[20:48:29] Server Plugins
[20:48:29] --------------
[20:48:29] Loaded 0 plugins.
[20:48:29]
[20:48:29] Ban list
[20:48:29] --------
[20:48:29] Loaded: samp.ban
[20:48:29]
[20:48:29]
[20:48:29] Filter Scripts
[20:48:29] ---------------
[20:48:29] Loading filter script 'gl_realtime.amx'...
[20:48:29] Loading filter script 'Cadmin.amx'...
[20:48:29]
--------------------------------------
[20:48:29] Cadmin [FS]by Cristab
[20:48:29] --------------------------------------
[20:48:29] Loading filter script 'fsdebug.amx'...
[20:48:29]
*********************
* SA:MP DEBUG 0.2 *
[20:48:29] * By Simon Campbell *
*********************
[20:48:29] * Version: 0.5c *
*********************
[20:48:29] * -- LOADED *
*********************
[20:48:29] Loaded 3 filter scripts.
[20:48:29] Attention la define MP a etait mal renseigner define MP 10 nombre de slot serveur 50
[20:48:29]
----------------------------------
[20:48:29] +++++++++++++++++++
[20:48:29] ----------------------------------
[20:48:29] Number of vehicle models: 0
[20:48:29] --- Server Shutting Down.
[20:48:29]
*********************
* SA:MP DEBUG 0.2 *
[20:48:29] * -- SHUTDOWN *
#undef MAX_PLAYERS
#define MAX_PLAYERS 100
...
public On(FilterScript/GameMode)Init()
{
if(MAX_PLAYER < GetMaxPlayers())
{
printf("Attention la define SLOTS est trop basse, erreur critique. (define: %d nombre de slot serveur: %d)",MAX_PLAYERS,GetMaxPlayers());
SendRconCommand("exit");
}
...
return 1;
}
...
Je ne vois pas trop pourquoi vous vous prenez la tête...Comme GetMaxPlayers() est une fonction, elle est appelé en cours d'exécution du serveur. bref, on ne peut s'en servir pour les tailles de variables et c'est un peu plus lent (par exemple avec une boucle).Code: (pawn) [Sélectionner]#undef MAX_PLAYERS
#define MAX_PLAYERS GetMaxPlayers()
Ne serait-il pas plus simple ?
(Je n'ai pas de compilateur sous la main pour vérifier et ça fait pas mal de temps que j'ai pas touché au Pawn, donc il se pourrait que je me trompe).
Bah dans ce cas pourquoi ne pas placer mes deux lignes dans la callback OnGameModeInit ?
IsValidVehicle( vehicleid )
native IsValidVehicle( vehicleid );
dans votre script
public OnPlayerDeath(playerid, killerid, reason)
{
SendClientMessage(killerid,COLOR_YELLOW, "Tu la tuer 1 point + 1000 $ GG !!");
GivePlayerMoney(killerid,1000);
SetPlayerScore(killerid,GetPlayerScore(killerid)+1);
SendClientMessage(playerid,COLOR_BLACK, "Tes mort tu à perdu 500 $ xD");
GivePlayerMoney(playerid,-500);
if(killerid == INVALID_PLAYER_ID)
{
SendDeathMessage(INVALID_PLAYER_ID,playerid,reason);
}
else
{
SendDeathMessage(killerid,playerid,reason);
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
if(killerid != INVALID_PLAYER_ID)
{
SendClientMessage(killerid,COLOR_YELLOW, "Tu la tuer 1 point + 1000 $ GG !!");
GivePlayerMoney(killerid,1000);
SetPlayerScore(killerid,GetPlayerScore(killerid)+1);
SendClientMessage(playerid,COLOR_BLACK, "Tes mort tu à perdu 500 $ xD");
GivePlayerMoney(playerid,-500);
SendDeathMessage(killerid, playerid, reason);
}
return 1;
}
if(IsPlayerConnected(playerid) && IsPlayerConnected(killerid))
{
SendClientMessage(killerid, 0xFFFFFFFF, "Tu as tué une personne: +1 point & +1000$");
GivePlayerMoney(killerid, 1000);
SetPlayerScore(killerid, (GetPlayerScore(killerid) + 1));
SendClientMessage(playerid, 0xFFFFFFFF, "Tu as été tué: -1 point & -500$");
GivePlayerMoney(playerid, -500);
SetPlayerScore(killerid, (GetPlayerScore(killerid) - 1));
}
Code fait rapidement sur le forum.public OnPlayerDeath(playerid, killerid, reason)
{
SendDeathMessage(killerid, playerid, reason);
if(killerid != INVALID_PLAYER_ID)
{
GivePlayerMoney(killerid, 1000);
SetPlayerScore(killerid, GetPlayerScore(killerid)+1);
}
GivePlayerMoney(playerid, -500);
return 1;
}
forward GetVehicleDriverPlayerID(vehicleid);
public GetVehicleDriverPlayerID(vehicleid)
{
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerInVehicle(i, vehicleid) && GetPlayerState(i) == PLAYER_STATE_DRIVER) return i;
}
return INVALID_PLAYER_ID;
}
// A placer tout en haut du FS/GM
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_RED 0xFF0606FF
// A placer en haut de OnPlayerCommandText
new cmd[256],tmp[256];
new playername[MAX_PLAYER_NAME];
cmd = strtok(cmdtext, idx);
// A placer dans OnPlayerCommandText
if(strcmp(cmd, "/plaque", true) == 0)
{
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,COLOR_RED,"ERREUR: Vous n'êtes pas dans un véhicule.");
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid,COLOR_RED,"ERREUR: Vous devez écrire : /plaque 1 - 9");
}
else
{
new Float:vx, Float:vy, Float:vz, Float:va;
new veh = GetPlayerVehicleID(playerid);
new CarColor[MAX_PLAYERS];
new SelectColor = strval(tmp);
new retour[256];
if(SelectColor == 1)
{
CarColor = "{38FF06}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque {38FF06}verte {FFFF00}sur votre véhicule.");
}
else if(SelectColor == 2)
{
CarColor = "{FF66FF}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque {FF66FF}rose {FFFF00}sur votre véhicule.");
}
else if(SelectColor == 3)
{
CarColor = "{FF9900}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque {FF9900}orange {FFFF00}sur votre véhicule.");
}
else if(SelectColor == 4)
{
CarColor = "{FF0606}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque {FF0606}rouge {FFFF00}sur votre véhicule.");
}
else if(SelectColor == 5)
{
CarColor = "{FFFF00}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque jaune sur votre véhicule.");
}
else if(SelectColor == 6)
{
CarColor = "{0000BB}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque {0000BB}bleue {FFFF00}sur votre véhicule.");
}
else if(SelectColor == 7)
{
CarColor = "{FFFFFF}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque {FFFFFF}blanche {FFFF00}sur votre véhicule.");
}
else if(SelectColor == 8)
{
CarColor = "{330066}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque {330066}violette {FFFF00}sur votre véhicule.");
}
else if(SelectColor == 9)
{
CarColor = "{000000}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque {000000}noire {FFFF00}sur votre véhicule.");
}
else
{
SendClientMessage(playerid,COLOR_RED,"ERREUR: Vous devez choisir un chiffre de 1 à 9 (/plaque 1 - 9)");
}
GetVehiclePos(veh, vx, vy, vz);
GetVehicleZAngle(veh,va);
GetPlayerName(playerid, playername, sizeof(playername));
format(retour, sizeof(retour), "%s%s",CarColor,playername);
SetVehicleNumberPlate(veh,retour);
SetVehicleToRespawn(veh);
SetVehiclePos(veh, vx, vy, vz);
SetVehicleZAngle(veh, va);
PutPlayerInVehicle(playerid, veh, 0);
}
return 1;
}
// By Metra-Concept.fr (jonjon) for Gtaonline
SendFormattedText(option1,couleur,text[],option2)
{
new string[128];
format(string,sizeof(string),text,option2);
SendClientMessage(option1,couleur,string);
}
a=1;
b=2;
SendFormattedText(playerid,0xFFFFFFAA,"%d + %d = %d",a,b,a+b);
Bonjour je vous presente une petite fonction qui devrais vous aider pas trop mal ^^Code: [Sélectionner]SendFormattedText(option1,couleur,text[],option2)
{
new string[128];
format(string,sizeof(string),text,option2);
SendClientMessage(option1,couleur,string);
}
option1 = playerid ou autre
couleur = pas besoin de dire ce que c'est
text = le text a formater
option2 = le reste que vous mettez dans votre format
exempleCode: [Sélectionner]a=1;
b=2;
SendFormattedText(playerid,0xFFFFFFAA,"%d + %d = %d",a,b,a+b);
new initialname[MAX_PLAYERS][MAX_PLAYER_NAME];
new playerfinal[32];//32 pris au hazard mais sa ne bug pas avec plus il y a des chance que sa bug
SetInitialname(playerid)
{
SetPlayerName(playerid,initialname[playerid]);
}
SetBeforName(tag[],playerid)
{
format(playerfinal, 32, "%s%s",tag, initialname[playerid]);
SetPlayerName(playerid, playerfinal);
}
SetAfterName(tag[],playerid)
{
format(playerfinal, 32, "%s%s", initialname[playerid],tag);
SetPlayerName(playerid, playerfinal);
}
GetPlayerName(playerid, initialname[playerid], MAX_PLAYER_NAME);
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/reset", cmdtext, true) == 0)
{
SetInitialname(playerid);
return 1;
}
if (strcmp("/after", cmdtext, true) == 0)
{
SetAfterName("[dm1]",playerid);
return 1;
}
if (strcmp("/befor", cmdtext, true) == 0)
{
SetBeforName("[dm1]",playerid);
return 1;
}
return 0;
}
stock Encode(mot[])
{
new Long=strlen(mot);
new passe1 = 0;
new passe2 = 1;
new passe3 = -1;
for (new n=0; n<Long; n++)
{
passe1 = (passe1 + (mot[n]*99887766/8));
passe2 = (passe2 / (passe1*99887766)/15);
passe3 = (passe3+(passe2 - passe1))*Long;
}
new encrypt;
encrypt = (((passe2*52) + (passe3*3))*(passe1*Long))*(Long*passe3)*526;
new tmp[256];
new s[128];
format(s, sizeof(s), "%d", encrypt);
set(tmp,s);
tmp=strreplace("1","=",tmp);
tmp=strreplace("2","!",tmp);
tmp=strreplace("3",";",tmp);
tmp=strreplace("4","@",tmp);
tmp=strreplace("5","#",tmp);
tmp=strreplace("6","+",tmp);
tmp=strreplace("7","*",tmp);
tmp=strreplace("8","'",tmp);
tmp=strreplace("9",".",tmp);
tmp=strreplace("0","°",tmp);
tmp=strreplace("-","§",tmp);
return tmp;
}
printf("%s",Encode("soleil"));
§=.++@°@!!@
enum
{
X_MONEY_ADD,
X_MONEY_DELETE,
X_MONEY_SET
}
stock xMoneyAction(action, amount, playerid)
{
if(action == X_MONEY_ADD)
{
GivePlayerMoney(playerid, amount);
}
else if(action == X_MONEY_DELETE)
{
new tmp = 0;
tmp = GetPlayerMoney(playerid);
if((tmp - amount) > 0)
{
GivePlayerMoney(playerid, -amount);
}
else
{
return 0;
}
}
else if(action == X_MONEY_SET)
{
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, amount);
}
return 1;
}
xMoneyAction(X_MONEY_ADD, 100, 1); // Ajoute 100$ au joueur qui possède l'ID numéro 1
xMoneyAction(X_MONEY_DELETE, 100, 1); // Retire 100$ au joueur (si possible (non négatif)) qui possède l'ID numéro 1 sinon retourne 0 (erreur)
xMoneyAction(X_MONEY_SET, 100, 1); // Met l'argent du joueur à 100$ au joueur qui possède l'ID numéro 1
enum
{
X_MONEY_ADD,
X_MONEY_DELETE,
X_MONEY_SET
}
:ninjaCode: [Sélectionner]enum
:ninja
{
X_MONEY_ADD,
X_MONEY_DELETE,
X_MONEY_SET
}
Je pense que tu dois plutôt appliquer des defines .
new CMajusules[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
stock IsPlayerHasValidName(playerid)//By Eloctro
{
new cName[MAX_PLAYER_NAME],CharS=-1;
GetPlayerName(playerid, cName, MAX_PLAYER_NAME);
if(strfind(cName, "_", true) == -1) return false;
else {
for(new i; i <= strlen(cName); i++) {
if(cName[i] != '_') {
if (cName[i] <= '9' && cName[i] >= '0') return false;
if(i != 0 && i != CharS) for(new c; c < sizeof(CMajusules); c++) { if(cName[i] == CMajusules[c]) return false; }
else if(i==0) {
for(new c; c < sizeof(CMajusules); c++){ if(cName[0] == CMajusules[c]) CharS=-2; }
if(CharS!=-2) return false; } }
else CharS=i+1; } }
for(new c; c < sizeof(CMajusules); c++) if(cName[CharS] == CMajusules[c]) return true;
return false;
}
public OnPlayerConnect(playerid)
{
if(!IsPlayerHasValidName(playerid)) Kick(playerid);
}
Concernant ta fonction IsNumeric, je ne comprend pas pourquoi effectuer une boucle.
new gPlayerVehicles[MAX_PLAYERS];
new IsInDM[MAX_PLAYERS];
new initialname[MAX_PLAYERS][62];
new playerfinal[62];
////////////////////////////////////////////////////////////////////////////////
new Float:derby[7][4] =
{
{-1425.9888,957.4713,1027.6860,357.3053},
{-1478.7693,986.7899,1028.3901,280.7596},
{-1443.5608,1033.8302,1029.8827,193.7936},
{-1402.1676,1037.2571,1029.9587,179.2527},
{-1351.8804,1028.6732,1028.3414,162.3887},
{-1323.4956,979.3501,1027.8088,61.0256},
{-1361.0549,959.4532,1027.4058,25.7441}
};
////////////////////////////////////////////////////////////////////////////////
public OnPlayerSpawn(playerid)
{
if (IsInDM[playerid] != 0)
{
switch(IsInDM[playerid])
{
case 1:
{
new rand = random(sizeof(derby));
gPlayerVehicles[playerid] = CreateVehicle(503,derby[rand][0],derby[rand][1],derby[rand][2],derby[rand][3],-1,-1,900);
SetVehicleVirtualWorld(gPlayerVehicles[playerid], 15);
LinkVehicleToInterior(gPlayerVehicles[playerid], 15);
SetPlayerVirtualWorld(playerid,15);
SetPlayerInterior(playerid,15);
PutPlayerInVehicle(playerid,gPlayerVehicles[playerid],0);
SetVehicleHealth(gPlayerVehicles[playerid],1000.0);
SetVehicleParamsForPlayer(gPlayerVehicles[playerid],playerid,0,1);
}
}
}
return 1;
}
////////////////////////////////////////////////////////////////////////////////
public OnPlayerDisconnect(playerid, reason)
{
SendDeathMessage(INVALID_PLAYER_ID, playerid, 201);
if(IsInDM[playerid] != 0)
{
RemovePlayerFromVehicle(gPlayerVehicles[playerid]);
DestroyVehicle(gPlayerVehicles[playerid]);
gPlayerVehicles[playerid] = 0;
}
return 1;
}
////////////////////////////////////////////////////////////////////////////////
public OnPlayerDeath(playerid, killerid, reason)
{
RemovePlayerFromVehicle(gPlayerVehicles[playerid]);
DestroyVehicle(gPlayerVehicles[playerid]);
gPlayerVehicles[playerid] = 0;
return 1;
}
////////////////////////////////////////////////////////////////////////////////
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp("/derby", cmdtext, true) == 0)
{
if(IsInDM[playerid] !=0)
{
SendClientMessage(playerid, 0xFFFFFF, "Vous êtes déjà dans un DM !");
return 1;
}
new rand = random(sizeof(derby));
gPlayerVehicles[playerid] = CreateVehicle(503,derby[rand][0],derby[rand][1],derby[rand][2],derby[rand][3],-1,-1,900);
SetVehicleVirtualWorld(gPlayerVehicles[playerid], 15);
LinkVehicleToInterior(gPlayerVehicles[playerid], 15);
SetPlayerVirtualWorld(playerid,15);
SetPlayerInterior(playerid,15);
PutPlayerInVehicle(playerid,gPlayerVehicles[playerid],0);
SetVehicleHealth(gPlayerVehicles[playerid],1000.0);
SetVehicleParamsForPlayer(gPlayerVehicles[playerid],playerid,0,1);
IsInDM[playerid] = 2;
format(playerfinal, 62, "[derby]%s", initialname[playerid]);
SetPlayerName(playerid, playerfinal);
new Name[MAX_PLAYER_NAME],phrase[240];
GetPlayerName(playerid,Name,sizeof(Name));
format(phrase,sizeof(phrase),"%s est au derby {0000FF}(/derby).",Name);
SendClientMessage(playerid, couleur_bleu, "Pour quitter le deathmatch ==>{FFFF00} /dmq");
SendClientMessageToAll(couleur_orange,phrase);
return 1;
}
////////////////////////////////////////////////////////////////////////////////
if(strcmp("/dmq", cmdtext, true) == 0)
{
if(IsInDM[playerid] == 0)
{
SendClientMessage(playerid, 0xFFFFFF, "Vous n'êtes pas dans un DM !");
return 1;
}
if(IsInDM[playerid] != 0)
{
RemovePlayerFromVehicle(gPlayerVehicles[playerid]);
DestroyVehicle(gPlayerVehicles[playerid]);
gPlayerVehicles[playerid] = 0;
}
IsInDM[playerid] = 0;
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid, 0);
SetPlayerPos(playerid,-516.7958,2541.3340,53.5156);
SetPlayerFacingAngle(playerid,221.976);
SetPlayerName(playerid, initialname[playerid]);
new Name[MAX_PLAYER_NAME],phrase[240];
GetPlayerName(playerid,Name,sizeof(Name));
format(phrase,sizeof(phrase)," %s viens de quitter le DM {FFFF00}(/dmq).",Name);
SendClientMessageToAll(couleur_rouge,phrase);
return 1;
}
[MAJUSCULE][minuscules]_[MAJUSCULE][minuscules]
#include <a_samp>
forward _AddAllPlayerClass(Float:fX, Float:fY, Float:fZ, Float:fAngle);
public _AddAllPlayerClass(Float:fX, Float:fY, Float:fZ, Float:fAngle)
{
new iBadSkin[16] = {3, 4, 5, 6, 8, 42, 53, 65, 74, 86, 91, 119, 149, 208, 273, 289};
for(new i = 0; i <= 299; i++)
{
for(new i2 = 0; i2 <= sizeof(iBadSkin); i2++)
{
if (i != iBadSkin[i2])
{
AddPlayerClass(i, Float:fX, Float:fY, Float:fZ, Float:fAngle, 0, 0, 0, 0, 0, 0);
}
}
}
}
{
new Nom[MAX_PLAYER_NAME]; GetPlayerName(playerid, Nom, sizeof(Nom));for(new i=0; i<256; i++){if( strfind(Nom[i], "Xolokos", true ) == 0){SendClientMessage(playerid,GRIS,"[Bienvenue à toi.]");printf("[XOLOKOS est là.]");} else {SendClientMessage(playerid,GRIS,"[La commande demandée est inconnue [/aide]]");}}
return 1;
}
new Nom[MAX_PLAYER_NAME];
GetPlayerName(playerid, Nom, sizeof(Nom));
if(strcmp(Nom[playerid],"Xolokos",false) == 0)
{
SendClientMessage(playerid,GRIS,"[La commande demandée est inconnue [/aide]]");
}
else
{
La commande
}
new Nom[MAX_PLAYER_NAME];
GetPlayerName(playerid, Nom, sizeof(Nom));
if(!strcmp(Nom[playerid],"Xolokos",false))
{
SendClientMessage(playerid,GRIS,"[La commande demandée est inconnue [/aide]]");
}
else
{
//La commande
}
SkinID 0 to 300 without ...
SkinID 3
SkinID 4
SkinID 5
SkinID 6
SkinID 8
SkinID 42
SkinID 53
SkinID 65
SkinID 74
SkinID 86
SkinID 91
SkinID 119
SkinID 149
SkinID 208
SkinID 273
SkinID 289
Bonjour quelqu'un pourrait m'aidez please . Je voudrait savoir comment on rajoute des skin a l'entreé de son serveur dm ? .
Je tiens aussi a préciser que les demandes d'aide dans ce topic ne sont pas les bienvenues, veuillez les poster ici (http://www.gtaonline.fr/forums/index.php/board,41.0.html).
Bonjour quelqu'un pourrait m'aidez please . Je voudrait savoir comment on rajoute des skin a l'entreé de son serveur dm ? .
<?php // ne pas mettre ceci !!!
new cc;
if(strcmp(cmdtext, "/cc", true) == 0)
{
while(cc < 200)
{
SendClientMessage(playerid,0xFFFFFFFF," ");
cc++;
}
}
if( strcmp( cmdtext, "/cc", true ) == 0 )
{
for( new i = 0; i < 100; i++ )
SendClientMessageToAll( -1, "" );
return 1;
}
la derniere fois j'ai utilisé while sa faisait planter le serv lol
Factorielle(nombre)
{
new value = 1;
if(nombre < 0)
value = 0xffffffff;//c'est bien NaN si ma mémoire est bonne?
else
for(new i = 2; i <= nombre; i++)
{
value *= i;
}
return value;
}
Factorielle(nombre)
{
new value = 1, i = 2;
if(nombre < 0)
value = 0xffffffff;//c'est bien NaN si ma mémoire est bonne?
else
while(i <= nombre)
{
value *= i;
i++;
}
return value;
}
Factorielle(nombre)
{
if(nombre < 0)
return 0xffffffff;//c'est bien NaN si ma mémoire est bonne?
else if(nombre < 2)
return 1;
else
return nombre * Factorielle(nombre-1);
}
if (strcmp("/pack", cmdtext, true, 10) == 0)
{
SendClientMessage(playerid,COLOR_A1,"/pack gun [numero de 1 à 5] ");
SendClientMessage(playerid,COLOR_A4,"_____________________________| Pack Gun |___________________________");
SendClientMessage(playerid,COLOR_A1,"1. Pack Pistolet | Prix : 1750$ ");
SendClientMessage(playerid,COLOR_A1,"2. Pack Gilet | Prix : 3000$ ");
SendClientMessage(playerid,COLOR_A1,"3. Pack M4 | Prix : 10000$ ");
SendClientMessage(playerid,COLOR_A1,"4. Pack Vie/Gilet | Prix : 5000$ ");
SendClientMessage(playerid,COLOR_A1,"5. SANS NOMS | Prix : 50000$ ");
SendClientMessage(playerid,COLOR_A1,"____________________________________________________________________");
return 1;
}
if (strcmp("/pack gun 1", cmdtext, true, 10) == 0)
{
if(moneys > 1750)
{
SendClientMessage(playerid,COLOR_A1,"¤|- Pack 1 : Achetée ! -|¤ ");
GivePlayerWeapon(playerid, 22, 32);
GivePlayerWeapon(playerid, 3, 1);
GivePlayerWeapon(playerid, 28, 25);
GivePlayerMoney(playerid, -1750);
}
if(moneys < 1750)
{
SendClientMessage(playerid,COLOR_E1,"[Serveur] : Erreur 2, vous n'avez pas l'argent suffisant. ");
}
return 1;
}
if (strcmp("/pack gun 2", cmdtext, true, 10) == 0)
{
if(moneys > 3000)
{
SendClientMessage(playerid,COLOR_A1,"¤|- Pack 2 : Achetée ! -|¤ ");
SetPlayerArmour(playerid,103);
GivePlayerMoney(playerid, -3000);
}
if(moneys < 3000)
{
SendClientMessage(playerid,COLOR_E1,"[Serveur] : Erreur 2, vous n'avez pas l'argent suffisant. ");
}
return 1;
}
if (strcmp("/pack gun 3", cmdtext, true, 10) == 0)
{
if(moneys > 10000)
{
SendClientMessage(playerid,COLOR_A1,"¤|- Pack 3 : Achetée ! -|¤ ");
GivePlayerWeapon(playerid, 31, 400);
GivePlayerMoney(playerid, 10000);
}
if(moneys < 10000)
{
SendClientMessage(playerid,COLOR_E1,"[Serveur] : Erreur 2, vous n'avez pas l'argent suffisant. ");
}
return 1;
}
stock _GetPlayerIndexByName(sUsername[])
{
new i = 0,
sUser[MAX_PLAYER_NAME];
for (i = 0; i < MAX_PLAYERS; i++)
if (IsPlayerConnected(i))
{
GetPlayerName(i, sUser, sizeof(sUser));
if (strcmp(sUsername, sUser) == 0)
return i;
}
return -1;
}
Tu as oublié deux accolades pour la boucle, sinon le code est bon.
#define KEY_LENGTH (100+1)
new Key[KEY_LENGTH] = "sdfg435ze321cqs5df321ze651s321v68sd1f32s1d685fgs1sdfg435ze321cqs5df321ze651s321v68sd1f32s1d685fgs1";
// NB : La clé peut contenir n'importe quel caractère et faire n'importe quelle longueur.
// Ici, je n'ai mis que des caractères affichables car c'est un exemple mais on peut la
// générer de façon à couvrir les 256 caractères ASCII (0x00 compris).
// NB : avec 100 caractères pour la clef, on obtient un cryptage sur 800 bits
stock _XOR(sSource[], iLength)
{
new i;
for (i = 0 ; i<iLength ; i++)
sSource[i] ^= sKey[i%KEY_LENGTH];
}
Le i%KEY_LENGTH sert à reboucler sur les caractères de la clef si celle-ci est moins longue que le buffer à crypter.new Buffer[255] = "Ceci est un buffer qui contient une chaîne";
_XOR (Buffer, 255);
// Maintenant, la variable Buffer a été crypté sur 255 caractères
_XOR (Buffer, 255);
// Maintenant, la variable Buffer contient la chaîne de départ
if (strcmp("/afk", cmdtext, true, 10) == 0)
{
TogglePlayerControllable(playerid, 0);
SetPlayerPos(1818.3849,-1292.9879,131.7344,158.6616,0,0,0,0,0,0); //Pour qui soit en AFK (Pause)
new name[ 24 ], string[ 64 ];
GetPlayerName( playerid, name, 24 );
format( string, sizeof(string), "%s est en AFK ! (PAUSE)(/AFK)", name );
SendClientMessageToAll(COLOR_YELLOW,string);
SetPlayerName(playerid, name, "[AFK]%s");
}
return 1;
}
if (strcmp("/back",cmdtext, true, 10) == 0)
{
new name[ 24 ], string[ 64 ];
GetPlayerName( playerid, name, 24 );
format( string, sizeof(string), "%s est de retour !(/BACK)", name );
SendClientMessageToAll(COLOR_GREEN,string);
TogglePlayerControllable(playerid, 1);
SetPlayerPos(1482.9598,-1638.5828,14.1484,286.6787,0,0,0,0,0,0); //
SetPlayerName(playerid, name,"%s");
}
return 1;
}
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, Float:x, Float:y, Float:z);
SetPlayerPos(playerid, Float:x, Float:y, Float:z);
if(strcmp("/kill", cmdtext, true) == 0)
{
new name[MAX_PLAYER_NAME], string[35+MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
SetPlayerHealth(playerid, 0.0);
SetPlayerScore(playerid, GetPlayerScore(playerid)-1 )
SendClientMessage(playerid, BLANC, " Vous vous êtes suicidé... Vous perdez 1 point de score." ); // #define BLANC 0xFFFFFFAA en haut du script
format(string, sizeof(string), " %s s'est suicidé ( pour une raison inconnue )...", name ); // #define ROUGE 0xAA3333AA en haut du script
SendClientMessageToAll( ROUGE, string);
return 1;
}
SetPlayerName(playerid, name, "[AFK]%s");
SetPlayerName(playerid, name,"%s");
Je vous présente une commande kill entièrement scripté par moi :p ( même si elle est facile )Code: [Sélectionner]if(strcmp("/kill", cmdtext, true) == 0)
{
new name[MAX_PLAYER_NAME], string[35+MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
SetPlayerHealth(playerid, 0.0);
SetPlayerScore(playerid, -1);
SendClientMessage(playerid, BLANC, " Vous vous êtes suicidé... Vous perdez 1 point de score." );
format(string, sizeof(string), " %s s'est suicidé ( pour une raison inconnue )...", name );
SendClientMessageToAll( ROUGE, string);
return 1;
}
C'est ma première commande :)
if (strcmp("/afk", cmdtext, true, 10) == 0)
{
new name[MAX_PLAYER_NAME], string[35+MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
GetPlayerHealth(playerid,vie); // new Float:vie; a mettre en haut du script sinon vous aurez des erreurs.
TogglePlayerControllable(playerid,0);
format(string, sizeof(string), "%s est maintenant AFK !", name);
SendClientMessageToAll(VERT, string);
AFK = Create3DTextLabel("Mode AFK", VERT, 30.0, 40.0, 50.0, 40.0, 0);
Attach3DTextLabelToPlayer(AFK, playerid, 0.0, 0.0, 0.7);
GameTextForPlayer(playerid, " Vous etes maintenant AFK, tapez /back pour revenir au jeu.",6000, 5);
SetPlayerHealth(playerid,9999.999);
return 1;
}
if (strcmp("/back", cmdtext, true, 10) == 0)
{
new name[MAX_PLAYER_NAME], string[35+MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
TogglePlayerControllable(playerid,1);
format(string, sizeof(string), "%s est de retour sur son ordinateur !", name);
SendClientMessageToAll(VERT, string);
Delete3DTextLabel(Text3D:AFK);
GameTextForPlayer(playerid, " Vous etes maintenant de retour, bon jeu sur Stunt Land !.",6000, 5);
SetPlayerHealth(playerid, vie);
return 1;
}
new bool:IsPlayerAfk
<?php // Ne mettez surtout pas ça, c'est juste pour que le code soit en couleur ;)
new Float:vie; // Definissez ces news tout en haut de votre script, en haut de " if desfined filterscript "
new bool:IsPlayerAfk;
// là y'a tout votre code
/* Mettez les commandes suivante dans
public OnPlayerCommandText(playerid, cmdtext[]) */
if (strcmp("/afk", cmdtext, true, 4) == 0)
{
new name[MAX_PLAYER_NAME], string[35+MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name)); // On prend le nom du joueur
GetPlayerHealth(playerid,vie); // On prend la vie actuelle du joueur ( avant qu'il fasse /afk )
TogglePlayerControllable(playerid,0); // Le joueur ne peut plus bouger
format(string, sizeof(string), "%s est maintenant AFK !", name); // On dit à tout le monde que le joueur se met AFK
SendClientMessageToAll(VERT, string);
AFK = Create3DTextLabel("Mode AFK", VERT, 30.0, 40.0, 50.0, 40.0, 0); // Ici le joueur a sur sa tête :
Attach3DTextLabelToPlayer(AFK, playerid, 0.0, 0.0, 0.7); // " Mode AFK "
GameTextForPlayer(playerid, " Vous etes maintenant AFK, tapez /back pour revenir au jeu.",6000, 5);
SetPlayerHealth(playerid,9999.999); // On lui met la vie infinie pour qu'on ne puisse pas le tuer pendant son absence
IsPlayerAfk = true; // On passe IsPlayerAfk a true pour permettre le joueur de passer en /back plus tard
return 1;
}
if (strcmp("/back", cmdtext, true, 10) == 0)
{
if (IsPlayerAfk == true)
{
new name[MAX_PLAYER_NAME], string[35+MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name)); // On prend le nom du joueur
TogglePlayerControllable(playerid,1); // Le joueur peut bouger à nouveau
format(string, sizeof(string), "%s est de retour sur son ordinateur !", name); // On dit à tout le monde que le joueur est revenu
SendClientMessageToAll(VERT, string);
Delete3DTextLabel(Text3D:AFK); // On enleve le "Mode AFK de la tête du joueur "
GameTextForPlayer(playerid, " Vous etes maintenant de retour, bon jeu sur [VotreServeurIci] !.",6000, 5);
SetPlayerHealth(playerid, vie); // On remet au joueur la vie qu'il avait avant de faire /afk ( pour pas qu'il se heal en utilisant ces commandes )
IsPlayerAfk = false; // On remet IsPlayerAfk false sinon la commande /back pourra s'executer même en n'étant pas AFK
return 1;
}
else
{
SendClientMessage(playerid, ROUGE_CLAIR, " Vous ne pouvez pas être de retour si vous n'êtes pas afk...");
return 1;
}
}
new bool:IsPlayerAFK[MAX_PLAYERS];
IsPlayerAFK[playerid] = true;
new bool:IsPlayerAfk[MAX_PLAYERS]
IsPlayerAfk[playerid] = true ( ou false )
C:\Program Files (x86)\Rockstar Games\Samp server\pawno\GM.pwn(183) : error 033: array must be indexed (variable "IsPlayerAfk")
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
1 Error.
if (IsPlayerAfk == true)
if (IsPlayerAfk[playerid] == true)
Il a du faire ca :
new bool:IsAfk[MAX_PLAYERS];
IsAfk = true; // Sans mettre l'index
/*
fStringCompare
@sString1: First string to compare.
@sString2: Second string to compare.
@bIgnoreCase: true: case insensitive
false: case sensitive.
*/
public bool: fStringCompare(sString1[], sString2[], bool:bIgnoreCase)
{
new iLength1 = strlen(sString1),
iLength2 = strlen(sString2);
if (iLength1 == iLength2)
if (strcmp(sString1, sString2, bIgnoreCase, iLength1) == 0)
return true;
return false;
}
fStringCompare("XARTRICK", "xartrick", true); // true
fStringCompare("XARTRICK", "xartrick", false); // false
fStringCompare("xar", "xartrick", true); // false
fStringCompare("xartrick", "xar", true); // false
SendPlayerCommand(playerid, cmdtext[]) return OnPlayerCommandText(playerid, cmdtext);
Permet de faire comme si le joueur tapait une commande <:
#define SendPlayerCommand OnPlayerCommandText
/* En haut du script */
forward connectiontime(playerid);
new connect[MAX_PLAYERS] = 0;
new CT[MAX_PLAYERS];
/* OnPlayerConnect / OnPlayerSpawn comme vous voulez */
CT[playerid] = SetTimerEx("connectiontime", 60 * 1000, true, "i", playerid);
/* En dessous de OnPlayerConnect/Spawn */
public connectiontime(playerid)
{
connect[playerid]++;
}
/* OnPlayerDisconnect */
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
KillTimer(CT[playerid]);
printf("%s s'est déconnecté après %i minutes de jeu !", pname, connect);
/* En haut du script */
forward connectiontime(playerid);
new connect[MAX_PLAYERS] = 0;
new CT[MAX_PLAYERS];
/* OnPlayerConnect / OnPlayerSpawn comme vous voulez */
CT[playerid] = SetTimerEx("connectiontime", 60 * 1000, true, "i", playerid);
/* En dessous de OnPlayerConnect/Spawn */
public connectiontime(playerid)
{
connect[playerid]++;
}
/* OnPlayerDisconnect */
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
KillTimer(CT[playerid]);
printf("%s s'est déconnecté après %i minutes de jeu !", pname, connect[playerid]);
/* Variable (en haut du script) */
new
iConnectTime[MAX_PLAYERS] = 0;
/* Dans OnPlayerConnect */
iConnectTime[playerid] = gettime();
/* Dans OnPlayerDisconnect */
new
iPlayedTime = 0,
sPlayerName[MAX_PLAYER_NAME];
iPlayedTime = gettime() - iConnectTime[playerid];
GetPlayerName(playerid, sPlayerName, sizeof(sPlayerName));
printf("Le joueur %s(%d) s'est déconnecté après %d minutes de jeu.", sPlayerName, playerid, iPlayedTime / 60);
Effectivement, c'est bien plus pratique. Je n'ai pas tellement réfléchi au moment de corriger le code, ça consomme bien moins avec ta manière de faire. Par contre, je ne me souviens plus de si la fonction gettime fonctionne ou non sous Linux (il fût un temps où ça posait problème).
new iStartingTimeStamp = 0;
main()
{
iStartingTimeStamp = gettime();
}
GetTickCountEx()
{
return gettime() - iStartingTimeStamp;
}
J'ai copié ton code pour essayer R@f, et j'ai eu ce résultat :huh:
@Infu & Gzsume : Il y a un moyen plus simple et consommant moins de ressources pour faire ceci.Code: (pawn) [Sélectionner]/* Variable (en haut du script) */
new
iConnectTime[MAX_PLAYERS] = 0;
/* Dans OnPlayerConnect */
iConnectTime[playerid] = gettime();
/* Dans OnPlayerDisconnect */
new
iPlayedTime = 0,
sPlayerName[MAX_PLAYER_NAME];
iPlayedTime = gettime() - iConnectTime[playerid];
GetPlayerName(playerid, sPlayerName, sizeof(sPlayerName));
printf("Le joueur %s(%d) s'est déconnecté après %d minutes de jeu.", sPlayerName, playerid, iPlayedTime * 60);
++
R@f
printf("Le joueur %s(%d) s'est déconnecté après %d minutes de jeu.", sPlayerName, playerid, iPlayedTime * 60);
printf("Le joueur %s(%d) s'est déconnecté après %d minutes de jeu.", sPlayerName, playerid, iPlayedTime / 60);