Рикошет это тип атаки(тип оружия - edited), такой, у охотниц Лунный чакрум нифига не дает, просто иконка, сам эффект вызван переключением атаки.
Это делает либо апгрейдом либо морфом юнита, так же подсовыванием (убиранием абилки с орб эффектом) ВНИМАНИЕ - тип атаки снаряд рикошет не сочетается с большинством орб эффектов.
Как, интересно, камера может вызвать десинхронизацию?
Ну если в перемещение камеры запихать создание локейшена ( у гуишников вроде такое было, берет локейшен от локальной камеры), сама по себе камера безопасна в этом плане.
о боже, руна виндвалка и триггер с ивентами юнит отдал приказ, юнит сдох, юнит. Условие что приказ не равен Attack Once (этот приказ нельзя отдать в ручную, тока триггерно) собственно проверяем отдавая приказ, не отменил ли его юнит, если отменил удаляем бафф виндвалка и даем его снова только когда юнит решит атаковтаь, после отдаем приказ Attack once.
Метот с руной защитит от промахов но на этот удар не сработают орбы. Недавно делал блинкстрайк с фикс.дмг, могу кинуть код если интересно, метод исполнения VJASS\\
quq_CCCP, да взломали, потому что плохая там система была.
Я же предлагаю сделать проверку
if StringHash(GetPlayerName(p)) == 123456 and StringHash(GetEventPlayerChatString()) == 23456 then
call activate_VIP(p)
endif
Очевидный плюс - из кода карты невозможно будет определить ник и пароль.
Хеш от строки вроде не зависит от содержания строки, аналог функции на RB S2Ix которая возвращает номер строки в таблице строк, но вот нет гарантий что по этому адресу всегда будет ник игрока.
Вот обновленная версия на структурах, я её вроде выкладывал...
либо используйте CreateCreepOfType для создания крипов, так будет респаунить тока тех крипов которых вы создали этой функцией...
private function IsCreepSaved takes nothing returns boolean
set bj_Neutral_Creep = GetFilterUnit( )
return LoadReal( bj_lastCreatedHashtable, bj_HandleInteger, 0 ) != 0.00
endfunction
private function SaveCreepRespPos takes nothing returns nothing
local group grp = CreateGroup( )
local boolexpr NeutralFilter = Condition( function Bolexp_UnitFiler_Conditions )
local trigger trg = CreateTrigger( )
call TriggerRegisterPlayerUnitEvent( trg, bj_PLAYER_NEUTRAL_AGGRESSIVE, EVENT_PLAYER_UNIT_DEATH, Condition( function IsCreepSaved ) )
call TriggerAddAction( trg, function Trig_Creep_Resp_Actions )
call DestroyTimer( GetExpiredTimer( ) )
call GroupEnumUnitsInRect( grp, bj_mapInitialPlayableArea, NeutralFilter )
call ForGroup( grp, function Group_SaveCrepsPos_Actions )
call DestroyGroup( grp )
call DestroyBoolExpr( NeutralFilter )
set NeutralFilter = null
set trg = null
set grp = null
endfunction
Надо добавить фильтр проверки сохраненных, это старая версия, тут я фильтр не делал...
У тебя триггер срабатывает на юнитов которые небыли сохранены...
//...
GroupEnumUnitsInRect( grp, bj_mapInitialPlayableArea, Only_Alive )
if CountUnitsInGroup( grp ) > какое то число then
// ваши действия
endif
call GroupClear( grp )
//...
Ну Only_Alive - bolexpr, как сделать фильтр на живых думаю вам известно... Вот мне очень неинтересно почему это юниты покидают некий рект или игровой рект при смерти? Уже сотый раз вижу про это комнтарии... Нет ни покидает, пока разлагается координаты у него никуда не денутся, если разложился, удален, хендл равен мусору - координаты будут 0.00, 0.00
quq_CCCP, а можно поинтересоваться, что будет делать твоя стенка? Только иллюзии?
Небудет иллюзий, вообще небудет, совсем небудет!!!!
Так если для справки Юнита бьет молния из стены и замедляет нанося единожды урон и сжигая ману, чем Юнит дальше отошел от стены тем слабее замедление...
Короче у меня тут ступор - а как же все это реализовать, каким путем пойти? nvc123:
quq_CCCP, я могу предложить способ с использованием даммиков. Каждому даммику даешь ауру с радиусом действия 100-150 ( ну в зависимости от размера стены). При прохождении через стенку будет вешаться эффект ауры. Поиск нужных тебе юнитов по наложенному эффекту от ауры.
Все бы хорошо, но обновление баффа не отследить, длительность баффа ауры тоже, там рандом по времени действия...
Еще боюсь если кто то быстро пролетит через стену не получит бафф ауры...
quq_CCCP, я бы пикал в неком ректе (где твоя стена является диагональю)
а потом через координаты проверял прошёл ли юнит через стену или нет
Тут понадобится 1200 \ 32 регионов, вошел в регион из массива, тут же надо записывать в группу и проверять что юнит вышел и региона не войдя в другой...
Так же я пока не придумал как реализовать защиту от того что юнит залез сразу в 2 региона или 3...
Я вот и решил послушать, то что то у меня голова кругом от казалось бы пустяковой скиллки...
А не проще вдоль стены создать надцать дамиков, потом таймером перебирать юнитов вокруг них, тупо запихивать в группу и делать с юнитами все что твоей душе угодно?
Простите нахрена мне даммики когда я знаю координаты точек вокруг которых можно пикать юнитов, шило на мыло...
Но там туча переборов, чтобы не пикнуть одного юнита 10 раз, а так же понадобится паразитная група чтобы отсеять тех кто прошел через стену, а потом спустя некоторое время побежал обратно, этого недостатка решены ивенты, но там триггеры и туча условий...
Фрог юзает у себя EventUnitsInRange ( огромная стая даммиков, с радиусом пика 17, как дота не зависат )
Код Wall of replica by icefrog
function C54 takes nothing returns boolean
local trigger t = GetTriggeringTrigger()
local integer OZ3 = GetHandleId(t)
local trigger C64 = LoadTriggerHandle(XY, OZ3, 255)
local integer WSO = GetHandleId(C64)
local trigger C74 = LoadTriggerHandle(XY, WSO, 256)
local group C84 = LoadGroupHandle(XY, WSO, 257)
local group C94 = LoadGroupHandle(XY, WSO, 258)
local unit BU4 = LoadUnitHandle(XY, WSO, 259)
local integer CA4 = GetHandleId(BU4)
local integer C34 = LoadInteger(XY, CA4, 260)
local integer CB4
local integer i
local unit u
call ForGroup(C94, function C44)
set i = 1
loop
exitwhen i > C34
set CB4 = LoadInteger(XY, CA4, (2800 + i))
set u = LPI(CB4)
call FlushChildHashtable(XY, GetHandleId(LoadTriggerHandle(XY, CA4, (2900 + i))))
call M7I(LoadTriggerHandle(XY, CA4, (2900 + i)))
if IsUnitIllusion(u) then
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\MirrorImage\\MirrorImageCaster.mdl", GetUnitX(u), GetUnitY(u)))
call RemoveUnit(u)
call LRI(CB4)
endif
set i = i + 1
endloop
call FlushChildHashtable(XY, OZ3)
call FlushChildHashtable(XY, WSO)
call FlushChildHashtable(XY, CA4)
call RemoveUnit(BU4)
call MOI(C84)
call MOI(C94)
call M7I(C64)
call M7I(C74)
call M7I(t)
set t = null
set C64 = null
set C74 = null
set C84 = null
set C94 = null
set BU4 = null
set u = null
return false
endfunction
//Calls:
// M2I
// Q7I
//Functions as argument:
// L9I
// C14
// CI4
// C24
// C54
function CC4 takes nothing returns nothing
local unit MJI = GetTriggerUnit()
local location l = GetSpellTargetLoc()
local real x = GetLocationX(l)
local real y = GetLocationY(l)
local real CD4 = GetUnitFacing(MJI) - 45
local unit BU4 = CreateUnit(GetOwningPlayer(MJI), 'h00O', x, y, CD4)
local unit u
local real TU2
local real R02
local integer i
local real BT1
local trigger t = CreateTrigger()
local group g1 = M2I()
local integer MDI = GetHandleId(t)
local group g2 = M2I()
local trigger C64 = t
local integer N5I = GetUnitAbilityLevel(MJI, 'A0QK')
local boolean IL3 = false
if N5I == 0 then
set IL3 = true
set N5I = GetUnitAbilityLevel(MJI, 'A21Q')
endif
call SetUnitAbilityLevel(BU4, 'A0QL', N5I)
call Q7I(GE, x, y)
call SaveGroupHandle(XY, MDI, 257, g1)
call SaveGroupHandle(XY, GetHandleId(BU4), 257, g1)
call SaveGroupHandle(XY, MDI, 258, g2)
call SaveUnitHandle(XY, MDI, 259, BU4)
call SaveInteger(XY, GetHandleId(BU4), 260, 0)
set i = 0
loop
exitwhen i > 39
set TU2 = x + (500 - 25 * i) * Cos((CD4 - 45) * bj_DEGTORAD)
set R02 = y + (500 - 25 * i) * Sin((CD4 - 45) * bj_DEGTORAD)
set u = CreateUnit(GetOwningPlayer(MJI), 'h00P', TU2, R02, CD4)
call SetUnitPathing(u, false)
call SetUnitX(u, TU2)
call SetUnitY(u, R02)
call GroupAddUnit(g2, u)
call TriggerRegisterUnitInRange(t, u, 17, Condition(function L9I))
set i = i + 1
endloop
if IL3 then
call TriggerAddCondition(t, Condition(function C14))
else
call TriggerAddCondition(t, Condition(function CI4))
endif
set t = CreateTrigger()
call TriggerRegisterUnitEvent(t, BU4, EVENT_UNIT_SUMMON)
call TriggerAddCondition(t, Condition(function C24))
call SaveTriggerHandle(XY, MDI, 256, t)
set t = CreateTrigger()
call TriggerRegisterTimerEvent(t, 15 * N5I, false)
call TriggerAddCondition(t, Condition(function C54))
call SaveTriggerHandle(XY, GetHandleId(t), 255, C64)
call RemoveLocation(l)
set MJI = null
set l = null
set u = null
set t = null
set C64 = null
set g1 = null
set g2 = null
set BU4 = null
endfunction
//Calls:
// CC4
function CE4 takes nothing returns boolean
if GetSpellAbilityId() == 'A0QK' or GetSpellAbilityId() == 'A21Q' then
call CC4()
endif
return false
endfunction
//Calls:
// Q0I
//Functions as argument:
// CE4
function LM1 takes nothing returns nothing
local trigger t = CreateTrigger()
call Q0I(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(t, Condition(function CE4))
set t = null
endfunction
Пламенем феникса дамажить проходящих. Правда придётся несколько дамиков делать по длине стены.
Если тип источника урона - дамми - то делаем копию повреждённого.
Ну вобще то я собрался пуржить и сжигать мп, а про сира ляпнул для примера
Дамми с пламенем феникса куча ивентов на дмг, всем на крате + по несколько раз, ибо бафф дает дамаг пока висит раз в сек
Нафига такое?
Когда игрок вводит -info просто делает EnumUnitsSelectedOfPlayer и там уже проверяем FirstofGroup() == null если да то ниче не делаем, если нет то выдаем инфу....
Melissa, не не не, есть другое действие с локом, там не отдалиш не сдвинешь и угол не меняется. В конфетные войны зайди, там пока героя не пикнул никуда низя посмотреть...
Особо можешь нестаратся, их уже как грязи вот на хайве видел забавную систему определания типа урона там все на 1 триггер, сделано + проверки чтобы 1 и тому же юниту 100500 ивентов не напихать, через скока то ивентов триггеру удаляют и создают новый добовляя в него ивенты на всех живых, при дамаге цели добовляют скилл на отрец маг резист, и проверяют дмг больше или меньше 0.00, с помощью дамиков так же отлавливаю сплеш атаки с чистым дмг.
Триггерам можно добавлять 100500 событий и постоянно менять условия и действия, но это муторно, годится для навороченой системы отлова физ урона 1 на всю карту и тому подобное где триггерные баши и криты будут у 100500 юнитов.
Просто удаляем и усе.
Ред. Melissa
» WarCraft 3 / Рикошет
Это делает либо апгрейдом либо морфом юнита, так же подсовыванием (убиранием абилки с орб эффектом)
ВНИМАНИЕ - тип атаки снаряд рикошет не сочетается с большинством орб эффектов.
» WarCraft 3 / Десинк
» WarCraft 3 / Как создать способность,усиливающую (1!) следующую атаку.
Метот с руной защитит от промахов но на этот удар не сработают орбы.
Недавно делал блинкстрайк с фикс.дмг, могу кинуть код если интересно, метод исполнения VJASS\\
» WarCraft 3 / Десинк
В доте или моей карте это работает без дисинхов.
Ред. quq_CCCP
» WarCraft 3 / Система VIP
Второе не проверял, поэтому хз.
» WarCraft 3 / Система VIP
» WarCraft 3 / Система VIP
» WarCraft 3 / Варик путает абилки
» WarCraft 3 / Система VIP
Нейм спуферы давным давно доступны.
» WarCraft 3 / Изменить немного систему респавна крипов
» WarCraft 3 / Изменить немного систему респавна крипов
либо используйте CreateCreepOfType для создания крипов, так будет респаунить тока тех крипов которых вы создали этой функцией...
Ред. quq_CCCP
» WarCraft 3 / Изменить немного систему респавна крипов
У тебя триггер срабатывает на юнитов которые небыли сохранены...
» WarCraft 3 / как при использовании способности предмета на саму предмет?
» WarCraft 3 / Триггеная способность типа "Стена"
всем спасибо, особенно 16GB, за пример.
» WarCraft 3 / как подсчитать количество живых юнитов на jass?
Вот мне очень неинтересно почему это юниты покидают некий рект или игровой рект при смерти? Уже сотый раз вижу про это комнтарии...
Нет ни покидает, пока разлагается координаты у него никуда не денутся, если разложился, удален, хендл равен мусору - координаты будут 0.00, 0.00
» WarCraft 3 / Триггеная способность типа "Стена"
Так если для справки Юнита бьет молния из стены и замедляет нанося единожды урон и сжигая ману, чем Юнит дальше отошел от стены тем слабее замедление...
Короче у меня тут ступор - а как же все это реализовать, каким путем пойти?
nvc123: Про это прошу поподробнее, стена может быть под любым углом, от 0 до 360 и как мне регион 1 под углом запилить?
» WarCraft 3 / Триггеная способность типа "Стена"
Еще боюсь если кто то быстро пролетит через стену не получит бафф ауры...
» WarCraft 3 / Триггеная способность типа "Стена"
Так же я пока не придумал как реализовать защиту от того что юнит залез сразу в 2 региона или 3...
Я вот и решил послушать, то что то у меня голова кругом от казалось бы пустяковой скиллки...
» WarCraft 3 / Триггеная способность типа "Стена"
Ну народ, предложит че нить дельное?
Ред. quq_CCCP
» WarCraft 3 / Триггеная способность типа "Стена"
Но там туча переборов, чтобы не пикнуть одного юнита 10 раз, а так же понадобится паразитная група чтобы отсеять тех кто прошел через стену, а потом спустя некоторое время побежал обратно, этого недостатка решены ивенты, но там триггеры и туча условий...
Фрог юзает у себя EventUnitsInRange ( огромная стая даммиков, с радиусом пика 17, как дота не зависат )
» WarCraft 3 / Триггеная способность типа "Стена"
Дамми с пламенем феникса куча ивентов на дмг, всем на крате + по несколько раз, ибо бафф дает дамаг пока висит раз в сек
Ред. quq_CCCP
» WarCraft 3 / В чем моя ошибка?
Когда игрок вводит -info просто делает EnumUnitsSelectedOfPlayer и там уже проверяем FirstofGroup() == null если да то ниче не делаем, если нет то выдаем инфу....
» WarCraft 3 / По поводу триггера
» WarCraft 3 / [JASS] Оптимизация
» WarCraft 3 / [JASS] Оптимизация
Просто удаляем и усе.