Проблем относно зомби клас Revenant ICE

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
The Pain
Извън линия
Потребител
Потребител
Мнения: 91
Регистриран на: 06 Дек 2021, 17:10
Се отблагодари: 18 пъти
Получена благодарност: 6 пъти

Проблем относно зомби клас Revenant ICE

Мнение от The Pain » 03 Мар 2022, 22:49

Здравейте отново, проблемът е следният - (когато Human е в slow ефекта на зомбито и след това го инфектират и веднага преди да е преминал си вземе антидот, ефекта не спира а остава до края на рунда като брояча не брои а си седи на някакво число примерно 11 sec) От доста време се мъча да го разреша обаче не се получава, не знам защо прави този проблем, не се очудвам кой знае колко, тъй като зомбитата с специални ефекти/abilities са много бъгави, но играчите в моя сървър се оплакват а зомбито е доста интересно и e приятно за игра с него ..... Ако може някой да помогне с кода .......

Код за потвърждение: Избери целия код

/*================================================================================
    
    ---------------------------------------
    -*- [ZP] Class Zombie: Revenant Ice -*-
    ---------------------------------------
    
    This plugin is part of Zombie Plague Mod and is distributed under the
    terms of the GNU General Public License. Check ZP_ReadMe.txt for details.
    
================================================================================*/

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#include <cstrike>
#include <xs>
#include <cromchat>

new const ball_name[] = "paralize_ball"
new const ball_model[] = "models/w_hiddentail2.mdl"
new const ball_soundtouch[] = { "warcraft3/frostnova.wav" }

new const zclass_name[] = { "Revenant Ice Zombie" } // name
new const zclass_info[] = { "\w[\rV.I.P\w] Press \w[\rG\w]" } // description
new const zclass_model[] = { "revenant_ice" } // model
new const zclass_clawmodel[] = { "v_revenant_ice.mdl" } // claw model
const zclass_health = 5700 // health
const zclass_speed = 265 // speed
const Float:zclass_gravity = 0.7 // gravity
const Float:zclass_knockback = 1.0 // knockback
new const v_zombie_bomb_model[64] = "revenant_ice"

new g_CurWeapon[33], g_bombmodelwpn[64]

#define OFFSET_MODELINDEX 491
#define OFFSET_LINUX 5 

new index, defaultindex

new g_zclassparalize
new cvar_paralizedelay , cvar_paralizevelocity  , cvar_paralizeballhealth , cvar_paralizeballparalizetime
new sTrail , g_touchs[512] , g_can[33] , g_paralizen[33]

new const WeaponNames[][] =
{
        "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
        "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
        "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
        "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
        "weapon_ak47", "weapon_knife", "weapon_p90"
}

public plugin_init()
{
    register_plugin("[ZP] Zombie Class: Revenant Ice", "1.0", "=), LARS-BLOODLIKER")

    cvar_paralizedelay = register_cvar("zp_classparalize_delay","15")
    cvar_paralizevelocity = register_cvar("zp_classparalizeball_velocity","1200")
    cvar_paralizeballhealth = register_cvar("zp_classparalizeball_health","5")
    cvar_paralizeballparalizetime = register_cvar ( "zp_classparalizeball_paralizetime", "7.0" )

    register_touch(ball_name, "worldspawn",        "touchWorld")
    register_touch(ball_name, "func_wall",            "touchWorld")
    register_touch(ball_name, "func_door",            "touchWorld")
    register_touch(ball_name, "func_door_rotating", "touchWorld")
    register_touch(ball_name, "func_wall_toggle",    "touchWorld")
    register_touch(ball_name, "func_breakable",    "touchWorld")
    register_touch(ball_name, "player",            "touchPlayer")
    register_think(ball_name,"ball_think")

    register_clcmd("drop","paralize_cmd")
    register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
    register_forward(FM_PlayerPreThink, "fw_PreThink")

    RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")

    register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1")
    
    for(new i = 1; i < sizeof WeaponNames; i++)
    if(WeaponNames[i][0]) RegisterHam(Ham_Item_Deploy, WeaponNames[i], "fw_Weapon_Deploy_Post", 1)

    RegisterHam(Ham_Player_Duck, "player", "Player_Duck", 1)
}

public plugin_precache()
{
    precache_model(ball_model)
    sTrail = precache_model("sprites/laserbeam.spr")

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

    formatex(g_bombmodelwpn, charsmax(g_bombmodelwpn), "models/zombie_plague/v_bomb_%s.mdl", v_zombie_bomb_model)
    engfunc(EngFunc_PrecacheModel, g_bombmodelwpn)

    index = precache_model("models/player/revenant_ice/revenant_ice.mdl")
        defaultindex = precache_model("models/player.mdl")
}

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,"Recover in %d seconds",g_can[id])
        return PLUGIN_HANDLED;
    }

    static Float:origin[3], Float:angles[3], Float:v_forward[3], Float:v_right[3], Float:v_up[3], Float:gun_position[3], Float:player_origin[3], Float:player_view_offset[3];
    static Float:OriginX[3]
    pev(id, pev_v_angle, angles);
    pev(id, pev_origin, OriginX);
    engfunc(EngFunc_MakeVectors, angles);

    global_get(glb_v_forward, v_forward);
    global_get(glb_v_right, v_right);
    global_get(glb_v_up, v_up);

    //m_pPlayer->GetGunPosition( ) = pev->origin + pev->view_ofs
    pev(id, pev_origin, player_origin);
    pev(id, pev_view_ofs, player_view_offset);
    xs_vec_add(player_origin, player_view_offset, gun_position);

    xs_vec_mul_scalar(v_forward, 13.0, v_forward);
    xs_vec_mul_scalar(v_right, 0.0, v_right);
    xs_vec_mul_scalar(v_up, 5.0, v_up);

    xs_vec_add(gun_position, v_forward, origin);
    xs_vec_add(origin, v_right, origin);
    xs_vec_add(origin, v_up, origin);

    new Float:StartOrigin[3]
            
    StartOrigin[0] = origin[0];
    StartOrigin[1] = origin[1];
    StartOrigin[2] = origin[2];


    new Float:fVelocity[3] , Float:flOrigin[3] , Float:flAngle[3]
    pev(id,pev_origin,flOrigin)
    pev(id,pev_angles,flAngle)

    new ball = create_entity("info_target")
    
    if (!ball) return PLUGIN_HANDLED

    g_touchs[ball] = 0

    entity_set_string(ball, EV_SZ_classname, ball_name)
    
    entity_set_model(ball, ball_model)
    
    entity_set_origin(ball, StartOrigin)
    
    entity_set_vector(ball, EV_VEC_angles, flAngle)
    
    new Float:MinBox[3] = {-1.0, -1.0, -1.0}
    new Float:MaxBox[3] = {1.0, 1.0, 1.0}
    entity_set_vector(ball, EV_VEC_mins, MinBox)
    entity_set_vector(ball, EV_VEC_maxs, MaxBox)
    
    entity_set_int(ball, EV_INT_solid, SOLID_SLIDEBOX)
    
    entity_set_int(ball, EV_INT_movetype, MOVETYPE_BOUNCEMISSILE)
    
    entity_set_edict(ball, EV_ENT_owner, id)
    
    entity_set_int(ball, EV_INT_effects, EF_BRIGHTLIGHT)
    
    VelocityByAim(id, get_pcvar_num(cvar_paralizevelocity ), fVelocity)
    entity_set_vector(ball , EV_VEC_velocity, fVelocity)

    fm_set_rendering(ball, kRenderFxGlowShell,255, 255, 255, kRenderNormal, 16)
    
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    write_byte(TE_BEAMFOLLOW) // Temporary entity ID
    write_short(ball) // Entity
    write_short(sTrail) // Sprite index
    write_byte(10) // Life
    write_byte(3) // Line width
    write_byte(100) // Red
    write_byte(255) // Green
    write_byte(255) // Blue
    write_byte(255) // Alpha
    message_end() 

    UTIL_PlayPlayerAnimation(id,10)
    UTIL_PlayWeaponAnimation(id,8)

    g_can[id] = get_pcvar_num(cvar_paralizedelay)
    set_task(1.0,"ability_zero",id)

    entity_set_float(ball, EV_FL_health , get_pcvar_float(cvar_paralizeballhealth))

    entity_set_float(ball, EV_FL_nextthink, get_gametime() + 0.1) 
    
    return PLUGIN_HANDLED;
}

public touchWorld(ball, world) {

    emit_sound(ball, CHAN_WEAPON, ball_soundtouch, 1.0, ATTN_NORM, 0, PITCH_NORM)
    g_touchs[ball] += 1
    if(g_touchs[ball] == get_pcvar_num(cvar_paralizeballhealth)) remove_entity(ball)
    
    return PLUGIN_HANDLED
}

public touchPlayer(ball, player) {
    CC_SendMessage(0, "&x04[Revenant ICE] &x03You are trapped in %d",player)
    remove_task(player)
    paralize(player)
    //set_task(get_pcvar_float(cvar_paralizeballparalizetime),"unparalize_player",player)
    
    return PLUGIN_HANDLED
}

public event_round_start()
{
    new iEnt = FM_NULLENT;
    while( (iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", ball_name)) > 0 )
    {
        engfunc(EngFunc_RemoveEntity,iEnt)
    }    

    for(new i;i<=32;i++)
    {
        if(g_paralizen[i]) fm_set_rendering(i)
        g_can[i] = 0
        g_paralizen[i] = 0
        remove_task(i)
    }
}

public ball_think(ball)
{
    if(!is_valid_ent(ball))
        return;

    new Float:oldangles[3],Float:angles[3]
    pev(ball,pev_angles,oldangles)
    angles[0] = oldangles[0] + random_float(20.0,100.0)
    angles[1] = oldangles[1] + random_float(10.0,80.0)
    angles[2] = oldangles[2] + random_float(10.0,80.0)
    set_pev(ball,pev_angles,angles)

    new Float:Velocity[3]
    pev(ball,pev_velocity,Velocity)

    if(Velocity[0] < 1.0 && Velocity[2] < 1.0 && Velocity[1] < 1.0) remove_entity(ball)
       
    if(is_valid_ent(ball)) entity_set_float(ball, EV_FL_nextthink, get_gametime() + 0.1) 

}

public paralize(id)
{
    if(!is_user_alive(id) || zp_get_user_zombie(id))
        return;

    g_paralizen[id] = 1
    fm_set_rendering(id, kRenderFxGlowShell,100, 255, 255, kRenderNormal, 16)
    set_task(get_pcvar_float(cvar_paralizeballparalizetime),"unparalize_player",id)
}

public unparalize_player(id)
{
    if(!is_user_alive(id) || zp_get_user_zombie(id))
        return;

    g_paralizen[id] = 0
    fm_set_rendering(id)
}

public remove_values(id)
{
    remove_task(id)
    g_can[id] = 0
}

public ability_zero(id) 
{
    g_can[id] -= 1
    if(!g_can[id]) client_print(id,print_center,"Ability is active!")
    if(g_can[id]) set_task(1.0,"ability_zero",id)
}

public fw_PreThink(id)
{
    if( !is_user_alive(id) || zp_get_user_zombie(id) || !g_paralizen[id])
        return PLUGIN_CONTINUE;

    set_pev( id, pev_button, pev(id,pev_button) & ~IN_ATTACK );

    set_pev(id, pev_maxspeed, 0.0)        

    new Float:vel[3]
    set_pev(id,pev_velocity,vel)

    return PLUGIN_HANDLED
}

public zp_user_humanized_post(id)
{
    fm_set_user_model_index(id, defaultindex)

     remove_values(id)
}
public fw_PlayerKilled(id, attacker, shouldgib) remove_values(id)
public client_connect(id)  remove_values(id)

public zp_user_infected_post(id) 
{
    set_wpnmodel(id)
    if((zp_get_user_zombie_class(id) == g_zclassparalize) && (zp_get_user_zombie(id)))
    {
        fm_set_user_model_index(id, index)
    }
    remove_values(id)
}

public zp_user_infected_pre(id) 
{ 
        if(!(get_user_flags(id) & ADMIN_RESERVATION)) 
    { 
            if(zp_get_user_next_class(id) == g_zclassparalize) 
        { 
                    zp_set_user_zombie_class(id, 0) 
                CC_SendMessage(id, "&x04[Revenant ICE] &x01This class is only for &x04[V.I.P's]")
                 CC_SendMessage(id, "&x04[Revenant ICE]&x04[V.I.P] &x01is free but you need 1300 kills")
            }     
        }     
} 

stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
    static Float:color[3]
    color[0] = float(r)
    color[1] = float(g)
    color[2] = float(b)
    
    set_pev(entity, pev_renderfx, fx)
    set_pev(entity, pev_rendercolor, color)
    set_pev(entity, pev_rendermode, render)
    set_pev(entity, pev_renderamt, float(amount))
}

stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
    set_pev(Player, pev_weaponanim, Sequence)
    
    message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
    write_byte(Sequence)
    write_byte(pev(Player, pev_body))
    message_end()
}

stock UTIL_PlayPlayerAnimation(const id, const Sequence , Float:frame = 1.0 , Float:framerate = 1.0)
{
    entity_set_int(id, EV_INT_sequence, Sequence)
    entity_set_int(id, EV_INT_gaitsequence, 1)
    entity_set_float(id, EV_FL_frame, frame)
    entity_set_float(id, EV_FL_framerate, framerate)
}

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

stock fm_cs_set_user_deaths(id, value)
{
    set_pdata_int(id, 444, value, 5)
}

stock fm_cs_get_user_team(id)
{
    return get_pdata_int(id, 114, 5);
}

public Event_CurrentWeapon(id) g_CurWeapon[id] = read_data(2)

public fw_Weapon_Deploy_Post(weapon_ent)
{
    static id; id = get_pdata_cbase(weapon_ent, 41, 4)

    static weaponid; weaponid = cs_get_weapon_id(weapon_ent)

    g_CurWeapon[id] = weaponid
    
    replace_weapon_models(id, weaponid)
}

public Player_Duck(id)
{
    if(zp_get_user_zombie_class(id) == g_zclassparalize && zp_get_user_zombie(id))
    {
           static button, ducking
           button = pev(id, pev_button)
        ducking = pev(id, pev_flags) & (FL_DUCKING | FL_ONGROUND) == (FL_DUCKING | FL_ONGROUND)

           if(button & IN_DUCK || ducking)
        {
            set_pev(id, pev_view_ofs, {0.0, 0.0, 20.0})   
           }
    }
}

set_wpnmodel(id)
{
    if(!is_user_alive(id)) return

    new wpn = get_user_weapon(id)

    if(wpn == CSW_HEGRENADE || wpn == CSW_FLASHBANG || wpn == CSW_SMOKEGRENADE)
    {
            set_pev(id, pev_viewmodel2, g_bombmodelwpn)
    }
}

replace_weapon_models(id, weaponid)
{
    if(zp_get_user_zombie_class(id) == g_zclassparalize && zp_get_user_zombie(id))
    {
        switch(weaponid)
        {
            case CSW_HEGRENADE:
            {
                set_pev(id, pev_viewmodel2, g_bombmodelwpn)
            }
            case CSW_SMOKEGRENADE:
            {
                set_pev(id, pev_viewmodel2, g_bombmodelwpn)
            }
            case CSW_FLASHBANG:
            {
                set_pev(id, pev_viewmodel2, g_bombmodelwpn)
            }
        }
    }
}

stock fm_set_user_model_index(id, value)
{
    set_pdata_int(id, OFFSET_MODELINDEX, value, OFFSET_LINUX)
}

  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Помощ в скриптирането”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 6 госта