Простая Panorama (нужна помощь)

GameLorD

Пользователь
2 Июн 2019
40
0
Проект
Dragon defence
Ребят, кто разбирается в Panorama, для вас это будет дело 3 секунд, помогите пожалуйста... Для меня сейчас Panorama как на первых этапах Lua и я вообще практически ничего не понимаю.
Суть в том, что у меня есть файл round.xml и я в него вставил фото.
HTML:
<root>
    <styles>
        <include src="file://{resources}/styles/custom_game/round.css" />
    </styles>
    <scripts>
        <include src="file://{resources}/scripts/custom_game/round.js" />
    </scripts>
    <Panel class="Round" >
            <Image src="file://{resources}/images/round/wave_1.png" />
    </Panel>
</root>

В round.css всё просто (помещено вверху,ширина и высота под фото).
А вот что мне нужно сделать в round.js, чтобы данный файл отображался только тогда, когда мне нужно. В данном случае в определенное время (т.е. на игровом таймере показывает 30 секунд, появляется данное фото и через 5 секунд исчезает). И так далее, каждая следующая волна ссылается на это фото и оно появляется... Я просто никак не могу понять, как это работает, я видел и CreatePanel и GetChild и всякая разная фигня, но я ничего не понимаю. Помогите пожалуйста!

Кто напишет код, который будет работать, может сразу оставить номер сбер. карты или номер телефона, без вознаграждения не оставлю, спасибо большое))
 
20 Дек 2016
892
170
я видел и CreatePanel и GetChild и всякая разная фигня,
Ничего этого здесь не нужно. Твоя задача максимально простая, хотя и способов решения несколько.

Во первых в xml старшей панели всегда лучше прописывать hittest="false"
Так же для начала в xml присвой картинке id, чтобы можно было получить ее в js таким образом:
var kartinka = $('#ID_Kartinki');

Потом сделай в css по ид картинки стиль, в котором она невидима. И стиль с классом в котором она видима. Тут можно сделать красивые анимации перехода между стилями, но я покажу самый простой вариант.
CSS:
#ID_Kartinki
{
    opacity: 0;
}

#ID_Kartinki.Shown
{
    opacity: 1;
}

А дальше я бы сделал циклический обработчик, который проверяет нужное условие и устанавливает картинке класс на видимость.

JavaScript:
function CheckKartinka(){
    var condition = ... // Условие на то, когда должна отображаться картинка. Тут в итоге должно получаться true/false. Сам подумай, что здесь написать. Скорее всего тебе понадобится Game.GetDOTATime или что-то такое
    $('#ID_Kartinki').SetHasClass( 'Shown', condition ); // Устанавливаем картинке класс на видимость в зависимости от условия.
    $.Schedule( 0.1, CheckKartinka ); // Schedule вызывает указанную функцию с задержкой. Таким образом функция будет бесконечно вызывать сама себя с интервалом 0.1с
}

$.Schedule( 0.1, CheckKartinka ); // Запускаем цикл
Вот на всякий случай, если еще тут не был: https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Panorama/Javascript/API
 
Последнее редактирование:

GameLorD

Пользователь
2 Июн 2019
40
0
Проект
Dragon defence
Ничего этого здесь не нужно. Твоя задача максимально простая, хотя и способов решения несколько.

Во первых в xml старшей панели всегда лучше прописывать hittest="false"
Так же для начала в xml присвой картинке id, чтобы можно было получить ее в js
var kartinka = $('#ID_Kartinki');

Потом сделай в css по ид картинки стиль, в котором она невидима. И стиль с классом в котором она видима. Тут можно сделать красивые анимации перехода между стилями, но я покажу самый простой вариант.
CSS:
#ID_Kartinki
{
    opacity: 0;
}

#ID_Kartinki.Shown
{
    opacity: 1;
}

А дальше я бы сделал циклический обработчик, который проверяет нужное условие и устанавливает картинке класс на видимость.

JavaScript:
function CheckKartinka(){
    var condition = ... // Условие на то, когда должна отображаться картинка. Тут в итоге должно получаться true/false. Сам подумай, что здесь написать. Скорее всего тебе понадобится Game.GetDOTATime или что-то такое
    $('#ID_Kartinki').SetHasClass( 'Shown', condition ); // Устанавливаем картинке класс на видимость в зависимости от условия.
    $.Schedule( 0.1, CheckKartinka ); // Schedule вызывает указанную функцию с задержкой. Таким образом функция будет бесконечно вызывать сама себя с интервалом 0.1с
}

$.Schedule( 0.1, CheckKartinka ); // Запускаем цикл
Вот на всякий случай, если еще тут не был: https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Panorama/Javascript/API
Большое тебе спасибо! Я сегодня вечером с работы приду, все попробую, проверю, надеюсь, что все получится... Очень уж тяжело самому разобраться в данной теме.
 

GameLorD

Пользователь
2 Июн 2019
40
0
Проект
Dragon defence
Ничего этого здесь не нужно. Твоя задача максимально простая, хотя и способов решения несколько.

Во первых в xml старшей панели всегда лучше прописывать hittest="false"
Так же для начала в xml присвой картинке id, чтобы можно было получить ее в js таким образом:
var kartinka = $('#ID_Kartinki');

Потом сделай в css по ид картинки стиль, в котором она невидима. И стиль с классом в котором она видима. Тут можно сделать красивые анимации перехода между стилями, но я покажу самый простой вариант.
CSS:
#ID_Kartinki
{
    opacity: 0;
}

#ID_Kartinki.Shown
{
    opacity: 1;
}

А дальше я бы сделал циклический обработчик, который проверяет нужное условие и устанавливает картинке класс на видимость.

JavaScript:
function CheckKartinka(){
    var condition = ... // Условие на то, когда должна отображаться картинка. Тут в итоге должно получаться true/false. Сам подумай, что здесь написать. Скорее всего тебе понадобится Game.GetDOTATime или что-то такое
    $('#ID_Kartinki').SetHasClass( 'Shown', condition ); // Устанавливаем картинке класс на видимость в зависимости от условия.
    $.Schedule( 0.1, CheckKartinka ); // Schedule вызывает указанную функцию с задержкой. Таким образом функция будет бесконечно вызывать сама себя с интервалом 0.1с
}

$.Schedule( 0.1, CheckKartinka ); // Запускаем цикл
Вот на всякий случай, если еще тут не был: https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Panorama/Javascript/API

Подскажи пожалуйста, я всё сделал, оно как бы работает, но я не могу задать событие правильно.

JavaScript:
function CheckKartinka(){
    var wave_1 = Entities.GetUnitName("npc_dota_hero_juggernaut")
    var condition = wave_1.IsAlive()// Условие на то, когда должна отображаться картинка. Тут в итоге должно получаться true/false. Сам подумай, что здесь написать. Скорее всего тебе понадобится Game.GetDOTATime или что-то такое
    $('#wave_1').SetHasClass( 'Shown', condition ); // Устанавливаем картинке класс на видимость в зависимости от условия.
    $.Schedule( 0.1, CheckKartinka ); // Schedule вызывает указанную функцию с задержкой. Таким образом функция будет бесконечно вызывать сама себя с интервалом 0.1с
}

$.Schedule( 0.1, CheckKartinka ); // Запускаем цикл
 
20 Дек 2016
892
170
Код:
var wave_1 = Entities.GetUnitName("npc_dota_hero_juggernaut");
var condition = wave_1.IsAlive();
Это что? Даже комментировать страшно.

А какое условие вообще нужно? Если с то что ты изначально писал с таймером то просто сравнивай текущее время по модулю 60 с 30 и 35. Просто я не уверен, что Game.GetDOTATime() возвращает именно время на таймере. Проверь это с помощью $.Msg()
 

GameLorD

Пользователь
2 Июн 2019
40
0
Проект
Dragon defence
Это что? Даже комментировать страшно.

А какое условие вообще нужно? Если с то что ты изначально писал с таймером то просто сравнивай текущее время по модулю 60 с 30 и 35. Просто я не уверен, что Game.GetDOTATime() возвращает именно время на таймере. Проверь это с помощью $.Msg()
Мне просто нужно сделать так, чтобы при появлении каждого босса высвечивалась такая-то картинка.. Извиняй, что страшно комментировать, но мой уровень в Панораме где-то на уровне плинтусе (максимум могу создать мини квест, максимально простой), но он не отслеживает, к сожалению, когда появляется юнит на карте. А мне нужно именно это.. (

Принцип такой: Появился босс - появилось фото, повисело пару секунд, ушло.
Появился следующий босс, следующее фото и т.д.
 

GameLorD

Пользователь
2 Июн 2019
40
0
Проект
Dragon defence
Это что? Даже комментировать страшно.

А какое условие вообще нужно? Если с то что ты изначально писал с таймером то просто сравнивай текущее время по модулю 60 с 30 и 35. Просто я не уверен, что Game.GetDOTATime() возвращает именно время на таймере. Проверь это с помощью $.Msg()
Всё, спасибо, я справился
CustomGameEventManager:Send_ServerToAllClients("image_wave_1",{ yes = true })
 
Реклама: