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

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

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

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

Подправить пару классов ZM

Статус пользователя DANDY
сообщение 19.11.2015, 0:49
Сообщение #1
Стаж: 15 лет

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

Здравствуйте.

Нужна помощь скриптера. Работа, думаю, легкая для знающего.
В общем, есть плагин zp_zclass_revenant_ice, в нем, когда использовал способность и нажимаешь опять на кнопку способности, по середине экрана высвечивается информация о том, сколько осталось времени до отката.
Код
public paralize_cmd( id )
{
    if( !is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclassparalize || zp_get_user_nemesis(id) )
        return PLUGIN_CONTINUE;

    if(g_can[id])
    {
        client_print(id,print_center,"Востановление через %d секунд",g_can[id])
        return PLUGIN_HANDLED;
    }

Прошу помочь сделать это так же в следующих двух классах.

cso_hunter.sma
Код
#include <amxmodx>
#include <engine>
#include <fakemeta_util>
#include <hamsandwich>
#include <zombieplague>
#include <fun>

#define PLUGIN "[CSO:Hunter Zombie]"
#define VERSION "1.2"
#define AUTHOR "HoRRoR/tERoR edit"


// Zombie Attributes
new const zclass_name[] = "Hunter"
new const zclass_info[] = "[Speed]"
new const zclass_model[] = "hunt" // model
new const zclass_clawmodel[] = "assassin.mdl" // claw model
new KNOCKBOMB_HUNTER[] = "models/zp/grenade/v_bomb_begyH.mdl" //zbomb model
const zclass_health = 2500 // health
const zclass_speed = 245 // speed
const Float:zclass_gravity = 0.88 // gravity
const Float:zclass_knockback =  0.43 // knockback

// --- config ------------------------ //
#define TRAIL_LIFE        2
#define TRAIL_WIDTH       10
#define TRAIL_RED         0
#define TRAIL_GREEN       0
#define TRAIL_BLUE        0
#define TRAIL_BRIGTHNESS  220

new Float:g_fastspeed = 830.0 // sprint speed
new Float:g_normspeed = 245.0 // norm speed. must be as zclass_speed
new Float:g_abilonecooldown = 30.0 // cooldown time
new Float:g_abilonelenght = 2.2 // time of sprint
new const g_hunter_Infect_Sound[][] =    
{    
    "zombieplay/hunter/infect_01.wav" ,
    "zombieplay/hunter/infect_02.wav"  
}  
new const pain_hunter_sound[] = "zombieplay/hunter/pain_011.wav"
new const pain_hunter_sound2[] = "zombieplay/hunter/pain_021.wav"
new const death_hunter_sound[] = "zombieplay/hunter/die_02.wav" //death
new const sound_hunter_sprint[] = "zombieplay/hunter/hunter.wav" // sprint sound
new const sound_hunter_endspr[] = "zombieplay/hunter/end-sprint.wav" // end sound
// ----------------------------------- //

new i_cooldown_time[33]
new g_zclass_hunter
new g_speeded[33] = 0
new g_abil_one_used[33] = 0
new gTrail
new g_maxplayers

public plugin_precache()
{
    g_zclass_hunter = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)    
    precache_sound(sound_hunter_sprint)
    precache_sound(sound_hunter_endspr)
    precache_model(KNOCKBOMB_HUNTER)    
    precache_sound(pain_hunter_sound[0])
    precache_sound(pain_hunter_sound2[0])
    new i
    for(i = 0; i < sizeof g_hunter_Infect_Sound; i++) precache_sound(g_hunter_Infect_Sound[i])
    precache_sound(death_hunter_sound[0])
}

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_clcmd("drop", "use_ability_one")
    
    register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1")
    register_forward( FM_PlayerPreThink, "client_prethink" )
    register_logevent("roundStart", 2, "1=Round_Start")
    RegisterHam(Ham_TakeDamage, "player", "CPlayer__TakeDamage");

    register_forward(FM_EmitSound, "fw_EmitSound")
    
    g_maxplayers = get_maxplayers()

    gTrail = engfunc(EngFunc_PrecacheModel,"sprites/zombieplay/cso_trailv2.spr")
}


public client_prethink(id)
{
    if (zp_get_user_zombie_class(id) == g_zclass_hunter)
    {
        if(is_user_alive(id) && zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == g_zclass_hunter) && !zp_get_user_nemesis(id))
        Action(id);
    }
}

public Action(id)
{
    if (g_speeded[id] == 1)
    {
        set_user_maxspeed(id , g_fastspeed);
    }
    else
    {
        set_user_maxspeed(id , g_normspeed);
    }
        return PLUGIN_HANDLED;
}

public roundStart()
{
    for (new i = 1; i <= g_maxplayers; i++)
    {
        i_cooldown_time[i] = floatround(g_abilonecooldown)
        g_abil_one_used[i] = 0
        g_speeded[i] = 0
        remove_task(i)
        client_cmd(i,"cl_forwardspeed 300")
        client_cmd(i,"cl_backspeed 300")
    }
}

public ShowHUD(id)
{
    if(is_user_alive(id))
    {
        i_cooldown_time[id] = i_cooldown_time[id] - 1;
        set_hudmessage(200, 100, 0,  0.80, 0.87, 0, 1.0, 1.1, 0.0, 0.0, -1)
        show_hudmessage(id, "[Способность через : %d]",i_cooldown_time[id])
    }else{
        remove_task(id)
    }
}

public use_ability_one(id)
{
    if (is_user_alive(id) && (zp_get_user_zombie_class(id) == g_zclass_hunter) && zp_get_user_zombie(id) && !zp_get_user_nemesis(id))
    {
        
        if(g_abil_one_used[id] == 0)
        {
            fm_set_rendering(id, kRenderFxGlowShell, 170, 0, 0, kRenderNormal, 0)

            client_cmd(id,"cl_forwardspeed 1000")
            client_cmd(id,"cl_backspeed 1000")
    
            message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
            write_byte (TE_BEAMFOLLOW)
            write_short (id)
            write_short (gTrail)
            write_byte (TRAIL_LIFE)
            write_byte (TRAIL_WIDTH)
            write_byte (TRAIL_RED)
            write_byte (TRAIL_GREEN)
            write_byte (TRAIL_BLUE)
            write_byte (TRAIL_BRIGTHNESS)
            message_end()

            red_screen(id)
            g_speeded[id] = 1
            emit_sound(id, CHAN_STREAM, sound_hunter_sprint, 1.0, ATTN_NORM, 0, PITCH_NORM)
            g_abil_one_used[id] = 1
            set_task(g_abilonelenght, "set_normal_speed", id)
                        
            i_cooldown_time[id] = floatround(g_abilonecooldown)
            set_task(1.0, "ShowHUD", id, _, _, "a",i_cooldown_time[id])
//            client_print(id,print_chat,"[dev] - use ability")
        }        
    }
}

public set_normal_speed(id)
{
    if ((zp_get_user_zombie_class(id) == g_zclass_hunter) && zp_get_user_zombie(id) && !zp_get_user_nemesis(id))
    {
        fm_set_user_rendering(id)
        emit_sound(id, CHAN_STREAM, sound_hunter_endspr, 1.0, ATTN_NORM, 0, PITCH_NORM)
        g_speeded[id] = 0
        client_cmd(id,"cl_forwardspeed 300")
        client_cmd(id,"cl_backspeed 300")
        set_task(g_abilonecooldown,"set_ability_one_cooldown",id)
    }
}

red_screen(const id, const iFade = 1)
{
    message_begin(MSG_ONE,get_user_msgid("ScreenFade"),_,id)
    write_short(8192 * iFade)
    write_short(8192 * iFade)
    write_short(0x0000)
    write_byte(255)
    write_byte(0)
    write_byte(0)
    write_byte(125)
    message_end()
}

public set_ability_one_cooldown(id)
{
    if ((zp_get_user_zombie_class(id) == g_zclass_hunter) && zp_get_user_zombie(id) && !zp_get_user_nemesis(id))
    {
        g_abil_one_used[id] = 0
        new text[100]
        format(text,99,"^x04[ZP] ^x01Способность готова!!!")
        message_begin(MSG_ONE,get_user_msgid("SayText"),{0,0,0},id)
        write_byte(id)
        write_string(text)
        message_end()
    }
}

public zp_user_infected_post(id, infector)
{
    if ((zp_get_user_zombie_class(id) == g_zclass_hunter) && !zp_get_user_nemesis(id))
    {
        emit_sound(id, CHAN_VOICE, g_hunter_Infect_Sound[random(sizeof g_hunter_Infect_Sound)],  VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
        new text[100]
        new note_cooldown = floatround(g_abilonecooldown)
        format(text,99,"^x04[ZP] ^x01Способность^x04 [Разгон] ^x01 | Время:^x04 %d ^x01сек.",note_cooldown)
        message_begin(MSG_ONE,get_user_msgid("SayText"),{0,0,0},id)
        write_byte(id)
        write_string(text)
        message_end()
        
        i_cooldown_time[id] = floatround(g_abilonecooldown)
        remove_task(id)
        g_speeded[id] = 0
        g_abil_one_used[id] = 0
    }
}

public zp_user_humanized_post(id)
{
    remove_task(id)
    client_cmd(id,"cl_forwardspeed 300")
    client_cmd(id,"cl_backspeed 300")
}


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) == g_zclass_hunter && !zp_get_user_nemesis(id))
    {
        entity_set_string(id, EV_SZ_viewmodel, KNOCKBOMB_HUNTER)
    }

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

}

public CPlayer__TakeDamage(id, iVictim, iInflictor, iAttacker, Float:flDamage, bitsDamage)
{
    if (zp_get_user_zombie_class(id) == g_zclass_hunter && zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !zp_get_user_survivor(id))
    {
        new rand = random_num(1,2)
        switch(rand)
          {
            case 1: emit_sound(id, CHAN_WEAPON, pain_hunter_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW)
            case 2: emit_sound(id, CHAN_WEAPON, pain_hunter_sound2[0], 1.0, ATTN_NORM, 0, PITCH_LOW)
        }
    }
}

public fw_EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch)
{
    if(!is_user_connected(id))
        return FMRES_HANDLED;    

    if (sample[0] == 'h' && sample[1] == 'o' && sample[2] == 's' && sample[3] == 't' && sample[4] == 'a' && sample[5] == 'g' && sample[6] == 'e')
        return FMRES_SUPERCEDE;


    if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_hunter && !zp_get_user_nemesis(id))
    {
        if (sample[7] == 'd' && ((sample[8] == 'i' && sample[9] == 'e') || (sample[8] == 'e' && sample[9] == 'a')))
        {
        emit_sound(id, CHAN_WEAPON, death_hunter_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW)
        }
    }
    return FMRES_IGNORED;
}


А в следующем классе, помимо вышеперечисленного, просьба убрать существующее dhud сообщение о восстановлении способности.

cso_shaman.sma
Код
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fun>
#include <xs>
#include <hamsandwich>
#include <zombieplague>

// Zombie Attributes
new const zclass_name[] = "Shaman" // name
new const zclass_info[] = "[Gipnoz]" // description
new const zclass_model[] = "sirenzmb" // model
new const zclass_clawmodel[] = "sirens.mdl" // claw model
new const zclass_ring_sprite[] = "sprites/zombieplay/shockwave.spr" // ring sprite
new const zclass_screamsounds[][] = { "zombieplay/shaman/siren_scream.wav" } // scream sound
new const g_shaman_Infect_Sound[][] =    
{    
    "zombieplay/shaman/infect.wav" ,
    "zombieplay/shaman/infect_021.wav"    
}  
new const pain_shaman_sound[] = "zombieplay/hunter/pain_021.wav"
new const pain_shaman_sound2[] = "zombieplay/hunter/pain_011.wav"
new const death_shaman_sound[] = "zombieplay/hunter/die_02.wav"
new KNOCKBOMB_SHAMAN[] = "models/zp/grenade/bomb_shamancso.mdl"

// Scream ring color        R    G    B
new zclass_ring_colors[3] = {    255,    10,    0    }

const zclass_health = 3000 // health
const zclass_speed = 235 // speed

const Float:zclass_gravity = 0.80 // gravity
const Float:zclass_knockback =  0.40 // knockback

/*===============================================================================
=
Customization ends here! Yes, that's it. Editing anything beyond
here is not officially supported. Proceed at your own risk...
================================================================================
=*/

// Variables
new g_ishamanZID, g_iMaxPlayers, g_msgSayText, g_msgScreenFade, g_msgScreenShake,
g_msgBarTime, g_sprRing

// Arrays
new g_iPlayerTaskTimes[33]

// Cvar pointers
new cvar_screammode, cvar_duration, cvar_screamdmg, cvar_startime, cvar_reloadtime,
cvar_radius, cvar_damagemode, cvar_slowdown

// Cached cvars
new g_iCvar_ScreamMode, g_iCvar_ScreamDuration, g_iCvar_ScreamDmg,
g_iCvar_ScreamStartTime, Float:g_flCvar_ReloadTime, Float:g_flCvar_Radius,
g_iCvar_DamageMode, Float:g_flCvar_ScreamSlowdown

// Bools
new bool:g_bIsConnected[33], bool:g_bIsAlive[33], bool:g_bInScreamProcess[33],
bool:g_bCanDoScreams[33], bool:g_bKilledByScream[33], bool:g_bDoingScream[33],
bool:g_bRoundEnding

// Some constants
const FFADE_IN =         0x0000
const GIB_NEVER =        0
const UNIT_SECOND =         (1<<12)
const TASK_SCREAM =        37729
const TASK_RELOAD =        55598
const TASK_SCREAMDMG =        48289
const NADE_TYPE_INFECTION =     1111

// Plug info.
#define PLUG_VERSION "0.1"
#define PLUG_AUTH "meTaLiCroSS"

// Macros
#define is_user_valid_alive(%1)     (1 <= %1 <= g_iMaxPlayers && g_bIsAlive[%1])
#define is_user_valid_connected(%1)     (1 <= %1 <= g_iMaxPlayers && g_bIsConnected[%1])
#define zp_get_grenade_type(%1)        (entity_get_int(%1, EV_INT_flTimeStepSound))

/*===============================================================================
=
[Init, CFG and Precache]
================================================================================
=*/

public plugin_init()
{
    // Plugin Info
    register_plugin("[CSO:Shaman Zombie]", PLUG_VERSION, PLUG_AUTH)
        
    // Main events
    register_event("HLTV", "event_RoundStart", "a", "1=0", "2=0")
    register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1")
    
    // Main messages
    register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")

    register_event("DeathMsg","Death_Zombie","a")
    RegisterHam(Ham_TakeDamage, "player", "CPlayer__TakeDamage");
    
    // Fakemeta Forwards
    register_forward(FM_CmdStart, "fw_CmdStart")
    
    // Hamsandwich Forward
    RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
    RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
    
    // Cvars
    cvar_screammode = register_cvar("zp_shaman_mode", "0")
    cvar_duration = register_cvar("zp_shaman_scream_duration", "3")
    cvar_screamdmg = register_cvar("zp_shaman_scream_damage", "1.5")
    cvar_startime = register_cvar("zp_shaman_scream_start_time", "1")
    cvar_reloadtime = register_cvar("zp_shaman_scream_reload_time", "30.0")
    cvar_radius = register_cvar("zp_shaman_scream_radius", "250.0")
    cvar_damagemode = register_cvar("zp_shaman_damage_mode", "0")
    cvar_slowdown = register_cvar("zp_shaman_damage_slowdown", "0.4")
    
    static szCvar[30]
    formatex(szCvar, charsmax(szCvar), "v%s by %s", PLUG_VERSION, PLUG_AUTH)
    register_cvar("g_zclass_shaman", szCvar, FCVAR_SERVER|FCVAR_SPONLY)
    
    // Vars
    g_iMaxPlayers = get_maxplayers()
    g_msgBarTime = get_user_msgid("BarTime")
    g_msgSayText = get_user_msgid("SayText")
    g_msgScreenFade = get_user_msgid("ScreenFade")
    g_msgScreenShake = get_user_msgid("ScreenShake")
}

public plugin_cfg()
{
    cache_cvars()
}

public plugin_precache()
{
    g_ishamanZID = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)    

    precache_model(KNOCKBOMB_SHAMAN)    

    g_sprRing = precache_model(zclass_ring_sprite)

    for(new i = 0; i < sizeof zclass_screamsounds; i++) precache_sound(zclass_screamsounds[i])
    precache_sound(pain_shaman_sound[0])
    precache_sound(pain_shaman_sound2[0])
    new i
    for(i = 0; i < sizeof g_shaman_Infect_Sound; i++) precache_sound(g_shaman_Infect_Sound[i])
    precache_sound(death_shaman_sound[0])
}

public event_RoundStart()
{
    cache_cvars()
    g_bRoundEnding = false
}

public message_DeathMsg(msg_id, msg_dest, id)
{
    static iAttacker, iVictim
    
    // Get attacker and victim
    iAttacker = get_msg_arg_int(1)
    iVictim = get_msg_arg_int(2)
    
    // Non-player attacker or self kill
    if(!is_user_connected(iAttacker) || iAttacker == iVictim)
        return PLUGIN_CONTINUE
        
    // Killed by shaman scream
    if(g_bKilledByScream[iVictim])
        set_msg_arg_string(4, "shaman scream")
        
    return PLUGIN_CONTINUE
}

public client_putinserver(id)
{
    g_bIsConnected[id] = true
}

public client_disconnect(id)
{
    g_bIsAlive[id] = false
    g_bIsConnected[id] = false
}

public fw_PlayerSpawn_Post(id)
{
    if(!is_user_alive(id)) return HAM_IGNORED

    g_bIsAlive[id] = true

    stop_scream_task(id)

    if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_ishamanZID)
        g_bCanDoScreams[id] = true
    else
        g_bCanDoScreams[id] = false
        g_iPlayerTaskTimes[id] = 0

    remove_task(id+TASK_RELOAD)
    remove_task(id+TASK_SCREAMDMG)
    
    return HAM_IGNORED
}

public fw_PlayerKilled(victim, attacker, shouldgib)
{
    // Player victim
    if(is_user_valid_connected(victim))
    {
        // Victim is not alive
        g_bIsAlive[victim] = false
        
        // Reset player vars and tasks
        stop_scream_task(victim)
        
        g_bCanDoScreams[victim] = false
        g_iPlayerTaskTimes[victim] = 0
        
        remove_task(victim+TASK_RELOAD)
        remove_task(victim+TASK_SCREAMDMG)
        
        return HAM_HANDLED
    }
    
    return HAM_IGNORED
}

public fw_CmdStart(id, handle, random_seed)
{
    // Not alive
    if(!is_user_alive(id))
        return FMRES_IGNORED;
    
    // Isn't a zombie?
    if(!zp_get_user_zombie(id) || zp_get_user_nemesis(id))
        return FMRES_IGNORED;
        
    // Invalid class id
    if(zp_get_user_zombie_class(id) != g_ishamanZID)
        return FMRES_IGNORED;
        
    // Get user old and actual buttons
    static iInUseButton, iInUseOldButton
    iInUseButton = (get_uc(handle, UC_Buttons) & IN_USE)
    iInUseOldButton = (get_user_oldbutton(id) & IN_USE)
    
    // Pressing +use button
    if(iInUseButton)
    {
        // Last used button isn't +use, i need to
        // do this, because i call this "only" 1 time
        if(!iInUseOldButton && g_bCanDoScreams[id] && !g_bDoingScream[id] && !g_bRoundEnding)
        {
            // A bar appears in his screen
            message_begin(MSG_ONE, g_msgBarTime, _, id)
            write_byte(g_iCvar_ScreamStartTime) // time
            write_byte(0) // unknown
            message_end()
            
            // Update bool
            g_bInScreamProcess[id] = true
            
            // Next scream time
            set_task(g_iCvar_ScreamStartTime + 0.2, "task_do_scream", id+TASK_SCREAM)
            
            return FMRES_HANDLED
        }
    }
    else
    {
        // Last used button it's +use
        if(iInUseOldButton && g_bInScreamProcess[id])
        {
            // Stop scream main task
            stop_scream_task(id)
            
            return FMRES_HANDLED
        }
    }
    
    return FMRES_IGNORED
}

public task_do_scream(id)
{
    // Normalize task
    id -= TASK_SCREAM
    
    // Do scream sound
    emit_sound(id, CHAN_VOICE, zclass_screamsounds[random_num(0, sizeof zclass_screamsounds - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
    
    // Block screams
    g_bCanDoScreams[id] = false
    
    // Reload task
    set_task(g_flCvar_ReloadTime, "task_reload_scream", id+TASK_RELOAD)
    
    // Scream damage task
    set_task(0.1, "task_scream_process", id+TASK_SCREAMDMG, _, _, "b")
}

public task_reload_scream(id)
{
    // Normalize taks
    id -= TASK_RELOAD
    
    // Can do screams again
    g_bCanDoScreams[id] = true
    
    // Message
    client_printcolor(id, "/g[ZP] /yСпособность /g^"[Колдовать]^"/y | Кнопка /g[E]/y")
}

public task_scream_process(id)
{
    // Normalize task
    id -= TASK_SCREAMDMG
    
    // Time exceed
    if(g_iPlayerTaskTimes[id] >= (g_iCvar_ScreamDuration*10) || g_bRoundEnding)
    {
        // Remove player task
        remove_task(id+TASK_SCREAMDMG)
        
        // Reset task times count
        g_iPlayerTaskTimes[id] = 0
        
        return;
    }
    
    // Update player task time
    g_iPlayerTaskTimes[id]++
    
    // Get player origin
    static Float:flOrigin[3]
    entity_get_vector(id, EV_VEC_origin, flOrigin)
    
    // Collisions
    static iVictim
    iVictim = -1
    
    // Vector var
    static Float:flVictimOrigin[3]
    
    // A ring effect
    engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, flOrigin, 0)
    write_byte(TE_BEAMCYLINDER) // TE id
    engfunc(EngFunc_WriteCoord, flOrigin[0]) // x
    engfunc(EngFunc_WriteCoord, flOrigin[1]) // y
    engfunc(EngFunc_WriteCoord, flOrigin[2]) // z
    engfunc(EngFunc_WriteCoord, flOrigin[0]) // x axis
    engfunc(EngFunc_WriteCoord, flOrigin[1]) // y axis
    engfunc(EngFunc_WriteCoord, flOrigin[2] + g_flCvar_Radius) // z axis
    write_short(g_sprRing) // sprite
    write_byte(0) // startframe
    write_byte(0) // framerate
    write_byte(10) // life
    write_byte(25) // width
    write_byte(0) // noise
    write_byte(zclass_ring_colors[0]) // red
    write_byte(zclass_ring_colors[1]) // green
    write_byte(zclass_ring_colors[2]) // blue
    write_byte(200) // brightness
    write_byte(0) // speed
    message_end()
    
    // Screen effects for him self
    screen_effects(id)
    
    // Do scream effects
    while((iVictim = find_ent_in_sphere(iVictim, flOrigin, g_flCvar_Radius)) != 0)
    {
        // Non-player entity
        if(!is_user_valid_connected(iVictim))
        {
            // Validation check
            if(is_valid_ent(iVictim))
            {
                // Get entity classname
                static szClassname[33]
                entity_get_string(iVictim, EV_SZ_classname, szClassname, charsmax(szClassname))
                
                // It's a grenade, and isn't an Infection Bomb
                if(equal(szClassname, "grenade") && zp_get_grenade_type(iVictim) != NADE_TYPE_INFECTION)
                {
                    // Get grenade origin
                    entity_get_vector(iVictim, EV_VEC_origin, flVictimOrigin)
                    
                    // Do a good effect
                    engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, flVictimOrigin, 0)
                    write_byte(TE_PARTICLEBURST) // TE id
                    engfunc(EngFunc_WriteCoord, flVictimOrigin[0]) // x
                    engfunc(EngFunc_WriteCoord, flVictimOrigin[1]) // y
                    engfunc(EngFunc_WriteCoord, flVictimOrigin[2]) // z
                    write_short(45) // radius
                    write_byte(108) // particle color
                    write_byte(10) // duration * 10 will be randomized a bit
                    message_end()
                    
                    // Remove it
                    remove_entity(iVictim)
                }
            }
            
            continue;
        }
            
        // Not alive, zombie or with Godmode
        if(!g_bIsAlive[iVictim] || zp_get_user_zombie(iVictim) || get_user_godmode(iVictim))
            continue;
            
        // Screen effects for victims
        screen_effects(iVictim)
            
        // Get scream mode
        switch(g_iCvar_ScreamMode)
        {
            // Do damage
            case 0:
            {
                // Get human health
                static iHealth
                iHealth = get_user_health(iVictim)
                
                // It's going to die and can be infected?
                if((iHealth - g_iCvar_ScreamDmg) <= 0 && g_iCvar_DamageMode)
                {
                    // Can be infected?
                    if(zp_infect_user(iVictim, id, 0, 1))
                        continue
                }
                
                // It's going to die
                if(iHealth - g_iCvar_ScreamDmg <= 0)
                {
                    // Be infected when it's going to die
                    if(g_iCvar_DamageMode /* == 1*/)
                    {
                        // Returns 1 on sucess...
                        if(zp_infect_user(iVictim, id, 0, 1))
                            continue
                    }
    
                    // Kill it
                    scream_kill(iVictim, id)
                    
                    continue
                }
                
                // Do fake damage
                set_user_health(iVictim, iHealth - g_iCvar_ScreamDmg)
                
                // Scream slowdown, first should be enabled
                if(g_flCvar_ScreamSlowdown > 0.0)
                {
                    // Get his current velocity vector
                    static Float:flVelocity[3]
                    get_user_velocity(iVictim, flVelocity)
                    
                    // Multiply his velocity by a number
                    xs_vec_mul_scalar(flVelocity, g_flCvar_ScreamSlowdown, flVelocity)
                    
                    // Set his new velocity vector
                    set_user_velocity(iVictim, flVelocity)    
                }
            }
            
            // Instantly Infect
            case 1:
            {
                // Can be infected?
                if(!zp_infect_user(iVictim, id, 0, 1))
                {
                    // Kill it
                    scream_kill(iVictim, id)
                }
            }
            
            // Instantly Kill
            case 2:
            {
                // Kill it
                scream_kill(iVictim, id)
            }
        }
            
    }
}

public zp_user_infected_post(id, infector)
{
    // It's the selected zombie class
    if(zp_get_user_zombie_class(id) == g_ishamanZID && !zp_get_user_nemesis(id))
    {
        // Array
        g_bCanDoScreams[id] = true
        
        // Message
        client_printcolor(id, "/g[ZP] /yСпособность /g[Колдовать]/y | Кнопка /g^"[E]^"/y для использования")

        emit_sound(id, CHAN_VOICE, g_shaman_Infect_Sound[random(sizeof g_shaman_Infect_Sound)],  VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    }
}

public zp_user_humanized_post(id)
{
    // Reset player vars and tasks
    stop_scream_task(id)
    
    g_bCanDoScreams[id] = false
    g_iPlayerTaskTimes[id] = 0
    
    remove_task(id+TASK_RELOAD)
    remove_task(id+TASK_SCREAMDMG)
}

public zp_round_ended(winteam)
{
    // Update bool
    g_bRoundEnding = true
    
    // Make a loop
    static id
    for(id = 1; id <= g_iMaxPlayers; id++)
    {
        // Valid connected
        if(is_user_valid_connected(id))
        {
            // Remove mainly tasks
            stop_scream_task(id)
            remove_task(id+TASK_RELOAD)
        }
    }
}

stop_scream_task(id)
{
    // Remove the task
    if(task_exists(id+TASK_SCREAM))
    {
        remove_task(id+TASK_SCREAM)
    
        // Remove screen's bar
        message_begin(MSG_ONE, g_msgBarTime, _, id)
        write_byte(0) // time
        write_byte(0) // unknown
        message_end()
        
        // Update bool
        g_bInScreamProcess[id] = false
    }
}

screen_effects(id)
{
    // Screen Fade
    message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, _, id)
    write_short(UNIT_SECOND*1) // duration
    write_short(UNIT_SECOND*1) // hold time
    write_short(FFADE_IN) // fade type
    write_byte(200) // r
    write_byte(0) // g
    write_byte(0) // b
    write_byte(125) // alpha
    message_end()
    
    // Screen Shake
    message_begin(MSG_ONE_UNRELIABLE, g_msgScreenShake, _, id)
    write_short(UNIT_SECOND*5) // amplitude
    write_short(UNIT_SECOND*1) // duration
    write_short(UNIT_SECOND*5) // frequency
    message_end()
}

cache_cvars()
{
    g_iCvar_ScreamMode = get_pcvar_num(cvar_screammode)
    g_iCvar_ScreamDuration = get_pcvar_num(cvar_duration)
    g_iCvar_ScreamDmg = get_pcvar_num(cvar_screamdmg)
    g_iCvar_ScreamStartTime = get_pcvar_num(cvar_startime)
    g_iCvar_DamageMode = get_pcvar_num(cvar_damagemode)
    g_flCvar_ReloadTime = floatmax(g_iCvar_ScreamDuration+0.0, get_pcvar_float(cvar_reloadtime))
    g_flCvar_Radius = get_pcvar_float(cvar_radius)
    g_flCvar_ScreamSlowdown = get_pcvar_float(cvar_slowdown)
}

scream_kill(victim, attacker)
{
    // To use later in DeathMsg event
    g_bKilledByScream[victim] = true
    
    // Do kill
    ExecuteHamB(Ham_Killed, victim, attacker, GIB_NEVER)
    
    // We don't need this
    g_bKilledByScream[victim] = false
}

stock client_printcolor(id, const input[], any:...)
{
    static iPlayersNum[32], iCount; iCount = 1
    static szMsg[191]
    
    vformat(szMsg, charsmax(szMsg), input, 3)
    
    replace_all(szMsg, 190, "/g", "^4") // green txt
    replace_all(szMsg, 190, "/y", "^1") // orange txt
    replace_all(szMsg, 190, "/ctr", "^3") // team txt
    replace_all(szMsg, 190, "/w", "^0") // team txt
    
    if(id) iPlayersNum[0] = id
    else get_players(iPlayersNum, iCount, "ch")
        
    for (new i = 0; i < iCount; i++)
    {
        if (g_bIsConnected[iPlayersNum[i]])
        {
            message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, iPlayersNum[i])
            write_byte(iPlayersNum[i])
            write_string(szMsg)
            message_end()
        }
    }
}

public CPlayer__TakeDamage(id, iVictim, iInflictor, iAttacker, Float:flDamage, bitsDamage)
{
    if (zp_get_user_zombie_class(id) == g_ishamanZID && zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !zp_get_user_survivor(id))
    {
        new rand = random_num(1,2)
        switch(rand)
          {
            case 1: emit_sound(id, CHAN_WEAPON, pain_shaman_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW)
            case 2: emit_sound(id, CHAN_WEAPON, pain_shaman_sound2[0], 1.0, ATTN_NORM, 0, PITCH_LOW)
        }
    }
}

public Death_Zombie(id)
{
    new victim=read_data(2)

    if(zp_get_user_zombie(victim) && zp_get_user_zombie_class(victim) == g_ishamanZID && !zp_get_user_nemesis(victim))
    {
        emit_sound(id, CHAN_WEAPON, death_shaman_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW)            
    }
}

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) == g_ishamanZID && !zp_get_user_nemesis(id))
    {
        entity_set_string(id, EV_SZ_viewmodel, KNOCKBOMB_SHAMAN)
    }

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

}


Заранее благодарю за помощь!
Прикрепленные файлы:
Прикрепленный файл  classess.rar ( 11,92 килобайт ) Кол-во скачиваний: 5
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: