0
32
4 месяца назад
Отредактирован quq_CCCP
0

» WarCraft 3 / Ульт Лича из Доты

Там примитивный код, создается дамми юнит с моделью ледяного шара, и его двигают от лича к указанной цели, если дистанция между шаром и целью меньше N, то наносят урон цели (дамми каст ледяной звезды, урон по цели убран, оставлен только урон по области) ну и ищем в радиусе 500 еще одну цель, которой не является юнит которого мы ударили, ну и летим дальше.

function SH4 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 unit WF3 = ( LoadUnitHandle( HashData, ( S5I ), ( 374 ) ) )
    local integer SUI = ( LoadInteger( HashData, ( S5I ), ( 5 ) ) )
    local integer SZ4 = ( LoadInteger( HashData, ( S5I ), ( 233 ) ) )
    local integer MKO = ( LoadInteger( HashData, ( S5I ), ( 12 ) ) )
    local real x = GetUnitX( WF3 )
    local real y = GetUnitY( WF3 )
    local real tx = GetUnitX( P8I )
    local real ty = GetUnitY( P8I )
    local real a = AngleBetweenCords( x,y,tx,ty )
    local integer DT1 = ( LoadInteger( HashData, ( S5I ), ( 720 ) ) )

    if DT1 > 0 then
        call SaveInteger( HashData, ( S5I ), ( 720 ), DT1 - 1 )
        set t = null
        set P7I = null
        set P8I = null
        set WF3 = null
        return false
    endif

    if DistBetweenCods( x, y, tx, ty ) > 20.00 then
        call SetUnitFacing( WF3, a )
        set x = PTI( x + 18.0 * Cos( a * bj_DEGTORAD ) )
        set y = PUI( y + 18.0 * Sin( a * bj_DEGTORAD ) )
        call SetUnitX( WF3, x )
        call SetUnitY( WF3, y )
    else
        if not( IsUnitDead( P8I ) or IsUnitType( P8I, UNIT_TYPE_MAGIC_IMMUNE ) ) then
            set tx = GetUnitX( P8I )
            set ty = GetUnitY( P8I )
            set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer( P7I ), DUMMY, tx, ty, a ) 
            call SetUnitPathing( bj_lastCreatedUnit, false )
            call SetUnitX( bj_lastCreatedUnit, tx )
            call SetUnitY( bj_lastCreatedUnit, ty )
            call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 2.00 )
            call UnitAddAbility( bj_lastCreatedUnit, 'A091' )
            call SetUnitAbilityLevel( bj_lastCreatedUnit, 'A091', SUI )
            if not IsUnitHasNegation(P8I) and IssueTargetOrder( bj_lastCreatedUnit, "frostnova", P8I ) then
                call UnitDamageTarget( P7I, P8I, LoadReal( HashData, S5I, 3 ), false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS )
            else 
                call KillUnit( bj_lastCreatedUnit )
            endif
        endif
        if SZ4 > MKO then
            call RemoveUnit( WF3 )
            call FlushChildHashtable( HashData, ( S5I ) )
            call S0I( t )
        else
            call GroupClear( bj_TempGroup )
            set bj_groupEnumOwningPlayer = GetOwningPlayer( P7I )
            call GroupEnumUnitsInRange( bj_TempGroup, tx, ty, 625.00, Condition( function Cond_EnemyVisibleNoVardVulAlive ) )
            call GroupRemoveUnit( bj_TempGroup, P8I )
            set P8I = GroupPickRandomUnit( bj_TempGroup )
            
            if P8I == null then
                call RemoveUnit( WF3 )
                call FlushChildHashtable( HashData, ( S5I ) )
                call S0I( t )
            else
                call SaveInteger( HashData, ( S5I ), ( 720 ), ( 10 ) )
                call SaveInteger( HashData, ( S5I ), ( 233 ), ( SZ4 + 1 ) )
                call SaveUnitHandle( HashData, ( S5I ), ( 17 ), ( P8I ) )
            endif
        endif
    endif

    set t = null
    set P7I = null
    set P8I = null
    set WF3 = null
    return false
endfunction

function Trig_ChainFrost_Actions takes nothing returns nothing
    local unit P7I = GetTriggerUnit( )
    local unit P8I = GetSpellTargetUnit( )
    local integer SUI = GetUnitAbilityLevel( P7I, 'A05T' )
    local integer MKO = 10
    local trigger t = CreateTrigger( )
    local integer S5I = GetHandleId( t )
    local unit dummy= CreateUnit( GetOwningPlayer( P7I ), 'e009', GetUnitX( P7I ), GetUnitY( P7I ), GetUnitFacing( P7I )  )
    
    call SetUnitPathing( dummy, false )
    
    if GetSpellAbilityId( ) == 'A08H' then
        set SUI = GetUnitAbilityLevel( P7I, 'A08H' ) + 1
        set MKO = 100000
    endif
    
    call SaveUnitHandle( HashData,  S5I ,  2,  P7I )
    call SaveUnitHandle( HashData,  S5I ,  17,  P8I )
    call SaveUnitHandle( HashData,  S5I ,  374, dummy )
    call SaveInteger( HashData, S5I ,  5, ( SUI ) )
    call SaveInteger( HashData, S5I ,  233, ( 1 ) )
    call SaveInteger( HashData, S5I ,  12, ( MKO ) )
    call SaveInteger( HashData, S5I ,  720, ( 0 ) )
    call SaveReal( HashData, S5I, 3, 190.00 + 90.00 * SUI )
    
    call TriggerRegisterTimerEvent( t, 0.02, true )
    call TriggerAddCondition( t, Condition( function SH4 ) )
    
    set P7I = null
    set P8I = null
    set dummy = null
    set t = null
endfunction

function Trig_ChainFrost_Conditions takes nothing returns boolean
    if ( GetSpellAbilityId() == 'A05T' or GetSpellAbilityId()=='A08H' ) and not IsUnitHasNegation(GetSpellTargetUnit()) then
        call  Trig_ChainFrost_Actions( )
    endif
    return false
endfunction

function Register_ChainFrost takes nothing returns nothing
    local trigger trg = CreateTrigger()
    local integer nIndex = 1
    
    call TriggerAddCondition( trg, Condition( function Trig_ChainFrost_Conditions ) )
    
    loop
        exitwhen nIndex > 11
            if IsSlotPlayer(Player(nIndex))then
                call TriggerRegisterPlayerUnitEvent( trg, Player(nIndex), EVENT_PLAYER_UNIT_SPELL_EFFECT, OnlyHero )
            endif
        set nIndex = nIndex + 1
    endloop
    
    set trg = null
endfunction
Вот как оно сделано у фрога, с небольшими доработками.
0
32
4 месяца назад
0

» WarCraft 3 / Возможно ли использовать более 16 разных тайлов на одной карте?

Там увы проблема, формат самого файла ландшавта не поддерживает больше число тайлов. + там 2 заняты водой, которые анимированые тайлы.
0
32
4 месяца назад
0

» WarCraft 3 / Транспорт наземный и урон

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

» WarCraft 3 / Как делать заклинание Arctic Blast из доты

Как где, не видно? TriggerCondition, тут все в условиях написано.
Код Jass, собвственно все что надо таймер, дамми юнит с модлью кольца и группа, по малому периоду двигаем даммика за юнитом кастером и выбираем всех врагов вокруг, с каждым тиком таймера увеличиваем радиус поиска группы, тех кто уже попался отсеиваем, а тех кто попался впервые дамажим, замедление делается дамми юнитом кидающим ледяную звезду в себя, урон по площяди убран, только замедление.
0
32
4 месяца назад
0

» WarCraft 3 / FRAMETRIS (тетрис на фреймах)

Традиционные были без звука, это после добавили звук с цветом и прочее.
Пажитов насколько помню писал тетрис на компе где ни графики ни звука, разве что принтером шуршать можно. Так что музяку можно любую использовать, то что у нас в 90х китайцы продавали не есть каноничный вариант игры.
0
32
4 месяца назад
0

» WarCraft 3 / Как делать заклинание Arctic Blast из доты

NTI - тупо CreateGroup, ну NSI - DestroyGroup
Если в карте нету GroupUtils (прекрасно гуглится на хайве).
Триггер меняем на таймер, но я скинул не для копипаста а для изучения, сложного в коде ничего нету.
0
32
4 месяца назад
0

» WarCraft 3 / Как делать заклинание Arctic Blast из доты

function J9O takes nothing returns nothing
  local unit P8I=GetEnumUnit()
  local group JAO=ND0
  local unit P7I=NE0
  if IsUnitInGroup(P8I,JAO)==false then
    call GroupAddUnit(JAO,P8I)
    call IssueTargetOrder(NF0,"slow",P8I)
    set JJI=true
    call DamageTarget(P7I,P8I,1,200)
    set JJI=false
    call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl",P8I,"origin"))
  endif
  set P8I=null
  set JAO=null
  set P7I=null
endfunction

function JBO takes nothing returns boolean
  local trigger t=GetTriggeringTrigger()
  local integer S5I=GetHandleId(t)
  local unit P7I=(LoadUnitHandle(HashData,(S5I),(2)))
  local unit I01=(LoadUnitHandle(HashData,(S5I),(19)))
  local group JAO=(LoadGroupHandle(HashData,(S5I),(133)))
  local real d
  local real x
  local real x0=GetUnitX(P7I)
  local real y
  local real y0=GetUnitY(P7I)
  local group g=NTI()
  local integer NPI=GetTriggerEvalCount(t)
  local integer i
  call SetUnitX(I01,GetUnitX(P7I))
  call SetUnitY(I01,GetUnitY(P7I))
  set ND0=JAO
  set NE0=P7I
  set NF0=(LoadUnitHandle(HashData,(S5I),(132)))
  if GetTriggerEvalCount(t)>37 then
    call KillUnit(I01)
    call NSI(JAO)
    call FlushChildHashtable(HashData,(S5I))
    call S0I(t)
  else
    set d=NPI*21
    set i=0
    loop
      exitwhen i>36
      set x=x0+d*Cos(360*i/36*bj_DEGTORAD)
      set y=y0+d*Sin(360*i/36*bj_DEGTORAD)
      set GK=P7I
      call GroupEnumUnitsInRange(g,x,y,150,Condition(function C81))
      call ForGroup(g,function J9O)
      set i=i+1
    endloop
  endif
  call NSI(g)
  set t=null
  set I01=null
  set JAO=null
  set P7I=null
  set g=null
  return false
endfunction

function JCO takes nothing returns nothing
  local unit SFI=GetTriggerUnit()
  local real x=GetUnitX(SFI)
  local real y=GetUnitY(SFI)
  local group JAO=NTI()
  local trigger t=CreateTrigger()
  local integer S5I=GetHandleId(t)
  local unit I01=CreateUnit(GetOwningPlayer(SFI),'h091',x,y,0)
  local unit JDO=CreateUnit(GetOwningPlayer(SFI),'e00E',GetUnitX(SFI),GetUnitY(SFI),0)
  call UnitAddAbility(JDO,'A0T0')
  call SaveGroupHandle(HashData,(S5I),(133),(JAO))
  call SaveUnitHandle(HashData,(S5I),(19),(I01))
  call SaveUnitHandle(HashData,(S5I),(132),(JDO))
  call SaveUnitHandle(HashData,(S5I),(2),(SFI))
  call TriggerRegisterTimerEvent(t,0.06,true)
  call TriggerAddCondition(t,Condition(function JBO))
  set t=null
  set JAO=null
  set I01=null
  set JDO=null
  set SFI=null
endfunction

function JEO takes nothing returns nothing
  if GetSpellAbilityId()=='A0T9' then
    call JCO()
  endif
endfunction
0
32
4 месяца назад
0

» WarCraft 3 / Как делать заклинание Arctic Blast из доты

Extremator, там кастомная модель, разлета снарядов.
Могу скинуть код, он там примитивный.
0
32
4 месяца назад
0

» WarCraft 3 / Циклы и их лимиты (+ способы обхода лимитов)

host_pi, потому что вы что то не то делайте, сами себе создаёте проблему.
1
32
4 месяца назад
1

» WarCraft 3 / Циклы и их лимиты (+ способы обхода лимитов)

host_pi, нет, не припомню ни одной задачи, где бы были такие циклы.
0
32
4 месяца назад
Отредактирован quq_CCCP
0

» WarCraft 3 / Отследить количество играющих игроков

Нельзя сразу в одном цикле пересчитать играющих игроков не ботов, сходу выдать им ресурсы, и добавить их в зависимости от номера в разные "форсы"?
1
32
4 месяца назад
1

» WarCraft 3 / Циклы и их лимиты (+ способы обхода лимитов)

Мне вот интересно, а зачем?
Проблемы были лишь в Гуи говнокартах и дотах, где оптимизатор сливает все в одну функцию и начинаются обрывы, которые лечатся сверхпросто.
Но проще думать головой и не плодить сущности, инит нет надобности делать в мейне и разом, необходимые триггеры вовсе можно создавать во время игры, к примеру когда игрок выберет героя к котором эти триггеры относятся.
0
32
5 месяцев назад
0

» WarCraft 3 / Золотая башня

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

» WarCraft 3 / Devistating Blow ( Фатальный удар )

Ну я бы сделал по нормальному, через детект урона. Собственно все просто, задаем абилке труповозки эксгумация кд, там достаточно просто все в статьях есть, когда кд прошло, включаем триггер на атаку, при замахе на врага создаем еще 1 триггер, в котором ждем удара от врага, при удара неносим урон. Все просто.
1
32
5 месяцев назад
1

» WarCraft 3 / Оптимизация карты

Ну для начала не мешало бы избавится от гуи, и использовать как можно меньше разрушаймых декораций и блокираторов пути.
На больших картах из за них лагает, стоит удар грома юзнуть и 5 фпс на секунды 3 обеспечено.
0
32
5 месяцев назад
0

» WarCraft 3 / Как сделать систему рейтинга? (BD sql)

TheNoyl, реально, но проелоадом или мемхаком.
0
32
5 месяцев назад
0

» WarCraft 3 / Как сделать систему рейтинга? (BD sql)

Ну пасскоды как во всяких гоблинах, это самое простое.
Более сложное, это preload или мемхак, создавать на машине юзера файл с данными.
Ну и у лтд или доты, тупо отправка хостботу, который все сам делает, получает инфу хостбот анализируя пакеты синха геймкеша.
Для этого даже наработка есть, wc3mdd
0
32
5 месяцев назад
0

» WarCraft 3 / Аналог Smoke of deceit из dota2

SAND, Ну есть функция настройки цвета юнита и его прозначности, прозрачность в 0, и юнит полностью прозрачный, прозрачность как и цвет можно локально настроить для игрока, SetUnitVertexColor называется.
С иконкой там немного посложнее, в разделе нейтральное здание, сначала настраиваем альтернативную иконку для миникарты - call SetAltMinimapIcon( "UI\\Minimap\\Minimap-Tower" ), ну а потом для конкретного юнита прменяем функцией - call UnitSetUsesAltIcon(whichUnit, flag), ну так вот, иконки тоже можно локально настраивать, таким образом сделав незаметным на миникарте героя.
0
32
5 месяцев назад
0

» WarCraft 3 / Юнит отходит при атаке

mifexiy, зачем? Есть триггер с событием, юнит отдал приказ - цель точка, приказ является move, юнитам отдавшим приказ - является крип ( в доте тупо проверка на абилку которая есть только у крипов идущих по линиям), то отдаем приказ атаковать в нужную точку, точку вычисляем исходя из области в которой сейчас юнит сидит. Все просто.
0
32
5 месяцев назад
0

» WarCraft 3 / Аналог Smoke of deceit из dota2

SAND, не видно, но автоатакой бить можно - но смысл смоуков чтобы варды не палили и все.
0
32
5 месяцев назад
0

» WarCraft 3 / Юнит отходит при атаке

Постоянно отдавать приказ идти, в доте к примеру там проверка на приказ move, если крип отдал такой приказ, проверяется в какой области он находится, и отдается приказ идти в следующую область.
0
32
5 месяцев назад
0

» WarCraft 3 / Аналог Smoke of deceit из dota2

Да как и в доте 1, ептить. Просто инвиз, иконку на миникарте делаем прозрачной, как и саму модель юнита для врагов, поэтому даже на вардах юнитов то не видно.
1
32
6 месяцев назад
1

» WarCraft 3 / Опасен ли мемхак?

IceFog, у мемхака много способов подключения?
Да, и судя по некоторым тредам, есть еще и в рефе. Хз конечно как и что, о дырах в виртуальной машинезнал один местный юзер, который молчал, но на хайве один человек взял и рассказал Драколичу об одном, найденым им простым вариантом - результат все мы знаем...
Но сколько людей, не пошло постить на форумы свои находки, авторы читов и программ типа кеев, маперов, улучшайзеров фпс. К слову они ни чуть не менее опасны чем мемхак, они написаны человеком который сидит за ником, за которым ничего нет, ты даже не знаешь в какой стране на самом деле живет этот человек и что он там написал, опенсурсы вам никто не дает.
Ну и как я уже писал, айкаплаунчер и прочие лаунчеры - написаны ни понять кем, у айкапа разработчиков выгнаных со скаднадалами уже десятки, так что вирусов боятся - сидеть оффлайн.
Кто хочет юзать мемхак для своей карты юзайте, вам ничего не угрожает, для тех кто видит на ирне что карта с мемхаком, гуглите инфу - если карта норм и автор её развивает, вирусы там не появятся, стрелять себе в ногу автор карты не будет.

Кстати забыл сказать, есть способы скрытия мемхака от тупых проверок, мемхак это всего лишь сломанный массив - а как и где его сломать не принципиально важно, все остальное мешура которая лишь дает API для работы, чеканье переменных как сделал айкап лечится сверх просто. Мемхак может быть в любом скрипте, а не только в J, т.е AI, PLD, начхать.Передать адрес массива можно геймкешем.
0
32
6 месяцев назад
0

» WarCraft 3 / Как отловить стан?

Ептить, ну при касте молотка создаешь на цель каста триггер с событием - юнит получает урон, урон ровно 0, и есть бафф стана, сразу бафф удаляешгь и все. Следом триггер, а так же добавляешь событие - время вышло, на примерное время за которое молоток долетит до юнита.
Разумеется все это на JASS делается, а не на гуях.
0
32
6 месяцев назад
0

» WarCraft 3 / Как отловить стан?

Получает урон, ровно 0 урона и бафф стана, или приказ стана...