Pretraga

Pritisnite Enter za pretragu ili Escape za zatvaranje

Zaključano

Kako pravilno ubaciti Pawn.CMD?

pre 7 godina
4,443
pregleda
15
postova
Ova tema je zaključana. Samo moderatori i administratori mogu odgovarati.
Bespomocni Skripter
Wheel Man
pre 7 godina
- 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:
  1. .inc file ubaciti u ..\GM\pawno\include

  2. * .dll/.so ubaciti u ..\GM\plugins

  3. * Dodati Pawn.CMD(.dll/.so) gde su vam pluginsi u server.cfg

  4. 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);
muamerkadusic
Godfather
pre 7 godina
Dobar tutorijal.Svaka čast 😄
Bespomocni Skripter
Wheel Man
pre 7 godina
M u m i wrote on September 3, 2018, 12:27 pm:
Dobar tutorijal.Svaka čast 😄

Hvala!  <3
Djoxi samp
Made Man
pre 7 godina
Hvala burazeru moj <3 😄
Ivan_Ino
Kingpin
pre 7 godina
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 = CMD_ADMIN | CMD_VIP;


pPermissions je sada jednak 0b101, što znači da imamo VIP i ADMIN permisije ali ne i MODERATOR!
Rax_King
Godfather
pre 7 godina
Ino42O wrote on September 3, 2018, 3:25 pm:
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 = CMD_ADMIN | CMD_VIP;


pPermissions 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")
Ivan_Ino
Kingpin
pre 7 godina
.ксундер wrote on September 3, 2018, 3:37 pm:
Onda moraju i provjere raditi sa Bitwise & operatorom ("moraju")


true true
Bespomocni Skripter
Wheel Man
pre 7 godina
Hvala svima ne predlozima 🙂
Obavezno pazite svi kad stavljate ime plugina da slucajno ne maknete tacku sa ekstenzije ili slicno 😄
Timur Script
Shot Caller
pre 7 godina
Svaka Cast
Zola_Castello
Wheel Man
pre 6 godina
moze pomoc izbaci mi waringe kad ubacim ovo da je komanda ne postojeca kako da resim to
FunnyGamingDay - FGD
OG Legend
3
pre 6 godina
Lepo objasnjeno, mada vecina zna kako ubacit. 😄

Former SA:MP server developer

Purda121
OG Legend
pre 6 godina
Fino 🙂
Mateja Djeric
Shot Caller
pre 6 godina
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
Balsa.
Crime Lord
pre 6 godina
Solidno pohvale
sqxl.sql
Street Runner
pre 6 godina
Solidno 😉

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava