Решено Как сделать так, чтобы при запуске скрипта lua запускался таймер на экране?

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
Можно ли сделать так, что при заходе на триггер, на экране появлялся таймер с обратным отсчётом?
 

AceFridge

Активный
8 Мар 2021
85
15
Можно использовать библиотеки от BMD
  • notifications для вывода информации.
  • timers для периодического запуска функции из notification
Можно будет настроить размер текста, цвет и расположение на экране, добавить изображения.

Но, если нужно каким-то особенным образом оформить окно таймера, то придется освоить panorama api.
__________________
либо совсем простой вариант используя стороннюю библиотеку timers и встроенную функцию для вывода информации:
Lua:
local fCountdown = 5 -- длительность таймера обратного отсчёта
Timers:CreateTimer(0, function()
    if fCountdown > 0 then
        GameRules:SendCustomMessage( tostring(fCountdown), 0, 0 )
        fCountdown = fCountdown - 1
        return 1
    else
        GameRules:SendCustomMessage( "GO!", 0, 0 )
        return nil
    end
end)

но и выглядеть будет не особо приятно.
1623778275613.png
 
Последнее редактирование:
  • Нравится
Реакции: fabio_longo

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
Можно использовать библиотеки от BMD
  • notifications для вывода информации.
  • timers для периодического запуска функции из notification
Можно будет настроить размер текста, цвет и расположение на экране, добавить изображения.

Но, если нужно каким-то особенным образом оформить окно таймера, то придется освоить panorama api.
__________________
либо совсем простой вариант используя стороннюю библиотеку timers и встроенную функцию для вывода информации:
Lua:
local fCountdown = 5 -- длительность таймера обратного отсчёта
Timers:CreateTimer(0, function()
    if fCountdown > 0 then
        GameRules:SendCustomMessage( tostring(fCountdown), 0, 0 )
        fCountdown = fCountdown - 1
        return 1
    else
        GameRules:SendCustomMessage( "GO!", 0, 0 )
        return nil
    end
end)

но и выглядеть будет не особо приятно.
Посмотреть вложение 1350
Спасибо, дружище! А что за библиотека BMD? А то гугл что-то не в курсах
 

AceFridge

Активный
8 Мар 2021
85
15
Если используешь barebones, то эти библиотеки там уже есть.
Но лично я брал из barebones только то, что мне нужно, как по мне, то так проще разобраться, плюс библиотека старая, что-то может и не работать.
https://github.com/bmddota/barebone...a_addons/barebones/scripts/vscripts/libraries вот тут ищи timers и notifications, инструкции по установке и использованию каждой библиотеки есть внутри каждого файла (на английском языке). с timers всё просто, notifications чуть сложнее для внедрения в свой мод, если ты начинающий. Начни с таймеров, как разберешься с ними, можешь приукрасить игру с помощью notifications.
 
  • Нравится
Реакции: fabio_longo

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
Если используешь barebones, то эти библиотеки там уже есть.
Но лично я брал из barebones только то, что мне нужно, как по мне, то так проще разобраться, плюс библиотека старая, что-то может и не работать.
https://github.com/bmddota/barebone...a_addons/barebones/scripts/vscripts/libraries вот тут ищи timers и notifications, инструкции по установке и использованию каждой библиотеки есть внутри каждого файла (на английском языке). с timers всё просто, notifications чуть сложнее для внедрения в свой мод, если ты начинающий. Начни с таймеров, как разберешься с ними, можешь приукрасить игру с помощью notifications.
Огромное тебе спасибо! А то уже третий час пытаюсь разобраться в xml, чтобы чёртов таймер вывести
 

AceFridge

Активный
8 Мар 2021
85
15
Вот пример того же самого, что выше, но с использованием notifications, там необходимая часть панорамы уже прописана. Для минимальных задач этой библиотеки хватает.
Lua:
local nPlayerNumber = hero:GetPlayerOwnerID() -- номер игрока кому отправлять сообщение
local fCountdown = 5 -- длительность таймера обратного отсчёта
Timers:CreateTimer(0, function()
    if fCountdown > 0 then
        Notifications:Bottom( nPlayerNumber, {text=tostring(fCountdown), class="NotificationMessage", style={color="red", ["font-size"]="45px"}, duration=1})
        fCountdown = fCountdown - 1
        return 1
    else
        Notifications:Bottom( nPlayerNumber, {text="GO!", class="NotificationMessage", style={color="red", ["font-size"]="45px"}, duration=1})
        return nil
    end
end)

1623780266131.png
 
  • Нравится
Реакции: fabio_longo

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
Вот пример того же самого, что выше, но с использованием notifications, там необходимая часть панорамы уже прописана. Для минимальных задач этой библиотеки хватает.
Lua:
local nPlayerNumber = hero:GetPlayerOwnerID() -- номер игрока кому отправлять сообщение
local fCountdown = 5 -- длительность таймера обратного отсчёта
Timers:CreateTimer(0, function()
    if fCountdown > 0 then
        Notifications:Bottom( nPlayerNumber, {text=tostring(fCountdown), class="NotificationMessage", style={color="red", ["font-size"]="45px"}, duration=1})
        fCountdown = fCountdown - 1
        return 1
    else
        Notifications:Bottom( nPlayerNumber, {text="GO!", class="NotificationMessage", style={color="red", ["font-size"]="45px"}, duration=1})
        return nil
    end
end)

Посмотреть вложение 1352
Опа, ещё и цвет строки можно указать... То, что нужно! Спасибо огромное!
 

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
Вот пример того же самого, что выше, но с использованием notifications, там необходимая часть панорамы уже прописана. Для минимальных задач этой библиотеки хватает.
Lua:
local nPlayerNumber = hero:GetPlayerOwnerID() -- номер игрока кому отправлять сообщение
local fCountdown = 5 -- длительность таймера обратного отсчёта
Timers:CreateTimer(0, function()
    if fCountdown > 0 then
        Notifications:Bottom( nPlayerNumber, {text=tostring(fCountdown), class="NotificationMessage", style={color="red", ["font-size"]="45px"}, duration=1})
        fCountdown = fCountdown - 1
        return 1
    else
        Notifications:Bottom( nPlayerNumber, {text="GO!", class="NotificationMessage", style={color="red", ["font-size"]="45px"}, duration=1})
        return nil
    end
end)
Слушай, игра выдаёт ошибку "attempt to index global hero (a nil value). В чём проблема?
 

AceFridge

Активный
8 Мар 2021
85
15
Слушай, игра выдаёт ошибку "attempt to index global hero (a nil value). В чём проблема?
hero:GetPlayerOwnerID() - эта функция получает номер игрока, которому принадлежит юнит, ссылка на которого хранится в переменной "hero". впиши вместо hero того юнита, который активирует скрипт с таймером.
Если мод на одного игрока, можешь просто прописать local nPlayerNumber = 0
 

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
hero:GetPlayerOwnerID() - эта функция получает номер игрока, которому принадлежит юнит, ссылка на которого хранится в переменной "hero". впиши вместо hero того юнита, который активирует скрипт с таймером.
Если мод на одного игрока, можешь просто прописать local nPlayerNumber = 0
Ок, спасибо!
 

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
hero:GetPlayerOwnerID() - эта функция получает номер игрока, которому принадлежит юнит, ссылка на которого хранится в переменной "hero". впиши вместо hero того юнита, который активирует скрипт с таймером.
Если мод на одного игрока, можешь просто прописать local nPlayerNumber = 0
Что-то таймер на экране никак не появляется. сделал так, что hero - активатор триггера, но ничего не работает. Когда выставляю nPlayerNumber = 0 тоже ничего. Все библиотеки установил (перепроверил трижды). При этом, игра не выдаёт ошибку в скрипте. В чём проблема?
p.s. Только что заметил, что barebones_notifications.xml отсылается к этому файлу <include src="s2r://panorama/styles/dotastyles.vcss_c" /> , которого нет в аддоне barebones (но в инструкции по установке его нет). Может, в этом загвоздка?
Код:
function Timer (event1)
   local hero = event1.activator
local nPlayerNumber = hero:GetPlayerOwnerID() -- номер игрока кому отправлять сообщение
 
Последнее редактирование:

AceFridge

Активный
8 Мар 2021
85
15
возможно, проблема в том, что тебе нужен файл panorama\layout\custom_game\custom_ui_manifest.xml, содержащий в себе:

Код:
<root>
  <Panel>
    <CustomUIElement type="Hud" layoutfile="file://{resources}/layout/custom_game/barebones_notifications.xml" />
  </Panel>
</root>
 
  • Нравится
Реакции: fabio_longo

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
возможно, проблема в том, что тебе нужен файл panorama\layout\custom_game\custom_ui_manifest.xml, содержащий в себе:

Код:
<root>
  <Panel>
    <CustomUIElement type="Hud" layoutfile="file://{resources}/layout/custom_game/barebones_notifications.xml" />
  </Panel>
</root>
Это я тоже сделал. Я даже создал карту в самом barebones, куда добавил твой скрипт, однако, текста всё равно нет
 

AceFridge

Активный
8 Мар 2021
85
15
попробуй в том же скрипте вывести информацию в консоль:
Код:
print( hero:GetUnitName() )
print( nPlayerNumber  )
если в консоль будет выведена верная информация, то скрипт выполняется и данные подтягиваются, тогда копай в сторону импорта самого notifications. Еще в консоли может выдавать не ошибку, а именно инфу о какой то проблеме в панораме.
 
  • Нравится
Реакции: fabio_longo

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
попробуй в том же скрипте вывести информацию в консоль:
Код:
print( hero:GetUnitName() )
print( nPlayerNumber  )
если в консоль будет выведена верная информация, то скрипт выполняется и данные подтягиваются, тогда копай в сторону импорта самого notifications. Еще в консоли может выдавать не ошибку, а именно инфу о какой то проблеме в панораме.
Я вообще не понял почему, но после того, как я вписал команду print, то всё заработало.... Это легально вообще?
 

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
попробуй в том же скрипте вывести информацию в консоль:
Код:
print( hero:GetUnitName() )
print( nPlayerNumber  )
если в консоль будет выведена верная информация, то скрипт выполняется и данные подтягиваются, тогда копай в сторону импорта самого notifications. Еще в консоли может выдавать не ошибку, а именно инфу о какой то проблеме в панораме.
В общем, спасибо, что уделил мне столько времени! Если бы не ты, то мне бы, скорее всего, пришлось учить xml, javascript и css.
 

AceFridge

Активный
8 Мар 2021
85
15
Я вообще не понял почему, но после того, как я вписал команду print, то всё заработало.... Это легально вообще?
Может не сохранил скрипт, либо не перезапустил карту при тесте. Многие скрипты можно перезапускать после сохранения файла через консоль с помощью команды script_reload прямо в процессе теста, но, например, висящие бесконечно модификаторы так не перезапустить, их надо скидывать с юнита и вешать заново. Насчет скриптов, запускаемых по entity-триггеру не знаю. Ни разу их не использовал.
 
  • Нравится
Реакции: fabio_longo
Реклама: