Jump to content
EnTeRs

script Away From keyboard [ AFK ] System

Recommended Posts

Zdravím,
Dávám sem FilterScript který nese název AFK System.
Jedná se o Script, který je hodně využívaný, a už sem zde na forum zahlédl pár topicu které se týkali tipu " Máte někdo AFK system "

 

Rozhodl sem se že něco zkusím zpracovat a podařilo se.

 

Příkazy

/afk

/back

 

Nedostatky

 

Jelikož sem si nevzpoměl na funkci která zmrazí hráče a nastaví nesmrtelnost, udělal sem to tak, že hráč, který zadá příkaz /afk tak mu nastaví životy na 10 milionu %

Tuším že to ej blbost ale tak snad se bude líbit.

 

#include <a_samp>
#include <zcmd>

#define SCMTA SendClientMessageToAll
#define SCM SendClientMessage

public OnPlayerConnect(playerid)
{
    SCM(playerid,-1,"{FF0000} [ AFK SYSTEM ]{00ffff}Server používá {870000}AFK SYSTEM {00ffff}by {870000}Tommy");
	return 1;
}

CMD:afk(playerid)
{
	new Jmeno[MAX_PLAYER_NAME];
	new string[128];
	GetPlayerName(playerid,Jmeno,MAX_PLAYER_NAME);
	format(string, sizeof(string), "{00ffff}Hráč {870000}%s {00ffff}odešel nachvilku od PC.", Jmeno);
	SCM(playerid,-1,"{00ffff}Pro návrat do hry použij {870000}/back");
	SCMTA(0xAA3333AA, string);
	TogglePlayerControllable(playerid, 0);
	SetPlayerHealth(playerid, 100000000);
	return 1;
}
CMD:back(playerid)
    {
	new Jmeno[MAX_PLAYER_NAME];
	new string[128];
	GetPlayerName(playerid,Jmeno,MAX_PLAYER_NAME);
	format(string, sizeof(string), "{00ffff}Hráč {870000}%s {00ffff}se vrátil k PC.", Jmeno);
    SCM(playerid,-1,"{00ffff}Přejeme opět příjemné hraní.");
	SCMTA(0xE0FFFFFF, string);
	TogglePlayerControllable(playerid, 1);
	SetPlayerHealth(playerid, 100);
	return 1;
	}

 

zanechte autora scriptu. Děkuji.

Sdílet tento příspěvek


Link to post
Share on other sites

No nevim teda... uprimne mi to prijde brutalne odflakly. Tech AFK systemu je az az a nektere z nich jsou mnohem propracovanejsi. 

> Jelikož sem si nevzpoměl na funkci která zmrazí hráče a nastaví nesmrtelnost, udělal sem to tak, že hráč, který zadá příkaz /afk tak mu nastaví životy na 10 milionu %

really?

Sdílet tento příspěvek


Link to post
Share on other sites
před 2 hodinami, Smexy said:

Ty HP jsou super, každej se zcela obyčejným s0beitem, který s tím trochu umí, udělá to, aby si jen dal afk a ta hp mu zůstala... A nemusí ani používat detekovatelný Invulnerability cheat.

Jinak dobrý.

Takže ty HP jak sem nastavil na 10 000 000 % jsou v pohode a lepší ? 

Sdílet tento příspěvek


Link to post
Share on other sites

Ti lidé v helpech většinou shání automatický AFK systém, tedy když když stisknou Esc nebo se přepnou do Windowsu, systém to detekuje a učiní patřičné kroky.

To, co nám tu prezentuješ, dokáže i pawner-začátečník sám. 

Sdílet tento příspěvek


Link to post
Share on other sites
před 1 hodinou, Arash said:

Njn kopírka však tento afk systém už hodně lidí využívá a je úplně stejný navíc tento afk systém je myslím všude na netu tak i na samp fórum apod. Takže další kid

Další kid co nadává na internetu ty jsou taky všude 😄

Sdílet tento příspěvek


Link to post
Share on other sites

Rozhodne tie tutoriály rob viac krajšie, a kód tiež. Kebyže som začiatočník a potreboval by som AFK Systém, tak určite by som použil Scydov aj keď je na YSI. Pozri si Scydove návody a tvoje. On má vždy pekne urobený tutoriál a kód tiež (vždy jednoduchý..) aby to pochopil aj deb*l, ty to máš, jak si sám povedal, "na rýchlo". Tie #define SendClient.. SCM sa mi nikdy nepáčili, viem že to je "uľahčenie" ale vždy som to neznášal, je to škaredé. A jak som už písal, že Scydove návody sú jednoduché, tak jednoduchšie a krajšie je

#include "YSI\y_va"
#include "izcmd"

new bool:AFK[MAX_PLAYERS];

CMD:afk(playerid, params[])
{
if(AFK[playerid])
{
	if(sscanf(params, "s", params))
	{
		va_SendClientMessageToAll(-1, "{808080}Hráč %s odišiel od PC.", Nick(playerid));
		TogglePlayerControllable(playerid, false);
		AFK[playerid] = (true);
	}
	else
	{
		va_SendClientMessageToAll(-1, "{808080}Hráč %s odišiel od PC. [ Dôvod: %s ]", Nick(playerid), params);
		TogglePlayerControllable(playerid, false);
		AFK[playerid] = (true);
	}
}
else
{
	SendClientMessageToAll(-1, "{808080}Hráč %s sa vrátil k PC.", Nick(playerid));
	TogglePlayerControllable(playerid, true);
	AFK[playerid] = (false);
}
return (true);
}

či nie ? Jednoduché, pekne spravený kód, bez zbytočných vecí (#define SCM..), 3 "funkcie" v 1 príkaze, ty si dal 2 do 2 príkazov a dôvod ? Každý server má AFK kde môžeš dať aj dôvod. A nikdy si nedavaj do "tutorialu" tú správu v OnPlayerConnect, je to tutoriál kde niekoho chceš niečo naučiť. Pokiaľ to nemal byť tutoriál, tak si to tam dávaš zbytočne a vyzerá to viac že si to spravil len aby si bol na serveroch "napísaný" (aspoň mne to tak príde). Keď už chceš byť napísaný, tak to urob jak DeLeTe ktorý urobí poriadny script a dá si tam text ale nedá pwn a neurobí tutoriál s tým, že "zanechte autora". Ano viem, že si to vytvoril a aby niekto vedel, že kto to vlastne vytvoril, ale koľko ľudí zo 100 by si to tam nechalo kebyže má celý kód ? Možno 2ja ktorý by nevedli jak 😄

 

(Ten kód je spravený len tak, nemusí fungovať)

Edited by Guyy
  • Paráda! (+1) 1
  • Nope 1

Sdílet tento příspěvek


Link to post
Share on other sites
před 1 hodinou, Guyy said:

Jednoduché, pekne spravený kód, bez zbytočných vecí

Když už jsme tedy u těch zbytečností, tak tři věci:

  1. Vážně tam musíš mít "if(sscanf(params, "s", params))"? Params je sám o sobě řetězec, proč na něj ještě násilně hnát sscanf? Stačí zkontrolovat jeho délku, tak poznáš, zda byl, či nebyl zadán.
  2. Souhlasím s tebou, co se týče těch zkratek (SCM). Mě na druhou stranu dráždí, když někdo konstanty dává do kulatých závorek, aniž by to mělo nějaký význam – v tomto případě narážím na "(true)" a "(false)".
  3. Tento kód:
TogglePlayerControllable(playerid, false);
AFK[playerid] = (true);

         Tam je zbytečně dvakrát, celý obsah podmínky by šel pěkně zkrátit na:

TogglePlayerControllable(playerid, false);
AFK[playerid] = true;

if(strlen(params) == 0)
    va_SendClientMessageToAll(-1, "{808080}Hráč %s odišiel od PC.", Nick(playerid));
else
    va_SendClientMessageToAll(-1, "{808080}Hráč %s odišiel od PC. [ Dôvod: %s ]", Nick(playerid), params);

Další by teď mohli namítnout, že "strlen(params) == 0" se dá zkrátit na "!strlen(params)" a měli by pravdu. A takhle by to mohlo jít dál a dál. Co tím chci říct je, že každý je zvyklý na svůj styl zápisu, takže jestli mu vyhovuje zkracovat SendClientMessage na SCM, ať to dělá.

Na závěr ještě poslední poznámka – nejedná se o návod, nýbrž o skript.

Sdílet tento příspěvek


Link to post
Share on other sites
před 6 minutami, vEnd said:

Když už jsme tedy u těch zbytečností, tak tři věci:

  1. Vážně tam musíš mít "if(sscanf(params, "s", params))"? Params je sám o sobě řetězec, proč na něj ještě násilně hnát sscanf? Stačí zkontrolovat jeho délku, tak poznáš, zda byl, či nebyl zadán.
  2. Souhlasím s tebou, co se týče těch zkratek (SCM). Mě na druhou stranu dráždí, když někdo konstanty dává do kulatých závorek, aniž by to mělo nějaký význam – v tomto případě narážím na "(true)" a "(false)".
  3. Tento kód:

TogglePlayerControllable(playerid, false);
AFK[playerid] = (true);

         Tam je zbytečně dvakrát, celý obsah podmínky by šel pěkně zkrátit na:


TogglePlayerControllable(playerid, false);
AFK[playerid] = true;

if(strlen(params) == 0)
    va_SendClientMessageToAll(-1, "{808080}Hráč %s odišiel od PC.", Nick(playerid));
else
    va_SendClientMessageToAll(-1, "{808080}Hráč %s odišiel od PC. [ Dôvod: %s ]", Nick(playerid), params);

Další by teď mohli namítnout, že "strlen(params) == 0" se dá zkrátit na "!strlen(params)" a měli by pravdu. A takhle by to mohlo jít dál a dál. Co tím chci říct je, že každý je zvyklý na svůj styl zápisu, takže jestli mu vyhovuje zkracovat SendClientMessage na SCM, ať to dělá.

Na závěr ještě poslední poznámka – nejedná se o návod, nýbrž o skript.

1. To ma nenapadlo že stačí kontrolovať dlžku.. Som zvyknutý na sscanf lebo ten skontroluje či tam niečo je zadané ale dík za novú skúsenosť 😄

2. To s (true) a (false) vyzerá tak "Scydovsky" 😄 Je to krajšie než čisto true a false aspoň pre mňa 😄

3. No to je to že ma nenapadlo kontrolovať dlžku.

 

No a s tým že nech používajú SCM máš síce pravdu, ale žiadosti alebo niečo podobné napíšeš viac "formálne" (neviem jak sa volá ten štýl písania). Nenapíšeš tam, "čč chcem sa k vám do firmy, viem pawniť.." 😄 Ale napíšeš to nech to vyzerá na úrovni.. Chápeš 😄

Sdílet tento příspěvek


Link to post
Share on other sites
před 2 hodinami, Guyy said:

2. To s (true) a (false) vyzerá tak "Scydovsky" 😄 Je to krajšie než čisto true a false aspoň pre mňa 😄

Ono to ani tak není "Scydovské" jako spíše za prvé jedna z možných logický operací, která sice zní jako zbytečná pitomost ( přecijen když chci sečíst 1 + 1 tak to neházím do zárovky, i když to stejně bude fungovat, že?) a za druhé prostě jako estetická záležitost, když během kompilace vypustí znaky navíc (mezery, taby...) a funkčnost zůstane zachovalá, proč ne. 
Takže zkráceně, používám to, protože to je hezké a funguje to :d (hlavně je pak vtipné vidět kolik lidí kopíruje kódy, když se podívám na konec toho kódu a vidím tam návratovou hodnotu v závorce, tak už přemýšlím, že moc lidí, co používá tenhle styl nebude... :d).

 

před 2 hodinami, vEnd said:

Další by teď mohli namítnout, že "strlen(params) == 0" se dá zkrátit na "!strlen(params)" a měli by pravdu. A takhle by to mohlo jít dál a dál. Co tím chci říct je, že každý je zvyklý na svůj styl zápisu, takže jestli mu vyhovuje zkracovat SendClientMessage na SCM, ať to dělá.

před 2 hodinami, Guyy said:

No a s tým že nech používajú SCM máš síce pravdu, ale žiadosti alebo niečo podobné napíšeš viac "formálne" (neviem jak sa volá ten štýl písania). Nenapíšeš tam, "čč chcem sa k vám do firmy, viem pawniť.." 😄 Ale napíšeš to nech to vyzerá na úrovni.. Chápeš 😄

Jako debatovat, jaký styl používat, jaký je správný, jaký špatný, jak komu co vyhovuje a co mu ten styl způsobuje... to je akorát tak na Civil War :d viz:
 

Spoiler

functiono-code-functiono-code-how-the-ci

 

Sdílet tento příspěvek


Link to post
Share on other sites
před 9 hodinami, vEnd said:

!strlen(params)

Ehm ehm isnull(params).. V prípade, že params nie je prázdny string, sa nemusí počítať celá jeho dĺžka. Stačí sa vždy pozrieť iba na prvý znak, resp. prvé 2 znaky.

Sdílet tento příspěvek


Link to post
Share on other sites
před 4 hodinami, DuFF said:

Ehm ehm isnull(params).. V prípade, že params nie je prázdny string, sa nemusí počítať celá jeho dĺžka. Stačí sa vždy pozrieť iba na prvý znak, resp. prvé 2 znaky.

 

před 14 hodinami, vEnd said:

A takhle by to mohlo jít dál a dál.

Díky, že jsi mi potvrdil to, co jsem napsal.

Sdílet tento příspěvek


Link to post
Share on other sites
před 6 hodinami, Arash said:

😁Ahaha však je tento tutoriál podle něho všude na netu nechci být vulgární ale ten šmudla neumí nic udělat podle sebe. 

Ty sis neuměl ani vymyslet vlastní přezdívku tak tady nedělej chytrého 

Arash prej. Rovnou si to změn třeba na Dua Lipa 

Sdílet tento příspěvek


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Zde můžete odpovědět na toto téma...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Obnovili jsme váš původní obsah (obsah napsaný před zavřením).   Smazat obnovený obsah

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...