Fonctions/bouts de code
#1

Yo.

Inspirй par un thread anglais (dis donc ils sont forts ceux lа :o), j'ai dйcidй de crйer ce thread.

Concrиtement, il sert а quoi ?
A partager des bouts de codes ou des fonctions uniques sans crйer un thread avec le prйfixe "include" (car include = bibliothиque et une bibliothиque avec un seul livre c'est pas une bibliothиque m'voyez ?).

Pas de hors sujet s'il vous plait ;)

Le topic original (anglais) est celui ci.

J'en balance quelques unes

randstr et crandom (une string random et un caractиre random)

Utilisation :

[pawn]

new str[31], chr;
randstr(30, str, true);
crandom(chr, false);
printf("Random string : %s | Caractиre random : %c | Valeur ASCII du caractиre : %d", str, chr, chr);

[/pawn]

Fonction :

[pawn]

static const chars[] =
{
65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120
};

static const numbers[] =
{
42, 43, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57
};

static const specials[] =
{
33, 34, 35, 36, 37, 38, 39, 40, 41, 44, 46, 58, 59, 60, 61, 62, 63, 64, 91, 92, 93, 94, 95, 96, 123, 124, 125, 126
};

static const all[] =
{
65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 42, 43, 45, 47,
33, 34, 35, 36, 37, 38, 39, 40, 41, 44, 46, 58, 59, 60, 61, 62, 63, 64, 91, 92, 93, 94, 95, 96, 123, 124, 125, 126
};

static const alphanum[] =
{
65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 42, 43, 45, 47
};

#pragma unused chars, numbers, specials

stock randstr(lenght, string[], bool:specialsc = true)
{
for(new i = 0; i < lenght; i++)
{
do
{
if(specialsc)
{
new j = 33 + random(93); // 126 (max) - 33 (min)
for(new k = 0; k < sizeof(all); k++)
{
if(all[k] == j) string[i] = j, break;
else continue;
}
}
else
{
new j = 48 + random(72);
for(new k = 0; k < sizeof(alphanum); k++)
{
if(alphanum[k] == j) string[i] = j, break;
else continue;
}
}
}
while(string[i] == 0);
}
return 1;
}


stock crandom(&chara, bool:specialc = true)
{
do
{
if(specialsc)
{
new j = 33 + random(93); // 126 (max) - 33 (min)
for(new k = 0; k < sizeof(all); k++)
{
if(all[k] == j) chara = j, break;
else continue;
}
}
else
{
new j = 48 + random(72);
for(new k = 0; k < sizeof(alphanum); k++)
{
if(alphanum[k] == j) chara = j, break;
else continue;
}
}
if(chara != 0) break;
}
while(chara == 0);
return 1;
}

[/pawn]


strreplace - Remplace une partie (oldsub) d'une string (str) par un autre morceau, peu importe que les tailles correspondent ou pas (newsub). (merci а Kilou)

Utilisation :

[pawn]

new str[] = "Salut, suis-je bien sur SMAP ?";
printf(str);
printf("Remplacement...");
strrep(str, "SMAP", "SA-MP");
printf(str);
[/pawn]

Fonction :

[pawn]

#if !defined strreplace
#define strreplace strrep
#endif

stock strrep(str[], oldsub[], newsub[])
{
if(strfind(str, oldsub) == -1) return 0;
new pos[2];
pos[0] = strfind(str, oldsub);
for(new i = 0, l = strlen(str); i < l; i++)
{
if(i <= pos[0] + strlen(oldsub)) continue;
if(str[i] == ' ') break;
}
pos[1] = s_string_var;
strdel(str, pos[0], pos[1]);
strins(str, newsub, pos[0], .maxlength = sizeof(str));
return 1;
}

[/pawn]

ProxDetector йditй avec 5 couleurs qui se substituent selon la distance, qui permet de propager un message sur un radius spйcifique sans utiliser format au prйalable.

Utilisation :

[pawn]

// dans une commande
new pName[MAX_PLAYER_NAME+1];
GetPlayerName(playerid, pName, MAX_PLAYER_NAME+1);
ProxDetector(20.0, playerid, "* %s attrape sa ceinture et l'enfonce dans la boucle.", -1, -1, -1, -1, -1, pName);

[/pawn]

Fonction :

[pawn]

stock ProxDetector__(Float:radi, playerid, const message[], col1, col2, col3, col4, col5, {Float,_}:...)
{
if(!IsPlayerConnected(playerid)) return 1;
static const ARGUMENTS = 8;
new n = (numargs() - ARGUMENTS) * BYTES_PER_CELL, bool:used = false;


if(!n) goto final;


new
arg_start,
arg_end,
fstring[145]
;

#emit CONST.alt col5 // Changer l'argument de cette ligne si vous les rйarrangez (зa doit toujours кtre le dernier argument obligatoire)
#emit LCTRL 5
#emit ADD
#emit STOR.S.pri fstring

#emit LOAD.S.pri n
#emit ADD
#emit STOR.S.pri arg_end

do
{
#emit LOAD.I
#emit PUSH.pri
arg_end -= BYTES_PER_CELL;
#emit LOAD.S.pri arg_end
}
while(arg_end > arg_start);

#emit PUSH.S message
#emit PUSH.C 145
#emit PUSH.ADR fstring

n += BYTES_PER_CELL * 3;

#emit PUSH.S n
#emit SYSREQ.C format

n += BYTES_PER_CELL;

#emit LCTRL 4
#emit LOAD.S.alt n
#emit ADD
#emit SCTRL 4

used = true;

final:
{
new Float:pos[6], Float:f;
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);

foreach(new i : Player)
{
if(GetPlayerVirtualWorld(playerid) != GetPlayerVirtualWorld(i)) continue;
if(i == playerid) continue;
if(radi <= 20.0 && GetPlayerInterior(playerid) != GetPlayerInterior(i)) continue;
GetPlayerPos(i, pos[3], pos[4], pos[5]);

f = VectorSize(pos[0]-pos[3], pos[1]-pos[4], pos[2]-pos[5]);
if(!used)
{
if(f <= radi/16) SCM(i, col1, message);
else if(f <= radi/8) SCM(i, col2, message);
else if(f <= radi/4) SCM(i, col3, message);
else if(f <= radi/2) SCM(i, col4, message);
else if(f <= radi) SCM(i, col5, message);
}
else
{
if(f <= radi/16) SCM(i, col1, fstring);
else if(f <= radi/8) SCM(i, col2, fstring);
else if(f <= radi/4) SCM(i, col3, fstring);
else if(f <= radi/2) SCM(i, col4, fstring);
else if(f <= radi) SCM(i, col5, fstring);
}
}
}
return 1;
}

[/pawn]



mysql_tquery_file - Permet d'exйcuter des requкtes SQL threadйes une par une lorsqu'elles se situent dans un fichier lui-mкme situй dans scriptfiles ! Possibilitй d'appeler une callback lorsque TOUTES les requкtes sont terminйes. (UNE REQUКTE PAR LIGNE SVP)

Utilisation :

[pawn]

mysql_tquery_file(1, "requetes.txt", "OnQueriesFinish", "i", GetTickCount());

// en bas du gm

forward OnQueriesFinish(const &time);
public OnQueriesFinish(const &time)
{
printf("Pour exйcuter toutes les requкtes du fichier requetes.txt, le serveur a mit %d millisecondes", time);
return true;
}

[/pawn]


Fonction :

[pawn]

mysql_tquery_file(const conHandle, const file[], callback[] = "", formt[] = "", {Float,_}:...)
{
new l = strlen(formt);
if((numargs() - 4) != l) return 0;

new bool:passed = false;
if(strlen(callback) <= 1 && l <= 1) goto reading;

static const ARGUMENTS = 4;
new n = (numargs() - ARGUMENTS) * BYTES_PER_CELL;
if(!n) goto reading;

new
parstring[256],
formatted[256],
arg_start,
arg_end;

for(new ii = 0; ii < l; ii++)
{
switch(formt[ii])
{
case 'd': strcat(parstring, "%d, ");
case 'i': strcat(parstring, "%i, ");
case 'f': strcat(parstring, "%f, ");
case 'a', 's': strcat(parstring, "%s, "), formt[ii] = 's';
}
}

#emit CONST.alt formt
#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 -= BYTES_PER_CELL;
#emit LOAD.S.pri arg_end
}
while (arg_end > arg_start);


#emit PUSH.S parstring
#emit PUSH.C 256
#emit PUSH.ADR formatted

n += BYTES_PER_CELL * 4;
#emit PUSH.S n
#emit SYSREQ.C format

n += BYTES_PER_CELL;
#emit LCTRL 4
#emit LOAD.S.alt n
#emit ADD
#emit SCTRL 4

passed = true;

reading:
{
new File:hfile = fopen(file);
new query[256];
if(!hfile) return 0;
while(read_query(hfile, query)) mysql_tquery(conHandle, query);
fclose(hfile);
reading:
{
new File:hfile = fopen(file);
new query[256];
if(!hfile) return 0;
while(read_query(hfile, query)) mysql_tquery(conHandle, query);
fclose(hfile);
if(passed && funcidx(callback) != -1) CallLocalFunction(callback, formt, formatted);
} return 1;
}

[/pawn]

Voilа, si vous en avez qui pourraient кtre pas mal, postez les !
Reply


Messages In This Thread
Fonctions/bouts de code - by S4t3K - 22.07.2014, 16:58
Re : Fonctions/bouts de code - by Kilou - 22.07.2014, 17:34
Re : Fonctions/bouts de code - by S4t3K - 22.07.2014, 20:00
Re : Fonctions/bouts de code - by Sus-Pets - 22.07.2014, 20:02
Re: Fonctions/bouts de code - by driftpower - 22.07.2014, 20:19
Re: Fonctions/bouts de code - by Varkoll_ - 22.07.2014, 20:29
Re : Fonctions/bouts de code - by S4t3K - 22.07.2014, 20:58
Re : Fonctions/bouts de code - by Ivory - 23.07.2014, 15:59
Re : Fonctions/bouts de code - by S4t3K - 23.07.2014, 16:00
Re : Fonctions/bouts de code - by Papawy - 23.07.2014, 16:05
Re : Fonctions/bouts de code - by Ivory - 23.07.2014, 16:06
Re : Fonctions/bouts de code - by S4t3K - 23.07.2014, 16:21
Re : Fonctions/bouts de code - by Kilou - 23.07.2014, 16:41
Re : Fonctions/bouts de code - by S4t3K - 23.07.2014, 18:16
Re : Fonctions/bouts de code - by Ivory - 23.07.2014, 18:40
Re : Fonctions/bouts de code - by S4t3K - 23.07.2014, 18:56
Re : Fonctions/bouts de code - by Kilou - 23.07.2014, 19:25
Re : Fonctions/bouts de code - by S4t3K - 24.07.2014, 04:09
Re : Fonctions/bouts de code - by S4t3K - 24.07.2014, 19:46
Re : Fonctions/bouts de code - by Kilou - 24.07.2014, 20:52
Re : Fonctions/bouts de code - by S4t3K - 24.07.2014, 21:10
Re : Fonctions/bouts de code - by Ruto - 24.07.2014, 23:01
Re : Fonctions/bouts de code - by S4t3K - 24.07.2014, 23:09
Re : Fonctions/bouts de code - by Ruto - 24.07.2014, 23:14
Re: Fonctions/bouts de code - by Baltimore - 25.07.2014, 00:30
Re : Re: Fonctions/bouts de code - by Kilou - 25.07.2014, 00:43
Re : Fonctions/bouts de code - by Ruto - 25.07.2014, 01:33
Re : Fonctions/bouts de code - by S4t3K - 25.07.2014, 03:37
Re : Fonctions/bouts de code - by Kilou - 25.07.2014, 14:25
Re : Fonctions/bouts de code - by Ruto - 25.07.2014, 16:36
Re : Fonctions/bouts de code - by Dutheil - 11.11.2015, 05:46
Re : Fonctions/bouts de code - by S4t3K - 11.11.2015, 08:48

Forum Jump:


Users browsing this thread: 1 Guest(s)