21

» WarCraft 3 / Аура критической атаки

Если не лень и нетрудно, то можешь забрать прямо из игры.
Там тебе придется скачать архив 3 гигибайта, открыть опенсорс или .j файл и найти нужный код в папке Indigene (CriticalAura вроде триг называется), но там уже все готовенькое, только способности имеющиеся скопировать (криты и спеллбуки и ауру) и их равкоды при необходимости поменять. Не идеальный код, но производительный и сразу действует. А может не только для этого пригодиться, в архиве много еще чего вкусного для вара и не только, втч опенсорсов как минимум не самых худших заклинаний =)
Моё дело предложить, короче, имхо в 2017 три гига много кому утянуть не сложнее, чем на улицу до магазина сбегать.
Ссылка сейчас умрёт, новая тут будет сегодня
Вот, короче
21

» WarCraft 3 / Почему фатал?

Дошло, в чем еще могла быть проблема в том варианте кода.
Автосборка вещей происходит следующим образом. Есть вещь, есть активка-спеллбук со списком вещей и их ценой в золоте за улучшение базовой вещи (типа шмотки на +X к силе) в любую покруче (типа тех же дотовских барабанов).
При юзании активки, если золота достаточно, оно тратится, вещь исчезает и появляется другая (кстати, эту систему практически все хвалили, в совокупности с перезакупом очень удобно).
Так вот прикол в следующем... когда юзается одна из способностей спеллбука в предмете (а именно тогда фаталило), Aether Lens пытается посчитать ее параметры, ориентируясь на применившего героя. Но у героя-то эта способность пропадает вместе с предметом - предмет превращается в другой. Может, тут что-то и глючило.
Ну ладно, новый вариант кода еще посмотрим.
///////////
Added: пофлужу немного - четвертая игра подряд с линзой с новым кодом, 20 минут (для катки с ботами в ускоренном режиме это много), фатала нет. Ну см. выше.
21

» WarCraft 3 / JNGP не запоминает war3map.j, отредактированный через Блокнот?

Спасибо, в принципе, такого ответа достаточно. Значит, меня не приглюкнуло. Ну ок, буду иметь в виду.
21

» WarCraft 3 / Почему фатал?

Но сами-то по себе все функции мной ранее юзались и фатала ВО ВРЕМЯ игры НЕ вызывали.
Вероятно, несуществующая память пытается считаться все-таки из-за неправильного их использования при несуществующей точке.
Короче, инфа не сотка, но три игры подряд с линзой в последнем варианте ее кода по ссылке - фатала во время игры не было (но в прошлой версии он вроде как раз на третьей игре и словился, так что еще не факт, но все-таки...) В общем, за***ло, уже сегодня отдыхать планировалось (так вот отдых и начался... вместо отдыха фатал и снова лезть фиксить), ща еще каточку в хотс сыграю и все, наверное, будет вечером-ночью перезаписано и залито, если что, апну и эту тему, как и тему с Психопомпой (но там-то не так страшно), если никто не сможет помочь - буду дальше экспериментировать самостоятельно.
Что лучше юзать новый мемхак - уже ясно.
21

» WarCraft 3 / Эфирная Линза

Принятый ответ
Код выше имеет вероятность вызвать фатал (от драколича инфа, что из-за чтения памяти по несуществующему адресу, я пока отталкиваюсь от того, что из-за несуществующей точки мб втч).
Уже был промежуточный вариант номер 2, он фатал вызвал сразу после сборки линзы, что подтверждает отчасти моё мнение...
Сейчас тестирую этот. По крайней мере линза с ним собралась уже без фатала.
Новый тест код линзы (ща главное, чтобы работал)
ЭФИРНАЯ ЛИНЗА
function AetherLens_Actions takes nothing returns nothing
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6, p, p2
local unit u5 = GetTriggerUnit()
local unit u6 = GetSpellTargetUnit()
local integer a = GetUnitAbility(u5,GetSpellAbilityId())
local location p = GetUnitLoc(u5)
local location p2
local integer i = 0
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
ЭФФЕКТЫ, ОБСЧЕТ И ДОБАВКА РЕНДЖА
if (u6 != null) then
set p2 = GetUnitLoc(u6)
else
if GetSpellTargetLoc() != null then
set p2 = GetSpellTargetLoc()
endif
endif
if p2 != null then
if ( UnitHasItemOfTypeBJ(GetTriggerUnit(), 'I01O') == true ) then
if DistanceBetweenPoints(p,p2) > 200 then
call SetUnitState(u5, UNIT_STATE_MANA, GetUnitState(u5, UNIT_STATE_MANA) + DistanceBetweenPoints(p,p2) * 0.04)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIma\\AImaTarget.mdl",u5,"chest"))
if GetAbilityDataHeroRng(a, i) > 200 and GetAbilityDataHeroRng(a, i) < 1000 and (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then
set i = GetAbilityMaxLevel(GetSpellAbilityId()) + 1
loop
exitwhen i < 1
set i = i-1
call SetAbilityDataHeroRng(a,i,GetAbilityDataHeroRng(a, i) + 50)
endloop
endif
endif
endif
call RemoveLocation (p2)
endif
ЭФФЕКТЫ, ОБСЧЕТ И ДОБАВКА РЕНДЖА - ЗАКРЫТО.
call RemoveLocation (p)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6, p, p2
set u5 = null
set u6 = null
set p = null
set p2 = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
===========================================================================
function InitTrig_AetherLens takes nothing returns nothing
local trigger AetherLens = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( AetherLens, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddAction( AetherLens, function AetherLens_Actions )
set AetherLens = null
endfunction
ЭФИРНАЯ ЛИНЗА - ЗАКРЫТО.
Если что: в первичном коде не было вообще предусмотрено, что точки p2 может не существовать и что в таком случае делать.
21

» WarCraft 3 / Почему фатал?

То есть все функции с гитхаба неочень и нужно с нового мемхака в теме забирать? Там эти проверки уже встроенные и/или не нужные?
А то я тут что-то еще на точку грешу, что неправильно может определяться. Когда писался код, отталкивалось от того, что если спелл без указания цели, то GetSpellTargetLoc() - это точка кастера. Теперь уже сомневаюсь и кажется, что в таком случае точки вообще нет и начинается черт знает что...
В любом случае ведь все эти функции юзались уже в др. местах, а фаталов не вызывали, фатал был до этого только после игр, а не во время, уже новая вчера залитая версия удалена, ща вот Линзу мучаю.
Если что, тема вот прямо связанная
Это из-за Линзы 99.9%, т. к. все игры происходило практически одно и то же перед фаталом.
21

» WarCraft 3 / Почему фатал?

Что такое, почему ничего не прикрепляется.
Ладно, вроде вот
Файл.
Пока переписываю самостоятельно, там все равно ифзенэлсы косые были под завершение кодинга на усталую голову. Короче, вынесу замер дистанции в верхний ифзенэлс и еще выше наличие предмета, если там будет меньше нужного, то все остальное просто не должно будет проверяться и делаться, а при юзании автосборки из спеллбука дистанция по определению 0... так что вроде должно все исправиться.
Но если у кого-то есть комменты, пишите, причина фатала конкретно интересует все равно.
Загруженные файлы
21

» WarCraft 3 / И снова о GetAbilityCD и многострадальной Психопомпе

JyHgle, когда ты по-русски писать научишься.
Вбрасываю в таком виде, в каком силы есть вбросить и желание после всего кодинга и тестов, см. выше. Если модеры вставят кат, не побив вложенный файл - спасибо.
21

» WarCraft 3 / И снова о GetAbilityCD и многострадальной Психопомпе

Все равно продолжает фаталить, причина та же?
Одно радует, что Психопомпа все равно все улучшается, хотя еще ни с одним героем за всю историю существования игры столько мороки не было, ну, пока фатал будет фирменной фичей =), пост-игры он не так уж мешает, но все же лучше бы без него... war3map.j-шка почти та же самая в плане интересующих функций, выкладываю только все последние связанные с Психопомпой функции, ульт вообще переделан.
Сорри, что без ката, все никак не войдет в автокаст, как тут этот кат делать.
раскрыть
function PerceptionEffect takes nothing returns nothing
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
local unit u5
local group herounits = GetUnitsInRectAll(GetPlayableMapRect())
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО

if ( GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()) >= 1 ) and (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then

//ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ АТАКУ С ШАНСОМ

loop 
set u5=FirstOfGroup(herounits)
exitwhen u5==null
call GroupRemoveUnit(herounits,u5)
if ( GetUnitAbilityLevelSwapped('A27T', u5) >= 1 ) then
if (GetRandomInt(1,5) == 1) then

call DestroyEffect(AddSpecialEffectTarget("Psychopomp4.mdx", u5, "origin"))

call SetUnitBaseDamage ( u5, ( GetUnitBaseDamage(u5) + GetUnitAbilityLevelSwapped('A27T',u5) ) )

else
endif

else
endif
endloop


//ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ АТАКУ С ШАНСОМ - ЗАКРЫТО.

else

endif

call DestroyGroup (herounits)

//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
set u5 = null
set herounits = null
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction


function DelicacyEffect takes nothing returns nothing
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
local unit u5
local group herounits = GetUnitsInRectAll(GetPlayableMapRect())
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО

if ( GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()) >= 1 ) and (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then

//ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ МАНУ

loop 
set u5=FirstOfGroup(herounits)
exitwhen u5==null
call GroupRemoveUnit(herounits,u5)
if ( GetUnitAbilityLevelSwapped('A27S', u5) >= 1 ) then



call SetUnitState(u5, UNIT_STATE_MANA, GetUnitState(u5, UNIT_STATE_MANA) + 4 * GetUnitAbilityLevelSwapped('A27S',u5))

else
endif
endloop

//ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ МАНУ - ЗАКРЫТО.

else

endif

call DestroyGroup (herounits)

//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
set u5 = null
set herounits = null
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction


function BendingEffect takes nothing returns nothing

local real percent = 1.00
local real percent2 = 0.00
local integer i = GetAbilityMaxLevel(GetSpellAbilityId()) + 1
local integer percentchange = 0

if ( GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()) >= 1 ) and (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then


//УВЕЛИЧЕНИЕ НА 1%
if UnitHasBuffBJ(GetTriggerUnit(),'B0H8') == true  then
set percent = 1.01
endif
//НА 1% - ЗАКРЫТО.

//УВЕЛИЧЕНИЕ НА 2%
if UnitHasBuffBJ(GetTriggerUnit(),'B0H9') == true  then
set percent = 1.02
endif
//НА 2% - ЗАКРЫТО.

//УВЕЛИЧЕНИЕ НА 3%
if UnitHasBuffBJ(GetTriggerUnit(),'B0HA') == true  then
set percent = 1.03
endif
//НА 3% - ЗАКРЫТО.

//УВЕЛИЧЕНИЕ НА 4%
if UnitHasBuffBJ(GetTriggerUnit(),'B0HB') == true  then
set percent = 1.04
endif
//НА 4% - ЗАКРЫТО.

//УВЕЛИЧЕНИЕ НА 5%
if UnitHasBuffBJ(GetTriggerUnit(),'B0HC') == true  then
set percent = 1.05
endif
//НА 5% - ЗАКРЫТО.

//ТАЛАНТ СИЛЬНОЕ ИСКРИВЛЕНИЕ
set i = 0
set percent = percent - 1
loop
set i = i + 1
exitwhen i > 12
if ( GetUnitAbilityLevelSwapped('A281', udg_Circle[i]) == 2 ) then
set percent = percent * 2
set i = 12
endif
endloop
set percent = percent + 1
//ТАЛАНТ СИЛЬНОЕ ИСКРИВЛЕНИЕ - ЗАКРЫТО.

if (percent > 1.00) then

   call AddSpecialEffectTargetUnitBJ( "chest", GetTriggerUnit(), "Psychopomp2.mdl" )
   call ConditionalTriggerExecute( gg_trg_destroyspeceffect )


loop
exitwhen i < 1
set i = i-1



//ОКРУГЛЕНИЕ ДО СОТЫХ (ИНАЧЕ МОГУТ ЗАПИСАТЬСЯ ДОП. ЦИФРЫ НЕ В ТЕ ЯЧЕЙКИ)


loop
exitwhen i < 1
set i=i - 1
set percent2 = GetAbilityCD(GetSpellAbilityId(), i) * percent
set percent2 = percent2 * 100
set percentchange = R2I(percent2)
set percent2 = I2R(percentchange)
set percent2 = percent2 * 0.01
call SetAbilityCD(GetSpellAbilityId() , i , percent2)
endloop


//ОКРУГЛЕНИЕ ДО СОТЫХ - ЗАКРЫТО.


endloop

else
endif


else
endif



endfunction


function PerceptionRefresh takes nothing returns nothing
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t12, t13, t14, u5, u6, heroadded, heroaction, herounits
local timer t12 = GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash,GetHandleId(t12),2)
local unit u6
local trigger heroadded=LoadTriggerHandle(udg_Hash,GetHandleId(t12),20)
local triggeraction heroaction=LoadTriggerActionHandle(udg_Hash,GetHandleId(t12),21)
local group herounits
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО

//Если героя нет, то разрушить таймер, чтобы не крутился и не жрал ресурсы.
if (u5 == null) then
call PauseTimer(t12)
call DestroyTimer(t12)
call FlushChildHashtable(udg_Hash,GetHandleId(t12))
call TriggerRemoveAction(heroadded,heroaction)
call DestroyTrigger(heroadded)
else

call TriggerRemoveAction(heroadded,heroaction)
call DestroyTrigger(heroadded)
set heroadded=CreateTrigger()
set heroaction = TriggerAddAction(heroadded,function PerceptionEffect)

set herounits  = GetUnitsInRectAll(GetPlayableMapRect())
  
loop 
set u6=FirstOfGroup(herounits)
exitwhen u6==null
call GroupRemoveUnit(herounits,u6)
if ( GetUnitAbilityLevelSwapped('Avul', u6) != 1 ) and ( IsUnitAliveBJ(u6) == true ) and ( IsUnitType(u6, UNIT_TYPE_HERO) == true )  then
call TriggerRegisterUnitEvent(heroadded, u6, EVENT_UNIT_SPELL_EFFECT)
else
endif
endloop
call DestroyGroup (herounits)

call SaveTriggerHandle(udg_Hash,GetHandleId(t12),20,heroadded)
call SaveTriggerActionHandle(udg_Hash,GetHandleId(t12),21,heroaction)
endif
    
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t12, t13, t14, u5, u6, heroadded, heroaction, herounits
set t12 = null
set u5 = null
set u6 = null
set heroaction = null
set heroadded = null
set herounits = null
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction



function DelicacyRefresh takes nothing returns nothing
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t11, u5, u6, heroadded, heroaction, herounits
local timer t11 = GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash,GetHandleId(t11),2)
local unit u6
local trigger heroadded=LoadTriggerHandle(udg_Hash,GetHandleId(t11),20)
local triggeraction heroaction=LoadTriggerActionHandle(udg_Hash,GetHandleId(t11),21)
local group herounits
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО

//Если героя нет, то разрушить таймер, чтобы не крутился и не жрал ресурсы.
if (u5 == null) then
call PauseTimer(t11)
call DestroyTimer(t11)
call FlushChildHashtable(udg_Hash,GetHandleId(t11))
call TriggerRemoveAction(heroadded,heroaction)
call DestroyTrigger(heroadded)
else

call TriggerRemoveAction(heroadded,heroaction)
call DestroyTrigger(heroadded)
set heroadded=CreateTrigger()
set heroaction = TriggerAddAction(heroadded,function DelicacyEffect)

set herounits  = GetUnitsInRectAll(GetPlayableMapRect())
  
loop 
set u6=FirstOfGroup(herounits)
exitwhen u6==null
call GroupRemoveUnit(herounits,u6)
if ( GetUnitAbilityLevelSwapped('Avul', u6) != 1 ) and ( IsUnitAliveBJ(u6) == true ) and ( IsUnitType(u6, UNIT_TYPE_HERO) == true )  then
call TriggerRegisterUnitEvent(heroadded, u6, EVENT_UNIT_SPELL_EFFECT)
else
endif
endloop
call DestroyGroup (herounits)

call SaveTriggerHandle(udg_Hash,GetHandleId(t11),20,heroadded)
call SaveTriggerActionHandle(udg_Hash,GetHandleId(t11),21,heroaction)
endif
    
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t11, u5, u6, heroadded, heroaction, herounits
set t11 = null
set u5 = null
set u6 = null
set heroaction = null
set heroadded = null
set herounits = null
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction



function BendingRefresh takes nothing returns nothing
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t10, u5, u6, heroadded, heroaction, herounits
local timer t10 = GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash,GetHandleId(t10),2)
local unit u6
local trigger heroadded=LoadTriggerHandle(udg_Hash,GetHandleId(t10),20)
local triggeraction heroaction=LoadTriggerActionHandle(udg_Hash,GetHandleId(t10),21)
local group herounits
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО

//Если героя нет, то разрушить таймер, чтобы не крутился и не жрал ресурсы.
if (u5 == null) then
call PauseTimer(t10)
call DestroyTimer(t10)
call FlushChildHashtable(udg_Hash,GetHandleId(t10))
call TriggerRemoveAction(heroadded,heroaction)
call DestroyTrigger(heroadded)
else

call TriggerRemoveAction(heroadded,heroaction)
call DestroyTrigger(heroadded)
set heroadded=CreateTrigger()
set heroaction = TriggerAddAction(heroadded,function BendingEffect)

set herounits  = GetUnitsInRectAll(GetPlayableMapRect())
  
loop 
set u6=FirstOfGroup(herounits)
exitwhen u6==null
call GroupRemoveUnit(herounits,u6)
if ( GetUnitAbilityLevelSwapped('Avul', u6) != 1 ) and ( IsUnitAliveBJ(u6) == true ) and ( IsUnitType(u6, UNIT_TYPE_HERO) == true )  then
call TriggerRegisterUnitEvent(heroadded, u6, EVENT_UNIT_SPELL_EFFECT)
else
endif
endloop
call DestroyGroup (herounits)

call SaveTriggerHandle(udg_Hash,GetHandleId(t10),20,heroadded)
call SaveTriggerActionHandle(udg_Hash,GetHandleId(t10),21,heroaction)
endif
    
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t10, u5, u6, heroadded, heroaction, herounits
set t10 = null
set u5 = null
set u6 = null
set heroaction = null
set heroadded = null
set herounits = null
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction

function MadBreathParametersChange takes nothing returns nothing
local integer i = 6
local real newcd = GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()))
if (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then
//ЗАДАЕМ ПЕРЕЗАРЯДКУ И МАНАКОСТ БЕЗУМНОГО ДЫХАНИЯ, УРОН УЖЕ ОТ НИХ ПОТОМ
loop
exitwhen i < 1
set i = i-1
call SetAbilityCD ('A27Q', i, newcd)
call SetAbilityManaCost('A27Q',i,R2I(newcd) * (2 + i))
endloop
//ЗАДАЕМ ПЕРЕЗАРЯДКУ И МАНАКОСТ БЕЗУМНОГО ДЫХАНИЯ, УРОН УЖЕ ОТ НИХ ПОТОМ - ЗАКРЫТО.
else
endif
endfunction

function MadBreath takes nothing returns nothing
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: p, p2, u5, u6, enemies
    local location p
    local location p2
    local unit u5 = GetTriggerUnit()
    local unit u6
    local group enemies = CreateGroup()
    local real damage = R2I( GetAbilityCD('A27Q',GetUnitAbilityLevelSwapped('A27Q',u5)) * (2 + GetUnitAbilityLevelSwapped('A27Q',u5)) )
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО

if ( GetSpellAbilityId() == 'A27Q' ) then

set p = GetUnitLoc(u5)
set p2 = PolarProjectionBJ(p, 200.00, GetUnitFacing(GetTriggerUnit()))

    call AddSpecialEffectTargetUnitBJ( "overhead", u5, "Psychopomp1.mdl" )
    call ConditionalTriggerExecute( gg_trg_destroyspeceffect )
    call AddSpecialEffectTargetUnitBJ( "origin", u5, "Psychopomp1.mdl" )
    call ConditionalTriggerExecute( gg_trg_destroyspeceffect ) 

set enemies = GetUnitsInRangeOfLocAll(625.00,p2)

//ТАЛАНТ ГЛУБОКОДЫШАЩЕЕ
if ( GetUnitAbilityLevelSwapped('A280', udg_Circle[GetConvertedPlayerId(GetOwningPlayer(u5))]) == 2 ) and (damage < 100) then
set damage = 100
endif
//ТАЛАНТ ГЛУБОКОДЫШАЩЕЕ - ЗАКРЫТО.

//ЦВЕТОТЕГ РАЗМЕРА 14, ОКРАС СМ. ПЕЙНТ
call CreateTextTagUnitBJ( R2S(damage), u5, 0, 14.00, 80.00, 80.00, 80.00, 0 )
call ConditionalTriggerExecute( gg_trg_floatingtext )
//ЦВЕТОТЕГ РАЗМЕРА 14 - ЗАКРЫТО.


loop

//УРОН С ТЕКСТТАГОМ
set u6=FirstOfGroup(enemies)
exitwhen u6==null
call GroupRemoveUnit(enemies,u6)
if ( GetUnitAbilityLevelSwapped('Avul', u6) != 1 ) and ( IsUnitAliveBJ(u6) == true ) and ( IsUnitEnemy(u6,GetOwningPlayer(u5))==true ) then
call UnitDamageTargetBJ( u5, u6, damage, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
endif
endloop

   call RemoveLocation (p)
   call RemoveLocation (p2)
//УРОН С ТЕКСТТАГОМ - ЗАКРЫТО.
   
else
endif


 call DestroyGroup (enemies)

//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: p, p2, u5, u6, enemies
   set p = null
   set p2 = null
   set u5 = null
   set u6 = null
   set enemies = null
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
Загруженные файлы
замечание от Uber: Учимся использовать каты
21

» WarCraft 3 / Эфирная Линза

Всё не привыкну нормально воспринимать координаты.
Если хочешь, перепиши с полным сохранением функциональности без точек - спасибо скажу... Хотя мб и самостоятельно позже справлюсь, тут нетрудно, просто ща мозги спят уже.
21

» WarCraft 3 / Нужна модель? - Вам сюда!

Versus6, Мимироны вот. www.hiveworkshop.com/search/5622289/?q=mimiron&t=resource&am...
Это не модели, а скины. Но можно достать модель ребёнка из варкрафтовского MPQ, переименовать ее, переименовать текстуры и пути к ним через Model Editor и MdlVis и использовать независимо.
Если вдруг сам не можешь, то мб я это тебе позже сделаю, но дела там реально максимум минут на 20-30 даже для человека, который не соображает.
21

» WarCraft 3 / команда -switch

AntiMage, у тебя в голове каша, свап обменивает героев и оставляет игроков на своих местах, свитч обменивает игроков, сохраняя у них имеющихся героев.
21

» WarCraft 3 / Пжлст ХЕЛП!

На хайве вроде был эффект блейдшторма, можно тупо прикрепить к кому угодно и разрушить по завершению анимации.
Более-менее подойдет, а уж анимки атаки или чего-нить у своего быка проиграешь.
21

» WarCraft 3 / Конкурс карт WC3 на 50 000 рублей!

Ничего себе тут веселуха, просто ради интереса вопросы и заметки:
  • у кого-то на сайте пара посещений в день, у кого-то дофига просмотров на каналах и он так или иначе организовывает конкурсы на деньги, а честь дворянина именно у первого;
  • если бы он сидел за компом не в трусах, а без трусов, что-то бы поменялось?
  • сколько карт-то примерно ожидается?
PS Не участвую, просто ради интереса слежу за сабжем.
21

» WarCraft 3 / Пжлст ХЕЛП!

Может, у хотсовского быка с гитарой анимки подходящие есть? Вот с андерграунда модель.
А можешь сразу в хотс и зайти этим быком поиграть, даже делать не придется, он как раз то, что тебе надо, уже делает.
РОК-Н-РОЛЛ МЕРТВ А Я-А-А-А ЕЩЕ НЕТ!!!
Загруженные файлы
21

» WarCraft 3 / Что за ошибка и как с ней бороться?

На всякий случай ликбез для далее читающих: раньше скрина не было.
Ну по скрину типичный варкрафтовский фатал, хз, говорит, память прочитать не может, много какие косяки в триггерах могут такое вызывать, смотри, че там у тебя в кампании такое страшное.
21

» WarCraft 3 / Что за ошибка и как с ней бороться?

Не знаю, насколько это адекватно, но на мои усталые за день собирающиеся спать мозги вопрос воздействовал так, что поверг в дикий хохот.
////////////
А, да, письмо в газету вспомнилось, в рубрику вопросов и ответов:
"Привет! Вот скажите, пожалуйста, что мне делать в моей ситуации? Спасибо огромное!"
21

» WarCraft 3 / Иконки на заказ

Meddin, все открывается. wow.zamimg.com/images/wow/icons/large/inv_jewelry_trinketpvp_01....
Можно скопировать адрес изображения или его само и спокойно делать иконку, если это нужно.
21

» WarCraft 3 / дальность атаки

Viktor19, ты упорот, какой мемхак, это не код, это РО.
По последней ссылке бота лучший ответ для ТСа уже найден.
21

» Блог им. Nosferoh / Здесь обсуждать модели

Nosferoh, если можно, то мне в лс или сюда бы буквально сейчас это и это.
Потому что нужно бы буквально сейчас.
21

» WarCraft 3 / Иконки на заказ

Интересное задание.
Нужна иконка гремлина из HoMM 3.5. Вот этого:
Если хотите - прогуглите, вменяемого варианта, чтобы сразу обрезать и делать иконку, лично я не вижу (гремлин Гизмо и т. п. на фиг здесь не нужны, это не оно). Можете попробовать прямо ингейм скрин сделать с их уже нанятых, но чтобы смотрелось годно и не мутно.
Вкрайний самостоятельно потом поставлю Героев и сделаю. Если кто сделает - спс.
Вот эта картинка НЕ очень нравится как вариант для иконки img0.joyreactor.cc/pics/post/full/Heroes-of-might-and-magic-III-... , ее не надо
Больше вообще ничего тут не вижу подходящего yandex.ru/images/search?text=гремлин%20герои%203
Это тоже не очень www.google.ru/search?q=heroes 3 gremlin&newwindow=1&sour...
Это просто противно выглядит s3-eu-west-1.amazonaws.com/elfwood--artwork/9b878ed0-2455-11e4-9...
Ладно, короче, если кто хочет и не трудно и не мутно получится - обрежьте ингейм, если нет - забудьте про это сообщение
www.wog.acidcave.net/sphinx/7b.gif О, как-то прозевалось. Вкрай сгодится, думаю, это обрезать.
Короче, считайте, что заказ выполнен самостоятельно, спасибо за внимание. Только прошу сообщение НЕ тереть, пусть тут ссылка будет.
21

» WarCraft 3 / Wc3 Map Optimizer 5.0 Rus

Daniil18, юзаю мемхак, проблем после протекта не замечаю. Правда, пока не последнюю версию мемхака, а что-то куда ближе к первой (первичная основа + отдельные функции из гитхаба и местных тредов).