Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

NPC Alien Boss

Статус пользователя soneekk
сообщение 30.12.2015, 14:50
Сообщение #1


Стаж: 11 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

здравствуйте, взял плагин alien bossa из zp сборки, установил на сервер все работает но такая проблема ct и tt могут убивать друг друга, дал бы всем god mod но потом boss не сможет убить их.
как можно это исправить? спасибо заранее.

alien boss
Код:
#include <amxmodx>
#include <xs>
#include <fakemeta>
#include <engine>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <dhudmessage>

//native zp_set_umm_start()

new g_timer
new g_game_start

new healthbar
new const health_spr[] = "sprites/den67_cso/npc_hp_grade2.spr"

#define PLUGIN_NAME "[CSO] [NPC] Alien Boss"
#define PLUGIN_VERSION "1.1"
#define PLUGIN_AUTHOR "bos93 / heka / DEN67"

#define g_szClassName "npc_Phobos"
#define g_szPhobosModel "models/bw/bosses/npc_alienboss2.mdl"

new g_msgScreenShake, g_msgScreenFade;

new const Float:Phobos_SPEED = 300.0;

#define ZBS_ATTACK1_ANIMTIME 2.36
#define ZBS_SHOCKWAVE_ANIMTIME 3.36

new Float:ZBS_DUSH
new Float:ZBS_SHOCKWAVE;

#define Phobos_HEALTH 500000.0

new SprSW

new bool:start_knock[512]

new m_iBlood[2]

new const SPRITE_BLOOD2[] = "sprites/blood.spr";
new const SPRITE_BLOOD[] = "sprites/bloodspray.spr";

new g_iPhobosEnt
new g_pBossTarget
new g_iMaxPlayers
new PhobosState:g_OPhobosState;
new g_iMsgScreenShake;
new zbs_dush_skill
new zbs_dush_end

const UNIT_SECOND = (1<<12);
const FFADE_IN = 0x0000;

new Float:g_vPhobosOrigin[3];
new Float:g_vTarOrigin[33][3];
new Float:g_vAimVector[33][3];
new Float:g_fLenToAim[33];
new Float:g_fHaveDamage[33];

new Float:g_fPhobosSpeed
new Float:g_fLastAttack1;
new Float:g_fResetDush
new Float:g_fTimeShockWave
new Float:g_fResetShockWave

enum PhobosState
{
scene_appear = 1,
zbs_idle1,
zbs_walk,
zbs_dush,
zbs_atack1,
zbs_shockwave,
death
}

public plugin_init()
{
register_plugin ( PLUGIN_NAME , PLUGIN_VERSION , PLUGIN_AUTHOR )

new szMapName[ 64 ];
get_mapname( szMapName, 63 );
if( contain( szMapName, "zp_boss_city" ) == -1 )
return

set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET)
set_msg_block(get_user_msgid("RoundTime"), BLOCK_SET)

register_clcmd("say /start", "AlienBoss_Prepare")

register_logevent("round_end", 2, "1=Round_End")

register_think(g_szClassName, "Phobos_Think");
register_touch(g_szClassName, "*", "Fix_Eng_Touch_Player");

g_msgScreenShake = get_user_msgid( "ScreenShake" );
g_msgScreenFade = get_user_msgid( "ScreenFade" );

RegisterHam(Ham_TraceAttack, "info_target", "Phobos_Ham_TraceAttack_Pre", 0);
RegisterHam(Ham_TakeDamage, "info_target", "Phobos_Ham_TakeDamage_Pre", 0);
RegisterHam(Ham_TakeDamage, "info_target", "Phobos_Ham_TakeDamage_Post", 1);

g_iMaxPlayers = get_maxplayers ( )

//set_task(1.0 , "AlienBoss_Prepare")

g_iMsgScreenShake = get_user_msgid("ScreenShake");
}

public plugin_precache()
{
new szMapName[ 64 ];
get_mapname( szMapName, 63 );
if( contain( szMapName, "zp_boss_city" ) == -1 )
return

precache_model( g_szPhobosModel )
precache_model(health_spr)

precache_sound("bw/bosses/mahadash.wav")
precache_sound("bw/bosses/death.wav")
precache_sound("bw/bosses/shockwave.wav")

precache_sound("bw/bosses/swing.wav")
precache_sound("bw/bosses/vioce.wav")
precache_sound("bw/bosses/footstep_1.wav")
precache_sound("bw/bosses/footstep_2.wav")

SprSW = precache_model("sprites/shockwave.spr")

m_iBlood[0] = precache_model(SPRITE_BLOOD);
m_iBlood[1] = precache_model(SPRITE_BLOOD2);

ZBS_DUSH = ( 30.0 )
ZBS_SHOCKWAVE = ( 15.0 )
}

public AlienBoss_Prepare()
{
set_task(1.0, "count_start", 231211)
g_timer = 25 //26

g_game_start = false

set_task(1.0, "AlienBoss_Start", 21341);
}

public count_start(ent)
{
g_timer = g_timer - 1

if(g_timer > 0)
client_print(0, print_center, "Prepare for battle: %d", g_timer)

if(g_timer >= 0)
set_task(1.0, "count_start", 231211)
}

public AlienBoss_Start()
{

g_iPhobosEnt = create_entity( "info_target" );

g_game_start = false

new Float:vOrigin[3]

if(!pev_valid(g_iPhobosEnt))
return;
new Float:fHealth;fHealth = Phobos_HEALTH

set_pev( g_iPhobosEnt, pev_classname, g_szClassName );
set_pev( g_iPhobosEnt, pev_model, g_szPhobosModel );

set_pev( g_iPhobosEnt, pev_solid, SOLID_BBOX);
set_pev( g_iPhobosEnt, pev_movetype, MOVETYPE_NONE);

vOrigin[0] = -314.000000;
vOrigin[1] = 21.000000;
vOrigin[2] = 424.00000;

engfunc( EngFunc_SetModel, g_iPhobosEnt, g_szPhobosModel);
engfunc( EngFunc_SetSize, g_iPhobosEnt, Float:{ -32.0, -32.0, -40.0}, Float:{ 32.0, 32.0, 96.0 });
engfunc( EngFunc_SetOrigin, g_iPhobosEnt, vOrigin);

set_pev( g_iPhobosEnt, pev_sequence, 2);
entity_set_int(g_iPhobosEnt, EV_INT_gamestate, 1)

entity_set_float(g_iPhobosEnt, EV_FL_animtime, halflife_time());
entity_set_float(g_iPhobosEnt, EV_FL_framerate, 1.0);

entity_set_float(g_iPhobosEnt, EV_FL_gravity, 6.0);

set_pev(g_iPhobosEnt, pev_flags, FL_MONSTER);

start_knock[g_iPhobosEnt] = false

healthbar = create_entity("env_sprite")

set_pev(healthbar, pev_scale, 1.0)
engfunc(EngFunc_SetModel, healthbar, health_spr)

set_pev(g_iPhobosEnt, pev_controller_0, 125);
set_pev(g_iPhobosEnt, pev_controller_1, 125);
set_pev(g_iPhobosEnt, pev_controller_2, 125);
set_pev(g_iPhobosEnt, pev_controller_3, 125);
set_pev(g_iPhobosEnt, pev_takedamage, DAMAGE_NO);
set_pev(g_iPhobosEnt, pev_max_health, fHealth);
set_pev(g_iPhobosEnt, pev_health, fHealth);

set_pev(g_iPhobosEnt, pev_velocity, Float:{ 0.0, 0.0, -50.0 });

entity_set_float(g_iPhobosEnt, EV_FL_nextthink, get_gametime() + 24.0);
set_task(0.1, "Phobos_check", g_iPhobosEnt, _, _, "b")

g_OPhobosState = scene_appear
}

public Phobos_Start()
{
if(!pev_valid(g_iPhobosEnt))
return;

set_pev( g_iPhobosEnt, pev_solid, SOLID_BBOX);
set_pev( g_iPhobosEnt, pev_movetype, MOVETYPE_PUSHSTEP);
set_pev(g_iPhobosEnt, pev_takedamage, DAMAGE_YES);

set_pev(g_iPhobosEnt, pev_sequence, 2);
entity_set_float(g_iPhobosEnt, EV_FL_animtime, halflife_time());
entity_set_float(g_iPhobosEnt, EV_FL_framerate, 1.0);

set_dhudmessage(255, 255, 0, -1.0, 0.0, 1, 6.0, 10000.0)
show_dhudmessage(0, "[ Kill Bonus | 30000$ 20 EXP ]")

g_fPhobosSpeed = Phobos_SPEED

g_OPhobosState = zbs_walk

g_pBossTarget = 0;

entity_set_float(g_iPhobosEnt, EV_FL_nextthink, get_gametime() + 0.1);
dllfunc(DLLFunc_Think, g_iPhobosEnt);


g_game_start = true
}

public Phobos_Think ( Entity )
{
static pTarget

// PreThink
pTarget = 0;

if(pev(Entity, pev_deadflag) == DEAD_DYING)
{
Phobos_Kill(Entity);
return;
}

VECTORS_Init();


switch (g_OPhobosState)
{
case scene_appear:
{
Phobos_Start()
}
case death:
{
return;
}
case zbs_idle1, zbs_walk:
{

//set_pev( Entity, pev_solid, SOLID_BBOX);
set_pev( g_iPhobosEnt, pev_movetype, MOVETYPE_PUSHSTEP);

if(Phobos_SelectAction(Entity))
{
entity_set_float(Entity, EV_FL_nextthink, get_gametime() + 0.1);
return;
}
}
case zbs_atack1:
{
if((g_fLastAttack1) > get_gametime())
{

entity_set_float(Entity, EV_FL_nextthink, get_gametime() + 0.1);
return;
}
else
{
g_OPhobosState = zbs_idle1;
g_pBossTarget = 0;


if(Phobos_SelectAction(Entity))
{
entity_set_float(Entity, EV_FL_nextthink, get_gametime() + 0.1);
return;
}
}
}

case zbs_dush:
{

if(!zbs_dush_end)
{
entity_set_float(Entity, EV_FL_nextthink, get_gametime() + 1.0);
return;
}
else
{

g_OPhobosState = zbs_idle1;
g_pBossTarget = 0;
zbs_dush_end = false

if(Phobos_SelectAction(Entity))
{
entity_set_float(Entity, EV_FL_nextthink, get_gametime() + 0.1);
return;
}
}
}
case zbs_shockwave:
{
if((g_fTimeShockWave) > get_gametime())
{

entity_set_float(Entity, EV_FL_nextthink, get_gametime() + 0.1);
return;
}
else
{
g_OPhobosState = zbs_idle1;
g_pBossTarget = 0;

if(Phobos_SelectAction(Entity))
{
entity_set_float(Entity, EV_FL_nextthink, get_gametime() + 0.1);
return;
}
}
}
}



pTarget = BOSS_FindTarget();

// If not target
if(pTarget == 0)
{
g_OPhobosState = zbs_idle1;

if(pev(Entity, pev_sequence) != 2 || pev(Entity, pev_sequence) != 9)
{
play_anim(Entity, 2);

set_pev(Entity, pev_velocity, Float:{0.0, 0.0, -0.1});
}

entity_set_float(g_iPhobosEnt, EV_FL_nextthink, get_gametime() + 0.1);

return;
}

g_OPhobosState = zbs_walk


// Check to walk anim
static iSequence;
iSequence = pev(Entity, pev_sequence);

if(iSequence != 3)
{
play_anim(Entity, 3);
set_pev(Entity, pev_framerate, 1.4)
}

static Float:vAimVector[3], Float:vVelocity[3];

xs_vec_copy(g_vAimVector[pTarget], vAimVector);

vAimVector[2] = 0.0;

vector_to_angle(vAimVector, vVelocity);

vVelocity[0] = 0.0;
vVelocity[2] = 0.0;

set_pev(Entity, pev_angles, vVelocity);
set_pev(Entity, pev_punchangle, vVelocity);
set_pev(Entity, pev_v_angle, vVelocity);
set_pev(Entity, pev_fixangle, 1);

xs_vec_normalize(vAimVector, vAimVector);
xs_vec_mul_scalar(vAimVector, g_fPhobosSpeed, vVelocity);

set_pev(Entity, pev_velocity, vVelocity);


entity_set_float(g_iPhobosEnt, EV_FL_nextthink, get_gametime() + 0.1);
}

public Phobos_Ham_TraceAttack_Pre(this, idattacker, Float:damage, Float:direction[3], tr_handle, damagebits)
{
static Float:vBlood[3], szClassname[32];

pev(this, pev_classname, szClassname, 31);
if(!equal(szClassname, g_szClassName)) return HAM_IGNORED;

if(0 < idattacker <= g_iMaxPlayers)
{
get_tr2(tr_handle, TR_vecEndPos, vBlood);

UTIL_MakeBlood(vBlood);
}

return HAM_IGNORED;
}

public Phobos_Ham_TakeDamage_Pre(victim, inflictor, attacker, Float:damage, damagetype)
{
static szClassname[32], Float:fMaxHealth, Float:fHealth;

pev(victim, pev_classname, szClassname, 31);
if(!equal(szClassname, g_szClassName)) return HAM_IGNORED;

pev(victim, pev_health, fHealth);
pev(victim, pev_max_health, fMaxHealth);

if(fHealth <= damage)
{
g_OPhobosState = death;
client_cmd(0, "spk bw/bosses/death.wav")

client_cmd(0, "mp3 stop")

set_pev(victim, pev_deadflag, DEAD_DYING);

remove_task (100)

set_pev( g_iPhobosEnt, pev_solid, SOLID_NOT);
set_pev( g_iPhobosEnt, pev_movetype, MOVETYPE_NONE);
set_pev(victim, pev_takedamage, DAMAGE_NO);

play_anim(victim, 1);

new szName[ 32 ]
get_user_name( attacker, szName, 31 )
set_hudmessage( 0, 255, 0, 0.05, 0.45, 0, 0.0, 5.0, 1.0, 1.0,3 )
show_hudmessage( 0, "%s Killed Alien Boss !!!^nMoney Bonus 30000$ +20 EXP", szName )

//zp_cs_set_user_money(attacker, zp_cs_get_user_money(attacker) + 30000);

//zp_set_user_exp(attacker, zp_get_user_exp(attacker) + 20)

entity_set_float(g_iPhobosEnt, EV_FL_nextthink, get_gametime() + 15.1);

// zp_set_umm_start()

return HAM_SUPERCEDE;
}

return HAM_IGNORED;
}

public Phobos_Ham_TakeDamage_Post(victim, inflictor, attacker, Float:damage, damagetype)
{
static szClassname[32], Float:fMaxHealth, Float:fHealth;

pev(victim, pev_classname, szClassname, 31);
if(!equal(szClassname, g_szClassName)) return HAM_IGNORED;

pev(g_iPhobosEnt, pev_health, fHealth);
pev(g_iPhobosEnt, pev_max_health, fMaxHealth);

g_fHaveDamage[attacker] += damage;

if(g_fHaveDamage[attacker] >= 1000.0)
{
g_fHaveDamage[attacker] -= 1000.0;

//zp_cs_set_user_money(attacker, zp_cs_get_user_money(attacker) + 500);
}

return HAM_IGNORED;
}

public client_putinserver(id) if(g_game_start) set_pdata_int(id, 365, 1)

public Phobos_SelectAction(ent)
{
static Float:vAimVector[3], Float:vAngle[3];
static id, Float:fLen;
static Float:gametime;
static iNumInAttackDush, iNumInShockWave

gametime = get_gametime();

iNumInAttackDush = iNumInShockWave = 0;

for(id = 1; id <= g_iMaxPlayers; id++)
{
if(!is_user_alive(id)) continue;

entity_get_vector(id, EV_VEC_origin, g_vTarOrigin[id]);
xs_vec_sub(g_vTarOrigin[id], g_vPhobosOrigin, vAimVector);
fLen = xs_vec_len(vAimVector);

// Selecting skill


if(fLen <= 80.0)
{
g_OPhobosState = zbs_atack1;

g_fLastAttack1 = gametime + ZBS_ATTACK1_ANIMTIME

set_pev( g_iPhobosEnt, pev_movetype, MOVETYPE_NONE);

set_pev(ent, pev_framerate, 1.0)

play_anim(ent, 6);

// Set angles
vAimVector[2] = 0.0;
vector_to_angle(vAimVector, vAngle);
vAngle[0] = 0.0;
vAngle[2] = 0.0;
set_angles(ent, vAngle);

set_task(0.5, "Phobos_Damage");
client_cmd(0, "spk bw/bosses/swing.wav")

return 1;
}

if(fLen <= 800.0)
{
iNumInAttackDush++;
}
if(fLen <= 800.0)
{
iNumInShockWave++;
}
}

if(iNumInAttackDush > 0 && g_fResetDush < gametime && random_num(0, 30) == 0)
{
g_OPhobosState = zbs_dush;
g_fResetDush = gametime + ZBS_DUSH

VECTORS_Init();

set_pev( g_iPhobosEnt, pev_movetype, MOVETYPE_NONE);

set_pev(ent, pev_framerate, 1.0)

VECTORS_Init();

// Set angles
xs_vec_copy(g_vAimVector[BOSS_FindTarget()], vAimVector);
vAimVector[2] = 0.0;
vector_to_angle(vAimVector, vAngle);
vAngle[0] = 0.0;
vAngle[2] = 0.0;
set_angles(ent, vAngle);

play_anim(ent, 7);

zbs_dush_skill = true

set_task (1.05 , "zbs_dush_start" )
client_cmd(0, "spk bw/bosses/mahadash.wav")

return 1;
}

if(iNumInShockWave > 0 && g_fResetShockWave < gametime && random_num(0, 30) == 0)
{
g_OPhobosState = zbs_shockwave;
g_fResetShockWave = gametime + ZBS_SHOCKWAVE

VECTORS_Init();

set_pev( g_iPhobosEnt, pev_movetype, MOVETYPE_NONE);

set_pev(ent, pev_framerate, 1.0)

VECTORS_Init();

play_anim(ent, 5);
g_fTimeShockWave = gametime + ZBS_SHOCKWAVE_ANIMTIME

client_cmd(0, "spk bw/bosses/vioce.wav")

set_task(2.0 , "zbs_shockwave_start" )
set_task(2.0, "do_shokwave_effect", ent)
set_task(2.0, "damage", ent)

return 1;
}

return 0;
}

public zbs_dush_start( )
{
static Float:vVelocity[3], Float:vAimVector[3];

VECTORS_Init();

// Set angles
xs_vec_copy(g_vAimVector[BOSS_FindTarget()], vAimVector);
vAimVector[2] = 0.0;
vector_to_angle(vAimVector, vVelocity);
vVelocity[0] = 0.0;
vVelocity[2] = 0.0;
set_angles(g_iPhobosEnt, vVelocity);

xs_vec_copy(g_vPhobosOrigin, vVelocity);
vVelocity[2] += 5;
engfunc( EngFunc_SetOrigin, g_iPhobosEnt, vVelocity);
set_pev(g_iPhobosEnt, pev_movetype, MOVETYPE_FLY);

velocity_by_aim(g_iPhobosEnt, 2500, vVelocity);


set_pev(g_iPhobosEnt, pev_velocity, vVelocity);
}

public Fix_Eng_Touch_Player(Entity, iPlayer)
{

if ( zbs_dush_skill && iPlayer)
{
entity_set_float(g_iPhobosEnt, EV_FL_nextthink, get_gametime() + 0.76);
set_pev( g_iPhobosEnt, pev_movetype, MOVETYPE_NONE);
Phobos_Damage2()
play_anim(Entity, 2);
zbs_dush_skill = false
zbs_dush_end = true
}
if ( zbs_dush_skill && !iPlayer)
{
entity_set_float(g_iPhobosEnt, EV_FL_nextthink, get_gametime() + 0.76);
set_pev( g_iPhobosEnt, pev_movetype, MOVETYPE_NONE);
Phobos_Damage2()
play_anim(Entity, 2);
zbs_dush_skill = false
zbs_dush_end = true
}
}


public Phobos_Damage()
{
if(!pev_valid(g_iPhobosEnt))
return;

static Float:vAimVector[3], Float:vRevenanAngle[3], Float:fDegrees, id;


VECTORS_Init();

velocity_by_aim(g_iPhobosEnt, 10, vRevenanAngle);

// Damage of justiceSwing
for(id = 1; id <= g_iMaxPlayers; id++)
{
if(!is_user_alive(id)) continue;

fDegrees = vec_2Ddegrees(g_vAimVector[id], vRevenanAngle);

if((g_fLenToAim[id] <= 220.0) && ( fDegrees < 91.0 ))
{
Boss_TakeDamage(id, g_iPhobosEnt, 50.0);

client_cmd(id, "drop")

velocity_by_aim(g_iPhobosEnt, 300, vAimVector);

vAimVector[2] = 200.0;

set_pev(id, pev_velocity, vAimVector);
}
}
}

public Phobos_Damage2()
{
if(!pev_valid(g_iPhobosEnt))
return;

static Float:vAimVector[3], Float:vRevenanAngle[3], Float:fDegrees, id;


VECTORS_Init();

velocity_by_aim(g_iPhobosEnt, 10, vRevenanAngle);

// Damage of justiceSwing
for(id = 1; id <= g_iMaxPlayers; id++)
{
if(!is_user_alive(id)) continue;

fDegrees = vec_2Ddegrees(g_vAimVector[id], vRevenanAngle);

if((g_fLenToAim[id] <= 220.0) && ( fDegrees < 91.0 ))
{
Boss_TakeDamage(id, g_iPhobosEnt, 100.0);

velocity_by_aim(g_iPhobosEnt, 300, vAimVector);

vAimVector[2] = 200.0;

set_pev(id, pev_velocity, vAimVector);
}
}
}

stock UTIL_MakeBlood(const Float:vTraceEnd[3])
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_BLOODSPRITE);
engfunc(EngFunc_WriteCoord, vTraceEnd[0]);
engfunc(EngFunc_WriteCoord, vTraceEnd[1]);
engfunc(EngFunc_WriteCoord, vTraceEnd[2]);
write_short(m_iBlood[0]);
write_short(m_iBlood[1]);
write_byte(134);
write_byte( random_num( 5,6 ) );
message_end();
}

Boss_TakeDamage(id, attaker, Float:fDamage)
{
UTIL_ScreenShake
(
.id = id,
.amplitude = (7<<14),
.duration = ( (1<<12) * max(floatround(fDamage / 40.0, floatround_ceil), 10) ),
.frequency = ( (2<<12) * max(floatround(fDamage / 10.0, floatround_ceil), 20) )
);

ExecuteHamB(Ham_TakeDamage, id, 0, attaker, fDamage, DMG_SLASH);
}
stock UTIL_ScreenShake(id, amplitude, duration, frequency)
{
message_begin(MSG_ONE_UNRELIABLE, g_iMsgScreenShake, _, id);
write_short(amplitude); // Amplitude
write_short(duration); // Duration
write_short(frequency); // Frequency
message_end();
}
stock ScreenShake(id, duration, frequency)
{
if(!is_user_alive(id)) return

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenShake"), _, id);
write_short(1<<14)
write_short(duration)
write_short(frequency)
message_end();
}

stock Float:vec_2Ddegrees(Float:vFirst[3], Float:vSecond[3])
{
static Float:fAngle;
fAngle = ( ( vFirst[0]*vSecond[0] + vFirst[1]*vSecond[1] ) / ( floatsqroot(vFirst[0]*vFirst[0] + vFirst[1]*vFirst[1]) * floatsqroot(vSecond[0]*vSecond[0] + vSecond[1]*vSecond[1]) ) );
return floatacos(fAngle, degrees);
}

stock play_anim(Entity, sequence)
{
entity_set_int(Entity, EV_INT_sequence, sequence);
entity_set_float(Entity, EV_FL_animtime, halflife_time());
}

stock set_angles(ent, Float:vAngles[3])
{
set_pev(ent, pev_angles, vAngles);
set_pev(ent, pev_punchangle, vAngles);
set_pev(ent, pev_v_angle, vAngles);
set_pev(ent, pev_fixangle, 1);
}

VECTORS_Init()
{
if( !pev_valid( g_iPhobosEnt ) ) return;

static id;
entity_get_vector(g_iPhobosEnt, EV_VEC_origin, g_vPhobosOrigin);

for(id = 1; id <= g_iMaxPlayers; id++)
{
if(!is_user_alive(id)) continue;

entity_get_vector(id, EV_VEC_origin, g_vTarOrigin[id]);
xs_vec_sub(g_vTarOrigin[id], g_vPhobosOrigin, g_vAimVector[id]);
g_fLenToAim[id] = xs_vec_len(g_vAimVector[id]);
}
}

BOSS_FindTarget()
{
static iPlayers[32], iNum, id;

for(id = 1, iNum = 0; id <= g_iMaxPlayers; id++)
if(is_user_alive(id))
iPlayers[iNum++] = id;

if(iNum == 0)
{
g_pBossTarget = 0;
return 0;
}

if(g_pBossTarget && is_user_alive(g_pBossTarget))
{
return g_pBossTarget;
}

return (g_pBossTarget = iPlayers[random_num(0, iNum-1)]);

}

Phobos_Kill (Entity )
{
set_rendering( Entity, kRenderFxNone, 0, 0, 0, kRenderTransTexture, 0);
set_pev( Entity, pev_effects, EF_NODRAW);
set_pev( Entity, pev_deadflag, DEAD_DEAD);

if(pev_valid (Entity))
engfunc(EngFunc_RemoveEntity, Entity)
engfunc(EngFunc_RemoveEntity, healthbar)

g_OPhobosState = death;
}

public zbs_shockwave_start(args[], ent)
{
new Float:origin[3]

set_task(1.0, "reset_knock", ent + 123456)

client_cmd(0, "spk bw/bosses/shockwave.wav")

static Float:flOrigin[3] , Float:flDistance , Float:flSpeed
for(new iVictim=1;iVictim <= 32;iVictim++)
{
//new health = get_user_health(iVictim)

if(is_user_connected(iVictim) && is_user_alive(iVictim))
{
pev(iVictim, pev_origin, flOrigin)
flDistance = get_distance_f(origin, flOrigin)

if(flDistance <= 700)
{
flSpeed = 1600.0

static Float:flNewSpeed
flNewSpeed = flSpeed * ( 1.0 - ( flDistance / 700.0 ) )

static Float:flVelocity [ 3 ]
get_speed_vector (origin, flOrigin, flNewSpeed, flVelocity)

set_pev ( iVictim, pev_velocity,flVelocity )
}
}
}
}

public reset_knock(ent)
{
ent = ent - 123456
}

stock get_speed_vector(const Float:origin1[3], const Float:origin2[3], Float:speed, Float:new_velocity[3])
{
new_velocity[0] = origin2[0] - origin1[0]
new_velocity[1] = origin2[1] - origin1[1]
new_velocity[2] = origin2[2] - origin1[2]
new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
new_velocity[0] *= num
new_velocity[1] *= num
new_velocity[2] *= num

return 1;
}

public do_shokwave_effect(ent)
{
new Float: iOrigin[ 3 ]
entity_get_vector( ent, EV_VEC_origin, iOrigin );

engfunc( EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, iOrigin, 0 );
write_byte( TE_BEAMCYLINDER );
engfunc( EngFunc_WriteCoord, iOrigin[ 0 ] );
engfunc( EngFunc_WriteCoord, iOrigin[ 1 ] );
engfunc( EngFunc_WriteCoord, iOrigin[ 2 ] );
engfunc( EngFunc_WriteCoord, iOrigin[ 0 ] );
engfunc( EngFunc_WriteCoord, iOrigin[ 1 ] );
engfunc( EngFunc_WriteCoord, iOrigin[ 2 ] + 700);
write_short( SprSW );
write_byte(0) // startframe
write_byte(0) // framerate
write_byte(4) // life
write_byte(65) // width
write_byte(0) // noise
write_byte(112) // red
write_byte(112) // green
write_byte(212) // blue
write_byte(255) // brightness
write_byte(0) // speed
message_end()
}

screen_effects( id )
{
message_begin( MSG_ONE_UNRELIABLE, g_msgScreenFade, _, id );
write_short( UNIT_SECOND * 1 );
write_short( UNIT_SECOND * 1 );
write_short( FFADE_IN );
write_byte( 200 );
write_byte( 0 );
write_byte( 0 );
write_byte( 125 );
message_end( );

message_begin( MSG_ONE_UNRELIABLE, g_msgScreenShake, _, id );
write_short( UNIT_SECOND * 5 );
write_short( UNIT_SECOND * 1 );
write_short( UNIT_SECOND * 5 );
message_end( );
}

public damage(ent)
{
for(new i = 1; i < get_maxplayers(); i++)
{
if(is_user_alive(i) && entity_range(ent, i) <= 300.0)
{
screen_effects(i)

static Float:Damage
Damage = random_float(100.0, 200.0)

ExecuteHam(Ham_TakeDamage, i, 0, i, Damage, DMG_SONIC)
}
}
}
public Phobos_check(Entity)
{
if(!is_valid_ent(Entity))
return PLUGIN_HANDLED

if(pev_valid(healthbar))
{
static Float:Origin[3], Float:alien_health
pev(Entity, pev_origin, Origin)

Origin[2] += 250.0
engfunc(EngFunc_SetOrigin, healthbar, Origin)

pev(Entity, pev_health, alien_health)

if(Phobos_HEALTH < (alien_health))
{
set_pev(healthbar, pev_frame, 99.0)
}
else
{
set_pev(healthbar, pev_frame, 0.0 + ((((alien_health) - 1 ) * 100) / Phobos_HEALTH))
}
}

return PLUGIN_CONTINUE
}

public round_end()
{
//zp_set_umm_start()
}

public plugin_natives()
{
register_native("alien_start", "alien_start", 1)
}

public alien_start()
{
return g_game_start
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя dialyabev
сообщение 30.12.2015, 17:47
Сообщение #2


Стаж: 9 лет

Сообщений: 243
Благодарностей: 120
Полезность: 596

лови аттаку, проверяет если гет_юзер_теам аттакера == гет_юзер_теам жертвы, посылай ретурн и все.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Glaster
сообщение 15.11.2021, 5:28
Сообщение #3


Стаж: 3 года 4 месяца
Город: Иркутск

Сообщений: 7
Благодарностей: 3
Полезность: 0

soneekk,

читал где-то об ещё одном варианте: если спавн CT-шников и T-шников имеют одинаковые координаты, то атаковать друг друга не выйдет
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: