Enviar respuesta 
Crear niveles por experiencia con daño acumulado + Resets + HappyHour (16/10/15)
Autor Mensaje
kikizon2 Ausente
Suspendido


Donador Beta Tester 1k
Mensajes: 3,323
Registro en: Jan 2014
Mensaje: #1
Estrella Crear niveles por experiencia con daño acumulado + Resets + HappyHour (16/10/15)
[ ACTUALIZADO 16/10/15 ]



Bueno señores hace poco vi en un servidor con mod [ZP] todos conocemos a el mod zp >.<

Bueno voy directo al grano Sonrisa , vi que su sistema de niveles era de la siguiente manera:
-Para subir un nivel se necesitaba cierta cantidad de experiencia
-Para subir esa cierta cantidad de exp se necesitaba acumular cierto daño

Y me pareció un buen sistema ya que la verdad te vicia un poco fue la primera vez que entre al server y jugué durante 5 horas >.<

Y como me pareció un buen sistema aquí se los traigo para los que quieran Usarlo :3

Empecemos:

Agregar Niveles


Paso 1:

Se crean las variables, macros y constantes necesarios :3
(esto lo pueden poner en cualquier parte del plugin solo que no sea dentro de una función pacman pónganlo digamos debajo de donde se definen las librerías :3)

Código PHP:
#define nivel_sig(%1) (%1 * 55 + 20) // nivel x 55 + 20 ejemplo: si soy nivel uno: 1x55+20=75 para sig. nivel || soy nivel 3: 3x55+20=185 para sig. nivel

#define NIVEL_MAXIMO 25 // Nivel Máximo :genius:
new DMG_NECESARIO 1200 /// Se define el Daño Necesario para ganar exp 
#define WINEXP 2 // Se define cuanta experiencia ganara cuando llene el dmg requerido

new kExp[33], kNivel[33// Experiencia, Nivel
new kDamage[33// Guarda el daño infligido 

Paso 2:


Nos vamos a reset vars

Código PHP:
reset_vars(idresetall

Dentro de esta función buscamos la sig. condición

Código PHP:
if (resetall)
    { 

y debajo del corchete pegan lo siguiente

Código PHP:
kDamage[id] = // Seteamos El daño acumulado en 0
kExp[id] = // '' '' Experiencia a 0
kNivel[id] = // '' '' Nivel a 0 

Quedaría:

Código PHP:
if(resetall)

    
kExp[id] = 0
    kNivel
[id] = 0
    kDamage
[id] = // Seteamos El daño acumulado en 0

    //code code code code y mas code


Paso 3:

Ahora nos vamos a TakeDamage

Código PHP:
public fw_TakeDamage(victiminflictorattackerFloat:damagedamage_type

Buscamos dentro de la función:

Código PHP:
// Attacker is human...
if (!g_zombie[attacker])


y debajo del corchete agregamos:

Código PHP:
// Le damos valor a kDamage valor = al daño infligido
kDamage[attacker] += floatround(damage)
        
while(
kDamage[attacker] >= DMG_NECESARIO) { // Mientras el daño infligido sea igual o mayor al daño necesario
        
kDamage[attacker] -= DMG_NECESARIO // Le restamos el valor de la definición DMG_NECESARIO(1200) a kDamage
        
setExpattacker WINEXP ); // Le damos la exp por dmg



Al final la función quedaría así:

Código PHP:
public fw_TakeDamage(victiminflictorattackerFloat:damagedamage_type)
{
    if (
victim == attacker || !is_user_valid_connected(attacker))
        return 
HAM_IGNORED;
    
    if (
g_newround || g_endround)
        return 
HAM_SUPERCEDE;
    
    if (
g_nodamage[victim] || g_frozen[victim])
        return 
HAM_SUPERCEDE;
    
    if (
g_zombie[attacker] == g_zombie[victim])
        return 
HAM_SUPERCEDE;
    
    
// Attacker is human...
    
if (!g_zombie[attacker])
    {
        
kDamage[attacker] += floatround(damage)
        
    while(
kDamage[attacker] >= DMG_NECESARIO) { // Mientras el daño infligido sea igual o mayor al daño necesario
        
kDamage[attacker] -= DMG_NECESARIO // Le restamos el valor de la definición DMG_NECESARIO(1200) a kDamage
        
setExpattacker WINEXP ); // Le damos la exp por dmg
    


    if (!
g_nemesis[victim])
    {
        
damage *= get_pcvar_float(cvar_zombiearmor)
        
SetHamParamFloat(4damage)
    }
        
    if ((
get_pcvar_num(cvar_ammodamage_human) > 0) && (!g_survivor[attacker] || !get_pcvar_num(cvar_survignoreammo)))
    {
        
g_damagedealt_human[attacker] += floatround(damage)
            
        while (
g_damagedealt_human[attacker] > get_pcvar_num(cvar_ammodamage_human))
        {
            
g_ammopacks[attacker]++
            
g_damagedealt_human[attacker] -= get_pcvar_num(cvar_ammodamage_human)
        }
    }
    return 
HAM_IGNORED;
    }
    
// Attacker is zombie...
    
    
if (damage_type DMG_HEGRENADE)
        return 
HAM_SUPERCEDE;
    
    if (
g_nemesis[attacker])
    {
        if (
inflictor == attacker)
        {
            
SetHamParamFloat(4get_pcvar_float(cvar_nemdamage))
        }
        
        return 
HAM_IGNORED;
    }
    
    if (
get_pcvar_num(cvar_ammodamage_zombie) > 0)
    {
        
g_damagedealt_zombie[attacker] += floatround(damage)
        
        while (
g_damagedealt_zombie[attacker] > get_pcvar_num(cvar_ammodamage_zombie))
        {
            
g_ammopacks[attacker]++
            
g_damagedealt_zombie[attacker] -= get_pcvar_num(cvar_ammodamage_zombie)
        }
    }
    
    if (
g_survround || g_nemround || g_swarmround || g_plagueround || fnGetHumans() == 1)
        return 
HAM_IGNORED// human is killed
    
    
if (get_pcvar_num(cvar_humanarmor))
    {
        static 
Float:armor
        pev
(victimpev_armorvaluearmor)
        
        if (
armor 0.0)
        {
            
emit_sound(victimCHAN_BODYsound_armorhit1.0ATTN_NORM0PITCH_NORM)
            if (
armor damage 0.0)
                
set_pev(victimpev_armorvaluearmor damage)
            else
                
cs_set_user_armor(victim0CS_ARMOR_NONE)
            return 
HAM_SUPERCEDE;
        }
    }
    
zombieme(victimattacker001// turn into zombie
    
return HAM_SUPERCEDE;


Paso 4:

Nos dirigimos al final de plugin y agregamos lo siguiente:

Código PHP:
public setExpindex exp )
{
    
kExpindex ] += exp;

    new 
lvl kNivelindex ];
    while(
kExp[index] >= nivel_sig(kNivel[index]) && kNivel[index] < NIVEL_MAXIMO)   // Mientras la exp, sea igual o mayor a la requerida y el nivel sea menor al nivel máximo
        
kNivel[index]++ // Subimos de nivel
    
    
if( lvl kNivelindex ] ) // Esto evita el flood si se llegara a subir varios niveles de una sola vez
        
client_print(indexprint_center"Subiste al nivel: %d"kNivel[index]) // Mandamos un mensaje al centro de la pantalla informando que subió de nivel


Paso 5:

Se busca:

Código PHP:
public ShowHUD(taskid

Reemplazan esa función por esta

Código PHP:
:
public 
ShowHUD(taskid)
{
    static 
id
    id 
ID_SHOWHUD;
    
    if (!
g_isalive[id])
    {
        
id pev(idPEV_SPEC_TARGET)
        if (!
g_isalive[id]) return;
    }
    
    static class[
32], redgreenblue
    
    
if (g_zombie[id])
    {
        
red 200
        green 
250
        blue 
0
        
        
if (g_nemesis[id])
            
formatex(class, charsmax(class), "%L"ID_SHOWHUD"CLASS_NEMESIS")
        else
            
copy(class, charsmax(class), g_zombie_classname[id])
    }
    else 
    {
        
red 255
        green 
255
        blue 
0
        
        
if (g_survivor[id])
            
formatex(class, charsmax(class), "%L"ID_SHOWHUD"CLASS_SURVIVOR")
        else
            
copy(class, charsmax(class), g_human_classname[id])
    }
    
    if (
id != ID_SHOWHUD)
    {
        
set_hudmessage(255255255HUD_SPECT_XHUD_SPECT_Y06.01.10.00.0, -1)
        
ShowSyncHudMsg(ID_SHOWHUDg_MsgSync2"%L: %s^nHP: %d|%L: %s |%L: %d|Nivel: %d|Exp: %d"ID_SHOWHUD"SPECTATING"g_playername[id], pev(idpev_health), ID_SHOWHUD"CLASS_CLASS", class, ID_SHOWHUD"AMMO_PACKS1"g_ammopacks[id], kNivel[id], kExp[id])
    }
    else
    {
        
set_hudmessage(redgreenblueHUD_STATS_XHUD_STATS_Y06.01.10.00.0, -1)
        
ShowSyncHudMsg(ID_SHOWHUDg_MsgSync2"%L: %d|%L: %s|%L %d|Nivel: %d|Exp: %d/%d|Dmg: %d/%d"id"ZOMBIE_ATTRIB1"pev(ID_SHOWHUDpev_health), ID_SHOWHUD"CLASS_CLASS", class, ID_SHOWHUD"AMMO_PACKS1"g_ammopacks[ID_SHOWHUD], kNivel[id], kExp[id], nivel_sig(kNivel[id]), kDamage[id], DMG_NECESARIO)
    }



Agregar Resets


Paso 1:


Crear Variable:

Código PHP:
new kReset[33

Paso 2:

Resetearla en la función Reset Vars...

Código PHP:
public reset_vars(idresetall)
{
    
// code code code


    
if(resetall)
    {
        
// Code code code

        
kReset[id] = 0
    
}


Paso 3:

Crear el menú ( al final del plugin )...

Código PHP:
public show_menu_reset(index
{
    new 
szBuffer[128], menu;
    
formatex(szBuffer127"\r[ZP] \wMenu de Reseteo^n\yNecesitas Nivel:\r %d"NIVEL_MAXIMO);

    
menu menu_createszBuffer"menu_reset" );

    
menu_additem(menu, (kNivel[index] >= NIVEL_MAXIMO)?"Hacer Reseteo":"\dNo puedes hacer reseteo...""");

    
menu_display(indexmenu );
}

public 
menu_reset(indexmenuitem
{
    if( 
item != MENU_EXIT )
    {
        if(
kNivel[index] < NIVEL_MAXIMO)
        {
             
client_print(indexprint_center"No eres Nivel Necesario para hacer un reset");
             return 
PLUGIN_HANDLED;
        }
    
        
kExpindex ] = 0;
        
kNivelindex ] = 1;
        ++
kResetindex ];
        
client_print(indexprint_chat"[ZP] Has hecho un reset :3 Ahora tienes: %d"kReset[index])               
    }
    
    
menu_destroy(menu)
    return 
PLUGIN_HANDLED;


El menu se pone donde mas les convenga, ya sea en el menu principal o desde un comando en say

Código PHP:
// en plugin init

register_clcmd("say /reset""show_menu_reset"); 

Agregar happyHour ( POR DMG )


Paso 1:

Crear variables y const.

Código PHP:
new isHappyTime;
enum _:__hhdata HH_TIME], HH_DMG }
new const 
HappyTime[][__hhdata] =
{
    { 
"13"500 }, // a las 13 horas (1 de la tarde) el dmg requerido sera de 500
    
"15"800 }, // a las 15 hora (3 de la tarde) el dmg requerido sera de 800
    
"23"400 // a las 23 horas (11 de la noche) el dmg requerido sera de 400
}; 

Paso 2:

Código PHP:
// En el evento round_start()

check_happytime(); 

Paso 3:

Crear la función (al final del plugin ).

Código PHP:
check_happytime()
{
    
isHappyTime false;
    
    static 
hour[3], i;
    
get_time("%H"hour);
    
    for( 
0sizeof HappyTime ; ++
    {
        if(
equal(hourHappyTime][HH_TIME]) ) 
        {
            
isHappyTime true;
            
DMG_NECESARIO HappyTime[i][HH_DMG];
        }
    }
    
    if(!
isHappyTimeDMG_NECESARIO 1200;

(Este mensaje fue modificado por última vez en: 30/03/2016 12:31 PM por kikizon2.)
05/09/2014 11:41 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
meTaLiCroSS Sin conexión
Juez


Buen Tutorial AMXX Support Pensador Trebol verde 1k
Mensajes: 1,231
Registro en: Oct 2013
Reputación: 46
Mensaje: #2
RE: Crear niveles por experiencia con daño acumulado
Código PHP:
new const NIVEL_MAXIMO[] = "25" // Nivel Maximo :genius:
new const DMG_NECESARIO[] = "1200" 

...y porqué las guardas como un string y las comparas como enteros?
06/09/2014 01:14 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
kikizon2 Ausente
Suspendido


Donador Beta Tester 1k
Mensajes: 3,323
Registro en: Jan 2014
Mensaje: #3
RE: Crear niveles por experiencia con daño acumulado
(06/09/2014 01:14 AM)meTaLiCroSS escribió:  
Código PHP:
new const NIVEL_MAXIMO[] = "25" // Nivel Maximo :genius:
new const DMG_NECESARIO[] = "1200" 

...y porqué las guardas como un string y las comparas como enteros?

:o no me di cuenta esto es parte de otra cosa en el tuto original lo tengo como definiciones ahi editoGuiño gracias metalicross :3

edit: cuando este en pc edito ya que no me abre tapatalk :c
(Este mensaje fue modificado por última vez en: 06/09/2014 01:27 AM por kikizon2.)
06/09/2014 01:20 AM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Evil Spiret Sin conexión
Miembro Sr.


Mensajes: 577
Registro en: Dec 2013
Reputación: 12
Mensaje: #4
RE: Crear niveles por experiencia con daño acumulado
Tuve que leer el code para saber como era , no entendí tu explicación jaja.

Haber si leí bien , llegas a 1200 de daño hecho y te empieza a subir la exp?

Este sistema me gustaría para el BaseBuilder

Buen tuto.

El Dproto es de GAYS!
Doy soporte por MP, si es que tengo ganas.
Whatever
(11/04/2015 03:36 PM)Mario AR. escribió: #pid77607" class="quick_jump"> Qué joda, y tu firma fuera de lugar, DPROTO DE GAYS? erikmav94 es gay y no es dproto...
(Este mensaje fue modificado por última vez en: 06/09/2014 10:55 AM por Evil Spiret.)
06/09/2014 10:54 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
kikizon2 Ausente
Suspendido


Donador Beta Tester 1k
Mensajes: 3,323
Registro en: Jan 2014
Mensaje: #5
RE: Crear niveles por experiencia con daño acumulado
(06/09/2014 10:54 AM)Evil Spiret escribió:  Tuve que leer el code para saber como era , no entendí tu explicación jaja.

Haber si leí bien , llegas a 1200 de daño hecho y te empieza a subir la exp?

Este sistema me gustaría para el BaseBuilder

Buen tuto.

It's easy :3 por cada 1200 de daño infligido te aumenta 1 punto de exp :3


y créeme es muy buen sistema esto vicia a los users, o por lo menos a la mayoría pacman
06/09/2014 11:52 AM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Lito Sin conexión
Miembro


Mensajes: 122
Registro en: Mar 2014
Reputación: 0
Mensaje: #6
RE: Crear niveles por experiencia con daño acumulado
buen tuto grax =)

Sé humilde en tu enfoque.
06/09/2014 12:29 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Metrikcz Sin conexión
Miembro Destacado


Plugin developer
Mensajes: 800
Registro en: Oct 2013
Reputación: 15
Mensaje: #7
RE: Crear niveles por experiencia con daño acumulado
El zp ya tiene una variable que cachea el damage

Granada Rayo. *Aprobado*
Suicidio Explosivo. *Aprobado*
Duelo Deagle. *Aprobado*
Automatic Give Weapons In Respawn.
[ZP] Extra Item: Zombie NPC Deimos.

Venta plugins a pedido en México mándame MP
08/09/2014 04:12 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
kikizon2 Ausente
Suspendido


Donador Beta Tester 1k
Mensajes: 3,323
Registro en: Jan 2014
Mensaje: #8
RE: Crear niveles por experiencia con daño acumulado
si, "g_damagedealt" pero tal vez quieran desactivar la ganancia de aps por daño que para eso es la variable o quieran ganar 1 ap por cada 100 de dmg, así que mejor este sistema aparte Guiño
08/09/2014 04:56 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Hackeloff Sin conexión
Miembro


Mensajes: 106
Registro en: Feb 2014
Reputación: 0
Mensaje: #9
RE: Crear niveles por experiencia con daño acumulado
Código PHP:
public actualizar_nivel(id) {
    new 
subido false
    
while(g_exp[id] >= nivel_sig(g_nivel[id]) && g_nivel[id] < NIVEL_MAXIMO) {  // Mientras la exp, sea igual o mayor a la requerida y el nivel sea menor al nivel máximo
        
g_level[id]++ // Subimos de nivel
        
subido true
    
}
    if(
subido) {
        
client_print(idprint_center"Subiste al nivel: %d"g_nivel[id]) // Mandamos un mensaje al centro de la pantalla informando que subió de nivel
        
subido false
    
}


----->

Código PHP:
public actualizar_nivel(id) {
    new 
subido false
    
while(g_exp[id] >= nivel_sig(g_nivel[id]) && g_nivel[id] < NIVEL_MAXIMO) {  // Mientras la exp, sea igual o mayor a la requerida y el nivel sea menor al nivel máximo
        
g_nivel[id]++ // ...
        
subido true
    
}
    if(
subido) {
        
client_print(idprint_center"Subiste al nivel: %d"g_nivel[id]) // Mandamos un mensaje al centro de la pantalla informando que subió de nivel
        
subido false
    
}


"El camino de pies y manos" Tae Kwon Do
(Este mensaje fue modificado por última vez en: 21/09/2014 02:09 AM por Hackeloff.)
21/09/2014 02:09 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
kikizon2 Ausente
Suspendido


Donador Beta Tester 1k
Mensajes: 3,323
Registro en: Jan 2014
Mensaje: #10
RE: Crear niveles por experiencia con daño acumulado
(21/09/2014 02:09 AM)Hackeloff escribió:  
Código PHP:
public actualizar_nivel(id) {
    new 
subido false
    
while(g_exp[id] >= nivel_sig(g_nivel[id]) && g_nivel[id] < NIVEL_MAXIMO) {  // Mientras la exp, sea igual o mayor a la requerida y el nivel sea menor al nivel máximo
        
g_level[id]++ // Subimos de nivel
        
subido true
    
}
    if(
subido) {
        
client_print(idprint_center"Subiste al nivel: %d"g_nivel[id]) // Mandamos un mensaje al centro de la pantalla informando que subió de nivel
        
subido false
    
}


----->

Código PHP:
public actualizar_nivel(id) {
    new 
subido false
    
while(g_exp[id] >= nivel_sig(g_nivel[id]) && g_nivel[id] < NIVEL_MAXIMO) {  // Mientras la exp, sea igual o mayor a la requerida y el nivel sea menor al nivel máximo
        
g_nivel[id]++ // ...
        
subido true
    
}
    if(
subido) {
        
client_print(idprint_center"Subiste al nivel: %d"g_nivel[id]) // Mandamos un mensaje al centro de la pantalla informando que subió de nivel
        
subido false
    
}


pacman pacman error de dedo >.< Ahi arreglo thanks
21/09/2014 02:37 AM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Enviar respuesta 


Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)

Contáctanos | Allied Modders en español | Volver arriba | Volver al contenido | Archivo (Modo simple) | Sindicación RSS