Страница 1 от 3

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

Публикувано на: 09 Окт 2016, 16:08
от OciXCrom
В този урок ще ви обясня как можете да направите съобщение, което постоянно ще стои на екрана. Има няколко начина и видове, вие изберете този, който най-добре ви отговаря.

#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))
}

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

Публикувано на: 26 Ное 2016, 21:52
от JustInCase
Слети са кодовете.

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

Публикувано на: 26 Ное 2016, 23:24
от OciXCrom
Оправено.

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

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

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

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

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

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

Каква е разликата между HUD и DHUD ? Опитах да разбера но на пръв поглед неоткрих нищо.

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

Публикувано на: 05 Дек 2016, 17:23
от JustInCase
Не съм сигурен, но това което каза mount4 за "holdtime" си мисля, че така съобщението няма да се обновява. Може и да става за Admin Skype или други такива съобщения, които не изискват "update" така да го кажа :D. А това за {кръв/броня/пари и прочие} мисля, че човека просто е дал пример.

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

Публикувано на: 05 Дек 2016, 18:14
от mount4
Знам че е дал пример но щеше да е по-добре да показва киловете за да може някой да вземе кода и да го сложи без да го преработва.
Прав си за рефрешването но виж че го е направил така в първите примери където няма нужда от такова.

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

Код за потвърждение: Избери целия код

/* 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>")
}

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

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


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

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

Публикувано на: 05 Дек 2016, 18:39
от mount4
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"

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

Публикувано на: 05 Дек 2016, 18:49
от TheRedShoko
Реклама е.

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

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

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

Публикувано на: 05 Дек 2016, 19:37
от mount4
ОК щом е реклама няма да споря.

Ми то що непише какво връща ? 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