Русское сообщество по скриптингу

Иконка статуса

Статьи или фрагменты кода для новичков и уже опытных скриптеров по AMXX.

Модератор: Chuvi

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только обучающему материалу по AMX Mod X.

Иконка статуса

Сообщение DJ_WEST » 02 окт 2009, 08:35

Автор: SAMURAI16
Перевод и редактирование: DJ_WEST

Иконка статуса - это HUD иконка, которая располагается на экране игрока и используется в определенных случаях для определения статуса игрока. В данной статье мы рассмотрим способ создания такой иконки. За данную иконку отвечает сообщение с названием StatusIcon.
Структура данного сообщения:
Status byte Статус сообщения
SpriteName string Название спрайта
ColorR byte Цвет R (красный)
ColorG byte Цвет G (зеленый)
ColorB byte Цвет B (синий)

Статус сообщения может быть следующим:
  • 0 - спрятать иконку
  • 1 - показать иконку
  • 2 - обновить иконку
Если статус равен 0, то посылать цвет не нужно.

Итак, начнем:
1. Прежде всего нам необходимо создать глобальную переменную для хранения ID сообщения, которое отвечает за такого рода иконку:
Код: Выделить всё

new g_IconStatus 

2. В plugin_init мы получаем ID сообщения и сохраняем его в переменную g_IconStatus :
Код: Выделить всё

g_IconStatus  
= get_user_msgid("StatusIcon")
 

3. Для того чтобы отобразить иконку статуса, нам необходимо создать сообщение следующим образом:
Код: Выделить всё

message_begin
(MSG_ONE_UNRELIABLE, g_IconStatus, {0,0,0}, id) 
 

4. Дальше нам необходимо передать байт, отвечающий за статус сообщения:
Код: Выделить всё

write_byte
(1)
 

1 - означает показ иконки.
5. Затем необходимо передать название спрайта:
Код: Выделить всё

write_string
("имя спрайта")
 

6. Теперь нам нужно передать цвет иконки:
Код: Выделить всё

write_byte
(r)
write_byte(g)
write_byte(b) 
 

7. Завершаем сообщение следующим образом:
Код: Выделить всё

message_end
() 
 


Примерный плагин:
Код: Выделить всё
#include <amxmodx>
#include <fakemeta>

new g_IconStatus

public plugin_init
() 
{
    register_plugin("Status Icon", "0.1", "SAMURAI")
    
    register_forward
(FM_PlayerPreThink, "Pre_Think")
    
    g_IconStatus 
= get_user_msgid("StatusIcon")   
}

public Pre_Think(id)
{
    if (!(pev(id,pev_button) & FL_ONGROUND))
    {    
        message_begin
(MSG_ONE_UNRELIABLE, g_IconStatus, {0,0,0}, id)
        write_byte(1)
        write_string("dmg_poison")
        write_byte(0)
        write_byte(255)
        write_byte(0)
        message_end()
    }   
}  


[align=center]
item_longjump.jpg
item_battery.jpg
dmg_shock.jpg
dmg_rad.jpg
dmg_heat.jpg
dmg_gas.jpg
dmg_drown.jpg
dmg_cold.jpg
dmg_bio.jpg
[/align]


Список названий спрайтов, которые могут быть использованы:
Код: Выделить всё

selection           
bucket1               
bucket2               
bucket3               
bucket4               
bucket5               
bucket0               
dmg_bio               
dmg_poison           
dmg_chem           
dmg_cold       
dmg_drown           
dmg_heat           
dmg_gas               
dmg_rad               
dmg_shock           
number_0           
number_1           
number_2         
number_3           
number_4           
number_5           
number_6           
number_7           
number_8           
number_9           
divider               
cross               
dollar               
minus               
plus               
c4               
defuser             
stopwatch           
smallskull             
smallc4             
smallvip               
buyzone               
rescue               
escape           
vipsafety           
suit_full           
suit_empty           
suithelmet_full           
suithelmet_empty     
flash_full           
flash_empty           
flash_beam           
train_back         
train_stop           
train_forward1           
train_forward2           
train_forward3         
autoaim_c           
title_half           
title_life           
d_knife                   
d_ak47                 
d_awp                     
d_deagle           
d_flashbang           
d_fiveseven           
d_g3sg1               
d_glock18           
d_grenade           
d_m249               
d_m3               
d_m4a1               
d_mp5navy           
d_p228               
d_p90               
d_scout               
d_sg550               
d_sg552               
d_ump45         
d_usp               
d_tmp               
d_xm1014           
d_skull               
d_tracktrain           
d_aug                   
d_mac10               
d_elite               
d_headshot               
item_battery           
item_healthkit           
item_longjump           
radar
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

Re: Иконка статуса

Сообщение Sheigar » 25 янв 2022, 18:26

А как создать сразу две иконки с одинаковым спрайтом? Не создавая два плагина.
Опытный скриптер.

VK: https://vk.com/vasheigar
Discord: Sheigar#0294
Аватара пользователя
Sheigar
 
Сообщения: 109
Зарегистрирован: 03 июл 2021, 21:36
Благодарил (а): 27 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Библиотека Amxmodx.
Язык Pawn.

Re: Иконка статуса

Сообщение Uzumym93 » 04 фев 2022, 22:45

Sheigar писал(а):А как создать сразу две иконки с одинаковым спрайтом? Не создавая два плагина.

Никак. Иконки будут поверх друг друга, даже если разные цвета. Нужно ставить разные иконки.
Аватара пользователя
Uzumym93
 
Сообщения: 2
Зарегистрирован: 04 фев 2022, 22:40
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Языки программирования: Я ничего не знаю

Пред.

Вернуться в Статьи / фрагменты кода

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1