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

    Регистрация:
    16.10.15
    Сообщения:
    297
    Симпатии:
    42
    Пол:
    Мужской
    Skype:
    x00peR
    ICQ:
    474751117
    Уже сбился со счета с этими парашютами. Перепробовал много. То ошибки, то зависание в полете, то для админов работает для вип нет.

    Собственно ищу плагин парашюта с моделью.
    Для админов и вип - бесплатно (флаг t).

    Для игроков покапка за $.
    Если цена 0, то бесплатно для всех, выдается автоматически.

    Не пинайте, если была подобная тема.
     
    happyQQ и maFFyoZZyk нравится это.
  2. mattguetta Пользователь

    Регистрация:
    10.08.15
    Сообщения:
    145
    Симпатии:
    44
    Пол:
    Мужской
    Не видел таких. Знаю что есть парашют за деньги для всех. А вот того что ты назвал не встречал.
     
  3. x00peR Пользователь

    Регистрация:
    16.10.15
    Сообщения:
    297
    Симпатии:
    42
    Пол:
    Мужской
    Skype:
    x00peR
    ICQ:
    474751117
    ты в предыдущей теме скидывал код парашюта, у меня был исходник этого же автора, если не ошибаюсь, и там был такой функционал.
    Но исходник был утерян давно.
     
  4. mattguetta Пользователь

    Регистрация:
    10.08.15
    Сообщения:
    145
    Симпатии:
    44
    Пол:
    Мужской
    Попробуй, может оно:
    Код:
    #include <amxmodx>
    #include <amxmisc>
    #include <engine>
    #include <cstrike>
    #include <fun>
    
    new bool:has_parachute[33]
    new para_ent[33]
    new gCStrike = 0
    new pDetach, pFallSpeed, pEnabled, pCost, pPayback
    
    #define PARACHUTE_LEVEL ADMIN_LEVEL_A
    
    public plugin_init()
    {
        register_plugin("Parachute", "1.3", "KRoT@L/JTP10181")
        pEnabled = register_cvar("sv_parachute", "1" )
        pFallSpeed = register_cvar("parachute_fallspeed", "100")
        pDetach = register_cvar("parachute_detach", "1")
    
        if (cstrike_running()) gCStrike = true
    
        if (gCStrike) {
    
            pCost = register_cvar("parachute_cost", "1000")
            pPayback = register_cvar("parachute_payback", "75")
    
            register_concmd("amx_parachute", "admin_give_parachute", PARACHUTE_LEVEL, "<nick, #userid or @team>" )
        }
    
        register_clcmd("say", "HandleSay")
        register_clcmd("say_team", "HandleSay")
    
        register_event("ResetHUD", "newSpawn", "be")
        register_event("DeathMsg", "death_event", "a")
    
        //Setup jtp10181 CVAR
        new cvarString[256], shortName[16]
        copy(shortName,15,"chute")
    
        register_cvar("jtp10181","",FCVAR_SERVER|FCVAR_SPONLY)
        get_cvar_string("jtp10181",cvarString,255)
    
        if (strlen(cvarString) == 0) {
            formatex(cvarString,255,shortName)
            set_cvar_string("jtp10181",cvarString)
        }
        else if (contain(cvarString,shortName) == -1) {
            format(cvarString,255,"%s,%s",cvarString, shortName)
            set_cvar_string("jtp10181",cvarString)
        }
    }
    
    public plugin_natives()
    {
        set_module_filter("module_filter")
        set_native_filter("native_filter")
    }
    
    public module_filter(const module[])
    {
        if (!cstrike_running() && equali(module, "cstrike")) {
            return PLUGIN_HANDLED
        }
    
        return PLUGIN_CONTINUE
    }
    
    public native_filter(const name[], index, trap)
    {
        if (!trap) return PLUGIN_HANDLED
    
        return PLUGIN_CONTINUE
    }
    
    public client_connect(id)
    {
        parachute_reset(id)
    }
    
    public client_disconnect(id)
    {
        parachute_reset(id)
    }
    
    public death_event()
    {
        new id = read_data(2)
        parachute_reset(id)
    }
    
    parachute_reset(id)
    {
        if(para_ent[id] > 0) {
            if (is_valid_ent(para_ent[id])) {
                remove_entity(para_ent[id])
            }
        }
    
        if (is_user_alive(id)) set_user_gravity(id, 1.0)
    
        has_parachute[id] = false
        para_ent[id] = 0
    }
    
    public newSpawn(id)
    {
        if(para_ent[id] > 0) {
            remove_entity(para_ent[id])
            set_user_gravity(id, 1.0)
            para_ent[id] = 0
        }
    
        if (!gCStrike || access(id,PARACHUTE_LEVEL) || get_pcvar_num(pCost) <= 0) {
            has_parachute[id] = true
            //set_view(id, CAMERA_3RDPERSON)
        }
    }
    
    public HandleSay(id)
    {
        if(!is_user_connected(id)) return PLUGIN_CONTINUE
    
        new args[128]
        read_args(args, 127)
        remove_quotes(args)
    
        if (gCStrike) {
            if (equali(args, "buy_parachute")) {
                buy_parachute(id)
                return PLUGIN_HANDLED
            }
            else if (equali(args, "sell_parachute")) {
                sell_parachute(id)
                return PLUGIN_HANDLED
            }
            else if (containi(args, "give_parachute") == 0) {
                give_parachute(id,args[15])
                return PLUGIN_HANDLED
            }
        }
    
        if (containi(args, "parachute") != -1) {
            if (gCStrike) client_print(id, print_chat, "[AMXX] команды Парашюта: buy_parachute, sell_parachute, give_parachute")
            client_print(id, print_chat, "[AMXX], Чтобы использовать твой парашют нажимают и держат твою +use кнопку, падая")
        }
    
        return PLUGIN_CONTINUE
    }
    
    public buy_parachute(id)
    {
        if (!gCStrike) return PLUGIN_CONTINUE
        if (!is_user_connected(id)) return PLUGIN_CONTINUE
    
        if (!get_pcvar_num(pEnabled)) {
            client_print(id, print_chat, "[AMXX] Плагин парашута отключен ")
            return PLUGIN_HANDLED
        }
    
        if (has_parachute[id]) {
            client_print(id, print_chat, "[AMXX] У тебя уже есть парашют")
            return PLUGIN_HANDLED
        }
    
        new money = cs_get_user_money(id)
        new cost = get_pcvar_num(pCost)
    
        if (money < cost) {
            client_print(id, print_chat, "[AMXX] У тебя нет денег для парашюта - $ Затрат %i", cost)
            return PLUGIN_HANDLED
        }
    
        cs_set_user_money(id, money - cost)
        client_print(id, print_chat, "[AMXX] Ты купил парашют. Чтобы использовать это, нажми +use.")
        has_parachute[id] = true
    
        return PLUGIN_HANDLED
    }
    
    public sell_parachute(id)
    {
        if (!gCStrike) return PLUGIN_CONTINUE
        if (!is_user_connected(id)) return PLUGIN_CONTINUE
    
        if (!get_pcvar_num(pEnabled)) {
            client_print(id, print_chat, "[AMXX] Парашут выключен")
            return PLUGIN_HANDLED
        }
    
        if (!has_parachute[id]) {
            client_print(id, print_chat, "[AMXX] У тебя нет парашюта, чтобы продать")
            return PLUGIN_HANDLED
        }
    
        if (access(id,PARACHUTE_LEVEL)) {
            client_print(id, print_chat, "[AMXX] Ты не можешь продать свой свободный парашют admin")
            return PLUGIN_HANDLED
        }
    
        parachute_reset(id)
    
        new money = cs_get_user_money(id)
        new cost = get_pcvar_num(pCost)
    
        new sellamt = floatround(cost * (get_pcvar_num(pPayback) / 100.0))
        cs_set_user_money(id, money + sellamt)
    
        client_print(id, print_chat, "[AMX] Ты продал свой используемый парашют за $ %d", sellamt)
    
        return PLUGIN_CONTINUE
    }
    
    public give_parachute(id,args[])
    {
        if (!gCStrike) return PLUGIN_CONTINUE
        if (!is_user_connected(id)) return PLUGIN_CONTINUE
    
        if (!get_pcvar_num(pEnabled)) {
            client_print(id, print_chat, "[AMXX] Плагин парошют выключен")
            return PLUGIN_HANDLED
        }
    
        if (!has_parachute[id]) {
            client_print(id, print_chat, "[AMXX] У тебя нет парашюта, чтобы дать")
            return PLUGIN_HANDLED
        }
    
        new player = cmd_target(id, args, 4)
        if (!player) return PLUGIN_HANDLED
    
        new id_name[32], pl_name[32]
        get_user_name(id, id_name, 31)
        get_user_name(player, pl_name, 31)
    
        if(has_parachute[player]) {
            client_print(id, print_chat, "[AMXX] У %s уже есть парашют.", pl_name)
            return PLUGIN_HANDLED
        }
    
        parachute_reset(id)
        has_parachute[player] = true
    
        client_print(id, print_chat, "[AMXX] Ты дал свой парашют %s.", pl_name)
        client_print(player, print_chat, "[AMXX] %s дал парашют тебе.", id_name)
    
        return PLUGIN_HANDLED
    }
    
    public admin_give_parachute(id, level, cid) {
    
        if (!gCStrike) return PLUGIN_CONTINUE
    
        if(!cmd_access(id,level,cid,2)) return PLUGIN_HANDLED
    
        if (!get_pcvar_num(pEnabled)) {
            client_print(id, print_chat, "[AMXX] Плагин выключен")
            return PLUGIN_HANDLED
        }
    
        new arg[32], name[32], name2[32], authid[35], authid2[35]
        read_argv(1,arg,31)
        get_user_name(id,name,31)
        get_user_authid(id,authid,34)
    
        if (arg[0]=='@'){
            new players[32], inum
            if (equali("T",arg[1]))        copy(arg[1],31,"TERRORIST")
            if (equali("ALL",arg[1]))    get_players(players,inum)
            else                        get_players(players,inum,"e",arg[1])
    
            if (inum == 0) {
                console_print(id,"No clients in such team")
                return PLUGIN_HANDLED
            }
    
            for(new a = 0; a < inum; a++) {
                has_parachute[players[a]] = true
            }
    
            switch(get_cvar_num("amx_show_activity"))    {
                case 2:    client_print(0,print_chat,"ADMIN %s: Дал парашют ^"%s^" players",name,arg[1])
                case 1:    client_print(0,print_chat,"ADMIN: Дал парашют ^"%s^" players",arg[1])
            }
    
            console_print(id,"[AMXX] You gave a parachute to ^"%s^" players",arg[1])
            log_amx("^"%s<%d><%s><>^" gave a parachute to ^"%s^"", name,get_user_userid(id),authid,arg[1])
        }
        else {
    
            new player = cmd_target(id,arg,6)
            if (!player) return PLUGIN_HANDLED
    
            has_parachute[player] = true
    
            get_user_name(player,name2,31)
            get_user_authid(player,authid2,34)
    
            switch(get_cvar_num("amx_show_activity")) {
                case 2:    client_print(0,print_chat,"ADMIN %s: Дал парашют ^"%s^"",name,name2)
                case 1:    client_print(0,print_chat,"ADMIN: Дал парашют ^"%s^"",name2)
            }
    
            console_print(id,"[AMXX] You gave a parachute to ^"%s^"", name2)
            log_amx("^"%s<%d><%s><>^" gave a parachute to ^"%s<%d><%s><>^"", name,get_user_userid(id),authid,name2,get_user_userid(player),authid2)
        }
        return PLUGIN_HANDLED
    }
    
    public client_PreThink(id)
    {
        //parachute.mdl animation information
        //0 - deploy - 84 frames
        //1 - idle - 39 frames
        //2 - detach - 29 frames
    
        if (!get_pcvar_num(pEnabled)) return
        if (!is_user_alive(id) || !has_parachute[id]) return
    
        new Float:fallspeed = get_pcvar_float(pFallSpeed) * -1.0
        new Float:frame
    
        new button = get_user_button(id)
        new oldbutton = get_user_oldbutton(id)
        new flags = get_entity_flags(id)
    
        if (para_ent[id] > 0 && (flags & FL_ONGROUND)) {
    
            if (get_pcvar_num(pDetach)) {
    
                if (get_user_gravity(id) == 0.1) set_user_gravity(id, 1.0)
    
                if (entity_get_int(para_ent[id],EV_INT_sequence) != 2) {
                    entity_set_int(para_ent[id], EV_INT_sequence, 2)
                    entity_set_int(para_ent[id], EV_INT_gaitsequence, 1)
                    entity_set_float(para_ent[id], EV_FL_frame, 0.0)
                    entity_set_float(para_ent[id], EV_FL_fuser1, 0.0)
                    entity_set_float(para_ent[id], EV_FL_animtime, 0.0)
                    entity_set_float(para_ent[id], EV_FL_framerate, 0.0)
                    return
                }
    
                frame = entity_get_float(para_ent[id],EV_FL_fuser1) + 2.0
                entity_set_float(para_ent[id],EV_FL_fuser1,frame)
                entity_set_float(para_ent[id],EV_FL_frame,frame)
    
                if (frame > 254.0) {
                    remove_entity(para_ent[id])
                    para_ent[id] = 0
                }
            }
            else {
                remove_entity(para_ent[id])
                set_user_gravity(id, 1.0)
                para_ent[id] = 0
            }
    
            return
        }
    
        if (button & IN_USE) {
    
            new Float:velocity[3]
            entity_get_vector(id, EV_VEC_velocity, velocity)
    
            if (velocity[2] < 0.0) {
    
                if(para_ent[id] <= 0) {
                    para_ent[id] = create_entity("info_target")
                    if(para_ent[id] > 0) {
                        entity_set_string(para_ent[id],EV_SZ_classname,"parachute")
                        entity_set_edict(para_ent[id], EV_ENT_aiment, id)
                        entity_set_edict(para_ent[id], EV_ENT_owner, id)
                        entity_set_int(para_ent[id], EV_INT_movetype, MOVETYPE_FOLLOW)
                        entity_set_int(para_ent[id], EV_INT_sequence, 0)
                        entity_set_int(para_ent[id], EV_INT_gaitsequence, 1)
                        entity_set_float(para_ent[id], EV_FL_frame, 0.0)
                        entity_set_float(para_ent[id], EV_FL_fuser1, 0.0)
                    }
                }
    
                if (para_ent[id] > 0) {
    
                    entity_set_int(id, EV_INT_sequence, 3)
                    entity_set_int(id, EV_INT_gaitsequence, 1)
                    entity_set_float(id, EV_FL_frame, 1.0)
                    entity_set_float(id, EV_FL_framerate, 1.0)
                    set_user_gravity(id, 0.1)
    
                    velocity[2] = (velocity[2] + 40.0 < fallspeed) ? velocity[2] + 40.0 : fallspeed
                    entity_set_vector(id, EV_VEC_velocity, velocity)
    
                    if (entity_get_int(para_ent[id],EV_INT_sequence) == 0) {
    
                        frame = entity_get_float(para_ent[id],EV_FL_fuser1) + 1.0
                        entity_set_float(para_ent[id],EV_FL_fuser1,frame)
                        entity_set_float(para_ent[id],EV_FL_frame,frame)
    
                        if (frame > 100.0) {
                            entity_set_float(para_ent[id], EV_FL_animtime, 0.0)
                            entity_set_float(para_ent[id], EV_FL_framerate, 0.4)
                            entity_set_int(para_ent[id], EV_INT_sequence, 1)
                            entity_set_int(para_ent[id], EV_INT_gaitsequence, 1)
                            entity_set_float(para_ent[id], EV_FL_frame, 0.0)
                            entity_set_float(para_ent[id], EV_FL_fuser1, 0.0)
                        }
                    }
                }
            }
            else if (para_ent[id] > 0) {
                remove_entity(para_ent[id])
                set_user_gravity(id, 1.0)
                para_ent[id] = 0
            }
        }
        else if ((oldbutton & IN_USE) && para_ent[id] > 0 ) {
            remove_entity(para_ent[id])
            set_user_gravity(id, 1.0)
            para_ent[id] = 0
        }
    }
    А не херня, не юзай. Это для модовых. Я не всмастривался в код когда кидал
     
  5. maFFyoZZyk Черный Жнец ^_^ Команда форума

    Регистрация:
    14.01.16
    Сообщения:
    1.404
    Симпатии:
    605
    Пол:
    Мужской
    Идея мне понравилась) И тут же родилось в мозгу еще больше вопросов
    Как покупают парашют пользователи, на кнопку или команду вводят?
    На сколько покупают, на раунд или на карту?
     
  6. x00peR Пользователь

    Регистрация:
    16.10.15
    Сообщения:
    297
    Симпатии:
    42
    Пол:
    Мужской
    Skype:
    x00peR
    ICQ:
    474751117
    maFFyoZZyk, say или say_team /bp
    Забиндить уже каждый может :)
    Даётся на время пока жив. Умер - потерял.
     
  7. Roman Пользователь

    Регистрация:
    09.02.16
    Сообщения:
    95
    Симпатии:
    15
    Пол:
    Мужской
    Есть парашют, дается на любой флаг, либо для всех пользователей. Можно отключить модель парашюта. Покупка парашюта за деньги, тем более на один раунд это фарш. Самый выгодный вариант был для меня..: поставил систему званий, после того как игрок достигает определенного звания, сервер выдает ему флаг ( указанный в парашюте) т.е получает беспатный парашют.
     
  8. x00peR Пользователь

    Регистрация:
    16.10.15
    Сообщения:
    297
    Симпатии:
    42
    Пол:
    Мужской
    Skype:
    x00peR
    ICQ:
    474751117
    Не на один раунд, на 1 жизнь.
    maFFyoZZyk, не возьмешься? :)
     
  9. maFFyoZZyk Черный Жнец ^_^ Команда форума

    Регистрация:
    14.01.16
    Сообщения:
    1.404
    Симпатии:
    605
    Пол:
    Мужской
    я ж миллион раз говорил, я не скриптер, могу что-то подшаманить,слепить из нескольких и тому подобное, самописы только Ванька делает)))
    а так в принципе, идея достойная, как и следующая после тебя.
    Но вторая больше подойдет для knife серверов)))
     
  10. maFFyoZZyk Черный Жнец ^_^ Команда форума

    Регистрация:
    14.01.16
    Сообщения:
    1.404
    Симпатии:
    605
    Пол:
    Мужской
    Можно попробовать, но нужно найти во-первых качественный плагин
    Во-вторых функцию которая проверит на пленту ты или нет
    Чтоб сделать так:
    1. Парашют можно было купить только на buyzone, нажав кнопку E
    2. Если ты на пленту дефузишь пачку, чтоб он дефузил, а не писал тебе, типа ты не в зоне закупки)
    Вот с таким добавками к твоей идее будет вообще зачет
     
  11. x00peR Пользователь

    Регистрация:
    16.10.15
    Сообщения:
    297
    Симпатии:
    42
    Пол:
    Мужской
    Skype:
    x00peR
    ICQ:
    474751117
    maFFyoZZyk, эта зачОт )))
    Погуглю, может чего нарою.