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)
Спасибо, дружище! А что за библиотека BMD? А то гугл что-то не в курсахМожно использовать библиотеки от 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
Огромное тебе спасибо! А то уже третий час пытаюсь разобраться в xml, чтобы чёртов таймер вывестиЕсли используешь barebones, то эти библиотеки там уже есть.
Но лично я брал из barebones только то, что мне нужно, как по мне, то так проще разобраться, плюс библиотека старая, что-то может и не работать.
https://github.com/bmddota/barebone...a_addons/barebones/scripts/vscripts/libraries вот тут ищи timers и notifications, инструкции по установке и использованию каждой библиотеки есть внутри каждого файла (на английском языке). с timers всё просто, notifications чуть сложнее для внедрения в свой мод, если ты начинающий. Начни с таймеров, как разберешься с ними, можешь приукрасить игру с помощью notifications.
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)
Опа, ещё и цвет строки можно указать... То, что нужно! Спасибо огромное!Вот пример того же самого, что выше, но с использованием 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
Слушай, игра выдаёт ошибку "attempt to index global hero (a nil value). В чём проблема?Вот пример того же самого, что выше, но с использованием 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)
hero:GetPlayerOwnerID() - эта функция получает номер игрока, которому принадлежит юнит, ссылка на которого хранится в переменной "hero". впиши вместо hero того юнита, который активирует скрипт с таймером.Слушай, игра выдаёт ошибку "attempt to index global hero (a nil value). В чём проблема?
Что-то таймер на экране никак не появляется. сделал так, что hero - активатор триггера, но ничего не работает. Когда выставляю nPlayerNumber = 0 тоже ничего. Все библиотеки установил (перепроверил трижды). При этом, игра не выдаёт ошибку в скрипте. В чём проблема?hero:GetPlayerOwnerID() - эта функция получает номер игрока, которому принадлежит юнит, ссылка на которого хранится в переменной "hero". впиши вместо hero того юнита, который активирует скрипт с таймером.
Если мод на одного игрока, можешь просто прописать local nPlayerNumber = 0
function Timer (event1)
local hero = event1.activator
local nPlayerNumber = hero:GetPlayerOwnerID() -- номер игрока кому отправлять сообщение
<root>
<Panel>
<CustomUIElement type="Hud" layoutfile="file://{resources}/layout/custom_game/barebones_notifications.xml" />
</Panel>
</root>
Это я тоже сделал. Я даже создал карту в самом barebones, куда добавил твой скрипт, однако, текста всё равно нетвозможно, проблема в том, что тебе нужен файл panorama\layout\custom_game\custom_ui_manifest.xml, содержащий в себе:
Код:<root> <Panel> <CustomUIElement type="Hud" layoutfile="file://{resources}/layout/custom_game/barebones_notifications.xml" /> </Panel> </root>
print( hero:GetUnitName() )
print( nPlayerNumber )
Я вообще не понял почему, но после того, как я вписал команду print, то всё заработало.... Это легально вообще?попробуй в том же скрипте вывести информацию в консоль:
если в консоль будет выведена верная информация, то скрипт выполняется и данные подтягиваются, тогда копай в сторону импорта самого notifications. Еще в консоли может выдавать не ошибку, а именно инфу о какой то проблеме в панораме.Код:print( hero:GetUnitName() ) print( nPlayerNumber )
В общем, спасибо, что уделил мне столько времени! Если бы не ты, то мне бы, скорее всего, пришлось учить xml, javascript и css.попробуй в том же скрипте вывести информацию в консоль:
если в консоль будет выведена верная информация, то скрипт выполняется и данные подтягиваются, тогда копай в сторону импорта самого notifications. Еще в консоли может выдавать не ошибку, а именно инфу о какой то проблеме в панораме.Код:print( hero:GetUnitName() ) print( nPlayerNumber )
Может не сохранил скрипт, либо не перезапустил карту при тесте. Многие скрипты можно перезапускать после сохранения файла через консоль с помощью команды script_reload прямо в процессе теста, но, например, висящие бесконечно модификаторы так не перезапустить, их надо скидывать с юнита и вешать заново. Насчет скриптов, запускаемых по entity-триггеру не знаю. Ни разу их не использовал.Я вообще не понял почему, но после того, как я вписал команду print, то всё заработало.... Это легально вообще?