Q/A

Добавлен , опубликован
`
ОЖИДАНИЕ РЕКЛАМЫ...
28
для начала заюзай форматирование код ибо таблицей смотреть не кул
17
library test initializer init{
private unit U=GetTriggerUnit()
private void f1(){
SetUnitVertexColor(U, 0, 0, 0, 0)
}
private bool cond(){
return GetSpellAbilityId()=='A000'
}
private void act(){
U = CreateUnitAtLoc(GetOwningPlayer(GetTriggerUnit()), 'unt1', OffsetLocation(GetUnitLoc(GetTriggerUnit()), 99.00, -251.00), 0)
ExecuteFunc("f1")
U = CreateUnitAtLoc(GetOwningPlayer(GetTriggerUnit()), 'unt2', OffsetLocation(GetUnitLoc(GetTriggerUnit()), 99.00, -251.00), 0)
ExecuteFunc("f1")
}
private void init(){
Trigger jass=CreateTrigger()
TriggerRegisterAnyUnitEventBJ(jass,EVENT_PLAYER_UNIT_SPELL_EFFECT)
TriggerAddCondition(jass,function cond)
TriggerAddAction(jass,function act)
}
}
сори с блокнота писал
17
это и есть весь код. я пытался сделать действие над юнитами. но у меня не получилось.
28
private unit U=GetTriggerUnit()
этой глобалке значение присвоено вне триггера
21
Sergant1000, используйте функции без точек, и не проще ли делать действия без екзекута?
nvc123, во во
28
Buulichkaa, екзекут нужен чтобы чтобы нагрузить проц и вызвать лаги на слабых компах
21
в функцие обрабатываемой екзекутом нужно заносить значения из глобалок в локалки, иначе я не понимаю зачем там вообще екзекут (нужно боольше процедур)
28
Buulichkaa, я юзаю екзекут для оптимизации триггерных скилов(атачим к равкоду скила имя функции и при юзе любого триггерного скила грузим имя и вызываем его через екзекут)
это кстати в 3 уроке будет описано)
21
nvc123, :D по умному, конечно, если скиллов больше 10 то твой вариант оптимальнее.
28
если скилов больше 100 то ифами очень весело
21
nvc123, да ладно тебе) я максимум по 8 скиллов на карту делал)), 100 это толстость неимоверная
17
так как мне вызвать приватную функцию в приватной функции и при этом чтобы приватная переменная для библиотеки тоже работала корректно?
28
Sergant1000, убрать перед ф1 и ф2 привате
переменные в библиотеке нормально работают
проблемы только с екзекутом и всё
17
library test initializer init{
private unit U
void f1(){
SetUnitVertexColor(U, 0, 0, 0, 0)
}
private bool cond(){
return GetSpellAbilityId()=='A000'
}
private void act(){
U = CreateUnitAtLoc(GetOwningPlayer(GetTriggerUnit()), 'unt1', OffsetLocation(GetUnitLoc(GetTriggerUnit()), 99.00, -251.00), 0)
ExecuteFunc("f1")
U = CreateUnitAtLoc(GetOwningPlayer(GetTriggerUnit()), 'unt2', OffsetLocation(GetUnitLoc(GetTriggerUnit()), 99.00, -251.00), 0)
ExecuteFunc("f1")
}
private void init(){
Trigger jass=CreateTrigger()
TriggerRegisterAnyUnitEventBJ(jass,EVENT_PLAYER_UNIT_SPELL_EFFECT)
TriggerAddCondition(jass,function cond)
TriggerAddAction(jass,function act)
}
}
Так?
28
работает?
только
U = CreateUnitAtLoc(GetOwningPlayer(GetTriggerUnit()), 'unt1', OffsetLocation(GetUnitLoc(GetTriggerUnit()), 99.00, -251.00), 0)
замени на
unit a=GetTriggerUnit()
U=CreateUnit(GetOwningPlayer(a),'unt1',GetUnitX(a)+99,GetUnitY(a)-251,0)
а то 4 локейшена утекает
17
ясн. спс.
теперь возник вопрос. Как правильно дисаблить библиотеку и как запустить триггер с ней из другого триггера?
28
Sergant1000, объясни слово дисаблить и не понял причём тут триггер
в библиотеке может быть сколько угодно триггеров
у меня например вобще все системы и триггеры в одной библиотеке хранятся(привычка от которой сложно отучится)
библиотека это набор функций
и не библиотека внутри триггера а триггер внутри библиотеки
9
Ну и следовательно вопрос) Какое условие нужно ставить чтобы тригер срабатывал только в случае если в округе 300 есть труп и какое действие будет удалять труп после создания. И есть ли такая функция которая будет создавать юнита конкретно на месте трупа
28
dermax1000, труп это юнит у которого хп меньше 0
то есть ищем труп с хп меньше 0 и делаем с ним то что нам надо
21
nvc123, не правда, труп это юнит у которого есть тип UNIT_TYPE_DEAD, этот метод надежнее, так как юнит умирает не при 0 а при ~0.405 хп
Чтобы оставить комментарий, пожалуйста, войдите на сайт.