doter.ua

Пользователь

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

doter.ua

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

Спойлер: "Следующая часть"

*** Триггер ***

1) Каждый, кто добавлял рошана, использовал дефолтный триггер.

Триггер - фиговина, имеющая два состояния. В случае с рошей состояния такие:

  • Можно бить  (вы в зоне тригерра)
  • Нельзя бить (вы вне зоны)

Кроме "рошанского" триггера есть еще парочка дефолтных, но все изващенные фантазии разработчиков предусмотреть нельзя, поэтому есть способ создания своего кастомного тригерра.

Подготовка Триггера

2) Делаем все, как в "рошанском" триггере (см. главную тему раздела) когда дело доходит до выбора класса (для роши: trigger_boss_atackable)  здесь выбираем trigger_hero - будем отлавливать героев.

Выделите триггер и зайдите в
свойства (ALT + ENTER  или дабл клик по тригеру) дальше по фото:

Спойлер: "ФОТО_Инструкция"

afa0b74d1fcbae5891030323770150b8.png

Создание скрипта: создать файл.тхт переименовать в .lua, сам файл пока пустой.

для тех, кто в танке: закинуть скрипт в папку
ваш_аддон\scripts\vscripts\

В этом же окне перейдите во вкладку Outputs и внизу нажмите add далее как на фото:

Спойлер: "ФОТО_инструкция"

de34ca77cda767cfb973e459ba9dafdb.png

Потом еще раз
add но уже выбрать OnEndTouch   и четвертом параметре имя другой функции myFunctionLeave.

3)  Последний штрих - заполнить сам скрипт.

Офиц. вольво доки дают следующий пример:

https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Simple_Trigger_that_calls_Lua

Там
имена функций совпадают методом которые мы выбирали в окне свойств (первое поле) Это удобно, но не обязательно, главное, чтобы имя совпадало с четвертым полем.

Не буду топтаться над этими свойствами, кто дошел до 3-й части все это и сам поймет.

Спойлер: "КОД_скрипта"

function myFunctionEnter(trigger)

    print('------enter ------')

    --print(trigger.activator)

    --print(trigger.caller)

  

end

function myFunctionLeave(trigger)

    print('------ leave------')

    --print(trigger.activator)

    --print(trigger.caller)

end

В примере от вольво выводятся в консоль trigger.activator и trigger.caller я их закомментил и вывел свои понятные сообщения.  

  • trigger.activator  - тот, кто зашел в зону.
  • trigger.caller       - не знаю (с англ.  вызывающий, но разве это нам о чем то говорит? мне - нет:))

Подготовка завершена.

Проверим:  для начала запомните где ваш триггер (он же прозрачный) разместите его рядом с базой, или наставьте объектов по периметру - это уже на ваше усмотрение.

Пикните героя, и зайдите в триггер. посмотрите в консоль (клавиша
~  или ё) должно появится сообщение ------enter ------ (тоже синее)  если есть значит все ОК.

Собсна само скриптоделие :cool:

4)  Как ни странно, но эта часть намного меньше первой. Почему? да потому ,что там все очень просто:

На вход функциям передается
trigger   как вы уже заметили у него есть свойство activator так вот этот активатор никто иной как "представитель"  CDOTA_BaseNPC

те, кто читал первые 2 части  уже знает про существование списка API методов.

https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/API

И там есть раздел
CDOTA_BaseNPC так вот методы из этого раздела могут вызывать представители класса CDOTA_BaseNPC (вот так нежданчик ??).

Хватит балаболить, возьмем любой (
интересный) метод из этого списка и вызовем у нашего активатора. Этим методом будет

AddNewModifier(handle caster, handle optionalSourceAbility, string modifierName, handle modifierData)

  • второй и третий  будут nil
  • в первый передаем trigger.activator
  • последний - самый интересный. Передаем модификатор из списка:

https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Built-In_Modifier_Names

Лично я использовал только этот
modifier_rune_haste (другие модификаторы потестите сами)

Да да
чувак, попавший в область триггера получает хасту.

По логике при выходе из области нужно отбирать хасту - так и сделаем.

trigger.activator:RemoveModifierByName("modifier_rune_haste")

Спойлер: "Фулл_КОД"

function myFunctionEnter(trigger)

print('------enter ------')

  

    trigger.activator:AddNewModifier(trigger.activator, nil, "modifier_rune_haste", nil)

end

function myFunctionLeave(trigger)

    print('------ leave------')

  

    trigger.activator:RemoveModifierByName("modifier_rune_haste")

end

Nagibator230

Пользователь

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

Nagibator230

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

doter.ua сказал(а):

Уже поздно поэтому сделаю видео-результат потом.  (шучу не поздно, просто я - ленивая жопа)

*** Триггер ***

1) Каждый, кто добавлял рошана, использовал дефолтный триггер.

Триггер - фиговина, имеющая два состояния. В случае с рошей состояния такие:

  • Можно бить  (вы в зоне тригерра)
  • Нельзя бить (вы вне зоны)

Кроме "рошанского" триггера есть еще парочка дефолтных, но все изващенные фантазии разработчиков предусмотреть нельзя, поэтому есть способ создания своего кастомного тригерра.

Подготовка Триггера

2) Делаем все, как в "рошанском" триггере (см. главную тему раздела) когда дело доходит до выбора класса (для роши: trigger_boss_atackable)  здесь выбираем trigger_hero - будем отлавливать героев.

Выделите триггер и зайдите в
свойства (ALT + ENTER  или дабл клик по тригеру) дальше по фото:

Спойлер: "ФОТО_Инструкция"

afa0b74d1fcbae5891030323770150b8.png

Создание скрипта: создать файл.тхт переименовать в .lua, сам файл пока пустой.

для тех, кто в танке: закинуть скрипт в папку
ваш_аддон\scripts\vscripts\

В этом же окне перейдите во вкладку Outputs и внизу нажмите add далее как на фото:

Спойлер: "ФОТО_инструкция"

de34ca77cda767cfb973e459ba9dafdb.png

Потом еще раз
add но уже выбрать OnEndTouch   и четвертом параметре имя другой функции myFunctionLeave.

3)  Последний штрих - заполнить сам скрипт.

Офиц. вольво доки дают следующий пример:

https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Simple_Trigger_that_calls_Lua

Там
имена функций совпадают методом которые мы выбирали в окне свойств (первое поле) Это удобно, но не обязательно, главное, чтобы имя совпадало с четвертым полем.

Не буду топтаться над этими свойствами, кто дошел до 3-й части все это и сам поймет.

Спойлер: "КОД_скрипта"

function myFunctionEnter(trigger)

    print('------enter ------')

    --print(trigger.activator)

    --print(trigger.caller)

    

end

function myFunctionLeave(trigger)

    print('------ leave------')

    --print(trigger.activator)

    --print(trigger.caller)

end

В примере от вольво выводятся в консоль trigger.activator и trigger.caller я их закомментил и вывел свои понятные сообщения.  

  • trigger.activator  - тот, кто зашел в зону.
  • trigger.caller       - не знаю (с англ.  вызывающий, но разве это нам о чем то говорит? мне - нет:))

Подготовка завершена.

Проверим:  для начала запомните где ваш триггер (он же прозрачный) разместите его рядом с базой, или наставьте объектов по периметру - это уже на ваше усмотрение.

Пикните героя, и зайдите в триггер. посмотрите в консоль (клавиша
~  или ё) должно появится сообщение ------enter ------ (тоже синее)  если есть значит все ОК.

Собсна само скриптоделие :cool:

4)  Как ни странно, но эта часть намного меньше первой. Почему? да потому ,что там все очень просто:

На вход функциям передается
trigger   как вы уже заметили у него есть свойство activator так вот этот активатор никто иной как "представитель"  CDOTA_BaseNPC

те, кто читал первые 2 части  уже знает про существование списка API методов.

https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/API

И там есть раздел
CDOTA_BaseNPC так вот методы из этого раздела могут вызывать представители класса CDOTA_BaseNPC (вот так нежданчик ??).

Хватит балаболить, возьмем любой (
интересный) метод из этого списка и вызовем у нашего активатора. Этим методом будет

AddNewModifier(handle caster, handle optionalSourceAbility, string modifierName, handle modifierData)

  • второй и третий  будут nil
  • в первый передаем trigger.activator
  • последний - самый интересный. Передаем модификатор из списка:

https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Built-In_Modifier_Names

Лично я использовал только этот
modifier_rune_haste (другие модификаторы потестите сами)

Да да
чувак, попавший в область триггера получает хасту.

По логике при выходе из области нужно отбирать хасту - так и сделаем.

trigger.activator:RemoveModifierByName("modifier_rune_haste")

Спойлер: "Фулл_КОД"

function myFunctionEnter(trigger)

print('------enter ------')  

    

    trigger.activator:AddNewModifier(trigger.activator, nil, "modifier_rune_haste", nil)

    

end

function myFunctionLeave(trigger)

    print('------ leave------')

    

    trigger.activator:RemoveModifierByName("modifier_rune_haste")

end

Нажмите, чтобы раскрыть...

Не проще давать ссылки на русскую вики?

ПыСы Попросил админов закрепить часть 2

doter.ua

Пользователь

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

doter.ua

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

Nagibator230 сказал(а):
Не проще давать ссылки на русскую вики?

ПыСы Попросил админов закрепить часть 2
Нажмите, чтобы раскрыть...

Прост я те разделы уже прошел, а в закладках так и остались англ версии, думаю каждый знает что можно дописать в конце адресса :ru

Плюс ко всему разделы обновляются, в русс версии скриптинга в отделе ссылок 2 "пункта" а в англ уже 7.

Nagibator230

Пользователь

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

Nagibator230

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

doter.ua сказал(а):
Прост я те разделы уже прошел, а в закладках так и остались англ версии, думаю каждый знает что можно дописать в конце адресса :ru
Нажмите, чтобы раскрыть...

Ну, не совсем так, разделы тоже некоторые переведены, лучше на квадратик справа клацать, если есть

Kozhin2012

Пользователь

Регистрация: 15.07.2012

Сообщения: 831

Рейтинг: 198

Kozhin2012

Регистрация: 15.07.2012

Сообщения: 831

Рейтинг: 198

doter.ua сказал(а):

*** Триггер ***

1) Каждый, кто добавлял рошана, использовал дефолтный триггер.

Триггер - фиговина, имеющая два состояния. В случае с рошей состояния такие:

  • Можно бить  (вы в зоне тригерра)
  • Нельзя бить (вы вне зоны)

Кроме "рошанского" триггера есть еще парочка дефолтных, но все изващенные фантазии разработчиков предусмотреть нельзя, поэтому есть способ создания своего кастомного тригерра.

Подготовка Триггера

2) Делаем все, как в "рошанском" триггере (см. главную тему раздела) когда дело доходит до выбора класса (для роши: trigger_boss_atackable)  здесь выбираем trigger_hero - будем отлавливать героев.

Выделите триггер и зайдите в
свойства (ALT + ENTER  или дабл клик по тригеру) дальше по фото:

Спойлер: "ФОТО_Инструкция"

afa0b74d1fcbae5891030323770150b8.png

Создание скрипта: создать файл.тхт переименовать в .lua, сам файл пока пустой.

для тех, кто в танке: закинуть скрипт в папку
ваш_аддон\scripts\vscripts\

В этом же окне перейдите во вкладку Outputs и внизу нажмите add далее как на фото:

Спойлер: "ФОТО_инструкция"

de34ca77cda767cfb973e459ba9dafdb.png

Потом еще раз
add но уже выбрать OnEndTouch   и четвертом параметре имя другой функции myFunctionLeave.

3)  Последний штрих - заполнить сам скрипт.

Офиц. вольво доки дают следующий пример:

https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Simple_Trigger_that_calls_Lua

Там
имена функций совпадают методом которые мы выбирали в окне свойств (первое поле) Это удобно, но не обязательно, главное, чтобы имя совпадало с четвертым полем.

Не буду топтаться над этими свойствами, кто дошел до 3-й части все это и сам поймет.

Спойлер: "КОД_скрипта"

function myFunctionEnter(trigger)

    print('------enter ------')

    --print(trigger.activator)

    --print(trigger.caller)

  

end

function myFunctionLeave(trigger)

    print('------ leave------')

    --print(trigger.activator)

    --print(trigger.caller)

end

В примере от вольво выводятся в консоль trigger.activator и trigger.caller я их закомментил и вывел свои понятные сообщения.  

  • trigger.activator  - тот, кто зашел в зону.
  • trigger.caller       - не знаю (с англ.  вызывающий, но разве это нам о чем то говорит? мне - нет:))

Подготовка завершена.

Проверим:  для начала запомните где ваш триггер (он же прозрачный) разместите его рядом с базой, или наставьте объектов по периметру - это уже на ваше усмотрение.

Пикните героя, и зайдите в триггер. посмотрите в консоль (клавиша
~  или ё) должно появится сообщение ------enter ------ (тоже синее)  если есть значит все ОК.

Собсна само скриптоделие :cool:

4)  Как ни странно, но эта часть намного меньше первой. Почему? да потому ,что там все очень просто:

На вход функциям передается
trigger   как вы уже заметили у него есть свойство activator так вот этот активатор никто иной как "представитель"  CDOTA_BaseNPC

те, кто читал первые 2 части  уже знает про существование списка API методов.

https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/API

И там есть раздел
CDOTA_BaseNPC так вот методы из этого раздела могут вызывать представители класса CDOTA_BaseNPC (вот так нежданчик ??).

Хватит балаболить, возьмем любой (
интересный) метод из этого списка и вызовем у нашего активатора. Этим методом будет

AddNewModifier(handle caster, handle optionalSourceAbility, string modifierName, handle modifierData)

  • второй и третий  будут nil
  • в первый передаем trigger.activator
  • последний - самый интересный. Передаем модификатор из списка:

https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Built-In_Modifier_Names

Лично я использовал только этот
modifier_rune_haste (другие модификаторы потестите сами)

Да да
чувак, попавший в область триггера получает хасту.

По логике при выходе из области нужно отбирать хасту - так и сделаем.

trigger.activator:RemoveModifierByName("modifier_rune_haste")

Спойлер: "Фулл_КОД"

function myFunctionEnter(trigger)

print('------enter ------')

  

    trigger.activator:AddNewModifier(trigger.activator, nil, "modifier_rune_haste", nil)

end

function myFunctionLeave(trigger)

    print('------ leave------')

  

    trigger.activator:RemoveModifierByName("modifier_rune_haste")

end

Нажмите, чтобы раскрыть...

СУПЕР ДЕЛАЙ ЕЩЕ ГАЙДИКОВ!!!

6o6uK

Пользователь

Регистрация: 03.08.2013

Сообщения: 956

Рейтинг: 730

6o6uK

Регистрация: 03.08.2013

Сообщения: 956

Рейтинг: 730

Слушай, ты в скриптинге норм разбираешся? Именно lua и код доты. Если да, то я тебе в четверг вечером отпишу, есть дело)

А гайды очень хорошие, пиши еще.

Nagibator230

Пользователь

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

Nagibator230

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

6o6uK сказал(а):
Слушай, ты в скриптинге норм разбираешся? Именно lua и код доты. Если да, то я тебе в четверг вечером отпишу, есть дело)

А гайды очень хорошие, пиши еще.
Нажмите, чтобы раскрыть...

Что за дело?

FrostJkeee

Пользователь

Регистрация: 02.08.2012

Сообщения: 70

Рейтинг: 5

FrostJkeee

Регистрация: 02.08.2012

Сообщения: 70

Рейтинг: 5

Nagibator230 сказал(а):
Не проще давать ссылки на русскую вики?

ПыСы Попросил админов закрепить часть 2
Нажмите, чтобы раскрыть...

Человеку легче запоминается хорошо\подробно рассказанная статья, чем же её читать или же его посылать!

Immortal0110

Пользователь

Регистрация: 12.08.2014

Сообщения: 18

Рейтинг: 0

Immortal0110

Регистрация: 12.08.2014

Сообщения: 18

Рейтинг: 0

Почему-то не работает. Консоль выводит сообщение:

Делал всё по инструкции. Может вы можете подсказать, где я совершил ошибку?

doter.ua

Пользователь

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

doter.ua

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

Immortal0110 сказал(а):
Почему-то не работает. Консоль выводит сообщение:

Делал всё по инструкции. Может вы можете подсказать, где я совершил ошибку?
Нажмите, чтобы раскрыть...

Лив работает, значит ошибка в названии функции(либо в скрипте, либо в четвертом свойстве в том окошке) кароче они должны быть одинаковы.

doter.ua

Пользователь

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

doter.ua

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

6o6uK сказал(а):
Слушай, ты в скриптинге норм разбираешся? Именно lua и код доты. Если да, то я тебе в четверг вечером отпишу, есть дело)

А гайды очень хорошие, пиши еще.
Нажмите, чтобы раскрыть...

Я такой же самоучка как и все, смотрю разные исходники (тот же холдаут), читаю вики, английские форумы. Кстати четверг вот вот закончится :)

Immortal0110

Пользователь

Регистрация: 12.08.2014

Сообщения: 18

Рейтинг: 0

Immortal0110

Регистрация: 12.08.2014

Сообщения: 18

Рейтинг: 0

doter.ua сказал(а):
Я такой же самоучка как и все, смотрю разные исходники (тот же холдаут), читаю вики, английские форумы. Кстати четверг вот вот закончится :)
Нажмите, чтобы раскрыть...

Так и не разобрался, но зато у меня получилось сделать тоже самое, но немного по-другому. Вот способ: https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools:ru/Scripting:ru/Simple_Trigger_that_calls_Lua:ru

doter.ua

Пользователь

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

doter.ua

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

Immortal0110 сказал(а):
Так и не разобрался, но зато у меня получилось сделать тоже самое, но немного по-другому. Вот способ: https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools:ru/Scripting:ru/Simple_Trigger_that_calls_Lua:ru
Нажмите, чтобы раскрыть...

Ну да, это оригинал, в этом гайде даже ссылка на него (только на англ. версию)

obkose

Пользователь

Регистрация: 09.05.2013

Сообщения: 743

Рейтинг: 223

obkose

Регистрация: 09.05.2013

Сообщения: 743

Рейтинг: 223

doter.ua сказал(а):
Лив работает, значит ошибка в названии функции(либо в скрипте, либо в четвертом свойстве в том окошке) кароче они должны быть одинаковы.
Нажмите, чтобы раскрыть...

помоги плиз, пишет то же самое но без лива

doter.ua

Пользователь

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

doter.ua

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

obkose сказал(а):
помоги плиз, пишет то же самое но без лива
Нажмите, чтобы раскрыть...

скинь скриншот  окошка с настройками (той вкладки)  + сам скрипт

obkose

Пользователь

Регистрация: 09.05.2013

Сообщения: 743

Рейтинг: 223

obkose

Регистрация: 09.05.2013

Сообщения: 743

Рейтинг: 223

doter.ua сказал(а):
скинь скриншот  окошка с настройками (той вкладки)  + сам скрипт
Нажмите, чтобы раскрыть...

doter.ua сказал(а):
скинь скриншот  окошка с настройками (той вкладки)  + сам скрипт
Нажмите, чтобы раскрыть...

doter.ua

Пользователь

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

doter.ua

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

obkose сказал(а):
Нажмите, чтобы раскрыть...

вроде все норм, скинь скрин главной вкладки

obkose

Пользователь

Регистрация: 09.05.2013

Сообщения: 743

Рейтинг: 223

obkose

Регистрация: 09.05.2013

Сообщения: 743

Рейтинг: 223

doter.ua сказал(а):
вроде все норм, скинь скрин главной вкладки
Нажмите, чтобы раскрыть...

doter.ua

Пользователь

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

doter.ua

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

obkose сказал(а):
Нажмите, чтобы раскрыть...

И тут все норм, Сам файл как называется??  myTrigger.lua ?? лежит в папке с addon_game_mode.lua???

obkose

Пользователь

Регистрация: 09.05.2013

Сообщения: 743

Рейтинг: 223

obkose

Регистрация: 09.05.2013

Сообщения: 743

Рейтинг: 223

doter.ua сказал(а):
И тут все норм, Сам файл как называется??  myTrigger.lua ?? лежит в папке с addon_game_mode.lua???
Нажмите, чтобы раскрыть...

да

doter.ua

Пользователь

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

doter.ua

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

obkose сказал(а):
да
Нажмите, чтобы раскрыть...

 у тебя третья координата 512, это на холме где-то??  если нет поставь 128

obkose

Пользователь

Регистрация: 09.05.2013

Сообщения: 743

Рейтинг: 223

obkose

Регистрация: 09.05.2013

Сообщения: 743

Рейтинг: 223

doter.ua сказал(а):
у тебя третья координата 512, это на холме где-то??  если нет поставь 128
Нажмите, чтобы раскрыть...

опять тоже самое. ты можешь скинуть скрипт? именно файл

doter.ua

Пользователь

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

doter.ua

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

obkose сказал(а):
да
Нажмите, чтобы раскрыть...

Вот мой скрипт + карта (карту в папку мапс кинь и открой в хаммере)

http://rghost.ru/57473640

obkose

Пользователь

Регистрация: 09.05.2013

Сообщения: 743

Рейтинг: 223

obkose

Регистрация: 09.05.2013

Сообщения: 743

Рейтинг: 223

doter.ua сказал(а):
у тебя третья координата 512, это на холме где-то??  если нет поставь 128
Нажмите, чтобы раскрыть...

а нет, все не надо) все заработало)

doter.ua

Пользователь

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

doter.ua

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

Ок)