21

» WarCraft 3 / Создание уникального баффа/дебаффа

quq_CCCP,
если абилку на основе торнадо только с целями сам воин удалить и сразу убрать, ее бафф висит ровно 4 сек. в итоге
это факт и проверено
21

» WarCraft 3 / Создание уникального баффа/дебаффа

STALKERfree, нет
только дебаффы у них в РО разные надо сделать
кстати если ауру торнадо навесить и сразу убрать то дебафф висит ровно 4 секунды после удаления
оч удобно делать спеллы со временем действия 4 сек.
21

» WarCraft 3 / Battle for Souls 3.2b

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

» WarCraft 3 / Battle for Souls 3.2b

//////
//////////
***
Битва за Души 1.61
-Новый герой: Боб, Шеллшок! (Тео, Гэри)
-Новые альт-аватары
Боб, Шеллшок - Бери-Бери, Мори Шеллшок
Боб, Шеллшок - Блюми, Водяной Шеллшок (секретный)
Боб, Шеллшок - Пустунчик, Броненосец (секретный)
Боб, Шеллшок - Чайа, Кристальный Броненосец (секретный)
Кумбхакарна, Спящий Гигант - Уги-Буги, Сонный Мешок (секретный)
Кумбхакарна, Спящий Гигант - Буги-Вуги, Постельный Сонный Мешок (секретный)
Джегг, Червячок - Фасик, Яростный Гарбагемон (секретный)
Джегг, Червячок - Масик, Гарбагемон (секретный)
Мокуджин, Дуболом - Пиноккио, Пиночимон (секретный)
Мокуджин, Дуболом - Хиноккио, Стальной Пиночимон (секретный)
Анубис, Бог Сумрака - Анубисмон, Дигимон Бог Сумрака (секретный)
Анубис, Бог Сумрака - Чинубис, Истощённый Бог Сумрака (секретный)
-Новые Таланты!
Шеллшок
Боевой Панцирь: Применение способности "Панцирь и Шок" наносит ещё дополнительно 50 магического урона. ЦЕНА: 400 золота, нельзя будет выучить "Шлифовка Панциря".
Шлифовка Панциря: Применение способности "Панцирь и Шок" навсегда добавляет 0.3 Защиты, если она больше 0, или отнимает, если меньше. ЦЕНА: 400 золота, нельзя будет выучить "Боевой Панцирь".
-Святыни: теперь активная способность для красоты в описании подкрашена розовым цветом
-Ученица Богов: изменён визуальный эффект первой способности
-Предположительно исправлен редкий баг с Полым, иногда вызывающий фатальную ошибку при срабатывании его ульты
-Предположительно исправлен редкий баг, что иногда случайным образом предмет от AI мог на халяву появиться у игрока-человека (к счастью, не наоборот)
-Добавлены в Credits, спасибо за их материалы, Azure Phoenix
-Множество других мелких улучшений, исправлений и оптимизации
***
Battle for Souls 1.61
-New hero: Bob, Shellshock! (Theo, Gary)
-New alternate avatars
Bob, Shellshock - Beri-Beri, Mori Shellshock
Bob, Shellshock - Bluu, Water Shellshock (secret alternate avatar)
Bob, Shellshock - Zaedyus, Armadillo (secret alternate avatar)
Bob, Shellshock - Chaia, Crystal Armadillo (secret alternate avatar)
Kumhakarna, Sleeping Giant - Oogie-Boogie, Sleeping Bag (secret alternate avatar)
Kumhakarna, Sleeping Giant - Boogie-Woogie, Bed Sleeping Bag (secret alternate avatar)
Jegg, Worm - Fasik, Rage Garbagemon (secret alternate avatar)
Jegg, Worm - Masik, Garbagemon (secret alternate avatar)
Mokujin, Woodpiece - Pinocchio, Pinochimon (secret alternate avatar)
Mokujin, Woodpiece - Hinocchio, Steel Pinochimon (secret alternate avatar)
Anubis, God of Twilight - Anubismon, Digimon God of Twilight (secret alternate avatar)
Anubis, God of Twilight - Chinubis, Depleted God of Twilight (secret alternate avatar)
-New Talents!
-Pink color for Shrine ability
-Disciple of Gods: new visual effect for first ability
-Maybe fixed rare bug with Hollow
-Maybe fixed rare bug with free AI items for non-AI players (can be count as bonuses :D)
-Added new peoples to Credits
-Many other minor optimizations, fixes and changes
21

» WarCraft 3 / Замена текстуры модели прямо в игре

Бордер, xgm.guru/p/wc3/various_textures
Ищи через гугл "xgm.guru [то, что тебе надо]", это имхо удобнее местного поиска, да
Только имхо это все равно не оч:
  • многовато геморроя
  • способ подразумевает каст дамми абилки, а это опять же срабатывания всяких "юнит кастит абилку" и бла-бла-бла
  • ну и хотя мелочь - баг после сейва, он там описан
проще тупо несколько юнитов с разными текстурами сделать и смириться с кол-вом занимаемого места и/или необходимостью прелоада, зато всё будет шито-крыто
21

» Биржа взаимной помощи / Биржа взаимной помощи

Просьба с иконками
Так, простейшее: ищется создатель иконок (в крайнем случае офк делаю самостоятельно).
Суть: я объясняю, какие нужны 4-5 иконок и имена их файлов или даже сразу кидаю ссылки на готовые изображения, мне обрабатывают их через Button Manager и сдают набор иконок примерно такой:
BTNMusicMasterHero,
BTNMusicMaster1.blp,
BTNMusicMaster2.blp,
BTNMusicMaster3.blp,
BTNMusicMaster4.blp
и дисбтн к каждой.
Только одна небольшая особенность, очень легко запомнить: каждая иконка может быть активная, пассивная или автокастовая, я про это в задании напишу, какую где надо, но ее незатенённая версия в любом случае должна называться BTN (ренейм после баттон менеджера и всё).
Отплачусь идеями или несложными кусками кода, "дороже" бартером такая работа не стоит )
21

» WarCraft 3 / Не инициализируется функция в СЕРЕДИНЕ потока

nvc123, ок, спасибо большое
но уже нврн в след. раз
пока меня больше интересовало, может ли в потоке в СЕРЕДИНЕ что-то не выполниться, а дальше выполняться, если функция сама по себе исправна
ятп - нет и слава Богу
твой ответ жму как лучший
21

» WarCraft 3 / Не инициализируется функция в СЕРЕДИНЕ потока

после того как куски были перенесены в др. функцию все действует - это из mpq бэкапа
UMSWE
21

» WarCraft 3 / Не инициализируется функция в СЕРЕДИНЕ потока

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

» WarCraft 3 / Не инициализируется функция в СЕРЕДИНЕ потока

biridius, а, ну вот так хоть менее невероятно кажется
значит, ошибка всё-таки могла быть где-то в ифзенэлсах
да, именно в такой гуи глобалке именно это здание и было и именно через нее ремувилось и ни один триг не использовал
А текст успел бы появиться? Дело в том, что событие, где был этот поток - по-моему, map initialization
А так-то вообще же не может быть такого, чтобы в потоке в середине одна функция внезапно не вызывалась, а ниже нее вызывались?
Поток же всегда если принудительно завершается на какой-то функции, то ниже нее функции уже тоже должны не работать? А тут работали
вот крч код если интересно
код потока ничего не даст там просто перечень айнитов как в стартпосте и другие айниты айнитятся
только там древний гуи конверт но кто соображает разберется что проверять в первую очередь
ни один спелл не действовал так что где if then else смотреть - понятно
смотреть сюда
БОГ СУМРАКА
function Trig_GodofTwilightAll_Func001Func002Func001C takes nothing returns boolean
    if ( not ( GetLearnedSkillBJ() == 'A1N9' ) ) then
        return false
    endif
    if ( not ( GetUnitAbilityLevelSwapped('A1N9', GetTriggerUnit()) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_GodofTwilightAll_Func001Func002Func002C takes nothing returns boolean
    if ( not ( GetLearnedSkillBJ() == 'A1NB' ) ) then
        return false
    endif
    if ( not ( GetUnitAbilityLevelSwapped('A1NB', GetTriggerUnit()) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_GodofTwilightAll_Func001Func002Func003C takes nothing returns boolean
    if ( not ( GetLearnedSkillBJ() == 'A1NA' ) ) then
        return false
    endif
    if ( not ( GetUnitAbilityLevelSwapped('A1NA', GetTriggerUnit()) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_GodofTwilightAll_Func001Func002Func004C takes nothing returns boolean
    if ( not ( GetLearnedSkillBJ() == 'A1N8' ) ) then
        return false
    endif
    if ( not ( GetUnitAbilityLevelSwapped('A1N8', GetTriggerUnit()) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_GodofTwilightAll_Func001Func002C takes nothing returns boolean
    if ( Trig_GodofTwilightAll_Func001Func002Func001C() ) then
        return true
    endif
    if ( Trig_GodofTwilightAll_Func001Func002Func002C() ) then
        return true
    endif
    if ( Trig_GodofTwilightAll_Func001Func002Func003C() ) then
        return true
    endif
    if ( Trig_GodofTwilightAll_Func001Func002Func004C() ) then
        return true
    endif
    return false
endfunction

function Trig_GodofTwilightAll_Func001C takes nothing returns boolean
    if ( not ( IsUnitIllusionBJ(GetTriggerUnit()) == false ) ) then
        return false
    endif
    if ( not Trig_GodofTwilightAll_Func001Func002C() ) then
        return false
    endif
    return true
endfunction

function Trig_GodofTwilightAll_Conditions takes nothing returns boolean
    if ( not Trig_GodofTwilightAll_Func001C() ) then
        return false
    endif
    return true
endfunction

function ClutchingHandsMove takes nothing returns nothing
local timer t2= GetExpiredTimer()
local unit u6= LoadUnitHandle(udg_Hash, GetHandleId(t2), 1)
local unit u7= LoadUnitHandle(udg_Hash, GetHandleId(t2), 2)
local integer i= LoadInteger(udg_Hash, GetHandleId(t2), 3)
local location p= GetUnitLoc(u6)
local location p2= GetUnitLoc(u7)
local location p3

set i=i + 1
call SaveInteger(udg_Hash, GetHandleId(t2), 3, i)

if ( i < 25 ) then
call SetUnitFlyHeightBJ(u6, ( GetUnitFlyHeight(u6) + 3 ), 0.00)
call SetUnitFlyHeightBJ(u7, ( GetUnitFlyHeight(u7) + 3 ), 0.00)
else
call SetUnitFlyHeightBJ(u6, ( GetUnitFlyHeight(u6) - 3 ), 0.00)
call SetUnitFlyHeightBJ(u7, ( GetUnitFlyHeight(u7) - 3 ), 0.00)
endif

if ( i < 50 ) then

set p3=PolarProjectionBJ(p, ( DistanceBetweenPoints(p, p2) / 100.00 ), AngleBetweenPoints(p, p2))
if ( DistanceBetweenPoints(p, p2) < 800 ) then
call SetUnitPositionLoc(u6, p3)
endif
call RemoveLocation(p3)

set p3=PolarProjectionBJ(p2, ( DistanceBetweenPoints(p2, p) / 100.00 ), AngleBetweenPoints(p2, p))
if ( DistanceBetweenPoints(p2, p) < 800 ) then
call SetUnitPositionLoc(u7, p3)
endif
call RemoveLocation(p3)

else
call SetUnitFlyHeightBJ(u6, ( GetUnitDefaultFlyHeight(u6) ), 0.00)
call SetUnitFlyHeightBJ(u7, ( GetUnitDefaultFlyHeight(u7) ), 0.00)
call SetUnitPathing(u6, true)
call SetUnitPathing(u7, true)
call PauseTimer(t2)
call DestroyTimer(t2)
call FlushChildHashtable(udg_Hash, GetHandleId(t2))
endif

call RemoveLocation(p)
call RemoveLocation(p2)
call RemoveLocation(p3)

set t2=null
set u6=null
set u7=null
set p=null
set p2=null
set p3=null
endfunction

function ClutchingHandsTicks takes nothing returns nothing
local timer t= GetExpiredTimer()
local timer t2= CreateTimer()
local unit u5=LoadUnitHandle(udg_Hash, GetHandleId(t), 2)
local unit u6
local unit u7
local location p= GetUnitLoc(u5)
local group preaffected= CreateGroup()
local group affected= CreateGroup()
local integer i= 0

set preaffected=GetUnitsInRangeOfLocAll(350.00, p)

loop
set u6=FirstOfGroup(preaffected)
exitwhen u6 == null
call GroupRemoveUnit(preaffected, u6)
if ( ( IsUnitType(( u6 ), UNIT_TYPE_ANCIENT) != true ) and ( IsUnitDeadBJ(u6) == false ) and ( GetUnitAbilityLevelSwapped('Avul', u6) != 1 ) and ( IsUnitAliveBJ(u6) == true ) and ( IsUnitEnemy(u6, GetOwningPlayer(u5)) == true ) ) then
call GroupAddUnit(affected, u6)
else
endif
endloop

loop
set u6=GroupPickRandomUnit(affected)
call GroupRemoveUnit(affected, u6)
exitwhen u6 != null or CountUnitsInGroup(affected) == 0
endloop

loop
set u7=GroupPickRandomUnit(affected)
call GroupRemoveUnit(affected, u7)
exitwhen u7 != null or CountUnitsInGroup(affected) == 0
endloop

if ( u6 == null ) then
set u6=u5
endif

if ( u7 == null ) then
set u7=u5
endif


//В зависимости от количества найденных врагов делаем те или иные замуты

if ( u5 == u6 ) then

//Мы не нашли ни одного врага? Мы просто рушим таймер, ок.

call PauseTimer(t2)
call DestroyTimer(t2)
call FlushChildHashtable(udg_Hash, GetHandleId(t2))

else

//Тогда первый враг у нас точно есть, вот ему и ловить люлей:

call UnitAddAbilityBJ('A1N3', u6)
call UnitRemoveAbilityBJ('A1N3', u6)
call AddSpecialEffectTargetUnitBJ("origin", u6, "SoulAegis.mdx")
call ConditionalTriggerExecute(gg_trg_destroyspeceffect)
call UnitDamageTargetBJ(u5, u6, 40 * GetUnitAbilityLevelSwapped('A1NA', u5), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DIVINE)


if ( u5 == u7 ) then

//Если мы нашли только одного врага, суб-таймер на броски нам тоже не нужен.

call PauseTimer(t2)
call DestroyTimer(t2)
call FlushChildHashtable(udg_Hash, GetHandleId(t2))


else

//Раздаём и второму врагу плюшку

call UnitAddAbilityBJ('A1N3', u7)
call UnitRemoveAbilityBJ('A1N3', u7)
call AddSpecialEffectTargetUnitBJ("origin", u7, "SoulAegis.mdx")
call ConditionalTriggerExecute(gg_trg_destroyspeceffect)
call UnitDamageTargetBJ(u5, u7, 40 * GetUnitAbilityLevelSwapped('A1NA', u5), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DIVINE)

//Дарим голубчикам возможность летать
call UnitAddAbilityBJ('A1N5', u6)
call SetPlayerAbilityAvailableBJ(false, 'A1N5', GetOwningPlayer(u6))
call UnitAddAbilityBJ('A1N5', u7)
call SetPlayerAbilityAvailableBJ(false, 'A1N5', GetOwningPlayer(u7))
call SetUnitPathing(u6, false)
call SetUnitPathing(u7, false)

//А потом запускаем второй таймер

call SaveUnitHandle(udg_Hash, GetHandleId(t2), 1, u6)
call SaveUnitHandle(udg_Hash, GetHandleId(t2), 2, u7)
call SaveInteger(udg_Hash, GetHandleId(t2), 3, i)
call TimerStart(t2, 0.01, true, function ClutchingHandsMove)

endif


endif

//Действия с врагами закрыты


call RemoveLocation(p)
call DestroyGroup(preaffected)
call DestroyGroup(affected)

set t=null
set t2=null
set u5=null
set u6=null
set u7=null
set p=null
set preaffected=null
set affected=null
endfunction

function DiveInvisibilityEnd takes nothing returns nothing
local timer t2= GetExpiredTimer()
local unit u6= LoadUnitHandle(udg_Hash, GetHandleId(t2), 1)
local effect e2= LoadEffectHandle(udg_Hash, GetHandleId(t2), 9)
call UnitRemoveAbilityBJ('A1N4', u6)
call PauseTimer(t2)
call DestroyTimer(t2)
call FlushChildHashtable(udg_Hash, GetHandleId(t2))
call DestroyEffect(e2)
set t2=null
set e2=null
set u6=null
endfunction

function DiveDamage takes nothing returns nothing
call DisableTrigger(GetTriggeringTrigger())
if ( GetUnitAbilityLevelSwapped('A1N7', GetTriggerUnit()) == 0 ) and ( GetUnitAbilityLevelSwapped('A1N4', GetTriggerUnit()) == 0 ) and ( GetEventDamage() > 0 ) then
call UnitAddAbilityBJ('A1N7', GetTriggerUnit())
endif
call EnableTrigger(GetTriggeringTrigger())
endfunction

function DiveIntoTwilight2 takes nothing returns nothing
local timer t=GetExpiredTimer()
local timer t2= CreateTimer()
local unit u5=LoadUnitHandle(udg_Hash, GetHandleId(t), 2)
local unit u6=LoadUnitHandle(udg_Hash, GetHandleId(t), 1)
local effect e= LoadEffectHandle(udg_Hash, GetHandleId(t), 9)
local effect e2
local integer i=LoadInteger(udg_Hash, GetHandleId(t), 3)
local trigger divedamage= LoadTriggerHandle(udg_Hash, GetHandleId(t), 20)
local triggeraction divedamageaction= LoadTriggerActionHandle(udg_Hash, GetHandleId(t), 21)

set i=i + 1
call SaveInteger(udg_Hash, GetHandleId(t), 3, i)

//На ману.
if ( i < 600 ) then

//Вот тут-то всё, связанное с маркером. И, наверное, второй "дымный" эффект пусть на его время крепится.

if ( GetUnitAbilityLevelSwapped('A1N7', u6) == 1 ) then
call UnitRemoveAbilityBJ('A1N7', u6)
call UnitAddAbilityBJ('A1N4', u6)
call UnitMakeAbilityPermanent(u6, true, 'A1N4')
call UnitDamageTargetBJ(u5, u6, 50.00 * GetUnitAbilityLevelSwapped('A1N8', u5), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DIVINE)
call SetUnitState(u5, UNIT_STATE_LIFE, GetUnitState(u5, UNIT_STATE_LIFE) + 50.00 * GetUnitAbilityLevelSwapped('A1N8', u5))
call AddSpecialEffectTargetUnitBJ("origin", u6, "war3mapImported\\BlackCloudOfFog.mdx")
set e2=GetLastCreatedEffectBJ()
call SaveUnitHandle(udg_Hash, GetHandleId(t2), 1, u6)
call SaveEffectHandle(udg_Hash, GetHandleId(t2), 9, e2)
call TimerStart(t2, 2, false, function DiveInvisibilityEnd)
else
call PauseTimer(t2)
call DestroyTimer(t2)
call FlushChildHashtable(udg_Hash, GetHandleId(t2))
call DestroyEffect(e2)
endif

//Конец всего, связанного с маркером.

else
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash, GetHandleId(t))
call DestroyEffect(e)
call TriggerRemoveAction(divedamage, divedamageaction)
call DestroyTrigger(divedamage)
endif

set t=null
set t2=null
set u5=null
set u6=null
set e=null
set e2=null
set divedamage=null
set divedamageaction=null
endfunction

function DiveIntoTwilight takes nothing returns nothing
local timer t= CreateTimer()
local unit u5= GetTriggerUnit()
local unit u6= GetSpellTargetUnit()
local trigger divedamage= CreateTrigger()
local triggeraction divedamageaction
local effect e
local integer i= 0
if ( GetSpellAbilityId() == 'A1N8' ) then
call AddSpecialEffectTargetUnitBJ("origin", u6, "war3mapImported\\BlackCloudOfFog.mdx")
set e=GetLastCreatedEffectBJ()
set divedamageaction=TriggerAddAction(divedamage, function DiveDamage)
call TriggerRegisterUnitEvent(divedamage, u6, EVENT_UNIT_DAMAGED)
call SaveUnitHandle(udg_Hash, GetHandleId(t), 2, u5)
call SaveUnitHandle(udg_Hash, GetHandleId(t), 1, u6)
call SaveEffectHandle(udg_Hash, GetHandleId(t), 9, e)
call SaveTriggerHandle(udg_Hash, GetHandleId(t), 20, divedamage)
call SaveTriggerActionHandle(udg_Hash, GetHandleId(t), 21, divedamageaction)
call SaveInteger(udg_Hash, GetHandleId(t), 3, i)
call TimerStart(t, 0.01, true, function DiveIntoTwilight2)
else
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash, GetHandleId(t))
call DestroyEffect(e)
call TriggerRemoveAction(divedamage, divedamageaction)
call DestroyTrigger(divedamage)
endif
set t=null
set u5=null
set u6=null
set e=null
set divedamage=null
set divedamageaction=null
endfunction

function MentalNecrosis2 takes nothing returns nothing
local timer t=GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash, GetHandleId(t), 2)
local unit u6=LoadUnitHandle(udg_Hash, GetHandleId(t), 1)
local unit u7
local location p=GetUnitLoc(u6)
local group stgroup=GetUnitsInRangeOfLocAll(300.00, p)
local effect e= LoadEffectHandle(udg_Hash, GetHandleId(t), 9)
local integer i=LoadInteger(udg_Hash, GetHandleId(t), 3)
local real r=LoadReal(udg_Hash, GetHandleId(t), 7)
//r2 здесь - разница. Если она положительная, добавляем половину от разницы.
local real r2= r - GetUnitStateSwap(UNIT_STATE_MANA, u6)



set i=i + 1
call SaveInteger(udg_Hash, GetHandleId(t), 3, i)

//На дамаг.
if ( i > 99 ) and ( i < 101 ) or ( i > 199 ) and ( i < 201 ) or ( i > 299 ) and ( i < 301 ) or ( i > 399 ) and ( i < 401 ) or ( i > 499 ) and ( i < 501 ) then

loop
set u7=FirstOfGroup(stgroup)
exitwhen u7 == null
call GroupRemoveUnit(stgroup, u7)
if ( ( IsUnitType(( u7 ), UNIT_TYPE_ANCIENT) != true ) and ( GetUnitAbilityLevelSwapped('Avul', u7) != 1 ) and ( IsUnitAliveBJ(u7) == true ) ) then
call UnitDamageTargetBJ(u5, u7, 20.00 + 10.00 * GetUnitAbilityLevelSwapped('A1N9', u5), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC)
else
endif
endloop

endif

//На ману.
if ( i < 500 ) then
if ( R2I(GetUnitStateSwap(UNIT_STATE_MANA, u6)) < R2I(r) ) then
call SetUnitManaBJ(u6, ( GetUnitStateSwap(UNIT_STATE_MANA, u6) ) + ( r2 * 0.50 ))
set r=GetUnitStateSwap(UNIT_STATE_MANA, u6)
call SaveReal(udg_Hash, GetHandleId(t), 7, r)
endif
else
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash, GetHandleId(t))
call DestroyEffect(e)
endif

call RemoveLocation(p)
call DestroyGroup(stgroup)
set t=null
set u5=null
set u6=null
set u7=null
set p=null
set stgroup=null
set e=null
endfunction

function MentalNecrosis takes nothing returns nothing
local timer t= CreateTimer()
local unit u5= GetTriggerUnit()
local unit u6= GetSpellTargetUnit()
local effect e
local real r= GetUnitStateSwap(UNIT_STATE_MANA, u6)
local integer i= 0
if ( GetSpellAbilityId() == 'A1N9' ) then
call AddSpecialEffectTargetUnitBJ("origin", u6, "war3mapImported\\DarkHarvest.mdx")
set e=GetLastCreatedEffectBJ()
call SaveUnitHandle(udg_Hash, GetHandleId(t), 2, u5)
call SaveUnitHandle(udg_Hash, GetHandleId(t), 1, u6)
call SaveEffectHandle(udg_Hash, GetHandleId(t), 9, e)
call SaveInteger(udg_Hash, GetHandleId(t), 3, i)
call SaveReal(udg_Hash, GetHandleId(t), 7, r)
call TimerStart(t, 0.01, true, function MentalNecrosis2)
else
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash, GetHandleId(t))
call DestroyEffect(e)
endif
set t=null
set u5=null
set u6=null
set e=null
endfunction

function Woe takes nothing returns nothing
if ( GetSpellAbilityId() == 'A1NB' ) then
    call AddSpecialEffectTargetUnitBJ("origin", GetTriggerUnit(), "war3mapImported\\ShadowAssault.mdx")
    call ConditionalTriggerExecute(gg_trg_destroyspeceffect)
    call AddSpecialEffectTargetUnitBJ("origin", GetSpellTargetUnit(), "war3mapImported\\ShadowAssault.mdx")
    call ConditionalTriggerExecute(gg_trg_destroyspeceffect)
    call SetUnitLifeBJ(GetTriggerUnit(), ( GetUnitStateSwap(UNIT_STATE_LIFE, GetTriggerUnit()) + ( GetUnitStateSwap(UNIT_STATE_MANA, GetSpellTargetUnit()) * ( 0.20 * I2R(GetUnitAbilityLevelSwapped('A1NB', GetTriggerUnit())) ) ) ))
    call SetUnitManaBJ(GetSpellTargetUnit(), 0)
endif
endfunction

function AnubisSounds2 takes nothing returns nothing
local timer t= GetExpiredTimer()
local trigger sounds= LoadTriggerHandle(udg_Hash, GetHandleId(t), 10)
call EnableTrigger(sounds)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash, GetHandleId(t))
set sounds=null
set t=null
endfunction

function AnubisSounds takes nothing returns nothing
local timer t= CreateTimer()
local trigger sounds= GetTriggeringTrigger()
local integer i
if ( GetPlayerController(GetOwningPlayer(GetTriggerUnit())) == MAP_CONTROL_USER ) then
set i=GetRandomInt(1, 3)
if ( i == 1 ) then
call PlaySoundOnUnitBJ(gg_snd_Anubis1, 100, GetTriggerUnit())
endif
if ( i == 2 ) then
call PlaySoundOnUnitBJ(gg_snd_Anubis2, 100, GetTriggerUnit())
endif
if ( i == 3 ) then
call PlaySoundOnUnitBJ(gg_snd_Anubis3, 100, GetTriggerUnit())
endif
endif
call DisableTrigger(GetTriggeringTrigger())
call SaveTriggerHandle(udg_Hash, GetHandleId(t), 10, sounds)
call TimerStart(t, 2, false, function AnubisSounds2)
set sounds=null
set t=null
endfunction

function Trig_GodofTwilightAll_Actions takes nothing returns nothing
local timer t= CreateTimer()
local unit u5= GetTriggerUnit()
local trigger anubis
local trigger soundset
    set anubis=CreateTrigger()
    set soundset=CreateTrigger()
    //Озвучка
    if ( GetUnitAbilityLevelSwapped('A1N6', GetTriggerUnit()) == 1 ) then
    call UnitRemoveAbilityBJ('A1N6', GetTriggerUnit())
    call TriggerRegisterUnitEvent(soundset, GetTriggerUnit(), EVENT_UNIT_SELECTED)
    call TriggerAddAction(soundset, function AnubisSounds)
    else
    call DestroyTrigger(soundset)
    endif
    //Всё, закрыто про озвучку
    //Если первый спелл, то заносим функцию для него
    if ( GetLearnedSkillBJ() == 'A1N9' ) then
    call TriggerRegisterUnitEvent(anubis, GetTriggerUnit(), EVENT_UNIT_SPELL_EFFECT)
    call TriggerAddAction(anubis, function MentalNecrosis)
    endif
    //Если второй спелл, то заносим функцию для него
    if ( GetLearnedSkillBJ() == 'A1NB' ) then
    call TriggerRegisterUnitEvent(anubis, GetTriggerUnit(), EVENT_UNIT_SPELL_EFFECT)
    call TriggerAddAction(anubis, function Woe)
    endif
    //Если третий спелл, то триггер рушим, а если не третий, то рушим таймер t
    if ( GetLearnedSkillBJ() == 'A1NA' ) then
    call UnitAddAbilityBJ('A1N5', GetTriggerUnit())
    call SetPlayerAbilityAvailableBJ(false, 'A1N5', GetOwningPlayer(GetTriggerUnit()))
    call SaveUnitHandle(udg_Hash, GetHandleId(t), 2, u5)
    call TimerStart(t, 4, true, function ClutchingHandsTicks)
    call DestroyTrigger(anubis)
    else
    call PauseTimer(t)
    call DestroyTimer(t)
    call FlushChildHashtable(udg_Hash, GetHandleId(t))
    endif
    //Если четвёртый спелл, то заносим функцию для него
    if ( GetLearnedSkillBJ() == 'A1N8' ) then
    call TriggerRegisterUnitEvent(anubis, GetTriggerUnit(), EVENT_UNIT_SPELL_EFFECT)
    call TriggerAddAction(anubis, function DiveIntoTwilight)
    endif
//В любом случае переменную триггера офк потом обнуляем, а триггер, если остался, оставляем. 
//И обнуляем все прочие переменные.
set anubis=null
set soundset=null
set t=null
set u5=null
endfunction

//===========================================================================
function InitTrig_GodofTwilightAll takes nothing returns nothing
    local trigger GodofTwilightAll= CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(GodofTwilightAll, EVENT_PLAYER_HERO_SKILL)
    call TriggerAddCondition(GodofTwilightAll, Condition(function Trig_GodofTwilightAll_Conditions))
    call TriggerAddAction(GodofTwilightAll, function Trig_GodofTwilightAll_Actions)
    set GodofTwilightAll=null
endfunction
БОГ СУМРАКА - ЗАКРЫТО.
21

» WarCraft 3 / Не инициализируется функция в СЕРЕДИНЕ потока

Просто не понятна причина
call InitTrig_GodofTwilightAll
функция называлась именно так (да иначе бы и не засейвилось) = тут ошибки нет
поток виноват? нет, перемещалось в другой и не действовало = тут ошибки нет
в функции неправильные if then else? - но там с самого начала после объявления единственной локалки (триггера) стояла отладка - удалить имеющееся с начала игры здание, а оно оставалось на месте = функция просто не вызывалась.
Получается так call InitTrig_GodofTwilightAll() не вызывает function InitTrig_GodofTwilightAll.
При этом функции ниже (и выше) в потоке успешно вызываются.
Перемещение в другой поток ничего не меняет.
На каком-то другом этапе вроде бы ошибка - см. выше - исключена.
Что за бред?
21

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

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

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

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

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

Hate, а его что, в мдлвисе можно с нуля сделать?
а анимы где брать тогда или как делать?
21

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

Hate
что это?
я в этом не понимаю
у меня пока единственные мысли к-рые появлялись - можно ли на скелет иллидана и его анимы посадить
оружие вроде похожее
но я тупо не успеваю и у меня вообще тут хз что и с режимом сна и вообще по жизни чехарда )
21

» WarCraft 3 / HiveWE - World Editor 0.6

в РФ интеллектуальная собственность принадлежит народу
21

» WarCraft 3 / Туториал Mdlvis открытие стандартных моделей (КАК???)

war3.mpq
war3x.mpq
доставать mpq editor
на сайте есть
Даже более пошаговая инструкция:
  1. Открываешь редактор варкрафта
  2. Смотришь в редакторе объектов путь к модели (это надо включить там показать значения переменных или что-то там, тут пусть кто-то уточнит, если нужно, я наизусть не помню, хотя постоянно переключаю, как-то так Units\Creeps\StoneGolem\StoneGolem.mdx)
  3. Закрываешь редактор (а то mpq не откроется)
  4. xgm.guru/p/xm/ladikmpq скачиваешь это, если еще не, распаковываешь
  5. открываешь war3.mpq, ищешь там по пути модель в соответствующих папках
  6. если ее нет, открываешь war3x.mpq и ищешь там
  7. нажимаешь Export
  8. выбираешь куда вынуть
  9. подтверждаешь
все, открываешь папку, куда оно того и там модель и текстура
текстуру можно фотошопить, а модель мдлвисить как душа пожелает
/
инструкция может быть чуть не точной, т. к. сочинялась на ходу
21

» WarCraft 3 / как убрать ГРУППЕ юнитов "является здание"?

ssbbssc, ну логично, что человек просто изначально предполагал, что классификация здания нужна, а теперь оказалось, что нет
ну хорошо если 100, а вдруг их там 1000
21

» Fa_losophy / Мапперская дуэль имени меня

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

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

ну тогда я тем более лично не справлюсь на скорую руку
а разбираться желания нет хотелось бы за это бартер или деньги отдавать