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

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

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

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

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 25-11-2012, 14:49 Просмотров: 4720
    У новичков регулярно возникает вопрос чем отличаются stock функции от native, давайте разберемся вместе.

    Stock функция (в основном, так как может быть и переменной) которая если не используется где-нибудь в плагине, будет попросту проигнорировна компилятором. То есть компилятор как бы не заметит ее вовсе.

    Многим новичками приходит идея сделать так:
    #include <amxmodx>
    #include <amxmisc>

    public plugin_init()
    {
        register_plugin("The","Matrix","Has You")
        
        fnDoFunc()
    }

    stock fnDoFunc()
        log_amx("the world has imploded upon itself")

    Хотя фактически та же самая функциональность могла быть достигнута так:
    #include <amxmodx>
    #include <amxmisc>

    public plugin_init()
    {
        register_plugin("The","Matrix","Has You")
        
        fnDoFunc()
    }

    fnDoFunc()
        log_amx("the world has imploded upon itself")


    Но для чего тогда нужны эти сток функции? В основном там, где есть инклюды с множеством функций, из которых обычно используется малая часть.
    Например возьмем инклюд engine_stocks.inc от модуля engine.

    Начало файла:
    stock fakedamage(idvictim,const szClassname[],Float:takedmgdamage,damagetype)
    {
        new entity = create_entity("trigger_hurt");
        if (entity)
        {
            DispatchKeyValue(entity,"classname","trigger_hurt");
            new szDamage[16];
            // Takedamages only do half damage per attack (damage is damage per second, and it's triggered in 0.5 second intervals).
            // Compensate for that.
            format(szDamage,15,"%f",takedmgdamage * 2);
            DispatchKeyValue(entity,"dmg",szDamage);
            format(szDamage,15,"%i",damagetype);
            DispatchKeyValue(entity,"damagetype",szDamage);
            DispatchKeyValue(entity,"origin","8192 8192 8192");
            DispatchSpawn(entity);
            entity_set_string(entity, EV_SZ_classname, szClassname);
            fake_touch(entity,idvictim);
            remove_entity(entity);
            return 1;
        }
        return 0;
    }

    //wrapper for find_ent_by_class
    stock find_ent(iStart, const szClassname[])
    {
        return find_ent_by_class(iStart, szClassname);
    }
    //...

    Если в плагине будет использована функция find_ent, то она будет включена в скрипт.
    А функцию stock fakedamage в плагин не использовалась в плагине и она не будет включена в скрипт.

    Stock может быть и переменной:
    stock const mystring[] = "hello pm"


    Лично я не имел с ними дело, по этому опущу это, если интересно - переведите сами.
    Вот ссылка оригинальный материал: [TUT] The Use of Stocks
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Наверх

Реклама