Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Nighvision StatusIcon

, Не получается заставить работать STATUSICON
Статус пользователя medusa
сообщение 9.3.2015, 17:54
Сообщение #1


Стаж: 11 лет

Сообщений: 50
Благодарностей: 40
Полезность: 536

Здравствуйте. Есть плагин Nighvision_Google. Так вот я решил добавить иконку статуса, когда влючаешь его и убирать ее когда отключаешь, но проблема не могу понять куда вставить сообщение о ее создании, и исчезновении.
Код:
#include <amxmodx>
#include <fakemeta>
 
new const PLUGIN_VERSION[] = "1.0"
 
new g_IconStatus
 
new g_nightvision[33]
 
new g_default_map_light[32]
 
new g_fwLightStyle
 
new g_msgScreenFade
 
public plugin_precache()
{
        register_plugin("New NightVision", PLUGIN_VERSION, "Fai")
       
        g_fwLightStyle = register_forward(FM_LightStyle, "fw_LightStyle")
}
 
public plugin_init()
{
        unregister_forward(FM_LightStyle, g_fwLightStyle)
       
        g_msgScreenFade = get_user_msgid("ScreenFade")
       
        g_IconStatus  = get_user_msgid("StatusIcon")
       
        register_message(g_msgScreenFade, "message_screenfade")
        register_message(get_user_msgid("NVGToggle"), "message_nvgtoggle")
       
        set_cvar_num("sv_skycolor_r", 0)
        set_cvar_num("sv_skycolor_g", 0)
        set_cvar_num("sv_skycolor_b", 0)
}
 
public fw_LightStyle(style, const val[])
{
        if (!style)
                copy(g_default_map_light, charsmax(g_default_map_light), val)
}
 
public message_screenfade(msg_id, msg_dest, msg_entity)
{
        if (!g_nightvision[msg_entity])
                return PLUGIN_CONTINUE;
       
        if (get_msg_arg_int(4) != 255 || get_msg_arg_int(5) != 255 || get_msg_arg_int(6) != 255 || get_msg_arg_int(7) < 200)
                return PLUGIN_CONTINUE;
       
        remove_task(msg_entity)
        set_task(get_msg_arg_int(1) / 4096.0, "task_restore_screenfade", msg_entity)
       
        return PLUGIN_CONTINUE;
}
 
public message_nvgtoggle(msg_id, msg_dest, msg_entity)
{
        static flag
        flag = get_msg_arg_int(1)
       
        message_begin(MSG_ONE_UNRELIABLE, SVC_LIGHTSTYLE, _, msg_entity)
        write_byte(0)
       
        if (flag)
                write_string("#")
        else
                write_string(g_default_map_light)
       
        message_end()
       
        if (!task_exists(msg_entity))
        {
                message_begin(MSG_ONE, g_msgScreenFade, _, msg_entity)
                write_short((1<<12))
                write_short(0)
                write_short(0x0004)
               
                if (flag)
                {
                        write_byte(128)
                        write_byte(255)
                        write_byte(128)
                        write_byte(73)
                }
                else
                {
                        write_byte(0)
                        write_byte(0)
                        write_byte(0)
                        write_byte(0)
                }
               
                message_end()
        }
       
        g_nightvision[msg_entity] = flag
       
        return PLUGIN_HANDLED;
}
 
public task_restore_screenfade(id)
{
        if (!g_nightvision[id])
                return;
       
        message_begin(MSG_ONE, g_msgScreenFade, _, id)
        write_short((1<<12))
        write_short(0)
        write_short(0x0004)
        write_byte(128)
        write_byte(255)
        write_byte(128)
        write_byte(73)
        message_end()
}
 


Куда только не пытался вставлять, либо не компилит, либо сервер падает.
Код:
        message_begin(MSG_ONE_UNRELIABLE, g_IconStatus, {0,0,0}, msg_id) 
        write_byte(1)
        write_string( "flash_beam" )
        write_byte(100)
        write_byte(100)
        write_byte(100)
        message_end()

Код:
        message_begin(MSG_ONE_UNRELIABLE, g_IconStatus, {0,0,0}, msg_id) 
        write_byte(0)
        write_string( "flash_beam" )
        message_end()


Цитата("okeeey")
Вставлять сюда:)
Код:
public message_nvgtoggle(msg_id, msg_dest, msg_entity)

Где-то ниже
Код:
if(flag) { тут давать иконку } else { тут забирать }

Попробовал сделать вот что получилось :
Код:
#include <amxmodx>
#include <fakemeta>
 
new const PLUGIN_VERSION[] = "1.0"
 
new g_IconStatus
 
new g_nightvision[33]
 
new g_default_map_light[32]
 
new g_fwLightStyle
 
new g_msgScreenFade
 
public plugin_precache()
{
        register_plugin("New NightVision", PLUGIN_VERSION, "Fai")
       
        g_fwLightStyle = register_forward(FM_LightStyle, "fw_LightStyle")
}
 
public plugin_init()
{
        unregister_forward(FM_LightStyle, g_fwLightStyle)
       
        g_msgScreenFade = get_user_msgid("ScreenFade")
       
        g_IconStatus  = get_user_msgid("StatusIcon")
       
        register_message(g_msgScreenFade, "message_screenfade")
        register_message(get_user_msgid("NVGToggle"), "message_nvgtoggle")
       
        set_cvar_num("sv_skycolor_r", 0)
        set_cvar_num("sv_skycolor_g", 0)
        set_cvar_num("sv_skycolor_b", 0)
}
 
public fw_LightStyle(style, const val[])
{
        if (!style)
                copy(g_default_map_light, charsmax(g_default_map_light), val)
}
 
public message_screenfade(msg_id, msg_dest, msg_entity)
{
        if (!g_nightvision[msg_entity])
                return PLUGIN_CONTINUE;
       
        if (get_msg_arg_int(4) != 255 || get_msg_arg_int(5) != 255 || get_msg_arg_int(6) != 255 || get_msg_arg_int(7) < 200)
                return PLUGIN_CONTINUE;
       
        remove_task(msg_entity)
        set_task(get_msg_arg_int(1) / 4096.0, "task_restore_screenfade", msg_entity)
       
        return PLUGIN_CONTINUE;
}
 
public message_nvgtoggle(msg_id, msg_dest, msg_entity)
{
        static flag
        flag = get_msg_arg_int(1)
       
        message_begin(MSG_ONE_UNRELIABLE, SVC_LIGHTSTYLE, _, msg_entity)
        write_byte(0)
       
        if (flag)
                write_string("#")
        else
                write_string(g_default_map_light)
       
        message_end()
       
        if (!task_exists(msg_entity))
        {
                message_begin(MSG_ONE, g_msgScreenFade, _, msg_entity)
                write_short((1<<12))
                write_short(0)
                write_short(0x0004)
               
                if (flag)
                {
                        write_byte(128)
                        write_byte(255)
                        write_byte(128)
                        write_byte(73)
                }
                else
                {
                        write_byte(0)
                        write_byte(0)
                        write_byte(0)
                        write_byte(0)
                }
               
                message_end()
 
                                if(flag)
                                {        
                                                message_begin(MSG_ONE_UNRELIABLE, g_IconStatus, {0,0,0}, msg_id)
                                                write_byte(1)
                                                write_string( "flash_beam" )
                                                write_byte(100)
                                                write_byte(100)
                                                write_byte(100)
                                }
                                else
                                {      
                                                message_begin(MSG_ONE_UNRELIABLE, g_IconStatus, {0,0,0}, msg_id)
                                                write_byte(0)
                                                write_string( "flash_beam" )
                                }
                                message_end()
                }
        g_nightvision[msg_entity] = flag
       
        return PLUGIN_HANDLED;
}
 
public task_restore_screenfade(id)
{
        if (!g_nightvision[id])
                return;
       
        message_begin(MSG_ONE, g_msgScreenFade, _, id)
        write_short((1<<12))
        write_short(0)
        write_short(0x0004)
        write_byte(128)
        write_byte(255)
        write_byte(128)
        write_byte(73)
        message_end()

При компиляции в [98] строке ошибку выдает :)
При коннекте к серверу: Server shutting down
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя medusa
сообщение 11.3.2015, 5:40
Сообщение #2


Стаж: 11 лет

Сообщений: 50
Благодарностей: 40
Полезность: 536

Help
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя oxoTHuk.
сообщение 11.3.2015, 8:02
Сообщение #3


Иконка группы

Стаж: 17 лет

Сообщений: 879
Благодарностей: 515
Полезность: 867

Ошибку то какую выдает при компиляции?
Держу пари, отступы =)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя medusa
сообщение 11.3.2015, 9:52
Сообщение #4


Стаж: 11 лет

Сообщений: 50
Благодарностей: 40
Полезность: 536

Скрытый текст

С отступами все вроде нормально )
...
UPD: Попробовал изменить отступы, ошибка при компеляции пропала, но при коннекте так же падает сервер, [Server shutting down]
Скрытый текст

Скрытый текст


Отредактировал: medusa, - 11.3.2015, 10:02
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя oxoTHuk.
сообщение 11.3.2015, 12:23
Сообщение #5


Иконка группы

Стаж: 17 лет

Сообщений: 879
Благодарностей: 515
Полезность: 867

У тебя два два одинаковых условия обрабатываются два раза =)
Отрабатывает только одно из них.
Гугли что есть write_byte и write_string и ставь это все в одно условие.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: