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

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

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

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

Entity [ Block Player ]

Статус пользователя $@NyA
сообщение 12.2.2020, 19:39
Сообщение #1


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

Стаж: 18 лет

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

Прошу помощи запретить устанавливать Ентити модель на игроках
Способность Зомби.Установка Ентити только на потолок.Больше она некуда не ставиться.
Но почему-то нет запрета на игроках.
Все дела прилагаю.
Спасибо.


Функция установки модели
Код:
public create_barnacle(id)
{
    if (g_barnacleCount[id] > 0)
    {
        new origin[3], Float:fOrigin[3]
        get_user_origin(id, origin, 3)
        IVecFVec(origin, fOrigin)
        
        fOrigin[2] -= 2.0
        new const Float:direction[4][3] = {{5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}}
        new Float:temp[3]
        xs_vec_copy(fOrigin, temp)
        new i
        for (i = 0; i < 4; i++)
        {
            xs_vec_add(fOrigin, direction[i], temp)
            if (engfunc(EngFunc_PointContents, temp) != -1)
                break
        }
        
        if (i != 4)
            client_print(id, print_center, "Эту Ловушку нужно ставить на потолок !")
        else
        {
            fOrigin[2] += 2.0
            new ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocStr
ing,"info_target"))
        
            set_pev(ent,pev_classname, barnacle_class)
            engfunc(EngFunc_SetModel, ent, "models/zp_trap/zp_trap2.mdl")
         
            set_pev(ent, pev_iuser1, id)
         
            set_pev(ent, pev_mins, Float:{-16.0,-16.0, -36.0})
            set_pev(ent, pev_maxs, Float:{16.0,16.0,0.0})
            set_pev(ent, pev_size, Float:{-16.0,-16.0, -36.0,16.0,16.0,0.0})
            engfunc(EngFunc_SetSize, ent, Float:{-16.0,-16.0,-36.0}, Float:{16.0,16.0,0.0})
            
            set_pev(ent, pev_solid, SOLID_BBOX)
            set_pev(ent, pev_movetype, MOVETYPE_FLY)
        
            set_pev(ent, pev_health, get_pcvar_float(g_CvarHP) + HEALTH_OFFSET)
            set_pev(ent, pev_takedamage, 1.0)
        
            set_pev(ent, pev_dmg, 1.0)
        
            set_pev(ent, pev_maxspeed, 20.0)
        
            set_pev(ent,pev_flags, FL_MONSTER|FL_MONSTERCLIP)
        
            set_pev(ent, pev_origin, fOrigin)
            
            set_pev(ent, pev_animtime, 10.0)
            set_pev(ent, pev_framerate, 0.5)
            set_pev(ent, pev_sequence, idle3)
            set_pev(ent, pev_gaitsequence, idle3)
            
            set_pev(ent, pev_nextthink,get_gametime() + THINK_DELAY)
            
            g_barnacleCount[id]--

            client_print(id, print_center, "Осталось Ловушек : %d", g_barnacleCount[id])
        }
    }
    else
        client_print(id, print_center, "Больше нет Ловушек !")
}
 


Весь Код
Код:
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <engine>
#include <fun>
#include <xs>
#include <zombieplague>

#define TASK_COOLDOWN 27015
#define TASK_REMOVE_TRAP 37015

#define HEALTH_OFFSET 500
#define THINK_DELAY 0.1

enum
{
    idle1,
    idle2,
    idle3,
    flinch_sm,
    attack1,
    chewcycle,
    death
}

enum (+= 666)
{
    TASK_BOT_USE_SKILL
}

#define ID_BOT_USE_SKILL (taskid - TASK_BOT_USE_SKILL)

new const zclass_name[] = { "Отродие" } 
new const zclass_info[] = { "Ловушки" } 
new const zclass_model[] = { "zombie_zaraza" } 
new const zclass_clawmodel[] = { "v_cutit_nemesis.mdl" }
const zclass_health = 5000
const zclass_speed = 260
const Float:zclass_gravity = 0.8 
const Float:zclass_knockback = 1.0 

new const barnacle_class[] = "barnacle"
new g_mdl_gib_head

new g_CvarSpeed, g_CvarDamage, g_CvarHP, g_CvarInfect

new g_msgScreenFade

new g_barnacleCount[33]

new g_zheavy
new bool:can_make_trap[33]
new bool:player_trapped[33]

new const trap_string[] = "trap"
new const trap_model[] = "models/zp_trap/zp_trap.mdl"

new cvar_cooldown
new cvar_trap_hp
new cvar_trap_time

public plugin_init()
{
    register_plugin("[ZP] Zombie Class: Heavy", "1.2", "Dias")
    register_event("HLTV", "eventFreezeTimeStart", "a", "1=0", "2=0")
    register_event("ResetHUD", "new_round", "be")
    register_touch(trap_string, "*", "fw_touch")
    register_forward(FM_PlayerPreThink, "fw_think", 0);
        register_forward(FM_PlayerPreThink, "CmdStart")
    register_forward(FM_Think, "fwdThink")

    g_CvarSpeed = register_cvar("barnacle_speed", "20.0")
    g_CvarDamage = register_cvar("barnacle_damage", "30.0")
    g_CvarHP = register_cvar("barnacle_hp", "2000.0")
    g_CvarInfect = register_cvar("barnacle_infect", "1")

    register_logevent("logevent_round_start",2, "1=Round_Start")
    g_msgScreenFade = get_user_msgid("ScreenFade")

    cvar_register()
}

public cvar_register()
{
    cvar_cooldown = register_cvar("qz_cooldown", "25")
    cvar_trap_time = register_cvar("qz_trap_time", "15")
    cvar_trap_hp = register_cvar("qz_trap_hp", "2000")
}

public plugin_precache()
{
    g_zheavy = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, 
zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
 
   
    precache_model(trap_model)
    precache_model("models/zp_trap/zp_trap2.mdl")
    
    precache_sound("zp_trap/bcl_alert2.wav")
    precache_sound("zp_trap/bcl_chew1.wav")
    precache_sound("zp_trap/bcl_chew2.wav")
    precache_sound("zp_trap/bcl_chew3.wav")
    precache_sound("zp_trap/bcl_die1.wav" )
    precache_sound("zp_trap/bcl_die3.wav" )
    
    g_mdl_gib_head = precache_model("models/GIB_Skull.mdl")
}

public logevent_round_start()
{
    for (new id=1; id<33; id++)
    {
        if (!is_user_connected(id)) continue;
        if (is_user_bot(id))
        {
            if (task_exists(id+TASK_BOT_USE_SKILL)) remove_task(id+TASK_BOT_USE_
SKILL)
            set_task(float(random_num(5,15)), "bot_use_skill", id+TASK_BOT_USE_SKILL)
        }
    }
}

// bot use skill
public bot_use_skill(taskid)
{
    new id = ID_BOT_USE_SKILL
    if (!is_user_alive(id)) return;
    if (!is_user_bot(id) ||  !zp_get_user_zombie(id) || zp_get_user_nemesis(id) || zp_get_user_survivor(id
)) return;

        if (zp_get_user_zombie_class(id) == g_zheavy)

        switch(random_num(0,2))
        {
        case 0: create_trap(id)
        case 1: create_barnacle(id)
        }      
        
    if (task_exists(taskid)) remove_task(taskid)
    set_task(float(random_num(5,15)), "bot_use_skill", id+TASK_BOT_USE_SKILL)
}

public CmdStart(id)
{        
    new button = pev(id, pev_button)
    new oldbutton = pev(id, pev_oldbuttons)
    
    if (zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && (zp_get_user_zombie_class(id) == g_zheavy))
    {
        if(oldbutton & IN_RELOAD && !(button & IN_RELOAD))
        {
                        create_barnacle(id)
                }
        if(oldbutton & IN_USE && !(button & IN_USE))
        {
        if(can_make_trap[id])
        {
            create_trap(id)
            } else {
                print_chatColor(id, "\g[ Зомби Чума ] \tЛовушка будет доступна через \g%i секунд", get_pcvar_num(cvar_cooldown)) 
        }
        }
    }
    return FMRES_IGNORED
}

public fwdThink(ent)
{
    if (!pev_valid(ent))
        return
    static class[32]
    pev(ent, pev_classname, class, 31)
    if (equal(barnacle_class, class))
    {
        
        static Float:takedamage, Float:origin[3], Float:endPoint[3], Float:gamet
ime, tr, hit
        pev(ent, pev_takedamage, takedamage)
        if (pev(ent, pev_health) - HEALTH_OFFSET <= 0 && takedamage == DAMAGE_YES)
        {
            set_pev(ent, pev_animtime, 6.6)
            set_pev(ent,pev_framerate, 1.0)
            set_pev(ent,pev_sequence, death)
            
            set_pev(ent, pev_takedamage, DAMAGE_NO)
            set_pev(ent, pev_controller_0, 255)
            set_pev(ent, pev_nextthink, get_gametime() + 99999.0)
            
            set_pev(ent, pev_solid, SOLID_NOT)
            
            switch(random_num(0, 1))
            {
                case 0:
                    engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON, "zp_trap/bcl_die1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
                case 1:
                    engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON, "zp_trap/bcl_die3.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
            }
            
            pev(ent, pev_origin, origin)
            createGibs(origin)
            return            
        }
        else
        if (!pev(ent,pev_enemy) && takedamage == DAMAGE_YES)
        {
            
            pev(ent, pev_origin, origin)
            xs_vec_copy(origin, endPoint)
            endPoint[2]-=2048.0
            engfunc(EngFunc_TraceLine, origin, endPoint, DONT_IGNORE_MONSTERS, e
nt, tr)
            hit = get_tr2(tr, TR_pHit)
            if (is_user_alive(hit)  && !zp_get_user_zombie(hit))
            {
                set_pev(ent, pev_enemy, hit)
                set_pev(ent, pev_sequence, chewcycle)
                set_pev(ent, pev_gaitsequence, chewcycle)
                                screen_fade(hit)
                engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON, "zp_trap/bcl_alert2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
            }
            else
            if (!pev(ent, pev_controller_0))
            {
                get_tr2(tr, TR_vecEndPos, endPoint)
                set_pev(ent, pev_controller_0, 281 - floatround(255.0 / 1024.0 * (origin[2] - endPoint[2])))
            }
            free_tr2(tr)
                            
        }
        else
        if (takedamage == DAMAGE_YES)
        {
            static id, Float:distance, Float:flNextAttackTime
            id = pev(ent,pev_enemy)
            if (is_user_alive(id))
            {
                pev(ent, pev_origin, origin)
                pev(id, pev_origin, endPoint)
                distance = origin[2] - endPoint[2]
                if (distance > 100.0)
                {
                    endPoint[0] = origin[0]
                    endPoint[1] = origin[1]
                    endPoint[2] += get_pcvar_float(g_CvarSpeed)
                    set_pev(id, pev_origin, endPoint)
                    set_pev(ent, pev_controller_0, 261 - floatround(255.0 / 1024.0 * distance))
                }
                else
                {
                    if (get_pcvar_num(g_CvarInfect) && !(
                        zp_get_user_last_human(id) ||
                        zp_get_user_survivor(id) ||
                        zp_is_survivor_round() || 
                        zp_is_swarm_round()
                    ))
                    {
                        zp_infect_user(id, pev(ent, pev_iuser1), 0, 1)
                        release(ent)
                        
                    }
                    else
                    {
                        pev(ent, pev_fuser1, flNextAttackTime)
                        gametime = get_gametime()
                        if (flNextAttackTime <= gametime)
                        {
                            ExecuteHamB(Ham_TakeDamage, id, ent, pev(ent, pev_iu
ser1), get_pcvar_float(g_CvarDamage), DMG_GENERIC)
                            set_pev(ent, pev_fuser1, gametime + 1.0)
                            
                            switch(random_num(0, 2))
                            {
                                case 0:
                                    engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON,
 "zp_trap/bcl_chew1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
                                case 1:
                                    engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON,
 "zp_trap/bcl_chew2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
                                case 2:
                                    engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON,
 "zp_trap/bcl_chew3.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)    
                            }
                        }
                        if (pev(ent,pev_sequence) != attack1)
                        {
                            set_pev(ent,pev_sequence, attack1)
                            set_pev(ent,pev_gaitsequence, attack1)
                            set_pev(ent, pev_controller_0, 255)
                        }
                    }
                }
                set_pev(id, pev_velocity, Float:{0.0, 0.0, 0.0})
            }
            else
                release(ent)
            
        }
        set_pev(ent, pev_nextthink, get_gametime() + THINK_DELAY)
    }
}

public create_barnacle(id)
{
    if (g_barnacleCount[id] > 0)
    {
        new origin[3], Float:fOrigin[3]
        get_user_origin(id, origin, 3)
        IVecFVec(origin, fOrigin)
        
        fOrigin[2] -= 2.0
        new const Float:direction[4][3] = {{5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}}
        new Float:temp[3]
        xs_vec_copy(fOrigin, temp)
        new i
        for (i = 0; i < 4; i++)
        {
            xs_vec_add(fOrigin, direction[i], temp)
            if (engfunc(EngFunc_PointContents, temp) != -1)
                break
        }
        
        if (i != 4)
            client_print(id, print_center, "Эту Ловушку нужно ставить на потолок !")
        else
        {
            fOrigin[2] += 2.0
            new ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocStr
ing,"info_target"))
        
            set_pev(ent,pev_classname, barnacle_class)
            engfunc(EngFunc_SetModel, ent, "models/zp_trap/zp_trap2.mdl")
         
            set_pev(ent, pev_iuser1, id)
         
            set_pev(ent, pev_mins, Float:{-16.0,-16.0, -36.0})
            set_pev(ent, pev_maxs, Float:{16.0,16.0,0.0})
            set_pev(ent, pev_size, Float:{-16.0,-16.0, -36.0,16.0,16.0,0.0})
            engfunc(EngFunc_SetSize, ent, Float:{-16.0,-16.0,-36.0}, Float:{16.0,16.0,0.0})
            
            set_pev(ent, pev_solid, SOLID_BBOX)
            set_pev(ent, pev_movetype, MOVETYPE_FLY)
        
            set_pev(ent, pev_health, get_pcvar_float(g_CvarHP) + HEALTH_OFFSET)
            set_pev(ent, pev_takedamage, 1.0)
        
            set_pev(ent, pev_dmg, 1.0)
        
            set_pev(ent, pev_maxspeed, 20.0)
        
            set_pev(ent,pev_flags, FL_MONSTER|FL_MONSTERCLIP)
        
            set_pev(ent, pev_origin, fOrigin)
            
            set_pev(ent, pev_animtime, 10.0)
            set_pev(ent, pev_framerate, 0.5)
            set_pev(ent, pev_sequence, idle3)
            set_pev(ent, pev_gaitsequence, idle3)
            
            set_pev(ent, pev_nextthink,get_gametime() + THINK_DELAY)
            
            g_barnacleCount[id]--

            client_print(id, print_center, "Осталось Ловушек : %d", g_barnacleCount[id])
        }
    }
    else
        client_print(id, print_center, "Больше нет Ловушек !")
}

public eventFreezeTimeStart()
{
    static string_class[] = "classname"
    new ent = FM_NULLENT
    while ((ent = engfunc(EngFunc_FindEntityByString, ent, string_class, barnacl
e_class))) 
        set_pev(ent, pev_flags, FL_KILLME)
    new i
    for (i = 0; i < 33; i++)
        g_barnacleCount[i] = 0
}

public createGibs(Float:origin[3])
{
    message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    write_byte(TE_MODEL)
    engfunc(EngFunc_WriteCoord, origin[0])
    engfunc(EngFunc_WriteCoord, origin[1])
    engfunc(EngFunc_WriteCoord, origin[2]-40.0)
    write_coord(random_num(-20, 20))
    write_coord(random_num(-20, 20))
    write_coord(random_num(-20, 0))
    write_angle(random_num(0,360))
    write_short(g_mdl_gib_head)
    write_byte(0)
    write_byte(400)
    message_end()
}

public release(ent)
{
    new Float:origin[3], Float:endPoint[3], tr
    set_pev(ent, pev_enemy, 0)
                
    pev(ent, pev_origin, origin)
    xs_vec_copy(origin, endPoint)
    endPoint[2]-=2048.0
    engfunc(EngFunc_TraceLine, origin, endPoint, IGNORE_MONSTERS, ent, tr)
    
    get_tr2(tr, TR_vecEndPos, endPoint)
    free_tr2(tr)
    set_pev(ent, pev_controller_0, 281 - floatround(255.0 / 1024.0 * (origin[2] - endPoint[2])))
    
    set_pev(ent, pev_animtime, 10.0)
    set_pev(ent, pev_framerate, 0.5)
    set_pev(ent, pev_sequence, idle3)
    set_pev(ent, pev_gaitsequence, idle3)
    
    free_tr2(tr)
}

public new_round(id)
{
    new trap = find_ent_by_class(0, trap_string)
    remove_entity(trap)
    
    can_make_trap[id] = false
    player_trapped[id] = false
    
    set_user_maxspeed(id, -1.0)
    set_user_gravity(id, 1.0)
    
    remove_task(id+TASK_COOLDOWN)
    remove_task(id+TASK_REMOVE_TRAP)
}

public zp_user_infected_post(id, attacker)
{
    if(zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && zp_get_user_zombie_class(id) == g_zheavy)
    {
        remove_task(id+TASK_COOLDOWN)
        print_chatColor(id, "\g[ Зомби Чума ] \tНаземная Ловушка - \gE \tНастенная Ловушка - \gR") 
                g_barnacleCount[id] += 10
        can_make_trap[id] = true
    }
    
    if(player_trapped[id] == true)
    {
        player_trapped[id] = false
        
        new trap = find_ent_by_class(0, trap_string)
        remove_entity(trap)
        
        remove_task(id+TASK_REMOVE_TRAP)
    }
}

public create_trap(id)
{
    new Float:Origin[3]
    entity_get_vector(id, EV_VEC_origin, Origin)
    
    Origin[2] -= 35.0
    
    new trap = create_entity("info_target")
    entity_set_vector(trap, EV_VEC_origin, Origin)
    
    entity_set_float(trap, EV_FL_takedamage, 1.0)
    entity_set_float(trap, EV_FL_health, get_pcvar_float(cvar_trap_hp))
    
    entity_set_string(trap, EV_SZ_classname, trap_string)
    entity_set_model(trap, trap_model)    
    entity_set_int(trap, EV_INT_solid, 1)
    
    entity_set_byte(trap,EV_BYTE_controller1,125);
    entity_set_byte(trap,EV_BYTE_controller2,125);
    entity_set_byte(trap,EV_BYTE_controller3,125);
    entity_set_byte(trap,EV_BYTE_controller4,125);
    
    new Float:size_max[3] = {5.0,5.0,5.0}
    new Float:size_min[3] = {-5.0,-5.0,-5.0}
    entity_set_size(trap, size_min, size_max)    
    
    drop_to_floor(trap)
    
    can_make_trap[id] = false
    set_task(get_pcvar_float(cvar_cooldown), "reset_cooldown", id+TASK_COOLDOWN)
}

public reset_cooldown(taskid)
{
    new id = taskid - TASK_COOLDOWN
    if(is_user_alive(id) && zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zheavy)
    {
        if(can_make_trap[id] == false)
        {
            can_make_trap[id] = true
                print_chatColor(id, "\g[ Зомби Чума ] \tЛовушка Доступна") 
        }
    }    
}

public fw_touch(trap, id)
{
    if(!pev_valid(trap))
        return    
    
    if(is_user_alive(id) && !zp_get_user_zombie(id))
    {
                client_print(id, print_center, "Вы попали в Ловушку ! Подождите ...")
                screen_fade(id)

        new ent = find_ent_by_class(0, trap_string)
                entity_set_string(trap, EV_SZ_classname, trap_string)
                set_pev(ent, pev_sequence, 1)
                set_pev(ent, pev_animtime, 15.0)
                set_pev(ent, pev_framerate, 1.0)

        
        player_trapped[id] = true
        set_task(get_pcvar_float(cvar_trap_time), "remove_trap", id+TASK_REMOVE_TRAP)
    }
}

public remove_trap(taskid)
{
    new id = taskid - TASK_REMOVE_TRAP
    
    set_user_maxspeed(id, -1.0)
    set_user_gravity(id, 1.0)
    player_trapped[id] = false

    new trap = find_ent_by_class(0, trap_string)
    remove_entity(trap)
    
    remove_task(id+TASK_REMOVE_TRAP)
}

public spawn_post(id)
{
    if(is_user_alive(id))
    {
        player_trapped[id] = false 
    }
}  

public fw_think(id)
{
    if(is_user_alive(id) && player_trapped[id] == true)
    {
        set_user_maxspeed(id, 0.1)
        set_user_gravity(id, 10000.0)
    }
}

public screen_fade(id) {
    message_begin(MSG_ONE, g_msgScreenFade, {0,0,0}, id) 
    write_short(1<<12)
    write_short(1<<12)
    write_short(1<<12)
    write_byte(0)
    write_byte(200)
    write_byte(0)
    write_byte(20)
    message_end()
}

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


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


МультиМод CS
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: