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>):
[pawn]
public OnPlayerCommandPerformed(playerid, cmd[], params[], result, flags) // Pricamo o flagovima kasnije
{
    return 1;
}[/pawn]
[pawn]
public OnPlayerCommandReceived(playerid, cmd[], params[], flags) // Pricamo o flagovima kasnije
{
    return 1;
}
[/pawn]
Sada kreiramo komandu!:
[pawn]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;
}[/pawn]
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! :)
[pawn]CMD:helloworld(playerid, params[])
{
   print("Hello World"); //Ispisuje u konzolu "Hello world"
   return 1;
}[/pawn]
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:
[pawn]
public OnPlayerCommandPerformed(playerid, cmd[], params[], result, flags)
{
    if(result == -1)
    {
       SendClientMessage(playerid, -1, "SERVER: Ova komanda ne postoji!");
        return 0;
    }
    return 1;
}
[/pawn]


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):
[pawn]flags:testcmd(PERMISIJA);[/pawn]
Kako da kreiramo permisiju & kako istu da dodelimo igracu?
Kreirajmo negde variablu gde cuvamo permisije igraca i dodeljujemo npr CMD_ADMIN ako je admin:
[pawn]enum
{
   CMD_HELPER,
   CMD_ADMIN
}[/pawn]
[pawn]new PermisijeIgraca[MAX_PLAYERS]; //Npr kad igrac ode duty dodelite mu PermisijeIgraca[playerid] = CMD_ADMIN;[/pawn]
[pawn]public OnPlayerCommandReceived(playerid, cmd[], params[], flags)
{
   if(flags)
   {
      if(flags > CMD_ADMIN)
      {
         SendClientMessage(playerid, -1, "NOPERM");
         return 0;
      }
   }
   return 1;
}[/pawn]


* - .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:
[pawn]PC_EmulateCommand(playerid, "/enter");[/pawn]
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 :)


[pawn]
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);
[/pawn]

[pawn]
forward PC_OnInit();
forward OnPlayerCommandReceived(playerid, cmd[], params[], flags);
forward OnPlayerCommandPerformed(playerid, cmd[], params[], result, flags);
[/pawn]
- 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

[pawn]
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
    // ...
};
[/pawn]

I da dodamo 2 ili više stavki:

[pawn]
pPermissions[playerid] = CMD_ADMIN | CMD_VIP;
[/pawn]

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

[pawn]
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
    // ...
};
[/pawn]

I da dodamo 2 ili više stavki:

[pawn]
pPermissions[playerid] = CMD_ADMIN | CMD_VIP;
[/pawn]

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!

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