rsfghd, спасибо, но подобная система перебора уже имеется.
Разные суммируются, однако я подразумевал(аю) только от одной ауры и одного и того же типа боевой единицы.
Если не затруднит могли бы попробовать играться с Buff или с самой способностью(ями)? На данный момент не имею доступа к редактору в ближайшую неделю.
NilasAran_39, ledoed, для боевых единиц (не героев) не составит труда реализовать через GUI, ибо 30 прибавок это еще мало, однако для героев - это дикая проблема.
Первый момент, который придётся учесть - это изначальное* кол-во: здоровья, брони, урона, регенерации маны и здоровья (далее характеристик) героя. Исходя из значений последних добавлять некий процент.
Второй момент - броню основную (белую) не выйдет добавлять, а только дополнительную (зелёную). Предметов, что добавляют основную броню - нет, исходя из той информации, которой обладаю.
Регенерацию можно реализовать через таймер и увеличивать её до предела переменной real.
Если здоровье является основным параметром, что нужно добавить, а остальные не важны и возможно их убрать из наработки, то реализация данной способности проста. Используем работу GF RaiseD. Смотрим тут.
*Примечание: под изначальным принимается значение характеристик героя исключая добавленное с помощью наработки. В ином случае герой будет непобедимым безумцем, с каждым убитым, увеличивая не только процент характеристик, но и самого процента.
А так-же можно ли убрать эту цифру и какой урон наносит смертельный удар.
Можно попробовать использовать способность "Укрыться за щитом". На сколько мне известно подобная способность позволяет помножить как входящий, так и исходящий урон, но необходимо задействовать способность. Так же позволительно и обратное - уменьшать. Alexey103
Можно ли использовать его как аналог способности бронебойность?
Насколько мне известно - нет. Только кодом наносить урон или установкой здоровья.
Дополню - баги сто пудов будут с орб эффектами и любыми способностями (эффектами) с ежесекундным уроном. Поэтому любой урон приходится делать кодом. Мне подобная "фича" известна.
За упоминание отдельное спасибо. В самой карте никак не проинформировал. Мой косяк...
ну и для дальнего боя приказы не применимы, в среднем 0.25-0.40 сек. задержка между замахом и вылетом снаряда.
Никогда не любил дальний бой за его успешное извивание от отлова урона ;)
Очень муторно искать решение проблемы и я не утруждал себя поиском решений. Думаю, в ближайшее время этим не буду заниматься.
Есть готовое решение отлова урона, которое обладает GUI помощью от автора Bribe. Он "ошивается" на сайте, да простят меня модераторы, hiveworkshop. Как раз у него отлов срабатывает через способность рунных браслетов. Признаться честно, я использовал его работу уже в своих работах давно, но, что не своё, то не радует глаз, поэтому решился и на свои наработки.
Сия карту можно использовать как для начала кодирования на vJass и Jass в целом... Хоть подобных ресурсов море, но лишним не будет подобная информация.
Вот тебе моя системка на JASS для пользования нужен JNGP. Не нравится - ищи, иначе - пользуйся.
Stun System - JASS
// Stun System v2.0
globals
constant integer StunSystem_DummyID='u000' //боевая единица пустышка
constant integer StunSystem_DummyAbility='A000' //способность на основе Громовой поступи
constant integer StunSystem_Buff='BSTN' //смотрим какой бафф добавили способности и суда вписываем
constant integer StunSystem_OrderID=852127 //OrderId("stomp")
constant real StunSystem_X=-3035.0 //координата Х безопасной точки для использования Громовой поступи
constant real StunSystem_Y=2762. //координата Y безопасной точки для использования Громовой поступи
unit StunSystem_Dummy=null
real StunSystem_TIME=.0
unit StunSystem_TARGET=null
endglobals
function StunSystem takes nothing returns boolean
local real x=GetUnitX(StunSystem_TARGET)
local real y=GetUnitY(StunSystem_TARGET)
if GetUnitAbilityLevel(StunSystem_TARGET, StunSystem_Buff)==0 then
if GetUnitX(StunSystem_Dummy)!=StunSystem_X and GetUnitY(StunSystem_Dummy)!=StunSystem_Y then
call SetUnitPosition(StunSystem_Dummy,StunSystem_X,StunSystem_Y)
endif
call SetUnitX(StunSystem_TARGET,StunSystem_X)
call SetUnitY(StunSystem_TARGET,StunSystem_Y)
call IssueImmediateOrderById(StunSystem_Dummy, StunSystem_OrderID)
call SetUnitX(StunSystem_TARGET,x)
call SetUnitY(StunSystem_TARGET,y)
endif
set BuffSystem_TARGET=StunSystem_TARGET
set BuffSystem_ID_Buff=StunSystem_Buff
set BuffSystem_TIME=StunSystem_TIME
call TriggerEvaluate(gg_trg_BuffSystem) //вызов бафф системы
set StunSystem_TIME=.0
set StunSystem_TARGET=null
return true
endfunction
function StunSystem_Func_Init takes nothing returns nothing
set gg_trg_StunSystem=CreateTrigger()
set StunSystem_Dummy=CreateUnit(Player(15),StunSystem_DummyID,StunSystem_X,StunSystem_Y,0)
call UnitAddAbility(StunSystem_Dummy,StunSystem_DummyAbility)
call UnitAddAbility(StunSystem_Dummy,'Aloc')
call ShowUnit(StunSystem_Dummy,false)
call TriggerAddCondition(gg_trg_StunSystem, Condition(function StunSystem))
endfunction
BuffSystem - JASS
// Bufff System v1.1
globals
constant real BuffSystem_Interval=.03125
timer BuffSystem_Timer=CreateTimer()
integer BuffSystem_MAX=0
unit array BuffSystem_Unit
integer array BuffSystem_AbilId
integer array BuffSystem_BuffId
real array BuffSystem_Time
unit BuffSystem_TARGET=null
real BuffSystem_TIME=.0
integer BuffSystem_ID_Ability=0
integer BuffSystem_ID_Buff=0
endglobals
function BuffSystem_Periodic takes nothing returns nothing
local integer i = 0
loop
exitwhen i == BuffSystem_MAX
if BuffSystem_Time[i]>0.0 and BuffSystem_Unit[i]!=null and (not IsUnitType(BuffSystem_Unit[i],UNIT_TYPE_DEAD)) then
set BuffSystem_Time[i]=BuffSystem_Time[i]-BuffSystem_Interval
else
if BuffSystem_AbilId[i]!=0 then
call UnitMakeAbilityPermanent(BuffSystem_Unit[i],false,BuffSystem_AbilId[i])
call UnitRemoveAbility(BuffSystem_Unit[i],BuffSystem_AbilId[i])
endif
call UnitRemoveAbility(BuffSystem_Unit[i],BuffSystem_BuffId[i])
set BuffSystem_MAX=BuffSystem_MAX-1
set BuffSystem_Unit[i]=BuffSystem_Unit[BuffSystem_MAX]
set BuffSystem_Time[i]=BuffSystem_Time[BuffSystem_MAX]
set BuffSystem_AbilId[i]=BuffSystem_AbilId[BuffSystem_MAX]
set BuffSystem_BuffId[i]=BuffSystem_BuffId[BuffSystem_MAX]
set BuffSystem_Unit[BuffSystem_MAX]=null
set BuffSystem_Time[BuffSystem_MAX]=0.
set BuffSystem_AbilId[BuffSystem_MAX]=0
set BuffSystem_BuffId[BuffSystem_MAX]=0
set i = i - 1
if (0 == BuffSystem_MAX) then
call PauseTimer(BuffSystem_Timer)
endif
endif
set i = i + 1
endloop
endfunction
function BuffSystem_Checker takes nothing returns boolean
local integer i=0
loop
exitwhen i==BuffSystem_MAX
if BuffSystem_TARGET==BuffSystem_Unit[i] and BuffSystem_ID_Ability==BuffSystem_AbilId[i] and BuffSystem_ID_Buff==BuffSystem_BuffId[i] then
if BuffSystem_TIME>BuffSystem_Time[i] then
set BuffSystem_Time[i]=BuffSystem_TIME
endif
return false
endif
set i=i+1
endloop
return true
endfunction
function BuffSystem takes nothing returns boolean
if BuffSystem_Checker() then
if BuffSystem_MAX==0 then
call TimerStart(BuffSystem_Timer,BuffSystem_Interval, true, function BuffSystem_Periodic)
endif
if BuffSystem_ID_Ability!=0 then
call UnitAddAbility(BuffSystem_TARGET, BuffSystem_ID_Ability)
call UnitMakeAbilityPermanent(BuffSystem_TARGET,true,BuffSystem_ID_Ability)
endif
set BuffSystem_Unit[BuffSystem_MAX]=BuffSystem_TARGET
set BuffSystem_Time[BuffSystem_MAX]=BuffSystem_TIME
set BuffSystem_AbilId[BuffSystem_MAX]=BuffSystem_ID_Ability
set BuffSystem_BuffId[BuffSystem_MAX]=BuffSystem_ID_Buff
set BuffSystem_MAX=BuffSystem_MAX+1
endif
set BuffSystem_TARGET=null
set BuffSystem_TIME=.0
set BuffSystem_ID_Ability=0
set BuffSystem_ID_Buff=0
return false
endfunction
function BuffSystem_Func_Init takes nothing returns nothing
set gg_trg_BuffSystem=CreateTrigger()
call TriggerAddCondition(gg_trg_BuffSystem, Condition(function BuffSystem))
endfunction
достаточно 1 триггера на карту для отлова всех триггерных кастов а потом просто через экзекьют нужные функции вызываем(имя функции берём из хэша/массива по равкоду спела)
тоже верно, ибо за каждое использование сразу варчик пытается запустить N-ое количество триггеров с сия отловом. От чего происходят лаги на старых машинах или\и какой триггер может не запуститься. nvc123, я лично делаю только тестовые карты способностей, поэтому разницы не вижу. Однако играл как-то раз в карту The Blood Way, использовав любую способность на основе "Громовая поступь" у меня происходили лаги (от 0.5 до 4 сек.) на моей старой машинке 2001 года. А на основе сия способности очень много других способностей, в силу этого я очень долго плакал, когда какой Маг или Паладин использует такие способности. К чему это я... у меня нет желания прям до 0 оптимизировать способности, ибо скачавшие мною воплощенную идею должны что-нибудь додумывать сами, те же дебаги. Иначе когда же они научаться хоть чему-то?
что бы занести типы юнитов необходим же отдельный триггер:
а1 = товер1
а2 = товер2
и т.д.
Да, так и есть. Так потом легче будет удалять\добавлять ограничения боевых единиц у игроков.
В твоем триггере игрокам (1-9) устанавливаются ограничения как 0, ибо ты ставишь значение переменной после действий. Нужно поменять порядок. О чем толково пояснил товарищ SomeFire и снова повторил ранее написанное. как минимум уже двое за такой способ.
занести группу игроков в переменную и работать с ней
В дальнейшем, может быть, пригодится, если это группа будет использоваться помимо сия триггера.
В данном триггере (если порядок поменять) в массиве целочисленной не вижу смысла, ибо всем игрокам (1-9) дается ограничение одно и тоже равное четырем. Можно было просто вместо массива целочисленной вписать 4 и радоваться оптимизации. Тоже самое касается целочисленной i_Towers, в ней тоже мы не нуждаемся, ибо можно было вместо
Игрок(i_Towers+1)
Игрок(Число В)
Тот же результат (даже более правильный и оптимизированный). Так еще ты берешь игрока (i_Towers+1) то есть 1+1=2 >>> Игрок(2) = синий игрок, а ты явно хотел красного игрока. В мною предложенном способе такой оплошности нет.
Тебе нужно сделать триггер инициализацию где содержится:
массив типов юнитов - боевая единица которую хотим ограничить игрокам
массив целочисленной - кол-во этой боевой единицы
целочисленная - порядковый номер
Далее здесь же добавляем цикл.
Цикл начинаем с 0 до порядкового номера.
Сюда добавляем действия с группой игроков.
Ограничить подготовку (Массив Типа Юнита[Число B]) до (Массив Количества[Число В]) для (GetEnumPlayer())
GetEnumPlayer() - Взятый Игрок из группы игроков. Ибо не знаю как наши товарищи русские перевели сия функцию пишу ее на английском.
И усё.
DazzleFirst, возможно ли как то создать локальный триггер при применении способности и уничтожить обратно?
ведь обычно локальные триггеры как правило при применении способности создаются в инициализации карты...
нет нужды выделять еще один триггер (помимо отлова) на заклинание, если оно не слишком громоздкое в плане исполнения.
Как сообщает товарищ nvc123:
Zeuz, лучше не использовать много триггеров
вообще нету такой ситуации в которой надо много триггеров
стоит обратить на это внимание. Везде и всюду есть свои нюансы которые нужно учитывать. Если не выполнить задуманное с помощью одного триггера, то делаем два.
Локальные триггеры хороши тем, что их можно будет бескорыстия и совести удалить, а потом если нужно создать по новой. Тем самым уменьшить нагрузку на варчик в определенных условиях.
Icebow, способ исполнения нужно писать, а так же MUI да\нет. И узнать бы более подробно про выключение. Сделать наподобие "Жар Преисподней" или давать способность отключения давая возможность удерживать более одного портала на одного мага (при условии что MUI имеется).
Было бы неплохо перед показом кода расставить все отступы, ибо порой читать сложновато.
Однако я быстренько глянул и могу сказать, что код должен работать адекватно.
Но хочу придраться к самому созданию всплывающего текста. При каждом поднятии любого предмета будет создаваться этот текст (без записей и т.д.) и будет тупо висеть всю игру. Не проверял, действительно ли так, так что могу ошибаться. NekoriDes:
но показывает оба тексттага с варнингом.
А чего пишет то? Случаем не "Доступно с 0 уровня"?
Событие - Герой изучил способность
Условия - Изученная способность == нашей, И ( ее уровень == 7 или 14 или 21)
Действия - данные действия в этом вопросе.
ssbbssc, умничка, правильно пишет. Zhan10, тебе обязательно нужно делать расчеты в реальной, а потом переводить ее в целочисленную. Ибо с десятичными числами характеристики не желают работать.
И насчет бонуса... сия бонус добавляет % даже от предметов. И при каждом действии не учитывается прошлый бонус. К тому же если таких героев 3 или более они же тоже могут изучить сия способность и тут выйдет баг. Ибо каждый добавленный в группу прибавит процент к характеристикам. А это на 7 уровне у последнего изучившего способность героя будет 45% добавки к характеристикам.
Делай выводы и исправляй.
» WarCraft 3 / Помоги найти карту детства
Отредактирован DazzleFirst
» WarCraft 3 / Суммирующиеся ауры
» WarCraft 3 / Суммирующиеся ауры
Разные суммируются, однако я подразумевал(аю) только от одной ауры и одного и того же типа боевой единицы.
Если не затруднит могли бы попробовать играться с Buff или с самой способностью(ями)? На данный момент не имею доступа к редактору в ближайшую неделю.
» WarCraft 3 / Заклинания на заказ
Первый момент, который придётся учесть - это изначальное* кол-во: здоровья, брони, урона, регенерации маны и здоровья (далее характеристик) героя. Исходя из значений последних добавлять некий процент.
Второй момент - броню основную (белую) не выйдет добавлять, а только дополнительную (зелёную). Предметов, что добавляют основную броню - нет, исходя из той информации, которой обладаю.
Регенерацию можно реализовать через таймер и увеличивать её до предела переменной real.
» WarCraft 3 / Смертельный удар игнорирует броню?
Отредактирован DazzleFirst
» WarCraft 3 / Смертельный удар игнорирует броню?
Alexey103 Насколько мне известно - нет. Только кодом наносить урон или установкой здоровья.
» WarCraft 3 / В чём ошибка с локальными переменными?
Как пишет г-н Maniac_91, нет нужды в сохранении texttag, ибо при строчке
Правда есть один нюанс... Если Вы добавили строчку
» WarCraft 3 / Fervor, Critical, Evade (способности)
quq_CCCP:
За упоминание отдельное спасибо. В самой карте никак не проинформировал. Мой косяк...
Очень муторно искать решение проблемы и я не утруждал себя поиском решений. Думаю, в ближайшее время этим не буду заниматься.
» WarCraft 3 / Мгновенный стан
» WarCraft 3 / Какой триггер нагружает карту глобальный или локальный?
» WarCraft 3 / Какой триггер нагружает карту глобальный или локальный?
nvc123, я лично делаю только тестовые карты способностей, поэтому разницы не вижу. Однако играл как-то раз в карту The Blood Way, использовав любую способность на основе "Громовая поступь" у меня происходили лаги (от 0.5 до 4 сек.) на моей старой машинке 2001 года. А на основе сия способности очень много других способностей, в силу этого я очень долго плакал, когда какой Маг или Паладин использует такие способности.
К чему это я... у меня нет желания прям до 0 оптимизировать способности, ибо скачавшие мною воплощенную идею должны что-нибудь додумывать сами, те же дебаги. Иначе когда же они научаться хоть чему-то?
» WarCraft 3 / Рациональный триггер
naxim:
Цикл начинаем с 0 до порядкового номера.
Сюда добавляем действия с группой игроков.
И усё.
» WarCraft 3 / Разные снаряды при атаки!
» WarCraft 3 / Какой триггер нагружает карту глобальный или локальный?
Как сообщает товарищ nvc123: стоит обратить на это внимание.
Везде и всюду есть свои нюансы которые нужно учитывать. Если не выполнить задуманное с помощью одного триггера, то делаем два.
» WarCraft 3 / Какой триггер нагружает карту глобальный или локальный?
» WarCraft 3 / Заклинания на заказ
» WarCraft 3 / Заклинания на заказ
Да и другим дадим поиграться.
» WarCraft 3 / Почему появляется два тексттага?
Однако я быстренько глянул и могу сказать, что код должен работать адекватно.
Но хочу придраться к самому созданию всплывающего текста. При каждом поднятии любого предмета будет создаваться этот текст (без записей и т.д.) и будет тупо висеть всю игру. Не проверял, действительно ли так, так что могу ошибаться.
NekoriDes:
» WarCraft 3 / Просьба
» WarCraft 3 / Просьба
» WarCraft 3 / Не хочет в отряд
Условия - Изученная способность == нашей, И ( ее уровень == 7 или 14 или 21)
Действия - данные действия в этом вопросе.
И насчет бонуса... сия бонус добавляет % даже от предметов. И при каждом действии не учитывается прошлый бонус. К тому же если таких героев 3 или более они же тоже могут изучить сия способность и тут выйдет баг. Ибо каждый добавленный в группу прибавит процент к характеристикам. А это на 7 уровне у последнего изучившего способность героя будет 45% добавки к характеристикам.
Делай выводы и исправляй.
» WarCraft 3 / Не хочет в отряд
» WarCraft 3 / Заклинания на заказ
» WarCraft 3 / Заклинания на заказ