Событие - юнит игрока умирает, действие посчитать юнитов в области, если юнитов меньше 1 то делай свои действия, чувак как то не круто...
Примитив же? Разве нет?
ClotPh, а чем это плохо? Глобалки? Создавать каждый раз группу глупо, достаточно одной для всех дейсвий, брать всех и перебирать в цикле? Нафиг надо, это не быстрее,не лучше ни коим образом, разве что удобнее, так же у меня везде есть проверки на корректность результатов выполнения функций, чего у тебя нету, RMaxBJ - не даст поставить юниту 0 хп если что то пойдет не так, хил возможен только выше 1.00.
Так же зачем брать кд абилки каждый раз, это не шибко быстрая функция, лучше запиши её результат в переменную.
Фильтр удалять ненужно, он не утекает, 1 и тот же boolexpr можно использовать многократно для разных целей.
Так же отсеиваем клонов. DracoL1ch, у тебя же у самого была проблема с GetTriggerEventId() С возвращением.
Фильтр страннооватый, сначала берёшь всех потом проверяешь на уровень абилки, сначала проверь что живые, не клоны. А потом смотри уже абилку. И почему одни юзы Gettriggerunit(), Getunitabilitylevel, заноси вначале триггера все значения в переменные, функции могут возвращать не то значение если вызвать повторное срабатывание триггеров.
globals
unit bj_lastFilterUnit = null
group TEMP_GROUP = CreateGroup( )
real TEMP_REAL = 0.00
endglobals
function IsUnitDead takes unit u returns boolean
return IsUnitType( u, UNIT_TYPE_DEAD ) or GetUnitTypeId( u ) < 1
endfunction
function Cond_Find_Alive_Hero_Units takes nothing returns boolean
set bj_lastFilterUnit = GetFilterUnit( )
return IsUnitType( UNIT_TYPE_HERO bj_lastFilterUnit ) and not( IsUnitIllusion( bj_lastFilterUnit ) or IsUnitDead( bj_lastFilterUnit ) )
endfunction
function Group_Add_Effect_Enum takes nothing returns nothing
local unit hero = GetEnumUnit( )
local integer level = GetUnitAbilityLevel( hero, 'A27T' )
if level > 0 then
call DestroyEffect(AddSpecialEffectTarget("Psychopomp4.mdx", hero, "origin"))
call SetUnitState( hero, UNIT_STATE_LIFE, GetUnitState( UNIR_STATE_LIFE ) + RMaxBJ( TEMP_REAL * level, 1.01 ) )
endif
set hero = null
endfunction
function PerceptionEffect takes nothing returns nothing
local unit cast = GetSpellAbilityUnit( )
local integer id = GetSpellAbilityId( )
local integer level = GetUnitAbilityLevel( cast, id )
local real cooldown
if level > 1 and not IsUnitDead( cast ) then
set cooldown = GetAbilityCD( id, level, cast )
else
set cooldown = 0.00
endif
if cooldown >= 1.01 then
call GroupClear( TEMP_GROUP )
call GroupEnumUnitsInRect( TEMP_GROUP, bj_mapInitialPlayableArea, Condition( function Cond_Find_Alive_Hero_Units ) )
set TEMP_REAL = cooldown
call ForGroup( TEMP_GROUP, function Group_Add_Effect_Enum )
endif
set cast = null
endfunction
Попробуй вот так, на вид куда понятнее, да и покороче...
Бери другую основу или юзай импорт, у многих скиллов хардкодные данные, т.е он прописаны в коде и спел не берет из из слк таблицы, хоть ты что измени. Так у аватара нельзя изменить бафф в настройках, а только отредактировать дефолт.
Юзай ауру смерти ("Unholy aura") или еще что, но не ауры фонтанов и лечащего варда, там ничего низя изменить, да и бафф там висит случайные 2-4 сек.
Спелл магнуса из доты? Ну движение по векторам с малым периодом, довольно примитивый спелл. Таймером двигаем юнита к цели + следим что цель жива, так же ищем союзников в радиусе и добавляем их в группу, при каждом тике таймера двигаем кастера с юнитами в группе к цели.
ClotPh, ничего там не работает, уже 10 раз сказали, точка. Хер вы что сделайте с эмпатией, это хардкодный спелл который работает только так как задумали близзарды и никак иначе! Её нельзя использовать в качестве связки варлока из доты, хоть вы там за настраивайтесь!
Крестом перерождения, иначе - никак!
Зачем тебе понадобилось воскрешать не героев, проще сделать из героя и не мучится, отображение опыта, сообщения о гибели и прочие "геройские" фишки можно отключать.
Это способность предмета - Книга заклинаний (spellbook) об это была даже статья, как сделать так чтобы выученные способности попадали в спеллбук.
Вот одна ссылка
Остальное ищи сам, наработок с этими книгами было море.
Alexander122, потому что она не работает так как нужно, да и юниты сдохнуть не от тебя, а сами себя пришибут... Да и урон там распределяется несколько не так.
awesomesk1ll, а что если в кешь записать могут ли двигать камеру все игроки, если все нет - то реплей, если большинство да, то синхронизируем с ними данные и записываем в переменную.
Ну на ГУИ никак, хотя там сравнительно примитивно.
Отдается молния которая есть визуальный эффект, молнию двигает отдельный таймер.
При касте создается триггер, в который добавляется события что Юнит цель умер, Юнит цель получил урон а так же цель записывается в группу, ( для всех юнитов которых задела молния), условие триггера если событие на который сработал триггер = получение урона то проверить что урон выше 0 и меньше 6000 ( проверка корректности урона, ибо акс добивает 10 миллионов физ урона) , иначе вернуть true.
Далее в действии триггера проверяем умер ли Юнит, истекло ли время или Юнит получил урон, если Юнит умер удаляем его из группы и изданием с него визуальный эффект, если время вышло то удаляем визуальные эффекты на всех юнитах в группе и утилизируем триггер. Если цель получила урон, цель в группе, то рассчитываем сколько сколько урона нужно распределить по остальным Юнита в группе, исключаем из группы того кто получил урон, с остальными в группе проделываем действия: смотрим сколько у Юнита хп, больше урона - снижаем хп на кол во урона. Иначе наносим 10 миллионов урона от лица применившего заклинание.
Все данные прикрепляются к триггеру с помощью хештаблицы. Триггеру так же добавляется событие - время истекло, чтобы завершить эффект спелла по истечению времени.
16GB, тестанул код, но делал разделения только на визуальные действия, т.е камеру не перемещал при телепортах и перерождениях героев в реплее, всё норм. Но вот без цилков, рили может десинхать, ты же не для каждого игрока записываешь проверку, а для всех.
Нужно тестить в муи, судя по тому что похожий антихак засунули в доту ниче не дисинхало и ниче не делало вред, правда читеры очень быстро научились обходить прозрачность юнитов и всякие туманы, затеняющие карту...
В доте вроде юзается какая то фишка с кинематиком, хз в чем различие киниматике в игре и в реплее?
Код лень колупать...
Так постойте, что мешает вначале чекнуть когда все загрузились - реплей или нет, а потом уже хоть за сворачивайтесь.
На афкашеров пофигу, что им лишнее что то показалось, чаще всего такие вовсе не приходят или ливают.
IceFog, Ну уже хорошо, что работает.
Еще есть возможность проверки на ретурн баге, но я не знаю в каком направлении копать, мб кто колупал игру знает где посмотреть что игра реплей.
//**************************************************************************************
//* *
//* REPLAY DETECT ENGINE V1.30 *
//* CONFIGURATION SETTINGS START HERE *
//* *
//**************************************************************************************
library ReplayDetectEngine
globals
boolean InGame = true
boolean array AMHS_FogDisable
boolean array AMHS_InvisDisable
unit array AMHS_FogDummy
unit array AMHS_InvisDummy
endglobals
//-> IsInGame created by PandaMine with help from Captain Griffen
//This function is what makes it possible for the system not to break replays,
//simply put if your actually playing the game, this function will return false.
//It will return true if the game is being viewed in a replay
private function IsInGame takes nothing returns boolean
local integer counter = 1
local real camerax
local real cameray
local real x
local real y
local boolean output
loop
exitwhen counter > 12
if GetLocalPlayer() == Player(counter-1) then
set camerax = GetCameraTargetPositionX()
set cameray = GetCameraTargetPositionY()
endif
set counter = counter + 1
endloop
set counter = 1
call PauseGame(true)
call TriggerSleepAction(0)
loop
exitwhen counter > 12
if GetLocalPlayer() == Player(counter-1) then
call SetCameraPosition(camerax + 1,cameray + 1)
endif
set counter = counter + 1
endloop
call TriggerSleepAction(0)
call PauseGame(false)
set counter = 1
loop
exitwhen counter > 12
if GetLocalPlayer() == Player(counter-1) then
set x = GetCameraTargetPositionX()
if x == camerax + 1 then
set output = true
else
set output = false
endif
call SetCameraPosition(camerax,cameray)
endif
set counter = counter + 1
endloop
return output
endfunction
function AMHS_ReplayEngine takes nothing returns nothing
call EnableUserControl(false)
call TriggerSleepAction(.0)
set InGame = IsInGame()
call EnableUserControl(true)
endfunction
» WarCraft 3 / аналог перста смерти
» WarCraft 3 / аналог перста смерти
» WarCraft 3 / Юниты игрока в области мертвы
Примитив же? Разве нет?
» WarCraft 3 / И снова о GetAbilityCD и многострадальной Психопомпе
Так же зачем брать кд абилки каждый раз, это не шибко быстрая функция, лучше запиши её результат в переменную.
Фильтр удалять ненужно, он не утекает, 1 и тот же boolexpr можно использовать многократно для разных целей.
Так же отсеиваем клонов.
DracoL1ch, у тебя же у самого была проблема с GetTriggerEventId() С возвращением.
» WarCraft 3 / И снова о GetAbilityCD и многострадальной Психопомпе
Ред. quq_CCCP
» WarCraft 3 / И снова о GetAbilityCD и многострадальной Психопомпе
» WarCraft 3 / Аура ХП-регена (лайфсорс)
Юзай ауру смерти ("Unholy aura") или еще что, но не ауры фонтанов и лечащего варда, там ничего низя изменить, да и бафф там висит случайные 2-4 сек.
» WarCraft 3 / Как сделать неепически сложный спелл?
» WarCraft 3 / Эмпатия для врагов
» WarCraft 3 / Эмпатия для врагов
» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я
» WarCraft 3 / Как сделать возрождение не-героя как у героя?
Зачем тебе понадобилось воскрешать не героев, проще сделать из героя и не мучится, отображение опыта, сообщения о гибели и прочие "геройские" фишки можно отключать.
» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я
» WarCraft 3 / Невыделяемый юнит
» WarCraft 3 / Как сделать абилку с абилками внутри?
Вот одна ссылка
Остальное ищи сам, наработок с этими книгами было море.
» WarCraft 3 / Эмпатия для врагов
» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я
» WarCraft 3 / Эмпатия для врагов
Отдается молния которая есть визуальный эффект, молнию двигает отдельный таймер.
При касте создается триггер, в который добавляется события что Юнит цель умер, Юнит цель получил урон а так же цель записывается в группу, ( для всех юнитов которых задела молния), условие триггера если событие на который сработал триггер = получение урона то проверить что урон выше 0 и меньше 6000 ( проверка корректности урона, ибо акс добивает 10 миллионов физ урона) , иначе вернуть true.
Далее в действии триггера проверяем умер ли Юнит, истекло ли время или Юнит получил урон, если Юнит умер удаляем его из группы и изданием с него визуальный эффект, если время вышло то удаляем визуальные эффекты на всех юнитах в группе и утилизируем триггер. Если цель получила урон, цель в группе, то рассчитываем сколько сколько урона нужно распределить по остальным Юнита в группе, исключаем из группы того кто получил урон, с остальными в группе проделываем действия: смотрим сколько у Юнита хп, больше урона - снижаем хп на кол во урона. Иначе наносим 10 миллионов урона от лица применившего заклинание.
Все данные прикрепляются к триггеру с помощью хештаблицы. Триггеру так же добавляется событие - время истекло, чтобы завершить эффект спелла по истечению времени.
» WarCraft 3 / Эмпатия для врагов
» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я
Нужно тестить в муи, судя по тому что похожий антихак засунули в доту ниче не дисинхало и ниче не делало вред, правда читеры очень быстро научились обходить прозрачность юнитов и всякие туманы, затеняющие карту...
В доте вроде юзается какая то фишка с кинематиком, хз в чем различие киниматике в игре и в реплее?
Код лень колупать...
» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я
Смотри код внимательнее
» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я
» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я
На афкашеров пофигу, что им лишнее что то показалось, чаще всего такие вовсе не приходят или ливают.
Ред. quq_CCCP
» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я
Еще есть возможность проверки на ретурн баге, но я не знаю в каком направлении копать, мб кто колупал игру знает где посмотреть что игра реплей.
» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я