Одна и та же переменная в одном вызове функции не может принимать разные значения. Почему нельзя использовать две переменные?
Вот, спасибо за ответ. Ключевое.
Я вообще не очень понимаю, что ты хочешь сделать такой функцией. Опиши ситуацию, пожалуйста.
Я хочу оптимизировать способность без использования локалок. Способность вида "юнит1 кинул дебаф на юнита2, и какие -то действия с юнит2 приносят профит юниту1, даже если действия не от юнит1". Ради этого приходится создавать отдельный громоздкий триггер с 2 массивами юнитов 1 и 2. Это и хочу уменьшить\убрать.
использование Integer A/B - дурной тон, свою переменную куда проще и удобнее создать.
Интежер А конечно только для примера, я использую свою переменную. ssbbssc:
Действие - приказать юниту 1 продамажить юнит 2 нанося (переменная_массив)[номер игрока владельца кастинг юнита]
Вся мысль была в том, можно ли в редакторе сделать автоматическую подстановку значения переменной в зависимости от номера игрока. Т.е. при инициализации активировать триггер, который будет работать для всех остальных триггеров. Слишком жирно было бы, но а вдруг.
Наверно слишком непонятно задал вопрос. К прикладному.
Мне нужно, чтобы применительно к call UnitDamageTargetBJ( N[Integer A], N[Integer A], 50, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_NORMAL ) переменная Integer A принимала разные значения для юнитов разных игроков и юнит игрока 1 дамажил юнита игрока 2, а не 2 -2. Возможно ли это?
Глобалка потому, что используется в нескольких триггерах, которые нельзя свести в один. Я как раз хочу избежать постоянного внесения данных об игроке и небольшой автоматизации вида Овнер юнита игрок 1 - значит Integer A для него всегда =1.
Если нет такого, значит буду делать на локалках.
З.Ы. Зачем сразу кидаться кактусами? Я с оперированием игроками раньше не сталкивался, поэтому и знания тут пока поверхностные.
На гуи есть аналог GetConvertedPlаyerID(), для которого нужны условия (triggering player и т.д.). Как GetPlayerId() использовать с кастом скриптом? На set udg_asd = GetPlayerID() с целочисленной ругается , какой тип переменной должен быть? Если Игрок, то его не засунешь в индекс массива.
Ну вы и наваяли холивара :)
По сути, переделал на таймеры, только вот с ними еще не работал, а гайдов по работе с таймерами нет вообще
function New takes nothing returns nothing
local unit BET = GetSpellTargetUnit()
local unit BEC = GetSpellAbilityUnit()
local integer BECount = 1
local timer t = CreateTimer()
call SetUnitMoveSpeed( BET, 500.00 )
call TimerStart(t, 0.5, true, function New )
loop
exitwhen BECount > 20
call TimerGetElapsed ( t )
call IssuePointOrderLocBJ( BET, "move", GetRandomLocInRect(GetPlayableMapRect()) )
call UnitDamageTargetBJ( BEC, BET, 5, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_NORMAL )
set BECount = BECount + 1
endloop
call SetUnitMoveSpeed( BET, GetUnitDefaultMoveSpeed(BET) )
call IssueImmediateOrderBJ( BET, "stop" )
set BET = null
set BEC = null
set BECount = 0
call DestroyTimer ( t )
endfunction
Сейчас вот в таком виде, но не работает) Наносит весь урон сразу, и завершается тоже сразу. Как поправить? Каждый раз стартовать таймер (засунуть его в цикл) не помогает
bj_forLoopAIndex на локалки не помогло, насчет оптимизации попозже подумаю.
Может ли быть конфликт с Custom Value, так в списке реакций на урон 6-7 триггеров? Или с каким действием\условием может быть конфликт, чтобы сузить круг подозреваемых?
Кстати заметил, что в лагах приказ цели двигаться в рандомную точку не выполняется, она продолжает делать что делала, может там баг какой?
Который из? Первый это только задержка снаряда до цели, он срабатывает один раз; который в цикле - ну хз, а как без него делать периодичность? Таймер, я думаю, куда сильнее нагружать будет. Не думаю что в нем проблема.
И почему на пустой карте все в порядке тогда?
С какой триггерной строкой может быть конфликт? Пробовал с самого старта карты, когда нет ни одного еще запущенного периодика или утечки памяти - все равно лаги.
Обнуление же стояло после отхила, нужно для мультиплеера, хотя скорее просто перестраховка.
А вот почему при такой очередности сначала обнулялось?
Если вейт поставить, даже 0.1 сек, то работает и с обнулением. Спасибо.
При каких-то там условиях в какой-то там ауре, если её настроить на обратные цели(были друж стали враж) - услоиве "имеет баф" не реагирует, если в способности всё по нулям выставлено. Поставь хотя бы 0.01 и проверь ещё раз
Несколько раз прочитал - не понял)
Суть спелла - аура смерти стандартная, на дружественные войска, если под этой аурой свой умирает, то регенит своим же под этой аурой половину своих максимальных хп, поделенных на число юнитов вокруг. 1 юнит - 50%, 2 юнита - по 25% каждому и т.д.
Так вот, не работает захват в переменную макс хп умирающего, т.к. не могу подобрать ключ, т.е. спецификацию юнита (триггеринг, матчинг, дайинг и пр. не работают). Какая должна быть в таком случае классификация? Или триггер срабатывает уже после смерти юнита, и соотв хп=0? Как тогда захватывать? В массив всех юнитов под аурой и потом извлекать оттуда?
Кстати, во второй части тригга условие аура на умирающем, и оно работает.
Вот так оно выглядит сейчас, кроме триггеров на дамаг соурс, но они стандартные. Проблема теперь в том, что отряд создается, но здоровье умирающего юнита не захватывается - и, соответственно, не восстанавливается, через какую классификацию его захватывать?
А захватывать здоровье умирающего юнита через триггеринг юнит? Сделал через получение смерт. удара, но здоровье не восстанавливает, эффект нужный есть, т.е. здоровье не захватывается (через аттакед\тригг)
как можно задавать сам индекс переменной-массива?)
что именно ты имеешь ввиду. Пример.
Переменная массив - Variable[Index]. Можно ли как-то задавать заранее (при старте игры)значения Index для, допустим, 6 значений в массиве - что индекс может быть от 1 до 6? Только громоздкими if-else-do и то на один раз?
З.Ы. Карту с решением прилагаю, может кому понадобится
Всем спасибо, проблему решил за счет проверки на цвет/номер игрока как индекс в массиве переменных. Все работает как запланировано.
Вопрос вдогонку: как можно задавать сам индекс переменной-массива?)
З.Ы. Массивы конечно зло, но другого способа хранить инфо по одному спеллу, не используя множество переменных - пока не умею.
А не проще все тупо перенести на jass+hash, а не насиловать себе мозг массивами?
Конечно проще, только в джасс я пока что не умею, а без мультиплеера работает на отлично. Melissa:
Заносим в группу, устанавливаем TIMEBUFF[Cv юнита]=скок надо, добавляем в группу Buffs и запускаем периодический триггер, который выбирает всех в группе Buffs, уменьшает их TIMEBUFF[Cv юнита] и устанавливать уровень способности баффа исходя из суммарного времени баффов и длительности 1 стака. например если бафф длится 5 единиц времени, то ставить уровень способности = TIMEBUFF[Cv юнита]/5 +1.
Стаки будут удаляться послойно, так что норм всё будет выглядеть
Это хорошо, только стаки вообще не привязаны к бафу. Т.е. можно быть на другом конце карты, и получать баф. Стаки силы+АС сохраняются пока не ударишь цель без дебафа. И сила добавляется триггерно, пробовал через способность, но ей почему-то уровни не меняло, несколько раз проверял, возможно потому что у героя уже есть такая же способность, только "герой" ранка и она перевешивает "воин" ранка.
Думаю не мучиться и поставить набор стаков только для кастера с запретом обновления\перекаста дебафа от других юнитов. Но может быть можно и с этим что-то сделать?
Еще есть вариант напихать кучу циклов с проверками на номер игрока, т.к. герой будет максимум один на игрока.
Спасибо, наконец-то заработал как надо) Так-то это только часть спелла, там еще 2 дамми создаются, но с этим посмотрим. Были сомнения, что не стоит ставить присвоение переменной в цикл =(.
Выбираются в 500 ренже все юниты, соотв условиям (не здания, не труп, алли к кастеру) добавляется абила, добавлятся в отряд-переменную, затем, через 10 сек, выбираются все юниты в отряде-переменной и убирается абилка, и юнит удаляется из отряда-переменной.
С массивом: создается отряд-массив-переменная, ключ массива - отдельная целочисленная переменная. Затем каждый юнит при переборе получает свой номер в массиве методом "добавление-ключ-ключ+1), естественно,все в циклах. Потом таким же перебором ключей в массиве удаляется абилка, как выше.
Вот тело триггера, вне карты, чтобы не загружать
Да, скрин не с массивом, просто текущее, много чего менял.
Ред. Impertus
» WarCraft 3 / Захват урона юнита
» WarCraft 3 / Присвоение числа в зависимоси от цвета игрока
ssbbssc:
Ред. Impertus
» WarCraft 3 / Присвоение числа в зависимоси от цвета игрока
Мне нужно, чтобы применительно к call UnitDamageTargetBJ( N[Integer A], N[Integer A], 50, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_NORMAL ) переменная Integer A принимала разные значения для юнитов разных игроков и юнит игрока 1 дамажил юнита игрока 2, а не 2 -2. Возможно ли это?
Глобалка потому, что используется в нескольких триггерах, которые нельзя свести в один. Я как раз хочу избежать постоянного внесения данных об игроке и небольшой автоматизации вида Овнер юнита игрок 1 - значит Integer A для него всегда =1.
Если нет такого, значит буду делать на локалках.
Ред. Impertus
» WarCraft 3 / Присвоение числа в зависимоси от цвета игрока
Ред. Impertus
» WarCraft 3 / Конфликт кода
По сути, переделал на таймеры, только вот с ними еще не работал, а гайдов по работе с таймерами нет вообще
» WarCraft 3 / Конфликт кода
Может ли быть конфликт с Custom Value, так в списке реакций на урон 6-7 триггеров? Или с каким действием\условием может быть конфликт, чтобы сузить круг подозреваемых?
Кстати заметил, что в лагах приказ цели двигаться в рандомную точку не выполняется, она продолжает делать что делала, может там баг какой?
Ред. Impertus
» WarCraft 3 / Конфликт кода
И почему на пустой карте все в порядке тогда?
» WarCraft 3 / Баф на умирающем юните
Ред. Impertus
» WarCraft 3 / Баф на умирающем юните
» WarCraft 3 / Баф на умирающем юните
А вот почему при такой очередности сначала обнулялось?
Если вейт поставить, даже 0.1 сек, то работает и с обнулением. Спасибо.
» WarCraft 3 / Баф на умирающем юните
Ред. Impertus
» WarCraft 3 / Баф на умирающем юните
Суть спелла - аура смерти стандартная, на дружественные войска, если под этой аурой свой умирает, то регенит своим же под этой аурой половину своих максимальных хп, поделенных на число юнитов вокруг. 1 юнит - 50%, 2 юнита - по 25% каждому и т.д.
Так вот, не работает захват в переменную макс хп умирающего, т.к. не могу подобрать ключ, т.е. спецификацию юнита (триггеринг, матчинг, дайинг и пр. не работают). Какая должна быть в таком случае классификация? Или триггер срабатывает уже после смерти юнита, и соотв хп=0? Как тогда захватывать? В массив всех юнитов под аурой и потом извлекать оттуда?
Ред. Impertus
» WarCraft 3 / Баф на умирающем юните
» WarCraft 3 / Баф на умирающем юните
» WarCraft 3 / Триггерное заклинание: Массив и MUI
Ред. Impertus
» WarCraft 3 / Триггерное заклинание: Массив и MUI
» WarCraft 3 / Триггерное заклинание: Массив и MUI
Вопрос вдогонку: как можно задавать сам индекс переменной-массива?)
Ред. Impertus
» WarCraft 3 / Триггерное заклинание: Массив и MUI
Melissa: Это хорошо, только стаки вообще не привязаны к бафу. Т.е. можно быть на другом конце карты, и получать баф. Стаки силы+АС сохраняются пока не ударишь цель без дебафа. И сила добавляется триггерно, пробовал через способность, но ей почему-то уровни не меняло, несколько раз проверял, возможно потому что у героя уже есть такая же способность, только "герой" ранка и она перевешивает "воин" ранка.
Еще есть вариант напихать кучу циклов с проверками на номер игрока, т.к. герой будет максимум один на игрока.
» WarCraft 3 / Вопрос с переменной Отряд
» WarCraft 3 / Вопрос с переменной Отряд
С массивом: создается отряд-массив-переменная, ключ массива - отдельная целочисленная переменная. Затем каждый юнит при переборе получает свой номер в массиве методом "добавление-ключ-ключ+1), естественно,все в циклах. Потом таким же перебором ключей в массиве удаляется абилка, как выше.
Вот тело триггера, вне карты, чтобы не загружать
Да, скрин не с массивом, просто текущее, много чего менял.
» The Elder Scrolls / TES4: No Fast Travel
После выкл аддона не работает фаст тревел