32

» WarCraft 3 / Утечки

rsfghd,
1)SetUnitPosition - значительно более ресурсоемка чем движение по осям, для проверки границ карты проверяйете кординаты на корректность, это элементарно.
  1. Нет никакой надобности юзать таймеры с таким малым периодом, типа 100 раз в сек, 50 или 23 более чем достаточно.
  2. Ты скорее наделал утечики с переменными чем сделал лучше, подобный код бесполезен, уж лучше обынчый БЖ код юзай.

Далее неверный алгоритм, нет иного завершения кроме как попадания. Если у тебя планируется тонны снарядом - то мб не делать как ты для каждого снаряда 1 таймер, еще и переборы группой ?
32

» WarCraft 3 / Утечки

Че это за ахинея?
    local trigger t = CreateTrigger()
    local integer index = 0
    local playerunitevent e = null
    local code c = function Frost_Conditions
    local player p = null
    local boolexpr b = null
    
    loop
    set p = Player(index)
    set e = EVENT_PLAYER_UNIT_SPELL_EFFECT
    call TriggerRegisterPlayerUnitEvent(t,p,e,b)
    set index = index + 1
    exitwhen index == bj_MAX_PLAYER_SLOTS
    set e = null
    set p = null
    endloop
    
    set b = Condition(c)
    call TriggerAddCondition(t,b)
    set c = null
    set c = function Frost_Actions
    call TriggerAddAction(t,c)
    
    set b = null
    set c = null
    set t = null
Ну сами и наплодили непойми чего.

Потом волну силы то не пробовали а?
Тут спелл примитив примитивом, но сделан отвратно, зачем то SteUnitPos - вместо нормального движения по осям, как таймер бредовый 0.01, ну ладно уж 0.02, или 0.03125.
Куда 0.01? Нет никакой обьективной нужды в таких таймерах, как и в прочих вещях вроде SetIUnitPosition.

Vlod, они там улететь немогут, т.к SetUnitPos не выпустит.

Но тут почему то нормально не пострена дальность полета, тупая проверка группой что кто то попалася, а если никто - то оно и дальше тикает....

Полная ахинея, уж блин триггер бы взяли и событие UnitsInRange и вручали его всем даммиками, а триггер был бы 1, если уж дофига оптимизацию охото.
1 пункт от Maniac_91: 1.1 (ненормативная лексика)
32

» WarCraft 3 / скрыть/показать юнита

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

» WarCraft 3 / В чем проблема?

Не везде можно указывать отрец значения, точнее не везде это дает какой то толк. Некоторые поля движок игры проверяет на корректность и изменяет на минимально возможное, если оно неккоректно. Хп юниту отрец вы не поставите. Длительность тоже, толку 0.
32

» WarCraft 3 / Дистанция получения цели

Это радиус пойска цели для автоатаки, над целью должен быть обзор.
32

» WarCraft 3 / Способности и алгоритмы на заказ

Daro:
quq_CCCP, вытащи, полезный скилл будет.
я уже кинул ссылку на спелл. У фрога ничем не лучше, с того же хайва сперт.
32

» WarCraft 3 / Система постройки стен

Зачем? Что мешает зданию поставить текстуру пути стенки?Ну и модель соответствующую, все вовсе без кода, только РО.
32

» WarCraft 3 / Дистанция атаки

Ты забываешь важное НО - ты меришь дистацнию между центрами юнитов, а игра между краем моделей, это раз, два юнит начинает атаковать не мгновенно как увидел цель в зоне досягаемости, так же не забывай что снаняды будут догонять юнита и не смотря на то что юнит уже вышел за радиус атаки - тот удар что был заготовлен всеравно на пофиг полетит в него.
Не пробовал поступить оригинальнее - событие юнит входит в регион, юнит выходит из региона, при входе помещаем юнита в группу, при выходе удаляем из этой группы, как и при смерти. В отдельном триггере кадую секунду всем юнитам в этой группе отнимаем здоровье в размере 10% от максимума.
32

» WarCraft 3 / Способности и алгоритмы на заказ

CaZaNoVa, на жассе пойдет? Могу из доты вытащить, там оно криво да косо сделано, но работает.

CaZaNoVa, кстати совсем забыл - www.hiveworkshop.com/threads/wild-axes.45611
Этот спел очень популярен и его много раз делали, фрог его тупо спер с конкурса спеллов хайва =)
32

» WarCraft 3 / Нужна помощь (vjass)

Там все гораздо проще, на каждого юнита аттачится экземпляр структуры где хранится цель, заклинатель, кол-во урона в сек, и сколько хп у тебя было, по нему высчитывается урон каждые 4 секунды. Тебе ни 10 таймеров ни группы не нужны.

function WC5 takes nothing returns boolean
    local trigger t = GetTriggeringTrigger( )
    local integer S5I = GetHandleId( t )
    local unit P7I = ( LoadUnitHandle( HashData, ( S5I ), ( 2 ) ) )
    local unit P8I = ( LoadUnitHandle( HashData, ( S5I ), ( 17 ) ) )
    local integer SUI = GetUnitAbilityLevel( P7I, 'A0NO' )
    local integer NPI = GetTriggerEvalCount( t )
    local real WD5 = ( LoadReal( HashData, ( S5I ), ( 392 ) ) )
    local real H84 = 0
    if GetTriggerEventId( ) == EVENT_WIDGET_DEATH then
        call DestroyEffect( ( LoadEffectHandle( HashData, ( S5I ), ( 32 ) ) ) )
        call FlushChildHashtable( HashData, ( S5I ) )
        call S0I( t )
    else
        if NPI == 4 or NPI == 8 or NPI == 12 then
            call DestroyEffect( ( LoadEffectHandle( HashData, ( S5I ), ( 32 ) ) ) )
            if NPI == 12 then
                call FlushChildHashtable( HashData, ( S5I ) )
                call S0I( t )
            elseif NPI == 4 or NPI == 8 then
                call SaveEffectHandle( HashData, ( S5I ), ( 32 ), ( AddSpecialEffectTarget( "effects\\NetherInferno.mdx", P8I, "origin" ) ) )
            endif
            set H84 = ( 0.08 + SUI * 0.08 ) * QDI( WD5 - GetUnitState( P8I, UNIT_STATE_LIFE ), 0 )
            if H84 > 0 then
                call UYI( "+" + I2S( R2I( H84 ) ), 2, P8I, 0.023, 68, 0, 187, 216 )
            endif
        endif
        call DamageTarget( P7I, P8I, 1, 5 * SUI + H84 )
    endif
    set t = null
    set P7I = null
    set P8I = null
    return false
endfunction

function WE5 takes nothing returns nothing
    local trigger t = CreateTrigger( )
    local integer S5I = GetHandleId( t )
    local unit P7I = GetTriggerUnit( )
    local unit P8I = GetEnumUnit( )
    call DestroyEffect( AddSpecialEffectTarget( "effects\\NetherInferno.mdx", P8I, "origin" ) )
    call TriggerRegisterTimerEvent( t, 1, true )
    call TriggerRegisterDeathEvent( t, P8I )
    call TriggerAddCondition( t, Condition( function WC5 ) )
    call SaveUnitHandle( HashData, ( S5I ), ( 17 ), ( P8I ) )
    call SaveUnitHandle( HashData, ( S5I ), ( 2 ), ( P7I ) )
    call SaveReal( HashData, ( S5I ), ( 392 ), ( ( GetUnitState( P8I, UNIT_STATE_LIFE ) ) * 1.0 ) )
    call SaveEffectHandle( HashData, ( S5I ), ( 32 ), ( AddSpecialEffectTarget( "effects\\NetherInferno.mdx", P8I, "origin" ) ) )
    set t = null
    set P7I = null
    set P8I = null
endfunction

function WF5 takes nothing returns nothing
    local unit P7I = GetTriggerUnit( )
    local location l = GetSpellTargetLoc( )
    local real x = GetLocationX( l )
    local real y = GetLocationY( l )
    local group g = NTI( )
    local integer SUI = GetUnitAbilityLevel( P7I, 'A0NO' )
    call GroupEnumUnitsInRange( g, x, y, 180 + 25, Condition( function D01 ) )
    call ForGroup( g, function WE5 )
    call NSI( g )
    call RemoveLocation( l )
    set l = null
    set g = null
endfunction

function WG5 takes nothing returns boolean
    if GetSpellAbilityId( ) == 'A0NO' then
        call WF5( )
    endif
    return false
endfunction

function NI1 takes nothing returns nothing
    local trigger t = CreateTrigger( )
    call UMI( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( t, Condition( function WG5 ) )
    set t = null
endfunction
Как видишь все очень примитивно.Точно так же делаешь структуру с данными кто, где, когда. Нет смысла пытатся хранить сразу группу.
32

» WarCraft 3 / Как сделать так чтоб 4 удар был 100 крит 200%

Bergi_Bear, 200% на 2, крит по механике варкравта заменяет основную атаку множенной, т.е если сработал крит - твоя основная атака не срабатывает, она подменяется множенной, при этом отваливаются всякие орбы которые "ждали" обычной атаки.
32

» WarCraft 3 / Способность завод не работает

Это техническая способность, сама по себе не работает, это как создать труп - у кладбища, без способности оживить скелета или вызывать жука трупоеда оно бесполезно. Тут тоже самое, само по себе не пашет, юзай связку способностей или триггерный вариант спауна возле здания.
32

» WarCraft 3 / MapHack для реплея

Swini, ну нужно соответствующую нативку внести в тхт файл, BlacklistedNatives.txt. инструкция в описании проги есть.
32

» WarCraft 3 / Способности - Редактор объектов

badass, тег закрывающий цветовой тег. В твоем примере хоткей выделен жёлтым а не вся строка.
32

» WarCraft 3 / MemoryHackAPI

newtone:
quq_CCCP:
у автора на странице в вк.
нет у него на страничке
Загруженные файлы
32

» WarCraft 3 / Объясните как сейчас всё существует

GetLocalPlayer, кому оно укаколось в 2020? параноики еще не вымерли, в 2006 это никому не было интересно, и никто этого не делал, сейчас и подавно. Карта которая открывала сайт близов, вот все демо на которое хватило ума у чувака который ниче умнее не придумал это близард послать а не расскзаать аудитории вменяемо об этой находке.
32

» WarCraft 3 / Объясните как сейчас всё существует

Fly123, xgm.guru/p/wc3/memoryhack
В краце это пару функций, и ''сломанный массив", благодаря этому массиву мы можем читать и писать данные. Ну остальное - тысячи строк кода функций для мемхака, которые юзают этот массив. Есть возможность заружать сторонние длл, которые модифицируют игру, ибо согласитесь делать фишки как в мапхаках с кд в секундах или регенерации в интерфейсе проще через вижуал студио чем через хексредактор и список мамашиных инструкций?
32

» WarCraft 3 / По поводу размеров карты в байтах, лаунчеров для WC3 и вообще

Раньше был лимит 8 мегабайт на игру по сети, на айкапе нету его сняли, но какой он там хз, 2 гб это явно много. В общем карта может быть и немного больше 8 мегабайт но уж явно не стоит злоупотреблять и делать карту дикого размера.
32

» WarCraft 3 / MapHack для реплея

Swini, black natives list же есть, изи добавить CreateLeaderboard() и прочие.

На айкапе катаешь?
32

» WarCraft 3 / Проблема с биндами в Dota Allstars

На 1.27б толком софта то нет, хз кроме плейграунда там ещё кто то сидит?
Пишите автору кеев, мб исправит для 1.27б.
32

» WarCraft 3 / Способность

Может если руки кривые, во первых ы сферу молний низя сувать чаннелинг спеллы, фатал.
Удаление юнитов - дибильная идея, есть функция kill unit, которая нормально утилизирует юнитов.
32

» WarCraft 3 / Спосоность связанная со сном

Qulore, потому что ты игнорируешь то что пишу я и другие, и просишь готовую наработку. Ты не 1 такой, таких как ты десятки. увы научится они не могут... Я же прямо говорю что нужна практика, читай статьи и вникай, смотри карты близардов и вникай- почему сделано так а не иначе?
Иначе ты никогда ничему не научишся. Я не написал ничего нового, все описанное выше давно известно и разжевано.
Пока не начнешь вникаеть как и что в варе работает, ты так и будешь тыкатся.
Надеюсь ты запомнил - вейты юзать нельзя, нужно понимать что функции из раздела - реакция на событие, реагирует на событие в потоке триггера, применяющий юнит - вернет нужного юнита лишь в триггере который спаботал на каст абилки, при том до вейта, после вейта там скорее всего null или другой юнит, триггер может за время вейта сработать десятки раз на событие каста. Поэтому нужны переменные, в которые будут сразу записаны все параметры вначале и только потом действия, если нужна задержка - лучше осваивай таймеры.
32

» WarCraft 3 / Спосоность связанная со сном

Почему ты такой..., у тебя это не может работать по определению: вейты зло.
У тебя GetTriggerUnit() - применяющий юнит, да и цель - существуют лишь до дейсвтвия ждать, далее их уже нет. Тоже самое с последний созданый юнит - на деле это тупо глобальная переменная, её нельзя использовать после вейта, т.к данные могли уже 10 раз переписатся.
Нужно Сперва нанести урон, и сразу же приказать даммику кастануть сон, а у сна поставить время подготовки заклинания, разумеется даммика лучше сделать за нейтралпассивных и сделать глобальнуюальность, а у сна сделать в настройках возможность примнения в союзников. Т.к если враг стоит где то в лесу, то из за обзора даммик может тупо не увидеть врага, враг уйдет в тень.

Все эти действия Wait, PolledWait не пригодны для использования в качестве задержек для триггерных заклинаний, их единственно назначение - синхронизация геймкеша и кинематики в кампании. Поэтому сразу думайте как можно обойтись, или как иначе реализовать задержку.