Jump to content
Prosíme všetkých užívateľov, ktorý sa chcú opätovne pripojiť na discord aby znovu spárovali svoje účty kliknutím na "Discord" v navigácií a pripojili sa na server Read more... ×
  • 0
ForestCZE

pomoc Problém s filterscriptem

Dotaz

Ahoj, rád bych s Vaší pomocí vyřešil dvě věcí :) 

1) Načítá se při zapnutí serveru nejdříve FS a nebo GM? Mám ve FS vytvořené dva pickupy takto:
 

public OnFilterScriptInit()
{
	print("\n--------------------------------------");
	print(" Muj FS");
	print("--------------------------------------\n");

	CreatePickup(1650,1,1944.4197,-1772.7656,13.3906,-1);
	CreatePickup(1650,1,1938.5714,-1772.9235,13.3828,-1);
	return 1;
}

Když restartuji mód pomocí /rcon gmx, tak po návratu na server nejsou pickupy vůbec vidět, objeví se až po reloadu FS pomocí /rcon reloadfs name. Jak je to možné?

2) Druhá věc ve FS - vytváření admin účtu a ukládání proměnné.
Mám příkazy:
 

dcmd_aregister(playerid, params[])
{
	new file[50];
	format(file, sizeof(file), "admins/%s", PlayerName(playerid));
	
	if(DOF2_FileExists(file)) return WarningMessage(playerid, "Tvůj admin účet už existuje, použij /alogin [HESLO] pro přihlášení.");
	new param1[20], index;
	param1 = strtok(params, index);
	if(strlen(param1) == 0) return WarningMessage(playerid, "Použití: /aregister [HESLO]");
	if(strlen(param1) < 3) return WarningMessage(playerid, "Heslo musí obsahovat alespoň 3 znaky.");
	
	DOF2_CreateFile(file, param1);
	DOF2_SetInt(file, "level", 0);
	DOF2_SaveFile();
	InformationMessage(playerid, "Admin účet vytvořen. Můžeš se přihlásit pomocí příkazu /alogin [HESLO]");
	return 1;
}

dcmd_alogin(playerid, params[])
{
    new file[50];
	format(file, sizeof(file), "admins/%s", PlayerName(playerid));
	
	if(!DOF2_FileExists(file)) return WarningMessage(playerid, "Tvůj admin účet neexistuje, použij /aregister [HESLO] pro přihlášení.");
	if(alogged[playerid] == true) return WarningMessage(playerid, "Již jsi přihlášen jako administrátor");
	new param1[20], index;
	param1 = strtok(params, index);
	
	if(strlen(param1) == 0) return WarningMessage(playerid, "Použití: /alogin [HESLO]");
	if(DOF2_CheckLogin(file, param1))
	{
		level[playerid] = DOF2_GetInt(file, "level");
		alogged[playerid] = true;
		InformationMessage(playerid, "Úspěšně přihlášen jako admin.");
	}
	else
	{
		WarningMessage(playerid, "Zadal jsi nesprávné admin heslo.");
	}
	return 1;
}

dcmd_setlvl(playerid, params[])
{
	if(alogged[playerid] == false) return WarningMessage(playerid, "Musíš být přihlášen jako administrátor.");
	if(level[playerid] < 5) return WarningMessage(playerid, "Nemáš dostatečný admin level.");
	new string[128];
	new param1[20], param2[20], index;
	param1 = strtok(params, index);
	param2 = strtok(params, index);
	if(strlen(param1) == 0) return WarningMessage(playerid, "Použití: /setlvl [ID_HRÁČE] [0-5]");
	if(strlen(param2) == 0) return WarningMessage(playerid, "Použití: /setlvl [ID_HRÁČE] [0-5]");
	new id = strval(param1);
	if(!IsPlayerConnected(id)) return WarningMessage(playerid, "Neplatné ID hráče.");
	if(alogged[id] == false) return WarningMessage(playerid, "Tento hráč není přihlášen jako administrátor.");
	if(level[id] == 5) return WarningMessage(playerid, "Nemůžeš měnit admin level hráčí s admin levelem 5.");
	new lvl = strval(param2);
	if(lvl < 0 || lvl > 5) return WarningMessage(playerid, "Level lze nastavit od 0 do 5.");
	level[id] = lvl;
	new file[50];
	format(file, sizeof(file), "admins/%s", PlayerName(id));
	DOF2_SetInt(file, "level", level[id]);
	DOF2_SaveFile();
	format(string, sizeof(string), "Administrátor %s[%i] nastavil hráči %s[%i] admin level %i.", PlayerName(playerid), playerid, PlayerName(id), id, lvl);
	SendClientMessageToAll(C_RED, string);
	return 1;
}

Vytvoří se mi soubor s proměnnou level=0
Pak vypnu server, nastavím si v souboru level třeba na 5. Přijde na server jiný hráč, nastavím mu level, uloží se mu hodnota do souboru a vše je v pořádku. Někdy se ovšem stane, že přijdu na server, přihlásím se a řekne mi to, že nejsem admin. Kouknu do souboru a tam je nula. Jak je tohle možné?

Budu všem moc vděčný za pomoc. Netuším, co dělám špatně. Předem děkuji za pomoc :) 

Edited by ForestCZE

Sdílet tento příspěvek


Link to post
Share on other sites

8 odpovědí na tuto otázku

Recommended Posts

  • 1

K tej 2.. Sú príkazy /aregister a /setlvl jediné miesta, na ktorých zapisuješ admin level do súboru? Nie je možné, že by si to ukladal napríklad aj v OnPlayerDisconnect? Potom by bolo možné, že ti to nastaví 0 vždy, keď sa odpojíš z hry skôr ako sa prihlásiš cez /alogin.

Sdílet tento příspěvek


Link to post
Share on other sites
  • 1
před 7 minutami, ForestCZE said:

Teoreticky to smazat mohu, když už to zapisuji v příkazu /setlvl :) Ale rád bych se zeptal, co je tam špatně. Při odpojení zapíšu aktuální hodnotu proměnné a až potom ji vynuluji. Takže? 😄 

Ok, pozrime sa na to podrobne..

Som admin - v súbore mám zapísaný admin level 5.

Pripojím sa na server - hodnota premennej level[mojeid] je 0.

Mohol by som sa prihlásiť cez /alogin, potom by hodnota premennej level[mojeid] bola 5, ale ja to neurobím.

Miesto toho sa odpojím zo serveru... A do súboru sa mi zapíše admin level 0 (pretože v premennej level[mojeid] je pred prihlásením 0).

Edited by DuFF

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
před 3 hodinami, DuFF said:

K tej 2.. Sú príkazy /aregister a /setlvl jediné miesta, na ktorých zapisuješ admin level do súboru? Nie je možné, že by si to ukladal napríklad aj v OnPlayerDisconnect? Potom by bolo možné, že ti to nastaví 0 vždy, keď sa odpojíš z hry skôr ako sa prihlásiš cez /alogin.

public OnPlayerDisconnect(playerid, reason)
{
    new file[50];
	format(file, sizeof(file), "admins/%s", PlayerName(playerid));
	DOF2_SetInt(file, "level", level[playerid]);
	DOF2_SaveFile();
	
    level[playerid] = 0;
	alogged[playerid] = false;
	return 1;
}

 

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
před 4 minutami, ForestCZE said:

public OnPlayerDisconnect(playerid, reason)
{
    new file[50];
	format(file, sizeof(file), "admins/%s", PlayerName(playerid));
	DOF2_SetInt(file, "level", level[playerid]);
	DOF2_SaveFile();
	
    level[playerid] = 0;
	alogged[playerid] = false;
	return 1;
}

 

No presne to je tá chyba. Deje sa presne to, o čom som písal.

Premenná level[playerid] je nastavená na 0 skôr, než sa prihlásiš cez /alogin.. A keď sa odpojíš zo serveru bez toho, aby si sa prihlásil cez /alogin, tak ti do súboru s admin levelom zapíše hodnotu premennej - 0. 

Zmazal by som to ukladanie admin levelu v disconnecte. 

Edited by DuFF

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
před 4 minutami, DuFF said:

No presne to je tá chyba. Deje sa presne to, o čom som písal. Zmazal by som to ukladanie admin levelu v disconnecte. 

Teoreticky to smazat mohu, když už to zapisuji v příkazu /setlvl :) Ale rád bych se zeptal, co je tam špatně. Při odpojení zapíšu aktuální hodnotu proměnné a až potom ji vynuluji. Takže? 😄 

Edited by ForestCZE

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
Just now, DuFF said:

Ok, pozrime sa na to podrobne..

Som admin - v súbore mám zapísaný admin level 5.

Pripojím sa na server - hodnota premennej level[mojeid] je 0.

Mohol by som sa prihlásiť cez /alogin, potom by hodnota premennej level[mojeid] bola 5, ale ja to neurobím.

Miesto toho sa odpojím zo serveru... A do súboru sa mi zapíše admin level 0.

Jaj, jsem retard 😄 Docvaklo mi to sekundu před tvou odpovědí.  Děkuju :) Takže jsou dvě možnosti. Buď to smažu a nebo tam dám podmínku, aby to zapsalo jen tehdy, když alogged bude true :) 

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
před 13 hodinami, Smexy said:

GMX je blbost, nebo alespoň mně to tak vždycky přišlo, rozhodně nedoporučuji používat, radši EXIT a potom znovu startnout přes hosting.

Díky za názor. Takže se s tím nedá nic dělat?

EDIT: Musí být někde chyba, jelikož po tom restartu normálně filterscripty běží. Funguje mi admin systém i tachometr. Jen v tom tachometru jsou právě dva pickupy a dva 3DTextLabely a ty nejsou vidět, dokud neresetnu FS nebo znovu nezapnu server. Celé to vypadá takto:

 

public OnFilterScriptInit()
{
	print("\n--------------------------------------");
	print(" Tachometr by ForestCZE");
	print("--------------------------------------\n");

	for(new v = 0; v < ALLV; v++)
	{
		fuel[v] = 18;
	}

	CreatePickup(1650,1,1944.4197,-1772.7656,13.3906,-1);
	CreatePickup(1650,1,1938.5714,-1772.9235,13.3828,-1);

	SetTimer("IsAtGasStation", 900, 1);
	
	Create3DTextLabel("Text 1", 0x00FF00FF,1944.4197,-1772.7656,13.9062,25.0,0,0);
	Create3DTextLabel("Text 2", 0x00FF00FF,1938.5714,-1772.9235,13.8984,25.0,0,0);
	return 1;
}

 

Edited by ForestCZE
Doplňující info

Sdílet tento příspěvek


Link to post
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

×