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

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

Статьи или фрагменты кода для новичков и уже опытных скриптеров по 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: Иконка статуса

Сообщение PRoSToTeM@ » 24 окт 2010, 16:22

А сколько можно сделать иконок одновременно через StatusIcon?
Аватара пользователя
PRoSToTeM@
Скриптер
 
Сообщения: 2498
Зарегистрирован: 26 мар 2010, 00:12
Благодарил (а): 438 раз.
Поблагодарили: 1125 раз.

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

Сообщение fl0wer » 27 фев 2011, 21:37

а как сделать чтобы иконка мигала разными цветами?
Аватара пользователя
fl0wer
 
Сообщения: 1687
Зарегистрирован: 27 фев 2011, 21:35
Откуда: Россия, Ижевск
Благодарил (а): 240 раз.
Поблагодарили: 508 раз.
Опыт программирования: Больше трех лет
Языки программирования: C++, Java, PAWN

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

Сообщение fl0wer » 25 мар 2011, 21:09

Типы урона:
[pawn]: "GENERIC" 
: "CRUSH" 
: "BULLET" 
: "SLASH" 
: "BURN" 
16 
: "FREEZE" 
32 
: "FALL" 
64 
: "BLAST" 
128 
: "CLUB" 
256 
: "SHOCK" 
512 
: "SONIC" 
1024 
: "ENERGYBEAM" 
16384
: "DROWN" 
32768 
: "PARALYSE" 
65536 
: "NERVEGAS" 
131072 
: "POISON" 
262144 
: "RADIATION" 
524288 
: "DROWNRECOVER" 
1048576 
: "CHEMICAL" 
2097152 
: "SLOWBURN" 
4194304 
: "SLOWFREEZE" [/pawn]
Аватара пользователя
fl0wer
 
Сообщения: 1687
Зарегистрирован: 27 фев 2011, 21:35
Откуда: Россия, Ижевск
Благодарил (а): 240 раз.
Поблагодарили: 508 раз.
Опыт программирования: Больше трех лет
Языки программирования: C++, Java, PAWN

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

Сообщение RyanTedder » 11 май 2011, 00:11

А свою иконку можно?
Аватара пользователя
RyanTedder
 
Сообщения: 6
Зарегистрирован: 10 май 2011, 01:51
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source

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

Сообщение vampir » 23 июн 2011, 10:19

RyanTedder писал(а):А свою иконку можно?

нет, в CS1.6 не поддерживает :(
Прошу не тревожить на счет плагинов или дополнений в ZP. Я в инактиве!!!
Аватара пользователя
vampir
 
Сообщения: 625
Зарегистрирован: 02 авг 2010, 13:27
Откуда: Уфа
Благодарил (а): 138 раз.
Поблагодарили: 91 раз.
Языки программирования: Counter-Strike 1.6

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

Сообщение AndrewZ » 17 авг 2011, 00:39

А как убрать иконку после, например, 2 секунд?
Аватара пользователя
AndrewZ
 
Сообщения: 130
Зарегистрирован: 24 апр 2011, 13:56
Благодарил (а): 38 раз.
Поблагодарили: 1 раз.
Языки программирования: Counter-Strike 1.6

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

Сообщение PRoSToTeM@ » 17 авг 2011, 00:41

set_task
Аватара пользователя
PRoSToTeM@
Скриптер
 
Сообщения: 2498
Зарегистрирован: 26 мар 2010, 00:12
Благодарил (а): 438 раз.
Поблагодарили: 1125 раз.

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

Сообщение AndrewZ » 17 авг 2011, 01:28

set_task

можно подробней, пожалуйста
Аватара пользователя
AndrewZ
 
Сообщения: 130
Зарегистрирован: 24 апр 2011, 13:56
Благодарил (а): 38 раз.
Поблагодарили: 1 раз.
Языки программирования: Counter-Strike 1.6

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

Сообщение PRoSToTeM@ » 17 авг 2011, 02:45

[pawn]
  1. public YourFunction(pId)

  2. {

  3.         message_begin(MSG_ONE, get_user_msgid("StatusIcon"), _, pId);

  4.         write_byte(1);

  5.         write_string("item_battery");

  6.         write_byte(255);

  7.         write_byte(100);

  8.         write_byte(160);

  9.         message_end();

  10.        

  11.         set_task(2.0, "TaskRemoveIcon", pId);

  12. }

  13.  

  14. public TaskRemoveIcon(pId)

  15. {

  16.         message_begin(MSG_ONE, get_user_msgid("StatusIcon"), _, pId);

  17.         write_byte(0);

  18.         write_string("item_battery");

  19.         message_end();

  20. }
[/pawn]
Аватара пользователя
PRoSToTeM@
Скриптер
 
Сообщения: 2498
Зарегистрирован: 26 мар 2010, 00:12
Благодарил (а): 438 раз.
Поблагодарили: 1125 раз.

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

Сообщение isioa » 20 авг 2011, 18:29

А координаты иконки можно настраивать?
Аватара пользователя
isioa
 
Сообщения: 129
Зарегистрирован: 10 апр 2011, 12:18
Благодарил (а): 91 раз.
Поблагодарили: 30 раз.

Пред.След.

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

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

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