18/01/2019, 04:24 PM
(Última modificación: 21/01/2019, 01:30 AM por ontejdo. Edited 3 times in total.)
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.
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.
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_heal, g_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_name, zclass_info, zclass_model, zclass_clawmodel, zclass_lvl,zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
g_exploSpr = precache_model("sprites/shockwave.spr")
}
public zp_user_infected_post(id, infector)
{
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(id, pev_origin, originF)
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, 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, max_health[id])
return PLUGIN_HANDLED;
}
// Collisions
static victim
victim = 1
while ((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, 240.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(victim, pev_health) < zp_get_zombie_maxhealth(victim))
set_pev(victim, pev_health, get_user_health(victim) + 1200)
if((pev(victim, pev_health) >= zp_get_zombie_maxhealth(victim)))
set_pev(victim, pev_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_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_BEAMCYLINDER) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
engfunc(EngFunc_WriteCoord, originF[0]) // x axis
engfunc(EngFunc_WriteCoord, originF[1]) // y axis
engfunc(EngFunc_WriteCoord, originF[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_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_BEAMCYLINDER) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
engfunc(EngFunc_WriteCoord, originF[0]) // x axis
engfunc(EngFunc_WriteCoord, originF[1]) // y axis
engfunc(EngFunc_WriteCoord, originF[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 = 1, iPlayers[32]
static szMsg[191]
vformat(szMsg, charsmax(szMsg), input, 3)
replace_all(szMsg, 190, "/g", "^4")
replace_all(szMsg, 190, "/y", "^1")
replace_all(szMsg, 190, "/t", "^3")
replace_all(szMsg, 190, "/w", "^0")
if(id) iPlayers[0] = id
else get_players(iPlayers, iCount, "ch")
for(new i = 0; i < iCount; i++)
{
if(is_user_connected(iPlayers[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_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.