Balkan SA:MP

San Andreas Multiplayer - www.sa-mp.com => Tutorijali u vezi SA-MPa => Temu započeo: Bespomocni Skripter poslato Septembar 03, 2018, 11:35:55 PRE PODNE

Naslov: Kako pravilno ubaciti Pawn.CMD?
Poruka od: Bespomocni Skripter poslato Septembar 03, 2018, 11:35:55 PRE PODNE
- Kako pravilno ubaciti Pawn.CMD u skriptu? -


Koliko je Pawn.CMD brz, da li je najbrzi?
(https://camo.githubusercontent.com/b3f2134c0de5e77d53de33b82200ec2a9a096ddb/687474703a2f2f692e696d6775722e636f6d2f735659394742642e706e67)


Potrebne stvari:
Kako ubaciti Pawn.CMD:


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]
Naslov: Odg: Kako pravilno ubaciti Pawn.CMD?
Poruka od: m u m i poslato Septembar 03, 2018, 14:27:09 POSLE PODNE
Dobar tutorijal.Svaka čast :D
Naslov: Odg: Kako pravilno ubaciti Pawn.CMD?
Poruka od: Bespomocni Skripter poslato Septembar 03, 2018, 14:27:25 POSLE PODNE
Citat: M u m i poslato Septembar 03, 2018, 14:27:09 POSLE PODNE
Dobar tutorijal.Svaka čast :D
Hvala!  <3
Naslov: Odg: Kako pravilno ubaciti Pawn.CMD?
Poruka od: Djoky poslato Septembar 03, 2018, 16:13:45 POSLE PODNE
Hvala burazeru moj <3 :D
Naslov: Odg: Kako pravilno ubaciti Pawn.CMD?
Poruka od: 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!
Naslov: Odg: Kako pravilno ubaciti Pawn.CMD?
Poruka od: // xunder poslato Septembar 03, 2018, 17:37:25 POSLE PODNE
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")
Naslov: Odg: Kako pravilno ubaciti Pawn.CMD?
Poruka od: Ino42O poslato Septembar 03, 2018, 18:30:29 POSLE PODNE
Citat: .ксундер poslato Septembar 03, 2018, 17:37:25 POSLE PODNE
Onda moraju i provjere raditi sa Bitwise & operatorom ("moraju")


true true
Naslov: Odg: Kako pravilno ubaciti Pawn.CMD?
Poruka od: Bespomocni Skripter poslato Septembar 04, 2018, 21:45:47 POSLE PODNE
Hvala svima ne predlozima :)
Obavezno pazite svi kad stavljate ime plugina da slucajno ne maknete tacku sa ekstenzije ili slicno :D
Naslov: Odg: Kako pravilno ubaciti Pawn.CMD?
Poruka od: Timur Script poslato Septembar 05, 2018, 21:57:03 POSLE PODNE
Svaka Cast
Naslov: Odg: Kako pravilno ubaciti Pawn.CMD?
Poruka od: Zola_Castello poslato Mart 19, 2019, 15:47:34 POSLE PODNE
moze pomoc izbaci mi waringe kad ubacim ovo da je komanda ne postojeca kako da resim to
Naslov: Odg: Kako pravilno ubaciti Pawn.CMD?
Poruka od: Vasic poslato Mart 19, 2019, 16:17:01 POSLE PODNE
Lepo objasnjeno, mada vecina zna kako ubacit. :D
Naslov: Odg: Kako pravilno ubaciti Pawn.CMD?
Poruka od: Purdinho poslato Mart 19, 2019, 21:24:39 POSLE PODNE
Fino :)
Naslov: Odg: Kako pravilno ubaciti Pawn.CMD?
Poruka od: DJER1C poslato Mart 20, 2019, 19:53:22 POSLE PODNE
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
Naslov: Odg: Kako pravilno ubaciti Pawn.CMD?
Poruka od: Balsa. poslato Mart 20, 2019, 22:58:25 POSLE PODNE
Solidno pohvale
Naslov: Odg: Kako pravilno ubaciti Pawn.CMD?
Poruka od: indeed.php poslato Maj 04, 2019, 22:06:27 POSLE PODNE
Solidno ;)