C_far

Fonctions & Astuces

90 messages dans ce sujet

stock SendClientMessageEx(playerid, couleur, const msg[], va_args<>)
{
	new
		string[145];
	
	va_format(string, sizeof(string), msg, va_start<3>);
	return SendClientMessage(playerid, couleur, string);
}

stock SendClientMessageToAllEx(couleur, const msg[], va_args<>)
{
	new
		string[145];
		
	va_format(string, sizeof(string), msg, va_start<2>);
	foreach (new i : Player) if (IsPlayerConnected(i))
	{
		SendClientMessage(i, couleur, string);
	}
	return 1;
}

stock SendClientMessageToAdmins(couleur, const msg[], va_args<>)
{
	new string[145];
	va_format(string, sizeof(string), msg, va_start<2>);

	foreach (new i : Player) if (IsPlayerConnected(i) && PlayerInfo[i][pAdmin] != 0) // changer la fonction "pAdmin" avec le nom de votre fonction enregistrant le level admin de l'utilisateur
	{
		SendClientMessage(i, couleur, string);
	}
	return 1;
}

Requiert foreach et y_va

Modifié par MrAlexisX2

Partager ce message


Lien à poster
Partager sur d’autres sites

Fonction retournant une ID d'un joueur au hasard :

stock GetRandomPlayer()
{
	new
		randomPlayer = random(GetMaxPlayers());
		
	while(!IsPlayerConnected(randomPlayer))
	    randomPlayer = random(GetMaxPlayers());
	    
	return randomPlayer;
}

 

Modifié par MrAlexisX2

Partager ce message


Lien à poster
Partager sur d’autres sites

Plus simple :)

stock SendAdminMessage(col, string[])
{
	for(new i = 0; i < MAX_PLAYERS; i++)
	{
		if(PlayerIsAdmin(i)) // pour les admins rcon , a vous de changer ça a la façon de stock de grade admin 
			SendClientMessage(i, col, string);
	}

	return 1;
}

 

Partager ce message


Lien à poster
Partager sur d’autres sites

j'ajoute ça aussi , utile pour un rp

stock SendNearbyMessage(playerid, color, string[], Float: range)
{
	new Float: X, Float: Y, Float:Z, vw, vww;
	GetPlayerPos(playerid, X, Y, Z);
 	vw = GetPlayerVirtualWorld(playerid);

	for(new i = 0; i < MAX_PLAYERS; i ++)
	{
	    vww = GetPlayerVirtualWorld(i);
	    if(IsPlayerInRangeOfPoint(i, range, X, Y, Z) && vw == vww)
	    {
	        SendClientMessage(i, color, string);
	    }
	}

	return 1;
}

 

Partager ce message


Lien à poster
Partager sur d’autres sites

@yani la fonction SendAdminMessage ne prendra pas en compte les paramètres. Donc tu devras passer à chaque fois par un format.

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 12 minutes, SUNSHINE. a dit :

@yani la fonction SendAdminMessage ne prendra pas en compte les paramètres. Donc tu devras passer à chaque fois par un format.

Oui je dois par un format toujours mais c'est utile toujours par exemple commande irc ou report

Partager ce message


Lien à poster
Partager sur d’autres sites

EDIT: Fonction ci-dessous, correction d'une erreur.

Modifié par SUNSHINE.

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 1 heure, SUNSHINE. a dit :

Même fonction que la tienne seulement elle prendra les arguments en compte :

 

stock SendNearbyMessage(couleur, const msg[], Float:range, va_args<>)
{
	new
		string[145],
		Float:pos[3],
		vw[2];

	GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
	vw[0] = GetPlayerVirtualWorld(playerid);
	
	va_format(string, sizeof(string), msg, va_start<3>);

	foreach (new i : Player) if (IsPlayerConnected(i))
	{
		vw[1] = GetPlayerVirtualWorld(i);
		if(IsPlayerInRangeOfPoint(i, range, pos[0], pos[1], pos[2]) && vw[0] == vw[1])
		{
			SendClientMessage(i, couleur, string);
		}
	}
	return 1;
}

 

Cette fonction a une erreur.

et d'ailleurs, pourquoi utiliser IsPlayerConnected dans ton foreach ?

Partager ce message


Lien à poster
Partager sur d’autres sites
stock SendNearbyMessage(playerid, couleur, Float:range, const msg[], va_args<>)
{
	new
		string[145],
		Float:pos[3],
		vw[2];

	GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
	vw[0] = GetPlayerVirtualWorld(playerid);

	va_format(string, sizeof(string), msg, va_start<3>);

	foreach (new i : Player)
	{
		vw[1] = GetPlayerVirtualWorld(i);
		if(IsPlayerInRangeOfPoint(i, range, pos[0], pos[1], pos[2]) && vw[0] == vw[1])
		{
			SendClientMessage(i, couleur, string);
		}
	}
	return 1;
}

Yep effectivement, erreur d'inattention. Sinon pour la condition c'est une habitude que j'ai gardé avec la loop for, mauvaise habitude.

Modifié par SUNSHINE.

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 36 minutes, SUNSHINE. a dit :
stock SendNearbyMessage(couleur, Float:range, const msg[], va_args<>)
{
	new
		string[145],
		Float:pos[3],
		vw[2];

	GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
	vw[0] = GetPlayerVirtualWorld(playerid);

	va_format(string, sizeof(string), msg, va_start<3>);

	foreach (new i : Player)
	{
		vw[1] = GetPlayerVirtualWorld(i);
		if(IsPlayerInRangeOfPoint(i, range, pos[0], pos[1], pos[2]) && vw[0] == vw[1])
		{
			SendClientMessage(i, couleur, string);
		}
	}
	return 1;
}

Yep effectivement, erreur d'inattention. Sinon pour la condition c'est une habitude que j'ai gardé avec la loop for, mauvaise habitude.

Pareil, ça compilera pas

Partager ce message


Lien à poster
Partager sur d’autres sites

Ca compile très bien

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 6 minutes, SUNSHINE. a dit :

Ca compile très bien

Tu n'as pas testé, car ici dans ta fonction tu utilises playerid, mais tu ne le déclares pas ou tu n'as aucun paramètre nommé comme ça.

Partager ce message


Lien à poster
Partager sur d’autres sites

Effectivement, mais quoi qu'il en soit ça compilait (me demande pas pourquoi mdr). J'édite la fonction.

Partager ce message


Lien à poster
Partager sur d’autres sites

Petite fonction rapide basé sur le calcul de pourcentage.

 

stock GetRandomPercent(percent)
{
	new
	    number = random(100);

	if(number <=  || number > percent)
	    return false;

	else
	    return true;
}

main()
{
	new
	    percent = 60;
	    
	if(GetRandomPercent(percent))
	{
		printf("Vous avez réussi en ayant %d%% de chance", percent);
	}
	else
	{
		printf("Vous n'avez pas de chance!");
	}
}

EDIT : Je la met sur pastebin car l'éditeur de code IPB me retire des valeurs de mon code, va savoir pourquoi... http://pastebin.com/TTS6qXbq

Modifié par SUNSHINE.

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 19/3/2016 à 17:23, SUNSHINE. a dit :

Fonction retournant une ID d'un joueur au hasard :

stock GetRandomPlayer()
{
	new
		randomPlayer = random(GetMaxPlayers());
		
	while(!IsPlayerConnected(randomPlayer))
	    randomPlayer = random(GetMaxPlayers());
	    
	return randomPlayer;
}

 

Optimisable :

stock GetRandomPlayer()
{
	static
		playerid;
		
	do playerid = random(GetPlayerPoolSize());
	while(!IsPlayerConnected(playerid));
	    
	    
	return playerid;
}

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Arrays regroupant la totalité des intérieurs de SA:MP.

Vous retrouverez les informations suivantes :

  • Interior ID SetPlayerInt
  • Interior Name
  • X
  • Y
  • Z

http://pastebin.com/GWNdMid5

 

Merci à Dutheil pour les coordonnées X Y Z.

Modifié par SUNSHINE.

Partager ce message


Lien à poster
Partager sur d’autres sites

J'en est une simple et utile:

  • #define fonction%0(%1) forward%0(%1); public%0(%1)

Au lieu de créer un timer avec un forward + public juste à taper function Ma_Fonction(_mes_paramètres){...}

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 2 heures, Vince_Costa a dit :

J'en est une simple et utile:

  • #define fonction%0(%1) forward%0(%1); public%0(%1)

Au lieu de créer un timer avec un forward + public juste à taper function Ma_Fonction(_mes_paramètres){...}

C'est une macro ;)

 

En effet utile et plus esthétique de faire ainsi. En revanche il faudra taper fonction et non function (petite faute de frappe).

Partager ce message


Lien à poster
Partager sur d’autres sites

 

stock _einfo[144]; // 144 parce que 144 caractères seulement ne peuvent s'afficher dans un SendClientMessage
#define SendClientMessageEx(%,%1,%2,%3) (format(_einfo, sizeof(_einfo), (%2), %3), SendClientMessage(%,%1,_einfo))
/*
	%0 = L'ID du joueur qui va recevoir le message
	%1 = La couleur du text
	%2 = Le message avec les paramètres
	%3 = Les informations que l'ont veux formater dans le message
*/

public OnPlayerConnect(playerid){
	new pname[MAX_PLAYER_NAME];
	GetPlayerName(playerid, pname, sizeof(pname));
	SendClientMessageEx(playerid, 0xFFFFFFFF, "Bienvenue sur le serveur %s", pname));
	return 1;
}

 

Modifié par Vince_Costa

Partager ce message


Lien à poster
Partager sur d’autres sites

Même principe que la fonction que j'ai fais ci dessus. 

Partager ce message


Lien à poster
Partager sur d’autres sites

Même principe que la fonction de Sunshine:

SCMF(playerid,color,fstring[],{Float, _}:...)
{
   new n=(numargs()-3)*4;
   if(n)
   {
      new message[128],arg_start,arg_end;
      #emit CONST.alt                fstring
      #emit LCTRL                    5
      #emit ADD
      #emit STOR.S.pri               arg_start
      #emit LOAD.S.alt               n
      #emit ADD
      #emit STOR.S.pri               arg_end
      do
      {
         #emit LOAD.I
         #emit PUSH.pri
         arg_end-=4;
         #emit LOAD.S.pri           arg_end
      }
      while(arg_end>arg_start);
      #emit PUSH.S                   fstring
      #emit PUSH.C                   255
      #emit PUSH.ADR                 message
      n+=4*3;
      #emit PUSH.S                   n
      #emit SYSREQ.C                 format
      n+=4;
      #emit LCTRL                    4
      #emit LOAD.S.alt               n
      #emit ADD
      #emit SCTRL                    4
      return SCM(playerid,color,message);
   }
   else return SCM(playerid,color,fstring);
}

Crédit à l'auteur original

Des fonctions toutes simples (les conseils sont appréciables):

GetWeaponSlot(weaponid)
{
	static slot;
	switch(weaponid)
	{
		case 0,1: slot = 0;
		case 2 .. 9: slot = 1;
		case 10 .. 15: slot = 10;
		case 16 .. 18, 39: slot = 8;
		case 22 .. 24: slot =2;
		case 25 .. 27: slot = 3;
		case 28, 29, 32: slot = 4;
		case 30, 31: slot = 5;
		case 33, 34: slot = 6;
		case 35 .. 38: slot = 7;
		case 40: slot = 12;
		case 41 .. 43: slot = 9;
		case 44 .. 46: slot = 11;
	}
	return slot;
}
WeaponName(weaponid)
{
	static naamewp[50], naamews[50];
	GetWeaponName(weaponid, naamewp, sizeof(naamewp));
	format(naamews, sizeof(naamews), "%s", naamewp);
	return naamews;
}
GetBodypartName(bodypart)
{
	static bodypartName[30];
	switch(bodypart)
	{
	    case 3: format(bodypartName, sizeof(bodypartName), "Torso");
	    case 4: format(bodypartName, sizeof(bodypartName), "Chest");
	    case 5: format(bodypartName, sizeof(bodypartName), "Left arm");
	    case 6: format(bodypartName, sizeof(bodypartName), "Right arm");
	    case 7: format(bodypartName, sizeof(bodypartName), "Left leg");
	    case 8: format(bodypartName, sizeof(bodypartName), "Right leg");
	    case 9: format(bodypartName, sizeof(bodypartName), "Head");
	}
	return bodypartName;
}
IsValidDeath(reason)
{
    if(reason < 0 || reason > 42) return false;
    return IsValidWeapon(reason) ? true : false;
}

IsValidWeapon(weaponid)
{
	if(weaponid == 19 || weaponid == 20 || weaponid == 21 || weaponid == 0) return false;
	return weaponid < 0 || weaponid > 42 ? false : true;
}

 

Modifié par Dayrion
new ->static

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 20/03/2016 à 16:05, Dutheil a dit :

Tu n'as pas testé, car ici dans ta fonction tu utilises playerid, mais tu ne le déclares pas ou tu n'as aucun paramètre nommé comme ça.

 

de 1 et de 2 il a oublié une parenthèse (J'ai passé au par le sujet et j'ai remarqué ça au hasard :3)

Correction : 

if(IsPlayerInRangeOfPoint(i, range, pos[0], pos[1], pos[2]) && vw[0] == vw[1]))

 

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 1 heure, Black a dit :

 

de 1 et de 2 il a oublié une parenthèse (J'ai passé au par le sujet et j'ai remarqué ça au hasard :3)

Correction : 

if(IsPlayerInRangeOfPoint(i, range, pos[0], pos[1], pos[2]) && vw[0] == vw[1]))

 

 

Non il n'avait pas oublié de paranthèse, par contre toi tu viens d'en mettre une de trop. Regarde bien

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 4 heures, Black a dit :

 

de 1 et de 2 il a oublié une parenthèse (J'ai passé au par le sujet et j'ai remarqué ça au hasard :3)

Correction : 

if(IsPlayerInRangeOfPoint(i, range, pos[0], pos[1], pos[2]) && vw[0] == vw[1]))

 

 Il a oublié aucune parenthèse, regarde :

 

Citation

if (IsPlayerInRangeOfPoint(i, range, pos[0], pos[1], pos[2]) && vw[0] == vw[1])

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Ma faute ! Je faisais une nuit blanche (petite bête :3)

 

Au passage pour ne pas parlé pour rien dire, j'en rajoute une fonction :

 

stock GetGunObjectID(gunid)
{
	new objet;
	switch(gunid)
	{
		case 1: objet = 331;
		case 2: objet = 333;
		case 3: objet = 334;
		case 4: objet = 335;
		case 5: objet = 336;
		case 6: objet = 337;
		case 7: objet = 338;
		case 8: objet = 339;
		case 9: objet = 341;
		case 10: objet = 321;
		case 11: objet = 322;
		case 12: objet = 323;
		case 13: objet = 324;
		case 14: objet = 325;
		case 15: objet = 326;
		case 16: objet = 342;
		case 17: objet = 343;
		case 18: objet = 344;
		case 22: objet = 346;
		case 23: objet = 347;
		case 24: objet = 348;
		case 25: objet = 349;
		case 26: objet = 350;
		case 27: objet = 351;
		case 28: objet = 352;
		case 29: objet = 353;
		case 30: objet = 355;
		case 31: objet = 356;
		case 32: objet = 372;
		case 33: objet = 357;
		case 34: objet = 358;
		case 35: objet = 359;
		case 36: objet = 360;
		case 37: objet = 361;
		case 38: objet = 362;
		case 39: objet = 363;
		case 40: objet = 364;
		case 41: objet = 365;
		case 42: objet = 366;
		case 43: objet = 367;
		case 44: objet = 368;
		case 45: objet = 369;
		case 46: objet = 371;
		default : objet = 1575;

	}
	return objet;
}

 

pour récupérer l'id d'un objet d'une arme. (utile pour des systèmes pour posé les armes par terre par exemple)

Modifié par Black

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant