Kako pravilno ubaciti Pawn.CMD?


Započeo Bespomocni Skripter, Septembar 03, 2018, 11:35:55 PRE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

- Kako pravilno ubaciti Pawn.CMD u skriptu? -


Koliko je Pawn.CMD brz, da li je najbrzi?


Potrebne stvari:

  • Pawn.CMD .inc + .dll/.so file [KLIK]
Kako ubaciti Pawn.CMD:

  • .inc file ubaciti u ..\GM\pawno\include
  • * .dll/.so ubaciti u ..\GM\plugins
  • * Dodati Pawn.CMD(.dll/.so) gde su vam pluginsi u server.cfg
  • Dodati #include <Pawn.CMD> bilo gde (bitno je samo da nije ispod native-a, aliasa, cmdova)


Sada ste na ~70%, kako koristiti Pawn.CMD:
Ovo dodati gde zelite (samo da je ispod #include <Pawn.CMD>):
public OnPlayerCommandPerformed(playerid, cmd[], params[], result, flags) // Pricamo o flagovima kasnije
{
    return 1;
}

public OnPlayerCommandReceived(playerid, cmd[], params[], flags) // Pricamo o flagovima kasnije
{
    return 1;
}

Sada kreiramo komandu!:
CMD:helloworld(playerid, params[]) // Sta se desava kada igrac upise komandu /helloworld, ovo Vam je osnovno telo svake komande, znaci, svaka komanda ima CMD:imecmd(playerid, params[]), brackete ( { } ) i return 1; pre zadnjeg bracketa
{
	return 1;
}

Server ce prepoznati da ova komanda postoji i nece izbacivati poruku da komanda ne postoji, ali ova komanda ne radi nista jer je sve unutar bracketa (osim return 1;) prazno!
Let's make it do something! :)
CMD:helloworld(playerid, params[])
{
	print("Hello World"); //Ispisuje u konzolu "Hello world"
	return 1;
}

Ova komanda gore Vam je samo za testiranje/pokazivanje...


Sada cemo uraditi ako komanda ne postoji da posalje client message igracu da komanda ne postoji:
public OnPlayerCommandPerformed(playerid, cmd[], params[], result, flags)
{
    if(result == -1)
    {
    	SendClientMessage(playerid, -1, "SERVER: Ova komanda ne postoji!");
        return 0;
    }
    return 1;
}



Flagovi:
Mozete kreirati flagove, to su vam permisije, a sto su to permisije?
Permisije proveravaju da li igrac ima dozvolu da koristi komandu, ukoliko nema, komanda vraca nesto ili return 1; i prestaje sa daljim izvrsavanjem.
NE MORATE KORISTITI FLAGOVE UKOLIKO NE ZELITE, SVAKAKO MOZETE STAROMODNU PROVERU if(...) KOJU I JA SAM KORISTIM (OLDSQL.JBG)
(Ukoliko editujete neki mod, morate proci kroz svaku komandu koja zahteva neku permisiju i dodati sledece iznad nje):
flags:testcmd(PERMISIJA);

Kako da kreiramo permisiju & kako istu da dodelimo igracu?
Kreirajmo negde variablu gde cuvamo permisije igraca i dodeljujemo npr CMD_ADMIN ako je admin:
enum
{
	CMD_HELPER,
	CMD_ADMIN
}

new PermisijeIgraca[MAX_PLAYERS]; //Npr kad igrac ode duty dodelite mu PermisijeIgraca[playerid] = CMD_ADMIN;

public OnPlayerCommandReceived(playerid, cmd[], params[], flags)
{
	if(flags)
	{
		if(flags > CMD_ADMIN)
		{
			SendClientMessage(playerid, -1, "NOPERM");
			return 0;
		}
	}
	return 1;
}



* - .dll stavljate ako je windows a .so ako je linux hosting
Preporuka:
Ukoliko imate cmd tipa /enter (lupam), i sada hocete da ENTER radi isto sto i /enter samo dodate kada igrac pritisne KEY sledeci kod:
PC_EmulateCommand(playerid, "/enter");

To gore ce Vam uraditi potpuno isto sto i enter, ukoliko koristite flagove takodje mozete neke admin cmd pa ako igrac ima taj flag za tu cmd ona se pokrene, a ako je flag npr CMD_IGRAC nista se nece desiti :)


native PC_RegAlias(const cmd[], const alias[], ...);
native PC_SetFlags(const cmd[], flags);
native PC_GetFlags(const cmd[]);
native PC_EmulateCommand(playerid, const cmdtext[]);
native PC_RenameCommand(const cmd[], const newname[]);
native PC_CommandExists(const cmd[]);
native PC_DeleteCommand(const cmd[]);

native CmdArray:PC_GetCommandArray();
native CmdArray:PC_GetAliasArray(const cmd[]);
native PC_GetArraySize(CmdArray:arr);
native PC_FreeArray(&CmdArray:arr);
native PC_GetCommandName(CmdArray:arr, index, dest[], size = sizeof dest);


forward PC_OnInit();
forward OnPlayerCommandReceived(playerid, cmd[], params[], flags);
forward OnPlayerCommandPerformed(playerid, cmd[], params[], result, flags);
- Mesecni boost pusten ! -
193.104.68.23:27017


Citat: M u m i poslato Septembar 03, 2018, 14:27:09 POSLE PODNE
Dobar tutorijal.Svaka čast :D
Hvala!  <3
- Mesecni boost pusten ! -
193.104.68.23:27017

Hvala burazeru moj <3 :D


I LOVE VODKA AND SLAV COUNTRY'S

Trebao si još dodati kako da igrači stave više permisija jednome igraču, npr ako je igrač VIP i Admin, da može koristiti iste neke komande, vjerujem da ovdje dosta ne barata dobro bit maskama, ali da biste dodali više permisija koristite | pipe

recimo

enum (<<= 1)  // <<= 1 vam znači da svaku sljedeću stavku shiftamo za jedan bit
{ 
    CMD_ADMIN = 1, // 0b001 
    CMD_MODERATOR, // 0b010 
    CMD_VIP        // 0b100 
    // ...
};


I da dodamo 2 ili više stavki:

pPermissions[playerid] = CMD_ADMIN | CMD_VIP;


pPermissions[playerid] je sada jednak 0b101, što znači da imamo VIP i ADMIN permisije ali ne i MODERATOR!
Software Developer

Citat: Ino42O poslato Septembar 03, 2018, 17:25:57 POSLE PODNE
Trebao si još dodati kako da igrači stave više permisija jednome igraču, npr ako je igrač VIP i Admin, da može koristiti iste neke komande, vjerujem da ovdje dosta ne barata dobro bit maskama, ali da biste dodali više permisija koristite | pipe

recimo

enum (<<= 1)  // <<= 1 vam znači da svaku sljedeću stavku shiftamo za jedan bit
{ 
    CMD_ADMIN = 1, // 0b001 
    CMD_MODERATOR, // 0b010 
    CMD_VIP        // 0b100 
    // ...
};


I da dodamo 2 ili više stavki:

pPermissions[playerid] = CMD_ADMIN | CMD_VIP;


pPermissions[playerid] je sada jednak 0b101, što znači da imamo VIP i ADMIN permisije ali ne i MODERATOR!

Onda moraju i provjere raditi sa Bitwise & operatorom ("moraju")


Hvala svima ne predlozima :)
Obavezno pazite svi kad stavljate ime plugina da slucajno ne maknete tacku sa ekstenzije ili slicno :D
- Mesecni boost pusten ! -
193.104.68.23:27017


moze pomoc izbaci mi waringe kad ubacim ovo da je komanda ne postojeca kako da resim to
Vlasnik i Skripter na Target Gaming!

Vasic

*

Usus est magister optimus.

Lepo objasnjeno, mada vecina zna kako ubacit. :D
• Website: www.vasic.dev
Web Development & Cyber Security


Odlican tutorijal, sve lepo objasnjeno i za sta sluzi.
Jos mi se svidja sto krece od jednostavnijeg do malo kompleksnijeg tako da sve pohvale za tebe


Solidno ;)
Kon'nichiwa watashi no yūjin