какая-то кривая ерунда
9 447
2
37
4 недели назад
Отредактирован ScorpioT1000
2
Сделал генерацию смешных бошек- аватаров с помощью 9 точек безье, зерно взял как crc32 от юзернейма xgm.guru/users?sort=register
1
11
4 недели назад
1
Простите за некропост, выражаю автору благодарочку за скилл. Переписал через хэш без триггерслипа, прилепил урон и вывел в одну функцию, заменил юнита на эффект (для UjPI)
Пример использования: call RocketStrike(caster, x, y, "Abilities\\Weapons\\BansheeMissile\\BansheeMissile.mdl", ammout, dmg, 50., 200., DAMAGE_TYPE_FIRE)
код
// проверка способности
function Trig_MilionGhost_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A026'
endfunction

//движение
function MilionGhostMove takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer h = GetHandleId(t)
    local unit GT = LoadUnitHandle(hash, h, 1)
    local effect eff = LoadEffectHandle(hash, h, 2)
    local real startx = LoadReal(hash, h, 3)
    local real starty = LoadReal(hash, h, 4)
    local real startz = LoadReal(hash, h, 5)
    local real midx = LoadReal(hash, h, 6)
    local real midy = LoadReal(hash, h, 7)
    local real midz = LoadReal(hash, h, 8)
    local real endx = LoadReal(hash, h, 9)
    local real endy = LoadReal(hash, h, 10)
    local real endz = LoadReal(hash, h, 11)
    local real time = LoadReal(hash, h, 12)
    local real maxTime = LoadReal(hash, h, 13)
    local real x
    local real y
    local real z
    local real dmg = LoadReal(hash, h, 14)
    local real rng = LoadReal(hash, h, 15)
    local group g 
    local unit un
    local damagetype dmgtype = LoadDamageTypeHandle(hash, h, 16)
    //-------------
    set x = startx + ( ( 2.00 * ( midx - startx ) ) + ( startx - 2.00 * midx + endx ) * time ) * time
    set y = starty + ( ( 2.00 * ( midy - starty ) ) + ( starty - 2.00 * midy + endy ) * time ) * time
    set z = startz + ( ( 2.00 * ( midz - startz ) ) + ( startz - 2.00 * midz + endz ) * time ) * time
    //-------------
    call SetSpecialEffectX(eff, x)
    call SetSpecialEffectY(eff, y)
    call SetSpecialEffectZ(eff, z - GetAxisZ(x, y))
    set time = time + 0.025 / maxTime
    //-------------
    if time >= 1.00 then
        call DestroyEffect(eff)
        call FlushChildHashtable(hash, h)
        call DestroyTimer(t)
        // наносим урон
        //---------------------------
        set g = CreateGroup()
        call GroupEnumUnitsInRange(g, x, y, rng, null)
        loop
            set un = FirstOfGroup(g)
            exitwhen un == null
            if IsUnitEnemy(un, GetOwningPlayer(GT)) and not IsUnitType(un, UNIT_TYPE_DEAD) and not IsUnitType(un, UNIT_TYPE_STRUCTURE) then
               call UnitDamageTarget(GT, un, dmg, true, false, ATTACK_TYPE_NORMAL, dmgtype, WEAPON_TYPE_WHOKNOWS)
                //call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\ManaFlare\\ManaFlareBoltImpact.mdl", un , "orign"))
            endif
            call GroupRemoveUnit(g, un)
        endloop
        call DestroyGroup(g)
        //----------------------------
    else 
        call SaveReal(hash, h, 12, time)
    endif 
    
    //-------------
    set g = null 
    set un = null
    set eff = null
    set GT = null 
    set t = null
    set dmgtype = null
endfunction



