Главная | Комментарии | О проекте
Чтение RSS
Суперсайт
Главная Контакты Карта сайта Добавить в избранное
  • Кто OnLine

    Всего на сайте: 9
    Гостей: 9
    Пользователи: - отсутствуют
    Роботы: - отсутствуют

    Опрос пользователей

    Для какого мода Вы пишите плагины?

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 25-03-2012, 10:05 Просмотров: 6365

    ham_strip_weapon Функция отбирает определенное оружие у игрока

    В Counter-Strike оружие игрока - один из важнейших моментов, по этому с этим предметом работать приходится часто, а работа в основном связана с тем что бы удалить или выдать оружие. Функция ham_strip_weapon позволяет удалить конкретное оружие у игрока.

    Исходный код функции:

    #include <fakemeta>
    #include <hamsandwich>
    stock ham_strip_weapon(id,weapon[])
    {
        if(!equal(weapon,"weapon_",7)) return 0

        new wId = get_weaponid(weapon)
        if(!wId) return 0

        new wEnt
        while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {}
        if(!wEnt) return 0

        if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt)

        if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0
        ExecuteHamB(Ham_Item_Kill,wEnt);

        set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId))
        
        return 1
    }


    Синтаксис:
    ham_strip_weapon(id,weapon[])

    • id - Индекс игрока
    • weapon[] - Название оружия weapon_*
    Функция вернет 1 если оружие удалено.

    Тип функции:
    stock

    Пример:
    /* Plugin generated by AMXX-Studio */

    #include <amxmodx>
    #include <amxmisc>

    #include <fakemeta>
    #include <hamsandwich>

    #define PLUGIN "[The useful functions] ham_strip_weapon"
    #define VERSION "1.0"
    #define AUTHOR "Admin"


    public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        
        register_clcmd("say strip","un_weapon")
        
    }
    public un_weapon(id){

        //Получение id оружия
        new pl_weapon = get_user_weapon(id)

        new weapon_name[24]
        //Получение названия оружия
        get_weaponname(pl_weapon,weapon_name,24)
                    
        //Вызов функции
        ham_strip_weapon(id,weapon_name)
        
    }
    stock ham_strip_weapon(id,weapon[])
    {
        if(!equal(weapon,"weapon_",7)) return 0

        new wId = get_weaponid(weapon)
        if(!wId) return 0

        new wEnt
        while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {}
        if(!wEnt) return 0

        if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt)

        if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0
        ExecuteHamB(Ham_Item_Kill,wEnt);

        set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId))
        
        return 1
    }


    Описание:
    В данном примере скрипт получает какое оружие у игрока, выполнившего команду say strip, и передает его индекс и название его оружие функции ham_strip_weapon, которая в свою очередь удаляет оружие.
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    ViniPux

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    fm_strip_user_gun(id,"weapon_usp")

    Думаю проще
    Admin

    30.07.2011
    ICQ: 980500
    Публикаций: 507
    Комментариев: 333
    Репутация: -  58  +

    Мое дело рассказать, а что выбрать дело уже ваше ))
    // only weapon index or its name can be passed, if neither is passed then the current gun will be stripped
    stock bool:fm_strip_user_gun(index, wid = 0, const wname[] = "") {
        new ent_class[32];
        if (!wid && wname[0])
            copy(ent_class, sizeof ent_class - 1, wname);
        else {
            new weapon = wid, clip, ammo;
            if (!weapon && !(weapon = get_user_weapon(index, clip, ammo)))
                return false;
            
            get_weaponname(weapon, ent_class, sizeof ent_class - 1);
        }

        new ent_weap = fm_find_ent_by_owner(-1, ent_class, index);
        if (!ent_weap)
            return false;

        engclient_cmd(index, "drop", ent_class);

        new ent_box = pev(ent_weap, pev_owner);
        if (!ent_box || ent_box == index)
            return false;

        dllfunc(DLLFunc_Think, ent_box);

        return true;
    }
    --------------------
    arwel

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Цитата: ViniPux
    fm_strip_user_gun(id,"weapon_usp")

    Гранаты не отберет.

    Информация

    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Наверх

Реклама