Detaljan opis problema:Pa radim "Jail" komandu prvi put i sada problemi su ogromni;Vreme bude uvek 77 nepusta ga posle tog vremena skoro uvek kaze da komanda nepostoji(misli da je pogrean id ,znam jer kada je bil oto rekao je pogresan id a nije bio i ) i kada se loginuje ne stavi ga u jail.Pored popravke ako neko moze da mi uopste sredi komandu ili bar objasni greske za koje verujem da ima mnogo kaze kako da resim
Dio skripte:
[pawn]CMD:jail(playerid,params[])
{
if(PlayerData[playerid][Ulogovan] < 1) return SCM(playerid, CRVENA,"Morate biti ulogovani da bi ste koristili ovu komandu");
if(PlayerData[playerid][Aduty] < 1) return SCM(playerid, CRVENA,"Morate biti na "plava"duznosti "crvena"kako bi koristili ovu komandu");
if(PlayerData[playerid][Administrator] >= 1 || PlayerData[playerid][Asistent] >= 2)
{
new targetid,vreme,razlog,txt[256];
if(sscanf(params,"uds[256]", targetid,vreme,razlog)) return SCM(playerid, NARANDZASTA,"INFO:/jail [ID] [vreme(minute)] [razlog]");
//if(PlayerData[targetid][Administrator] >= PlayerData[playerid][Administrator]) return SCM(playerid, CRVENA,"Odabrani korisnik je isti ili veci administratorski level od vas");
//if(PlayerData[targetid][Asistent] >= PlayerData[playerid][Asistent]) return SCM(playerid, CRVENA,"Odabrani igarc je isti ili veci asistent level od vas");
//if(PlayerData[targetid][Administrator] >= 1 && PlayerData[playerid][Asistent] >= 1) return SCM(playerid, CRVENA,"Asistent nemoze jailati administratora");
GetPlayerName(playerid,Nam, MAX_PLAYER_NAME);
GetPlayerName(targetid,pName, MAX_PLAYER_NAME);
format(txt,sizeof(txt),""crvena"JAIL || A | AS %s je jailao igraca %s,razlog: %s",Nam,pName,razlog);
SCMTA(-1,txt);
SetPlayerPos(playerid, 2543.462646,-1308.379882,1026.728393);
SetPlayerInterior(playerid, 2);
SetPlayerVirtualWorld(playerid, 1);
format(txt,sizeof(txt),"~y~Jailan ~r~%d",vreme);
GameTextForPlayer(playerid,txt,3000,3);
SetTimerEx("JailGotov", vreme*60000, false, "i", playerid);
}
return 1;
}[/pawn]
[pawn]forward JailGotov(playerid);
public JailGotov(playerid)
{
SetPlayerPos(playerid, 2351.3213,-36.1563,26.4844);
SetPlayerInterior(playerid, -1);
SetPlayerVirtualWorld(playerid, 0);
SCM(playerid, NARANDZASTA,"Pusteni ste iz robije,pokusajte biti bolji gradjanin");
if(PlayerData[playerid][Asistent] >= 1 || PlayerData[playerid][Administrator] >= 1)
{
new str[64];
GetPlayerName(playerid,pName,MAX_PLAYER_NAME);
format(str,sizeof(str),"Igrac %s je pusten na slobodu(iz jaila)!",pName);
SCM(playerid, ZUTA,str);
}
return 1;
}[/pawn]
[pawn] if(PlayerData[playerid][JailVreme] >= 1) //OVO JE U POSLE LOGINA
{
new str[48];
SetTimerEx("JailGotov", PlayerData[playerid][JailVreme]*60000, false, "i", playerid);
SetPlayerPos(playerid, 2543.462646,-1308.379882,1026.728393);
SetPlayerInterior(playerid, 2);
SetPlayerVirtualWorld(playerid, 1);
format(str,sizeof(str),"~y~Jailan jos ~r~%d",PlayerData[playerid][JailVreme]);
GameTextForPlayer(playerid,str,3000,3);
}[/pawn]
Neke slike/video za lakse dobivanje pomoci(neobavezno):
Bump
Nzm kako mogu da ti pomognem uzmes i up moda i gledas to je najjlakse :D
Ova provera se nikada ne desava zato sto nikada ne postavis vrednost za JailVreme.
[pawn] if(PlayerData[playerid][JailVreme] >= 1) [/pawn]
U komandu postavi recimo [pawn] PlayerData[playerid][JailVreme] = 1; [/pawn] Jer koristis tajmer koji traje koliko mu traje jail vreme, i onda kada mu istekne vreme samo postavis to na 0.
Mada ovakav vid tajmera za zatvor je veoma los, jer ako ti skripta nije optimizovana moze da pukne/istekne pre vremena zato sto je ovo sannp i retardiran je. Najbolje bi bilo da uradis komandu jail ovako tj. da dodas ove stvari u komandu.
[pawn]
PlayerData[playerid][JailVreme] = vreme*60;
ZatvorOdbrojavanje[playerid] = SetTimerEx("OduzmiVremeZatvora", 1000, true, "d", playerid);
[/pawn]
ionda u funkciju za oduzimanje vremena dodas nesto ovako
[pawn]
forward public OduzmiVremeZatvora(playerid);
public OduzmiVremeZatvora(playerid)
{
PlayerData[playerid][JailVreme]--;
if(PlayerData[playerid][JailVreme] < 0)
{
//stagod
}
return 1;
}
[/pawn]
Izbegavaj globalne tajmere za ovakve stvari, smece su globalni tajmeri.
Napisao sam sve i svasta, manje vise nepovezano je sve tako da ono ako ti nije nesto jasno, pojasnicu ti malo bolje.
Citat: .буÑ,иган poslato Februar 15, 2018, 13:10:57 POSLE PODNE
Ova provera se nikada ne desava zato sto nikada ne postavis vrednost za JailVreme.
[pawn] if(PlayerData[playerid][JailVreme] >= 1) [/pawn]
U komandu postavi recimo [pawn] PlayerData[playerid][JailVreme] = 1; [/pawn] Jer koristis tajmer koji traje koliko mu traje jail vreme, i onda kada mu istekne vreme samo postavis to na 0.
Mada ovakav vid tajmera za zatvor je veoma los, jer ako ti skripta nije optimizovana moze da pukne/istekne pre vremena zato sto je ovo sannp i retardiran je. Najbolje bi bilo da uradis komandu jail ovako tj. da dodas ove stvari u komandu.
[pawn]
PlayerData[playerid][JailVreme] = vreme*60;
ZatvorOdbrojavanje[playerid] = SetTimerEx("OduzmiVremeZatvora", 1000, true, "d", playerid);
[/pawn]
ionda u funkciju za oduzimanje vremena dodas nesto ovako
[pawn]
forward public OduzmiVremeZatvora(playerid);
public OduzmiVremeZatvora(playerid)
{
PlayerData[playerid][JailVreme]--;
if(PlayerData[playerid][JailVreme] < 0)
{
//stagod
}
return 1;
}
[/pawn]
Izbegavaj globalne tajmere za ovakve stvari, smece su globalni tajmeri.
Napisao sam sve i svasta, manje vise nepovezano je sve tako da ono ako ti nije nesto jasno, pojasnicu ti malo bolje.
Razumeo sam sta si hteo i pomoglo mi je,ali pokusao sam da izmenim malo i da koristim UP sistem i tako radi sa globalnim ali ugl hvala
Citat: .буÑ,иган poslato Februar 15, 2018, 13:10:57 POSLE PODNE
Ova provera se nikada ne desava zato sto nikada ne postavis vrednost za JailVreme.
[pawn] if(PlayerData[playerid][JailVreme] >= 1) [/pawn]
U komandu postavi recimo [pawn] PlayerData[playerid][JailVreme] = 1; [/pawn] Jer koristis tajmer koji traje koliko mu traje jail vreme, i onda kada mu istekne vreme samo postavis to na 0.
Mada ovakav vid tajmera za zatvor je veoma los, jer ako ti skripta nije optimizovana moze da pukne/istekne pre vremena zato sto je ovo sannp i retardiran je. Najbolje bi bilo da uradis komandu jail ovako tj. da dodas ove stvari u komandu.
[pawn]
PlayerData[playerid][JailVreme] = vreme*60;
ZatvorOdbrojavanje[playerid] = SetTimerEx("OduzmiVremeZatvora", 1000, true, "d", playerid);
[/pawn]
ionda u funkciju za oduzimanje vremena dodas nesto ovako
[pawn]
forward public OduzmiVremeZatvora(playerid);
public OduzmiVremeZatvora(playerid)
{
PlayerData[playerid][JailVreme]--;
if(PlayerData[playerid][JailVreme] < 0)
{
//stagod
}
return 1;
}
[/pawn]
Izbegavaj globalne tajmere za ovakve stvari, smece su globalni tajmeri.
Napisao sam sve i svasta, manje vise nepovezano je sve tako da ono ako ti nije nesto jasno, pojasnicu ti malo bolje.
i naravno da unisti tajmer nakon sto izadje
lock ovdje