dar cierta cantidad de exp a ciertas clases
#1
ola que tal ? tengo un pedido es que tengo un sistema de niveles por exp y lo quiero adaptar a un zombie plague

y mi idea es como hago para cada vez que mate a un nemesis, survivor, humano, zombie, sniper o assassin me de diferente exp encontre una guía en otro foro de niveles por exp y me gusto mucho ya que trae lo que ando buscando pero tiene hasta la partes : matar humano, matar nemesis, matar survivor, matar zombie y me estaria faltando matar sniper y matar survivor y por eso pido que si alguien sabe como hacerlo para que me de diferente exp al matar a diferentes clases

mis variables son

g_zombie[33], g_nemesis[33], g_survivor[33], g_sniper[33], g_assassin[33] por si a caso

y a la guia que me referia en el tema es esta : click

dejo el sistema de niveles por exp que ocupo

Código PHP:
#include <amxmodx>
#include <hamsandwich>

#define LevelNext(%1) (%1 * 43)
#define LevelMax 300

new gNivel[33], gExp[33]

public 
client_putinserver(id)
{
    
gNivel[id] = gExp[id] = 0;
}
public 
plugin_init()
{
    
RegisterHam(Ham_Killed"player""ham_PlayerKilled"1)
}
public 
ham_PlayerKilled(victimattackershouldgib)
{
    if(!
is_user_connected(victim ) || !is_user_connected(attacker) || get_user_team(victim) == get_user_team(attacker)) return;
    
    
gExp[attacker] += 3
    checkLevel
(attacker)
}
public 
checkLevel(id)
{
    new 
iUploaded false;

    while(
gExp[id] >= LevelNext(gNivel[id]) && gNivel[id] < LevelMax)
    {
        ++
gNivel[id];
        
iUploaded true
    }
    if(
iUploaded)
    {
        
client_print(idprint_chat"Felicidades subiste al nivel: %d/%d."gNivel[id], LevelMax)
        
iUploaded false;
    }



mas bien quiero que lo del link que deje hay sea el mismo pero añadirle el matar sniper, matar assassin
Responder
#2
Código PHP:
    if(g_Human[attacker])
    {
        
g_Exp[attacker] += 3
    
}
    
    -
    
    if(
g_Human[attacker] && g_Nemesis[victim])
    {
        
g_Exp[attacker] += 20
    

Plata o Plomo Usted decide


- Pablo Emilio Escobar Gaviria -
Responder
#3
Tenés que verificar que la victima sea zombie/nemesis/survivor etc en el evento de muerte; y darle la EXP que quieras al atacante.
Responder
#4
Código PHP:
public ham_PlayerKilledvictimattackershouldgib )
{
    if ( !
is_user_connectedvictim ) || !is_user_connectedattacker ) || get_user_teamvictim ) == get_user_teamattacker ) )
        return 
HAM_IGNORED;
        
    if ( 
ExecuteHamHam_IsPlayerattacker ) && ExecuteHamHam_IsAliveattacker ) )
    {
        if ( !
g_zombievictim ] ) gExpattacker ] += 1// Cantidad de EXP al matar a un humano
        
else if ( g_zombievictim ] ) gExpattacker ] += 1// Cantidad de EXP al matar a un zombie
        
else if ( g_nemesisvictim ] ) gExpattacker ] += 1// Cantidad de EXP al matar a un nemesis
        
else if ( g_survivorvictim ] ) gExpattacker ] += 1// Cantidad de EXP al matar a un survivor
        
else if ( g_snipervictim ] ) gExpattacker ] += 1// Cantidad de EXP al matar a un sniper
        
else if ( g_assassinvictim ] ) gExpattacker ] += 1// Cantidad de EXP al matar a un assassin
        
        
checkLevelattacker );
    }

    return 
HAM_IGNORED;

Responder
#5
gracias me anduvo pero tengo un pequeño problema


mato a un zombie me da la exp que le puse(4) // En esto Bien

mato a un humano me da la exp que le puse(4) // En esto Bien

mato a un nemesis o assassin no me da la exp que le puse(10) y me da la del zombie

mato a un survivor o sniper y no me la la exp que le puse(8) y me da la del humano

nose que sea ya que yo nose mucho se scripting ojala me ayuden dejo el codigo acá abajo

Código PHP:
#include <amxmodx>
#include <hamsandwich>
#include <zombie_plague_advance>

#define LevelNext(%1) (%1 * 26)
#define LevelMax 300

new gNivel[33], gExp[33]

public 
plugin_init()
{
    
RegisterHam(Ham_Killed"player""ham_PlayerKilled"1)
}
public 
client_putinserver(id)
{
    
gNivel[id] = 1;
    
gExp[id] = 0;
    
set_task(1.3"Show"id__"b")
}
public 
client_disconnect(id)
{
    
remove_task(id)
}
public 
Show(id)
{
    if(
is_user_alive(id))
    {
        
Color(id"!g[ZP 1.3]!y Tus datos son : !tNivel (%d/%d) | Exp (%d/%d)"gNivel[id], LevelMaxgExp[id], LevelNext(gNivel[id]))
    }
}
public 
ham_PlayerKilled(victimattackershouldgib)
{
    if(!
is_user_connected(victim) || !is_user_connected(attacker) || get_user_team(victim) == get_user_team(attacker)) return HAM_IGNORED;

    if (
ExecuteHam(Ham_IsPlayerattacker) && ExecuteHam(Ham_IsAliveattacker))
    {
        if(!
zp_get_user_zombie(victim))
        {
            
Color(attacker"!g[ZP 1.3]!y Has ganado !g4!y de exp por matar a un: !tHumano.")
            
gExp[attacker] += 4// Cantidad de EXP al matar a un humano
        
}
        else if(
zp_get_user_zombie(victim))
        {
            
Color(attacker"!g[ZP 1.3]!y Has ganado !g4!y de exp por matar a un: !tZombie.")
            
gExp[attacker] += 4// Cantidad de EXP al matar a un zombie
        
}
        else if(
zp_get_user_nemesis(victim))
        {
            
Color(attacker"!g[ZP 1.3]!y Has ganado !g9!y de exp por matar a un: !tNemesis.")
            
gExp[attacker] += 10// Cantidad de EXP al matar a un nemesis
        
}
        else if(
zp_get_user_survivor(victim))
        {
            
Color(attacker"!g[ZP 1.3]!y Has ganado !g7!y de exp por matar a un: !tAssassin.")
            
gExp[attacker] += 8// Cantidad de EXP al matar a un survivor
        
}
        else if(
zp_get_user_sniper(victim))
        {
            
Color(attacker"!g[ZP 1.3]!y Has ganado !g8!y de exp por matar a un: !tSniper.")
            
gExp[attacker] += 8// Cantidad de EXP al matar a un sniper
        
}
        else if(
zp_get_user_assassin(victim))
        {
            
Color(attacker"!g[ZP 1.3]!y Has ganado !g10!y de exp por matar a un: !tAssassin.")
            
gExp[attacker] += 10// Cantidad de EXP al matar a un assassin
        
}
        
checkLevel(attacker);
    }
    return 
HAM_IGNORED;

public 
checkLevel(id)
{
    new 
iUploaded false;

    while(
gExp[id] >= LevelNext(gNivel[id]) && gNivel[id] < LevelMax)
    {
        ++
gNivel[id];
        
iUploaded true
    }
    if(
iUploaded)
    {
        
Color(id"!g[ZP 1.3]!y Felicidades subiste al nivel : !t%d/%d."gNivel[id], LevelMax)
        
iUploaded false;
    }

stock Color(id, const input[], any:...)
{
    static 
szMsg[191], msgSayText;
    
    if(!
msgSayText) { msgSayText get_user_msgid("SayText"); }
    
    
vformat(szMsg190input3);

    
replace_all(szMsg190"!g""^4");
    
replace_all(szMsg190"!y""^1");
    
replace_all(szMsg190"!t""^3");
    
    
message_begin(id MSG_ONE_UNRELIABLE MSG_BROADCASTmsgSayText, .player id);
    
write_byte(id id 33);
    
write_string(szMsg);
    
message_end();

Responder
#6
porfa ayuda Cutecry si quiere le pago porfavor Triste una ayuda
Responder
#7
Mmm si lo que pasa que no estoy familiarizado con las variables del Zombie Plague. Prueba con este:

Código PHP:
public ham_PlayerKilledvictimattackershouldgib )
{
    if ( !
is_user_connectedvictim ) || !is_user_connectedattacker ) || get_user_teamvictim ) == get_user_teamattacker ) )
        return 
HAM_IGNORED;
    
    if ( 
ExecuteHamHam_IsPlayerattacker ) && ExecuteHamHam_IsAliveattacker ) )
    {
        if ( 
g_zombievictim ] ) // Si la victima es parte de la facción Zombie
        
{
            if ( !
g_nemesisvictim ] && !g_assassinvictim ] ) // Detectamos que el Zombie no sea Nemesis ni Assasin
                
gExpattacker ] += 1// Cantidad de EXP al matar a un Zombie
            
else if ( g_nemesisvictim ] && !g_assassinvictim ] ) // Detectamos que el Zombie sea Nemesis y que no sea Assasin
                
gExpattacker ] += 1// Cantidad de EXP al matar a un Nemesis    
            
else if ( !g_nemesisvictim ] && g_assassinvictim ] )    // Detectamos que el Zombie no sea Nemesis y que si sea Assasin
                
gExpattacker ] += 1// Cantidad de EXP al matar a un Assasin                    
        
}
        else 
// O si la victima es parte de la facción Humana
        
{
            if ( !
g_survivorvictim ] && !g_snipervictim ] ) // Detectamos que el Humano no sea Survivor ni Sniper
                
gExpattacker ] += 1// Cantidad de EXP al matar a un Humano
            
else if ( g_survivorvictim ] && !g_snipervictim ] ) // Detectamos que el Humano sea Survivor y que no sea Sniper
                
gExpattacker ] += 1// Cantidad de EXP al matar a un Survivor    
            
else if ( !g_survivorvictim ] && g_snipervictim ] ) // Detectamos que el Humano no sea Survivor y que si sea Sniper
                
gExpattacker ] += 1// Cantidad de EXP al matar a un Sniper        
        
}

        
checkLevelattacker );
    }
    
    return 
HAM_IGNORED;


Aquí te dejo otra versión hecha por mi, es mucho mas personalizable y en vez de repetir la variable de sumar exp y la funcion de imprimir mensaje en cada casilla (if) lo hacemos una vez, así optimizamos el código.

Código PHP:
enum _:EXPSTRUCTURE CLASSNAME64 ], EXP_REWARD };

enum
{
    
ZOMBIE 0,
    
NEMESIS,
    
ASSASSIN,
    
HUMAN,
    
SURVIVOR,
    
SNIPER
};

// Aqui puedes editar la cantidad de EXP que el player recibirá por el tipo de clase.
new const g_iExpData[ ][ EXPSTRUCTURE ] = 
{
    { 
"Zombie"}, // Si el player mata a un Zombie, recibirá 1 de EXP.
    
"Nemesis"}, // Si el player mata a un Nemesis, recibirá 2 de EXP.
    
"Assassin"}, // ... 3 de EXP
    
"Human"}, // ... 4 de EXP
    
"Survivor"}, // ... 8 de EXP
    
"Sniper"15 // ... 15 de EXP
};


public 
ham_PlayerKilledvictimattackershouldgib )
{
    if ( !
is_user_connectedvictim ) || !is_user_connectedattacker ) || get_user_teamvictim ) == get_user_teamattacker ) )
        return 
HAM_IGNORED;
    
    if ( 
ExecuteHamHam_IsPlayerattacker ) && ExecuteHamHam_IsAliveattacker ) )
    {
        
// Creamos un var para obtener la clase del jugador asesinado (victima)
        
new iClass;
        
        if ( 
g_zombievictim ] ) // Si la victima es parte de la facción Zombie
        
{
            if ( !
g_nemesisvictim ] && !g_assassinvictim ] ) // Detectamos que el Zombie no sea Nemesis ni Assasin
                
iClass ZOMBIE;
            else if ( 
g_nemesisvictim ] && !g_assassinvictim ] ) // Detectamos que el Zombie sea Nemesis y que no sea Assasin
                
iClass NEMESIS;  
            else if ( !
g_nemesisvictim ] && g_assassinvictim ] )    // Detectamos que el Zombie no sea Nemesis y que si sea Assasin
                
iClass ASSASSIN;                 
        }
        else 
// O si la victima es parte de la facción Humana
        
{
            if ( !
g_survivorvictim ] && !g_snipervictim ] ) // Detectamos que el Humano no sea Survivor ni Sniper
                
iClass HUMAN;
            else if ( 
g_survivorvictim ] && !g_snipervictim ] ) // Detectamos que el Humano sea Survivor y que no sea Sniper
                
iClass SURVIVOR;   
            else if ( !
g_survivorvictim ] && g_snipervictim ] ) // Detectamos que el Humano no sea Survivor y que si sea Sniper
                
iClass SNIPER;     
        }
        
        
gExpattacker ] += g_iExpDataiClass ][ EXP_REWARD ]; // Obtenemos la cantidad de EXP según la clase asesinada y le sumamos EXP al jugador.
        
Colorattacker"!g[ZP 1.3]!y Has ganado !g%i!y de exp por matar a un: !t%s."g_iExpDataiClass ][ EXP_REWARD ], g_iExpDataiClass ][ CLASSNAME ] ); // Imprimimos un mensaje avisando la cantidad de EXP que el jugador ganó.
        
        
checkLevelattacker ); // Chequear si el jugador cumple con la exp requerida para subir de nivel
    
}
    
    return 
HAM_IGNORED;

Responder
#8
gracias me anduvo lo otro y por ultimo que te quiero pedir es donde hago que cuando un zombie infecte a un humano le de 2 de exp uso zombie plague advance te adjunto el sma


Archivos adjuntos
.sma   Descargar AMXX / zombie_plague_advance_v1-6-1.sma (Tamaño: 418.08 KB / Descargas: 59)
Responder
#9
(20/09/2018, 09:20 PM)GeX~ escribió: gracias me anduvo lo otro y por ultimo que te quiero pedir es donde hago que cuando un zombie infecte a un humano le de 2 de exp uso zombie plague advance te adjunto el sma

En tu archivo SMA de zombie plague, ve a la siguiente línea:
Línea 7078 y ubica esta función:
Código PHP:
// Zombie Me Function (player id, infector, turn into a nemesis, silent mode, deathmsg and rewards, turn into assassin)
zombieme(idinfectornemesissilentmoderewardsassassin

Ve a la parte donde sale este pedazo de código:
Código PHP:
    // Show deathmsg and reward infector?
    
if (rewards && infector)
    {
        
// Send death notice and fix the "dead" attrib on scoreboard
        
SendDeathMsg(infectorid)
        
FixDeadAttrib(id)
        
        
// Reward frags, deaths, health, and ammo packs
        
UpdateFrags(infectoridget_pcvar_num(cvar_fragsinfect), 11)
        
g_ammopacks[infector] += get_pcvar_num(cvar_ammoinfect)
        
fm_set_user_health(infectorpev(infectorpev_health) + get_pcvar_num(cvar_zombiebonushp))
    } 

Ahora, dependiendo de la variable de exp que tengas, lo agregas al final de todo y quedaría así:

Código PHP:
    // Show deathmsg and reward infector?
    
if (rewards && infector)
    {
        
// Send death notice and fix the "dead" attrib on scoreboard
        
SendDeathMsg(infectorid)
        
FixDeadAttrib(id)
        
        
// Reward frags, deaths, health, and ammo packs
        
UpdateFrags(infectoridget_pcvar_num(cvar_fragsinfect), 11)
        
g_ammopacks[infector] += get_pcvar_num(cvar_ammoinfect)
        
fm_set_user_health(infectorpev(infectorpev_health) + get_pcvar_num(cvar_zombiebonushp))

        
gExpinfector ] += 2// Ganaste 2 De EXP por infectar a un humano :p
    


También puedes utilizar la forward zp_user_infect_attempt( victim, infector, nemesis ) que es mucho más cómodo. Pero ahí tu decides.
Responder
#10
(20/09/2018, 11:00 PM)Runaway escribió:
(20/09/2018, 09:20 PM)GeX~ escribió: gracias me anduvo lo otro y por ultimo que te quiero pedir es donde hago que cuando un zombie infecte a un humano le de 2 de exp uso zombie plague advance te adjunto el sma

En tu archivo SMA de zombie plague, ve a la siguiente línea:
Línea 7078 y ubica esta función:
Código PHP:
// Zombie Me Function (player id, infector, turn into a nemesis, silent mode, deathmsg and rewards, turn into assassin)
zombieme(idinfectornemesissilentmoderewardsassassin

Ve a la parte donde sale este pedazo de código:
Código PHP:
    // Show deathmsg and reward infector?
    
if (rewards && infector)
    {
        
// Send death notice and fix the "dead" attrib on scoreboard
        
SendDeathMsg(infectorid)
        
FixDeadAttrib(id)
        
        
// Reward frags, deaths, health, and ammo packs
        
UpdateFrags(infectoridget_pcvar_num(cvar_fragsinfect), 11)
        
g_ammopacks[infector] += get_pcvar_num(cvar_ammoinfect)
        
fm_set_user_health(infectorpev(infectorpev_health) + get_pcvar_num(cvar_zombiebonushp))
    } 

Ahora, dependiendo de la variable de exp que tengas, lo agregas al final de todo y quedaría así:

Código PHP:
    // Show deathmsg and reward infector?
    
if (rewards && infector)
    {
        
// Send death notice and fix the "dead" attrib on scoreboard
        
SendDeathMsg(infectorid)
        
FixDeadAttrib(id)
        
        
// Reward frags, deaths, health, and ammo packs
        
UpdateFrags(infectoridget_pcvar_num(cvar_fragsinfect), 11)
        
g_ammopacks[infector] += get_pcvar_num(cvar_ammoinfect)
        
fm_set_user_health(infectorpev(infectorpev_health) + get_pcvar_num(cvar_zombiebonushp))

        
gExpinfector ] += 2// Ganaste 2 De EXP por infectar a un humano :p
    


También puedes utilizar la forward zp_user_infect_attempt( victim, infector, nemesis ) que es mucho más cómodo. Pero ahí tu decides.

me anduvo mil gracias +1
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)