#2) Учимся делать урон на экране как взрослые ребята (??-HF)


я правильно понял? этот вывод урона никак не привязан к местоположению таргета
если так то можно ли как то привязать? на сколько я знаю можно изменить размер текста в зависимости от расстояние между таргетом и игроком, но как сделать что бы урон вылетал именно над таргетом пока не могу найти
 
Я так понимаю для интерлюдии это не актуально?) В общем то все получилось скомпилировать, но еффекта нет, подебажить бы...)
 
Я так понимаю для интерлюдии это не актуально?) В общем то все получилось скомпилировать, но еффекта нет, подебажить бы...)
замени в свитчах значения на те, что прилетают в интерлюдии и всё.
как узнать? открой файл systemmsg.dat и вместо
case 2261: //player msg
case 2281: //summoner msg
будут другие числа
 
замени в свитчах значения на те, что прилетают в интерлюдии и всё.
как узнать? открой файл systemmsg.dat и вместо
case 2261: //player msg
case 2281: //summoner msg
будут другие числа
Большое спасибо, чекну))

замени в свитчах значения на те, что прилетают в интерлюдии и всё.
как узнать? открой файл systemmsg.dat и вместо
case 2261: //player msg
case 2281: //summoner msg
будут другие числа
Поменял Id-шки результату 0 к сожалению, я думал что не так как то вывожу через интерфейc, но там просто по сути указываешь скрипт и название самого окна. ну и 28 текст боксов, не знаю проверял? что меня смущало то что не находит метода GetTextBoxHandle, и компиляция падает ошибка OnScreenDmgMsgWnd.uc(14) : Error, Bad or missing expression in '='
Проверяю скомпелировался ли файл нормально ли, есть класс, да действительно класс есть с функциями все как полагается. Ну очень странно.

Все верно метод GetTextBoxHandle идет только с HF. Но можно заменить его. Прикол в том что все скомпелировалось ошибок нет клиент запускается, но все равно не выводится ничего на экран.. :( //debug тоже ничего не показывает при компеляции :(
 
Все верно метод GetTextBoxHandle идет только с HF. Но можно заменить его. Прикол в том что все скомпелировалось ошибок нет клиент запускается, но все равно не выводится ничего на экран.. :( //debug тоже ничего не показывает при компеляции :(
GetTextBoxHandle идет только с HF. Да, всё верно. я и забыл

Скинь код uc скрипта и xdat ну или код скрипта для xdat editor-а (мне дико лень тыкать все эти 29 элементы)
 
У тебя не правильно парсит параметры попробуй сделать так.
C++:
ParseString(a_Param, "Param1", DamageToPlayer);
 
Для Interlude:

Урон по вам думаю сами прикрутите.

1721286300629.webp
C++:
/******************************************
Дата 18.07.2024 11:47

  Разработчик: BITHACK

  Copyright (c) Ваша компания

 Описание скрипта:....

*******************************************/
class OnScreenDmgMsgWnd extends UICommonAPI;
const MAX_DAMAGE_MESSAGE = 28;

 var TextBoxHandle DamageText[MAX_DAMAGE_MESSAGE];
 var int i;
 var Color WhiteColor;


function OnLoad() {

    RegisterEvent(EV_SystemMessage);

 for (i = 0; i < MAX_DAMAGE_MESSAGE; i++) {
    DamageText[i] = TextBoxHandle(GetHandle("OnScreenDmgMsgWnd.D-" $ i));
    DamageText[i].SetText("");
    }
    }

function OnEvent(int Event_ID, string a_param) {
 if (Event_ID == EV_SystemMessage) {
    HandleSystemMessage(a_param);
    }
    }

function HandleSystemMessage(string a_Param) {
 local int SystemMsgIndex;

    ParseInt(a_Param, "Index", SystemMsgIndex);

 switch (SystemMsgIndex) {
    case 35:
    case 1015:
    DamageUI(WhiteColor, a_param);
 break;
    }
    }

function DamageUI(Color DColor, string a_param) {
 local String DamageToPlayer;

 for (i = 0; i < MAX_DAMAGE_MESSAGE; i++) {
 if (DamageText[i].GetText() == "" || DamageText[i].GetAlpha() <= 0) {
    DamageText[i].SetText("");
    DamageText[i].SetAlpha(255);
    ParseString(a_Param, "Param1", DamageToPlayer);
    DamageText[i].SetText(DamageToPlayer);
    DamageText[i].SetAnchor("OnScreenDmgMsgWnd", "BottomCenter", "BottomCenter", -120 + Rand(150), Rand(100));
    DamageText[i].ClearAnchor();
    DamageText[i].Move(-100, -1500, 8f);
    DamageText[i].SetTextColor(DColor);
    DamageText[i].SetAlpha(0, 4f);
 break;
    }
    }
    }

    defaultproperties {
    WhiteColor=(B=255,G=255,R=255,A=255)
    }
 

Вложения

    finfan

    Баллов: 17
    У меня тоже появилось желания поиметь себя в зад и попробовать отделить криты от обычных ударов
Для Interlude:

Урон по вам думаю сами прикрутите.

Посмотреть вложение 75551
C++:
/******************************************
Дата 18.07.2024 11:47

  Разработчик: BITHACK

  Copyright (c) Ваша компания

 Описание скрипта:....

*******************************************/
class OnScreenDmgMsgWnd extends UICommonAPI;
const MAX_DAMAGE_MESSAGE = 28;

 var TextBoxHandle DamageText[MAX_DAMAGE_MESSAGE];
 var int i;
 var Color WhiteColor;


function OnLoad() {

    RegisterEvent(EV_SystemMessage);

 for (i = 0; i < MAX_DAMAGE_MESSAGE; i++) {
    DamageText[i] = TextBoxHandle(GetHandle("OnScreenDmgMsgWnd.D-" $ i));
    DamageText[i].SetText("");
    }
    }

function OnEvent(int Event_ID, string a_param) {
 if (Event_ID == EV_SystemMessage) {
    HandleSystemMessage(a_param);
    }
    }

function HandleSystemMessage(string a_Param) {
 local int SystemMsgIndex;

    ParseInt(a_Param, "Index", SystemMsgIndex);

 switch (SystemMsgIndex) {
    case 35:
    case 1015:
    DamageUI(WhiteColor, a_param);
 break;
    }
    }

function DamageUI(Color DColor, string a_param) {
 local String DamageToPlayer;

 for (i = 0; i < MAX_DAMAGE_MESSAGE; i++) {
 if (DamageText[i].GetText() == "" || DamageText[i].GetAlpha() <= 0) {
    DamageText[i].SetText("");
    DamageText[i].SetAlpha(255);
    ParseString(a_Param, "Param1", DamageToPlayer);
    DamageText[i].SetText(DamageToPlayer);
    DamageText[i].SetAnchor("OnScreenDmgMsgWnd", "BottomCenter", "BottomCenter", -120 + Rand(150), Rand(100));
    DamageText[i].ClearAnchor();
    DamageText[i].Move(-100, -1500, 8f);
    DamageText[i].SetTextColor(DColor);
    DamageText[i].SetAlpha(0, 4f);
 break;
    }
    }
    }

    defaultproperties {
    WhiteColor=(B=255,G=255,R=255,A=255)
    }
Большое спасибо, да урон по себе не нужен)) я специально выкосил его) Сейчас гляну где мой косяк)
 
Ну и если, внезапно, появилось желание поиметь себя в зад (как у меня, неожиданно!), то можно даже отделять обычные удары от свер-урона (скилы, криты):

1741890037703.webp

C#:
class OnScreenMessageDmgWnd extends UICommonAPI;
    const MAX_DAMAGE_MESSAGE = 9;

    var TextBoxHandle DamageText[MAX_DAMAGE_MESSAGE];
    var int i;
    var Color ColorNormalDam;
    var Color ColorOverDam;
   
    var int LastDam;
    var Color LastColor;


    function OnLoad() {

        RegisterEvent(EV_SystemMessage);

        for (i = 0; i < MAX_DAMAGE_MESSAGE; i++) {
            DamageText[i] = TextBoxHandle(GetHandle("DamageText" $ i));
            DamageText[i].SetText("");
        }
    }

    function OnEvent(int Event_ID, string a_param) {
        if (Event_ID == EV_SystemMessage) {
            HandleSystemMessage(a_param);
        }
    }

    function HandleSystemMessage(string a_Param) {
        local int SystemMsgIndex;

        ParseInt(a_Param, "Index", SystemMsgIndex);

        switch (SystemMsgIndex) {
            case 35:
            case 1015:
                DamageUI(a_param);
                break;
        }
    }

    function DamageUI(string a_param) {
        local Color TextColor;
        local String DamageToPlayer;
        local int CurDam;
        local float ScatterUpper;
        local float ScatterLower;
       
        ParseString(a_Param, "Param1", DamageToPlayer);
        CurDam = int(DamageToPlayer);
        ScatterUpper = LastDam * 1.2;
        ScatterLower = LastDam * 0.8;
       
        if(LastDam>0) {
            // Damage wasnt change
            if (CurDam >= ScatterLower && CurDam <= ScatterUpper) {
                TextColor = LastColor;
            } else {
                if (CurDam >= (ScatterLower * 2)) {
                    TextColor = ColorOverDam;
                } else {
                    TextColor = ColorNormalDam;
                }  
            }          
        } else {
            TextColor = ColorNormalDam;
        }
       
        LastDam = CurDam;
        LastColor = TextColor;
       
        for (i = 0; i < MAX_DAMAGE_MESSAGE; i++) {
            if (DamageText[i].GetText() == "" || DamageText[i].GetAlpha() <= 0) {
                DamageText[i].SetText("");
                DamageText[i].SetAlpha(255);
                if(TextColor == ColorOverDam) {
                    DamageText[i].SetText(DamageToPlayer $ "!");
                } else {
                    DamageText[i].SetText(DamageToPlayer);  
                }
                DamageText[i].SetAnchor("OnScreenMessageDmgWnd", "BottomCenter", "BottomCenter", -120 + Rand(150), Rand(100));
                DamageText[i].ClearAnchor();
                DamageText[i].Move(-100, -1500, 9f);
                DamageText[i].SetTextColor(TextColor);
                DamageText[i].SetAlpha(0, 48.6f);
                break;
            }
        }
    }

    defaultproperties {
        ColorNormalDam=(B=224,G=255,R=255,A=255)
        ColorOverDam=(B=1,G=215,R=255,A=255)
    }
 
1764504219272.webp 1764504295621.webp я вместо этого вставляю ваш код но ничего не происходит. подскажите что не так?
 
я вместо этого вставляю ваш код но ничего не происходит. подскажите что не так?
Окно должно быть одно — OnScreenDmgMsgWnd. Внутри него разместите 28 текстовых полей. Название скрипта тоже сделайте OnScreenDmgMsgWnd. В свойствах окна добавьте его в раздел script.
1764570408901.webp
 
1764612005080.webp 1764612020113.webp 1764612045792.webp 1764612054327.webp 1764612115460.webp 1764612141415.webp 1764612155457.webp 1764612005080.webp 1764612020113.webp 1764612045792.webp 1764612054327.webp 1764612115460.webp 1764612141415.webp 1764612155457.webp 1764612005080.webp 1764612020113.webp 1764612045792.webp 1764612054327.webp 1764612115460.webp 1764612141415.webp 1764612155457.webp

Пдскажите , пожалуйста, что не так.Все компилируется игра запускается но урон не выводится
 
Сделал(правда пока не все окна) , не помогло. Может ещё где то менять надо? Может я Вам дам interface.u и interface.xdat Вы поможете?

Я дал всё, что можно дать: файлы interface.u, interface.xdat прикреплены, скрипты, диаграммы, скриншоты для HF.
Дальше разбирайтесь сами, учитесь или платите тем, кто потратит на это время. Но я верю, у вас всё получится!


deepseek_mermaid_20251202_c25360.webp


C++:
/******************************************
    Разработчик: BITHACK
    Версия: 1.0 Дата 2025.12.02
    Описание: Отображение цифр урона на экране
 *******************************************/
class BIT_DemageHUD extends UICommonAPI;

const MAX_DAMAGE_MESSAGE = 28; // Максимум одновременно отображаемых цифр урона

var TextBoxHandle DamageText[MAX_DAMAGE_MESSAGE]; // Массив текстбоксов для урона
var int i; // Итератор циклов
var Color RedColor, WhiteColor; // Цвета для урона

// Инициализация событий
function OnRegisterEvent() {
    RegisterEvent(EV_SystemMessage); // Регистрация системных сообщений
}

// Загрузка HUD элемента
function OnLoad() {
    for (i = 0; i < MAX_DAMAGE_MESSAGE; i++) {
        DamageText[i] = GetTextBoxHandle("BIT_DemageHUD.D-" $ i);
        DamageText[i].SetText(""); // Очистка всех текстбоксов
    }
}

// Обработчик событий
function OnEvent(int Event_ID, string a_param) {
    if (Event_ID == EV_SystemMessage) {
        HandleSystemMessage(a_param); // Только системные сообщения
    }
}

// Обработка системных сообщений
function HandleSystemMessage(string a_Param) {
    local int SystemMsgIndex;

    ParseInt(a_Param, "Index", SystemMsgIndex); // Получение ID сообщения

    // Определение типа урона по ID сообщения
    switch (SystemMsgIndex) {
        case 2261: case 2281: // Урон по врагам
            DemageHud(WhiteColor, a_param);
            break;
        case 2262: case 2263: // Урон от врагов
            DemageHud(RedColor, a_param);
            break;
    }
}

// Отображение цифры урона на экране
function DemageHud(Color DColor, string a_param) {
    local String DamageToPlayer;

    // Поиск свободного текстбокса
    for (i = 0; i < MAX_DAMAGE_MESSAGE; i++) {
        if (DamageText[i].GetText() == "" || DamageText[i].GetAlpha() <= 0) {

            // Настройка текстбокса
            DamageText[i].SetText("");
            DamageText[i].SetAlpha(255);

            // Установка значения урона
            ParseString(a_param, "Param3", DamageToPlayer);
            DamageText[i].SetText(DamageToPlayer);

            // Случайное позиционирование
            DamageText[i].SetAnchor("BIT_DemageHUD", "BottomCenter",
                                   "BottomCenter", -120 + Rand(150), Rand(100));
            DamageText[i].ClearAnchor();

            // Анимация
            DamageText[i].Move(-100, -1500, 8.0); // Движение вверх
            DamageText[i].SetTextColor(DColor);   // Установка цвета
            DamageText[i].SetAlpha(0, 4.0);      // Плавное исчезновение

            break; // Использован один текстбокс - выходим
        }
    }
}

// Начальные значения цветов
defaultproperties {
    RedColor=(R=255,A=255)       // Красный для урона от врагов
    WhiteColor=(B=255,G=255,R=255,A=255) // Белый для урона по врагам
}

1764653009424.webp
 

Вложения

  • system.7z
    system.7z
    934,4 КБ · Просмотры: 4
Последнее редактирование:
Оверпостинг
Я дал всё, что можно дать: файлы interface.u, interface.xdat прикреплены, скрипты, диаграммы, скриншоты для HF.
Дальше разбирайтесь сами, учитесь или платите тем, кто потратит на это время. Но я верю, у вас всё получится!


Посмотреть вложение 90368


C++:
/******************************************
    Разработчик: BITHACK
    Версия: 1.0 Дата 2025.12.02
    Описание: Отображение цифр урона на экране
 *******************************************/
class BIT_DemageHUD extends UICommonAPI;

const MAX_DAMAGE_MESSAGE = 28; // Максимум одновременно отображаемых цифр урона

var TextBoxHandle DamageText[MAX_DAMAGE_MESSAGE]; // Массив текстбоксов для урона
var int i; // Итератор циклов
var Color RedColor, WhiteColor; // Цвета для урона

// Инициализация событий
function OnRegisterEvent() {
    RegisterEvent(EV_SystemMessage); // Регистрация системных сообщений
}

// Загрузка HUD элемента
function OnLoad() {
    for (i = 0; i < MAX_DAMAGE_MESSAGE; i++) {
        DamageText[i] = GetTextBoxHandle("BIT_DemageHUD.D-" $ i);
        DamageText[i].SetText(""); // Очистка всех текстбоксов
    }
}

// Обработчик событий
function OnEvent(int Event_ID, string a_param) {
    if (Event_ID == EV_SystemMessage) {
        HandleSystemMessage(a_param); // Только системные сообщения
    }
}

// Обработка системных сообщений
function HandleSystemMessage(string a_Param) {
    local int SystemMsgIndex;

    ParseInt(a_Param, "Index", SystemMsgIndex); // Получение ID сообщения

    // Определение типа урона по ID сообщения
    switch (SystemMsgIndex) {
        case 2261: case 2281: // Урон по врагам
            DemageHud(WhiteColor, a_param);
            break;
        case 2262: case 2263: // Урон от врагов
            DemageHud(RedColor, a_param);
            break;
    }
}

// Отображение цифры урона на экране
function DemageHud(Color DColor, string a_param) {
    local String DamageToPlayer;

    // Поиск свободного текстбокса
    for (i = 0; i < MAX_DAMAGE_MESSAGE; i++) {
        if (DamageText[i].GetText() == "" || DamageText[i].GetAlpha() <= 0) {

            // Настройка текстбокса
            DamageText[i].SetText("");
            DamageText[i].SetAlpha(255);

            // Установка значения урона
            ParseString(a_param, "Param3", DamageToPlayer);
            DamageText[i].SetText(DamageToPlayer);

            // Случайное позиционирование
            DamageText[i].SetAnchor("BIT_DemageHUD", "BottomCenter",
                                   "BottomCenter", -120 + Rand(150), Rand(100));
            DamageText[i].ClearAnchor();

            // Анимация
            DamageText[i].Move(-100, -1500, 8.0); // Движение вверх
            DamageText[i].SetTextColor(DColor);   // Установка цвета
            DamageText[i].SetAlpha(0, 4.0);      // Плавное исчезновение

            break; // Использован один текстбокс - выходим
        }
    }
}

// Начальные значения цветов
defaultproperties {
    RedColor=(R=255,A=255)       // Красный для урона от врагов
    WhiteColor=(B=255,G=255,R=255,A=255) // Белый для урона по врагам
}

Посмотреть вложение 90369
Большое спасибо. Это ж , по идее, можно и крит вывести отдельным цветом?)

RedColor=(R=255,A=255) // Красный для урона от врагов
WhiteColor=(B=255,G=255,R=255,A=255) // Белый для урона по врагам. А где можно эти коды взять?
 
Последнее редактирование модератором:
Назад
Сверху Снизу