- 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]
.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
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
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; //Npr kad igrac ode duty dodelite mu PermisijeIgraca = 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);