Peršokti į turinį
Negalima prašyti ar platinti betkokių žaidimą (multiplayer) palengvinančių programų ir scriptų! Kitaip bus taikoma 1.21. taisyklė

Skriptas || Max Ping


Lukas_Cool

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3683 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Skriptas ir pamoka kurta mano.

 

 

Pradėkime.

 

Gamemodo viršuje pasirašome:

forward KickPing(playerid);

Gamemodo apačioje irašome:

public KickPing(playerid)
{
	if(GetPlayerPing(playerid) >= 500) //500 tai jusu max ping, galite keisti
	{
		new pName[64];
		GetPlayerName(playerid, pName, sizeof(pName)); // Išgauname nick'a
		new str[128];
		format(str, sizeof(str), " Serveris: Žaidėjas %s Viršijo leistina pinga {FF0000}%d", pName, max_ping); // Suformatuojame žinute
		SendClientMessageToAll(PG, str); // Išsiunčiame žinute visiems
		Kick(playerid); // Iškickinam žaidėja
	}
}

Pamoka tikrai lengva, jei ko vistiek nesuprasit, SKYPE: samp.lukascool

Nuoroda į komentarą
Dalintis per kitą puslapį

Pridėk timer'į, nes kitaip niekas neveiks.

SetTimer("Ping", 1000, true);

(Sukurs taimerį "Ping" suveiksianrį po vienos sekūndės, besikartojantį)

Paskui apačioj

 

public Ping()

{

 // Funkcija

 return 1;

}

Redaguota , nario Arnas'Cousins
Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 2 savaičių...

Skriptas ir pamoka kurta mano.

 

 

Pradėkime.

 

Gamemodo viršuje pasirašome:

forward KickPing(playerid);

Gamemodo apačioje irašome:

public KickPing(playerid)
{
	if(GetPlayerPing(playerid) >= 500) //500 tai jusu max ping, galite keisti
	{
		new pName[64];
		GetPlayerName(playerid, pName, sizeof(pName)); // Išgauname nick'a
		new str[128];
		format(str, sizeof(str), " Serveris: Žaidėjas %s Viršijo leistina pinga {FF0000}%d", pName, max_ping); // Suformatuojame žinute
		SendClientMessageToAll(PG, str); // Išsiunčiame žinute visiems
		Kick(playerid); // Iškickinam žaidėja
	}
}

Pamoka tikrai lengva, jei ko vistiek nesuprasit, SKYPE: samp.lukascool

Žinok, mano nuomone su šituo kodu reiktų paleisti skirtingus timer'ius kiekvienam atskiram žaidėjui prisijungus. Daleiskim yra 100 žaidėjų prisijungusių, tai reiktų 100 timerių, kad tikrintų kiekvieną atskirai. Kodėl taip sakau - tai dėl playerid. Playerid tai šneka eina apie žaidėją, kuris kažkokiu būdu nusigavo iki KickPing callback'o.

 

Ką siūlau padaryti, tai naudoti vieną bendrą timerį, kuris tikrins visus prisijungusius žaidėjus serveryje iš eilės. Tokiu būdu išsaugosi vis kažkiek resursų. Kodas:

// po OnGameModeInit
SetTimer("KickPing",5000,true);

// Apačioje skripto
forward KickPing();
public KickPing()
{
for(new p; p < MAX_PLAYERS; p++)
{
new max_ping = 500; // tiesiog pakeiskite skaiciu i savo norima ping limita
if(GetPlayerPing(p) >= max_ping)
{
new pName[64];
GetPlayerName(p, pName, sizeof(pName));
new str[128];
format(str, sizeof(str), " Serveris: Žaidėjas %s Viršijo leistina pinga {FF0000}%d", pName, max_ping);
SendClientMessageToAll(PG, str);
Kick(p);
}
}
return 1;
}

p - atstovauja žaidėjui, taip pat kaip ir playerid.

max_ping - pastebėjau, kad padarei klaidelę arba darydamas arba kopijuodamas (dabar nesvarbu) ir neįvardinai max_ping t.y. nepaaiškinai skriptui, kokia yra max_ping reikšmė.

 

Dėl pačio timerio tikrinimo laiko (kas kiek laiko tikrina žaidėjų pingą) reikia palaikyti didesnį nei 1 sekundę, kadangi žaidėjai kartais gali turėti tokį ping vieną sekundę (dėl tam tikros priežasties), o kitą sekundę nebeturėti. Jei ping'as yra pastoviai aukštas (pvz. 5 sekundes ištysai laikėsi 500 ar aukščiau), tada būtų logiškiau išmesti žaidėją iš serverio.

 

Sėkmės.

Redaguota , nario E-Me
Nuoroda į komentarą
Dalintis per kitą puslapį


#define PING_LIMITAS (800)

public OnPlayerUpdate(playerid)

{

if( GetPlayerPing(playerid) > PING_LIMITAS )

{

static

msg[64],

name[MAX_PLAYER_NAME]

;

GetPlayerName(playerid, name, MAX_PLAYER_NAME);

SendClientMessage(playerid, 0xFFFFFFFF, "* Jūsų ping yra per didelis, todel esate išmestas iš serverio!");

format(msg, sizeof(msg), "%s buvo išmestas dėl per didelio ping!", name);

SendClientMessageToAll(0xFFFFFFFF, msg);

}

return 1;

}

Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3683 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...