#include <amxmodx>
#include <zombieplague>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
new const PLUGIN[] = "[CSO] Class String Finger"
new const VERSION[] = "1.0"
new const AUTHOR[] = "ShuriK"
new const zclass1_name[] = { "String Finger[VIP]" }
new const zclass1_info[] = { "Q - Gravity , G - Long Attack " }
new const zclass1_model[] = { "resident_zombi_host" }
new const zclass1_clawmodel[] = { "v_knife_zombieresident.mdl" }
const zclass1_health = 2500
const zclass1_speed = 240
const Float:zclass1_gravity = 1.0 //Гравитация в обычном режиме
const Float:zclass1_knockback = 1.0 //Отдача
const Float:gravity_time = 8.0 //Trwanie grav;
const Float:realod_gravity = 25.0 //Czas odpliczania;
const Float:realod_gmg = 25.0 //Отсчет до вытягивание рук;
const Float:finger_gravity = 0.4 //Гравитая при способности;
const dmg_long = 200 //Дамаг вытягивания рук;
const Distance = 400 //Дистанция для вытягивание рук;
const MAX_CLIENTS = 32 ;
const FINGER_MAX_STRING = 128;
enum _:FINGER_ANIMATIONS
{
LongDamageAnim = 8,
GravAnim = 9,
EndGrav = 10,
skill1 = 91,
skill2 = 98
};
enum _:FINGER_SOUNDS
{
SKILL_2 = 0,
SKILL_1,
OVER_SKILL_GRAV,
STAB,
STAB_MISS,
DEATH,
INFECT,
PAIN1,
PAIN2
};
new g_stinger_sound[FINGER_SOUNDS][FINGER_MAX_STRING] =
{
"zombi/resident_skill2.wav",
"zombi/resident_skill1.wav",
"zombi/resident_tw.wav" ,
"zombi/resident_stab.wav" ,
"zombi/resident_stab_miss.wav" ,
"zombi/resident_death.wav" ,
"zombi/resident_infect.wav" ,
"zombi/resident_hurt1.wav" ,
"zombi/resident_hurt1.wav"
};
new g_string ,
g_msgScreenFade,
g_damage_use[ MAX_CLIENTS + 1 ] ,
g_gravity_use[ MAX_CLIENTS + 1] ,
g_coldown[ MAX_CLIENTS + 1 ] ,
g_clodown_grav[MAX_CLIENTS + 1] ,
g_coldown_dmg_time[MAX_CLIENTS + 1] ,
g_coldown_grav_time[MAX_CLIENTS + 1] ;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR) ;
register_forward(FM_CmdStart , "fm_cmdstart" ) ;
register_clcmd("drop" , "Abil_LongDmg" );
RegisterHam(Ham_TakeDamage, "player", "String_TakeDamage");
register_event("DeathMsg", "Death", "a");
g_msgScreenFade = get_user_msgid("ScreenFade");
register_dictionary( "zp_string.txt" ) ;
}
public plugin_precache()
{
g_string = zp_register_zombie_class(zclass1_name, zclass1_info, zclass1_model, zclass1_clawmodel, zclass1_health, zclass1_speed, zclass1_gravity, zclass1_knockback) ;
static i ;
for(i = 0; i < sizeof g_stinger_sound; i++)
{
precache_sound(g_stinger_sound[i]);
}
}
public Death()
{
new player = read_data(2)
if(zp_get_user_zombie(player) && zp_get_user_zombie_class(player) == g_string && !zp_get_user_nemesis(player))
{
engfunc( EngFunc_EmitSound, player, CHAN_ITEM, g_stinger_sound[DEATH], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
public zp_user_infected_post( player )
{
if(zp_get_user_zombie_class(player) == g_string && !zp_get_user_nemesis(player))
{
g_damage_use[player] = false
g_gravity_use[player] = false
g_coldown[player] = false
g_clodown_grav[player] = false
engfunc( EngFunc_EmitSound, player, CHAN_ITEM, g_stinger_sound[INFECT], 1.0, ATTN_NORM, 0, PITCH_NORM)
g_coldown_dmg_time[player] = floatround(realod_gmg)
g_coldown_grav_time[player] = floatround(realod_gravity)
remove_task(player)
cahtcol(player , "%L" , LANG_PLAYER , "FINGER")
{
return PLUGIN_HANDLED
}
}
return PLUGIN_CONTINUE
}
public String_TakeDamage(player, iVictim, iInflictor, iAttacker, Float:flDamage, bitsDamage)
{
if (zp_get_user_zombie_class(player) == g_string && zp_get_user_zombie(player) && !zp_get_user_nemesis(player))
{
switch(random_num(1,2))
{
case 1: emit_sound(player, CHAN_WEAPON, g_stinger_sound[PAIN1], 1.0, ATTN_NORM, 0, PITCH_LOW)
case 2: emit_sound(player, CHAN_WEAPON, g_stinger_sound[PAIN2], 1.0, ATTN_NORM, 0, PITCH_LOW)
}
}
}
public client_connect(player)
{
g_damage_use[player] = false
g_gravity_use[player] = false
}
public client_disconnect(player)
{
g_damage_use[player] = false
g_gravity_use[player] = false
}
public fm_cmdstart(player , UC_Handle , seed)
{
if (!is_user_alive(player))
{
return FMRES_IGNORED
}
if(zp_get_user_zombie_class(player) == g_string && zp_get_user_zombie(player) && !zp_get_user_nemesis(player))
{
if(g_clodown_grav[player] == 0)
{
new gButton, gOldButton
gButton = get_uc(UC_Handle, UC_Buttons)
gOldButton = pev(player, pev_oldbuttons)
if((gButton & IN_RELOAD) && !(gOldButton & IN_RELOAD))
{
UTIL_Gravity(player)
}
}
}
return FMRES_IGNORED
}
public Abil_LongDmg(player)
{
if (!is_user_alive(player))
{
return FMRES_IGNORED
}
if(zp_get_user_zombie_class(player) == g_string && zp_get_user_zombie(player) && !zp_get_user_nemesis(player))
{
if(g_coldown[player] == 0)
{
UTIL_LongDamage(player)
}
}
return FMRES_IGNORED
}
stock UTIL_Gravity(player)
{
if (!is_user_alive(player))
{
return FMRES_IGNORED
}
if(zp_get_user_zombie_class(player) == g_string && zp_get_user_zombie(player) && !zp_get_user_nemesis(player))
{
g_gravity_use[player] = true
UTIL_PlayAnim(player , GravAnim)
g_clodown_grav[player] = true
UTIL_ScreenFade(player , 255 , 255 , 255)
entity_set_int( player , EV_INT_sequence, skill2)
set_pdata_float(player , 83, 1.0 , 5)
set_pev( player, pev_gravity, finger_gravity )
set_task(gravity_time , "remove_abil" , player )
g_coldown_grav_time[player] = floatround(realod_gravity)
set_task(1.0, "ShowHUD_grav", player , _, _, "a",g_coldown_grav_time[player])
set_task(realod_gravity , "reset_grav" , player)
}
return FMRES_IGNORED
}
public ShowHUD_grav(player)
{
if(is_user_alive(player) && zp_get_user_zombie(player))
{
g_coldown_grav_time[player] = g_coldown_grav_time[player] - 1
set_hudmessage(200, 100, 0, -1.0, 0.87, 0, 1.0, 1.1, 0.0, 0.0 , -1)
show_hudmessage(player, "%L", LANG_PLAYER, "GRAV_USE" , g_coldown_grav_time[player])
}
else
{
remove_task(player)
}
}
public remove_abil(player)
{
if (!is_user_alive(player))
{
return FMRES_IGNORED
}
if(zp_get_user_zombie_class(player) == g_string && zp_get_user_zombie(player) && !zp_get_user_nemesis(player))
{
g_gravity_use[player] = false
set_pev( player, pev_gravity, zclass1_gravity )
UTIL_PlayAnim(player , EndGrav)
UTIL_ScreenFade(player , 255 , 255 , 255)
cahtcol(player , "%L" , LANG_PLAYER , "FINGER_GRAV_OVER" )
}
return FMRES_IGNORED
}
public reset_grav(player)
{
if (!is_user_alive(player))
{
return FMRES_IGNORED
}
if(zp_get_user_zombie_class(player) == g_string && zp_get_user_zombie(player) && !zp_get_user_nemesis(player))
{
g_clodown_grav[player] = 0
cahtcol(player , "%L" , LANG_PLAYER , "FINGER_GRAV_ALLREADY" )
}
return FMRES_IGNORED
}
stock UTIL_LongDamage(player)
{
if (!is_user_alive(player))
{
return FMRES_IGNORED
}
if(zp_get_user_zombie_class(player) == g_string && zp_get_user_zombie(player) && !zp_get_user_nemesis(player))
{
g_damage_use[player] = true
UTIL_PlayAnim( player , LongDamageAnim )
entity_set_int( player , EV_INT_sequence, skill1)
g_coldown[player] = 1
UTIL_ScreenFade(player , 0 , 255 , 0)
set_pdata_float(player , 83, 1.0 , 5)
Skill(player)
set_task(realod_gmg , "reset_abil" , player)
g_coldown_dmg_time[player] = floatround(realod_gmg)
set_task(1.0, "ShowHUD", player , _, _, "a",g_coldown_dmg_time[player])
}
return FMRES_IGNORED
}
public ShowHUD(player)
{
if(is_user_alive(player) && zp_get_user_zombie(player))
{
g_coldown_dmg_time[player] = g_coldown_dmg_time[player] - 1
set_hudmessage(200, 100, 0, 0.80, 0.87, 0, 1.0, 1.1, 0.0, 0.0 , -1)
show_hudmessage(player, "%L", LANG_PLAYER, "DMG_USE" , g_coldown_dmg_time[player])
}
else
{
remove_task(player)
}
}
stock Skill(player)
{
if (!is_user_alive(player))
{
return FMRES_IGNORED;
}
static gBody , gTarget
get_user_aiming(player , gTarget , gBody , Distance)
if(gTarget)
{
if(is_user_alive(gTarget))
{
switch(gBody)
{
case HIT_STOMACH: dmg_long * 2.0
case HIT_HEAD: dmg_long * 3.0
case HIT_LEFTARM: dmg_long * 1.0
case HIT_RIGHTARM: dmg_long * 1.0
case HIT_LEFTLEG: dmg_long * 0.5
case HIT_RIGHTLEG: dmg_long * 0.5
}
ExecuteHamB(Ham_TakeDamage, gTarget, 0, player, dmg_long, DMG_SLASH)
}
}
return FMRES_IGNORED
}
public reset_abil(player)
{
if (!is_user_alive(player))
{
return FMRES_IGNORED
}
if(zp_get_user_zombie_class(player) == g_string && zp_get_user_zombie(player) && !zp_get_user_nemesis(player))
{
g_coldown[player] = 0
cahtcol(player , "%L" , LANG_PLAYER , "FINGER_DMG_ALLREADY" )
}
return FMRES_IGNORED
}
stock UTIL_ScreenFade( player, r = 0, g = 0, b = 0)
{
message_begin( MSG_ONE_UNRELIABLE, g_msgScreenFade, .player = player );
write_short( 1 << 12 );
write_short( 1 << 12 );
write_short( 0x0000 );
write_byte( r );
write_byte( g );
write_byte( b );
write_byte( 80 );
message_end( );
}
stock UTIL_PlayAnim(player , seq)
{
set_pev(player, pev_weaponanim, seq)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = player)
write_byte(seq)
write_byte(pev(player, pev_body))
message_end()
}
stock cahtcol(const player, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!y", "^1")
replace_all(msg, 190, "!team", "^3")
if (player) players[0] = player; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/
mam problem nie wiem jak dodac vip'a w tej klasie na admin_level_H
moze ktos to zrobic& strescic? dam ++


Dodatki SourceMod













