TeamDream'S
  Crea tu propio plugin
 
 Guia: Como crearse su propio plugin [NIVEL NOVATO]


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[i] & 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[i] & 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 X(... 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 

este es solo el nivel novato pero si les interesa esto hare el nivel intermedio y si puedo el nivel superior.
 
 
 
   
 
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis