[TUT] Crear Clases
#1
Hola chicos estoy usando un sistema de clases en "mi" HNS y bueno, les vengo a dejar una guía para que puedan tener clases en su MOD ; esto es adaptable a todo...
Lo extraje de un deathrun de pozejk y muy facil mente lo adapte al HNS

Bueno ; me puse las pilas y explique casi casi todo. ya es un TUTO

Aviso: Este sistema es por lvls ; es decir te pide niveles para poder elegir las clases

Comencemos

Vamos a usar el
Código PHP:
#include <fun> 

Cuando estaba explicando me di cuenta de que me olvide de las variables
Código PHP:
new g_class33 ]; // Hacemos una variable que contenga las clases    
new g_next_class33 ]; // Esta variable es para cuando elige una clase 

Abajo de los includes
Código PHP:
const Keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9); // Definimos esto para usar en el menu 

Debajo de los includes ponemos
Código PHP:
enum // Hacemos una enumeracion para lo siguiente
{
    
CLASE_NVL 0// Definimos su valor en 0
    
CLASE_VIDA,
    
CLASE_ARMOR
// Aca se pueden definir muchas cosas mas por ejemplo la gravedad, velocidad , danio, etc ; Siempre recuerden que el ultimo va sin la ","
}

new 
g_clases_name[][] = // Aca contenemos todos los nombres de las clases
{
    
"Iniciado",
    
"Experto",
    
"Avanzado",
    
"Elite",
    
"Ninja",
    
"Mafioso" // Recuerden que el ultimo va sin la ","
// Para agregar una clase tienen que poner un nombre y despues setearle el LVL , VIDA y CHALECO.
}

new const 
g_clases[][] = // Esta constante contiene los datos para las enumeraciones
{
    { 
0715303540 },                // Aca definimos NIVEL para cada clase
    
100125150175350375 },            // Aca definimos VIDA para cada clase
    
0100125150175200 }            // Aca definimos CHALECO para cada clase


En fw_playerspawn
Código PHP:
if (g_next_class[id] != -1)
    {
        
g_class[id] = g_next_class[id]
        
g_next_class[id] = -1
    
}
    
    
set_user_armoridget_user_armorid ) + g_clases[CLASE_ARMOR][g_classid ]] ) // Aca decimos que el chaleco se va a definir mediante una enumeracion , en este caso CLASE ARMOR
    
set_user_healthidget_user_healthid ) + g_clases[CLASE_VIDA][g_classid ]] - 100 // Aca decimos que la vida se va a definir mediante otra enum, en este caso CLASE_VIDA
    
// Para el que no entiende por que le ponemos g_clases adelante en todas las enums que uso ; es por que g_clases es la constante que contiene los datos de los lvl , vida , etc


En PutinServer
Código PHP:
g_class[plr] = // Decimos que cuando entra al server no tendrá clases elegidas
    
g_next_class[plr] = -// plr es el index, lo cambian por el que tengan ustedes 

y al final del code
Código PHP:
public show_clases(idpage// Hacemos un public para el menu que mostramos
{
    static 
szText350 ], szNum]
    
// Le damos celdas para los caracteres del menu
    
        
new menu menu_create"\wClases Sistem: ^n\dSeleccione su clase""clases_handle")
    
// Creamos el menu en la variable "menu" con un titulo
    
     
for (new 0sizeof(g_clases_name); i++)
    {
        
num_to_str(i+1szNum3)
        if (
g_nivelid ] >= g_clasesCLASE_NVL ][ ]) // Si es mayor o igual al nivel , se puede elegir la clase
        
{
            if (
g_class[id] == i// Creo que esto es obvio
                
formatex(szText554"\d%s \y[ EQUIPADO ]"g_clases_name]) // Si ya eligió clase , le ponemos EQUIPADO mediante la variable g_clases_name
                   // entre corchetes la "i" , por lo que definimos arriba
            
                               
else if (== g_next_classid ]) // Aca pasa lo mismo
                
formatex(szText554"\w%s \d[ POR EQUIPARSE ]"g_clases_name]) // Esto es cuando elige la clase y esta por elegirse en la próxima ronda
            
            
else if (g_classid ])
                
formatex(szText554"\w%s \y[ NUEVO ]"g_clases_name])// Si desbloquea la clase de ponemos esto
            
            
else
                
formatex(szText554"\w%s "g_clases_name] )
        }
        else
            
formatex(szText554"\d%s \r[ BLOQUEADO ]"g_clases_name], g_clasesCLASE_NVL ][ ]) // Cuando no tiene el nivel suficiente mediante "g_clases[ CLASE_NVL ]"
        
        
menu_additem(menuszTextszNum)
    }
    
    
menu_setpropmenuMPROP_BACKNAME"Anterior" )
    
menu_setpropmenuMPROP_NEXTNAME"Siguiente^n" )
    
menu_setpropmenuMPROP_EXITNAME"\yAtras" )
    
    
menu_display(idmenupage)
}

