Guia: Como crearse su propio plugin


Introduccion:
¿que son los plugin?
Los pugins son unos archivos que utiliza el AMX para realizar tareas
Ej:
-Ejercer un comando a tal momento
-Eliminar algun archivo
-Leer un archivo
-Reaccionar al accionarse un comando
-Reproducir sonidos
-Dejar mensajes
-Realizar eventos (Los evntos serian cuando sucede algo en el cs, Ej : headshot)
-Kickear, banear, slapear automaticamente
-Volcacion de sangre
etc
¿que son?
Aunque no lo creas son como un *.txt , se lo habre con el block de notas...

Requisitos:
Los requisitos dependerian de la cantidad de plugins o q cantidad contiene el plugin ... yo tengo una memoria de 120 MB y si lo lanzo a internet me da 300 latency por ahi XD ... claro q si tienes de 256 o 512 o tansolo juegas por LAN esto no es un problema.
Otra cosa que se necesita es tener el block de notas o algo que lea .txt q no sea el Microsoft word.

Que me debo bajar:
Nada de nada (amenos q sea el Block de notas XD)
Debes tener el AMXMOD
Si recuerdas donde instalaste el AMX , en el caso general de el winzip lo pudiste haber descomprimido en unnziped/amx , adento de la carpeta de AMX tiene q haber una karpeta llamada "examples". Si no la tienes bajate el amx de nuevo

Comenzar:
1°. No creas q esto es sensillo , es un poco complicado

Entra a la carpeta de EXAMPLES y veráz archivos llamados:
admin.sma
adminvote.sma
adminchat.sma
adminhelp.sma
mapchopser.sma

puedes abrirlos con el block de notas.
Si te sucede como ami q se ven unos cuadraritos negros y no se entiende nada podes aser lo siguiente
1° . Seleccionar un cuadradito
2° . Presionar Ctrl + C
3° . Presiona F3 (debe aparecerte el buscador o sino aslo manualmente)
4° . En donde te deja escribir teclea Ctrl + V
5° . Poner buscar siguiente
6° . Salir del buscador
7° . vamos al principio del texto, que el | tambien se valla.
8° . Ahora aremos seguido F3 y Enter ,F3 y Enter ,F3 y Enter ,F3 y Enter ,F3 y Enter , ... no le erres a repetir , enter y enter , enter y F3 , porque despues puede no funcionar el plugin

Ahora tenemos el ejemplo echo , con eso N05 podremos guiar...

Les dare que sigunifica la mayoria de las cosas:

Veran que al comienzo hay algo asi
/* AMX Mod script.
*
* (c) Copyright 2002-2003, OLO
* This file is provided as is (no warranties).
*
*/
eso es el credito ... se pone "/*" al comienzo de cada credito y "*/" al final (lo que no se es si es necesario los * en la parte de adentro XD)

Mas abajo se encontrara
#include <amxmod>
#include <amxmisc>
o solo
#include <amxmod>

#include: Si se fijan en examples/include habra unos archivos inc que tambien se abren con el block...
en este caso el #include <amxmod> esta queriendo incluir lo que tiene ese amxmod
ATENCION NUNCA MODIFICAR ESOS ARCHIVOS

Fijense el archivo admin ... lo usare como ejemplo para enseniales q hace cada unas de sus lienas

:
#define MAX_ADMINS------------64
Define un numero con letras , en este caso es 64 , todo va con mayuscula


new admin_password[MAX_ADMINS][32]
aca utilizo el MAX_ADMINS , osea q podemos enves de new admin_password[MAX_ADMINS][32] podemos poner new admin_password[64][32]
esto de new crea un , un , un , un , como decirlo . Lo entenderan mas tarde pero les puedo explicar algo
El 64 son las cantidades de admins , como dije habia maximo
Quedaria dibidida en 64 partes y cada parte solo puede tener 32 caracteres ( letras , incluyendo los espacios)
por ahora no se le assigno nada al ,al ,al ,al ,al por ahora llamemola "linea nueva"
osea que el
admin_password[0] no tiene nada
admin_password[1] no tiene nada
admin_password[2] no tiene nada
admin_password[3] no tiene nada
...


new admin_num = 0
Este solo tiene numero asignado , no tiene limite de caracteres ni tampoco se dibide ... esta "linea nueva" se puede sumar y restar

en otros casos hay lago asi:

new nuevalinea[32]
tiene de limite 32 caracteres, si queremos podemos a 33 o 34 o 35 y asi... o puede estar dividido en 32 partes

new nuevalinea[32] = {"Palabras1","Palabras2","Palabras3","Palabras4",y mas alla}
esta dibidida en 32 partes y cada una tiene accinada lo que esta en { } , Palabra1 pertenese a nuevalinea[0], palabra2 pertenece a nuevalinea[1] y asi ...
tambien se puede poner numeros pero no se le ponen comillas como
new nuevalinea[32] = {0,3,6,8,23,56,y asi}
y si queremos que toda la division tenga un mismo numero ponemos puntos suspenciovos
new nuevalinea[32] = {15,...}
ahora las 32 partes tienen un valor de 15


public admin_cmd(){
Como explicar eso... public seria digamos una parte del plugin XD , admin_cmd es como se llama ese public , los () son como un new que viene de otra parte del plugin que lo acciono , ese plugin tiene varios new y eso se envia a traves del () ...
LOS NEW QUE ESTAN DENTRO DEL PUBLIC SON SOLO DE AHI, NO SALEN A MENOS QUE LO MANDES POR ()...
el { significa que abre el ese public


----------------if (admin_num >= MAX_ADMINS){
Ahi dice que cuando el admin_num que nos acordamos que era 0 es mayor o igual a MAX_ADMIN que nos acordamos que MAX_ADMINS representaba el 64 se activara lo de abajo
If dice que cuando algo sea igual, mayo o menor pase lo que esta abajo que se lo habre con un {


--------------------------------server_print("Admins limit reached!"
Despues de que el admin_num fue mayor que 64, server_print muestra en la consola del server el mensaje que sigue ( se lo escribe en comillas porque si no lo hacemos el plugin lo tomara como una "linea nueva" , pero si es un numero no es necesario) ("Admins limit reached!"

--------------------------------return PLUGIN_HANDLED
Se detiene de leer , lo de abajo del public ya no cuenta...

----------------}
Esta cerrando el if que pusimos en esa coumna ... al que me refiero es el if (admin_num >= MAX_ADMINS){ osea que si el admin_num es menor q el MaX_ADMINS el se saltea esa parte hasta el } de esa columna

----------------new data[32]
Se creo una "linea nueva" del public , solo pertenece ahi!

----------------read_argv(1,admin_name[admin_num],31)
Lee el comando que se acciono...
el 1 representa el valor del comando ...
Si se fijan a lo ultimo del PLUGIN habra algo asi
register_srvcmd("amx_admin","admin_cmd"
cuando accione el "amx_admin" se acciona el public admin_cmd
yo acciono el amx_admin <y aca seria el read_argv(1>
read_argv(1,admin_name[admin_num],31)
admin_name[admin_num]
recuerdan la "linea nueva" admin_num que esta mas arriba , tiene valor 0
osea que quedaria
admin_name[0] le damos el valor de lo que se escribio despues del comando... osea
amx_admin "N050Tr05"
y el valor ahora de

admin_name[0] = N050Tr05

el 31 ese que esta ahi es el maxmimo de caracteres ... siempre pongan uno menos que el otro , 32 a 31 , 64 a 63 y asi

despues estan los otros de read_argv
es el que esta segundo en el comando
amx_admin N050Tr05 *******
Fijense que este read_argv ahora tiene un "2" despues ...


----------------admin_priv[admin_num] = read_flags(data)
recuerdan mas arriba la "linea nueva" que es new admin_priv[MAX_ADMINS], que es new admin_priv[64]...
para asignrle nu valor a esa lineanueva solo debemos poner el nombre:
admin_priv[admin_num] que si recuerdan admin num es 0 entonces seria
admin_priv[0]
el = le esta asignando lo que es read_flags(data)
read_flags(data) , lee la letra o letras que le pusimos . abcde , abc , bd , eso... y lo transforma en numero
a = 1 ... 2 a la 0 potencia (matematicas)
b = 2 ... 2 a la 1 potencia (matematicas)
c = 4 ... 2 a la 2 potencia (matematicas)
d = 8 ... 2 a la 3 potencia (matematicas)
e = 16 ... 2 a la 5 potencia (matematicas)
f = 32 ... 2 a la 6 potencia (matematicas)
g = 64 ... 2 a la 7 potencia (matematicas)
h = 128 ... 2 a la 8 potencia (matematicas)
i = 256 ... 2 a la 9 potencia (matematicas)
...

----------------admin_num++
Asignacion de una suma al admin_num
La suma es de 0 + 1...
entonces el admin_num ahora es 1 ... si se vuelve a accionar el amx_admin sera lo mismo solo que ahora el admin_priv[0] no sera 0 sino admin_priv[1] ... luego llegara al 64 y ahi si que es mayor q el MAX_ADMIN ... ok?...

----------------return PLUGIN_HANDLED
Cuando se ocupa una o mas veses en el public eso se pone return PLUGIN_HANDLED al final y despues e pone el } alado del margen para cerrar el plugin



----------------------------------------------------------------------------------------------------------------
Mas abajo esta get_access(id,name[],authid[],ip[], password[]){
fijense que no tiene public alado y tiene en el () palabras como les habia explicado ...

veran las "lineas nuevas"

estara algo asi
for(new i = 0; i < admin_num; ++i) {

eso quiere decir que se hace una lineanueva y se va comparando
quedaria
i = 0
se compara si i es menor que el admin num y si es asi se hace todo lo de abajo ocupando la i cuando se termina eso se suma esa i ... i = 0 , 0 + 1 = 1... ahora i vale 1 entonces se vuelve a comparar y si i es menor que la cantidad de admin se activa todo lo de abajo y cuando termina i se suma ... i = 1 ... 1 + 1= 2 ... ahora i vale 2 ... asi susesibamente y cuando i ya sea igual o mayor que admin_num ya la especie de public que no lo es se cierra


checka una mirada a include/amxcont.inc y busca FLAG_AUTHID ... el numero es algo asi (1<<2) ... en este caso es una c . si a nuestro admin le pusimos una C se activara lo siguiente

if (admin_flags & FLAG_AUTHID) {
mira mas arrba abiamos mostrado lo que era admin_flags ...
si admin_flag[0] (por ahora es 0)
a = (1<<0)
b = (1<<1)
c = (1<<2)
es igual a FLAG_AUTHID que FLAG_AUTHID es (1<<2) se activa lo de abajo y se sierra esa con el }

mas abajo esta
else if (admin_flags & FLAG_IP) {
que dice?
pero si admin_flag....
else significa PERO
osea que si se activo el IF de arrba no se puede activar ese if porque este es solo PERO

asi susesibamente


index = i
esta diciendo que el significado de index que mas arriba dice que vale -1 ahora vale i ... cuando vale i ? puede valer 0 , 1 ,2 ,etc


if (index != -1) {
Este no esta incluido con el for de arriba
Dice que si index NO ES IGUAL A -1 se abre lo de abajo


new sflags[32]
get_flags(admin_priv[index],sflags,31)
actuan juntos ... se creo una lineanueva y el valor de esa linea es de las letras que le dimos a nuestro admin (admin_priv[index] (index es igual al valor de i y i es el numer0 de admin))...sflags no va entre comillas porque es una nuevalinea

result |= 8
no entendi ... sorry

log_to_file(logfilename,"Login: ^"%s<%d><%s><>^" become an admin (account ^"%s^" (access ^"%s^" (address ^"%s^"",name,get_user_userid(id),authid,admin_name[index] ,sflags,ip)

graba en amx/logs lo siguiente Login: "%s<%d><%s><>" become an admin (account "%s" (access "%s" (address "%s"
que es %s? ... eso es un valor que dice por ahi ese ",name" el primer %s va con el primer con coma , el segundo que es un %d va con get_user_userid(id) .... porque %d? ... se usa %d para las lineasnuevas que se dividen , tambien se ocupa para la userid
^ ¿que es el ^?
este esta junto a la " ... ^"
cuando queremos poner por ejemplo

bind 2 "spk "hello men""
queremos que las comillas verdes sean parte del spk pero solo queda
bind 2 "spk " hello men""

el rojo con el rojo y el verde con el verde
en el amx funcionaria (como ejemplo , no lo vallan a intentar) bind 2 "spk ^"hello men^""

el verde abarca el spk y el rojo abarca el bind....

en este caso se remplaza el ^" se lo toma como "



new defaccess[32]
get_cvar_string("amx_default_access",defaccess,31)
Checka el cvar amx_default_access y le da el valor al defaccess


BAMOS AL SIGUIENTE PUBLIC

new result = get_access(id,username,userauthid,userip,password)

¿que es get_access?
fijense arriba .. el que estubimos biendo , el que no tiene public , se llama get_access y lleva (id,name[],authid[],ip[], password[]) como el get_access(id,username,userauthid,userip,password)... se traslado las nuevaslineas al otro ...
esto debe ser asi ... el get_access checka todo eso y el result son las flags que le pusimos a nuestro admin

ya me estoy cansando asi que aca llegue ... este fue un ejemplo para que se guien mas o menos como se hace un plugin del amx ... yo lo tube que descubrir yo solito ... si tienen el sma para hacer hagan lo siguiente:
1° . Creen una carpeta que se llame como quieran y ahi manden todos los sma de ejemplos...
2° . El suyo dejen lo en examples
3° . Mandar el sc.exe . Cual de todos? . el que tiene esa tuerquita
4° . Mirar los errores que aparecen . Te dice que renglon fue ... te lo dice entre parentecis ... por ej
MIPLU~1.SMA(28) : .... el numero ese es el renglon en el que esta el error


Gracias attj.-


Comentar no cuesta nada