C_far

Fonctions & Astuces

90 messages dans ce sujet

Postez ici les fonctions que vous avez codées pouvant être utiles ou donner des idées de codes.

 

--------------------------------------------------------------------------------------------------------------------------------

 

GenerateRegistrationPlate

TextDrawSetChar

GetPlayerNameEX

GetVehicleName - GetVehicleModelName

Slap - GetVehicleSpeed - SendMessageToAdmins

TextDrawColorEx - PlayerTextDrawColorEx - SetTextDrawColorEx

GetBanType

GetOnlyAlphaExt

GenerateToken

GetAmxRealData

GetLocalAddress

GetRelativeAddress

randomEx

printBinary

str_split

ConvertMSByMinute

SendClientMessageToAllExcepts

 

--------------------------------------------------------------------------------------------------------------------------------

 

Modifié par C_far
1 personne aime ça

Partager ce message


Lien à poster
Partager sur d’autres sites

Une fonction pour générer une plaque d'immatriculation à la française : (2 lettres, espace, 3 chiffres, espace, 2 lettres = "BL 600 TA")

 

Pastebin : http://pastebin.com/2zTSDWQY

Source :

stock GenerateRegistrationPlate()
{
    new
        string[10];
       
    for(new i = 0; i < 7; i++)
    {
        static
            str[4];
   
        switch(i)
		{
			case 2,4:{strcat(string, " "); continue;}
			case 3: format(str, 4, "%03d", random(1000)), strcat(string, str);
			default: format(str, 4, "%c", random('Z' - 'A') + 'A'), strcat(string, str);
		}
    }
   
    return string;
}

 

Modifié par Dutheil
1 personne aime ça

Partager ce message


Lien à poster
Partager sur d’autres sites

Fonction utile pour corriger les accents dans les TextDraws. Je partage car à l'heure actuelle, je ne vois aucun TD (à part les miens ^^) où les accents de notre langue sont interprétés.

 

TextDrawSetChar(content[]) {
    new coriginal[22] = {192, 199, 200, 201, 202, 203, 207, 217, 219, 220, 224, 226, 231, 232, 233, 234, 235, 238, 239, 249, 251, 252};
    new cconvertis[22] = {128, 133, 134, 135, 136, 137, 141, 146, 148, 149, 151, 153, 156, 157, 158, 159, 160, 163, 164, 169, 171, 172};
    new len = strlen(content);
    for (new i; i < len; i++) {
        for(new j; j < 22; j++) {
            if(content[i] == coriginal[j]) {
                    content[i] = cconvertis[j];
                    break;
            }
        }
    }
}

 

Utilisation :

 

monString ...

TextDrawSetChar(monString)
... (le reste)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Fonction très très simple pour récupérer le nom du joueur :

 

stock GetPlayerNameEX(playerid) {
    new 
		name[MAX_PLAYER_NAME];

	GetPlayerName(playerid, name, MAX_PLAYER_NAME);
	return name;
}

 

Modifié par Black

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 3 minutes, Black a dit :

Fonction très très simple pour récupérer le nom du joueur :

 

stock GetPlayerNameEX(playerid) {
    new 
		name[MAX_PLAYER_NAME];

	GetPlayerName(playerid, name, MAX_PLAYER_NAME);
	return name;
}

 

Merci, mais je trouve qu'utiliser ce genre de fonction est obsolète en 2016, autant utiliser un peu le DATA et stocker le pseudo dans un tableau global, ça nous évite de devoir rappeler la fonction.

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 3 minutes, Dutheil a dit :

Merci, mais je trouve qu'utiliser ce genre de fonction est obsolète en 2016, autant utiliser un peu le DATA et stocker le pseudo dans un tableau global, ça nous évite de devoir rappeler la fonction.

 

Ta raison mais le thread est pour les fonctions, fin ce que tu demande doit être adapté au gamemode dans le DATA du joueur.

Partager ce message


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

 

Ta raison mais le thread est pour les fonctions, fin ce que tu demande doit être adapté au gamemode dans le DATA du joueur.

Tu peux simplement faire ça :

#pragma compat 1

#include <a_samp>

#define GetName(%0) allnames[%0]

new
	allnames[MAX_PLAYERS][MAX_PLAYER_NAME];

public OnPlayerConnect(playerid)
{
	GetPlayerName(playerid, allnames, MAX_PLAYER_NAME);
	
	return 1;
}

 

1 personne aime ça

Partager ce message


Lien à poster
Partager sur d’autres sites

Je rajoute 2 fonctions que j'utilise pour récupérer le nom d'un véhicule et le nom d'un modèle.

 

#define VEH_MODELS              	(212)

#define GetVehicleName(%0) _CarNames[GetVehicleModel(%0) - 400]
#define GetVehicleModelName(%0) _CarNames[%0 - 400]

stock static const _CarNames[VEH_MODELS][] =
{
	"Landstalker",
	"Bravura",
	"Buffalo",
	"Linerunner",
	"Perrenial",
	"Sentinel",
	"Dumper",
	"Firetruck",
	"Trashmaster",
	"Stretch",
	"Manana",
	"Infernus",
	"Voodoo",
	"Pony",
	"Mule",
	"Cheetah",
	"Ambulance",
	"Leviathan",
	"Moonbeam",
	"Esperanto",
	"Taxi",
	"Washington",
	"Bobcat",
	"Mr Whoopee",
	"BF Injection",
	"Hunter",
	"Premier",
	"Enforcer",
	"Securicar",
	"Banshee",
	"Predator",
	"Bus",
	"Rhino",
	"Barracks",
	"Hotknife",
	"Trailer 1",
	"Previon",
	"Coach",
	"Cabbie",
	"Stallion",
	"Rumpo",
	"RC Bandit",
	"Romero",
	"Packer",
	"Monster",
	"Admiral",
	"Squalo",
	"Seasparrow",
	"Pizzaboy",
	"Tram",
	"Trailer 2",
	"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",
	"Boxville","Benson",
	"Mesa",
	"RC Goblin",
	"Hotring Racer A",
	"Hotring Racer B",
	"Bloodring Banger",
	"Rancher",
	"Super GT",
	"Elegant",
	"Journey",
	"Bike",
	"Mountain Bike",
	"Beagle",
	"Cropdust",
	"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 LA",
	"Hustler",
	"Intruder",
	"Primo",
	"Cargobob",
	"Tampa",
	"Sunrise",
	"Merit",
	"Utility",
	"Nevada",
	"Yosemite",
	"Windsor",
	"Monster A",
	"Monster B",
	"Uranus","Jester",
	"Sultan",
	"Stratum",
	"Elegy",
	"Raindance",
	"RC Tiger",
	"Flash",
	"Tahoma",
	"Savanna",
	"Bandito",
	"Freight Flat",
	"Streak Carriage",
	"Kart","Mower",
	"Duneride",
	"Sweeper",
	"Broadway",
	"Tornado",
	"AT-400",
	"DFT-30",
	"Huntley",
	"Stafford",
	"BF-400",
	"Newsvan",
	"Tug",
	"Trailer 3",
	"Emperor",
	"Wayfarer",
	"Euros",
	"Hotdog",
	"Club",
	"Freight Carriage",
	"Trailer 3",
	"Andromada",
	"Dodo",
	"RC Cam",
	"Launch",
	"Police Car (LSPD)",
	"Police Car (SFPD)",
	"Police Car (LVPD)",
	"Police Ranger",
	"Picador",
	"S.W.A.T. Van",
	"Alpha",
	"Phoenix",
	"Glendale",
	"Sadler",
	"Luggage Trailer A",
	"Luggage Trailer B",
	"Stair Trailer",
	"Boxville",
	"Farm Plow",
	"Utility Trailer"
};

j’espère qu'ils soient utile, j'en rajoute d'autres quand j'aurais d'autres idées.

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 17 minutes, Black a dit :

Je rajoute 2 fonctions que j'utilise pour récupérer le nom d'un véhicule et le nom d'un modèle.

 

#define VEH_MODELS              	(212)

#define GetVehicleName(%0) _CarNames[GetVehicleModel(%0) - 400]
#define GetVehicleModelName(%0) _CarNames[%0 - 400]

stock static const _CarNames[VEH_MODELS][] =
{
	"Landstalker",
	"Bravura",
	"Buffalo",
	"Linerunner",
	"Perrenial",
	"Sentinel",
	"Dumper",
	"Firetruck",
	"Trashmaster",
	"Stretch",
	"Manana",
	"Infernus",
	"Voodoo",
	"Pony",
	"Mule",
	"Cheetah",
	"Ambulance",
	"Leviathan",
	"Moonbeam",
	"Esperanto",
	"Taxi",
	"Washington",
	"Bobcat",
	"Mr Whoopee",
	"BF Injection",
	"Hunter",
	"Premier",
	"Enforcer",
	"Securicar",
	"Banshee",
	"Predator",
	"Bus",
	"Rhino",
	"Barracks",
	"Hotknife",
	"Trailer 1",
	"Previon",
	"Coach",
	"Cabbie",
	"Stallion",
	"Rumpo",
	"RC Bandit",
	"Romero",
	"Packer",
	"Monster",
	"Admiral",
	"Squalo",
	"Seasparrow",
	"Pizzaboy",
	"Tram",
	"Trailer 2",
	"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",
	"Boxville","Benson",
	"Mesa",
	"RC Goblin",
	"Hotring Racer A",
	"Hotring Racer B",
	"Bloodring Banger",
	"Rancher",
	"Super GT",
	"Elegant",
	"Journey",
	"Bike",
	"Mountain Bike",
	"Beagle",
	"Cropdust",
	"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 LA",
	"Hustler",
	"Intruder",
	"Primo",
	"Cargobob",
	"Tampa",
	"Sunrise",
	"Merit",
	"Utility",
	"Nevada",
	"Yosemite",
	"Windsor",
	"Monster A",
	"Monster B",
	"Uranus","Jester",
	"Sultan",
	"Stratum",
	"Elegy",
	"Raindance",
	"RC Tiger",
	"Flash",
	"Tahoma",
	"Savanna",
	"Bandito",
	"Freight Flat",
	"Streak Carriage",
	"Kart","Mower",
	"Duneride",
	"Sweeper",
	"Broadway",
	"Tornado",
	"AT-400",
	"DFT-30",
	"Huntley",
	"Stafford",
	"BF-400",
	"Newsvan",
	"Tug",
	"Trailer 3",
	"Emperor",
	"Wayfarer",
	"Euros",
	"Hotdog",
	"Club",
	"Freight Carriage",
	"Trailer 3",
	"Andromada",
	"Dodo",
	"RC Cam",
	"Launch",
	"Police Car (LSPD)",
	"Police Car (SFPD)",
	"Police Car (LVPD)",
	"Police Ranger",
	"Picador",
	"S.W.A.T. Van",
	"Alpha",
	"Phoenix",
	"Glendale",
	"Sadler",
	"Luggage Trailer A",
	"Luggage Trailer B",
	"Stair Trailer",
	"Boxville",
	"Farm Plow",
	"Utility Trailer"
};

j’espère qu'ils soient utile, j'en rajoute d'autres quand j'aurais d'autres idées.

Attention, ton tableau est static global, préviens qu'il ne peut être utilisé que dans le même fichier où il est déclaré.

Partager ce message


Lien à poster
Partager sur d’autres sites
stock GetColor(string[])
{
    new string[10];
    format(string,sizeof(string),"{%06x}",((color >>> 8) & 0xFFFFFF));
    return string;
}  
GetColor(0x00767CFF);
{00767C}

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 3 heures, MrAlexisX2 a dit :
stock GetColor(string[])
{
    new string[10];
    format(string,sizeof(string),"{%06x}",((color >>> 8) & 0xFFFFFF));
    return string;
}  
GetColor(0x00767CFF);
{00767C}

Ne fonctionnera pas et puis je doute que tu saches comment fonctionne ce code, puisque ça relève d'un niveau assez élevé sur la manipulation de bits. (même si c'est rien de compliqué)

Modifié par Dutheil

Partager ce message


Lien à poster
Partager sur d’autres sites

Yop voici quelque fonction utile si on débute ça m'avais bien servi ( Credit : je m'en rappel plus ^^ ) :

 

stock Slap(playerid)
{
	new Float:Pos[3];
	GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2] );
	SetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]+10);
	return 1;
}

stock GetVehicleSpeed(vehicleid)
{
        if(vehicleid != INVALID_VEHICLE_ID)
        {
                new Float:Pos[3],Float:VS ;
                GetVehicleVelocity(vehicleid, Pos[0], Pos[1], Pos[2]);
                VS = floatsqroot(Pos[0]*Pos[0] + Pos[1]*Pos[1] + Pos[2]*Pos[2])*200;
                return floatround(VS,floatround_round);
        }
        return INVALID_VEHICLE_ID;
}

stock SendMessageToAdmins(color,const msg[]) // envoi un message a tout les admin Rcon 
{
   for (new i=0; i<MAX_PLAYERS; i++)
   {
      if (IsPlayerConnected(i) && IsPlayerAdmin(i)) SendClientMessage(i,color,msg);
   }
}

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Voici deux fonctions assez simples pour changer la couleur d'un TD sans devoir le cacher puis le remontrer :

stock TextDrawColorEx(Text:TD, color, playerid=INVALID_PLAYER_ID)
{	
	TextDrawColor(Text:TD, color);

	if(playerid != INVALID_PLAYER_ID)
	{
		if(IsPlayerConnected(playerid))
			TextDrawHideForPlayer(playerid, Text:TD),
			TextDrawShowForPlayer(playerid, Text:TD);
	}
	
	else
		TextDrawHideForAll(Text:TD),
		TextDrawShowForAll(Text:TD);
	
	return 1;
}

stock PlayerTextDrawColorEx(playerid, PlayerText:TD, color)
{
	if(!IsPlayerConnected(playerid)) return 1;
	
	PlayerTextDrawColor(playerid, PlayerText:TD, color);

	PlayerTextDrawHide(playerid, PlayerText:TD),
	PlayerTextDrawShow(playerid, PlayerText:TD);
	
	return 1;
}

 

Voici une fonction qui fait la même chose, 2 en 1 en jouant avec le mot-clé de pré-processeur tagof :

stock SetTextDrawColorEx({Text, PlayerText}:TD, color, playerid=INVALID_PLAYER_ID, tag=tagof(TD))
{
	if(tag == tagof(Text:))
	{
		TextDrawColor(Text:TD, color);
	
		if(playerid != INVALID_PLAYER_ID)
			if(IsPlayerConnected(playerid))
				TextDrawHideForPlayer(playerid, Text:TD),
				TextDrawShowForPlayer(playerid, Text:TD);
		
		else
			TextDrawHideForAll(Text:TD),
			TextDrawShowForAll(Text:TD);
    }
	
	else
	{
		if(playerid == INVALID_PLAYER_ID) return 1;
		
		PlayerTextDrawColor(playerid, PlayerText:TD, color);

		PlayerTextDrawHide(playerid, PlayerText:TD),
		PlayerTextDrawShow(playerid, PlayerText:TD);
	}
	
	return 1;
}

 

Partager ce message


Lien à poster
Partager sur d’autres sites

On se demande ou t'a eu l'idée :833d71d6583cd3360be26574071fcdd5:

Partager ce message


Lien à poster
Partager sur d’autres sites

jaber tes fonctions sont trés simples :) mais les autres sont un peu compliqués dutheil tu codes ton cul ou quoi je vois jamais ses trucs autre part :P

Partager ce message


Lien à poster
Partager sur d’autres sites

Le slap de Jaber m'a fait pensé a ça

 

#define Freeze(%0) 			      TogglePlayerControllable(%0, 0)
#define Unfreeze(%0)                          TogglePlayerControllable(%0, 1)

 

Simple, utile.

Modifié par Black

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui les choses simples restent utile je script de cette façon a peu prés 

Partager ce message


Lien à poster
Partager sur d’autres sites

mes fonctions sont COMPRÉHENSIBLE pour un débutant mon but c'est pas de faire le plus complex :1d4c67efd0b1862cc31ebcf930c674d6:

Partager ce message


Lien à poster
Partager sur d’autres sites

:P pourquoi tu comprends ce que dutheil a fait ? j'ai pas compris celui de generatetoken moi

Modifié par yani

Partager ce message


Lien à poster
Partager sur d’autres sites

Le code de dutheil est pas difficile a comprendre '-' , Stop hors sujet sinon dutheil va nous Fist :1ba9810cb3aed8b43600be7c40c20a94:

Partager ce message


Lien à poster
Partager sur d’autres sites

Fonction que j'ai faite pour moi dans le cas de l'utilisation de la commande /ban.

 

Avant petite explication :

Actuellement je l'ai formatée de cette manière : /ban [ID/Partie du pseudo] [Temps : 0 -> permanent OU temps s/m/h/j] [Raison]

 

En se basant sur le formatage grâce à mon include dth_time, on peut obtenir le nombre de secondes, par rapport à ce format : "4j3h2m1s" (4 jours, 3 heures, 2 minutes et 1 secondes) = 356 521 secondes.

 

Donc : /ban Eidorian 4j3h2m1s Admin pas sérieux <3

 

Mais j'ai voulu y ajouter une option supplémentaire, savoir si on veut le bannir pseudo ou ip, ou les deux.

J'ai donc créé une fonction pour connaître le type de ban que je souhaite, qui sera sous ce format : "p+i" pour pseudo et ip.

 

enum
{
	INVALID_BAN_TYPE,
	PSEUDO_BAN_TYPE,
	IP_BAN_TYPE,
	TWICE_BAN_TYPE
}

 

// native GetBanType(const buf[]);
stock GetBanType(const buf[])
{
	new
		l = strlen(buf);

	if(buf[0] == '+' || buf[l-1] == '+') return INVALID_BAN_TYPE;

	new
		bool:gb[email protected],
		bool:[email protected],
		bool:[email protected];

	for(new i = 0; i < l; i++)
	{
		switch(buf[i])
		{
			case 'p', 'P': {if([email protected]) return INVALID_BAN_TYPE; [email protected] = true;}
			case 'i', 'I': {if([email protected]) return INVALID_BAN_TYPE; [email protected] = true;}
			case '+': {if([email protected]) return INVALID_BAN_TYPE; [email protected] = true;}
			
			default: return INVALID_BAN_TYPE;
		}
	}

	return ([email protected] ? ([email protected] ? ([email protected] ? TWICE_BAN_TYPE : INVALID_BAN_TYPE) : PSEUDO_BAN_TYPE) : ([email protected] ? IP_BAN_TYPE : INVALID_BAN_TYPE));
}

Voici un test avec ce code :

main()
{		
	new const
		a[][] =
		{
			"p+i",
			"i",
			"p",
			"P+I",
			"I",
			"P",			
			"p+",
			"i+",
			"+p",
			"+i",
			"a+p",
			"a+a",
			"p+++i"
		};

	for(new i = 0; i < sizeof(a); i++)
	{
		new
			bt = GetBanType(a[i]);
	
		switch(bt)
		{
			case INVALID_BAN_TYPE: printf("%s -> INVALID_BAN_TYPE", a[i]);
			case PSEUDO_BAN_TYPE: printf("%s -> PSEUDO_BAN_TYPE", a[i]);
			case IP_BAN_TYPE: printf("%s -> IP_BAN_TYPE", a[i]);
			case TWICE_BAN_TYPE: printf("%s -> TWICE_BAN_TYPE", a[i]);
		}
	}
}

 

Résultat :

p+i -> TWICE_BAN_TYPE
i -> IP_BAN_TYPE
p -> PSEUDO_BAN_TYPE
P+I -> TWICE_BAN_TYPE
I -> IP_BAN_TYPE
P -> PSEUDO_BAN_TYPE
p+ -> INVALID_BAN_TYPE
i+ -> INVALID_BAN_TYPE
+p -> INVALID_BAN_TYPE
+i -> INVALID_BAN_TYPE
a+p -> INVALID_BAN_TYPE
a+a -> INVALID_BAN_TYPE
p+++i -> INVALID_BAN_TYPE

 

Modifié par C_far

Partager ce message


Lien à poster
Partager sur d’autres sites

Une fonction que je viens de coder qui permet de ne garder que les caractères alpha (seulement les lettres et accents) :

 

stock GetOnlyAlphaExt(const buf[])
{
	new 
		l = strlen(buf),
		result[256];
		
	for(new i = 0, b = 0; i < l; i++, b++)
		switch(buf[b])
		{
			case 'a' .. 'z', 'A' .. 'Z', 'À' .. 'ÿ': result[i] = buf[b];
			default: 
			{
				for(new j = b; j < l; j++)
					switch(buf[j])
					{
						case 'a' .. 'z', 'A' .. 'Z', 'À' .. 'ÿ': 
						{
							result[i] = buf[j];
							b++;
							
							break;
						}
					}
			}
		}
		
	return result;
}

 

Voici un test :

main()
{		
	print(GetOnlyAlphaExt("bonjour-je m'appelle_timothé"));
}

 

Résultat :

bonjourjemappelletimothé

 

Modifié par C_far

Partager ce message


Lien à poster
Partager sur d’autres sites

Une fonction pour générer un Token de 32 caractères :

stock GenerateToken()
{
	static
		str[33] = {EOS, ...};
		
	for(new i = 0; i < 32; i++)
		str[i] = random(2) ? random('9'-'0')+'0' : random('z'-'a')+'a';
	
	return str;
}

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Utile

 stock SetPlayerMoney(playerid, cash)
{
ResetPlayerMoney(playerid);
return GivePlayerMoney(playerid, cash);
}



			
		

Partager ce message


Lien à poster
Partager sur d’autres sites
IsPlayerInArea(playerid, bool:height, Float:MinX, Float:MinY, Float:MinZ = 0.0, Float:MaxX, Float:MaxY, Float:MaxZ = 0.0)
{
	new Float:Xa, Float:Ya, Float:Za;
	GetPlayerPos(playerid, Xa, Ya, Za);
	return (height) ? (MaxX >= Xa >= MinX && MaxY >= Ya >= MinY && MaxZ >= Za >= MinZ) : (MaxX >= Xa >= MinX && MaxY >= Ya >= MinY);
}

 

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