public 
clases_handle(idMenuitem)
{
    
    static 
iName200 ], iAccessiData], iCallbackkey
    
    menu_item_getinfo
MenuitemiAccessiData3iName199iCallback)

    
key str_to_numiData )-// Esto lo usaremos mas abajo
    
    
if (g_nivelid ] >= g_clasesCLASE_NVL ][ key ]) // Si el lvl es mayor o igual se puede elegir la clase
    
{
        
// Todos los hns_print lo pueden cambiar por CHATCOLOR o client_print, recuerden que para usar el chatcolor deben agregar el include
                 
hns_print(id" !yTu proxima clase sera !g%s"g_clases_name[key]) // Mandamos un mensaje con el nombre de su siguiente clase mediante "g_clases_name"
        
hns_print(id" !yVida !g%d !yChaleco !g%d"g_clases[CLASE_VIDA][key], g_clases[CLASE_ARMOR][key])// Le mandamos un mensaje dando info de los stats de las clases mediante "g_clases[CLASE_VIDA] y g_clases[CLASE_ARMOR]"
        
        
g_next_classid ] = key // Esto se entiende
        
        
if ( str_to_numiData ) <= // Aca lo usamos...
            
show_clasesid// Si no pudo elegir la clase , se abre el menu
        
else if ( str_to_numiData ) > 28 )
            
show_clasesid)
        else if ( 
str_to_numiData ) > 21 )
            
show_clasesid)
        else if ( 
str_to_numiData ) > 14 )
            
show_clasesid)
        else if ( 
str_to_numiData ) > )
            
show_clasesid)
        return 
PLUGIN_HANDLED
    
}
    else
    {
        
hns_print(id"yNesesitas ser nivel !g%d !ypara esta clase"g_clasesCLASE_NVL ][ key ]) // Mandamos mensaje cuando no tiene niveles suficiente para elgir mediante "g_clases[ CLASE_NVL ]"
        
        
if ( str_to_numiData ) <= )
            
show_clasesid)
        else if ( 
str_to_numiData ) > 28 )
            
show_clasesid)
        else if ( 
str_to_numiData ) > 21 )
            
show_clasesid)
        else if ( 
str_to_numiData ) > 14 )
            
show_clasesid)
        else if ( 
str_to_numiData ) > )
            
show_clasesid)
        return 
PLUGIN_HANDLED
    
}
    
    return 
PLUGIN_HANDLED


y si quieren abrir el menu mediante un comando...
en plugin_init
Código PHP:
    register_clcmd"say /class""show_clases" ); // Decimos que al poner /class se abre el menu , mediante "SHOW_CLASES" que es public del menu
register_clcmd("say_team /class""show_clases"); // Aca hacemos que si el usuario toca la letra "U" en ves de "Y" y escriba /class , el menu tambien se abre 

Bueno , si falta algo avisen... no lo testie del todo, ando sin tiempo.

PD ; Cuando pueda le agrego la gravedad, la velocidad y daño... pero no es nada complicado asi que...

SALUDOS
Responder
#2
Es bastante interesante pero si puedes dar mas explicaciones ya que hay gente que hara un C&P sin entender lo que hace..

Pero por lo demas me ha gustado Gracias^^
[Imagen: 76561198066347799.png]
Responder
#3
Si , en cuanto pueda explico todo.
saludos

Edit ; listo Side, code explicado.
NUEVO ZOMBIE PLAGUE + LVLS!! UNETE A LA COMUNIDAD
[Imagen: b_350_20_ffad41_e98100_000000_591f11.png]


Responder
#4
Si miras aquí xD
https://amxmodx-es.com/Thread-Crear-clas...a-distinta

Es para no hacer tantos aportes o tutoriales un poco al dope con un mismo sistema.
Responder
#5
para mi opinión esta bueno el tuto..
PD: creo que el de CSAxel esta un poco mejor
[Imagen: b_350_20_323957_202743_f19a15_111111.png]

Estudia siempre; el tiempo es oro, lo material se puede recuperar pero el tiempo no se puede recuperar.
(02/10/2016, 05:05 PM)meTaLiCroSS escribió: Siempre me gusta ayudar cuando alguien esta interesado realmente en ver que esta programando.
(08/08/2019, 05:32 PM)meTaLiCroSS escribió: grax x el dato cr4ck


Mis aportes

PLUGINS
MAPAS
Menú LANG [SF] Sistema de Frags
Say System (Admin Prefix)
Responder
#6
No habia visto ese e.e ; sino ni me gasto.
No estoy mucho en la seccion tutoriales...

Bastante similar la forma jaja
NUEVO ZOMBIE PLAGUE + LVLS!! UNETE A LA COMUNIDAD
[Imagen: b_350_20_ffad41_e98100_000000_591f11.png]


Responder
#7
Hola, soy muy novato en esto. Tengo unos cuantos problemas. A la hora de compilarlo, me sale este error:

