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

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

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

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

Сделать зомби класс "Жало" под 30 лвл

Статус пользователя TheArtemMaps
сообщение 9.3.2021, 15:54
Сообщение #1
Стаж: 6 лет 10 месяцев
Город: Киев

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

Всем привет! Сможет кто то сделать этот класс зомби под 30 уровень? Спасибо за помощь!
Исходник: Код:
#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[] = { "Ядовитое жало" }
new const zclass1_info[] = { "2 способности" }
new const zclass1_model[] = { "resident_zombi_host" }
new const zclass1_clawmodel[] = { "v_knife_zombieresident.mdl" }
const zclass1_health = 1700
const zclass1_speed = 240

const Float:zclass1_gravity = 1.0 //Гравитация в обычном режиме
const Float:zclass1_knockback = 1.0 //Отдача
const Float:gravity_time = 8.0 //Время гравитации;
const Float:realod_gravity = 15.0 //Отсчет до гравитации;
const Float:realod_gmg = 15.0 //Отсчет до вытягивание рук;
const Float:finger_gravity = 0.2 //Гравитая при способности;

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 }
*/



Пример уровня: (Взято с зомби класса ведьмы)
Код:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#include <xs>
#include <zp_level_system>

#define PLUGIN "DJB Zombie Class Banchee"
#define VERSION "1.0"
#define AUTHOR "Csoldjb"

new const zclass_name[] = "Witch"
new const zclass_info[] = "Come to HER"
new const zclass_model[] = "witch_zombi_origin"
new const zclass_clawmodel[] = "v_knife_witch_zombi.mdl"
new const zclass_hemodel2[] = { "models/zombie_plague/v_zombibomb_witch.mdl" }
new KNOCKBOMB_WITCH[] = "models/zombie_plague/v_zombibomb_witch.mdl"
const zclass_health = 4200
const zclass_speed = 300
const Float:zclass_gravity = 1.5
const Float:zclass_knockback = 1.5

new const SOUND_FIRE[] = "zombie_plague/zombi_banshee_pulling_fire.wav"
new const SOUND_BAT_HIT[] = "zombie_plague/zombi_banshee_laugh.wav"
new const SOUND_BAT_MISS[] = "zombie_plague/zombi_banshee_pulling_fail.wav"
new const MODEL_BAT[] = "models/zombie_plague/bat_witch.mdl"
new const BAT_CLASSNAME[] = "banchee_bat"
new spr_skull

const Float:banchee_skull_bat_speed = 700.0
const Float:banchee_skull_bat_flytime = 5.0
const Float:banchee_skull_bat_catch_time = 3.0
const Float:banchee_skull_bat_catch_speed = 325.0
const Float:bat_timewait = 15.0

new g_stop[33]
new g_bat_time[33]
new g_bat_stat[33]
new g_bat_enemy[33]
new Float:g_temp_speed[33]

new idclass_banchee
new g_maxplayers
new g_roundend
new g_msgSayText

enum (+= 100)
{
TASK_BOT_USE_SKILL = 2367,
TASK_REMOVE_STAT
}

#define ID_BOT_USE_SKILL (taskid - TASK_BOT_USE_SKILL)
#define ID_TASK_REMOVE_STAT (taskid - TASK_REMOVE_STAT)

public plugin_precache()
{
precache_sound(SOUND_FIRE)
precache_sound(SOUND_BAT_HIT)
precache_sound(SOUND_BAT_MISS)
engfunc(EngFunc_PrecacheModel,zclass_hemodel2)
precache_model(KNOCKBOMB_WITCH)
precache_model(MODEL_BAT)

spr_skull = precache_model("sprites/ef_bat.spr")

idclass_banchee = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
}

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_event("HLTV", "EventHLTV", "a", "1=0", "2=0")
register_event("DeathMsg", "EventDeath", "a")
register_logevent("logevent_round_end", 2, "1=Round_End")
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1")

register_clcmd("drop", "cmd_bat")

register_forward(FM_PlayerPreThink,"fw_PlayerPreThink")

RegisterHam(Ham_Touch,"info_target","EntityTouchPost",1)
RegisterHam(Ham_Think,"info_target","EntityThink")

g_maxplayers = get_maxplayers()
g_msgSayText = get_user_msgid("SayText")
}

public Event_CurWeapon(id) if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == idclass_banchee && !zp_get_user_nemesis(id) && get_user_weapon(id) == CSW_HEGRENADE) set_pev(id, pev_viewmodel2, zclass_hemodel2)

public Event_CurrentWeapon(id)
{
new weaponID = read_data(2)

if(weaponID == CSW_SMOKEGRENADE)
{
if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == idclass_banchee && !zp_get_user_nemesis(id))
{
entity_set_string(id, EV_SZ_viewmodel, KNOCKBOMB_WITCH)
}
}

if (weaponID == CSW_FLASHBANG) {
if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == idclass_banchee && !zp_get_user_nemesis(id))
{
entity_set_string(id, EV_SZ_viewmodel, KNOCKBOMB_WITCH)
}
}
}

public client_putinserver(id)
{
reset_value_player(id)
}

public client_disconnected(id)
{
reset_value_player(id)
}

public EventHLTV()
{
g_roundend = 0

for(new id = 1; id <= g_maxplayers; id++)
{
if (!is_user_connected(id)) continue;

reset_value_player(id)
}
}

public logevent_round_end()
{
g_roundend = 1
}

public EventDeath()
{
new id = read_data(2)

reset_value_player(id)
}

public zp_user_infected_post(id)
{
reset_value_player(id)

if(zp_get_user_nemesis(id)) return;

if(zp_get_user_zombie_class(id) == idclass_banchee)
{
if(is_user_bot(id))
{
set_task(random_float(5.0,15.0), "bot_use_skill", id+TASK_BOT_USE_SKILL)
return
}

zp_colored_print(id, "^x04[ZP]^x01 Ваша Способность ^x04 Spawn Bat^x01 Будет Готова Через^x04 %.1f ^x01Секунд.", bat_timewait)
}
}

public zp_user_infected_pre(id)
{
if(!(zp_level(id) > 9))
{
if(zp_get_user_next_class(id) == idclass_banchee)
{
zp_set_user_zombie_class(id, 0)
client_printcolor(id, "!g[ZP] !yДанный класс !tBanchee !yдоступен с !g10 уровня!")
}
}
}

public zp_user_humanized_post(id)
{
reset_value_player(id)
}

public cmd_bat(id)
{
if(g_roundend) return PLUGIN_CONTINUE

if(!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_nemesis(id)) return PLUGIN_CONTINUE

if(zp_get_user_zombie_class(id) == idclass_banchee && !g_bat_time[id])
{
g_bat_time[id] = 1

set_task(bat_timewait,"clear_stat",id+TASK_REMOVE_STAT)

new ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))

if(!pev_valid(ent)) return PLUGIN_HANDLED

new Float:vecAngle[3],Float:vecOrigin[3],Float:vecVelocity[3],Float:vecForward[3]
fm_get_user_startpos(id,5.0,2.0,-1.0,vecOrigin)
pev(id,pev_angles,vecAngle)

engfunc(EngFunc_MakeVectors,vecAngle)
global_get(glb_v_forward,vecForward)

velocity_by_aim(id,floatround(banchee_skull_bat_speed),vecVelocity)

set_pev(ent,pev_origin,vecOrigin)
set_pev(ent,pev_angles,vecAngle)
set_pev(ent,pev_classname,BAT_CLASSNAME)
set_pev(ent,pev_movetype,MOVETYPE_FLY)
set_pev(ent,pev_solid,SOLID_BBOX)
engfunc(EngFunc_SetSize,ent,{-20.0,-15.0,-8.0},{20.0,15.0,8.0})

engfunc(EngFunc_SetModel,ent,MODEL_BAT)
set_pev(ent,pev_animtime,get_gametime())
set_pev(ent,pev_framerate,1.0)
set_pev(ent,pev_owner,id)
set_pev(ent,pev_velocity,vecVelocity)
set_pev(ent,pev_nextthink,get_gametime()+banchee_skull_bat_flytime)
emit_sound(ent, CHAN_WEAPON, SOUND_FIRE, 1.0, ATTN_NORM, 0, PITCH_NORM)

g_stop[id] = ent

PlayWeaponAnimation(id, 2)
pev(id, pev_maxspeed, g_temp_speed[id])
set_pev(id,pev_maxspeed,0.1)

return PLUGIN_HANDLED
}

return PLUGIN_CONTINUE
}

public fw_PlayerPreThink(id)
{
if(!is_user_alive(id)) return FMRES_IGNORED

if(g_bat_stat[id])
{
new owner = g_bat_enemy[id], Float:ownerorigin[3]
pev(owner,pev_origin,ownerorigin)
static Float:vec[3]
aim_at_origin(id,ownerorigin,vec)
engfunc(EngFunc_MakeVectors, vec)
global_get(glb_v_forward, vec)
vec[0] *= banchee_skull_bat_catch_speed
vec[1] *= banchee_skull_bat_catch_speed
vec[2] = 0.0
set_pev(id,pev_velocity,vec)
}

return FMRES_IGNORED
}

public EntityThink(ent)
{
if(!pev_valid(ent)) return HAM_IGNORED

new classname[32]
pev(ent,pev_classname,classname,31)

if(equal(classname,BAT_CLASSNAME))
{
static Float:origin[3];
pev(ent,pev_origin,origin);

message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_EXPLOSION); // TE_EXPLOSION
write_coord(floatround(origin[0])); // origin x
write_coord(floatround(origin[1])); // origin y
write_coord(floatround(origin[2])); // origin z
write_short(spr_skull); // sprites
write_byte(40); // scale in 0.1's
write_byte(30); // framerate
write_byte(14); // flags
message_end(); // message end

emit_sound(ent, CHAN_WEAPON, SOUND_BAT_MISS, 1.0, ATTN_NORM, 0, PITCH_NORM)

new owner = pev(ent, pev_owner)
g_stop[owner] = 0
set_pev(owner,pev_maxspeed,g_temp_speed[owner])

engfunc(EngFunc_RemoveEntity,ent)
}

return HAM_IGNORED
}

public EntityTouchPost(ent,ptd)
{
if(!pev_valid(ent)) return HAM_IGNORED

new classname[32]
pev(ent,pev_classname,classname,31)

if(equal(classname,BAT_CLASSNAME))
{
if(!pev_valid(ptd))
{
static Float:origin[3];
pev(ent,pev_origin,origin);

message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_EXPLOSION); // TE_EXPLOSION
write_coord(floatround(origin[0])); // origin x
write_coord(floatround(origin[1])); // origin y
write_coord(floatround(origin[2])); // origin z
write_short(spr_skull); // sprites
write_byte(40); // scale in 0.1's
write_byte(30); // framerate
write_byte(14); // flags
message_end(); // message end

emit_sound(ent, CHAN_WEAPON, SOUND_BAT_MISS, 1.0, ATTN_NORM, 0, PITCH_NORM)

new owner = pev(ent, pev_owner)
g_stop[owner] = 0
set_pev(owner,pev_maxspeed,g_temp_speed[owner])

engfunc(EngFunc_RemoveEntity,ent)

return HAM_IGNORED
}

new owner = pev(ent,pev_owner)

if(0 < ptd && ptd <= g_maxplayers && is_user_alive(ptd) && ptd != owner)
{
g_bat_enemy[ptd] = owner

set_pev(ent,pev_nextthink,get_gametime()+banchee_skull_bat_catch_time)
set_task(banchee_skull_bat_catch_time,"clear_stat2",ptd+TASK_REMOVE_STAT)
set_pev(ent,pev_movetype,MOVETYPE_FOLLOW)
set_pev(ent,pev_aiment,ptd)

emit_sound(owner, CHAN_VOICE, SOUND_BAT_HIT, 1.0, ATTN_NORM, 0, PITCH_NORM)

g_bat_stat[ptd] = 1
}
}

return HAM_IGNORED
}

public clear_stat(taskid)
{
new id = ID_TASK_REMOVE_STAT

g_bat_stat[id] = 0
g_bat_time[id] = 0

zp_colored_print(id, "^x04[ZP]^x01 Ваша Способность^x04 Spawn Bat^x01 Готова!")
}

public clear_stat2(idx)
{
new id = idx-TASK_REMOVE_STAT

g_bat_enemy[id] = 0
g_bat_stat[id] = 0
}

public bot_use_skill(taskid)
{
new id = ID_BOT_USE_SKILL

if (!is_user_alive(id)) return;

cmd_bat(id)

set_task(random_float(5.0,15.0), "bot_use_skill", id+TASK_BOT_USE_SKILL)
}

fm_get_user_startpos(id,Float:forw,Float:right,Float:up,Float:vStart[])
{
new Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]

pev(id, pev_origin, vOrigin)
pev(id, pev_v_angle, vAngle)

engfunc(EngFunc_MakeVectors, vAngle)

global_get(glb_v_forward, vForward)
global_get(glb_v_right, vRight)
global_get(glb_v_up, vUp)

vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
}

aim_at_origin(id, Float:target[3], Float:angles[3])
{
static Float:vec[3]
pev(id,pev_origin,vec)
vec[0] = target[0] - vec[0]
vec[1] = target[1] - vec[1]
vec[2] = target[2] - vec[2]
engfunc(EngFunc_VecToAngles,vec,angles)
angles[0] *= -1.0
angles[2] = 0.0
}

PlayWeaponAnimation(id, animation)
{
set_pev(id, pev_weaponanim, animation)
message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, id)
write_byte(animation)
write_byte(pev(id, pev_body))
message_end()
}

reset_value_player(id)
{
g_stop[id] = 0
g_bat_time[id] = 0
g_bat_stat[id] = 0
g_bat_enemy[id] = 0

remove_task(id+TASK_BOT_USE_SKILL)
remove_task(id+TASK_REMOVE_STAT)
}

zp_colored_print(target, const message[], any:...)
{
static buffer[512], i, argscount
argscount = numargs()

if (!target)
{
static player
for (player = 1; player <= g_maxplayers; player++)
{
if (!is_user_connected(player))
continue;

static changed[5], changedcount
changedcount = 0

for (i = 2; i < argscount; i++)
{
if (getarg(i) == LANG_PLAYER)
{
setarg(i, 0, player)
changed[changedcount] = i
changedcount++
}
}

vformat(buffer, charsmax(buffer), message, 3)

message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player)
write_byte(player)
write_string(buffer)
message_end()

for (i = 0; i < changedcount; i++)
setarg(changed[i], 0, LANG_PLAYER)
}
}
else
{
vformat(buffer, charsmax(buffer), message, 3)

message_begin(MSG_ONE, g_msgSayText, _, target)
write_byte(target)
write_string(buffer)
message_end()
}
}

stock client_printcolor(id, const input[], any:...) // stock by tERoR
{
static iPlayersNum[32], iCount; iCount = 1
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, "!t2", "^0")

if(id) iPlayersNum[0] = id
else get_players(iPlayersNum, iCount, "ch")

for(new i = 0; i < iCount; i++)
{
if(is_user_connected(iPlayersNum[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayersNum[i])
write_byte(iPlayersNum[i])
write_string(szMsg)
message_end()
}
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/


Еще кое что.
Можно как нибудь сделать что бы ведьма раскрывала платье при пускании мышей?
Если что вот моделька если надо: (Залил на файлообменик т.к. слишком большой файл)
https://dropmefiles.com.ua/ru/YTLRVCakv


Register System <== Register System от m0skVi4a ;]
45.137.155.4:45265 <== сервер зомби
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя $@NyA
сообщение 9.3.2021, 17:41
Сообщение #2


Иконка группы

Стаж: 18 лет

Сообщений: 987
Благодарностей: 529
Полезность: 1050

TheArtemMaps,
Это все сделать легко.
Сегодня есть у меня интерес / желание, - поэтому сделаю

Какой вариант открытия платья сделать ? Как-по мне - 2 скрин более реалистичен,хоть какая-то анимация есть )


Отредактировал: $@NyA, - 9.3.2021, 18:42


МультиМод CS
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя TheArtemMaps
сообщение 9.3.2021, 19:21
Сообщение #3
Стаж: 6 лет 10 месяцев
Город: Киев

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

$@NyA,
Да можно второй


Register System <== Register System от m0skVi4a ;]
45.137.155.4:45265 <== сервер зомби
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя $@NyA
сообщение 9.3.2021, 20:29
Сообщение #4


Иконка группы

Стаж: 18 лет

Сообщений: 987
Благодарностей: 529
Полезность: 1050

Зомби класс из 30 уровня - не проверял, - нет Зомби Системы
Код:
#include <amxmodx>
#include <zombieplague>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#include <zp_level_system>

new const PLUGIN[] = "[CSO] Class String Finger"
new const VERSION[] = "1.0"
new const AUTHOR[] = "ShuriK"

new const zclass1_name[] = { "Ядовитое жало" }
new const zclass1_info[] = { "2 способности" }
new const zclass1_model[] = { "resident_zombi_host" }
new const zclass1_clawmodel[] = { "v_knife_zombieresident.mdl" }
const zclass1_health = 1700
const zclass1_speed = 240

const Float:zclass1_gravity = 1.0 //Гравитация в обычном режиме
const Float:zclass1_knockback = 1.0 //Отдача
const Float:gravity_time = 8.0 //Время гравитации;
const Float:realod_gravity = 15.0 //Отсчет до гравитации;
const Float:realod_gmg = 15.0 //Отсчет до вытягивание рук;
const Float:finger_gravity = 0.2 //Гравитая при способности;

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_pre(id)
{
if(!(zp_level(id) > 29))
{
if(zp_get_user_next_class(id) == g_string)
{
zp_set_user_zombie_class(id, 0)
client_printcolor(id, "!g[ZP] !yДанный класс !tBanchee !yдоступен с !g30 уровня!")
}
}
}

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();
}
}
}
}

Код:
#define ANIMATION_WITCH	     "skill1_loop"     // Анимация платья,где  "skill1_loop" - название анимации во вьювере

Анимация платья - также не проверял
Код:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#include <xs>
#include <zp_level_system>

#define PLUGIN "DJB Zombie Class Banchee"
#define VERSION "1.0"
#define AUTHOR "Csoldjb"

#define linux_diff_weapon 4
#define linux_diff_player 5

#define ANIMATION_WITCH "skill1_loop" // Анимация платья

new const zclass_name[] = "Witch"
new const zclass_info[] = "Come to HER"
new const zclass_model[] = "witch_zombi_host_xman"
new const zclass_clawmodel[] = "v_knife_witch_zombi.mdl"
new const zclass_hemodel2[] = { "models/zombie_plague/v_zombibomb_witch.mdl" }
new KNOCKBOMB_WITCH[] = "models/zombie_plague/v_zombibomb_witch.mdl"
const zclass_health = 4200
const zclass_speed = 300
const Float:zclass_gravity = 1.5
const Float:zclass_knockback = 1.5

new const SOUND_FIRE[] = "zombie_plague/zombi_banshee_pulling_fire.wav"
new const SOUND_BAT_HIT[] = "zombie_plague/zombi_banshee_laugh.wav"
new const SOUND_BAT_MISS[] = "zombie_plague/zombi_banshee_pulling_fail.wav"
new const MODEL_BAT[] = "models/zombie_plague/bat_witch.mdl"
new const BAT_CLASSNAME[] = "banchee_bat"
new spr_skull

const Float:banchee_skull_bat_speed = 700.0
const Float:banchee_skull_bat_flytime = 5.0
const Float:banchee_skull_bat_catch_time = 3.0
const Float:banchee_skull_bat_catch_speed = 325.0
const Float:bat_timewait = 15.0

new g_stop[33]
new g_bat_time[33]
new g_bat_stat[33]
new g_bat_enemy[33]
new Float:g_temp_speed[33]

new idclass_banchee
new g_maxplayers
new g_roundend
new g_msgSayText

enum (+= 100)
{
TASK_BOT_USE_SKILL = 2367,
TASK_REMOVE_STAT
}

#define ID_BOT_USE_SKILL (taskid - TASK_BOT_USE_SKILL)
#define ID_TASK_REMOVE_STAT (taskid - TASK_REMOVE_STAT)

public plugin_precache()
{
precache_sound(SOUND_FIRE)
precache_sound(SOUND_BAT_HIT)
precache_sound(SOUND_BAT_MISS)
engfunc(EngFunc_PrecacheModel,zclass_hemodel2)
precache_model(KNOCKBOMB_WITCH)
precache_model(MODEL_BAT)

spr_skull = precache_model("sprites/ef_bat.spr")

idclass_banchee = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
}

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_event("HLTV", "EventHLTV", "a", "1=0", "2=0")
register_event("DeathMsg", "EventDeath", "a")
register_logevent("logevent_round_end", 2, "1=Round_End")
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1")

register_clcmd("drop", "cmd_bat")

register_forward(FM_PlayerPreThink,"fw_PlayerPreThink")

RegisterHam(Ham_Touch,"info_target","EntityTouchPost",1)
RegisterHam(Ham_Think,"info_target","EntityThink")

g_maxplayers = get_maxplayers()
g_msgSayText = get_user_msgid("SayText")
}

public Event_CurWeapon(id) if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == idclass_banchee && !zp_get_user_nemesis(id) && get_user_weapon(id) == CSW_HEGRENADE) set_pev(id, pev_viewmodel2, zclass_hemodel2)

public Event_CurrentWeapon(id)
{
new weaponID = read_data(2)

if(weaponID == CSW_SMOKEGRENADE)
{
if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == idclass_banchee && !zp_get_user_nemesis(id))
{
entity_set_string(id, EV_SZ_viewmodel, KNOCKBOMB_WITCH)
}
}

if (weaponID == CSW_FLASHBANG) {
if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == idclass_banchee && !zp_get_user_nemesis(id))
{
entity_set_string(id, EV_SZ_viewmodel, KNOCKBOMB_WITCH)
}
}
}

public client_putinserver(id)
{
reset_value_player(id)
}

public client_disconnected(id)
{
reset_value_player(id)
}

public EventHLTV()
{
g_roundend = 0

for(new id = 1; id <= g_maxplayers; id++)
{
if (!is_user_connected(id)) continue;

reset_value_player(id)
}
}

public logevent_round_end()
{
g_roundend = 1
}

public EventDeath()
{
new id = read_data(2)

reset_value_player(id)
}

public zp_user_infected_post(id)
{
reset_value_player(id)

if(zp_get_user_nemesis(id)) return;

if(zp_get_user_zombie_class(id) == idclass_banchee)
{
if(is_user_bot(id))
{
set_task(random_float(5.0,15.0), "bot_use_skill", id+TASK_BOT_USE_SKILL)
return
}

zp_colored_print(id, "^x04[ZP]^x01 Ваша Способность ^x04 Spawn Bat^x01 Будет Готова Через^x04 %.1f ^x01Секунд.", bat_timewait)
}
}

public zp_user_infected_pre(id)
{
if(!(zp_level(id) > 9))
{
if(zp_get_user_next_class(id) == idclass_banchee)
{
zp_set_user_zombie_class(id, 0)
client_printcolor(id, "!g[ZP] !yДанный класс !tBanchee !yдоступен с !g10 уровня!")
}
}
}

public zp_user_humanized_post(id)
{
reset_value_player(id)
}

public cmd_bat(id)
{
if(g_roundend) return PLUGIN_CONTINUE

if(!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_nemesis(id)) return PLUGIN_CONTINUE

if(zp_get_user_zombie_class(id) == idclass_banchee && !g_bat_time[id])
{
g_bat_time[id] = 1

set_task(bat_timewait,"clear_stat",id+TASK_REMOVE_STAT)

new ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))

if(!pev_valid(ent)) return PLUGIN_HANDLED

new Float:vecAngle[3],Float:vecOrigin[3],Float:vecVelocity[3],Float:vecForward[3]
fm_get_user_startpos(id,5.0,2.0,-1.0,vecOrigin)
pev(id,pev_angles,vecAngle)

engfunc(EngFunc_MakeVectors,vecAngle)
global_get(glb_v_forward,vecForward)

velocity_by_aim(id,floatround(banchee_skull_bat_speed),vecVelocity)

set_pev(ent,pev_origin,vecOrigin)
set_pev(ent,pev_angles,vecAngle)
set_pev(ent,pev_classname,BAT_CLASSNAME)
set_pev(ent,pev_movetype,MOVETYPE_FLY)
set_pev(ent,pev_solid,SOLID_BBOX)
engfunc(EngFunc_SetSize,ent,{-20.0,-15.0,-8.0},{20.0,15.0,8.0})

engfunc(EngFunc_SetModel,ent,MODEL_BAT)
set_pev(ent,pev_animtime,get_gametime())
set_pev(ent,pev_framerate,1.0)
set_pev(ent,pev_owner,id)
set_pev(ent,pev_velocity,vecVelocity)
set_pev(ent,pev_nextthink,get_gametime()+banchee_skull_bat_flytime)
emit_sound(ent, CHAN_WEAPON, SOUND_FIRE, 1.0, ATTN_NORM, 0, PITCH_NORM)

g_stop[id] = ent

PlayWeaponAnimation(id, 2)
UTIL_PlayerAnimation(id, ANIMATION_WITCH, 0.5)

pev(id, pev_maxspeed, g_temp_speed[id])
set_pev(id,pev_maxspeed,0.1)

return PLUGIN_HANDLED
}

return PLUGIN_CONTINUE
}

public fw_PlayerPreThink(id)
{
if(!is_user_alive(id)) return FMRES_IGNORED

if(g_bat_stat[id])
{
new owner = g_bat_enemy[id], Float:ownerorigin[3]
pev(owner,pev_origin,ownerorigin)
static Float:vec[3]
aim_at_origin(id,ownerorigin,vec)
engfunc(EngFunc_MakeVectors, vec)
global_get(glb_v_forward, vec)
vec[0] *= banchee_skull_bat_catch_speed
vec[1] *= banchee_skull_bat_catch_speed
vec[2] = 0.0
set_pev(id,pev_velocity,vec)
}

return FMRES_IGNORED
}

public EntityThink(ent)
{
if(!pev_valid(ent)) return HAM_IGNORED

new classname[32]
pev(ent,pev_classname,classname,31)

if(equal(classname,BAT_CLASSNAME))
{
static Float:origin[3];
pev(ent,pev_origin,origin);

message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_EXPLOSION); // TE_EXPLOSION
write_coord(floatround(origin[0])); // origin x
write_coord(floatround(origin[1])); // origin y
write_coord(floatround(origin[2])); // origin z
write_short(spr_skull); // sprites
write_byte(40); // scale in 0.1's
write_byte(30); // framerate
write_byte(14); // flags
message_end(); // message end

emit_sound(ent, CHAN_WEAPON, SOUND_BAT_MISS, 1.0, ATTN_NORM, 0, PITCH_NORM)

new owner = pev(ent, pev_owner)
g_stop[owner] = 0
set_pev(owner,pev_maxspeed,g_temp_speed[owner])

engfunc(EngFunc_RemoveEntity,ent)
}

return HAM_IGNORED
}

public EntityTouchPost(ent,ptd)
{
if(!pev_valid(ent)) return HAM_IGNORED

new classname[32]
pev(ent,pev_classname,classname,31)

if(equal(classname,BAT_CLASSNAME))
{
if(!pev_valid(ptd))
{
static Float:origin[3];
pev(ent,pev_origin,origin);

message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_EXPLOSION); // TE_EXPLOSION
write_coord(floatround(origin[0])); // origin x
write_coord(floatround(origin[1])); // origin y
write_coord(floatround(origin[2])); // origin z
write_short(spr_skull); // sprites
write_byte(40); // scale in 0.1's
write_byte(30); // framerate
write_byte(14); // flags
message_end(); // message end

emit_sound(ent, CHAN_WEAPON, SOUND_BAT_MISS, 1.0, ATTN_NORM, 0, PITCH_NORM)

new owner = pev(ent, pev_owner)
g_stop[owner] = 0
set_pev(owner,pev_maxspeed,g_temp_speed[owner])

engfunc(EngFunc_RemoveEntity,ent)

return HAM_IGNORED
}

new owner = pev(ent,pev_owner)

if(0 < ptd && ptd <= g_maxplayers && is_user_alive(ptd) && ptd != owner)
{
g_bat_enemy[ptd] = owner

set_pev(ent,pev_nextthink,get_gametime()+banchee_skull_bat_catch_time)
set_task(banchee_skull_bat_catch_time,"clear_stat2",ptd+TASK_REMOVE_STAT)
set_pev(ent,pev_movetype,MOVETYPE_FOLLOW)
set_pev(ent,pev_aiment,ptd)

emit_sound(owner, CHAN_VOICE, SOUND_BAT_HIT, 1.0, ATTN_NORM, 0, PITCH_NORM)

g_bat_stat[ptd] = 1
}
}

return HAM_IGNORED
}

public clear_stat(taskid)
{
new id = ID_TASK_REMOVE_STAT

g_bat_stat[id] = 0
g_bat_time[id] = 0

zp_colored_print(id, "^x04[ZP]^x01 Ваша Способность^x04 Spawn Bat^x01 Готова!")
}

public clear_stat2(idx)
{
new id = idx-TASK_REMOVE_STAT

g_bat_enemy[id] = 0
g_bat_stat[id] = 0
}

public bot_use_skill(taskid)
{
new id = ID_BOT_USE_SKILL

if (!is_user_alive(id)) return;

cmd_bat(id)

set_task(random_float(5.0,15.0), "bot_use_skill", id+TASK_BOT_USE_SKILL)
}

fm_get_user_startpos(id,Float:forw,Float:right,Float:up,Float:vStart[])
{
new Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]

pev(id, pev_origin, vOrigin)
pev(id, pev_v_angle, vAngle)

engfunc(EngFunc_MakeVectors, vAngle)

global_get(glb_v_forward, vForward)
global_get(glb_v_right, vRight)
global_get(glb_v_up, vUp)

vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
}

aim_at_origin(id, Float:target[3], Float:angles[3])
{
static Float:vec[3]
pev(id,pev_origin,vec)
vec[0] = target[0] - vec[0]
vec[1] = target[1] - vec[1]
vec[2] = target[2] - vec[2]
engfunc(EngFunc_VecToAngles,vec,angles)
angles[0] *= -1.0
angles[2] = 0.0
}

PlayWeaponAnimation(id, animation)
{
set_pev(id, pev_weaponanim, animation)
message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, id)
write_byte(animation)
write_byte(pev(id, pev_body))
message_end()
}

reset_value_player(id)
{
g_stop[id] = 0
g_bat_time[id] = 0
g_bat_stat[id] = 0
g_bat_enemy[id] = 0

remove_task(id+TASK_BOT_USE_SKILL)
remove_task(id+TASK_REMOVE_STAT)
}

zp_colored_print(target, const message[], any:...)
{
static buffer[512], i, argscount
argscount = numargs()

if (!target)
{
static player
for (player = 1; player <= g_maxplayers; player++)
{
if (!is_user_connected(player))
continue;

static changed[5], changedcount
changedcount = 0

for (i = 2; i < argscount; i++)
{
if (getarg(i) == LANG_PLAYER)
{
setarg(i, 0, player)
changed[changedcount] = i
changedcount++
}
}

vformat(buffer, charsmax(buffer), message, 3)

message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player)
write_byte(player)
write_string(buffer)
message_end()

for (i = 0; i < changedcount; i++)
setarg(changed[i], 0, LANG_PLAYER)
}
}
else
{
vformat(buffer, charsmax(buffer), message, 3)

message_begin(MSG_ONE, g_msgSayText, _, target)
write_byte(target)
write_string(buffer)
message_end()
}
}

stock client_printcolor(id, const input[], any:...) // stock by tERoR
{
static iPlayersNum[32], iCount; iCount = 1
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, "!t2", "^0")

if(id) iPlayersNum[0] = id
else get_players(iPlayersNum, iCount, "ch")

for(new i = 0; i < iCount; i++)
{
if(is_user_connected(iPlayersNum[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayersNum[i])
write_byte(iPlayersNum[i])
write_string(szMsg)
message_end()
}
}
}

stock UTIL_PlayerAnimation(const iPlayer, const szAnim[], Float: flFramerate)
{
new iAnimDesired, Float: flFrameRate, Float: flGroundSpeed, bool: bLoops;

if((iAnimDesired = lookup_sequence(iPlayer, szAnim, flFrameRate, bLoops, flGroundSpeed)) == -1) iAnimDesired = 0;

set_pev(iPlayer, pev_frame, 0.0);
set_pev(iPlayer, pev_framerate, flFramerate);
set_pev(iPlayer, pev_animtime, get_gametime());
set_pev(iPlayer, pev_sequence, iAnimDesired);

set_pdata_int(iPlayer, 40, bLoops, linux_diff_weapon);
set_pdata_int(iPlayer, 39, 0, linux_diff_weapon);

set_pdata_float(iPlayer, 36, flFrameRate, linux_diff_weapon);
set_pdata_float(iPlayer, 37, flGroundSpeed, linux_diff_weapon);
set_pdata_float(iPlayer, 38, get_gametime(), linux_diff_weapon);

set_pdata_int(iPlayer, 73, 28, linux_diff_player);
set_pdata_int(iPlayer, 74, 28, linux_diff_player);
set_pdata_float(iPlayer, 220, get_gametime(), linux_diff_player);
}


Эту модель закинуть на замену
Прикрепленный файл  models.zip ( 940,06 килобайт ) Кол-во скачиваний: 12


Отредактировал: $@NyA, - 9.3.2021, 20:31


МультиМод CS
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя TheArtemMaps
сообщение 9.3.2021, 22:31
Сообщение #5
Стаж: 6 лет 10 месяцев
Город: Киев

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

$@NyA,
Ошибка компиляции зомби класса жала
AMX Mod X Compiler 1.9.0.5271
Copyright © 1997-2006 ITB CompuPhase
Copyright © 2004-2013 AMX Mod X Team

/hlds/web/www/amxxpc/work/scripting/202110/1615321832/zp_class_finger.sma(123) : error 017: undefined symbol "client_printcolor"
/hlds/web/www/amxxpc/work/scripting/202110/1615321832/zp_class_finger.sma(172) : warning 233: symbol "client_disconnect" is marked as deprecated: Use client_disconnected() instead.

1 Error.
Could not locate output file /hlds/web/www/amxxpc/work/plugins/202110/1615321832/zp_class_finger.amx (compile failed).


Register System <== Register System от m0skVi4a ;]
45.137.155.4:45265 <== сервер зомби
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя TheArtemMaps
сообщение 9.3.2021, 22:45
Сообщение #6
Стаж: 6 лет 10 месяцев
Город: Киев

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

$@NyA,
Кстати анимация работает


Register System <== Register System от m0skVi4a ;]
45.137.155.4:45265 <== сервер зомби
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя $@NyA
сообщение 9.3.2021, 22:47
Сообщение #7


Иконка группы

Стаж: 18 лет

Сообщений: 987
Благодарностей: 529
Полезность: 1050

Цитата(TheArtemMaps @ 9.3.2021, 22:31) *
$@NyA,
Ошибка компиляции зомби класса жала
AMX Mod X Compiler 1.9.0.5271
Copyright © 1997-2006 ITB CompuPhase
Copyright © 2004-2013 AMX Mod X Team

/hlds/web/www/amxxpc/work/scripting/202110/1615321832/zp_class_finger.sma(123) : error 017: undefined symbol "client_printcolor"
/hlds/web/www/amxxpc/work/scripting/202110/1615321832/zp_class_finger.sma(172) : warning 233: symbol "client_disconnect" is marked as deprecated: Use client_disconnected() instead.

1 Error.
Could not locate output file /hlds/web/www/amxxpc/work/plugins/202110/1615321832/zp_class_finger.amx (compile failed).

TheArtemMaps,
Ты опять в онлайне делаешь свои дела?)


МультиМод CS
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя $@NyA
сообщение 9.3.2021, 22:54
Сообщение #8


Иконка группы

Стаж: 18 лет

Сообщений: 987
Благодарностей: 529
Полезность: 1050

client_disconnect замени на client_disconnected


МультиМод CS
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя TheArtemMaps
сообщение 9.3.2021, 23:01
Сообщение #9
Стаж: 6 лет 10 месяцев
Город: Киев

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

$@NyA,
Локальный так же не компилит


Register System <== Register System от m0skVi4a ;]
45.137.155.4:45265 <== сервер зомби
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя $@NyA
сообщение 9.3.2021, 23:37
Сообщение #10


Иконка группы

Стаж: 18 лет

Сообщений: 987
Благодарностей: 529
Полезность: 1050

TheArtemMaps,
Хлопотное дело вечно тебя выручать )))
Код:
#include <amxmodx>
#include <zombieplague>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#include <zp_level_system>

new const PLUGIN[] = "[CSO] Class String Finger"
new const VERSION[] = "1.0"
new const AUTHOR[] = "ShuriK"

new const zclass1_name[] = { "Ядовитое жало" }
new const zclass1_info[] = { "2 способности" }
new const zclass1_model[] = { "resident_zombi_host" }
new const zclass1_clawmodel[] = { "v_knife_zombieresident.mdl" }
const zclass1_health = 1700
const zclass1_speed = 240

const Float:zclass1_gravity = 1.0 //Гравитация в обычном режиме
const Float:zclass1_knockback = 1.0 //Отдача
const Float:gravity_time = 8.0 //Время гравитации;
const Float:realod_gravity = 15.0 //Отсчет до гравитации;
const Float:realod_gmg = 15.0 //Отсчет до вытягивание рук;
const Float:finger_gravity = 0.2 //Гравитая при способности;

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_pre(id)
{
if(!(zp_level(id) > 29))
{
if(zp_get_user_next_class(id) == g_string)
{
zp_set_user_zombie_class(id, 0)
print_chatColor(id, "\g[ZP] \nДанный класс \tBanchee \nдоступен с \g30 уровня!")
}
}
}

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_disconnected(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();
}
}
}
}

stock print_chatColor(const id,const input[], any:...)
{
new msg[191], players[32], count = 1;
vformat(msg,190,input,3);
replace_all(msg,190,"\g","^4");// green
replace_all(msg,190,"\n","^1");// normal
replace_all(msg,190,"\t","^3");// team

if (id) players[0] = id; 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();
}
}


МультиМод CS
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя TheArtemMaps
сообщение 10.3.2021, 10:03
Сообщение #11
Стаж: 6 лет 10 месяцев
Город: Киев

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

Цитата($@NyA @ 10.3.2021, 0:37) *
TheArtemMaps,
Хлопотное дело вечно тебя выручать )))
Код:
#include <amxmodx>
#include <zombieplague>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#include <zp_level_system>

new const PLUGIN[] = "[CSO] Class String Finger"
new const VERSION[] = "1.0"
new const AUTHOR[] = "ShuriK"

new const zclass1_name[] = { "Ядовитое жало" }
new const zclass1_info[] = { "2 способности" }
new const zclass1_model[] = { "resident_zombi_host" }
new const zclass1_clawmodel[] = { "v_knife_zombieresident.mdl" }
const zclass1_health = 1700
const zclass1_speed = 240

const Float:zclass1_gravity = 1.0 //Гравитация в обычном режиме
const Float:zclass1_knockback = 1.0 //Отдача
const Float:gravity_time = 8.0 //Время гравитации;
const Float:realod_gravity = 15.0 //Отсчет до гравитации;
const Float:realod_gmg = 15.0 //Отсчет до вытягивание рук;
const Float:finger_gravity = 0.2 //Гравитая при способности;

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_pre(id)
{
if(!(zp_level(id) > 29))
{
if(zp_get_user_next_class(id) == g_string)
{
zp_set_user_zombie_class(id, 0)
print_chatColor(id, "\g[ZP] \nДанный класс \tBanchee \nдоступен с \g30 уровня!")
}
}
}

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_disconnected(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();
}
}
}
}

stock print_chatColor(const id,const input[], any:...)
{
new msg[191], players[32], count = 1;
vformat(msg,190,input,3);
replace_all(msg,190,"\g","^4");// green
replace_all(msg,190,"\n","^1");// normal
replace_all(msg,190,"\t","^3");// team

if (id) players[0] = id; 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();
}
}


Спасибо скомпилировалось, буду с компа проверю


Register System <== Register System от m0skVi4a ;]
45.137.155.4:45265 <== сервер зомби
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя TheArtemMaps
сообщение 10.3.2021, 17:13
Сообщение #12
Стаж: 6 лет 10 месяцев
Город: Киев

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

$@NyA,
Все работает спасибо опять же какой код брал и вставлял?


Register System <== Register System от m0skVi4a ;]
45.137.155.4:45265 <== сервер зомби
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя $@NyA
сообщение 10.3.2021, 18:10
Сообщение #13


Иконка группы

Стаж: 18 лет

Сообщений: 987
Благодарностей: 529
Полезность: 1050

Цитата(TheArtemMaps @ 10.3.2021, 17:13) *
$@NyA,
Все работает спасибо опять же какой код брал и вставлял?

С тел.сейчас,буду за рабочим станком - отпишусь

Отредактировал: $@NyA, - 10.3.2021, 23:20


МультиМод CS
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя $@NyA
сообщение 10.3.2021, 23:34
Сообщение #14


Иконка группы

Стаж: 18 лет

Сообщений: 987
Благодарностей: 529
Полезность: 1050

На уровень
Подключаешь инклуд
Код:
#include <zp_level_system>

Далее вставляешь функцию ( Где число 29 - это с 30 уровня будет доступен класс ). Например 15 уровень - аля 14 )
if(zp_get_user_next_class(id) == g_string) ( Где - g_string - название класса Зомби - его ты найдёшь в zp_get_user_zombie_class )
Код:
public zp_user_infected_pre(id) 
{
if(!(zp_level(id) > 29))
{
if(zp_get_user_next_class(id) == g_string)
{
zp_set_user_zombie_class(id, 0)
print_chatColor(id, "\g[ZP] \nДанный класс \tBanchee \nдоступен с \g30 уровня!")
}
}
}

Что-бы не было ошибки с КолорЧат с выше 1.8.3 при компиляции - вставляешь в самый низ stock
Код:
stock print_chatColor(const id,const input[], any:...)
{
new msg[191], players[32], count = 1;
vformat(msg,190,input,3);
replace_all(msg,190,"\g","^4");// green
replace_all(msg,190,"\n","^1");// normal
replace_all(msg,190,"\t","^3");// team

if (id) players[0] = id; 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();
}
}

На анимацию игрока
Вставляешь сначала это ( Где "skill1_loop" - Название анимации во вьювере).Для себя другую потом подберёшь
"witch_zombi_host_xman" - название самой модели Зомби
Код:
#define linux_diff_weapon 4
#define linux_diff_player 5

#define ANIMATION_WITCH "skill1_loop" // Анимация платья

new const zclass_model[] = "witch_zombi_host_xman"

Потом это в любое место ( все делают это в самый низ )))
Код:
stock UTIL_PlayerAnimation(const iPlayer, const szAnim[], Float: flFramerate) 
{
new iAnimDesired, Float: flFrameRate, Float: flGroundSpeed, bool: bLoops;

if((iAnimDesired = lookup_sequence(iPlayer, szAnim, flFrameRate, bLoops, flGroundSpeed)) == -1) iAnimDesired = 0;

set_pev(iPlayer, pev_frame, 0.0);
set_pev(iPlayer, pev_framerate, flFramerate);
set_pev(iPlayer, pev_animtime, get_gametime());
set_pev(iPlayer, pev_sequence, iAnimDesired);

set_pdata_int(iPlayer, 40, bLoops, linux_diff_weapon);
set_pdata_int(iPlayer, 39, 0, linux_diff_weapon);

set_pdata_float(iPlayer, 36, flFrameRate, linux_diff_weapon);
set_pdata_float(iPlayer, 37, flGroundSpeed, linux_diff_weapon);
set_pdata_float(iPlayer, 38, get_gametime(), linux_diff_weapon);

set_pdata_int(iPlayer, 73, 28, linux_diff_player);
set_pdata_int(iPlayer, 74, 28, linux_diff_player);
set_pdata_float(iPlayer, 220, get_gametime(), linux_diff_player);
}

И потом,где у тебя вызывается сама способность Зомби,вставляешь анимацию
Код:
UTIL_PlayerAnimation(id, ANIMATION_WITCH, 0.5)

На этом всё

Отредактировал: $@NyA, - 10.3.2021, 23:44


МультиМод CS
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя TheArtemMaps
сообщение 10.3.2021, 23:49
Сообщение #15
Стаж: 6 лет 10 месяцев
Город: Киев

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

$@NyA,
Спасибо за помощь, мне пригодится.


Register System <== Register System от m0skVi4a ;]
45.137.155.4:45265 <== сервер зомби
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: