Jump to content

- Advertisement -
Photo

[CS16-Scripting] Creare comenzi


  • Please log in to reply
3 replies to this topic

#1
Andrei;

Andrei;

    Administrator

  • Administrator
  • 3201 posts
  • 398 topics
  • Joined 16-December 12
  • Country: Country Flag

Pentru inceput, este important sa stiti cum sa creati o comanda, accesibila doar adminilor/doar playerilor.

 

Nativele cu care lucram sunt:

register_clcmd   //comenzi in consola/chatul playerilor
register_concmd  //comenzi din orice consola

1.Comenzi pentru playeri:

 

Pentru comenzi in chat, cel mai des se foloseste register_clcmd.

register_clcmd(const client_cmd[],const function[],flags=-1, const info[]="", FlagManager=-1);

  • client_cmd este comanda
  • function este funtia apelata
  • flags sunt flagurile de acces pentru comanda
  • info este descrierea comenzii
  • ultimul parametru este neimportant

O sa iau ca exemplu un plugin care printeaza in chat cata viata si armura aveti.

#include < amxmodx > 

public plugin_init ( )
{
	register_plugin("Health & Armor in chat", "0.1", "Artick");
	register_clcmd("say /info", "ClCmdHealth");
	register_clcmd("say_team /info", "ClCmdHealth");
	
}

public ClCmdHealth( id )
{
	if(!is_user_alive(id))
	{
		return 1;
	}
	
	new iHealth = get_user_health( id );
	new iArmor  = get_user_armor( id );
	
	client_print(id, print_chat, "Ai [ HP: %i ] [ AP: %i ]", iHealth, iArmor);
	return 0;
}

Explicatiile:

register_clcmd("say /info", "ClCmdHealth");
register_clcmd("say_team /info", "ClCmdHealth");
  • inregistram comanda /info in chat
  • ClCmdHealth este publicul ce va fi chemat.
  • daca nu am pune say/ say_team comanda ar fi pentru consola si nu pentru chat.
  • say este chatul normal
  • say_team este team chat
if(!is_user_alive(id))
{
    return 1;
}
  • if verifica daca conditia dintre ( ) este adevarata
  • daca este adevarata trece la instructiunile dintre { }
  • ! neaga conditia
  • iful nostru se traduce asa: daca userul nu este in viata
  • return 1 este acelasu lucru cu return PLUGIN_HANDLED si opreste functia noastra
  • daca nu este in viata nu poate avea hp si ap,deci trebuie sa oprim functia
new iHealth = get_user_health( id );
new iArmor  = get_user_armor( id );
  • facem 2 variabile iHealth si iArmor
  • ele vor retine hpul si apul jucatorului
  • get_user_health( index ) returneaza valoarea hpului
  • get_user_armor( index ) returneaza valoarea apului
client_print(id, print_chat, "Ai [ HP: %i ] [ AP: %i ]", iHealth, iArmor);
return 0;

  • printam valorile de mai sus.
  • return 0 inseamna return PLUGIN_CONTINUE si lasa functia sa continue

Pentru a seta aceasta comanda in consola stergem din register_clcmd say si say_team.

Nu este necesar sa faceti variabilele, puteti pune direct in client_print functiile de get_*

client_print(id, print_chat, "Ai [ HP: %i ] [ AP: %i ]", get_user_health(id), get_user_armor(id));

2.Comenzi pentru admini

native register_concmd(const cmd[],const function[],flags=-1, const info[]="", FlagManager=-1);
  • client_cmd este comanda
  • function este funtia apelata
  • flags sunt flagurile de acces pentru comanda
  • info este descrierea comenzii
  • ultimul parametru este neimportant

O sa aleg un exemplu care seteaza x hp unui player printr-o comanda in consola. Explicatiile le gasiti in cod,e mai simplu.

#include <amxmodx>
#include <amxmisc> //util pentru verificarea accesului la comenzi de admin si gasirea pathurile catre foldere
#include <fun> // chestii fun, setare hp/ap/speed/gravity/godmod etc


public plugin_init()
{       
        //inregistreaza comanda amx_set_health cu publicul CmdHealth
        //accesul este setat pe ADMIN_KICK
        //intre "" este descrierea comenzii
	register_concmd("amx_set_health", "CmdHealth", ADMIN_KICK, "<player> <health>")
}

public CmdHealth(id, level, cid)
{
        //verifica daca playerul nu are acces la comanda
        //3 este numarul de argumente: primul este comanda(1)+ al doilea este numele playerului(2)+al treilea este valoarea hpului(3). 1+1+1=3
	if (!cmd_access(id, level, cid, 3))
	{
		return 1//oprim functia,nu are acces. eventul ii puteti printa un mesaj cu console_print
	}
	
	new szArg1[24]//primul argument citit adica numele playerului
	new szArg2[4]//al doilea argument citit,valoarea hpului
	
        //read_argv citeste argumentele. citim primul argument in string arrayul szArg1 si pe al doilea in szArg2
        //charsmax afla numarul de celule in care se poate stoca informatie
        //in cazul nostru 24,de la 0 la 24-1.
        //se poate utiliza si sizeof -1
	read_argv(1, szArg1, charsmax(szArg1))
	read_argv(2, szArg2, charsmax(szArg2))
	
        //cand citim argumentul el este string,nu numar
        //in transformam in integer prin functia str_to_num
	new HpToGive = str_to_num(szArg2)
	
	new Target = cmd_target(id, szArg1, 1)//aflam idul playerului(cel caruia vrem sa ii dam p).
	set_user_health(Target, HpToGive)//set_user_health(index, valoare), va seta hpul playerului. ii puteti printa un mesaj ca sa stie ca a primit hp.
	
	return 0
}


Edited by Artick ;, 01 August 2014 - 09:34 AM.

  • Bogdan ; and SoRinM like this

#2
D3luxe

D3luxe

    Advanced Member

  • Membru
  • 179 posts
  • 22 topics
  • Joined 28-June 14
  • Country: Country Flag
Respect pentru munca depusă nu oricine poate face asta.
  • Andrei; likes this

#3
Razvan-

Razvan-

    Banned

  • Banned
  • 858 posts
  • 95 topics
  • Joined 09-June 13
  • Country: Country Flag

Respect pentru munca depusă nu oricine poate face asta.


Idem

Nu e complicat crearea comenzilor.

#4
D3luxe

D3luxe

    Advanced Member

  • Membru
  • 179 posts
  • 22 topics
  • Joined 28-June 14
  • Country: Country Flag

Depinde de fiecare si depinde de ce limbajuri a studiat .Daca te-ai ocupat de htmle o sa intelegi si amxx dar mai greu .Eu incerc sa il invat pas cu pas .






1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users