Jump to content
  • 0

pomoc Jail system


Twixo

Dotaz

Už jsme tady zas :d
 

Mam jednoduchý problem ale aj ten mi robí problémy a už neviem čo s tým.

Problem je v unjail. Skoro vše šlape: Prepustí ho, textdraw schova aj čas v base zruší.

Lenže premenu, že je v base nezmení.

dcmd_jail(playerid,params[])
{
    new id,minuty,string[128],duvod[128];
    if(sscanf(params,"udz",id,minuty,duvod)) return SCM(playerid,0xFF0000,"Použi /jail [ID] [MINUTY] [DOVOD]");
    if(GetPVarInt(id,"Jail") == 1) return SCM(playerid,0xFF0000,"Hráč už je vo väzení");
{
      SetPVarInt(id,"Jail",1);
      jailTimers[id] = SetTimerEx("Jail",1000,true,"i",id);
	  SetPVarInt(id, "JailSeconds", minuty * 60);
      SetPlayerInterior(id,3);
      SetPlayerPos(id,198.3796, 160.8905, 1003.03);
      format(string,sizeof(string),"Administrátor %s zatkol hráča %s na %d minut [Dôvod: %s]",Jmeno(playerid),Jmeno(id),minuty,duvod);
      SCMTA(0xFF0000FF,string);
      Basa[id] = 1; // Dá premenu, že je v base
}
	return 1;
}


dcmd_unjail(playerid,params[])
{
	new id;
    if(!strlen(params))return SendClientMessage(playerid,0xFF0000FF,"[ ! ] {FFFFFF} Použití: /unjail [ ID ]");
    if(GetPVarInt(id,"Jail") == 0) return SCM(playerid,0xFF0000,"Hráč už neni vo vezení.");
	if(!IsPlayerConnected(id))return SendClientMessage(playerid,0xFF0000FF,"[ ! ] {FFFFFF}Hráč není připojený");
{
    SetPVarInt(playerid, "JailSeconds", GetPVarInt(playerid, "JailSeconds") -1);
    PlayerTextDrawHide(playerid, jail0[playerid]);
    TextDrawHideForPlayer(playerid, jail1);
    if(GetPVarInt(playerid, "JailSeconds") == 0)
    SetPVarInt(playerid,"Jail",0);
	SendClientMessage(playerid,-1,"Odpykal si si trest");
	SetPlayerPos(playerid,1958.3783, 1343.1572, 15.3746);
	SetPlayerInterior(playerid,0);
	KillTimer(jailTimers[playerid]);
	Basa[id] = 0; // Dá premenu, že neni v base
}
	return 1;
}

Ako vidite v mode. Tak davam na 0, tažke že neni v base. Skušal som aj 1 ale to je, že je v base. Neviem ako kde je chyba. 

 

btw ten unjail mam z jail publicu (mojom topicku o pomoc som ho daval -> http://pawno.cz/topic/53390-textdraw/)

Link to comment
Share on other sites

8 odpovědí na tuto otázku

Recommended Posts

  • 0

Jáj :d Toto sa mi stáva často :d Zmenim to potom editnem.

 

//EDIT: 

 

Po tej úprave mi stále dáva "Hráč je vo väzený" keď zadám /jail. Ale neviem prečo keď som premenu menil na, že neni v base.

Edited by Twixo
Link to comment
Share on other sites

  • 0

Tady to máš podle mě dobře, buď máš špatně podmínku, nebo ještě někde jinde v módu upravuješ proměnnou. Každopádně mi připadá, že ta proměnná spolu s proměnnou Jail jsou úplně zbytečné, bohatě, by ti na tyhle kontroly stačila JailSeconds.

Snad to je všechno dobře:

 

 

dcmd_jail(playerid,params[])
{
    new id,minuty,string[128],duvod[128];
    if(sscanf(params,"udz",id,minuty,duvod)) return SCM(playerid,0xFF0000,"Použi /jail [ID] [MINUTY] [DOVOD]");
    if(!IsPlayerConnected(id))return SendClientMessage(playerid,0xFF0000FF,"[ ! ] {FFFFFF}Hráč není připojený");
    if(GetPVarInt(id,"JailSeconds") > 0) return SCM(playerid,0xFF0000,"Hráč už je vo väzení");//pokud je jeho počet sekund větší jak nula, znamenná to, že má být ještě ve vězení, takže docílís stejného efektu jako s Jail
	{
 		jailTimers[id] = SetTimerEx("Jail",1000,true,"i",id);
 		SetPVarInt(id, "JailSeconds", minuty * 60);//Takhle promméná ti samaosobě udává, že je v base, když není tak se bude rovnat 0
 		SetPlayerInterior(id,3);
 		SetPlayerPos(id,198.3796, 160.8905, 1003.03);
 		format(string,sizeof(string),"Administrátor %s zatkol hráča %s na %d minut [Dôvod: %s]",Jmeno(playerid),Jmeno(id),minuty,duvod);
 		SCMTA(0xFF0000FF,string);
	}
	return 1;
}


dcmd_unjail(playerid,params[])
{
	new id;
    if(!strlen(params))return SendClientMessage(playerid,0xFF0000FF,"[ ! ] {FFFFFF} Použití: /unjail [ ID ]");
	if(!IsPlayerConnected(id))return SendClientMessage(playerid,0xFF0000FF,"[ ! ] {FFFFFF}Hráč není připojený");
    if(GetPVarInt(id,"JailSeconds") == 0) return SCM(playerid,0xFF0000,"Hráč už neni vo vezení.");//to samé jako nahoře
	{
	    SetPVarInt(id, "JailSeconds", 0); //To, co jsi tam měl byla blbost, připadá mi to jako, když to máš prevzaté někde z timeru.., proč snižovat hodnotu o jedna, když potřebuješ 0
	    PlayerTextDrawHide(id, jail0[playerid]);
	    TextDrawHideForPlayer(id, jail1);

		SendClientMessage(id,-1,"Byl jsi propuštěn!");
		SetPlayerPos(id,1958.3783, 1343.1572, 15.3746);
		SetPlayerInterior(id,0);
		KillTimer(jailTimers[id]);
	}
	return 1;
}

forward Jail(playerid);
public Jail(playerid)
{
    SetPVarInt(playerid, "JailSeconds", GetPVarInt(playerid, "JailSeconds") - 1);
    PlayerTextDrawHide(playerid, jail0);
    TextDrawHideForPlayer(playerid, jail1);

    if(GetPVarInt(playerid, "JailSeconds") == 0)
    {
		SendClientMessage(playerid,-1,"Odpykal si si trest");
		SetPlayerPos(playerid,1958.3783, 1343.1572, 15.3746);
		SetPlayerInterior(playerid,0);
		KillTimer(jailTimers[playerid]);
    }
    else
   {
       new str[10];
	   format(str, 10, "%s", GetPVarInt(playerid, "JailSeconds"));
       PlayerTextDrawSetString(jail0,str);
       PlayerTextDrawShow(playerid, jail0);
       TextDrawShowForPlayer(playerid, jail1);
   }
   return 1;
}
 

 

 

Link to comment
Share on other sites

  • 0

Ten unjail máš špatně Gargoylesi :d Není tam nikde sscanf ani jiné zjištění id z params a máš špatný index pro TD.

 

Zvláštní je, že tohle jsme opravovali v SZ a skoro celý kód jinak.

Link to comment
Share on other sites

  • 0

Já jsem, ale neopravoval nic se sscansf, to ať si udělá sám, pouze jsem mu ze zbytečných 3 proměnných nechal jen jednu. A všechno, co jsem k tomu přidal jsem okopíroval z minulého tématu - do vaši SZ bohužel já nevidím... :d :d ;)

Edited by GaRGoyLeS
Link to comment
Share on other sites

  • 0

Tady to máš podle mě dobře, buď máš špatně podmínku, nebo ještě někde jinde v módu upravuješ proměnnou. Každopádně mi připadá, že ta proměnná spolu s proměnnou Jail jsou úplně zbytečné, bohatě, by ti na tyhle kontroly stačila JailSeconds.

Snad to je všechno dobře:

 

 

dcmd_jail(playerid,params[])
{
    new id,minuty,string[128],duvod[128];
    if(sscanf(params,"udz",id,minuty,duvod)) return SCM(playerid,0xFF0000,"Použi /jail [ID] [MINUTY] [DOVOD]");
    if(!IsPlayerConnected(id))return SendClientMessage(playerid,0xFF0000FF,"[ ! ] {FFFFFF}Hráč není připojený");
    if(GetPVarInt(id,"JailSeconds") > 0) return SCM(playerid,0xFF0000,"Hráč už je vo väzení");//pokud je jeho počet sekund větší jak nula, znamenná to, že má být ještě ve vězení, takže docílís stejného efektu jako s Jail
	{
 		jailTimers[id] = SetTimerEx("Jail",1000,true,"i",id);
 		SetPVarInt(id, "JailSeconds", minuty * 60);//Takhle promméná ti samaosobě udává, že je v base, když není tak se bude rovnat 0
 		SetPlayerInterior(id,3);
 		SetPlayerPos(id,198.3796, 160.8905, 1003.03);
 		format(string,sizeof(string),"Administrátor %s zatkol hráča %s na %d minut [Dôvod: %s]",Jmeno(playerid),Jmeno(id),minuty,duvod);
 		SCMTA(0xFF0000FF,string);
	}
	return 1;
}


dcmd_unjail(playerid,params[])
{
	new id;
    if(!strlen(params))return SendClientMessage(playerid,0xFF0000FF,"[ ! ] {FFFFFF} Použití: /unjail [ ID ]");
	if(!IsPlayerConnected(id))return SendClientMessage(playerid,0xFF0000FF,"[ ! ] {FFFFFF}Hráč není připojený");
    if(GetPVarInt(id,"JailSeconds") == 0) return SCM(playerid,0xFF0000,"Hráč už neni vo vezení.");//to samé jako nahoře
	{
	    SetPVarInt(id, "JailSeconds", 0); //To, co jsi tam měl byla blbost, připadá mi to jako, když to máš prevzaté někde z timeru.., proč snižovat hodnotu o jedna, když potřebuješ 0
	    PlayerTextDrawHide(id, jail0[playerid]);
	    TextDrawHideForPlayer(id, jail1);

		SendClientMessage(id,-1,"Byl jsi propuštěn!");
		SetPlayerPos(id,1958.3783, 1343.1572, 15.3746);
		SetPlayerInterior(id,0);
		KillTimer(jailTimers[id]);
	}
	return 1;
}

forward Jail(playerid);
public Jail(playerid)
{
    SetPVarInt(playerid, "JailSeconds", GetPVarInt(playerid, "JailSeconds") - 1);
    PlayerTextDrawHide(playerid, jail0);
    TextDrawHideForPlayer(playerid, jail1);

    if(GetPVarInt(playerid, "JailSeconds") == 0)
    {
		SendClientMessage(playerid,-1,"Odpykal si si trest");
		SetPlayerPos(playerid,1958.3783, 1343.1572, 15.3746);
		SetPlayerInterior(playerid,0);
		KillTimer(jailTimers[playerid]);
    }
    else
   {
       new str[10];
	   format(str, 10, "%s", GetPVarInt(playerid, "JailSeconds"));
       PlayerTextDrawSetString(jail0,str);
       PlayerTextDrawShow(playerid, jail0);
       TextDrawShowForPlayer(playerid, jail1);
   }
   return 1;
}
 

 

 

Celý deň sa s tým serem a stále unjailne iba ID 0. 

Edited by Twixo
Link to comment
Share on other sites

  • 0

Ten unjail máš špatně Gargoylesi  :d Není tam nikde sscanf ani jiné zjištění id z params a máš špatný index pro TD.

 

Zvláštní je, že tohle jsme opravovali v SZ a skoro celý kód jinak.

 

Máš ma mysli tento?

Edited by Twixo
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...