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

    Всего на сайте: 12
    Гостей: 5
    Пользователи: - отсутствуют
    Роботы: Google AdSense, Yandex Bot, Yandex Bot, Yandex Bot, Yandex Bot, Yandex Bot, crawl Bot

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

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

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 4-04-2012, 12:44 Просмотров: 5430

    set_pdata_int Функция устанавливает значения pvPrivateData данным (OFFSET`ам)

    Кто читал про функцию get_pdata_int наверняка задался вопросом: "Если можно получить данные, можно же и их изменить, но как?". Ответ очень прост, и заключен он в функции set_pdata_int

    Инфо из fakemeta.inc:
    /* Sets an integer from private data.  _linuxdiff is added into the _Offset if it's used on a linux server. */
    native set_pdata_int(_index,_Offset,_Value,_linuxdiff=5);


    Синтаксис:
    set_pdata_int(_index,_Offset,_Value,_linuxdiff=5)

    • _index - id entity ( объект/игрок)
    • _Offset - Изменяемый оффсет
    • _Value - Присваиваемое значение
    • _linuxdiff=5 - смещение для linux


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

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

    #include <amxmodx>
    #include <amxmisc>
    #include <fakemeta>

    #define OFFSET_MONEY            115

    #define PLUGIN "[fakemeta.inc] set_pdata_int"
    #define VERSION "1.0"
    #define AUTHOR "Admin"

    new g_msgMoney

    public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        
        register_clcmd("say /setm","set_money")
        g_msgMoney = get_user_msgid("Money")
    }
    public set_money(id){

        new money = 777
        set_pdata_int(id,OFFSET_MONEY,money)

        message_begin(MSG_ONE, g_msgMoney, {0, 0, 0}, id)
        write_long(money)
        write_byte( 1 )
        message_end()
        
    }


    Описание:
    Синтаксис достаточно простой и в примере все наглядно видно, хочу только пояснить почему тут добавлено еще немного кода.
    Если вы выполните функцию без посылки клиенту сообщения об обновлении денег, то фактически изменение произойдет, но на экране игрока денег не увеличится, и измениться только при следующем HUD обновлении. Это происходит потому что изменения вносятся непосредственно в память.
    (Грубый пример: У вас есть кошелек, вы его оставили дома, а кто то доложил или вытащил денег и пока вы не откроете и не пересчитаете деньги, вы не узнаете о изменении их количества.)
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    SpIxE

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

    Вопрос. Если использовать офсет, можно ли установить значение денег >16000?
    Admin

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

    Честно говоря не знаю, не задумывался, попробуй...
    --------------------
    FellomoN

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

    за что отвечает
    write_byte( 1 )
    Admin

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

    Для подобных вопросов есть спец раздел на форуме.
    --------------------
    igas

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

    SpIxE,
    нельзя, для этого нужно писать отдельную функцию денег.
    Тобишь после смены карты, респауна, раунда, значение вернет макс сумму 16000,
    если администратор сайта даст добро, напишу полный пример лимита денег > 16000
    Admin

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

    igas, даю добро ;)
    --------------------

    Информация

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

Реклама