// создание эффектов
function MilionGhostCreate takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer h = GetHandleId(t)
    local unit GT = LoadUnitHandle(hash, h, 1)
    local integer AmountRocket = LoadInteger(hash, h, 2)
    local real x = LoadReal(hash, h, 3) // центр конечной области
    local real y = LoadReal(hash, h, 4)// центр конечной области
    local timer t1
    local integer h1
    local effect eff
    local real xstart = GetUnitX(GT)
    local real ystart = GetUnitY(GT)
    local real zstart = GetAxisZ(xstart, ystart) + 50
    local real xend //конечная точка способности
    local real yend //конечная точка способности
    local real zend //конечная точка способности
    local real angle
    local real distance
    local real midx // средняя точка способности
    local real midy // средняя точка способности
    local real midz // средняя точка способности
    local real time 
    local real maxtime
    local real Scatter = LoadReal(hash, h, 8)
    local damagetype dmgtype = LoadDamageTypeHandle(hash, h, 9)
    //-------------
    
    if AmountRocket > 0 then
        call SaveInteger(hash, h, 2, AmountRocket-1)
        set t1 = CreateTimer()
        set h1 = GetHandleId(t1)
        //---------       
        set eff = AddSpecialEffect(LoadStr(hash, h, 5), xstart, ystart)
        call SetSpecialEffectZ(eff, zstart)
        
        //высчитываем начало и конец
        set xend = x + GetRandomReal( -Scatter, Scatter ) * Cos( GetRandomReal( 0.00, 360.00 ) * bj_DEGTORAD ) 
        set yend = y + GetRandomReal( -Scatter, Scatter ) * Sin( GetRandomReal( 0.00, 360.00 ) * bj_DEGTORAD )
        set zend = GetAxisZ(xend, yend)
        set angle     = Atan2( yend - ystart, xend - xstart )
        set distance  = SquareRoot( ( xend - xstart ) * ( xend - xstart ) + ( yend - ystart ) * ( yend - ystart ) )
        
        //высчитываем середину
        set midx = xstart + ( distance / 2 ) * Cos( angle + GetRandomReal( -90.00, 90.00 ) * bj_DEGTORAD )
        set midy = ystart + ( distance / 2 ) * Sin( angle + GetRandomReal( -90.00, 90.00 ) * bj_DEGTORAD )
        set midz = GetAxisZ( midx, midy )
        
        // проверка на высоты
        if zstart < zend then
            set midz = midz + zend
        else
            set midz = midz + zstart
        endif
        
        set midz = midz + distance
        
        // время 
        set time = 0
        set maxtime = distance * ( 0.025 / 10.00 )
        
        // всё сохраняем
        call SaveUnitHandle(hash, h1, 1, GT)
        call SaveEffectHandle(hash, h1, 2, eff)
        call SaveReal(hash, h1, 3, xstart)
        call SaveReal(hash, h1, 4, ystart)
        call SaveReal(hash, h1, 5, zstart)
        call SaveReal(hash, h1, 6, midx)
        call SaveReal(hash, h1, 7, midy)
        call SaveReal(hash, h1, 8, midz)
        call SaveReal(hash, h1, 9, xend)
        call SaveReal(hash, h1, 10, yend)
        call SaveReal(hash, h1, 11, zend)
        call SaveReal(hash, h1, 12, time)
        call SaveReal(hash, h1, 13, maxtime)
        call SaveReal(hash, h1, 14, LoadReal(hash, h, 6))
        call SaveReal(hash, h1, 15, LoadReal(hash, h, 7))
        call SaveDamageTypeHandle(hash, h1, 16, dmgtype)
        
        //стартуем
        call TimerStart( t1, 0.025, true, function MilionGhostMove )
        //---------
    else 
        call FlushChildHashtable(hash, h)
        call DestroyTimer(t)
    endif 
    //-------------
    set eff = null
    set t1 = null
    set GT = null 
    set t = null
    set dmgtype = null
endfunction

// функция ракетной атаки
function RocketStrike takes unit GT, real x, real y, string RocketEff, integer AmountRocket, real RocketDmg, real RocketScatter1, real RocketScatterMax, damagetype dmgtype returns nothing
    local timer t = CreateTimer()
    local integer h = GetHandleId(t)
    //-------------------
    call SaveUnitHandle(hash, h, 1,GT)
    call SaveInteger(hash, h, 2, AmountRocket)
    call SaveReal(hash, h, 3, x)
    call SaveReal(hash, h, 4, y)
    call SaveStr(hash, h, 5, RocketEff)
    call SaveReal(hash, h, 6, RocketDmg)
    call SaveReal(hash, h, 7, RocketScatter1)
    call SaveReal(hash, h, 8, RocketScatterMax)
    call SaveDamageTypeHandle(hash, h, 9, dmgtype)
    call TimerStart(t, 0.1, true, function MilionGhostCreate)
    //-------------------
    set t = null 
endfunction

// основная функция
function Trig_MilionGhost_Actions takes nothing returns nothing
    local unit GT = GetTriggerUnit()
    local real x = GetSpellTargetX( )
    local real y = GetSpellTargetY( )
    local real dmg = 50.
    local integer kol = 10
    //-------------
    call RocketStrike(GT, x, y, "Abilities\\Weapons\\BansheeMissile\\BansheeMissile.mdl", kol, dmg, 50., 200., DAMAGE_TYPE_FIRE)
    //-------------
    set GT = null 
endfunction

//===========================================================================
function InitTrig_MilionGhost takes nothing returns nothing
    set gg_trg_MilionGhost = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_MilionGhost, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_MilionGhost, Condition( function Trig_MilionGhost_Conditions ) )
    call TriggerAddAction( gg_trg_MilionGhost, function Trig_MilionGhost_Actions )
endfunction
какой-то ещё один кал
1 211
3
20
1 год назад
3
Очень круто. Красиво как отвечает траектория снарядов анимации мага.
2 models of confetti
3 200
2
37
1 год назад
2
rsfghd, зря, новогодние модели всегда в почете)
0
27
1 год назад
0
Эльрат, да кому оно нафиг надо лол)
2
37
1 год назад
2
Как насчёт в базу моделей Warcraft 3? Там вообще напряг с новогодними моделями. А эффект ведь прикольный)
хотел сделать судоку на фреймах, но вышло как всегда говно, я попросту не смог разобраться в правильном алгоритме для его создания
7 349
2
12
1 год назад
2
Мог бы сделать игру 2048 на фреймах, было бы даже проще. Можно будет использовать как мини игу в ТДшках, чтоб не помереть от скуки.
2
9
1 год назад
Отредактирован Градоначальник
2
Крестики-нолики для 2 игроков была бы топ карта.
2
32
1 год назад
2
Загруженные файлы
0
27
1 год назад
0
МрачныйВорон, это навоз, такое говно только я могу высрать)
я и искал алгоритм, это можно по комментариям в коде видеть)
вот основные ссылки которыми я пользовался