Локальный юнит -- это нормальная практика. Если не можешь в локалки, иди читать статьи.
Далее, ты вызываешь условие через condition у группы
А должно быть Filter
Без разницы. Можно Filter, можно Condition, если используешь jasshelper, то можно вообще не писать (jasshelper сам обернёт в Condition). На работоспособность никак это не повлияет.
Проще простого же. Пусть abil является действием в триггере, который ловит каст твоего спела.
function filter takes nothing returns nothing
local unit u = GetFilterUnit()
if /* нужные условия */ then
// нужные действия
endif
set u = null
endfunction
function abil takes nothing returns nothing
...
call GroupEnumUnitsInRect(bj_lastCreatedGroup, bj_mapInitialPlayableArea, Condition(function filter))
...
endfunction
Опять вейты с глобалками - кто так делает?
Как сделан блинкстрайк рики можешь посмотреть в опен доте.
Это не такой же скилл. Здесь юнит летит , сам юнит и его видно, а не мгновенный блинк. Когда из точки а, в точку б. Это не я делал скилл, я лишь его пытаюсь улучшить.
Тут скорее всего еще проблема с кодом карты, деоптимизаторы не восстанавливают данные на 100% и ошибки будут почти всегда, 100% рабочий способ - создавать объекты с нуля в карте руками, с теми же id и параметрами что в карте которую вы хотели восстановить...
Если закинуть j файлик в другую карту ,то работает.
для этого нужно иметь копию - открытую версию с гуи-менюшками при себе. а лучше изучить jass, там легко. первое время будет не понятно, но быстро научишься.
Я сюда просто стал добавлять, думаю багов это не вызовет.
Как сделать - очень просто, это классический спел по типу волна, представляет из себя векторное движение дамми юнита с помощью таймера, примеры есть в статьях и наработках. Вычисляешь угол между применившим заклинание и точкой применения заклинния, если в качестве цели указан юнит, то угол ищем между применившим и целью, создаем даммика и с помощью таймера в 0.03125 (32 раза в сек более чем достаточно) двигаем дамми юнита в ранее найденном нами направлении, по истечению определенного кол-ва тиков таймера, ну 32х30 это примерно 0.9 секунды и 960 ед расстояния (если двигать цель по 30 ед. за каждый тик), ну так же если нужно наносить урон врагам, для этого используются две группы и фильтр.
Пример кода
function Group_Frost_Wave_Actions takes nothing returns nothing
local DamageData dd = bj_forLoopAIndexEnd
local unit Enemy = GetEnumUnit( )
call GroupAddUnit( dd.grp, Enemy )
set bj_lastCreatedUnit = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'hatk', GetUnitX( Enemy ), GetUnitY( Enemy ), GetUnitFacing( Enemy ) )
call SetUnitPathing( bj_lastCreatedUnit, false )
call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 0.50 )
call UnitAddAbility( bj_lastCreatedUnit, 'A06Z' )
call SetUnitAbilityLevel( bj_lastCreatedUnit, 'A06Z', dd.id )
call SetUnitX( bj_lastCreatedUnit, GetUnitX( Enemy ) )
call SetUnitY( bj_lastCreatedUnit, GetUnitY( Enemy ) )
if IssueTargetOrderById( bj_lastCreatedUnit, 852243, Enemy ) then
call UnitDamageTarget( dd.attacker, Enemy, dd.dmg, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_COLD, WEAPON_TYPE_WHOKNOWS )
call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl", Enemy, "origin" ) )
endif
set bj_lastCreatedUnit = null
set Enemy = null
endfunction
function Timer_Frost_Wave_Expires takes nothing returns nothing
local timer t = GetExpiredTimer( )
local DamageData dd = GetDataBX( t )
set dd.time = dd.time + 1
if dd.time > 25 then //25 * 32 = 800
call DestroyEffect( dd.fx )
call KillUnit( dd.attacked )
call GroupClear( dd.grp )
call ReleaseGroup( dd.grp )
call PauseTimer( t )
call RemoveDataBX( t )
call DestroyTimer( t )
call dd.clear( )
call dd.destroy( )
else
set dd.rx = dd.rx + 32.00 * Cos( dd.hp )
set dd.ry = dd.ry + 32.00 * Sin( dd.hp )
call SetUnitX( dd.attacked, CheckX( dd.rx ) )
call SetUnitY( dd.attacked, CheckY( dd.ry ) )
call GroupClear( gg_grp_TempGroup )
set bj_groupEnumOwningPlayer = dd.pl
set bj_forLoopAIndexEnd = dd
set bj_lastReplacedUnit = dd.attacker
call GroupEnumUnitsInRange( gg_grp_TempGroup, dd.rx, dd.ry, 128.00 + 4.00 * dd.time, OnlyWavedEnemy )
call ForGroup( gg_grp_TempGroup, function Group_Frost_Wave_Actions )
set bj_lastReplacedUnit = null
endif
set t = null
endfunction
//===========================================================================
function startTrig_Frost_Wave takes nothing returns nothing
local timer t = CreateTimer( )
local DamageData dd = DamageData.create( )
set dd.attacker = GetSpellAbilityUnit( )
set dd.id = GetUnitAbilityLevel( dd.attacker, 'A060' )
set dd.dmg = dd.id * 125.00
set dd.pl = GetOwningPlayer( dd.attacker )
set dd.hp = Atan2( GetSpellTargetY( ) - GetUnitY( dd.attacker ), GetSpellTargetX( ) - GetUnitX( dd.attacker ) )
set dd.rx = GetUnitX( dd.attacker ) + 32.00 * Cos( dd.hp )
set dd.ry = GetUnitY( dd.attacker ) + 32.00 * Sin( dd.hp )
set dd.attacked = CreateUnit( dd.pl, 'hdum', dd.rx, dd.ry, bj_RADTODEG * dd.hp )
set dd.fx = AddSpecialEffectTarget( "Abilities\\Spells\\Other\\WindWave\\PrismaticWave.mdx", dd.attacked, "origin" )
set dd.grp = NewGroup( )
set dd.time = 0
call SetDataBX( t, dd )
call SetUnitFlyHeight( dd.attacked, 0.00, 0.00 )
call SetUnitScale( dd.attacked, 1.25, 1.25, 1.25 )
call TimerStart( t, 0.03125, true, function Timer_Frost_Wave_Expires )
set t = null
endfunction
Вот так выглядит аналог того что на твоих картинках в коде, кода минимум, да и ничего заумного нет.
Raised: j файлик скинул, где гуи триггер , волна с зади появляется и не идет вперед.
Тебе нужно передвигать невыделяемого юнита (на старых патчах) или спецэффект (на новых патчах) с моделью волны много раз в секунду в нужном тебе направлении и на нужное тебе расстояние/интервал.
Подсказки можно найти в статьях: раз, два. Ну и учитывая суть вопроса:
Помогите создать движение волны...
Хотелось бы видеть твои попытки решить эту задачу. Непонятно чему собственно помогать.
nvc123, А ему бесполезно указывать, что RTFM решает большую часть вопросов. Он предпочитает задавать вопросы, на которые чуть ли не прямым текстом в статьях ответы есть.
Давай покажи мне прямой ответ 250 рублей сразу скину. Покажи , где в статье есть прямой ответ
статьи учат мыслить, и расширяют твою область знаний
nvc123, А ему бесполезно указывать, что RTFM решает большую часть вопросов. Он предпочитает задавать вопросы, на которые чуть ли не прямым текстом в статьях ответы есть.
Давай покажи мне прямой ответ 250 рублей сразу скину. Покажи , где в статье есть прямой ответ
Код карты лежит как бы выше это и есть карта. Вечно закрываешь вопросы никогда не помогая. Тебе нравится давать бессмысленные советы? В заказы меня еще отправь где их никто не исполняет. Новичек никогда по гайду с 0 на jasse не напишет нормальный скилл без кучи циклов.
Parom_Harona, я тут попытался, скажите вы владете самой картой как ломанной и только J файл или имеете доступ к Гуи у этой функции? Я не хочу особо код анализировать, как бы хочу, но не могу потому что в чужом разобраться крайне сложно, потому что спустя время и в своём уже ничего не понимаешь, но судя по ЭТОМУ коду, там ничего не двигается, а лишь создаётся юнит-эффект со сдвигом, относительно какой -то точки
set udg_Point[4924]=PolarProjectionBJ(udg_Point[4923],(200.00*I2R(GetForLoopIndexA())),(GetUnitFacing(udg_Caster[4920])-90.00))
но эта точка всегда будет на -90 градусов относительно взгляда героя (хотя вы говорите что сзади) ====================
call CreateNUnitsAtLoc(1,'h0ID',GetOwningPlayer(udg_Caster[4920]),udg_Point[4924],udg_Angle[4920]) а этот юнит создаётся в лупе, и там вроде как нет задержки и следовательно мы получим вереницу эффектов мгновенно верно?
h0ID' Этот юнит и есть волна. Я вырезал код, но там слишком огромный триггер был и я не стал все функции копировать. Скилл действует мгновенно.
Создаешь юнита, убираешь ему атаку, даешь способность москиты, ставишь хп на 3 и регенерацию -1, далее ставишь ему ману 9999 и изначальную ману 9999
Даешь ему нужную способность волны
А в триггере просто создаешь его за спиной и даешь приказ применить волну в нужную точку
И ещё юниту убираешь модель, там можно просто написать в пути к моделе .mdl
Тоже самое с тенями, там всё на 0
Я сюда как раз пришел за помощью, в написании волны) Моя волна с места не здвинулась PT153:
Parom_Harona, опиши пошагово что ты делаешь. ОС, браузер? Какие либо сообщения об ошибках? Скриншоты? Таких проблем, судя по всему, ни у кого больше не наблюдается.
Из за коментов в коде может быть беда, встречался с этим при редактировании карты в jassкрафте, мб некоторые редакторы не верно понимают кодировку кирилицы в коде или еще чего.
Если cjass можно переносить и не обрабатывать j файлик, то я много фишек перенесу)
Из за коментов в коде может быть беда, встречался с этим при редактировании карты в jassкрафте, мб некоторые редакторы не верно понимают кодировку кирилицы в коде или еще чего.
Делать комментарии на английском? Либо вообще не делать?
Parom_Harona, плохо копируйте, с ошибками потому и не работает. Уже готовый код из j файла можно переносить, и он будет работать если правильно перенести все переменные, обьекты и так далее.
Cjass не будет работать. Я переношу все идеально сто раз так делал. Но если не запущу jasshelper то карта не рабочая. Хотя проверю еще раз с cjass + мем хак стоит и атихак
Parom_Harona, ну а Нахрен вам Cjass, Когда простой jass то не освоили? Вы колупаете чужую карту, будьте добры писать на чистом jass без надстроек. Вовсе код можно разрабатывать в отдельной карте пустышке, в редакторе, а потом после сохранения и интерпритации скопировать готовый, чистый и проверенный код из j файла и перенести на вашу наруту.
Оно так не работает. j файлик всегда надо прогнать jasshelperom Иначе если просто вкинуть даже рабочий код не работает она. Зачем мне осваивать jass? Если все что мне нужно лежит в других картах. Я просто беру и копирую и просто настраиваю под себя скилл.
cjass или vjass все равно компилирует в обычный jass (j-файл вытащи mpq-архиватором, открой блокнотом)
не знаю можно ли без редактора. Попробуй импортом заменить j-файл. Мне кажется нельзя.
Когда проверяешь j файлик на ошибки Jass хелпером, оно не исправляет cjass из з этого оно карта потом не работает. Приходится офать cjass без него вообще
» WarCraft 3 / Способность которая действует по все карте
» WarCraft 3 / Способность которая действует по все карте
Юзаем GetFilterUnit( ) напрямую.)
Далее, ты вызываешь условие через condition у группы
А должно быть Filter
» WarCraft 3 / Способность которая действует по все карте
Ред. Parom_Harona
» WarCraft 3 / Прохождение юнита сквозь все.
» WarCraft 3 / После слк оптимизации ошибка
» WarCraft 3 / Реально вернуть инициализацию в нормальный вид
» WarCraft 3 / Движение, jass
» WarCraft 3 / Движение, jass
Ред. Raised
» WarCraft 3 / Движение, jass
На 1 скрина она с здани и не двигается, а мне надо что бы она вперед двинулась
Hate: Где же ты раньше был скилов на 5к заказывали. Искали кодеров везде, никто не откликнулся, кроме одного и тот неважно сделал
» WarCraft 3 / Движение, jass
Ред. Parom_Harona
» WarCraft 3 / Движение, jass
» WarCraft 3 / Движение, jass
» WarCraft 3 / Движение, jass
Там гуи конвертнутый в jass. Сюда надо таймер и хэш таблицу. Я просто полный нуб.
» WarCraft 3 / Движение, jass
PT153: Я в черновике то создаю что угодно.
» WarCraft 3 / Движение, jass
» WarCraft 3 / Движение, jass
» WarCraft 3 / Загрузка ресурсов и наработок на сайт
Ред. Parom_Harona
» WarCraft 3 / Загрузка ресурсов и наработок на сайт
» WarCraft 3 / Загрузка ресурсов и наработок на сайт
Ред. Parom_Harona
» WarCraft 3 / cjass Можно ли запустить без редактора?
» WarCraft 3 / cjass Можно ли запустить без редактора?
» WarCraft 3 / cjass Можно ли запустить без редактора?
Ред. Parom_Harona
» WarCraft 3 / cjass Можно ли запустить без редактора?
» WarCraft 3 / cjass Можно ли запустить без редактора?
» WarCraft 3 / cjass Можно ли запустить без редактора?