Descrição: Uma nova classe de Baltazar zumbi para você. A principal característica está se movendo através do espaço (teletransporte).
Portal de ativação: Cria um portal no local especificado (pressionando F1), nenhum efeito foi acompanhado, exceto o som quando você cria um portal.
A capacidade de teletransporte: Na chave G, ele criou um corpo portado portal (desde que seja criado, caso contrário nada vai acontecer.) Acompanhado pelos efeitos sonoros e bonito.
A habilidade Teleport: Balthazar também é capaz de se teletransportar uma vítima em um portal. HUD mostra a vítima relatou que seu teletransporte através de X segundos, mas não especificou onde.
Em cada teletransporte para o local onde se teletransporta Balthazar ou da vítima, causa danos em um raio pequeno de todas as pessoas (inclusive a vítima).
---------------------------------
.::Configurações::.
zp_portaldemon_cdown 12 / / Cooldown (segundos)
zp_portaldemon_dmg 20,0 / / Damage que vai pessoas que estavam perto do portal como acima
zp_portaldemon_dist 330 / / Distância em que Balthazar pode mover a vítima
---------------------------------
.::SMA::.
.::Download::.
4Shared - Clique Aqui
.::Créditos::.
Zombie-mod.ru
.::Observação::.
Não vem com models, você tem que colocar.
Portal de ativação: Cria um portal no local especificado (pressionando F1), nenhum efeito foi acompanhado, exceto o som quando você cria um portal.
A capacidade de teletransporte: Na chave G, ele criou um corpo portado portal (desde que seja criado, caso contrário nada vai acontecer.) Acompanhado pelos efeitos sonoros e bonito.
A habilidade Teleport: Balthazar também é capaz de se teletransportar uma vítima em um portal. HUD mostra a vítima relatou que seu teletransporte através de X segundos, mas não especificou onde.
Em cada teletransporte para o local onde se teletransporta Balthazar ou da vítima, causa danos em um raio pequeno de todas as pessoas (inclusive a vítima).
---------------------------------
.::Configurações::.
zp_portaldemon_cdown 12 / / Cooldown (segundos)
zp_portaldemon_dmg 20,0 / / Damage que vai pessoas que estavam perto do portal como acima
zp_portaldemon_dist 330 / / Distância em que Balthazar pode mover a vítima
---------------------------------
.::SMA::.
Código:
/*================================================================================
-----------------------------------
-*- [ZP] Zombie Class: Baltazar -*-
-----------------------------------
~~~~~~~~~~~~~~~
- Description -
~~~~~~~~~~~~~~~
New zombie Class teleportator
~~~~~~~~~~~~~~~
- Changelog -
~~~~~~~~~~~~~~~
v. 1.0 - Firs Released. Full Testing plugin
v. 1.1 - Fix switch bug & no ability item
v. 1.2 - Added all cvars + visual effects
v. 1.3 - Optimization code, removed logs errors
v. 1.4 - Added new abiltiy, and effects to ability
================================================================================*/
#include <amxmodx>
#include <fakemeta_util>
#include < fun >
#include <hamsandwich>
#include <zombieplague>
#define PLUGIN "[ZP] Zombie Class: Baltazar"
#define VERSION "1.4"
#define AUTHOR "Re.Act!ve"
//#define TASK_ORIGIN 2247
//#define ID_TASK_ORIGIN (taskid - TASK_ORIGIN)
#define TE_SPRITETRAIL 15
// Classic Zombie Attributes
new const zclassT_name[] = { "Baltazar" }
new const zclassT_info[] = { "Teleport ability" }
new const zclassT_model[] = { "Baltazar" }
new const zclassT_clawmodel[] = { "v_baltazar_knife.mdl" }
const zclassT_health = 620
const zclassT_speed = 270
const Float:zclassT_gravity = 0.9
const Float:zclassT_knockback = 1.2
new sound_ability[] = { "baltazar/teleport.wav" }
new g_cdown, g_Switcher, g_damage, g_countdown[33], g_MaxPlayers, g_msgSayText, vOrigin[33][3], sprite_ability, g_SyncHUD, g_time_victim[33], g_portalize[33], g_dist
new timer[33], g_Sprite, g_Sprite_p
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
g_cdown = register_cvar("zp_portaldemon_cdown", "12") // Перезарядка способности
g_damage = register_cvar("zp_portaldemon_dmg", "20.0") // Урон, который получат люди, находившиеся вблизи портала, на который переместился Бальтазар
g_dist = register_cvar("zp_portaldemon_dist", "330") // Дистанция, с которой бальтазар можете переместить жертву
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV", "Round_Start", "a", "1=0", "2=0")
g_msgSayText = get_user_msgid("SayText")
g_MaxPlayers = get_maxplayers( )
g_SyncHUD = CreateHudSyncObj( 1 );
register_clcmd( "ability1", "AbilityOrigin" )
register_clcmd("ability2", "AbilityPlayerOrigin" )
register_clcmd("drop", "AbilityTeleport" )
}
public plugin_precache()
{
// Register Class
g_Switcher = zp_register_zombie_class(zclassT_name, zclassT_info, zclassT_model, zclassT_clawmodel, zclassT_health, zclassT_speed, zclassT_gravity, zclassT_knockback)
sprite_ability = engfunc(EngFunc_PrecacheModel,"sprites/28weeks_later/flare1.spr")
g_Sprite = engfunc(EngFunc_PrecacheModel,"sprites/28weeks_later/teleport.spr")
g_Sprite_p = engfunc(EngFunc_PrecacheModel,"sprites/portal1.spr")
precache_sound(sound_ability)
precache_sound("baltazar/portal_on.wav")
}
public Round_Start()
{
for(new id;id<=g_MaxPlayers;id++)
{
if(!is_user_connected(id)) return;
vOrigin[id][0] =0; vOrigin[id][1] =0; vOrigin[id][2] = 0;
g_portalize[id] = false;
}
}
public zp_user_infected_post(id, infector)
{
if( (zp_get_user_zombie_class(id) == g_Switcher) && !zp_get_user_nemesis(id) )
{
g_countdown[id] = true;
ChatColor( id, "^x04[ZP] ^x01У вас есть способность^x04Создавать порталы^x01. Перезарядка: %d сек.", get_pcvar_num(g_cdown))
console_cmd(id,"bind v ^"ability2^"")
console_cmd(id,"bind F1 ability1")
}
}
public AbilityOrigin(id)
{
if( (zp_get_user_zombie_class(id) == g_Switcher) && !zp_get_user_nemesis(id) && zp_get_user_zombie(id) && g_countdown[id])
{
get_user_origin(id, vOrigin[id])
client_cmd(id, "spk baltazar/portal_on")
client_print(id, print_center, "В этом месте создан портал")
}
}
public AbilityPlayerOrigin(id)
{
if( (zp_get_user_zombie_class(id) == g_Switcher) && !zp_get_user_nemesis(id) && zp_get_user_zombie(id) && g_countdown[id])
{
new target, body, dist = get_pcvar_num(g_dist);
get_user_aiming( id, target, body, dist )
if(vOrigin[id][0] !=0 || vOrigin[id][1] !=0 || vOrigin[id][2] !=0)
{
if(is_user_alive(target) && is_user_alive(id) && target != id && !zp_get_user_zombie(target) && !g_portalize[target])
{
g_portalize[target] = true;
g_countdown[id] = false;
g_time_victim[target] = 4;
timer[id] = get_pcvar_num(g_cdown)
vOrigin[target][0] = vOrigin[id][0]; vOrigin[target][1] = vOrigin[id][1]; vOrigin[target][2] = vOrigin[id][2];
client_cmd(id, "spk baltazar/portal_on")
set_hudmessage(255, 255, 0, -1.0, -1.0, _, _, 3.0)
ShowSyncHudMsg(id, g_SyncHUD, "Жертва перемещается в портал");
set_task(0.1, "HUDTeleportTarget", target)
set_task(1.0, "ResetAbility", id)
}
else
client_print(id, print_center, "Жертвы не обнаружено")
}
}
}
public HUDTeleportTarget(victim)
{
if(g_time_victim[victim] > 0)
{
set_hudmessage(255, 255, 0, -1.0, -1.0, _, _, 1.1)
ShowSyncHudMsg(victim, g_SyncHUD, "Бальтазар переместил вас в портал^nПеремещение через %d", g_time_victim[victim]);
g_time_victim[victim]-=1
set_task(1.0, "HUDTeleportTarget", victim)
}
else
{
new Origin[3]
get_user_origin(victim, Origin)
message_begin(MSG_PVS, SVC_TEMPENTITY, Origin)
write_byte(TE_SPRITE) // TE victim
write_coord(Origin[0]) // x
write_coord(Origin[1]) // y
write_coord(Origin[2]+5) // z
write_short(g_Sprite) // sprite
write_byte(8) // scale
write_byte(200) // brightness
message_end()
do_screen_fade(victim, 0.5, 0.2, 255, 255, 255, 180);
emit_sound(victim, CHAN_STREAM, sound_ability, 1.0, ATTN_NORM, 0, PITCH_NORM)
set_user_origin(victim, vOrigin[victim])
g_portalize[victim] = false;
SwitchUpdate(victim)
remove_task(victim)
}
}
public AbilityTeleport(id)
{
if( (zp_get_user_zombie_class(id) == g_Switcher) && !zp_get_user_nemesis(id) && zp_get_user_zombie(id) && g_countdown[id])
{
if(vOrigin[id][0] !=0 || vOrigin[id][1] !=0 || vOrigin[id][2] !=0)
{
new Origin[3]
get_user_origin(id, Origin)
message_begin(MSG_PVS, SVC_TEMPENTITY, Origin)
write_byte(TE_SPRITE) // TE id
write_coord(Origin[0]) // x
write_coord(Origin[1]) // y
write_coord(Origin[2]+5) // z
write_short(g_Sprite) // sprite
write_byte(8) // scale
write_byte(200) // brightness
message_end()
g_countdown[id] = false;
timer[id] = get_pcvar_num(g_cdown)
do_screen_fade(id, 0.5, 0.2, 255, 255, 255, 180);
emit_sound(id, CHAN_STREAM, sound_ability, 1.0, ATTN_NORM, 0, PITCH_NORM)
set_user_origin(id, vOrigin[id])
set_task(1.0, "ResetAbility", id)
SwitchUpdate(id)
}
else client_print(id, print_center, "Сначало создайте портал")
}
}
public ResetAbility(id)
{
if(timer[id] > 0)
{
set_hudmessage(200, 100, 0, 0.75, 0.93, 0, 1.0, 1.1, 0.0, 0.0, -1)
show_hudmessage(id, "Восстановление: %d сек.",timer[id])
timer[id]-=1
set_task(1.0, "ResetAbility", id)
}
else
{
g_countdown[id] = true;
ChatColor( id, "^x04[ZP] ^x01Ваша способность ^x04Порталы^x01 восстановлена")
remove_task(id)
}
}
SwitchUpdate(id)
{
static Float:flOrigin[3]
pev(id, pev_origin, flOrigin)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vOrigin[id], 0)
write_byte(TE_DLIGHT)
engfunc(EngFunc_WriteCoord, flOrigin[0]) // x
engfunc(EngFunc_WriteCoord, flOrigin[1]) // y
engfunc(EngFunc_WriteCoord, flOrigin[2]) // z
write_byte(10) // radius
write_byte(200) // red
write_byte(200) // green
write_byte(0) // blue
write_byte(4) // life
write_byte(0) // decay rate
message_end()
message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
write_byte( TE_SPRITETRAIL ) // Throws a shower of sprites or models
write_coord( vOrigin[id][ 0 ] ) // start pos
write_coord( vOrigin[id][ 1 ] )
write_coord( vOrigin[id][ 2 ] + 200)
write_coord( vOrigin[id][ 0 ] ) // velocity
write_coord( vOrigin[id][ 1 ] )
write_coord( vOrigin[id][ 2 ] +20)
write_short(sprite_ability ) // spr
write_byte(30) // (count)
write_byte(random_num(27,30)) // (life in 0.1's)
write_byte(2) // byte (scale in 0.1's)
write_byte(random_num(30,70)) // (velocity along vector in 10's)
write_byte(40) // (randomness of velocity in 10's)
message_end()
message_begin(MSG_PVS, SVC_TEMPENTITY, vOrigin[id])
write_byte(TE_SPRITE) // TE id
write_coord(vOrigin[id][0]) // x
write_coord(vOrigin[id][1]) // y
write_coord(vOrigin[id][2]+5) // z
write_short(g_Sprite_p) // sprite
write_byte(8) // scale
write_byte(200) // brightness
message_end()
new Float:flVictimOrigin [ 3 ], Float:damage
for ( new victim = 1; victim < get_maxplayers(); victim++ )
{
pev ( victim, pev_origin, flVictimOrigin )
new Float:flDistance = get_distance_f (flOrigin, flVictimOrigin )
if ( flDistance <= 250.0 && !zp_get_user_zombie(victim)) //get_pcvar_float(g_distansion
{
if (!is_user_alive(victim))
continue;
damage = get_pcvar_float(g_damage)
fm_fakedamage(victim, "player", damage, DMG_BLAST)
}
}
}
stock do_screen_fade( id, Float:fadeTime, Float:holdTime, red, green, blue, alpha, type = 0x0000 )
{
static msgScreenFade;
if ( !msgScreenFade ) { msgScreenFade = get_user_msgid( "ScreenFade" ); }
new fade, hold;
fade = clamp( floatround( fadeTime * float(1<<12)), 0, 0xFFFF );
hold = clamp( floatround( holdTime * float(1<<12)), 0, 0xFFFF );
message_begin( MSG_ONE_UNRELIABLE, msgScreenFade, _, id );
write_short( fade );
write_short( hold );
write_short( type );
write_byte( red );
write_byte( green );
write_byte( blue );
write_byte( alpha );
message_end( );
}
ChatColor(target, const message[], any:...)
{
static buffer[512], i, argscount
argscount = numargs()
// Send to everyone
if (!target)
{
static player
for (player = 1; player <= g_MaxPlayers; player++)
{
// Not connected
if (!is_user_connected(player))
continue;
// Remember changed arguments
static changed[5], changedcount // [5] = max LANG_PLAYER occurencies
changedcount = 0
// Replace LANG_PLAYER with player id
for (i = 2; i < argscount; i++)
{
if (getarg(i) == LANG_PLAYER)
{
setarg(i, 0, player)
changed[changedcount] = i
changedcount++
}
}
// Format message for player
vformat(buffer, charsmax(buffer), message, 3)
// Send it
message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player)
write_byte(player)
write_string(buffer)
message_end()
// Replace back player id's with LANG_PLAYER
for (i = 0; i < changedcount; i++)
setarg(changed[i], 0, LANG_PLAYER)
}
}
// Send to specific target
else
{
// Format message for player
vformat(buffer, charsmax(buffer), message, 3)
// Send it
message_begin(MSG_ONE, g_msgSayText, _, target)
write_byte(target)
write_string(buffer)
message_end()
}
}
.::Download::.
4Shared - Clique Aqui
.::Créditos::.
Zombie-mod.ru
.::Observação::.
Não vem com models, você tem que colocar.