Jump to content

[TUTORIAL] - Admin System


Mistokus

Recommended Posts

Salut! Astazi m-am gandit sa va incat cum se face un admin system. Sper sa va placa!

Intai haideti sa definim variabila.

#include <a_samp>
#include <sscanf>
  
enum pInfo {
	pAdmin,
};
new PlayerInfo[MAX_PLAYERS][pInfo];

Acum haideti sa facem comanda de setare

CMD:setadmin(playerid, params[])
{
		if(!IsPlayerAdmin(playerid)) return SCM(playerid, -1, AdminOnly);
		new alevel,str[128],ID;
		if(sscanf(params,"ui",ID,alevel)) return SendClientMessage(playerid,0xB3B3B3FF, "Syntax: {FFFFFF}/setadmin <playerid/name> <admin level>");
		if(!IsPlayerConnected(ID)) return SendClientMessage(playerid,0xB3B3B3FF, "{FF0000}ERROR: {FFFFFF}Utilizatorul nu este conectat.");
		if(ID == playerid) return SCM(playerid, COLOR_GREY, "Nu poti folosi aceasta comanda asupra ta!");
		if(alevel > 7 || alevel < 0) return SendClientMessage(playerid,0xB3B3B3FF,"{FF0000}ERROR: {FFFFFF}Sunt valabile doar 7 nivele de admin!");
		if(alevel == 0)
		{
			PlayerInfo[ID][pSelectColor] = 0;
		    if(PlayerInfo[ID][pAdmin] == 0) return 1;
			format(str, sizeof(str), "%s te-a scos din functia de admin.", GetName(playerid));
			SCM(ID, 0x00BFFFFF, str);
			format(str, sizeof(str), "%s l-a scos din functia de admin pe %s.", GetName(playerid), GetName(ID));
			SendAdminMessage(0x00BFFFFF, str);
			SendHelperMessage(0x00BFFFFF, str);
		    PlayerInfo[ID][pAdmin] = 0;
			StopFly(ID);
			UsedFly[ID] = 0;
		}
		if(alevel == 1)
		{
		    if(PlayerInfo[ID][pAdmin] == 1) return 1;
			format(str, sizeof(str), "%s te-a promovat la functia de admin 1 (Trial Admin).", GetName(playerid));
			SCM(ID, 0x00BFFFFF, str);
			format(str, sizeof(str), "%s l-a promovat pe %s la functia de admin 1 (Trial Admin).", GetName(playerid), GetName(ID));
			SendAdminMessage(0x00BFFFFF, str);
			SendHelperMessage(0x00BFFFFF, str);
		    PlayerInfo[ID][pAdmin] = 1;
		}
		if(alevel == 2)
		{
		    if(PlayerInfo[ID][pAdmin] == 2) return 1;
			format(str, sizeof(str), "%s te-a promovat la functia de admin 2 (Junior Admin).", GetName(playerid));
			SCM(ID, 0x00BFFFFF, str);
			format(str, sizeof(str), "%s l-a promovat pe %s la functia de admin 2 (Junior Admin).", GetName(playerid), GetName(ID));
			SendAdminMessage(0x00BFFFFF, str);
			SendHelperMessage(0x00BFFFFF, str);
		    PlayerInfo[ID][pAdmin] = 2;
		}
		if(alevel == 3)
		{
		    if(PlayerInfo[ID][pAdmin] == 3) return 1;
			format(str, sizeof(str), "%s te-a promovat la functia de admin 3 (General Admin).", GetName(playerid));
			SCM(ID, 0x00BFFFFF, str);
			format(str, sizeof(str), "%s l-a promovat pe %s la functia de admin 3 (General Admin).", GetName(playerid), GetName(ID));
			SendAdminMessage(0x00BFFFFF, str);
			SendHelperMessage(0x00BFFFFF, str);
		    PlayerInfo[ID][pAdmin] = 3;
		}
		if(alevel == 4)
		{
		    if(PlayerInfo[ID][pAdmin] == 4) return 1;
			format(str, sizeof(str), "%s te-a promovat la functia de admin 4 (Head Admin).", GetName(playerid));
			SCM(ID, 0x00BFFFFF, str);
			format(str, sizeof(str), "%s l-a promovat pe %s la functia de admin 4 (Head Admin).", GetName(playerid), GetName(ID));
			SendAdminMessage(0x00BFFFFF, str);
			SendHelperMessage(0x00BFFFFF, str);
		    PlayerInfo[ID][pAdmin] = 4;
		}
		if(alevel == 5)
		{
		    if(PlayerInfo[ID][pAdmin] == 5) return 1;
			format(str, sizeof(str), "%s te-a promovat la functia de admin 5 (Lead Admin).", GetName(playerid));
			SCM(ID, 0x00BFFFFF, str);
			format(str, sizeof(str), "%s l-a promovat pe %s la functia de admin 5 (Lead Admin).", GetName(playerid), GetName(ID));
			SendAdminMessage(0x00BFFFFF, str);
			SendHelperMessage(0x00BFFFFF, str);
		    PlayerInfo[ID][pAdmin] = 5;
		}
		if(alevel == 6)
		{
		    if(PlayerInfo[ID][pAdmin] == 6) return 1;
			format(str, sizeof(str), "%s te-a promovat la functia de admin 6 (Co-Owner).", GetName(playerid));
			SCM(ID, 0x00BFFFFF, str);
			format(str, sizeof(str), "%s l-a promovat pe %s la functia de admin 6 (Co-Owner).", GetName(playerid), GetName(ID));
			SendAdminMessage(0x00BFFFFF, str);
			SendHelperMessage(0x00BFFFFF, str);
		    PlayerInfo[ID][pAdmin] = 6;
		}
		if(alevel == 7)
		{
		    if(PlayerInfo[ID][pAdmin] == 7) return 1;
			format(str, sizeof(str), "%s te-a promovat la functia de admin 7 (Owner/Scripter).", GetName(playerid));
			SCM(ID, 0x00BFFFFF, str);
			format(str, sizeof(str), "%s l-a promovat pe %s la functia de admin 7 (Owner/Scripter).", GetName(playerid), GetName(ID));
			SendAdminMessage(0x00BFFFFF, str);
			SendHelperMessage(0x00BFFFFF, str);
		    PlayerInfo[ID][pAdmin] = 7;
		}
		return 1;
}

Si acum cateva comenzi.

CMD:spawn(playerid, params[])
{
	new UserID, info[512], destinatar[MAX_PLAYER_NAME], nam[MAX_PLAYER_NAME];
	if(PlayerInfo[playerid][pAdmin] < 1) return SCM(playerid, -1, AdminOnly);
	if(sscanf(params, "u", UserID)) return SCM(playerid, 0xB3B3B3FF, "Syntax: {FFFFFF}/spawn <playerid/name>");
	if(PlayerInfo[UserID][pAdmin] > PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid, -1, "Nu poti folosi comanda aceasta pe acel player.");
	if(!IsPlayerConnected(UserID)) return SendClientMessage(playerid,0xB3B3B3FF, "{FF0000}ERROR: {FFFFFF}Utilizatorul nu este conectat.");
	GetPlayerName(playerid, nam, sizeof(nam));
 	GetPlayerName(UserID, destinatar, sizeof(destinatar));
 	format(info, sizeof(info), "{FFFFFF}<{FF0000}AdminCMD{FFFFFF}> %s i-a acordat respawn lui %s.",nam, destinatar);
 	SendAdminMessage(-1, info);
 	SpawnPlayer(UserID);
 	SetPlayerVirtualWorld(UserID, 0);
 	SetPlayerInterior(UserID, 0);
 	printf("%s has spawned %s.",nam,destinatar);
	return 1;
}
CMD:aheal(playerid, params[])
{
	new UserID, info[512], destinatar[MAX_PLAYER_NAME],nam[MAX_PLAYER_NAME];
	if(PlayerInfo[playerid][pAdmin] < 1) return SCM(playerid, -1, AdminOnly);
	if(sscanf(params, "u", UserID)) return SCM(playerid, 0xB3B3B3FF, "Syntax: {FFFFFF}/aheal <playerid/name>");
	if(PlayerInfo[UserID][pAdmin] > PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid, -1, "Nu poti folosi comanda aceasta pe acel player.");
	if(!IsPlayerConnected(UserID)) return SendClientMessage(playerid,0xB3B3B3FF, "{FF0000}ERROR: {FFFFFF}Utilizatorul nu este conectat.");
 	GetPlayerName(UserID, destinatar, sizeof(destinatar));
 	GetPlayerName(playerid, nam, sizeof(nam));
 	format(info, sizeof(info), "{FFFFFF}<{FF0000}AdminCMD{FFFFFF}> %s i-a acordat heal lui %s.",nam,destinatar);
 	SendAdminMessage(-1, info);
 	SetPlayerHealth(UserID, 100.0);
 	printf("%s i-a acordat heal lui %s.",nam,destinatar);
	return 1;
}

Si asta a fost. Daca v-a fost util acest tutorial nu uitati de un +1.

Link to comment
Share on other sites

Foarte tare tutorialu. Am invatat tot ce ai facut acolo, am si inteles. Cel mai bun tutorial de pe intreaga planeta, foarte bine documentat si explicat. +1000 

Hai ma serios, ce dracu? Sa arunci codu in fata cuiva nu e tutorial, e doar prezentare de source code nimic mai mult. Copy-paste nu e un tutorial, nu inveti nimic din asta, inveti numa ca daca copiezi coduri de pe net e o practica buna si asa iti creezi un gamemode sau whatever. Crezi ca daca mi-ai aruncat codul in fata am invatat ceva? Ce face codul respectiv? Ce inseamna multe lucruri de acolo? Nu, o sa fiu doar fericit ca se compileaza(doar daca) pentru iti lipsesc cateva elemte din acest tutorial ca codul dat de tine sa functioneze

SendAdminMessage(0x00BFFFFF, str);
SendHelperMessage(0x00BFFFFF, str);
SCM(ID, 0x00BFFFFF, str);
StopFly(ID);
UsedFly[ID] = 0;

Eu daca as fi fost incepator acum si ti-as fi copiat codul din acest jalnic "tutorial" as fi avut acele erori de definire. Ce ar fi trebuit sa fac daca erau complet incepator si voiam sa imi creez un sistem ca al tau de admin? Ar fi trebuit sa imi bat capul si dupa sa renunt ca nu stiam de unde provin acele chestii?

  • Like 1
  • Haha 1
  • Upvote 2
Link to comment
Share on other sites

  • 1 month later...

 La faza cu alevel, tu ai facut pe fiecare caz. Era mult mai simplu daca faceai ceva de genul:

 

PlayerInfo[ID][pAdmin] = alevel;

Presupun ca tu ai facut aceasta chestie cu if uri pentru a-i da mesajul cu Senior Admin etc. Si asta se putea modifica usor:

stock AdminName(level) {
	new string[64];
	switch(level) {
		case 1: string = "Trial";
		case 2: string = "Junior";
		case 3: string = "General";
		case 4: string = "Head";
		case 5: string = "Lead";
		case 6: string = "Owner";
	}
	return string;
}

 

iar la SCM faceai ceva de genul:

new string[126];
format(string, sizeof(string), "%s te-a promovat la functia de admin %d (%s).", GetName(playerid), alevel, AdminLevel(alevel));
SCM(ID, -1, string);

 

Un sfat: daca continui sa faci tutoriale, adauga si tu o explicatie pentru fiecare linie macar, asa sa dai codul sursa nu se numeste tutorial, majoritate il vor copia si-l vor pune asa in gamemode si apoi o sa vezi sectiunea de Help Scripting plina ca nu le compileaza gamemode-ul.

In mare este esentialul unui sistem de admini, fara faza cu salvarea in baza de date etc. Mult succes pe viitor!

Edited by Mento

76561198110915771.pngAddFriend.png

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.