GTA-Center.com » Forum
http://www.gta-center.com/forums/

[GUIDA] Creare un Anti HighPing
http://www.gta-center.com/forums/viewtopic.php?f=40&t=241
Pagina 1 di 2

Autore:  Peppinux AKA Peppe_Stasu [ 07/11/2010, 0:11 ]
Oggetto del messaggio:  [GUIDA] Creare un Anti HighPing

Bene in questa guida spiegherò come creare un semplicissimo Anti HighPing quindi uno script che permetta di far eseguire un'azione scelta da voi sul player che ha il ping più alto del limite (Sempre scelto da voi).

Iniziamo!

Per prima cosa, in cima, creiamo le variabili che ci faranno riconoscere: 1.Il limite di ping - 2.I massimi avvisi di ping - 3.Avvisi che ha ricevuto ogni player. Quindi inseriamo:
Codice:
new
   maxPing = 500,
   maxAvvisiPing = 3,
   avvisiPingRicevuti[MAX_PLAYERS];

Cambiando 500 con il limite di ping e 3 con i massimi avvisi di eccesso ping

Sotto l'OnPlayerConnect mettiamo:
Codice:
avvisiPingRicevuti[playerid] = 0;

Così setteremo che, alla connessione, non si è ricevuto neanche un avviso

Adesso creiamo il vero e proprio "Anti HighPing". Sotto l'OnPlayerUpdate mettiamo:
Codice:
if(GetPlayerPing(playerid) >= maxPing && GetPlayerPing(playerid) != 65535) OnPlayerHaveHighPing(playerid);

Che ci servirà per capire se il ping del playerid che si aggiorna è maggiore o uguale al limite di ping. Se sarà così verrà richiamata la funzione OnPlayerHaveHighPing ((Scusate per il nome ma non sapevo che metterci :asd:)) che adesso creeremo.

Per finire, fuori da tutto, inseriamo questa funzione con la quale decideremo cosa fare quando un player viene avvisato di ping alto:
Codice:
OnPlayerHaveHighPing(playerid)
{
   avvisiPingRicevuti[playerid]++;
   if(avvisiPingRicevuti[playerid] < maxAvvisiPing)
   {
       //Qui mettere le funzioni che devono avvenire se gli avvisi di ping alto sono minori del massimo degli avvisi di ping
   }
   else
   {
       //Qui mettere le funzioni che devono avvenire se gli avvisi di ping alto sono maggiori del massimo degli avvisi di ping
   }
   return 1;
}

Ricordate che sotto il primo if dovrete mettere le funzioni che dovranno avvenire se gli avvisi di ping sono minori dei massimi avvisi e sotto l'else le funzioni che dovranno avvenire se gli avvisi di ping sono maggiori dei massimi avvisi.
Quindi dovrete decidere voi cosa fare!

Per finire, potete anche creare dei comandi (riservati agli admins) che permettano di: 1.Modificare il limite del ping - 2.Modificare il limite degli avvisi - 3.Resettare gli avvisi di un player
Dato che già li ho creati io, potrete direttamente usarli. Ma ricordo che per questi comandi serve lo strtok.
Codice:
//Sotto OnPlayerCommandText
if(!strcmp(cmd, "/setmaxping", true))
{
   if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xF60000AA, "[ERRORE:] Devi essere Admin.");
   new
      tmp[256],
      newMaxPing = strval(tmp),
      pName[24],
      string[128];
   if(!strlen(tmp)) return SendClientMessage(playerid, 0xF6D500AA, "[USO:] /setmaxping [Nuovo limite ping]");
   GetPlayerName(playerid, pName, 24);
   format(string, 128, "[AVVISO:] L'Admin %s ha cambiato il limite di ping da %d a %d.", pName, maxPing, newMaxPing);
   SendClientMessageToAll(0xF66200AA, string);
   maxPing = newMaxPing;
   return 1;
}

if(!strcmp(cmd, "/setmaxpingwarns", true))
{
   if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xF60000AA, "[ERRORE:] Devi essere Admin.");
   new
      tmp[256],
      newMaxAvvisiPing = strval(tmp),
      pName[24],
      string[128];
   if(!strlen(tmp)) return SendClientMessage(playerid, 0xF6D500AA, "[USO:] /setmaxpingwarns [Nuovo limite avvisi ping]");
   GetPlayerName(playerid, pName, 24);
   format(string, 128, "[AVVISO:] L'Admin %s ha cambiato il limite di avvisi ping da %d a %d.", pName, maxAvvisiPing, newMaxAvvisiPing);
   SendClientMessageToAll(0xF66200AA, string);
   maxAvvisiPing = newMaxAvvisiPing;
   return 1;
}

if(!strcmp(cmd, "/resetpingwarns", true))
{
   if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xF60000AA, "[ERRORE:] Devi essere Admin.");
   new
      tmp[256],
      id = strval(tmp),
      pName[24],
      idName[24],
      string[128];
   if(!strlen(tmp)) return SendClientMessage(playerid, 0xF6D500AA, "[USO:] /resetpingwatns [PlayerID]");
   GetPlayerName(playerid, pName, 24);
   GetPlayerName(id, idName, 24);
   format(string, 128, "[AVVISO:] L'Admin %s ha resettato gli avvisi ping a [%d] %s.", pName, id, idName);
   SendClientMessageToAll(0xF66200AA, string);
   return 1;
}


Spero che la guida sia stata utile, specialmente ai novellini. Commentate e se avete dubbi/problemi o altro, beh... postate ^^

Gentilmente non copiate la guida senza inserire i crediti!

Autore:  ReVo_ [ 07/11/2010, 0:16 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

Ottimo lavoro.. anche se meglio non usare l'OnPlayerUpdate sinnò ti kicka subito essendo chiamato ogni 40ms..

Autore:  Angelo [ 07/11/2010, 1:06 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

Semplice ma utile :D

Autore:  Den_Zarock [ 07/11/2010, 3:34 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

Questi 2 valori "maxPing,maxAvvisiPing" si sta di meno a definirli in cima alla GM, meno casino per modificarli e non serve mettere niente nel "OnGameModeInit"..

Autore:  Peppinux AKA Peppe_Stasu [ 07/11/2010, 10:32 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

@Revo: Grazie ma a volte il ping alto dura anche per pochissimi millisecondi. In caso modificherò nel modo migliore. Consigliami tu ;)

@Angelo: Thx :D Comunque le guide semplici possono sempre essere utili ;)

@Den: Beh non cambia molto :asd:

Autore:  Peppe [ 07/11/2010, 10:52 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

Den_Zarock ha scritto:
Questi 2 valori "maxPing,maxAvvisiPing" si sta di meno a definirli in cima alla GM, meno casino per modificarli e non serve mettere niente nel "OnGameModeInit"..

Quoto, definendoli con il #define non vai ad occupare memoria nell'amx :/

Autore:  Peppinux AKA Peppe_Stasu [ 07/11/2010, 11:19 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

Si ma con le variabili, se magari vuoi fare un comando Admin che cambia il ping, puoi. Con i define non lo so D:

Autore:  ReVo_ [ 07/11/2010, 11:34 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

#define MAX_PING 250

Nel Cmd

#undef MAX_PING
#define MAX_PING NUOVOPING

Esempio pratico:

Codice:
#define MAX_PING 250


Codice:
    new newlimit = 5;
   #undef MAX_PING
   #define MAX_PING newlimit
   printf("%d",MAX_PING);

Autore:  Peppinux AKA Peppe_Stasu [ 07/11/2010, 11:39 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

Ok grazie per la dritta. Si può sempre imparare :D. Correggo subito ;)

Autore:  Peppe [ 07/11/2010, 11:39 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

ReVo_ ha scritto:
#define MAX_PING 250

Nel Cmd

#undef MAX_PING
#define MAX_PING NUOVOPING

Esempio pratico:

Codice:
#define MAX_PING 250


Codice:
    new newlimit = 5;
   #undef MAX_PING
   #define MAX_PING newlimit
   printf("%d",MAX_PING);


Cazzo dici :/

I define vengono interpretati al momento della compilazione.

Autore:  ReVo_ [ 07/11/2010, 11:42 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

Peppe ha scritto:
ReVo_ ha scritto:
#define MAX_PING 250

Nel Cmd

#undef MAX_PING
#define MAX_PING NUOVOPING

Esempio pratico:

Codice:
#define MAX_PING 250


Codice:
    new newlimit = 5;
   #undef MAX_PING
   #define MAX_PING newlimit
   printf("%d",MAX_PING);


Cazzo dici :/

I define vengono interpretati al momento della compilazione.



Funziona anche cosi, per il fatto che vengono implementati al momento della compilazione lo so ma come ho fatto io dovrebbe funzionare comunque

Autore:  Peppe [ 07/11/2010, 11:47 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

ReVo_ ha scritto:
Peppe ha scritto:
ReVo_ ha scritto:
#define MAX_PING 250

Nel Cmd

#undef MAX_PING
#define MAX_PING NUOVOPING

Esempio pratico:

Codice:
#define MAX_PING 250


Codice:
    new newlimit = 5;
   #undef MAX_PING
   #define MAX_PING newlimit
   printf("%d",MAX_PING);


Cazzo dici :/

I define vengono interpretati al momento della compilazione.



Funziona anche cosi, per il fatto che vengono implementati al momento della compilazione lo so ma come ho fatto io dovrebbe funzionare comunque


No, come hai fatto tu il comando viene interpretato così:
new newlimit = 5;
printf("%d",newlimit);

Quindi non avrebbe senso.

Autore:  Beyond [ 07/11/2010, 11:48 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

In effetti definire una costante per poi "undefinirla" e per poi definirla con il valore di una variabile.. non è che abbia un filo logico.

Autore:  Peppinux AKA Peppe_Stasu [ 07/11/2010, 11:51 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

Abbiamo capito. Non modifico niente che è meglio :asd:. Stavo per modificare la guida e leggo questo lol. Io la lascio così, tanto funziona lo stesso :ghfuma:. Se qualche Admin/Mod vuole la modifica ma io non ci metto più mano :asd:.

Autore:  ReVo_ [ 07/11/2010, 11:55 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

Beyond ha scritto:
In effetti definire una costante per poi "undefinirla" e per poi definirla con il valore di una variabile.. non è che abbia un filo logico.

Un filo logico ce l'ha quando devi modificare il MAX_PLAYERS oppure MAX_VEHICLES.
Tipo questo
Codice:
#undef MAX_PLAYERS
#define MAX_PLAYERS 20
#undef MAX_VEHICLES
#define MAX_VEHICLES 100

Autore:  Beyond [ 07/11/2010, 11:56 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

ReVo_ ha scritto:
Beyond ha scritto:
In effetti definire una costante per poi "undefinirla" e per poi definirla con il valore di una variabile.. non è che abbia un filo logico.

Un filo logico ce l'ha quando devi modificare il MAX_PLAYERS oppure MAX_VEHICLES.
Tipo questo
Codice:
#undef MAX_PLAYERS
#define MAX_PLAYERS 20
#undef MAX_VEHICLES
#define MAX_VEHICLES 100

Esatto, ma nel tuo esempio non ci stava.

Autore:  Peppe [ 07/11/2010, 11:57 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

ReVo_ ha scritto:
Beyond ha scritto:
In effetti definire una costante per poi "undefinirla" e per poi definirla con il valore di una variabile.. non è che abbia un filo logico.

Un filo logico ce l'ha quando devi modificare il MAX_PLAYERS oppure MAX_VEHICLES.
Tipo questo
Codice:
#undef MAX_PLAYERS
#define MAX_PLAYERS 20
#undef MAX_VEHICLES
#define MAX_VEHICLES 100

Be, quando sono già definite tipo in un include si, ma come avevi fatto tu no o.ò

Autore:  Beyond [ 07/11/2010, 11:58 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

Adesso però forse è meglio ritornare sull'argomento Antiping ;)
Il resto è stato appurato

Autore:  Giuseppe_Mazzei [ 07/11/2010, 13:12 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

Se non sbaglio, da quando il giocatore si connette a qualche secondo dopo che spawni, ha ping 65535 (infatti http://wiki.sa-mp.com/wiki/GetPlayerPing).

Autore:  Den_Zarock [ 07/11/2010, 13:30 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti HighPing

Peppinux AKA Peppe_Stasu ha scritto:
Si ma con le variabili, se magari vuoi fare un comando Admin che cambia il ping, puoi. Con i define non lo so D:

Si le variabili vanno bene per cambiare il ping massimo, e il numero massimo di avvertimenti, ma nella guida non l'hai spiegato, se non devi modificarli in game conviene definirli ;)

Pagina 1 di 2 Tutti gli orari sono UTC + 1 ora [ ora legale ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/