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

hud через функцию  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

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

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

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

hud через функцию

Сообщение smollvrn » 20 июн 2022, 21:22

хаю, подскажите как заставить работать, или где подсмотреть...

Код: Выделить всё
#include <amxmodx>
new i,hit,damage,g_hudmsg1
enum Hud
{
    hit1,
    damage1,
    attacker1[128],
    g_hudmsg,
    r,
    g,
    b,
    Float:x,
    Float:y,
    effects,
    Float:fxtime,
    Float:holdtime,
    Float:fadeintime,
    Float:fadeouttime
};
new EnumHud[Hud];
public plugin_init(){
    register_event( "Damage", "Event_Damage", "b", "2!0", "3=0", "4!0" )
    g_hudmsg1 = CreateHudSyncObj()
}
public Event_Damage(id){
    new weapon, bodypart, attacker = get_user_attacker(id,weapon,bodypart)
    if(is_user_connected(attacker)){
        hit++
        damage = read_data(2)+damage
        EnumHud
[hit1]=hit
        EnumHud
[damage1]=damage
        EnumHud
[attacker1]=attacker
        EnumHud
[g_hudmsg]=g_hudmsg1
        EnumHud
[r]=255
        EnumHud
[g]=0
        EnumHud
[b]=0
        EnumHud
[x]=-1.0
        EnumHud
[y]=0.36
        EnumHud
[effects]=0
        EnumHud
[fxtime]=0.0
        EnumHud
[holdtime]=0.2
        EnumHud
[fadeintime]=0.0
        EnumHud
[fadeouttime]=0.0
        i
++
        set_task(5.0, "hud", i,EnumHud)
}
}
public hud(EnumHud[],i){
    set_hudmessage(EnumHud[r], EnumHud[g], EnumHud[b], EnumHud[x], EnumHud[y], EnumHud[effects], EnumHud[fxtime], EnumHud[holdtime], EnumHud[fadeintime], EnumHud[fadeouttime], -1)
    ShowSyncHudMsg(EnumHud[attacker1],EnumHud[g_hudmsg], "%d-%d",EnumHud[hit1], EnumHud[damage1])
}
Аватара пользователя
smollvrn
 
Сообщения: 4
Зарегистрирован: 21 апр 2022, 08:39
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Языки программирования: Я ничего не знаю

Re: hud через функцию

Сообщение [N][E][M][E][C] » 21 июн 2022, 02:15

Если я тебя правильно понял :-)
Код: Выделить всё
#include <amxmodx>

#define REGISTRATION "TEST", "rz 0.1", "[N][E][M][E][C]"     
#define MAX_PLAYERS 32                          

enum _: INFO {                                                
    shot
,              
    damage_amount      
};                                  

new g_msg
, g_data[MAX_PLAYERS+1][INFO]; //Если делаешь глобальные переменные, то защем их передовать через set_task???           

public plugin_init() {
    register_plugin(REGISTRATION);

    register_event("HLTV", "event_start_round", "a", "1=0", "2=0"); //с помощью этого момента, будем обнулять наши счетчики (попаданий и урона) в начале каждого раунда
    register_event( "Damage", "event_damage", "b", "2!0", "3=0", "4!0"); //с помощью этого момента, будем приплюсовывать при каждом попадании и нанесенном уроне
    
    g_msg 
= CreateHudSyncObj();
}
                                                 

public event_start_round
() {                               
    new players
[MAX_PLAYERS], count;   
    
    get_players
(players, count, "ch");              

    for
(new i; i < count; ++i)
        arrayset(g_data[players[i]], 0, INFO);
}
                                                      

public event_damage
(id) {       
    new attacker 
= get_user_attacker(id);
 
    if
(is_user_connected(attacker) && id != attacker) {                          
        g_data
[attacker][damage_amount] += read_data(2);                                      
        
++g_data[attacker][shot];                                                

        set_task
(0.1, "message", attacker);   
    
}                                  
}                                                    

public message
(user) {                             
    set_hudmessage
(255, 0, 0, -1.0, 0.36, 0, 0.0, 1.0, 0.0, 0.0, -1);         
    ShowSyncHudMsg
(user, g_msg, "demage [%i] - shot [%i]", g_data[user][damage_amount], g_data[user][shot]);
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

Re: hud через функцию

Сообщение smollvrn » 22 июн 2022, 07:39

а в set_hudmessage можно значения через переменные устанавливать? мне интересно чтоб set_task передавал массив с переменными в функцию для set_hud и ShowSyncHudMsg ...не готовый плагин, а именно как это сделать... или там только константы можно?

p.s. еще в худе пробелы обрезаются до одного, как увеличить пустое горизонтальное(можно и вертикальное) расстояние между элементами в худе , форум тоже обрезает лишние ( по его мнению) пробелы " ", есть какие непечатаемые символы
Код: Выделить всё
"    " 
Аватара пользователя
smollvrn
 
Сообщения: 4
Зарегистрирован: 21 апр 2022, 08:39
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Языки программирования: Я ничего не знаю

Re: hud через функцию  [Решено]

Сообщение [N][E][M][E][C] » 22 июн 2022, 13:42

Вот тест про передачу массива(Перечисления в enum не однотипное, тоесть где-то число, где-то строка) через set_task
Код: Выделить всё
#include <amxmodx> 
                  
#define INFO_REGISTRATION "TEST", "1.0", "[N][E][M][E][C]"   
                
enum _
: DATA { //перечисления данных которые будем хранить в массиве
    R, //красный
    G, //зелный
    B, //синий
    name[32] //тут будем хранить строку
};
                                                                             
new g_msg
; 

public plugin_init
() {
    register_plugin(INFO_REGISTRATION); 
            
    g_msg 
= CreateHudSyncObj();
    set_task(10.0, "test1");
}
                           
                                                                       
public test1
() {                            
    new RGB
[DATA]; //создаем массив для дальнейшего храния цвета сообщения и произвольной строки                                                        
                                
    for
(new i; i < 3; ++i) 
        RGB
[i] = random(255); //запишем в массив рандомно 3 числа от 0 до 255                                 
                                                                   
    RGB
[name] = "COLOR"; //запишем произвольную строку в массив RGB в 3 ячейку
    set_task(5.0, "test2", 333, RGB, charsmax(RGB), "a", 1); //выведем сообщение через 5 секунд и передадим значение массива
}                                                                                     
                              
public test2
(RGB[], taskid) {                                                       
    set_hudmessage
(RGB[R], RGB[G], RGB[B], -1.0, 0.36, 0, 0.0, 5.0, 0.0, 0.0, -1); //подставим рандомный цвет сообщения         
    ShowSyncHudMsg(0, g_msg, "R - %i, G - %i, B - %i, name - %s", RGB[R], RGB[G], RGB[B], RGB[name]); //выводим сообщение с тремя значениями массива
}
На счет пробелов горизонтально: 4 пробела поставишь, 4 пробела будет. Вертикально: для этого есть перенос строки ^n.
P.S. Думаю разжевал тебе, понятней некуда!!
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи


Вернуться в Скриптинг

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

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

cron