Русское сообщество по скриптингу

ESP для живых игроков.

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

ESP для живых игроков.

Сообщение Sheigar » 13 май 2022, 19:23

Подскажите кодом как сделать ESP для живых игроков, чтобы все игроки были подсвечены квадратиками. Не понимаю плагин ESP Admin, убрал все if, но все равно для живого игрока не работает.Если нужен код, вот есть скачаный:

P.S. Мне не нужен плагин Admin ESP, просто подсветка игроков без всяких заморочек, спасибо кто поможет.


Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN             "Admin ESP"
#define VERSION         "0.2"
#define AUTHOR             "Kost & miRror"

#define OFFSET_TEAM        114

new bool:alive[33],
    bool:fperson[33],
    bool:admin_options[33]
    
new team_colors
[3][3] = {{0,0,0},{150,0,0},{0,0,150}}
new esp_colors[3][3] = {{0,255,0},{100,60,60},{60,60,100}}

new laser

public plugin_init
()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    register_clcmd
("say /esp", "esp_toggle")

    register_event("TextMsg", "spec_mode", "b", "2&#Spec_Mode")

    RegisterHam(Ham_Spawn, "player", "fw_Spawn", 1)
    RegisterHam(Ham_Killed, "player", "fw_Killed", 1)
    
    set_task
(0.1, "esp_timer", .flags = "b")
}

public plugin_precache()
{
    laser = precache_model("sprites/laserbeam.spr")
}

public client_putinserver(id)
{
    fperson[id]       = false
    alive
[id]           = false
    admin_options
[id] = bool:(get_user_flags(id) & ADMIN_MENU)
}

public client_disconnect(id)
{
    admin_options[id] = false
    alive
[id]           = false
}

public fw_Killed(victim)
{
    alive[victim] = false
}

public fw_Spawn(id)
{
    
    if
(is_user_alive(id))
        alive[id] = true
}

public esp_toggle(id)
{
    if (get_user_flags(id) & ADMIN_MENU)
    {
        admin_options[id] = !admin_options[id]
        
        client_print
(id, print_chat, "[Админ ЕСП] %s", admin_options[id] ? "Включен" : "Выключен")        
    
} else 
        client_print
(id, print_chat, "[Админ ЕСП] Вы не имеете доступа к данной команде")        
}

public spec_mode(id)
{
    new specMode[12]

    read_data(2, specMode, charsmax(specMode))

    fperson[id]= bool:equal(specMode,"#Spec_Mode4");
}

public esp_timer()
{
    static  Float:my_origin[3],  
            Float
:target_origin[3], 
            Float
:distance, width, 
            Float
:v_middle[3],
            Float:v_hitpoint[3], 
            Float
:distance_to_hitpoint, 
            Float
:scaled_bone_len, 
            Float
:v_bone_start[3],
            Float:v_bone_end[3],
            players[32], playersi[32],
            my_team, target_team, spec_id, num, s, numi, i

    get_players
(playersi, numi, "bch")

    for(--numi; numi>=0; numi--)
    {
        i = playersi[numi]
        
        spec_id 
= pev(i, pev_iuser2)
        
        if 
(!admin_options[i] || !fperson[i] || get_user_team(i) != 3 || !spec_id || !alive[spec_id])
            continue
        
        pev
(i, pev_origin, my_origin)
        my_team = get_pdata_int(spec_id, OFFSET_TEAM)    
        
        target_team 
= my_team == 2 ? 1 : 2
        
        get_players
(players, num, "ache", target_team==? "CT" : "TERRORIST")
        
        for
(--num; num>=0; num--)
        {
            s = players[num]

            pev(s, pev_origin, target_origin);
            distance = vector_distance(my_origin, target_origin);

            subVec(target_origin, my_origin, v_middle)

            engfunc(EngFunc_TraceLine, my_origin, target_origin, 1, -1, 0)
            get_tr2(0, TR_vecEndPos, v_hitpoint)
            
            distance_to_hitpoint 
= vector_distance(my_origin, v_hitpoint);
            if(distance_to_hitpoint == distance)
            {
                //Линия
                width = distance < 2040.0 ? ((255 - floatround(distance / 8.0)) / 4) : 1
                make_TE_BEAMENTPOINT
(i, target_origin, width, target_team);
            }
            else
            
{
                normalize(v_middle, v_bone_start, distance_to_hitpoint - 10.0);
                addVec(v_bone_start, my_origin);     // Начальная точка
                v_bone_start[2] += 17.5;             // Поправка взгляда
                copyVec(v_bone_start, v_bone_end);
                scaled_bone_len = distance_to_hitpoint / distance * 50.0;
                v_bone_end[2] -= scaled_bone_len; // Конечная точка

                width = 1
                
                
//Линия с боксом
                if(distance < 2040.0)
                    width = (255 - floatround(distance / 8.0)) / 4
                
                make_TE_BEAMENTPOINT
(i, v_bone_end, width, target_team)
                make_TE_BEAMPOINTS(i, target_team, v_bone_start, v_bone_end, floatround(scaled_bone_len))
            }
        }
    } 
}

normalize(Float:Vec[3],Float:Ret[3],Float:multiplier)
{
    new Float:len = vector_distance(Vec, Float:{0.0, 0.0, 0.0});
    copyVec(Vec,Ret)
    Ret[0] /= len; Ret[0] *= multiplier;
    Ret[1] /= len; Ret[1] *= multiplier;
    Ret[2] /= len; Ret[2] *= multiplier;
}

copyVec(Float:Vec[3],Float:Ret[3])
{
    Ret[0] = Vec[0]
    Ret[1] = Vec[1]
    Ret[2] = Vec[2]
}

subVec(Float:Vec1[3],Float:Vec2[3],Float:Ret[3])
{
    Ret[0]=Vec1[0]-Vec2[0]
    Ret[1]=Vec1[1]-Vec2[1]
    Ret[2]=Vec1[2]-Vec2[2]
}

addVec(Float:Vec1[3],Float:Vec2[3])
{
    Vec1[0] += Vec2[0]
    Vec1[1] += Vec2[1]
    Vec1[2] += Vec2[2]
}

make_TE_BEAMPOINTS(id, color, Float:Vec1[3], Float:Vec2[3], width) // Игрок    
{
    message_begin(MSG_ONE_UNRELIABLE ,SVC_TEMPENTITY,{0,0,0},id)
    write_byte(0)
    write_coord(floatround(Vec1[0]))
    write_coord(floatround(Vec1[1]))
    write_coord(floatround(Vec1[2]))
    write_coord(floatround(Vec2[0]))
    write_coord(floatround(Vec2[1]))
    write_coord(floatround(Vec2[2]))
    write_short(laser)
    write_byte(1)
    write_byte(1)
    write_byte(1)
    write_byte(width)
    write_byte(0)
    write_byte(esp_colors[color][0])
    write_byte(esp_colors[color][1])
    write_byte(esp_colors[color][2])
    write_byte(150)
    write_byte(0)
    message_end()
}

make_TE_BEAMENTPOINT(id,Float:target_origin[3],width,target_team) // Линия    
{
    message_begin(MSG_ONE_UNRELIABLE,SVC_TEMPENTITY,{0,0,0},id)
    write_byte(1)
    write_short(id)
    write_coord(floatround(target_origin[0]))
    write_coord(floatround(target_origin[1]))
    write_coord(floatround(target_origin[2]))
    write_short(laser)
    write_byte(1)        
    write_byte
(1)
    write_byte(1)
    write_byte(width)
    write_byte(0)
    write_byte(team_colors[target_team][0])
    write_byte(team_colors[target_team][1])
    write_byte(team_colors[target_team][2])
    write_byte(255)
    write_byte(0)
    message_end()
Опытный скриптер.

VK: https://vk.com/vasheigar
Discord: Sheigar#0294
Аватара пользователя
Sheigar
 
Сообщения: 109
Зарегистрирован: 03 июл 2021, 21:36
Благодарил (а): 27 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Библиотека Amxmodx.
Язык Pawn.

Re: ESP для живых игроков.

Сообщение f1sT » 13 май 2022, 20:46

Опытный скриптер.


Код: Выделить всё
admin_options[id] = bool:(get_user_flags(id) & ADMIN_MENU

>>>
Код: Выделить всё
admin_options[id] = false


Код: Выделить всё
public esp_toggle(id)
{
    if (
get_user_flags(id) & ADMIN_MENU)
    {
        
admin_options[id] = !admin_options[id]
        
        
client_print(idprint_chat"[Админ ЕСП] %s"admin_options[id] ? "Включен" "Выключен")        
    } else 
        
client_print(idprint_chat"[Админ ЕСП] Вы не имеете доступа к данной команде")        
}
 

>>>
Код: Выделить всё
public esp_toggle(id){
    
admin_options[id] = !admin_options[id];
    return  
client_print(idprint_chat"[Админ ЕСП] %s"admin_options[id] ? "Включен" "Выключен");
}
 

Аватара пользователя
f1sT
 
Сообщения: 66
Зарегистрирован: 30 ноя 2014, 14:46
Откуда: cs_assault
Благодарил (а): 8 раз.
Поблагодарили: 27 раз.
Опыт программирования: Больше трех лет
Языки программирования: C++/Pawn/Sql/Php


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 3