Jump to content

Admin script


alex.naoumov

Recommended Posts

Hoi,

Ik ben bezig met een nieuwe versie van mijn GM, daar wil ik gelijk een admin script in scripten. Daarvoor gebruik ik "De tut van Sandra". Nu heb ik bij het /login commando iets gemaakt, zodat die checkt wanneer er een admin in mijn server komt en dat die dan weer ge'SendClientMessageToAll 't. Dat is gelukt, maar ik wil graag ook dat de naam van de admin en zijn level in beeld komt.

Hier is mijn: OnPlayerCommandText

public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[256],tmp[256], tmp2[256];
new idx;
new string[256];
cmd = strtok(cmdtext, idx);
GetPlayerName(playerid, playername, sizeof(playername));
//De speler typt /register in...
if(strcmp(cmd, "/register", true) == 0)
{
	//de tekst die achter '/register' wordt getypt, wordt opgeslagen in 'tmp'
	tmp = strtok(cmdtext, idx);
	//check of er überhaupt wat ingevuld word achter /register
	if(!strlen(tmp))
	{
		//Als dat niet zo is, (!), dan moet er een berichtje worden verzonden:
		SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /register (password)");
	}
	//Als er wel wat ingevuld wordt....
	else
	{
		//....dan moet er worden gekeken of het bestand met de naam van de speler nog niet bestaat:
		if (!dini_Exists(udb_encode(playername)))
		{
			//Bestaat die nog niet, dan moet die worden aangemaakt:
			dini_Create(udb_encode(playername));
			//Vervolgens moet het wachtwoord worden opgeslagen:
			dini_IntSet(udb_encode(playername), "password", udb_hash(tmp));
			//Dan de variabelen 'adminlevel' en 'money', beiden met de waarde '0':
			dini_IntSet(udb_encode(playername), "adminlevel", 0);
			dini_IntSet(udb_encode(playername), "money", 0);

			dini_IntSet(udb_encode(playername), "score", 0);

			//Er moet een bericht gemaakt worden die wat info naar de speler gaat sturen:
			format(string, sizeof(string), "Account %s aangemaakt! Je kunt nu inloggen met het wachtwoord: %s.", playername, tmp);
			//Zend dat bericht naar de speler:
			SendClientMessage(playerid, COLOR_YELLOW, string);


		} //Dit was alles wat er moet gebeuren als er idd geregisteerd moet worden.

		//Als blijkt dat de naam als geregisteerd is, dan moet er een bericht naar de speler verzonden worden:
		else
		{
			format(string, sizeof(string), "%s already registered.", playername,tmp);
			SendClientMessage(playerid, COLOR_RED, string);
		}
	}
	return 1;
}

// Als de speler het commando /login typt:
if(strcmp(cmd, "/login", true) == 0)
{
	// Kijk of de speler al ingelogd is:
	if(logged[playerid] == 1)
	//Zo ja, dan moet er een bericht worden verzonden met de melding dat hij al ingelogd is.
	{
		SendClientMessage(playerid, COLOR_RED, "Je bent al ingelogd");
		return 1;
	}
	// Sla de tekst (wachtwoord in dit geval) op in de variabele 'tmp' die achter /login getypt wordt:
	tmp = strtok(cmdtext, idx);
	// Als er niks word ingetypt achter /login, dan moet er een bericht verzonden worden:
	if(!strlen(tmp))
	{
		SendClientMessage(playerid, COLOR_YELLOW, "Gebruik: /login (wachtwoord)");
	}
	// Als er wel wat in wordt getypt....
	else
	{
		//...dan word er gekeken of het bestand met de spelersnaam wel bestaat (Met andere woorden: heeft diegene zich wel geregistreerd?
		if (dini_Exists(udb_encode(playername)))
		{
			// Zo ja, dan word uit zijn bestand de waarde achter "password" gehaald:
			tmp2 = dini_Get(udb_encode(playername), "password");
			// Als het wachtwoord dat de speler ingevoerd heeft niet overeenkomt met het wachtwoord in zijn bestand. (Let op het !=-teken).
			//dan moet er een bericht worden verzonden met de melding dat hij/zij het verkeerde wachtwoord heeft getypt:
			if (udb_hash(tmp) != strval(tmp2))
			{
				SendClientMessage(playerid, COLOR_RED, "Verkeerd wachtwoord!.");
			}
			// Komt het wachtwoord wel overeen....
			else
			{
				// Zet de loginwaarde van de speler op '1'
				logged[playerid] = 1;
				// Haal uit het bestand de waarde die achter "money" staat en sla die op in de variabele 'money[playerid]'
				money[playerid] = dini_Int(udb_encode(playername), "money");
				// Haal uit het bestand de waarde die achter "adminlevel" staat en sla die op in de variabele adminlevel[playerid]
				adminlevel[playerid] = dini_Int(udb_encode(playername), "adminlevel");
				// Stel een zin samen die aangeeft hoeveel geld en welke adminlevel de speler heeft:
				format(string, sizeof(string), "Hello %s, . Je hebt adminlevel %d en je hebt %d dollar", playername, adminlevel[playerid], money[playerid]);
				// Stuur het bericht:
				SendClientMessage(playerid, COLOR_GREEN, string);
				// Geef de speler het bedrag dat zojuist in de money[playerid]-variabele is gezet:
				GivePlayerMoney(playerid, money[playerid]);
				SetPlayerScore(playerid, score[playerid]);
				TogglePlayerControllable(playerid,1);

				if(adminlevel[playerid] >= 1)
				{
					SendClientMessageToAll(0xDEEE20FF, "**** Admin has joined RTA");
				}

			}
		// Dit was alles dat er moest gebeuren als de speler zich inlogt.
		}
		// Als het account met de spelersnaam nog niet bestaat (dus de speler heeft zich nog niet geregistreerd....:
		else
		{
			// ...Dan moet er een zin samengesteld worden die zegt dat het account met die spelers naam nog niet bestaat:
			format(string, sizeof(string), "Het account %s, bestaat nog niet. Typ /register [wachtwoord] om een account te maken.", playername);
			// Het bericht verzenden:
			SendClientMessage(playerid, COLOR_RED, string);
		}
	}
	return 1;
}

if(strcmp(cmd, "/maakmijadmin", true) == 0)
{
	// Heeft de speler zich met rcon ingelogd? (met /rcon login [rcon-pass]:
	if(IsPlayerAdmin(playerid))
	{
		// Heeft de speler zich wel eerst ingelogd? (met /login [wachtwoord]:
		if(logged[playerid] == 1)
		{
			// Heeft de speler nog niet level 3? (let op het != teken)
			if(adminlevel[playerid] != 3)
			{
				// Voldoet de speler aan de voorwaarden, dan word de adminlevel[playerid] op '3' gezet:
				adminlevel[playerid] = 3;
				// Stuur nu een berichtje:
				SendClientMessage(playerid, COLOR_GREEN, "Je bent nu hoofdadmin! Gefeliciteerd!");
				SetPlayerScore(playerid, 10);
			}
			// Als de speler al level 3 is, dan moet er een berichtje worden verzonden:
			else
			{
				SendClientMessage(playerid, COLOR_RED, "Je bent al hoofdadmin!");
			}
		}
		// Als de speler zich nog niet heeft ingelogd met /login [wachtwoord]:
		else
		{
			SendClientMessage(playerid, COLOR_RED, "Je moet je eerst inloggen /login [wachtwoord]");
		}
	}
	// Als de speler zich nog niet heeft ingelogd met /rcon login [rcon-pass]:
	else
	{
		SendClientMessage(playerid, COLOR_RED, "Je moet je eerst met rcon inloggen! (/rcon login [rcon-pass])");
	}
	return 1;
}
return 0;
}

Kan iemand even helpen?

Ik wil:

					if(adminlevel[playerid] >= 1)
				{
					SendClientMessageToAll(0xDEEE20FF, "**** Admin has joined RTA");
				}

dus zo hebben:

					if(adminlevel[playerid] >= 1)
				{
					SendClientMessageToAll(0xDEEE20FF, "**** Admin %s, adminlevel %d has joined RTA");
				}

Als ik het zo verander, crasht mijn server, wat hoogst waarschijnlijk ook logisch is.

Alvast bedankt,

Gr, Alex

PS. sorry dat ik geen pastebin heb gebruikt, heb niet verwacht dat ie zo lang zou worden :)

Bewerkt: door alex.naoumov
Link to comment
Delen op andere websites

if (adminlevel[playerid] >= 1)
{
new String[128], playerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, playerName, MAX_PLAYER_NAME);
format(String, sizeof(String), ""**** Admin %s, adminlevel %d has joined RTA", playerName, adminlevel[playerid]);
SendClientMessageToAll(0xDEEE20FF,String);
}

Link to comment
Delen op andere websites

if (adminlevel[playerid] >= 1)
{
new String[128], playerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, playerName, MAX_PLAYER_NAME);
format(String, sizeof(String), ""**** Admin %s, adminlevel %d has joined RTA", playerName, adminlevel[playerid]);
SendClientMessageToAll(0xDEEE20FF,String);
}

Ok, bedankt :). Ik had al zo'n vermoeden dat ik een string moest aanmaken, maar die is toch al aangemaakt bij onplayercommandtext?

Link to comment
Delen op andere websites

  • 2 weken later...

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

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

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...