[Pomoc] AFK


Započeo Sottra, Mart 31, 2015, 20:13:43 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Skripta koju koristim: Moja
Detaljan opis problema: Jedan mi je lik juce pomogao oko ovog ali ne radi. Stavicu dole kod. Znaci hocu da mi neko pomogne da napravim da pise iznad igraca koliko je afk i da ga kicka nakon pola sata afkanja. Hvala unapred
Dio skripte:
#undef MAX_PLAYERS
#define MAX_PLAYERS 200 //K

#define COLOR_GREEN 0x33AA33AA

new afkTime[MAX_PLAYERS];

forward oneSecond();
public oneSecond()
{
	for(new i = 0; i < MAX_PLAYERS; i++)
	{
		if(IsPlayerConnected(i) && !IsPlayerNPC(i))
		{
			//Label pocinje pokazivati kada igrac nije u igrici 30 sekundi
			if(afkTime[i] >= 30)
			{
				new caption[32];
				format(caption, sizeof(caption), "AFK - %s seconds.", afkTime[i]);
				SetPlayerChatBubble(i, caption, COLOR_GREEN, 20.0, 1500);
			}
			
			afkTime[i]++;
		}
	}

	return 1;
}

public OnGameModeInit()
{
	SetTimer("oneSecond", 1000, true);
	
	return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
	afkTime[playerid] = 0;

	return 1;
}

public OnPlayerConnect(playerid)
{
	afkTime[playerid] = 0;

	return 1;
}

Neke slike/video za lakse dobivanje pomoci(neobavezno): //

1. Ja nisam lik ja imam ovdje svoj naziv.
2. Sta ti ne radi,sve je fino napravljeno,ne možeš vidjeti ti afk vrijeme na sebi !
Zovni nekog druga na server i ti budi afk on ce vidjeti koliko si odsutan na serveru.. Odbrojavace mu iznad tvoje glave..


1. Nisam znao da ćeš se tolko uvredit što sam te nazvao "lik"
2. Koristim program Sandboxie koji omogućava da pokrenem 2 samp klienta i tako mogu da uÄ'em na server sa 2 igrača i sa jednim mogu vidjeti kad drugi afka.
3. Chat Bubble je postavljen na 1,5 sec i stavio si timer koji se ponavlja svake sekunde i kad bi radilo to iznad igrača bi pisalo samo u sekundama. Zanima me da napravim kao na svim serverima.

Jel mozes da objasnis malo nista te nisam razumeo sta hoces.:)


Citat: FPG_Markoni poslato April 01, 2015, 10:44:29 PRE PODNE
Jel mozes da objasnis malo nista te nisam razumeo sta hoces.:)
Šta me nisi razumio. Šta je nejasno u tome da iznad igrača piše koliko je vremena afk i da kicka igrača koji afka pola sata?

Verujem da postoji i drugi nacin za ovako nesto ali evo kako bih ja to mozda uradio ... Napravis 2 varijable nesto tipa ovako na vrh definises

new Sekunde[MAX_PLAYERS];
new Minuti[MAX_PLAYERS];


Zatim prilikom konekcije postavis varijable na 0 da ne pisem kodove i za to ...

E onda nadjes neki tajmer ili ga napravis http://wiki.sa-mp.com/wiki/SetTimer
Tajmer neka bude od 1 sekunde i onda u njemu jednostavno radis preko foreacha te bi to onda ovako ispalo.

foreach (new i : Player)
{
    if (Provera jel igrac afk)
    {
	Sekunde[i] += 1; // Broji svaku sekundu
	// Ovde ti treba kod za update textlabela koji stoji na igracu i prikazuje sekunde i minute
	if (Sekunde[i] == 60) // Kad skupi 60 sekundi sta dalje
	{
	    Minuti[i] += 1; // Dobija 1 min jer je skupio 60 sekundi
	    Sekunde[i] = 0; // Sekunde se ponovo resetuju
	}
	if (Minuti[i] == 30) // Skupio je 30 min
	{
	    Kick(i); // Kick jer si rekao da posle 30 min to zelis ...
	}
    }
}


I jos napravis to da kada se igrac vrati u igru da mu se poniste minuti i sekunde i obrises 3dtext za prikaz afk vremena ili kako ti to vec zelis da bude :D
Poslednja Izmena: April 01, 2015, 16:32:33 POSLE PODNE od â–… â–† â–ˆ Rudimental â–ˆ â–† â–…

To moje ti je primjer kako otprilike treba da bude.
Ti ako si skripter trebao bi da znas kako iz takvog sistemcica da napravis to sto trazis.
Ja tad nisam imao vremena da pravim tebi onako kako ti zelis..
Mada i nisam dužan :)

Citat: â–... â–† â–ˆ Rudimental â–ˆ â–† â–... poslato April 01, 2015, 13:25:46 POSLE PODNE
Verujem da postoji i drugi nacin za ovako nesto ali evo kako bih ja to mozda uradio ... Naprcz avis 2 varijable nesto tipa ovako na vrh definises

new Sekunde[MAX_PLAYERS];
new Minuti[MAX_PLAYERS];


Zatim prilikom konekcije postavis varijable na 0 da ne pisem kodove i za to ...

E onda nadjes neki tajmer ili ga napravis http://wiki.sa-mp.com/wiki/SetTimer
Tajmer neka bude od 1 sekunde i onda u njemu jednostavno radis preko foreacha te bi to onda ovako ispalo.

foreach (new i : Player)
{
    if (Provera jel igrac afk)
    {
	Sekunde[i] += 1; // Broji svaku sekundu
	// Ovde ti treba kod za update textlabela koji stoji na igracu i prikazuje sekunde i minute
	if (Sekunde[i] == 60) // Kad skupi 60 sekundi sta dalje
	{
	    Minuti[i] += 1; // Dobija 1 min jer je skupio 60 sekundi
	    Sekunde[i] = 0; // Sekunde se ponovo resetuju
	}
	if (Minuti[i] == 30) // Skupio je 30 min
	{
	    Kick(i); // Kick jer si rekao da posle 30 min to zelis ...
	}
    }
}


I jos napravis to da kada se igrac vrati u igru da mu se poniste minuti i sekunde i obrises 3dtext za prikaz afk vremena ili kako ti to da vec zelis da bude :D
To što si ti napisao i ja sam planirao, ali problem mi je bio kako da napravim provjeru da li je igrač afk. Mislio sam da posoji neki public OnPlayerAwayFromKeyboard ili tako nešto. Znači jedini problem mi je kako da napravim provjeru da li je igrač afk.

K ROSE ti je u prethodnoj temi dao primer pogledaj ponovo, vi bi da vam sve neko napravi i servira na tacni.
Poslednja Izmena: April 01, 2015, 19:20:01 POSLE PODNE od Seiz

to provjeravas tako sto napravs tajmer i da se on pokrene kada se igrac konektuje,i onda svakih 60 sekundi pokretati taj tajmer, a taj tajmer ce provjeravati poziciju igraca,ako je pozicija igraca ista svaki 60 s onda je AFK i stavi mu varijablu neku afk[playerid]=1; ,a poziciju naravno moras negdje upisivat napravis new Float:AFK[3][MAX_PLAYERS]; i tako ces upisati od svakog igraca poziciju u tom tajmeru AFK . nadam se da si skontao
~ Server Pernambucho Roleplay ~
Forum : ~ http://pernambucho.com/ ~
Facebook :~ https://www.facebook.com/events/331686430351597 ~

Owner : JA :D

Citat: Seiz poslato April 01, 2015, 19:19:17 POSLE PODNE
K ROSE ti je u prethodnoj temi dao primer pogledaj ponovo, vi bi da vam sve neko napravi i servira na tacni.
On je napravio kad igrač stisne bilo koju tipku da bude afktime[playerid] = 0; Ne mora značit da igrač afka ako nije stisnuo nijednu tipku

Citat: arnel avdic poslato April 01, 2015, 19:27:22 POSLE PODNE
to provjeravas tako sto napravs tajmer i da se on pokrene kada se igrac konektuje,i onda svakih 60 sekundi pokretati taj tajmer, a taj tajmer ce provjeravati poziciju igraca,ako je pozicija igraca ista svaki 60 s onda je AFK i stavi mu varijablu neku afk[playerid]=1; ,a poziciju naravno moras negdje upisivat napravis new Float:AFK[3][MAX_PLAYERS]; i tako ces upisati od svakog igraca poziciju u tom tajmeru AFK . nadam se da si skontao
Hvala pokušaću to

Citat: Sottra poslato April 01, 2015, 19:30:50 POSLE PODNE
Citat: Seiz poslato April 01, 2015, 19:19:17 POSLE PODNE
K ROSE ti je u prethodnoj temi dao primer pogledaj ponovo, vi bi da vam sve neko napravi i servira na tacni.
On je napravio kad igrač stisne bilo koju tipku da bude afktime[playerid] = 0; Ne mora značit da igrač afka ako nije stisnuo nijednu tipku

Taj sistem ja koristim kod sebe u modu,samo sto sam ja kod sebe napravio sate,minute + sekunde..
TakoÄ'er moja afk detekcija je ubacena u anticheat koji sam ja doradio i poboljÅ¡ao..
I ja nisam napravio u tom sistemu ako igrac pritisne neku tipku da mu bude afkvrijeme na varijabli 0



Molimo te da procitas pravila foruma te da onda otvoris temu po pravilima.

Razlog zakljucavanja:

BUMP/DP je dozvoljen svakih 24h !
PS: Ako vec zelis samo te provere oko afka koristi includ paused.

Pravila:

Glavna pravila Balkan SA:MP foruma .

Razgovor u vezi PAWN-Skriptanja .