Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 2652 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

(redaguota)

Susikurk kintamąjį new rekordas; Jį žinoma saugok MySQL. Neverta to daryti OnPlayerUpdate, kadangi jis šaukiamas 30 kartų į sekundę, tad geriau sukurti savo timer'į (SetTimer...). Taip pat naudok šią funkciją (įdėk savo kode):
 

forward GetPlayersOnServer();
public GetPlayersOnServer()
{
	new count;
	foreach(new i: Player)
	{
		count++;
	}
	return count;
}

Su ja gausi žaidėjų skaičių serveryje. Timer'io callback'e tikrink ar žaidėjų kiekis didesnis už tą rekordą. Pvz.:

public Timer....()
{
  if(GetPlayersOnServer() > rekordas)
  {
    	SendClientMessage.... //siunti kad pagerintas rekordas
	rekordas = GetPlayersOnServer();// rekordą nustatai nauju, tad sąlygą neatitiks ir žinutė nebus siunčiama, kol nebus vėl pagerintas rekordas
	return 1;
  }
}

Taip pat nepamišk jo saugoti.

Redaguota , nario haX0r

You're human, you should be scared.

2 minutes prieš, haX0r parašė:

Susikurk kintamąjį new rekordas; Jį žinoma saugok MySQL. Neverta to daryti OnPlayerUpdate, kadangi jis šaukiamas 30 kartų į sekundę, tad geriau sukurti savo timer'į (SetTimer...). Taip pat naudok šią funkciją (įdėk savo kode):
 


forward GetPlayersOnServer();
public GetPlayersOnServer()
{
	new count;
	foreach(new i: Player)
	{
		count++;
	}
	return count;
}

Su ja gausi žaidėjų skaičių serveryje. Timer'io callback'e tikrink ar žaidėjų kiekis didesnis už tą rekordą. Pvz.:


public Timer....()
{
  if(GetPlayersOnServer() > rekordas)
  {
    	SendClientMessage.... //siunti kad pagerintas rekordas
	rekordas = GetPlayersOnServer();// rekordą nustatai nauju, tad sąlygą neatitiks ir žinutė nebus siunčiama, kol nebus vėl pagerintas rekordas
	return 1;
  }
}

Taip pat nepamišk jo saugoti.

Dėkui

8238085281.png

33 minutes prieš, haX0r parašė:

Susikurk kintamąjį new rekordas; Jį žinoma saugok MySQL. Neverta to daryti OnPlayerUpdate, kadangi jis šaukiamas 30 kartų į sekundę, tad geriau sukurti savo timer'į (SetTimer...). Taip pat naudok šią funkciją (įdėk savo kode):
 


forward GetPlayersOnServer();
public GetPlayersOnServer()
{
	new count;
	foreach(new i: Player)
	{
		count++;
	}
	return count;
}

Su ja gausi žaidėjų skaičių serveryje. Timer'io callback'e tikrink ar žaidėjų kiekis didesnis už tą rekordą. Pvz.:


public Timer....()
{
  if(GetPlayersOnServer() > rekordas)
  {
    	SendClientMessage.... //siunti kad pagerintas rekordas
	rekordas = GetPlayersOnServer();// rekordą nustatai nauju, tad sąlygą neatitiks ir žinutė nebus siunčiama, kol nebus vėl pagerintas rekordas
	return 1;
  }
}

Taip pat nepamišk jo saugoti.

o ne geriau naudoti tarp sėkmingo prisijungimo tą funkciją vietoj timerio? 

32 minutes prieš, haX0r parašė:

Susikurk kintamąjį new rekordas; Jį žinoma saugok MySQL. Neverta to daryti OnPlayerUpdate, kadangi jis šaukiamas 30 kartų į sekundę, tad geriau sukurti savo timer'į (SetTimer...). Taip pat naudok šią funkciją (įdėk savo kode):
 


forward GetPlayersOnServer();
public GetPlayersOnServer()
{
	new count;
	foreach(new i: Player)
	{
		count++;
	}
	return count;
}

Su ja gausi žaidėjų skaičių serveryje. Timer'io callback'e tikrink ar žaidėjų kiekis didesnis už tą rekordą. Pvz.:


public Timer....()
{
  if(GetPlayersOnServer() > rekordas)
  {
    	SendClientMessage.... //siunti kad pagerintas rekordas
	rekordas = GetPlayersOnServer();// rekordą nustatai nauju, tad sąlygą neatitiks ir žinutė nebus siunčiama, kol nebus vėl pagerintas rekordas
	return 1;
  }
}

Taip pat nepamišk jo saugoti.

Koks tikslas naudoti OnPlayerUpdate?

new recordCount, playersCount;

public OnGameModeInit()
{
	// Išgauni rekordą iš duomenų bazės.
	recordCount = 10;
	return true;
}

public OnPlayerConnect(playerid)
{
	if(!IsPlayerNPC(playerid)) playersCount++;
	if(playersCount > recordCount)
	{
		recordCount = playersCount;
		SendClientMessageToAll(-1, "Pagerintas rekordas!");
	}
	return true;
}

public OnPlayerDisconnect(playerid, reason)
{
	if(!IsPlayerNPC(playerid)) playersCount--;
	return true;
}

 

(redaguota)
prieš 1 valandą, Vidmantas. parašė:

o ne geriau naudoti tarp sėkmingo prisijungimo tą funkciją vietoj timerio? 

Čia asmeninis kiekvieno patogumas. Šis variantas geras, kadangi yra galimybė valdyti tikrinimo intervalą. Galima tai daryti prisijungiant, bet nebus geriausias variantas.

prieš 1 valandą, Delorian parašė:

Koks tikslas naudoti OnPlayerUpdate?

Na tai kodėl klausi manęs? Negi aš naudojau?

 

Tavo kodas blogas, kadangi bus netikslu tuo atveju, jei žaidėjui išmes registracijos/prisijungimo lentelę ir jis nesuves slaptažodžio. Tuomet bus priskaičiuojamas prie bendro skaičiaus, nepaisant to, kad jis dar nežaidžia. Geresnis variantas priskaičiuoti tuomet, kai jo informacija užkraunama iš duomenų bazės arba sukurta sėkminga registracija ir jis atsispawnina.

 

Prie to paties, mano funkcija daryta public. Ją geriau naudoti stock pavidalu. Kiek senas kodas, tad visko nesužiūrėjau.

Redaguota , nario haX0r

You're human, you should be scared.

(redaguota)
prieš 1 valandą, haX0r parašė:

Čia asmeninis kiekvieno patogumas. Šis variantas geras, kadangi yra galimybė valdyti tikrinimo intervalą. Galima tai daryti prisijungiant, bet nebus geriausias variantas.

Na tai kodėl klausi manęs? Negi aš naudojau?

 

Tavo kodas blogas, kadangi bus netikslu tuo atveju, jei žaidėjui išmes registracijos/prisijungimo lentelę ir jis nesuves slaptažodžio. Tuomet bus priskaičiuojamas prie bendro skaičiaus, nepaisant to, kad jis dar nežaidžia. Geresnis variantas priskaičiuoti tuomet, kai jo informacija užkraunama iš duomenų bazės arba sukurta sėkminga registracija ir jis atsispawnina.

 

Prie to paties, mano funkcija daryta public. Ją geriau naudoti stock pavidalu. Kiek senas kodas, tad visko nesužiūrėjau.

Tiesiog parašiau labiau optimizuotą variantą. Mažiau timerių - mažesnė apkrova. Aišku galima ir šimtus jų turėti, reikia tik mokėti gražiai sudėti, kad neapkrautų serverio. 

Kodas kurį rašiau turėtų būti base ir orientuoti žmogų kur ką rašyti. Nesiruošiu rašyti visos registracijos/prisijungimo forume, kad parodyti, jog kodą pridėti reikėtų po sėkmingo prisijungimo. Galėjau parašyti žodžiu, bet pamaniau tai kiekvieno skoniui. Jeigu į serverį prisijungia 20 žmonių, ir neprisiregistruoja/neprisijungia, tai vistiek yra rekordas, unikalūs vartotojai prisijungė prie serverio, o vadinasi susidomėjimas yra. Iš kitos pusės, apsaugo nuo botų. Botai patys neužsiregistruos ir neprisijungs, nebent nesukursi tokio konkrečiam serveriui. Skonio reikalas, kaip kam patinka, tas taip ir daro.

Btw, kam kurti public, kai gali tiesiog funkcija? Ir stocko nereikia, funkcija gi išnaudojama kode, tai kam tas stockas? Ir prie ko čia senas kodas? Kur konkrečiau, šiek tiek nesupratau sakinio esmės.

Redaguota , nario Delorian
(redaguota)

Jei naudoji foreach, tai žaidėjų skaičių gali išgauti su Itter_Count funkcija. Nes timerio viduje dar po ciklą sukti kad išgauti žaidėjų skaičių - nelogiška.

new bool:addedBonus = false,
	bonusCooldown = 0;

if (Itter_Count(Player) >= 10) {
	if (!addedBonus && bonusCooldown < gettime()) {
		// Premijos kodas.
		addedBonus = true;
	}
} else {
	if (addedBonus) {
		addedBonus = false;
		bonusCooldown = gettime() + 3600;
	}
}

Šitas mano pavizdys turėtų kai bus virš dešimt žaidėjų duoti premija, o kai sumažės žaidėjų ir liks mažiau nei dešimt premijos kodas gaus 1 val. cooldown'ą ir jam praėjus jei vėl pagerinsi rekordą vėl gausi premija.

EDIT: ir nedėk šito kodo į OnPlayerUpdate, jis veikia labai dažnai ir tau bus bereikalingas kvietimas. Juk kai žaidėjas prisijungia - suveikia OnPlayerConnect, tai va būtent į šį callbacką ir dėk savo kodą. Taip išvengsi bereikalingų tikrinimų dažniau, nei prisijungia žaidėjai pas tave į serverį.

Redaguota , nario br1tas

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 2652 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ą...