Jump to content

Problém s AFK Systémem


Arathor

Recommended Posts

Zdravím,

 

Mám AFK Systém od ATomase ale neak uvažuji že si udělám vlastní

 

ted od ATomase má kod

 

 

//Public pro AFK

public KontrolaPozice()

{

new Float:X,Float:Y,Float:Z;//promene do kterych budeme zapisovat

for(new i;i

{

if(IsPlayerConnected(i))//vsechny obsazene sloty

{

GetPlayerPos(i,X,Y,Z);//zjistime pozici

if(SaveX == X && SaveY == Y && SaveZ == Z)

{

if(AFK == false) dcmd_afk(i," ");//kdyz bude na stejnych radkach jako minule a nebude afk tak ho dame ho do afk

}

//ulozime pro dalsi hodnoceni

SaveX = X;

SaveY = Y;

SaveZ = Z;

}

}

return 1;

}

//AFK Prikaz

dcmd_afk(playerid,params[])//odeslan callback z OnPlayerCommandText

{

if(IsPlayerConnected(playerid))

{

new string[128];//promena do ktere si budeme zapisovat texty

if(AFK[playerid] == false)//kdyz hrac neni AFK

{

if(OldAFK[playerid] != 0)//kdyz neubehlo 10 sekund od vraceni k pocitaci

{

format(string,sizeof(string),"[ ! ] Tento prikaz muzete pouzit az za %d sekund",OldAFK[playerid]);//dosadime si do spravy

SendClientMessage(playerid,BARVA_BILA,string);//odesleme

return 1;//zastavime prkaz

}

else if(strlen(params) == 0)//kdyz uz ubehlo 10 sekund od navraceni a nezada zadny duvod za afk proste jenom ciste prikaz /afk

{

if(!VolneOkoli(playerid)) return SendClientMessage(playerid,BARVA_BILA,"[ ! ] Ve vasi blizkosti je nejaky hrac !");//public vysvetlen nize

format(string,sizeof(string),"[ AFK ] Hráč %s odešel na chvíli od PC !",Jmeno(playerid));//dosadime spravu

SendClientMessageToAll(BARVA_SEDA,string);//odesleme

TogglePlayerControllable(playerid,0);//smzarime

AFK[playerid] = true;//dame promenou aby sme vedeli ze je afk

SendClientMessage(playerid,BARVA_BILA,"Pro navrat /afk");//aprava aby vedel ja kse vratit

format(UlozeneJmeno[playerid],MAX_PLAYER_NAME,Jmeno(playerid));//ulozime si hracovo jmeno

new name[MAX_PLAYER_NAME];//promena do ktere ulozime nove jmeno

format(name,MAX_PLAYER_NAME,"[AFK]%s",Jmeno(playerid));//pred jeho jmeno pridame [AFK]

SetPlayerName(playerid,name);//zmenime jmeno

}else{//kdyz zada nejaky duvod treba /afk du na WC

if(!VolneOkoli(playerid)) return SendClientMessage(playerid,BARVA_BILA,"[ ! ] Ve vasi blizkosti je nejaky hrac !");

format(string,sizeof(string),"[ AFK ] Hráč %s odešel na chvíli od PC ! [ Důvod: %s ]",Jmeno(playerid),params);//zase dosadiem ale uz s duvodem .. dal uz to znate..

SendClientMessageToAll(BARVA_SEDA,string);

TogglePlayerControllable(playerid,0);

AFK[playerid] = true;

SendClientMessage(playerid,BARVA_BILA,"Pro navrat /afk");

format(UlozeneJmeno[playerid],MAX_PLAYER_NAME,Jmeno(playerid));

new name[MAX_PLAYER_NAME];

format(name,MAX_PLAYER_NAME,"[AFK]%s",Jmeno(playerid));

SetPlayerName(playerid,name);

}

}

else if(AFK[playerid] == true)//kdyz je afk

{

format(string,sizeof(string),"[ AFK ] Hráč %s je zpět ve hře !",Jmeno(playerid));//zase dosadime spravu

SendClientMessageToAll(BARVA_SEDA,string);//odesleme

TogglePlayerControllable(playerid,1);//rozmrazime

SetPlayerName(playerid,UlozeneJmeno[playerid]);//vratime jeho jmeno

AFK[playerid] = false;//promena aby sme vedeli ze uz neni afk

OldAFK[playerid] = 10;//promena ze ktere budeme odecitat kazdou sekundu

SetTimerEx("PovolitAFK",1000,0,"i",playerid);//a timer ve kterem budeme odecitat

}

}

return 1;

}

//public kdyz neco zmackne

public OnPlayerKeyStateChange(playerid,newkeys,oldkeys)

{

//jako u prikazu afk akorat kdyz stiskne jakoukoli klavesu ktera je definovana pawnem

if(AFK[playerid] == true)

{

new string[128];

format(string,sizeof(string),"[ AFK ] Hráč %s je zpět ve hře !",Jmeno(playerid));

SendClientMessageToAll(BARVA_SEDA,string);

TogglePlayerControllable(playerid,1);

SetPlayerName(playerid,UlozeneJmeno[playerid]);

AFK[playerid] = false;

OldAFK[playerid] = 10;

SetTimerEx("PovolitAFK",1000,0,"i",playerid);

}

return 1;

}

//Povoleni AFK po 10s

public PovolitAFK(playerid)//public ktery si vyvolavame sekundovym tiemrem

{

OldAFK[playerid]--;//odesmete promenou

if(OldAFK[playerid] > 0) SetTimerEx("PovolitAFK",1000,0,"i",playerid);//kdyz promena nebdue nula pustime public

return 1;

}

//stock volné okolí

stock VolneOkoli(playerid)

{

for(new i;i

{

if(IsPlayerConnected(i))//obsazene id

{

if(DistanceBTWPlayers(playerid,i) < 10) return 0;// kdyz bude nekdo blize jak 10 jednotek odesleme do podminky hodnotu nula

}

}

return 1;//kdyz nebude nidko poblic odesleme hodnotu 1

}

//Stopc bezpecneho okoli

stock DistanceBTWPlayers(playerid,playerid2)

{

new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2,Float:tmpdis;//nadefinujeme si promene do kterych si zapiseme pozice hracu

GetPlayerPos(playerid,x1,y1,z1);//zjistime pozici prvniho hrace

GetPlayerPos(playerid2,x2,y2,z2);//zjistime pozii druheho

tmpdis = floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));//slet funkci nema cenu vsvetlovat chytrak psal dobry tut "nejaky ty funkce" tam sou popsane

return floatround(tmpdis);//vydlesek zaokrouhlime na cele cislo

}

 

 

a pořad piše ve vašem okolí je něaký Hráč nevíte nekdo co s tim v kodu chybu nikde nevidím

 

a prosím :spam:

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...