Перманентно HUD/DHUD съобщение или HUD bar/status

В този раздел можете да намерите полезни кодове и уроци свързани с PAWN скриптинга.
Потребителски аватар

Автор на темата
OciXCrom TM
Администратор
Администратор
Мнения: 5451
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 94 пъти
Получена благодарност: 622 пъти
Години: 22
Контакти:

Перманентно HUD/DHUD съобщение или HUD bar/status

Мнение от OciXCrom TM » 09 окт 2016, 16:08

В този урок ще ви обясня как можете да направите съобщение, което постоянно ще стои на екрана. Има няколко начина и видове, вие изберете този, който най-добре ви отговаря.

#1.1: Обикновено HUD съобщение, което постоянно ще стои на екрана и няма никакви допълнителни параметри: http://i.imgur.com/ErBNyRq.jpg

Код: Избери всички

#include <amxmodx>

#define PLUGIN_NAME "Permanent HUD Message"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "OciXCrom"

new g_iObject

// Това е съобщението.
new const g_szMessage[] = "Admin Skype: doctor.crom1234"

public plugin_init()
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
    
    // Това е обектът, който ще държи HUD съобщението.
    g_iObject = CreateHudSyncObj()
    
    // Задаваме задача (task), която ще се изпълнява функцията displayMessage() през 1 секунда.
    set_task(1.0, "displayMessage", _, _, _, "b")
}

public displayMessage()
{
    // Задаваме стойностите на съобщението.
    set_hudmessage(0, 255, 0, 0.02, 0.2, 0, 0.1, 1.0, 0.1, 0.1, -1)
    
    // Изпращаме съобщението до всички играчи.
    ShowSyncHudMsg(0, g_iObject, g_szMessage)
}
#1.2: Обикновено DHUD съобщение, което постоянно ще стои на екрана и няма никакви допълнителни параметри: http://i.imgur.com/TiO1Bnh.jpg

Код: Избери всички

#include <amxmodx>

// Винаги ползвайте тази проверка, тъй като в AMXX 1.8.3, dhudmessage е вграден в самия AMX.
#if AMXX_VERSION_NUM < 183
    #include <dhudmessage>
#endif

#define PLUGIN_NAME "Permanent DHUD Message"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "OciXCrom"

// Това е съобщението.
new const g_szMessage[] = "Admin Skype: doctor.crom1234"

public plugin_init()
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
    
    // Задаваме задача (task), която ще се изпълнява функцията displayMessage() през 1 секунда.
    set_task(1.0, "displayMessage", _, _, _, "b")
}

public displayMessage()
{
    // Задаваме стойностите на съобщението.
    set_dhudmessage(0, 255, 0, 0.02, 0.2, 0, 0.1, 1.0, 0.1, 0.1)
    
    // Изпращаме съобщението до всички играчи.
    show_dhudmessage(0, g_szMessage)
}
#2.1: Обикновено HUD съобщение, което постоянно ще стои на екрана и може да съдържа допълнителни параметри за играча: http://i.imgur.com/joXgtAc.jpg

Код: Избери всички

#include <amxmodx>

#define PLUGIN_NAME "Permanent HUD Message"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "OciXCrom"

// Произволно число за задачата, която ще изпълнява функцията.
#define TASK_MESSAGE 398822

new g_iObject

public plugin_init()
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
    
    // Това е обектът, който ще държи HUD съобщението.
    g_iObject = CreateHudSyncObj()
}

public client_putinserver(id)
{
    // Задаваме задача (task), която ще се изпълнява функцията displayMessage(id) през 1 секунда.
    // Добавяме произволна стойност на id, с цел да предотвратим неумишлено премахване на задачата от някоя друга функция или плъгин.
    set_task(1.0, "displayMessage", id + TASK_MESSAGE, _, _, "b")
}

public client_disconnect(id)
{
    // Премахваме задачата когато играчът напусне сървъра.
    new iTask = id + TASK_MESSAGE
    
    if(task_exists(iTask))
        remove_task(iTask)
}

public displayMessage(id)
{
    // Намираме id чрез изваждане на произволното число от него. 
    id -= TASK_MESSAGE
    
    // Ако играчът е мъртъв, искаме съобщението да не се показва.
    if(!is_user_alive(id))
        return
    
    // Задаваме стойностите на съобщението.
    set_hudmessage(0, 255, 0, 0.02, 0.2, 0, 0.1, 1.0, 0.1, 0.1, -1)
    
    // Изпращаме съобщението до играча.
    ShowSyncHudMsg(id, g_iObject, "Imash %i kruv", get_user_health(id))
} 
#2.2: Обикновено DHUD съобщение, което постоянно ще стои на екрана и може да съдържа допълнителни параметри за играча: http://i.imgur.com/gMwFQjY.jpg

Код: Избери всички

#include <amxmodx>

// Винаги ползвайте тази проверка, тъй като в AMXX 1.8.3, dhudmessage е вграден в самия AMX.
#if AMXX_VERSION_NUM < 183
    #include <dhudmessage>
#endif

#define PLUGIN_NAME "Permanent DHUD Message"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "OciXCrom"

// Произволно число за задачата, която ще изпълнява функцията.
#define TASK_MESSAGE 398822

public plugin_init()
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)

public client_putinserver(id)
{
    // Задаваме задача (task), която ще се изпълнява функцията displayMessage(id) през 1 секунда.
    // Добавяме произволна стойност на id, с цел да предотвратим неумишлено премахване на задачата от някоя друга функция или плъгин.
    set_task(1.0, "displayMessage", id + TASK_MESSAGE, _, _, "b")
}

public client_disconnect(id)
{
    // Премахваме задачата когато играчът напусне сървъра.
    new iTask = id + TASK_MESSAGE
    
    if(task_exists(iTask))
        remove_task(iTask)
}

public displayMessage(id)
{
    // Намираме id чрез изваждане на произволното число от него. 
    id -= TASK_MESSAGE
    
    // Ако играчът е мъртъв, искаме съобщението да не се показва.
    if(!is_user_alive(id))
        return
    
    // Задаваме стойностите на съобщението.
    set_dhudmessage(0, 255, 0, 0.02, 0.2, 0, 0.1, 1.0, 0.1, 0.1)
    
    // Изпращаме съобщението до играча.
    show_dhudmessage(id, "Imash %i kruv", get_user_health(id))
}
#3.1: Пример за HUD Bar - лента, която показва информация за играча (кръв, броня, пари и прочие): http://i.imgur.com/OViTHtW.jpg

Код: Избери всички

#include <amxmodx>
#include <cstrike>

#define PLUGIN_NAME "HUD Bar"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "OciXCrom"

// Произволно число за задачата, която ще изпълнява функцията.
#define TASK_MESSAGE 398822

new g_iObject

public plugin_init()
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
    
    // Това е обектът, който ще държи HUD съобщението.
    g_iObject = CreateHudSyncObj()
}

public client_putinserver(id)
{
    // Задаваме задача (task), която ще се изпълнява функцията displayMessage(id) през 1 секунда.
    // Добавяме произволна стойност на id, с цел да предотвратим неумишлено премахване на задачата от някоя друга функция или плъгин.
    set_task(1.0, "displayMessage", id + TASK_MESSAGE, _, _, "b")
}

public client_disconnect(id)
{
    // Премахваме задачата когато играчът напусне сървъра.
    new iTask = id + TASK_MESSAGE
    
    if(task_exists(iTask))
        remove_task(iTask)
}

public displayMessage(id)
{
    // Намираме id чрез изваждане на произволното число от него. 
    id -= TASK_MESSAGE
    
    // Ако играчът е мъртъв, искаме съобщението да не се показва.
    if(!is_user_alive(id))
        return
    
    // Задаваме стойностите на съобщението.
    set_hudmessage(255, 150, 0, -1.0, 0.8, 0, 0.1, 1.0, 0.1, 0.1, -1)
    
    // Изпращаме съобщението до играча.
    ShowSyncHudMsg(id, g_iObject, "< Kruv: %i | Bronq: %i | Pari: %i$ >", get_user_health(id), get_user_armor(id), cs_get_user_money(id))
} 
#3.2: Пример за DHUD Bar - лента, която показва информация за играча (кръв, броня, пари и прочие): http://i.imgur.com/9Ha2WEC.jpg

Код: Избери всички

#include <amxmodx>
#include <cstrike>

// Винаги ползвайте тази проверка, тъй като в AMXX 1.8.3, dhudmessage е вграден в самия AMX.
#if AMXX_VERSION_NUM < 183
    #include <dhudmessage>
#endif

#define PLUGIN_NAME "DHUD Bar"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "OciXCrom"

// Произволно число за задачата, която ще изпълнява функцията.
#define TASK_MESSAGE 398822

public plugin_init()
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)

public client_putinserver(id)
{
    // Задаваме задача (task), която ще се изпълнява функцията displayMessage(id) през 1 секунда.
    // Добавяме произволна стойност на id, с цел да предотвратим неумишлено премахване на задачата от някоя друга функция или плъгин.
    set_task(1.0, "displayMessage", id + TASK_MESSAGE, _, _, "b")
}

public client_disconnect(id)
{
    // Премахваме задачата когато играчът напусне сървъра.
    new iTask = id + TASK_MESSAGE
    
    if(task_exists(iTask))
        remove_task(iTask)
}

public displayMessage(id)
{
    // Намираме id чрез изваждане на произволното число от него. 
    id -= TASK_MESSAGE
    
    // Ако играчът е мъртъв, искаме съобщението да не се показва.
    if(!is_user_alive(id))
        return
    
    // Задаваме стойностите на съобщението.
    set_dhudmessage(255, 150, 0, -1.0, 0.8, 0, 0.1, 1.0, 0.1, 0.1)
    
    // Изпращаме съобщението до играча.
    show_dhudmessage(id, "< Kruv: %i | Bronq: %i | Pari: %i$ >", get_user_health(id), get_user_armor(id), cs_get_user_money(id))
}

Потребителски аватар

JustInCase AMXX
Потребител
Потребител
Мнения: 565
Регистриран: 14 окт 2016, 23:31
Се отблагодари: 3 пъти
Получена благодарност: 3 пъти

Re: Перманентно HUD/DHUD съобщение или HUD bar/status

Мнение от JustInCase AMXX » 26 ное 2016, 21:52

Слети са кодовете.
MANSION - HNS : 93.123.18.46:27016
ONLINE

Потребителски аватар

Автор на темата
OciXCrom TM
Администратор
Администратор
Мнения: 5451
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 94 пъти
Получена благодарност: 622 пъти
Години: 22
Контакти:

Re: Перманентно HUD/DHUD съобщение или HUD bar/status

Мнение от OciXCrom TM » 26 ное 2016, 23:24

Оправено.

Потребителски аватар

mount4 amxx
Потребител
Потребител
Мнения: 187
Регистриран: 03 ное 2016, 19:54
Местоположение: Варна
Години: 24
Контакти:

Re: Перманентно HUD/DHUD съобщение или HUD bar/status

Мнение от mount4 amxx » 05 дек 2016, 17:07

"Пример за HUD Bar - лента, която показва информация за играча (кръв, броня, пари и прочие): http://i.imgur.com/OViTHtW.jpg"

Това закакво след като цс-а си ги показва ? :D

Трябваше да го направиш да показва фраговете и смърта.

Само първите линкове са "щракащи", направи и другите така за по-лесно.

Не е ли по-добре да използваш това "holdtime Time the message stays on screen" вместо да го сетваш на всяка секунда ?
Взимаш времето което остава до края на картата и го подаваш на функцията.

Каква е разликата между HUD и DHUD ? Опитах да разбера но на пръв поглед неоткрих нищо.
94.190.190.195:27015 -> Изображение <-- Runemod here !
94.190.190.195:27017 -> Изображение

Segmentation fault Изображение <-- Opera browser !

Потребителски аватар

JustInCase AMXX
Потребител
Потребител
Мнения: 565
Регистриран: 14 окт 2016, 23:31
Се отблагодари: 3 пъти
Получена благодарност: 3 пъти

Re: Перманентно HUD/DHUD съобщение или HUD bar/status

Мнение от JustInCase AMXX » 05 дек 2016, 17:23

Не съм сигурен, но това което каза mount4 за "holdtime" си мисля, че така съобщението няма да се обновява. Може и да става за Admin Skype или други такива съобщения, които не изискват "update" така да го кажа :D. А това за {кръв/броня/пари и прочие} мисля, че човека просто е дал пример.
MANSION - HNS : 93.123.18.46:27016
ONLINE

Потребителски аватар

mount4 amxx
Потребител
Потребител
Мнения: 187
Регистриран: 03 ное 2016, 19:54
Местоположение: Варна
Години: 24
Контакти:

Re: Перманентно HUD/DHUD съобщение или HUD bar/status

Мнение от mount4 amxx » 05 дек 2016, 18:14

Знам че е дал пример но щеше да е по-добре да показва киловете за да може някой да вземе кода и да го сложи без да го преработва.
Прав си за рефрешването но виж че го е направил така в първите примери където няма нужда от такова.

Това е моята имплементация без рефрешване:

Код: Избери всички

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>

new g_Y, Float: yy


public plugin_init()
{
	register_plugin("myhud", "0.1", "mount4")
	
	g_Y = register_cvar("mh_y", "0.01")
	RegisterHam(Ham_Spawn, "player", "spawn_event", 1)
}

public plugin_cfg()
	yy = get_pcvar_float(g_Y)

public spawn_event(id)
{
	set_dhudmessage( random(256), random(256), random(256), -1.0, yy, _, _, get_timeleft() )
	show_dhudmessage( id, "<IP: XX.XXX.XX.XX:XXXXX>" )
}
Ето така изглежда:

Ето и с рефрешване + random color и cvar за настройване на refresh rate-а:

Код: Избери всички

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

new g_Rr, g_Y, Float: refreshRate, Float: yy


public plugin_init()
{
	register_plugin("myhud", "0.1", "mount4")
	
	g_Rr = register_cvar("mh_rr", "0.1")
	g_Y = register_cvar("mh_y", "0.01")
}

public plugin_cfg()
	set_task(refreshRate, "displayMsg", _, _, _, "b")

public displayMsg(id)
{
	refreshRate = get_pcvar_float(g_Rr)
	yy = get_pcvar_float(g_Y)
	/*-*/
	set_dhudmessage(random(256), random(256), random(256), -1.0, yy, _, _, refreshRate)
	show_dhudmessage(id, "<IP: XX.XXX.XX.XX:XXXXX>")
}
Последна промяна от TheRedShoko ReShoko на 05 дек 2016, 18:29, променено общо 1 път.
Причина: За реклама на сървъри има цял раздел ;) Премахнат е IP адреса от кода и снимката.
94.190.190.195:27015 -> Изображение <-- Runemod here !
94.190.190.195:27017 -> Изображение

Segmentation fault Изображение <-- Opera browser !

Потребителски аватар

TheRedShoko ReShoko
Модератор
Модератор
Мнения: 1001
Регистриран: 06 окт 2016, 07:42
Местоположение: Бургас
Се отблагодари: 4 пъти
Получена благодарност: 56 пъти

Re: Перманентно HUD/DHUD съобщение или HUD bar/status

Мнение от TheRedShoko ReShoko » 05 дек 2016, 18:27

Направено е на определено време, защото:
- ако искаш да показваш променливи с него (кръв, броня, пари, някаква създадена от сървъра валута или други), по този начин се обновява при промяна на съответната променлива
- ако някой не е бил в сървъра при показването на HUD съобщението, при влизането му в сървъра няма да го вижда.
- в началото на всеки рунд се извиква събитие, което изчиства целият HUD на играчите.
- ако каналът, в който е било извикано HUD съобщението, бъде зает от някое друго, то ще бъде заместено и ще изчезне от екрана.


Разликата между HUD и DHUD е в размера.
http://prnt.sc/dfnz5p

Потребителски аватар

mount4 amxx
Потребител
Потребител
Мнения: 187
Регистриран: 03 ное 2016, 19:54
Местоположение: Варна
Години: 24
Контакти:

Re: Перманентно HUD/DHUD съобщение или HUD bar/status

Мнение от mount4 amxx » 05 дек 2016, 18:39

RedShoko защо да е реклама след като същото IP го има в подписа ми ?
TheRedShoko написа:Направено е на определено време, защото:
- ако искаш да показваш променливи с него (кръв, броня, пари, някаква създадена от сървъра валута или други), по този начин се обновява при промяна на съответната променлива
- ако някой не е бил в сървъра при показването на HUD съобщението, при влизането му в сървъра няма да го вижда.
- в началото на всеки рунд се извиква събитие, което изчиства целият HUD на играчите.
- ако каналът, в който е било извикано HUD съобщението, бъде зает от някое друго, то ще бъде заместено и ще изчезне от екрана.


Разликата между HUD и DHUD е в размера.
http://prnt.sc/dfnz5p
Явно не си прочел какво съм написал -> ако няма да показваш променливи няма нужда от рефрешване.
Явно не си видял и кода който съм дал защото ако го беше видял щеше да забележиш че съобщението се показва при spawn на играча или примерно може да се сложи в client_putinserver което всъшност е по-добре.

"в началото на всеки рунд се извиква събитие, което изчиства целият HUD на играчите."

аха ми щом е така значи варианта който съм дал с hamsandwich spawn_event ще работи перфектно.

"ако каналът, в който е било извикано HUD съобщението, бъде зает от някое друго, то ще бъде заместено и ще изчезне от екрана."

Какво ще рече каналът ? кординатите ли ?

-------------

осикскром, версия 1.8.3 също иска да инклуудна dhudmessage :

Код: Избери всички

myhud.sma(36) : error 017: undefined symbol "set_dhudmessage"
myhud.sma(37) : error 017: undefined symbol "show_dhudmessage"
94.190.190.195:27015 -> Изображение <-- Runemod here !
94.190.190.195:27017 -> Изображение

Segmentation fault Изображение <-- Opera browser !

Потребителски аватар

TheRedShoko ReShoko
Модератор
Модератор
Мнения: 1001
Регистриран: 06 окт 2016, 07:42
Местоположение: Бургас
Се отблагодари: 4 пъти
Получена благодарност: 56 пъти

Re: Перманентно HUD/DHUD съобщение или HUD bar/status

Мнение от TheRedShoko ReShoko » 05 дек 2016, 18:49

Реклама е.

Кода съм го видял и е грешен.
- get_timeleft ти връща int а на теб ти трябва float
- няма да стане с putinserver.
- извикваш set_task с време 0.0, което не е правилно. ;)
- каналите при HUD са както телевизионните канали. На 1 телевизионен канал може да гледаш само една телевизионна програма. Така е и при HUD-a.
- 1.8.3 има вгреден DHUD няма как да ти иска.

П.С. предлагам ти да спреш да се репчиш и да спамиш ;)

Потребителски аватар

mount4 amxx
Потребител
Потребител
Мнения: 187
Регистриран: 03 ное 2016, 19:54
Местоположение: Варна
Години: 24
Контакти:

Re: Перманентно HUD/DHUD съобщение или HUD bar/status

Мнение от mount4 amxx » 05 дек 2016, 19:37

ОК щом е реклама няма да споря.

Ми то що непише какво връща ? https://www.amxmodx.org/api/amxmodx/get_timeleft
Как да го конвертирам така с кастване : (float)get_timeleft() или с float функция ?

става с putinserver, пробвах но няма да защото ще се изчиства дет викаш всеки рунд.
То даже щом се изчиства всеки рунд е по-добре с roundstart събитие да се напрай.(преди или след freeze end)

него извиквам с 0.0, къде го видя това ?
Извиквам го с refreshTime който се взима от cvar-a който е 0.1 defaulta му.

Пределно ми е ясно за какви канали говориш, не те питах това ами дали става въпрос за координатите. То всъшност няма как да става въпр. за кординати защото съм виждал overlap-ващи HUD.

еми иска ми, явно румънците https://amx.freakz.ro лъжат че компилатора им е 1.8.3
94.190.190.195:27015 -> Изображение <-- Runemod here !
94.190.190.195:27017 -> Изображение

Segmentation fault Изображение <-- Opera browser !

Отговори

Върни се в “Полезни кодове/уроци”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 3 госта