saber cuantos zombies tienes alrededor
#1
Hola comunidad de alliedmodders tengo una duda, como podría identificar a los zombies que estén alrededor del personaje y setearles un valor, podrían ayudarme ya que es para hacer un zombie que pueda curar a otros zombies que estén alrededor hasta cierta distancia.

Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <engine>
#include <zombieapocalypse>
#include <fun>
#include <fakemeta>

new const zclass_name[] = "Sanador"
new const zclass_info[] = "Vida- \Puede curarse"
new const zclass_model[] = "zombie_cientifico"
new const zclass_clawmodel[] = "v_mummya.mdl"
const zclass_lvl 0
const zclass_health 7000
const zclass_speed 260
const Float:zclass_gravity 0.98
const Float:zclass_knockback 1.0
//     zclass    | sprite
new g_zclass_healg_exploSpr;
new 
Float:last_use[33];
new 
max_health[33]
public 
plugin_init()
{
    
register_plugin("[ZP] Zombie Class: Heal Zombie""0.1""WPMG Team")
    
register_clcmd("drop""use_skill")
}

public 
plugin_precache()
{
    
g_zclass_heal za_register_zombie_class(zclass_namezclass_infozclass_modelzclass_clawmodelzclass_lvl,zclass_healthzclass_speedzclass_gravityzclass_knockback)
    
g_exploSpr precache_model("sprites/shockwave.spr")
}

public 
zp_user_infected_post(idinfector)
{
    if(
zp_get_user_zombie_class(id) == g_zclass_heal)
    {
        
client_printcolor(id"^4[ZA] ^1Presiona ^4^"G^" ^1Para curarte la vida.")
        
last_use[id] = 0.0
        max_health
[id] = get_user_health(id)
    }
}

public 
use_skill(id)
{
    static 
Float:originF[3]
    
pev(idpev_originoriginF)
    if(
is_user_alive(id) && !zp_get_user_nemesis(id) && zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == g_zclass_heal))
    {
        if(
last_use[id] + 10.0 <= get_gametime())
        {    
            
            if((
pev(idpev_health) <= zp_get_zombie_maxhealth(id)))
            {
                
create_blast3(originF)
                
last_use[id] = get_gametime();
                
set_task10.0"Mensaje"id )
                
                
set_pev(idpev_healthget_user_health(id) + 1200)
                
                return 
PLUGIN_HANDLED;
            }
            else if((
pev(idpev_health) >= max_health[id]))
            {
                
create_blast3(originF)
                
last_use[id] = get_gametime();
                
set_task10.0"Mensaje"id )
                
                
set_pev(idpev_healthmax_health[id])
                
                return 
PLUGIN_HANDLED;
            }
            
// Collisions
            
static victim
            victim 
1
    
            
while ((victim engfunc(EngFunc_FindEntityInSpherevictimoriginF240.0)) != 0)
            {
                
vida_alrededor(victim)
            }
        }
        
        
client_printcolor(id"^4[ZA] ^1Aun no esta lista la habilidad.")
    }
    return 
PLUGIN_CONTINUE;
}
public 
vida_alrededor(victim)
{

if(
pev(victimpev_health) < zp_get_zombie_maxhealth(victim))
    
set_pev(victimpev_healthget_user_health(victim) + 1200)
    
if((
pev(victimpev_health) >= zp_get_zombie_maxhealth(victim)))
    
set_pev(victimpev_health,zp_get_zombie_maxhealth(victim))
}
public 
Mensaje(id)
{
    if(
zp_get_user_zombie_class(id) == g_zclass_heal)
        
client_printcolor(id"^4[ZA] ^1Habiliadad recuperada presiona ^4^"G^" ^1para usarla.")
}

create_blast3(const Float:originF[3])
{
// Smallest ring
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYoriginF0)
write_byte(TE_BEAMCYLINDER// TE id
engfunc(EngFunc_WriteCoordoriginF[0]) // x
engfunc(EngFunc_WriteCoordoriginF[1]) // y
engfunc(EngFunc_WriteCoordoriginF[2]) // z
engfunc(EngFunc_WriteCoordoriginF[0]) // x axis
engfunc(EngFunc_WriteCoordoriginF[1]) // y axis
engfunc(EngFunc_WriteCoordoriginF[2]+385.0// z axis
write_short(g_exploSpr// sprite
write_byte(0// startframe
write_byte(0// framerate
write_byte(4// life
write_byte(60// width
write_byte(0// noise
write_byte(0// red
write_byte(100// green
write_byte(200// blue
write_byte(200// brightness
write_byte(0// speed
message_end()

// Medium ring
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYoriginF0)
write_byte(TE_BEAMCYLINDER// TE id
engfunc(EngFunc_WriteCoordoriginF[0]) // x
engfunc(EngFunc_WriteCoordoriginF[1]) // y
engfunc(EngFunc_WriteCoordoriginF[2]) // z
engfunc(EngFunc_WriteCoordoriginF[0]) // x axis
engfunc(EngFunc_WriteCoordoriginF[1]) // y axis
engfunc(EngFunc_WriteCoordoriginF[2]+470.0// z axis
write_short(g_exploSpr// sprite
write_byte(0// startframe
write_byte(0// framerate
write_byte(4// life
write_byte(60// width
write_byte(0// noise
write_byte(0// red
write_byte(100// green
write_byte(200// blue
write_byte(200// brightness
write_byte(0// speed
message_end()

}

stock client_printcolor(const id, const input[], any:...)
{
new 
iCount 1iPlayers[32]
static 
szMsg[191]

vformat(szMsgcharsmax(szMsg), input3)
replace_all(szMsg190"/g""^4")
replace_all(szMsg190"/y""^1")
replace_all(szMsg190"/t""^3")
replace_all(szMsg190"/w""^0")

if(
idiPlayers[0] = id
else get_players(iPlayersiCount"ch")

for(new 
0iCounti++)
{
    if(
is_user_connected(iPlayers[i]))
    {
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _iPlayers[i])
        
write_byte(iPlayers[i])
        
write_string(szMsg)
        
message_end()
    }
}


lo que quiero hacer es que el zombie pueda curarse a si mismo y como dije anteriormente que el zombie cure a otros zombies pero solo hasta cierta distancia, pero el zombie al intentar curarse su vida se disminuye a "0" y la cámara se voltea.


Archivos adjuntos
.sma   Descargar AMXX / zclass_heal.sma (Tamaño: 4.79 KB / Descargas: 1)
Responder
#2
Puedes tener como ejemplo cualquier bomba cuando explota que está dentro del zp.Solo que en ves de llamarlo cuando explota (como la granada), de llamarlo al apretar la letra "e" por ejemplo IN_USE, y con un task de 0.1 que se llame por "x" cantidad de veces

Para setear la cantidad de zombies que se encuentran cerca dentro del while teniendo en cuenta el radio de la explosión e ir sumandola con una variable que solo sume a los zombies y no los humanos que se encuentren cerca tuyo, nose si alla un plugin en el foro, pero que se puede hacer, se puede hacer jaja
Responder
#3
Estuve intentando hacerlo pero eso fue lo que logre
Responder
#4
el valor que tenes que asignar es del tipo FLOAT por eso te asigna 0;

Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <engine>
#include <zombieapocalypse>
#include <fun>
#include <fakemeta>

new const zclass_name[] = "Sanador"
new const zclass_info[] = "Vida- \Puede curarse"
new const zclass_model[] = "zombie_cientifico"
new const zclass_clawmodel[] = "v_mummya.mdl"
const zclass_lvl 0
const zclass_health 7000
const zclass_speed 260
const Float:zclass_gravity 0.98
const Float:zclass_knockback 1.0
//     zclass    | sprite
new g_zclass_healg_exploSpr;
new 
Float:last_use[33];
new 
max_health[33]
public 
plugin_init()
{
    
register_plugin("[ZP] Zombie Class: Heal Zombie""0.1""WPMG Team")
    
register_clcmd("drop""use_skill")
}

public 
plugin_precache()
{
    
g_zclass_heal za_register_zombie_class(zclass_namezclass_infozclass_modelzclass_clawmodelzclass_lvl,zclass_healthzclass_speedzclass_gravityzclass_knockback)
    
g_exploSpr precache_model("sprites/shockwave.spr")
}

public 
zp_user_infected_post(idinfector)
{
    if(
zp_get_user_zombie_class(id) == g_zclass_heal)
    {
        
client_printcolor(id"^4[ZA] ^1Presiona ^4^"G^" ^1Para curarte la vida.")
        
last_use[id] = 0.0
        max_health
[id] = get_user_health(id)
    }
}

public 
use_skill(id)
{
    static 
Float:originF[3]
    
pev(idpev_originoriginF)
    if(
is_user_alive(id) && !zp_get_user_nemesis(id) && zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == g_zclass_heal))
    {
        if(
last_use[id] + 10.0 <= get_gametime())
        {    
            
            if((
pev(idpev_health) <= zp_get_zombie_maxhealth(id)))
            {
                
create_blast3(originF)
                
last_use[id] = get_gametime();
                
set_task10.0"Mensaje"id )
                
                
set_pev(idpev_healthfloat(get_user_health(id) + 1200))
                
                return 
PLUGIN_HANDLED;
            }
            else if((
pev(idpev_health) >= max_health[id]))
            {
                
create_blast3(originF)
                
last_use[id] = get_gametime();
                
set_task10.0"Mensaje"id )
                
                
set_pev(idpev_healthfloat(max_health[id]))
                
                return 
PLUGIN_HANDLED;
            }
            
// Collisions
            
static victim
            victim 
1
            
            
while ((victim engfunc(EngFunc_FindEntityInSpherevictimoriginF240.0)) != 0)
            {
                
vida_alrededor(victim)
            }
        }
        
        
client_printcolor(id"^4[ZA] ^1Aun no esta lista la habilidad.")
    }
    return 
PLUGIN_CONTINUE;
}
public 
vida_alrededor(victim)
{
    
    if(
pev(victimpev_health) < zp_get_zombie_maxhealth(victim))
        
set_pev(victimpev_healthfloat(get_user_health(victim) + 1200))
    
    if((
pev(victimpev_health) >= zp_get_zombie_maxhealth(victim)))
        
set_pev(victimpev_health,float(zp_get_zombie_maxhealth(victim)))
}
public 
Mensaje(id)
{
    if(
zp_get_user_zombie_class(id) == g_zclass_heal)
        
client_printcolor(id"^4[ZA] ^1Habiliadad recuperada presiona ^4^"G^" ^1para usarla.")
}

create_blast3(const Float:originF[3])
{
    
// Smallest ring
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYoriginF0)
    
write_byte(TE_BEAMCYLINDER// TE id
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y
    
engfunc(EngFunc_WriteCoordoriginF[2]) // z
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x axis
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y axis
    
engfunc(EngFunc_WriteCoordoriginF[2]+385.0// z axis
    
write_short(g_exploSpr// sprite
    
write_byte(0// startframe
    
write_byte(0// framerate
    
write_byte(4// life
    
write_byte(60// width
    
write_byte(0// noise
    
write_byte(0// red
    
write_byte(100// green
    
write_byte(200// blue
    
write_byte(200// brightness
    
write_byte(0// speed
    
message_end()
    
    
// Medium ring
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYoriginF0)
    
write_byte(TE_BEAMCYLINDER// TE id
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y
    
engfunc(EngFunc_WriteCoordoriginF[2]) // z
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x axis
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y axis
    
engfunc(EngFunc_WriteCoordoriginF[2]+470.0// z axis
    
write_short(g_exploSpr// sprite
    
write_byte(0// startframe
    
write_byte(0// framerate
    
write_byte(4// life
    
write_byte(60// width
    
write_byte(0// noise
    
write_byte(0// red
    
write_byte(100// green
    
write_byte(200// blue
    
write_byte(200// brightness
    
write_byte(0// speed
    
message_end()

}

stock client_printcolor(const id, const input[], any:...)
{
    new 
iCount 1iPlayers[32]
    static 
szMsg[191]
    
    
vformat(szMsgcharsmax(szMsg), input3)
    
replace_all(szMsg190"/g""^4")
    
replace_all(szMsg190"/y""^1")
    
replace_all(szMsg190"/t""^3")
    
replace_all(szMsg190"/w""^0")
    
    if(
idiPlayers[0] = id
    
else get_players(iPlayersiCount"ch")
    
    for(new 
0iCounti++)
    {
        if(
is_user_connected(iPlayers[i]))
        {
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _iPlayers[i])
            
write_byte(iPlayers[i])
            
write_string(szMsg)
            
message_end()
        }
    }

Hi Milashkasiya CrabCrab

Soy un #Panda.. Soy solo un tipo que parece #común pero soy todo lo contrario; alguien #atípico en esta sociedad actual

[Imagen: xl0jvd-5.png]
Link
Responder
#5
ok, gracias ya lo solucione pero como le hago para que detecte a los jugadores que estén cerca.

Código PHP:
    static Float:originF[3]
    
pev(idpev_originoriginF)
    
    if(
is_user_alive(id) && !zp_get_user_nemesis(id) && zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == g_zclass_heal))
    {
        if(
last_use[id] + 10.0 <= get_gametime())
        {    
            
            
create_blast3(originF)
            
            
last_use[id] = get_gametime();
            
set_task10.0"Mensaje"id )
            
            
// Collisions
            
new victim= -1

            
if((victim find_ent_in_sphere(victim,originF,240.0)) && victim <= g_maxplyers)
            {    
                if(
zp_get_user_zombie(victim) && pev(victimpev_health) < float(zp_get_zombie_maxhealth(victim)))
                    
set_pev(victimpev_healthfloat(get_user_health(victim) + 1200))
                    
                if((
zp_get_user_zombie(victim) && pev(victimpev_health) >= float(zp_get_zombie_maxhealth(victim))))
                    
set_pev(victimpev_health,float(zp_get_zombie_maxhealth(victim)))
                    
                if(
victim <= 1)
                    
client_printcolor(id"^4[ZA] ^1Solo te has curado tu mismo.")
                else
                    
client_printcolor(id"^4[ZA] ^1has curado a %d zombies.",victim)
                
                return 
PLUGIN_HANDLED;
            }
            
            return 
PLUGIN_HANDLED;
        }
        
        
client_printcolor(id"^4[ZA] ^1Aun no esta lista la habilidad.")
    }
    return 
PLUGIN_CONTINUE;


solo me detecta a mi.

   

es solo para subirle la vida a los que están dentro del rango incluyendo al que activo la habilidad.
Responder
#6
proba.

Código PHP:
#include <amxmodx>
#include <amxmisc>
//#include <hamsandwich>
#include <engine>
#include <zombieapocalypse>
//#include <fun>
#include <fakemeta>

new const zclass_name[] = "Sanador"
new const zclass_info[] = "Vida- \Puede curarse"
new const zclass_model[] = "zombie_cientifico"
new const zclass_clawmodel[] = "v_mummya.mdl"
const zclass_lvl 0
const zclass_health 7000
const zclass_speed 260
const Float:zclass_gravity 0.98
const Float:zclass_knockback 1.0
//     zclass    | sprite
new g_zclass_healg_exploSpr;
new 
Float:last_use[33];
//new max_health[33]
public plugin_init()
{
    
register_plugin("[ZP] Zombie Class: Heal Zombie""0.1""WPMG Team")
    
register_clcmd("drop""use_skill")
}

public 
plugin_precache()
{
    
g_zclass_heal za_register_zombie_class(zclass_namezclass_infozclass_modelzclass_clawmodelzclass_lvl,zclass_healthzclass_speedzclass_gravityzclass_knockback)
    
g_exploSpr precache_model("sprites/shockwave.spr")
}

public 
zp_user_infected_post(idinfector)
{
    if(
zp_get_user_zombie_class(id) == g_zclass_heal)
    {
        
client_printcolor(id"^4[ZA] ^1Presiona ^4^"G^" ^1Para curarte la vida.")
        
last_use[id] = 0.0
        
//max_health[id] = get_user_health(id)
    
}
}

public 
use_skill(id)
{
    static 
Float:originF[3]
    
pev(idpev_originoriginF)
    if(
is_user_alive(id) && !zp_get_user_nemesis(id) && zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == g_zclass_heal))
    {
        if(
last_use[id] + 10.0 <= get_gametime())
        {    
            
            
/*if((pev(id, pev_health) <= zp_get_zombie_maxhealth(id)))
            {
                create_blast3(originF)
                last_use[id] = get_gametime();
                set_task( 10.0, "Mensaje", id )
                
                set_pev(id, pev_health, float(get_user_health(id) + 1200))
                
                return PLUGIN_HANDLED;
            }
            else if((pev(id, pev_health) >= max_health[id]))
            {
                create_blast3(originF)
                last_use[id] = get_gametime();
                set_task( 10.0, "Mensaje", id )
                
                set_pev(id, pev_health, float(max_health[id]))
                
                return PLUGIN_HANDLED;
            }*/
            // Collisions
            
new PlayerzombieHPzombieMaxHP
            
/*victim = 1
            
            while ((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, 240.0)) != 0)
            {
                vida_alrededor(victim)
            }
            */
            
            
create_blast3(originF)
            
last_use[id] = get_gametime();
            
set_task10.0"Mensaje"id )
            
            
Player = -1  
    
            
while ((Player find_ent_in_sphere(PlayeroriginF240.0)) != 0) {  
        
                if(!
is_user_alive(Player) || !zp_get_user_zombie(Player))
                    continue;
                    
                
zombieHP get_user_health(Player)
                
                
zombieMaxHP zp_get_zombie_maxhealth(Player)
                
                
set_pev(Playerpev_health, (zombieHP 1200) > zombieMaxHP float(zombieMaxHP) : float(zombieHP 1200))
                
            }
        }
        
        
client_printcolor(id"^4[ZA] ^1Aun no esta lista la habilidad.")
    }
    return 
PLUGIN_CONTINUE;
}
/*public vida_alrededor(victim)
{
    
    if(pev(victim, pev_health) < zp_get_zombie_maxhealth(victim))
        set_pev(victim, pev_health, float(get_user_health(victim) + 1200))
    
    if((pev(victim, pev_health) >= zp_get_zombie_maxhealth(victim)))
        set_pev(victim, pev_health,float(zp_get_zombie_maxhealth(victim)))
}*/
public Mensaje(id)
{
    if(
zp_get_user_zombie_class(id) == g_zclass_heal)
        
client_printcolor(id"^4[ZA] ^1Habiliadad recuperada presiona ^4^"G^" ^1para usarla.")
}

create_blast3(const Float:originF[3])
{
    
// Smallest ring
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYoriginF0)
    
write_byte(TE_BEAMCYLINDER// TE id
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y
    
engfunc(EngFunc_WriteCoordoriginF[2]) // z
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x axis
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y axis
    
engfunc(EngFunc_WriteCoordoriginF[2]+385.0// z axis
    
write_short(g_exploSpr// sprite
    
write_byte(0// startframe
    
write_byte(0// framerate
    
write_byte(4// life
    
write_byte(60// width
    
write_byte(0// noise
    
write_byte(0// red
    
write_byte(100// green
    
write_byte(200// blue
    
write_byte(200// brightness
    
write_byte(0// speed
    
message_end()
    
    
// Medium ring
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYoriginF0)
    
write_byte(TE_BEAMCYLINDER// TE id
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y
    
engfunc(EngFunc_WriteCoordoriginF[2]) // z
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x axis
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y axis
    
engfunc(EngFunc_WriteCoordoriginF[2]+470.0// z axis
    
write_short(g_exploSpr// sprite
    
write_byte(0// startframe
    
write_byte(0// framerate
    
write_byte(4// life
    
write_byte(60// width
    
write_byte(0// noise
    
write_byte(0// red
    
write_byte(100// green
    
write_byte(200// blue
    
write_byte(200// brightness
    
write_byte(0// speed
    
message_end()

}

stock client_printcolor(const id, const input[], any:...)
{
    new 
iCount 1iPlayers[32]
    static 
szMsg[191]
    
    
vformat(szMsgcharsmax(szMsg), input3)
    
replace_all(szMsg190"/g""^4")
    
replace_all(szMsg190"/y""^1")
    
replace_all(szMsg190"/t""^3")
    
replace_all(szMsg190"/w""^0")
    
    if(
idiPlayers[0] = id
    
else get_players(iPlayersiCount"ch")
    
    for(new 
0iCounti++)
    {
        if(
is_user_connected(iPlayers[i]))
        {
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _iPlayers[i])
            
write_byte(iPlayers[i])
            
write_string(szMsg)
            
message_end()
        }
    }

Hi Milashkasiya CrabCrab

Soy un #Panda.. Soy solo un tipo que parece #común pero soy todo lo contrario; alguien #atípico en esta sociedad actual

[Imagen: xl0jvd-5.png]
Link
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)