Pagina de start a forumului amxx.MyForum.ro amxx.MyForum.ro
Fa-ti si tu propriul forum, pe www.myforum.ro!
 
 FAQFAQ   CautareCautare   MembriMembri   GrupuriGrupuri   InregistrareInregistrare 
 ProfilProfil   Mesaje privateMesaje private   AutentificareAutentificare 

TUTORIAL INCEPUT

 
Creaza un subiect nou   Raspunde la subiect    Pagina de start a forumului amxx.MyForum.ro -> Tutoriale Amxx
Subiectul anterior :: Subiectul urmator  
Autor Mesaj
anakin_cstrike
Administrator
Administrator


Data inscrierii: 26/Mai/2008
Mesaje: 7

MesajTrimis: 26/05/2008 18:22    Titlul subiectului: TUTORIAL INCEPUT Raspunde cu citat (quote)

****************************************************************************************************
IMPORTANT DE STIUT :
- In scripting/c++ se foloseste intotdeauna "{" ( acolade )
- Dupa acolada urmeaza un spatiu,FOLOSITI INTOTDEAUNA TAB !Altfel veti primi eroare la compilare !

****************************************************************************************************



1.Totul incepe printr-un "include"
In cazul nostru vom facem un plugin pentru amxmodx.Deci vom scrie asa:

Cod:
#include <amxmodx>

Mai jos vom face un plugin care executa o comanda asupra unui jucator.Aceasta comanda este conține in "amxmisc" deci necesită sa face un include si pentru "el" :

Cod:
#include <amxmisc>


Mai sunt si alte includuri pentru pluginuri mai complexe.Deocamdata lasam asa

2.Urmatorul pas este optional.Este "define",prin care definesti ceva.Deci ca sa definim pluginul,versiunea acestuia si autorul vom scrie asa:

Cod:
#define PLUGIN "numele pluginului"
#define VERSION "versiunea"
#define AUTHOR "autorul"


3.Apoi urmeaza faza de inregistrare a pluginului.Aceastea se face in felul urmator:

a).prima varianta

Cod:
public plugin_init(){

   register_plugin(PLUGIN,VERSION,AUTHOR)
}


b). a doua varianta(in cazul in care nu ati utilizat define)

Cod:
public plugin_init(){

   register_plugin("nume","versiune","autor")
}


4.Urmatoarea faza este construirea comenzilor(de exemplu vreti sa faceti o comanda amx_retry prin care sa reconectati un jucator dorit)
Vom scrie asa in register plugin_init() mai jos de register_plugin("nume","versiune","autor")

a). register_concmd -> comanda in consola
b). register_clcmd -> comanda folosita de playeri
Deci noi vom scrie asa :

Cod:
register_concmd("comanda","public",accesul,"comentariu ce va fi afisat in consola")


*comanda -> comanda voastra : amx_retry
*public -> puneti ce vreti,este un public(pote fi scris orice,care va fi folosit mai jos)
*accessul -> un admin trebuie sa aiba accesul specificat pentru a putea folosi comanda . Se poate creea si un define ( #define access ADMIN_KICK )
*comenatariu -> este clar (va aparea in consola cand dati amx_help)

In cazul nostru va arata asa :
Cod:
register_concmd("amx_retry","retry_cmd",ACCESS,"reconnect a player")

La ACCESS vom face un define langa celelalte :
Cod:
#define ACCESS ADMIN_KICK


5.Urmatorul pas este publicul(cel care lati pus la register_concmd)
In cazul nostru va fi asa(se incepe cu "public"):

Cod:
public retry_cmd(id)

*id - este "index"-ul...puteti pune ce vreti,dar de favorit este sa lasati asa,sa nu va incurcati,deoarece va fi folosit mai jos

6.In continuare,in public,vom folosi o functia care "se va asigura" ca nu oricine poate folosi comanda creeata.Functia este :
Cod:
if(!(get_user_flags(id) & ACCESS))

*! - este opusul functiilor...deci daca nu...
*ACCESS - accesul necesar,definit mai sus
Deci ar veni : functia "ia" flagurile jucatorului si verifica daca are printre ele si accesul definit

7.Apoi,daca vrei un mesaj care va fi afisat celui care foloseste comanda si nu are accesul definit,vom avea trebuință de o functie usoara,dar destul de complexa :

Cod:
client_print(index,tipul_afisarii,"mesaj")


*index - id de care va ziceam
*tipul_afisarii - sunt 4 modele :

Cod:
print_chat -> mesajul este afisat in chat
print_console -> mesajul este afisat in consola
print_center -> mesajul este afisat in centru ecranului
print_notify -> mesajul este afisat in consola putin diferit


Deci noi vom avea asa :
Cod:
client_print(id,print_console,"No Access !")

Se poate mai usor asa :
Cod:
console_print(id,"No Access !")
Asta nu inseamna ca merge si la celelalte asa :)


8.Apoi o functia nelipsita din aproximativ indiferent ce plugin,este o valoare re intoarecere : return
Sunt 2 tipuri de returnuri cele mai folosite :
*PLUGIN_HANDLED - "block further operation" -> adica sa blocheze operatia
*PLUGIN_CONTINUE - "continue with natural operation" -> adica sa continue cu operatia normala
Deci,in cazul nostru,vom avea asa :
return PLUGIN_HANDLED

Totul arata asa :

Cod:
if(!(get_user_flags(id) & ACCESS)){
   console_print(id,"No Access !")
   return PLUGIN_HANDLED
}


9.Urmatorul pas este citirea argumentului de dupa comanda pentru a putea fi identificat playerul asupra caruia se executa o comanda
Aceasta se face asa :

Cod:
new arg[32]
-> in loc de arg puneti ce vreti,dar de preferat mai bine il lasati asa

* new - este inceputul unei variabile prin care creati ce vreti
* 32 - se numeste "len" sau "length".Este un numar ce trebuie pun unelor variabile intre [] pentru stabilirea "lungimi" sirului de elemente.

Argumentul se citeste prin comanda :

Cod:
read_argv(1,arg,31)


Sunt 3 feluri de citire a argumentelor
*read_argv - citeste un solitar argument
*read_args - citeste toate argumentele dintr-o linie
*read_argc - citeste numarul de argumente dintr-o linie

Ati observat ca "len"-ul este mai putin cu unu decat in variabila.Asa va fi peste tot in functii !

10.In continuare se creeaza o variabila la alegere care va fi egalata cu o functie.Sa zicem "player" :

Cod:
new player = cmd_target(id,arg,flag)


*cmd_target - functie necesara pentru a executa o comanda asupra unui jucator
*arg - argumentul din consola
*flag - este un numar :
Cod:
1 - evita imunitatea
2 - poti executa asupra ta
4 - trebuie sa fie in viata
8 - nu poate fi bot

Daca tu vrei 2 "optiuni" flagurile se aduna...sa zicem sa evite imunitatea si sa nu poate fi bot in acelasi timp,deci vom avea asa :

Cod:
new player = cmd_target(id,arg,9)


11.Apoi verificam daca jucatorul specificat in consola exista :

Cod:
if(!player){
   console_print(id,"Player %s not found !",arg)
   return PLUGIN_HANDLED
}


* %s - se numeste "string"..sir de elemente.Mai este si :
%d sau %i - "decimal integer" folosit pentru numere.
Deci pe noi ne intereseaza %s
Si am pus la sfarsit "arg" ca sa inlocuiasca stringul cu ce a scris adminul respectiv in consola.

12.Si la final comanda :
Cod:
client_cmd(index,"comanda")

*index - variabila creata mai sus
*comanda - este clar
Deci vom avea asa :

Cod:
client_cmd(player,"reconnect")


Si apoi valuare de intoarcere de final,in cazul nostru :

Cod:
return PLUGIN_CONTINUE


|INFO| Daca vreti sa face un comentariu in plugin aveti 2 posibilitati :
1.Pt comentariu compact : //comentariu
2.Pt comentarii mai lungi : /*comentariu*/

Daca ati urmarit pasi de mai sus ar trebui sa aveti ceva de genu :

Cod:
/*This plugin was made by An[n]akin <3 H.s !
* With this plugin you will able to reconnect a specified player !
* Comand : amx_retry player
* Have Fun !
*/

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Reconnect"
#define VERSION "1.0"
#define AUTHOR "Anakin"

#define ACCESS ADMIN_KICK

public plugin_init() {
   register_plugin(PLUGIN, VERSION, AUTHOR)
   
   register_concmd("amx_retry","retry_cmd",ACCESS,"reconnect a specified player")
}

public retry_cmd(id){
   
   if(!(get_user_flags(id) & ACCESS)){
      console_print(id,"No Access !")
      return PLUGIN_HANDLED
   }
   
   new arg[31]
   read_argv(1,arg,31)
   
   new player = cmd_target(id,arg,9)
   
   if(!player){
      console_print(id,"Player %s not found !",arg)
      return PLUGIN_HANDLED
   }
   
   client_cmd(player,"reconnect") //Comand
   
   return PLUGIN_CONTINUE
}
Sus
Vezi profilul utilizatorului Trimite mesaj privat
Afiseaza mesajele pentru a le previzualiza:   
Creaza un subiect nou   Raspunde la subiect    Pagina de start a forumului amxx.MyForum.ro -> Tutoriale Amxx Ora este GMT + 2 ore
Pagina 1 din 1

 
Mergi direct la:  
Nu puteti crea un subiect nou in acest forum
Nu puteti raspunde in subiectele acestui forum
Nu puteti modifica mesajele proprii din acest forum
Nu puteti sterge mesajele proprii din acest forum
Nu puteti vota in chestionarele din acest forum


Powered by phpBB © 2001, 2005 phpBB Group
Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro