1. Notty Пользователь

    Регистрация:
    09.03.15
    Сообщения:
    126
    Симпатии:
    23
    Пол:
    Мужской
    Здравствуйте форумчане:)
    Помогите изменить доступ к плагинам, то есть, чтобы все могли пользоваться, а не только админы

    Код:
    enum _:PLAYER_DATA
    {
        ENT_CAM,
        ENT_MODEL,
        ENT_ANIM,
        ANIM_PLAYING
    }
    
    enum _:SEQ_DESC
    {
        MODEL[64],
        SEQ_LABEL[33],
        SEQ_FPS,
        SEQ_FRAMES,
        SEQ_FRAMERATE
    }
    
    new g_allocString
    
    new g_playerData[33][PLAYER_DATA]
    
    new Array:g_animData
    
    new g_animMenu
    
    new g_cvarAccessFlag
    
    new SayText
    
    public plugin_init()
    {
        register_plugin(PLUGIN, VERSION, AUTHOR)
       
        register_clcmd("dance", "cmdAnim")
    
            SayText = get_user_msgid("SayText")
    
        register_forward(FM_CmdStart, "fwdCmdStart", 1)
       
        RegisterHam(Ham_Killed, "player", "fwdPlayerKilled", 1)
    
        g_allocString = engfunc(EngFunc_AllocString, "info_target")
       
        g_animData = ArrayCreate(SEQ_DESC)
       
        g_animMenu = menu_create("\yВыберите любой танец\y:^n\dСтраницы:\r", "animMenuHandler")
       
        g_cvarAccessFlag = register_cvar("anim_menu_access_flag", "y")
       
        loadModel(ANIM_MODEL)
    }
    
    public plugin_precache()
    {
        precache_model(ANIM_MODEL)
    }
    
    public plugin_end()
    {
        ArrayDestroy(g_animData)
    }
    
    public loadModel(model[])
    {
        new file = fopen(model, "rt")
        new numseq, seqindex, i, Float:framerate
       
        new seqDesc[SEQ_DESC]
       
        fseek(file, 164, SEEK_SET)
        fread(file, numseq, BLOCK_INT)
        fread(file, seqindex, BLOCK_INT)
       
        for(i = 0; i < numseq; i++)
        {
            fseek(file, seqindex + 176*i, SEEK_SET)
            fread_blocks(file, seqDesc[SEQ_LABEL], 32, BLOCK_CHAR)
           
            fread(file, seqDesc[SEQ_FPS], BLOCK_INT)
       
            fseek(file, 20, SEEK_CUR)
            fread(file, seqDesc[SEQ_FRAMES], BLOCK_INT)
           
            framerate = 256.0 * Float:seqDesc[SEQ_FPS] / (seqDesc[SEQ_FRAMES] - 1)
           
            seqDesc[SEQ_FRAMERATE] = _:framerate
           
            ArrayPushArray(g_animData, seqDesc)
           
            menu_additem(g_animMenu, seqDesc[SEQ_LABEL], "")
        }
       
        fclose(file)
    }
    
    public client_putinserver(id)
    {
        if (!g_playerData[id][ENT_MODEL])
            createPlayerEnt(id)
    }
    
    public client_disconnect(id)
    {
        stopAnim(id)
    }
    
    public createPlayerEnt(id)
    {
        new ent = engfunc(EngFunc_CreateNamedEntity, g_allocString)
        set_pev(ent, pev_rendermode, kRenderTransAdd)
        set_pev(ent, pev_renderamt, 0.0)
        set_pev(ent, pev_owner, id)
        engfunc(EngFunc_SetModel, ent, ANIM_MODEL)
       
        g_playerData[id][ENT_CAM] = ent
       
        ent= engfunc(EngFunc_CreateNamedEntity, g_allocString)
        engfunc(EngFunc_SetModel, ent, ANIM_MODEL)
        set_pev(ent, pev_movetype, MOVETYPE_FLY)
        set_pev(ent, pev_controller_1, 63.75)
       
        g_playerData[id][ENT_ANIM] = ent
       
        ent= engfunc(EngFunc_CreateNamedEntity, g_allocString)
        set_pev(ent, pev_movetype, MOVETYPE_FOLLOW)
        set_pev(ent, pev_aiment, g_playerData[id][ENT_ANIM])
        set_pev(ent, pev_effects, EF_NODRAW)
       
        g_playerData[id][ENT_MODEL] = ent
    }
    
    public cmdAnim(id)
    {
        if (get_user_flags(id) & ADMIN_IMMUNITY && is_user_alive(id))
            {
                menu_display(id, g_animMenu)
                return PLUGIN_HANDLED
            }
        else
            {
            print_col_chat(id, "^x04[Жизнь за решеткой]^x01 У вас недостаточно ^x03прав");
            }
        return PLUGIN_HANDLED
    }
    
    public startAnim(id, anim)
    {
        new seqDesc[SEQ_DESC]
        ArrayGetArray(g_animData, anim, seqDesc)
       
        new ent = g_playerData[id][ENT_ANIM]
        new modelEnt = g_playerData[id][ENT_MODEL]
    //    set_pev(ent, pev_framerate, seqDesc[SEQ_FRAMERATE])
        set_pev(ent, pev_framerate, 1.0)
    //    set_pev(ent, pev_animtime, (seqDesc[SEQ_FRAMES] - 1)/seqDesc[SEQ_FPS])
        set_pev(ent, pev_sequence, anim)
        set_pev(ent, pev_gaitsequence, anim)
       
        new Float:origin[3], Float:mins[3]
        pev(id, pev_origin, origin)
        pev(id, pev_mins, mins)
       
        mins[0] = origin[0]
        mins[1] = origin[1]
        mins[2] += origin[2]
        set_pev(ent, pev_origin, mins)
       
        set_pev(modelEnt, pev_effects, 0)
        new model[64]
        get_user_info(id, "model", model, 63)
        format(model, 63, "models/player/%s/%s.mdl", model, model)
        engfunc(EngFunc_SetModel, modelEnt, model)
       
        set_pev(modelEnt, pev_body, pev(id, pev_body))
        set_pev(modelEnt, pev_skin, pev(id, pev_skin))
       
        set_pev(ent, pev_controller_0, 128)
        set_pev(ent, pev_controller_1, 128)
       
        pev(id, pev_angles, mins)
        mins[0] = 0.0
        set_pev(ent, pev_angles, mins)
        set_pev(ent, pev_v_angle, mins)
       
        engfunc(EngFunc_SetView, id, g_playerData[id][ENT_CAM])
        g_playerData[id][ANIM_PLAYING] = 1
       
        set_pev(id, pev_effects, EF_NODRAW)
       
    }
    
    public stopAnim(id)
    {
        set_pev(g_playerData[id][ENT_MODEL], pev_effects, EF_NODRAW)
        g_playerData[id][ANIM_PLAYING] = 0
        set_pev(id, pev_effects, 0)
       
        engfunc(EngFunc_SetView, id, id)
    }
    
    public animMenuHandler(id, menu, item)
    {
        if(item == MENU_EXIT)
            return PLUGIN_HANDLED
       
        new access[32]
        get_pcvar_string(g_cvarAccessFlag, access, 31)
       
       
        if (!(pev(id, pev_flags)&FL_ONGROUND))
        {
            print_col_chat(id, "^4[Жизнь за решеткой] ^1Вы должны быть на ^3земле!")
            return PLUGIN_HANDLED
        }
       
        startAnim(id, item)
       
        menu_display(id, g_animMenu, floatround(item/7.0, floatround_floor))
       
        return PLUGIN_HANDLED
    }
    
    public fwdCmdStart(id, uc, randseed)
    {
        if (is_user_alive(id) && g_playerData[id][ANIM_PLAYING])
        {
            if (!get_uc(uc, UC_Buttons))
            {
                static Float:fOrigin[3], Float:fAngle[3], Float:origin[3]
                pev( id, pev_origin, origin )
                pev(id, pev_view_ofs, fOrigin)
                xs_vec_add(origin, fOrigin, origin)
                xs_vec_copy(origin, fOrigin)
                pev(id, pev_v_angle, fAngle)
           
                static Float:fVBack[3]
                angle_vector(fAngle, ANGLEVECTOR_FORWARD, fVBack)
           
                fOrigin[2] += 20.0
               
                fOrigin[0] += (-fVBack[0] * 150.0)
                fOrigin[1] += (-fVBack[1] * 150.0)
                fOrigin[2] += (-fVBack[2] * 150.0)
               
                static tr
                tr = 0
                engfunc(EngFunc_TraceLine, origin, fOrigin, IGNORE_MONSTERS, id, tr)
                get_tr2(tr, TR_vecEndPos, fOrigin)
                free_tr2(tr)
           
                engfunc(EngFunc_SetOrigin, g_playerData[id][ENT_CAM], fOrigin)
                set_pev(g_playerData[id][ENT_CAM], pev_angles, fAngle)
            }
            else
                stopAnim(id)
        }
    }
    
    public fwdPlayerKilled(id)
    {
        stopAnim(id)   
    }
    
    stock print_col_chat(const id, const input[], any:...)
    {
        new count = 1, players[32];
        static msg[191];
        vformat(msg, 190, input, 3);
        replace_all(msg, 190, "!g", "^4"); // Green Color
        replace_all(msg, 190, "!y", "^1"); // Default Color
        replace_all(msg, 190, "!t", "^3"); // Team Color
        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, SayText, _, players[i]);
                    write_byte(players[i]);
                    write_string(msg);
                    message_end();
                }
            }
        }
    } 
    
    и
    Код:
    #include <amxmodx>
    #include <amxmisc>
    #include <fakemeta>
    #include <xs>
    
    #define PLUGIN "Grafity"
    #define VERSION "3.1"
    #define AUTHOR "XSik"
    
    #define MAX_PLAYERS 32
    #define USAGE_LEVEL ADMIN_KICK
    
    new Float:origin[MAX_PLAYERS+1][3]
    new prethink_counter[MAX_PLAYERS+1]
    new bool:is_drawing[MAX_PLAYERS+1]
    new bool:is_holding[MAX_PLAYERS+1]
    
    new spriteid
    
    public plugin_init()
    {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        register_clcmd("+paint", "paint_handler", USAGE_LEVEL, "Paint on the walls!")
        register_clcmd("-paint", "paint_handler", USAGE_LEVEL, "Paint on the walls!")
        register_forward(FM_PlayerPreThink, "forward_FM_PlayerPreThink", 0)
    }
    
    public plugin_precache()
    {
        spriteid = precache_model("sprites/lgtning.spr")
    }
    
    public paint_handler(id, level, cid)
    {
        if(!cmd_access(id, level, cid, 1))
            return PLUGIN_HANDLED
       
        if(!is_user_alive(id))
        {
            client_print(id, print_chat, "* You cannot use the magic marker when you are dead.")
            return PLUGIN_HANDLED
        }
       
        static cmd[2]
        read_argv(0, cmd, 1)
       
        switch(cmd[0])
        {
            case '+': is_drawing[id] = true
            case '-': is_drawing[id] = false
        }
        return PLUGIN_HANDLED
    }
    
    public forward_FM_PlayerPreThink(id)
    {
        if(prethink_counter[id]++ > 5)
        {
            if(is_drawing[id] && !is_aiming_at_sky(id))
            {
                static Float:cur_origin[3], Float:distance
    
                cur_origin = origin[id]
               
                if(!is_holding[id])
                {
                    fm_get_aim_origin(id, origin[id])
                    move_toward_client(id, origin[id])
                    is_holding[id] = true
                    return FMRES_IGNORED
                }
               
                fm_get_aim_origin(id, origin[id])
                move_toward_client(id, origin[id])
               
                distance = get_distance_f(origin[id], cur_origin)
               
                if(distance > 2)
                {
                    draw_line(origin[id], cur_origin)
                }
            }
            else
            {
                is_holding[id] = false
            }
            prethink_counter[id] = 0
        }
       
        return FMRES_IGNORED
    }
    
    stock draw_line(Float:origin1[3], Float:origin2[3])
    {
        message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
        write_byte(TE_BEAMPOINTS)
        engfunc(EngFunc_WriteCoord, origin1[0])
        engfunc(EngFunc_WriteCoord, origin1[1])
        engfunc(EngFunc_WriteCoord, origin1[2])
        engfunc(EngFunc_WriteCoord, origin2[0])
        engfunc(EngFunc_WriteCoord, origin2[1])
        engfunc(EngFunc_WriteCoord, origin2[2])
        write_short(spriteid)
        write_byte(0)
        write_byte(10)
        write_byte(255)
        write_byte(50)
        write_byte(0)
        write_byte(random(255))
        write_byte(random(255))
        write_byte(random(255))
        write_byte(255)
        write_byte(0)
        message_end()
    }
    
    //from fakemeta_util.inc
    stock fm_get_aim_origin(index, Float:origin[3])
    {
        static Float:start[3], Float:view_ofs[3]
        pev(index, pev_origin, start)
        pev(index, pev_view_ofs, view_ofs)
        xs_vec_add(start, view_ofs, start)
       
        static 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.0, dest)
        xs_vec_add(start, dest, dest)
       
        engfunc(EngFunc_TraceLine, start, dest, 0, index, 0)
        get_tr2(0, TR_vecEndPos, origin)
       
        return 1
    }
    
    stock move_toward_client(id, Float:origin[3])
    {       
        static Float:player_origin[3]
       
        pev(id, pev_origin, player_origin)
       
        origin[0] += (player_origin[0] > origin[0]) ? 1.0 : -1.0
        origin[1] += (player_origin[1] > origin[1]) ? 1.0 : -1.0
        origin[2] += (player_origin[2] > origin[2]) ? 1.0 : -1.0
    }
    //Thanks AdaskoMX!
    bool:is_aiming_at_sky(index)
    {
        new Float:origin[3];
        fm_get_aim_origin(index, origin);
    
        return engfunc(EngFunc_PointContents, origin) == CONTENTS_SKY;
    }
    /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
    *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
    */
    
     
  2. windranger1337 Пользователь

    Регистрация:
    04.10.15
    Сообщения:
    303
    Симпатии:
    177
    Telegram:
    serfreeman1337
    USAGE_LEVEL замени на 0.
    Еще доступ можно задать через файл addons/amxmodx/configs/cmdaccess.ini:
    Код:
    "+moveent"     "s" ; entmoving.amxx
    "+moveentaim"     "s" ; entmoving.amxx
    
    Ну ты понял.

    И вот это нужно удалить в первом:
     
    Notty нравится это.
  3. Notty Пользователь

    Регистрация:
    09.03.15
    Сообщения:
    126
    Симпатии:
    23
    Пол:
    Мужской
    с первым получилось, спасибо,
    а вот графити не работает для всех, заменил как ты сказал:

    Код:
    register_clcmd("+paint", "paint_handler", 0, "Paint on the walls!")
        register_clcmd("-paint", "paint_handler", 0, "Paint on the walls!")
     
  4. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.588
    Симпатии:
    4.158
    Пол:
    Мужской
    а если так?
    register_clcmd("+paint", "paint_handler", .info = "Paint on the walls!")
    register_clcmd("-paint", "paint_handler", .info = "Paint on the walls!")
    ну или так:
    register_clcmd("+paint", "paint_handler", -1, "Paint on the walls!")
    register_clcmd("-paint", "paint_handler", -1, "Paint on the walls!")
     
    Notty нравится это.
  5. Notty Пользователь

    Регистрация:
    09.03.15
    Сообщения:
    126
    Симпатии:
    23
    Пол:
    Мужской
    Сейчас попробую
     
  6. Notty Пользователь

    Регистрация:
    09.03.15
    Сообщения:
    126
    Симпатии:
    23
    Пол:
    Мужской
    Спасибо, Иван, все получилось, еще интересует, можно как нибудь сделать чтобы краски было побольше?
    А то на полный рисунок не хватает:)
     
  7. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.588
    Симпатии:
    4.158
    Пол:
    Мужской
    Notty, эт надо исходник
     
  8. Notty Пользователь

    Регистрация:
    09.03.15
    Сообщения:
    126
    Симпатии:
    23
    Пол:
    Мужской
    дак в первом посте второй это и есть исходник
     
  9. windranger1337 Пользователь

    Регистрация:
    04.10.15
    Сообщения:
    303
    Симпатии:
    177
    Telegram:
    serfreeman1337
    Notty,
    Код:
    message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
        write_byte(TE_BEAMPOINTS)
        engfunc(EngFunc_WriteCoord, origin1[0])
        engfunc(EngFunc_WriteCoord, origin1[1])
        engfunc(EngFunc_WriteCoord, origin1[2])
        engfunc(EngFunc_WriteCoord, origin2[0])
        engfunc(EngFunc_WriteCoord, origin2[1])
        engfunc(EngFunc_WriteCoord, origin2[2])
        write_short(spriteid)
        write_byte(0)
        write_byte(10) // <<--- СКОРОСТЬ
        write_byte(255) // <<--- ДЛИТЕЛЬНОСТЬ
        write_byte(50) // <<--- ШИРИНА ЛИНИИ
        write_byte(0) // <<--- БЗЗЗЗ ЛИНИИ
        write_byte(random(255)) // <<--- КРАСНЫЙ
        write_byte(random(255)) // <<--- ЗЕЛЕНЫЙ
        write_byte(random(255)) // <<--- СИНИЙ
        write_byte(255) // << -- ЯРКОСТЬ
        write_byte(0)
        message_end()
     
  10. Notty Пользователь

    Регистрация:
    09.03.15
    Сообщения:
    126
    Симпатии:
    23
    Пол:
    Мужской
    То есть мне нужно увеличить длительность?
    Что-то тут не понимаю)
     
  11. windranger1337 Пользователь

    Регистрация:
    04.10.15
    Сообщения:
    303
    Симпатии:
    177
    Telegram:
    serfreeman1337
    ширина, длительность, насыщенность ?
    Код:
     write_byte(50) // <<--- ШИРИНА ЛИНИИ
     
  12. Notty Пользователь

    Регистрация:
    09.03.15
    Сообщения:
    126
    Симпатии:
    23
    Пол:
    Мужской
    Если сделать 0 то будет бесконечность?))
    --- добавлено 26.03.16 ---
    Смотри краска быстро кончается, то что она исчезает это нормально, но ее мало на рисунок не хватает кончается сама краска
     
  13. windranger1337 Пользователь

    Регистрация:
    04.10.15
    Сообщения:
    303
    Симпатии:
    177
    Telegram:
    serfreeman1337
    Ну так лимит значит и больше никак не сделать )
     
  14. Notty Пользователь

    Регистрация:
    09.03.15
    Сообщения:
    126
    Симпатии:
    23
    Пол:
    Мужской
    Так как убрать лимит?)
    А то пока линия неисчезнит после лимита, ничего нельзя дорисовать