Jump to content
  • 0

pomoc hraci v ls, sf, lv


RoBiK

Dotaz

Čau, urobil som si takú vec že to do /server napíše že kolko je hráčov v LS,SF,LV, všetko mi funguje okrem lv... proste idem z /ls do /sf a to funguje, ale ked idem do /lv tak nič.. neviem čo tam mám zle, predom ďakujem :).

public OnPlayerUpdate(playerid)
{

    if(IsPlayerInArea(playerid,-151, -2964, 2997, -687.5))
    {
	if(somsf[playerid]==1)
	{
	somls[playerid]=1;
	somlv[playerid]=0;
	somsf[playerid]=0;
	lsp++;
	sfp--;
	}
	}
	else if(IsPlayerInArea(playerid,-151, -2964, 2997, -687.5))
	{
	if(somlv[playerid]==1)
	{
	somls[playerid]=1;
	somlv[playerid]=0;
	somsf[playerid]=0;
	lvp--;
	lsp++;
	}
	}
	else if(IsPlayerInArea(playerid,-2925, -919.5, -1212, 1594.5))
	{
	if(somls[playerid]==1)
	{
	somls[playerid]=0;
	somlv[playerid]=0;
	somsf[playerid]=1;
	lsp--;
	sfp++;
	}
	}
	else if(IsPlayerInArea(playerid,-2925, -919.5, -1212, 1594.5))
	{
	if(somlv[playerid]==1)
	{
	somls[playerid]=0;
	somlv[playerid]=0;
	somsf[playerid]=1;
	lvp--;
	sfp++;
	}
	}
    else if(IsPlayerInArea(playerid,-505, 491.5, 2841, 2933.5))
	{
	if(somls[playerid]==1)
	{
	somls[playerid]=0;
	somlv[playerid]=1;
	somsf[playerid]=0;
	lvp++;
	lsp--;
	}
	}
 	else if(IsPlayerInArea(playerid,-505, 491.5, 2841, 2933.5))
	{
	if(somsf[playerid]==1)
	{
	somls[playerid]=0;
	somlv[playerid]=1;
	somsf[playerid]=0;
	sfp--;
	lvp++;
	}
	}
	return 1;
}

Link to comment
Share on other sites

6 odpovědí na tuto otázku

Recommended Posts

  • 0
  • Globální moderátor

Mimo problému: Chudák server, takéto veci v OnPlayerUpdate nemajú čo robiť, navyše nekontroluješ či už náhodou v tom LV/SF/LS už nieje takže obsah podmienky sa vykoná aj keď tam už je aj keď je to zbytočné.

Update funkcia by sa totižto mala volať každý frame, v skratke je to veľmi veľa volaní za moc krátky čas.

Link to comment
Share on other sites

  • 0

Zdravím,

už několikrát se tu říkalo, že OnPlayerUpdate vytěžuje dost tvůj server a ty tam nacpeš toto. Tady jsem ti to trochu upravil, akorát by to ještě chtělo, abys sem postnul fci IsPlayerInArea. Taky může být chyba klidně v souřadnicích.

#define MAX_PLAYERS_EX 50
new playerCity[MAX_PLAYERS_EX]; //1 = LS, 2 = SF, 3 = LV
new CityTimer[MAX_PLAYERS_EX];

public OnPlayerSpawn(playerid)
{
	CityTimer[playerid] =  SetTimerEx("CheckCity", 1000, true, "i", playerid);
	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
	KillTimer(CityTimer[playerid]);
	return 1;
}


forward CheckCity(playerid);
public CheckCity(playerid)
{
    if(IsPlayerInArea(playerid,-151, -2964, 2997, -687.5))//LS
    {
		if(playerCity[playerid] != 1) playerCity[playerid] = 1;//tady by snad ani to podmínky být nemuseli
	}
	else if(IsPlayerInArea(playerid,-2925, -919.5, -1212, 1594.5))//SF
	{
	    if(playerCity[playerid] != 2) playerCity[playerid] = 2;
	}
    else if(IsPlayerInArea(playerid,-505, 491.5, 2841, 2933.5))//LV
	{
		if(playerCity[playerid] != 3) playerCity[playerid] = 3;
	}
	return 1;
}

//Tam, kde zjišťuješ kolik je hráčů v jakém městě
stock PlayersInCity(const city)//1 = LS, 2 = SF, 3 = LV; vrátí počet hráčů v daném městě.
{
	new players;
	for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++) if(playerCity[i] == city) players++;
	return players;
}

Jinak abys poznal rozdíl mezi Timerem a OnPlayerUpdate. Timer se opakuje v tom intervalu, který si zadáš (tady v tom případě 1 sekunda), ale onPlayerUpdate se ti vyvolá průměrně 30 během sekundy, navíc není pravidelný - volá se podle toho, co hráč zrovna dělá (wiki).

 

Ke kódy je trochu zlechčený, místo 3 glob. proměnných pro hráče máš 1 a místo 3 glob. proměnných pro každé město máš funkci, která ti vrací aktuální počet hráčů v daném městě.

Edited by GaRGoyLeS
Link to comment
Share on other sites

  • 0

Jednoduše:

new string[128];
format(string, sizeof(string), "V Los Santos je %d hráčů./n", PlayersInCity(1));
format(string, sizeof(string), "%sV San Fierro je %d hráčů./n",string, PlayersInCity(2));
format(string, sizeof(string), "%sV Los Santos je %d hráčů.",string, PlayersInCity(3));
//už jen dát do SCM, SCMTA nebo do textdrawu s tím si už pořadíš, ne? 
Edited by GaRGoyLeS
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...