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

    Всего на сайте: 3
    Гостей: 1
    Пользователи: - отсутствуют
    Роботы: Yandex Bot, crawl 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
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    Урок 20. Что такое Stocks

    Информация

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

Реклама