Помогите добавить

Сообщения
10
Реакции
0
Доброго времени суток. Не понимаю как сделать, чтобы ночное видение было у всех, без необходимости его покупать.
Пробовал добавлять
Код:
#include <fun>
public client_connect(id)
{
    give_item(id,"item_nvgs")
}
Но если я правильно понял, то это и не должно было сработать. Это первая попытка что-то сделать, но я зашел в тупик. Помогите пожалуйста

Код:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fun>

// GetPdataByte(iEntity, iOffset, iLinuxOffset)
#define GetPdataByte(%0,%1,%2)    ((get_pdata_int(%0, %1 / 4, %2) >> (8 * (%1 % 4))) & 0xFF)

// Найденные мною смещения
#define OFFSET_TURNEDNVG        517    // Включено ли ночное видение

// Различие линуксовских оффсетов от виндосовских
#define CBasePlayer                5

// Режим наблюдения от первого лица
#define OBS_IN_EYE                4

// Включено ли ночное видение у игрока
#define PlayerTurnedNvg(%0)        GetPdataByte(%0, OFFSET_TURNEDNVG, CBasePlayer)
// Получение режима наблюдения
#define PlayerSpectateMode(%0)    entity_get_int(%0, EV_INT_iuser1)
// Получение игрока за которым наблюдаем
#define PlayerSpectate(%0)        entity_get_int(%0, EV_INT_iuser2)

// Настройки
#define NVG_UPDATE      0.1     // Как часто обновлять ночное видение (свечение)
#define NVG_RADIUS      500     // Радиус свечения
#define NVG_COLOR_R     255     // Цвет ночного видения (RED)
#define NVG_COLOR_G     255       // GREEN
#define NVG_COLOR_B     255       // BLUE
#define NVG_LIFE        2      // Жизнь свечения
#define NVG_DECAYRATE   0    // Затухание
// Инициализация
public plugin_init()
{
    // Регистрируем
    register_plugin("Custom NVG", "Alpha", "WPMG PRoSToTeM@");
    
    // Блокируем стандартное ночное видение
    set_msg_block(get_user_msgid("NVGToggle"), BLOCK_SET);
    
    // Устанавливаем задачу на обновление ночного видения
    set_task(NVG_UPDATE, "TaskNVG", _, _, _, "b");
}

// Обновление ночного видения
public TaskNVG()
{
    // Игроки, количество игроков, игрок, наблюдаемый игрок
    new iPlayers[32], iPlayersCount, iEntity, iSpectating;
    
    // Получаем игроков
    get_players(iPlayers, iPlayersCount);
    
    // Цикл по всем игрокам
    for (new i = 0; i < iPlayersCount; i++)
    {
        // Запоминаем последнего игрока
        iEntity = iPlayers[i];
        
        // Если игрок жив
        if (is_user_alive(iEntity))
        {
            // Если не включено ночное видение идём в начало цикла
            if (!PlayerTurnedNvg(iEntity))
                continue;
        }
        // Если игрок мёртв
        else
        {
            // Если режим наблюдения не от первого лица идём в начало цикла
            if (PlayerSpectateMode(iEntity) != OBS_IN_EYE)
                continue;
            
            // Получаем наблюдаемого игрока
            iSpectating = PlayerSpectate(iEntity);
            
            // Если наблюдаёмый мёртв или его нет идём в начало цикла
            if (!is_user_alive(iSpectating))
                continue;
            // Если у наблюдаемого не включено ночное видение идём в начало цикла
            if (!PlayerTurnedNvg(iSpectating))
                continue;
        }
        
        // Получаем координаты игрока
        new iOrigin[3];
        
        get_user_origin(iEntity, iOrigin);
        
        // Отсылаем свечение
        message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, iEntity);
        write_byte(TE_DLIGHT);
        write_coord(iOrigin[0]); // Координаты
        write_coord(iOrigin[1]);
        write_coord(iOrigin[2]);
        write_byte(NVG_RADIUS); // Радиус
        write_byte(NVG_COLOR_R); // Цвет
        write_byte(NVG_COLOR_G);
        write_byte(NVG_COLOR_B);
        write_byte(NVG_LIFE); // Жизнь
        write_byte(NVG_DECAYRATE); // Decay rate
        message_end();
    }
}
 
Сообщения
2,144
Реакции
1,223
Помог
44 раз(а)
Вы пытались выдать прибор ночного зрения игроку, который еще только подключается (качает файлы с сервера и т.п.), а нужно после спавна. Попробуйте:
Код:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <fun>

// GetPdataByte(iEntity, iOffset, iLinuxOffset)
#define GetPdataByte(%0,%1,%2)    ((get_pdata_int(%0, %1 / 4, %2) >> (8 * (%1 % 4))) & 0xFF)

// Найденные мною смещения
#define OFFSET_TURNEDNVG        517    // Включено ли ночное видение

// Различие линуксовских оффсетов от виндосовских
#define CBasePlayer                5

// Режим наблюдения от первого лица
#define OBS_IN_EYE                4

// Включено ли ночное видение у игрока
#define PlayerTurnedNvg(%0)        GetPdataByte(%0, OFFSET_TURNEDNVG, CBasePlayer)
// Получение режима наблюдения
#define PlayerSpectateMode(%0)    entity_get_int(%0, EV_INT_iuser1)
// Получение игрока за которым наблюдаем
#define PlayerSpectate(%0)        entity_get_int(%0, EV_INT_iuser2)

// Настройки
#define NVG_UPDATE      0.1     // Как часто обновлять ночное видение (свечение)
#define NVG_RADIUS      500     // Радиус свечения
#define NVG_COLOR_R     255     // Цвет ночного видения (RED)
#define NVG_COLOR_G     255       // GREEN
#define NVG_COLOR_B     255       // BLUE
#define NVG_LIFE        2      // Жизнь свечения
#define NVG_DECAYRATE   0    // Затухание
// Инициализация
public plugin_init()
{
    // Регистрируем
    register_plugin("Custom NVG", "Alpha", "WPMG PRoSToTeM@");
    
    // Блокируем стандартное ночное видение
    set_msg_block(get_user_msgid("NVGToggle"), BLOCK_SET);
    
    // Устанавливаем задачу на обновление ночного видения
    set_task(NVG_UPDATE, "TaskNVG", _, _, _, "b");

    RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawn_Post", .Post = true);
}

public ham_PlayerSpawn_Post(const pPlayer) {
    if(is_user_alive(pPlayer)) {
        give_item(pPlayer, "item_nvgs");
    }
}

// Обновление ночного видения
public TaskNVG()
{
    // Игроки, количество игроков, игрок, наблюдаемый игрок
    new iPlayers[32], iPlayersCount, iEntity, iSpectating;
    
    // Получаем игроков
    get_players(iPlayers, iPlayersCount);
    
    // Цикл по всем игрокам
    for (new i = 0; i < iPlayersCount; i++)
    {
        // Запоминаем последнего игрока
        iEntity = iPlayers[i];
        
        // Если игрок жив
        if (is_user_alive(iEntity))
        {
            // Если не включено ночное видение идём в начало цикла
            if (!PlayerTurnedNvg(iEntity))
                continue;
        }
        // Если игрок мёртв
        else
        {
            // Если режим наблюдения не от первого лица идём в начало цикла
            if (PlayerSpectateMode(iEntity) != OBS_IN_EYE)
                continue;
            
            // Получаем наблюдаемого игрока
            iSpectating = PlayerSpectate(iEntity);
            
            // Если наблюдаёмый мёртв или его нет идём в начало цикла
            if (!is_user_alive(iSpectating))
                continue;
            // Если у наблюдаемого не включено ночное видение идём в начало цикла
            if (!PlayerTurnedNvg(iSpectating))
                continue;
        }
        
        // Получаем координаты игрока
        new iOrigin[3];
        
        get_user_origin(iEntity, iOrigin);
        
        // Отсылаем свечение
        message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, iEntity);
        write_byte(TE_DLIGHT);
        write_coord(iOrigin[0]); // Координаты
        write_coord(iOrigin[1]);
        write_coord(iOrigin[2]);
        write_byte(NVG_RADIUS); // Радиус
        write_byte(NVG_COLOR_R); // Цвет
        write_byte(NVG_COLOR_G);
        write_byte(NVG_COLOR_B);
        write_byte(NVG_LIFE); // Жизнь
        write_byte(NVG_DECAYRATE); // Decay rate
        message_end();
    }
}
 
Сообщения
2,144
Реакции
1,223
Помог
44 раз(а)
Faite, не выдает или другое свечение не срабатывает?
 
Сообщения
10
Реакции
0
Minni, просто не выдает, сам плагин работает. Проверял покупкой ночного видения)
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу