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

Shrap deccoration: добавить радомное свечение

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

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

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

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

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

Shrap deccoration: добавить радомное свечение

Сообщение LouisJump » 07 янв 2017, 18:54

Привет всем :-)
Как сделать чтобы модель светилась random свечением?

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

#define PLUGIN "Shrap deccoration"
#define VERSION "1.0"
#define AUTHOR "NolkFun Team"

#pragma tabsize 0

new g_infoTarget;
new obj_Name[128][64];
new obj_ClassName[128][64];
new obj_Model[128][64];
new obj_Lines;
new g_entCount;
new g_entId[128];
new g_entMdl[128];
new g_entTangible[128];
new bool:g_tang_cpl;

xs_vec_add(Float:in1[], Float:in2[], Float:out[])
{
    out[0] = in1[0] + in2[0];
    out[1] = in1[1] + in2[1];
    out[2] = in1[2] + in2[2];
    return 0;
}

xs_vec_mul_scalar(Float:vec[], Float:scalar, Float:out[])
{
    out[0] = vec[0] * scalar;
    out[1] = vec[1] * scalar;
    out[2] = vec[2] * scalar;
    return 0;
}

fm_get_aim_origin(index, Float:origin[3])
{
    new Float:start[3];
    new Float:view_ofs[3];
    pev(index, pev_origin, start);
    pev(index, pev_view_ofs, view_ofs);
    xs_vec_add(start, view_ofs, start);
    new Float:dest[3];
    pev(index, pev_v_angle, dest);
    engfunc(EngFunc_MakeVectors, dest);
    global_get(glb_v_forward, dest);
    xs_vec_mul_scalar(dest, 9999.00, dest);
    xs_vec_add(start, dest, dest);
    engfunc(EngFunc_TraceLine, start, dest, 0, index, 0);
    get_tr2(0, TR_vecEndPos, origin);
    return 1;
}

public plugin_init()
{
    register_plugin("PLUGIN", "VERSION", "AUTHOR");
    
    register_clcmd
("set_obj", "open_menu", -1, "", -1);
    register_clcmd("say /set_obj", "open_menu", -1, "", -1);
    register_clcmd("say_team /set_obj", "open_menu", -1, "", -1);
    
    new i 
= 0;
    while (< obj_Lines)
    {
        register_touch(obj_ClassName[i], "player", "fwd_Touch");
        i++;
    }
    g_infoTarget = engfunc(EngFunc_AllocString, "info_target");
    return 0;
}

public plugin_precache()
{
    _ini_check();
    new i = 0;
    while (< obj_Lines)
    {
        precache_model(obj_Model[i]);
        i++;
    }
    return 0;
}

public plugin_cfg()
{
    new szMap[64];
    new szCfg[128];
    new szDir[255];
    get_mapname(szMap, 63);
    get_configsdir(szCfg, 127);
    format(szMap, 63, "%s.ini", szMap);
    if (file_exists(szDir))
    {
        obj_load(szDir);
    }
    else
    
{
        log_amx("Ошибка: конфиг с объектами не найден!");
    }
    return 0;
}

public fwd_Touch(ent, id)
{
    if(get_user_flags(id) & ADMIN_LEVEL_A)
    {
    if (entity_get_int(id, EV_INT_button) & 32)
    {
        new Float:f_Origin[3];
        entity_get_vector(ent, 6, f_Origin);
        f_Origin[1] += 1.00;
        entity_set_vector(ent, 6, f_Origin);
    }
    }
    return 0;
}

public open_menu(id)
{
    if(get_user_flags(id) & ADMIN_LEVEL_A)
    {
    new menu = menu_create("Меню декораций", "func_omenu", 0);
    menu_additem(menu, "Меню выбора декораций^n", "1", 0, -1);
    if (!g_entCount)
    {
        menu_additem(menu, "\dУдалить предыдущий^n", "2", 0, -1);
    }
    else
    
{
        menu_additem(menu, "Удалить предыдущий^n", "2", 0, -1);
    }
    if (g_tang_cpl)
    {
        menu_additem(menu, "\wРежим: \yНе проходить", "3", 0, -1);
    }
    else
    
{
        menu_additem(menu, "\wРежим: \yПроходить", "3", 0, -1);
    }
    menu_setprop(menu, MPROP_NEXTNAME, "Далее");
    menu_setprop(menu, MPROP_BACKNAME, "Назад");
    menu_setprop(menu, MPROP_EXITNAME, "Выход");
    menu_display(id, menu, 0);
    }
    else{
    ChatColor(id, "!g[Острые ножи] !tУ вас недостаточно прав!")
    return PLUGIN_HANDLED
    
}
    return 1;
}

public func_omenu(id, menu, item)
{
    if (item == -3)
    {
        menu_destroy(menu);
        return 1;
    }
    switch (item)
    {
        case 0:
        {
            open_objects(id);
        }
        case 1:
        {
            if (g_entCount)
            {
                remove_entity(g_entId[g_entCount + -1]);
                g_entCount += -1;
                ChatColor(id, "!g[Острые ножи] !tДекорация удалёна!");
            }
            else
            
{
                ChatColor(id, "!g[Острые ножи] !tБольше не осталось декораций!");
            }
            open_menu(id);
        }
        case 2:
        {
            if(g_tang_cpl)
            {
                g_tang_cpl = false;
            }
            else
            
{
                g_tang_cpl = true;
            }
            if(g_tang_cpl)
            {
            ChatColor(id, "!g[Острые ножи] !tВыбран режим: !gНе проходить");
            }
            else
            
{
            ChatColor(id, "!g[Острые ножи] !tВыбран режим: !gПроходить");
            }
            open_menu(id);
        }
        default:
        {
        }
    }
    return 1;
}

public open_objects(id)
{
    if(get_user_flags(id) & ADMIN_LEVEL_A)
    {
    new menu = menu_create("Выберите декорацию", "finc_objects", 0);
    new i = 0;
    while (< obj_Lines)
    {
        new szTemp[10];
        num_to_str(i, szTemp, 9);
        menu_additem(menu, obj_Name[i], szTemp, 0, -1);
        i++;
    }
    menu_setprop(menu, MPROP_NEXTNAME, "Далее");
    menu_setprop(menu, MPROP_BACKNAME, "Назад");
    menu_setprop(menu, MPROP_EXITNAME, "Выход");
    menu_display(id, menu, 0);
    }
    return 1;
}

public finc_objects(id, menu, item, line)
{
    if (item == -3)
    {
        menu_destroy(menu);
        open_menu(id);
        return 1;
    }
    new Float:origin[3];
    new data[15];
    new iName[64];
    new access = 0;
    new callback = 0;
    new key = 0;
    menu_item_getinfo(menu, item, access, data, 15, iName, 64, callback);
    key = str_to_num(data);
    fm_get_aim_origin(id, origin);
    obj_create(origin, key, g_tang_cpl);
    open_objects(id);
    ChatColor(id, "!g[Острые ножи] !tВы устоновили декорацию: !g%s", obj_Name[line]);
    return 1;
}

bool:obj_load(iFile[255])
{
    new file = fopen(iFile, "rt");
    while (file && !feof(file))
    {
        new sfLineData[512];
        fgets(file, sfLineData, 511);
        if (sfLineData[0] == 59)
        {
        }
        else
        
{
            if (equal(sfLineData, "", 0))
            {
            }
            else
            
{
                new origins[3][32];
               // origins[0] = 104964;
                new Float:origin[3];
                new f_Origins[3][32];
               // f_Origins[0] = 104976;
                new Float:f_Origin[3];
                new id_mdl[32];
                new id_Tang[32];
                parse(sfLineData, origins[0], 31, 4, 31, 8, 31, f_Origins[0], 31, 4, 31, 8, 31, id_mdl, 31, id_Tang, 31);
                origin[0] = str_to_float(origins[0]);
                origin[1] = str_to_float(origins[1]);
                origin[2] = str_to_float(origins[2]);
                f_Origin[0] = str_to_float(f_Origins[0]);
                f_Origin[1] = str_to_float(f_Origins[1]);
                f_Origin[2] = str_to_float(f_Origins[2]);
                obj_create_two(origin, f_Origin, str_to_num(id_mdl), str_to_num(id_Tang));
            }
        }
    }
    fclose(file);
    return false;
}

bool:obj_create_two(Float:origin[3], Float:f_Origin[3], id_mdl, id_Tang)
{
    new ent = engfunc(EngFunc_CreateNamedEntity, g_infoTarget);
    if (!pev_valid(ent))
    {
        return false;
    }
    engfunc(EngFunc_SetModel, ent, obj_Model[id_mdl]);
    set_pev(ent, pev_origin, origin);
    set_pev(ent, pev_angles, f_Origin);
    if (id_Tang)
    {
        set_pev(ent, pev_solid, 2);
    }
    else
    
{
        set_pev(ent, pev_solid, 1);
    }
    set_pev(ent, pev_movetype, 0);
    set_pev(ent, pev_sequence, 0);
    set_pev(ent, pev_framerate, 1.00/*1065353216*/);
    set_pev(ent, pev_classname, obj_ClassName[id_mdl]);
    set_pev(ent, pev_effects, 0);
    engfunc(EngFunc_SetSize,ent,Float:{-25.0,-10.0,0.0},Float:{17.0,10.0,25.0});
    g_entId[g_entCount] = ent;
    g_entMdl[g_entCount] = id_mdl;
    g_entTangible[g_entCount] = id_Tang;
    g_entCount += 1;
    return true;
}

bool:obj_create(Float:origin[3], id_mdl, id_Tang)
{
    new ent = engfunc(EngFunc_CreateNamedEntity, g_infoTarget);
    if (!pev_valid(ent))
    {
        return false;
    }
    engfunc(EngFunc_SetModel, ent, obj_Model[id_mdl]);
    set_pev(ent, pev_origin, origin);
    if (id_Tang)
    {
        set_pev(ent, pev_solid, 2);
    }
    else
    
{
        set_pev(ent, pev_solid, 1);
    }
    set_pev(ent, pev_movetype, 0);
    set_pev(ent, pev_sequence, 0);
    set_pev(ent, pev_framerate, 1.00/*1065353216*/);
    set_pev(ent, pev_classname, obj_ClassName[id_mdl]);
    set_pev(ent, pev_effects, 0);
    engfunc(EngFunc_SetSize,ent,Float:{-25.0,-10.0,0.0},Float:{17.0,10.0,25.0});
    g_entId[g_entCount] = ent;
    g_entMdl[g_entCount] = id_mdl;
    g_entTangible[g_entCount] = id_Tang;
    g_entCount += 1;
    return true;
}

_ini_check()
{
    new line = 0;
    new buffer[256];
    new file = fopen("/addons/amxmodx/configs/decoration.ini", "r");
    while (!feof(file))
    {
        fgets(file, buffer, 255);
        trim(buffer);
        if (buffer[0] == 34)
        {
            parse(buffer, obj_Name[line], 64, obj_Model[line], 64, obj_ClassName[line], 64);
            line++;
        }
    }
    obj_Lines = line;
    fclose(file);
    return 0;
}

stock ChatColor(const id, 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, "!t", "^3")
    
        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();
                        }
                }
        }

Название темы скорректировано // Subb98
Аватара пользователя
LouisJump
 
Сообщения: 79
Зарегистрирован: 13 июл 2014, 13:00
Благодарил (а): 24 раз.
Поблагодарили: 3 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6

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

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

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