C_far

Fonctions & Astuces

90 messages dans ce sujet

Il y a 11 heures, Foobar a dit :

J'ai réfléchi un peu sur mon code pour "l’optimiser", j'ai pris model sur la connexion d'un ami algérien sur mon Teamspeak héberger dans le nord de la France. Il à 80ms et 0.02% de paquet perdu donc sa connexion est stable même à 80ms. Donc mon code et bon comme tu as dis mais on va plutôt récupérer les paquet perdu.

WarnBadPingPlayer(playerid)
{
	if (NetStats_PacketLossPercent(playerid) > 1.0%);
    	SendClientMessage(playerid, -1, "Attention, votre connexion est instable);
	return 1;
}

Enfin j'espère j'ai pas encore toute les compétences nécessaire pour confirmer ce code à vous de me dire ci le NetStats samp est logique. Et si ce code fonctionne ont pourraient l'utiliser pour l'état de connexion du serveur et prévenir les joueurs que le serveur reçoit une attaque ou simplement reçoit une perte de connexion.

Tu as pas testés ton code avant de le poster hmhm.
J'ai trouvé ça de mon GM. Je crois que ça sert à rien aussi peu développé x)

new 
	bool:Lagger[MAX_PLAYERS char] = false;

public OnPlayerUpdate(playerid)
{
	if(NetStats_PacketLossPercent(playerid) > 3.5 && !Lagger{playerid} || !Lagger{playerid} && GetPlayerPing(playerid) > 300)
	{
		SendMessageToAdmins(RED, "Admin: "WHITE_U"Le joueur %s semble lagger beaucoup trop et peut être désynchronisé par rapport au serveur!", GetName(playerid, true));
		SendMessageToAdmins(RED, "Admin: "WHITE_U"%s semble avoir un ping de %i ms et un nombre de packets perdus important (%0.2f)", GetName(playerid, true), GetPlayerPing(playerid), NetStats_PacketLossPercent(playerid));
		Lagger{playerid} = true;
	}
	return 1;
}

 

 

EDIT:

Gnagnagna, jamais mettre de fonctions customs sans les poster:

GetName(const playerid, id = false)
{
	static
		str[MAX_PLAYER_NAME+9];

	GetPlayerName(playerid, str, sizeof(str));
	if(id)
		format(str, sizeof(str), "%s (ID: %i)", str, playerid);
	
	return str;
}

---------

SendMessageToAdmins(color, const msg[], va_args<>)
{
	new
		string1[190];

	va_format(string1, sizeof(string1), msg, va_start<2>);

	WriteLogs("AdminMessages.txt", string1);

	foreach(new i : Player)
	{
		if(pAccount[i][pAdmin] > JOUEUR || IsPlayerAdmin(i))
			SCM(i, color, string1);
	}

	return 1;
}

 

Modifié par Dayrion

Partager ce message


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

Tu as pas testés ton code avant de le poster hmhm.
J'ai trouvé ça de mon GM. Je crois que ça sert à rien aussi peu développé x)

 

C'est grave ?

Partager ce message


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

if (NetStats_PacketLossPercent(playerid) > 1.0%);

 

Partager ce message


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

if (NetStats_PacketLossPercent(playerid) > 1.0%);

?

Modifié par Foobar

Partager ce message


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

?

Bah y a pas de point-virgule après les parenthèses d'une condition !

Partager ce message


Lien à poster
Partager sur d’autres sites

Oups bien vu l'aveugle :P

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Voilà une fonction pour print une valeur qui s'affichera sous forme binaire organisée par paquet d'octets et basée sur 32 bits.

stock printBinary(value)
{
	new
		strv[33],
		str[66];
		
	format(strv, sizeof(strv), "%032b", value);
	
	for(new i = 0, j = 0, bool:v = true; i < sizeof(str); i++)
	{
		switch(i)
		{
			case 0, 16, 32, 48, 64: str[i] = '|', v = true;
			default: str[i] = v ? strv[j++] : ' ', v = !v;
		}
	}

	print(!"+---------------+---------------+---------------+---------------+");
	print(str);
	print(!"+---------------+---------------+---------------+---------------+");
	
	print(!" ");
}

 

Voici un exemple d'utilisation avec l'hexadécimal :

main()
{
	printBinary(0xF);
	printBinary(0xFF);
	printBinary(0xFFF);
	printBinary(0xFFFF);
	printBinary(0xFFFFF);
	printBinary(0xFFFFFF);
	printBinary(0xFFFFFFF);
	printBinary(0xFFFFFFFF);
}

Et un exemple d'utilisation le décimal :

main()
{
	printBinary(15);
	printBinary(255);
	printBinary(4095);
	printBinary(65535);
	printBinary(1048575);
	printBinary(16777215);
	printBinary(268435455);
	printBinary(-1);
}

 

Et voici le résultat affiché pour les deux exemples :

+---------------+---------------+---------------+---------------+
|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|
+---------------+---------------+---------------+---------------+
 
+---------------+---------------+---------------+---------------+
|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|
+---------------+---------------+---------------+---------------+
 
+---------------+---------------+---------------+---------------+
|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|
+---------------+---------------+---------------+---------------+
 
+---------------+---------------+---------------+---------------+
|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|
+---------------+---------------+---------------+---------------+
 
+---------------+---------------+---------------+---------------+
|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|
+---------------+---------------+---------------+---------------+
 
+---------------+---------------+---------------+---------------+
|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|
+---------------+---------------+---------------+---------------+
 
+---------------+---------------+---------------+---------------+
|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 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 1|
+---------------+---------------+---------------+---------------+

 

Modifié par C_far

Partager ce message


Lien à poster
Partager sur d’autres sites

Surement optimisable, à vous de me le dire :P

Float:floatval(string[])
{
	new idx = strfind(string, "."),
		convert[6 + EOS],
		Float:result;

	if(idx == -1)
		return float(strval(string));

	strmid(convert, string, idx+1, idx+6);
	result = strval(convert) * 1.0;

	for(new i, j = strlen(convert); i < j; i++)
		result *= 0.1;
	
	return result+0.000001;
}

 

Partager ce message


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

Surement optimisable, à vous de me le dire :P

Float:floatval(string[])
{
	new idx = strfind(string, "."),
		convert[6 + EOS],
		Float:result;

	if(idx == -1)
		return float(strval(string));

	strmid(convert, string, idx+1, idx+6);
	result = strval(convert) * 1.0;

	for(new i, j = strlen(convert); i < j; i++)
		result *= 0.1;
	
	return result+0.000001;
}

 

What is it ? :) 

Partager ce message


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

Surement optimisable, à vous de me le dire :P

Float:floatval(string[])
{
	new idx = strfind(string, "."),
		convert[6 + EOS],
		Float:result;

	if(idx == -1)
		return float(strval(string));

	strmid(convert, string, idx+1, idx+6);
	result = strval(convert) * 1.0;

	for(new i, j = strlen(convert); i < j; i++)
		result *= 0.1;
	
	return result+0.000001;
}

 

Il y a déjà une fonction pour ça : 

native Float:floatstr(const string[]);

http://wiki.sa-mp.com/wiki/Floatstr

Modifié par C_far

Partager ce message


Lien à poster
Partager sur d’autres sites

#define script%0(%1) forward%0(%1); public%0(%1)

 

cela définie une fonction ici script qui fait a la fois forward et public plus obliger d'avoir des lignes de trop jsute pour faire un forward!

Partager ce message


Lien à poster
Partager sur d’autres sites

Fonction basée sur l'originale : http://php.net/manual/fr/function.str-split.php

Particularité, la fonction retourne la valeur maximale de la première dimension où la seconde est (semi-)complétée.

str_split(output[][], const string[], split_length = sizeof(output[]))
{
	new 
		size = 0;

	for(new spl_l = split_length - 1, i = 0, j = 0; string[i] != EOS; i++)
	{
		output[size][j++] = string[i];

		if(j == spl_l)
			j = 0, size++;
	}

	return ++size;
}

 

Exemple :

#include "a_samp"

main()
{
	new
		string[13] = "Bonjour !",
		array[3][5];

	str_split(array, string);

	for(new i = 0; i < sizeof(array); i++)
		printf("<%s>", array[i]);
}

 

Résultat :

<Bonj>
<our >
<!>

 

Modifié par C_far

Partager ce message


Lien à poster
Partager sur d’autres sites

juste pour dire de donnée contribution :D

 

ConvertMSByMinute(minute)
{
	minute = minute * 60000;
	
	if(minute == 0)
	{
		minute = 60 * 60000;
	}
	return minute;
}

 

Partager ce message


Lien à poster
Partager sur d’autres sites

 

Sur les conseil de C_far voici une fonction qui permet d'envoyer un message a tout le monde sauf au id mis dans la syntaxe exepts[]

SendClientMessageToAllExcepts(color, const message[], const excepts[], s = sizeof(excepts))
{	
	for(new i;i < MAX_PLAYERS;i++)
	{
		if(IsPlayerConnected(i)) {
			for(new j; j < s;j++)
			{
				if(excepts[j] == i) break;
				if(j == s-1) printf("%i", i);
			}
		}
	}
	return true;
}

Utilisation :

 

new array[5] = {0, 5, 2, 8, 17};

	SendClientMessageToAllExcepts(-1, "Coucou toi !", array);

 

Et un petit truc pour me la peter un peux x)

1500469868-fonction.png

 

Modifié par vitespirite

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