Error: Invalid function or declaration on line 40
Error: Symbol already defined: "set_user_armor" on line 46
Error: Symbol already defined: "set_user_health" on line 49
Error: Invalid function or declaration on line 52
Error: "sizeof" operator is invalid on "function" symbols on line 66
Warning: Redundant code: constant expression is zero on line 66
Error: Undefined symbol "g_nivel" on line 69
Warning: Expression has no effect on line 69
Error: Expected token: ";", but found "]" on line 69
Error: Invalid expression, assumed zero on line 69
Error: Too many error messages on one line on line 69

He solucionado los que tenia, pero estos no sé como arreglarlos.
Responder
#8
(10/03/2015, 11:36 AM)Lordie escribió: Hola, soy muy novato en esto. Tengo unos cuantos problemas. A la hora de compilarlo, me sale este error:

Error: Invalid function or declaration on line 40
Error: Symbol already defined: "set_user_armor" on line 46
Error: Symbol already defined: "set_user_health" on line 49
Error: Invalid function or declaration on line 52
Error: "sizeof" operator is invalid on "function" symbols on line 66
Warning: Redundant code: constant expression is zero on line 66
Error: Undefined symbol "g_nivel" on line 69
Warning: Expression has no effect on line 69
Error: Expected token: ";", but found "]" on line 69
Error: Invalid expression, assumed zero on line 69
Error: Too many error messages on one line on line 69

He solucionado los que tenia, pero estos no sé como arreglarlos.

Abri un tema en la seccion scripting, y postea tu codigo ahi. Y asi te vamos a poder ayudar.

Por el momento lo que veo ahi es que, te faltan declarar variables, algun error con algun parentesis, y mas cosas..

Pero hace lo que te dije, para que podamos darte soporte.
Responder
#9
(10/03/2015, 11:36 AM)Lordie escribió: Hola, soy muy novato en esto. Tengo unos cuantos problemas. A la hora de compilarlo, me sale este error:

Error: Invalid function or declaration on line 40
Error: Symbol already defined: "set_user_armor" on line 46
Error: Symbol already defined: "set_user_health" on line 49
Error: Invalid function or declaration on line 52
Error: "sizeof" operator is invalid on "function" symbols on line 66
Warning: Redundant code: constant expression is zero on line 66
Error: Undefined symbol "g_nivel" on line 69
Warning: Expression has no effect on line 69
Error: Expected token: ";", but found "]" on line 69
Error: Invalid expression, assumed zero on line 69
Error: Too many error messages on one line on line 69

He solucionado los que tenia, pero estos no sé como arreglarlos.

ah pero sos el genio de los copy&paste ! ni los includes pusiste

PD:

Código PHP:
enum // Hacemos una enumeracion para lo siguiente
{
    
CLASE_NVL 0// Definimos su valor en 0
    
CLASE_VIDA,
    
CLASE_ARMOR
// Aca se pueden definir muchas cosas mas por ejemplo la gravedad, velocidad , danio, etc ; Siempre recuerden que el ultimo va sin la ","


--->

Código PHP:
enum // Hacemos una enumeracion para lo siguiente
{
    
CLASE_NVL 0// Definimos su valor en 0
    
CLASE_VIDA,
    
CLASE_ARMOR,

    
CLASE_NIVEL
// Aca se pueden definir muchas cosas mas por ejemplo la gravedad, velocidad , danio, etc ; Siempre recuerden que el ultimo va sin la ","


Código PHP:
new const g_clases[][] = // Esta constante contiene los datos para las enumeraciones
{
    { 
0715303540 },                // Aca definimos NIVEL para cada clase
    
100125150175350375 },            // Aca definimos VIDA para cada clase
    
0100125150175200 }            // Aca definimos CHALECO para cada clase

--->

Código PHP:
new const g_clases[CLASE_NIVEL][] = // Esta constante contiene los datos para las enumeraciones
{
    { 
0715303540 },                // Aca definimos NIVEL para cada clase
    
100125150175350375 },            // Aca definimos VIDA para cada clase
    
0100125150175200 }            // Aca definimos CHALECO para cada clase

Responder
#10
Lordie , no revivas solo para eso.
Hace un thread y pone ahi todo lo que necesitas.

Código PHP:
ErrorSymbol already defined"set_user_armor" on line 46 // Esto ya lo tenes definido
ErrorSymbol already defined"set_user_health" on line 49 // Esto igual
ErrorUndefined symbol "g_nivel" on line 69 // Crea la variable g_nivel 
NUEVO ZOMBIE PLAGUE + LVLS!! UNETE A LA COMUNIDAD
[Imagen: b_350_20_ffad41_e98100_000000_591f11.png]


Responder
#11
Esto lo sacaste de otro tutorial
Hide' N Seek <3
Responder
#12
(20/03/2015, 02:11 AM)santexx escribió: Esto lo sacaste de otro tutorial

Deja de publicar mierdas sin antes leer el thread, lee bien que dice de donde saque esto.

Entiendo por que tenes tantos negativos.
NUEVO ZOMBIE PLAGUE + LVLS!! UNETE A LA COMUNIDAD
[Imagen: b_350_20_ffad41_e98100_000000_591f11.png]


Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)