20

» WarCraft 3 / Библиотека функций

не знаю, просто. часто используемые дефайны мною.
    define {
        
        int = integer
        void = nothing
        bool = boolean
        
        tt = thistype
        periodic = 0.025
        
        structnew = {if (.count==0) {TimerStart(.tim,periodic,true,function tt.cb)}; .data[.count]=this; .count++}
        structvalues = {static tt array data; static int count=0; static timer tim=CreateTimer()}
        structdestroy = {.destroy(); .count--; .data[i]=.data[.count]; i--; if (.count==0) {PauseTimer(.tim)}}
        
        SetUnitXY(u,x,y) = {SetUnitX(u,x); SetUnitY(u,y)}
        
        mcc(x,y) = {x>minX && y>minY && x<maxX && y<maxY}
        xcm(x) = {x>minX && x<maxX}
        ycm(y) = {y>minY && y<maxY}
        
        abc(x1,y1,x2,y2) = {Atan2(y2-y1,x2-x1)}
        dbc(x1,y1,x2,y2) = {SquareRoot((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))}
        
    }
20

» WarCraft 3 / Караваны v.1.08 beta

все равно я не понимаю юмора автора истории: "огненный маг не расчитал с огненным дождем"
*зловещий смех*
20

» WarCraft 3 / Трещина (спецэффект)

че за ЛоЛ?
щяс потестим...
больше похоже на червя) нежели на что то в роде расщелины ...
20

» WarCraft 3 / Библиотека функций

perimetral:
Функция урона по линии.
DamageLine(a, b, w, dmg, ranged)
a - точка начала линии
b - точка конца линии
w - ширина линии (чем меньше тем точнее)
dmg - наносимый урон
ranged - true, если урон считается дальним боем, false, если нет.
Код Jass
function DamageLine takes location a, location b, real w, real dmg, boolean ranged returns nothing
    local integer i = 0
    local real aX = GetLocationX(a)
    local real bX = GetLocationX(b)
    local real aY = GetLocationY(a)
    local real bY = GetLocationY(b)
    local real dist = SquareRoot((bX - aX) * (bX - aX) + (bY - aY) * (bY - aY))
    local real angle = 57.295827908 * Atan2(bY - aY, bX - aX)
    local group g = CreateGroup()
    local group tg = CreateGroup()
    local unit u
    loop
    exitwhen i > 2*dist/w
        call GroupEnumUnitsInRange(g, aX, aY, w, null)
        loop
            set u = FirstOfGroup(g)
            if (IsUnitInGroup(u, tg) == false) then
                call UnitDamageTarget(u, u, dmg, true, ranged, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
            endif
            call GroupAddUnit(tg, u)
            call GroupRemoveUnit(g, u)
        exitwhen u == null
        endloop
        set aX = aX + w/2 * Cos(angle * 0.01745327)
        set aY = aY + w/2 * Sin(angle * 0.01745327)
        set i = i + 1
    endloop
    call DestroyGroup(g)
    call DestroyGroup(tg)
    set g = null
    set u = null
endfunction
Код cJass
void DamageLine(location a, location b, real w, real dmg, boolean ranged) {
    int i = 0
    real aX = GetLocationX(a), bX = GetLocationX(b)
    real aY = GetLocationY(a), bY = GetLocationY(b)
    real dist = SquareRoot((bX - aX) * (bX - aX) + (bY - aY) * (bY - aY))
    real angle = 57.295827908 * Atan2(bY - aY, bX - aX)
    group g = CreateGroup(), tg = CreateGroup()
    unit u
    loop {
    exitwhen i>2*dist/w
        GroupEnumUnitsInRange(g, aX, aY, w, null)
        loop {
            u = FirstOfGroup(g)
            if !IsUnitInGroup(u, tg) {
                UnitDamageTarget(u, u, dmg, true, ranged, ConvertAttackType(5), ConvertDamageType(4), ConvertWeaponType(0))
            }
            GroupAddUnit(tg, u)
            GroupRemoveUnit(g, u)
        exitwhen u==null
        }
        aX+=w/2 * Cos(angle * 0.01745327)
        aY+=w/2 * Sin(angle * 0.01745327)
        i++
    }
    DestroyGroup(g)
    DestroyGroup(tg)
    g = null
    tg = null
    u = null
}
используются loc, а не координаты; как уже было замечено u наносит урон u; вторая булеан, которая проверяет урон стоит на true. следует использовать еще один аргумент. а вообще никто кроме конечно же тебя ее использовать не будет, кроме наивных newbies.
20

» WarCraft 3 / cJass - дополнение к языку JASS

добавьте такую фичу плиз:
real r=4.

r--
r--.3
r--1.
r++5
========>
local real r=4.

set r=r-1.
set r=r-.3
set r=r-1.
set r=r+5
то есть чтоб не просто прибавление/уменьшение на 1 а на то число, которое указывается
20

» WarCraft 3 / cJass - дополнение к языку JASS

короче хз
я что-то сделал и у меня теперь 1.4.1.5
bee добавил:
и всеравно не пашет. хм
bee добавил:
все, пашет. спс всем
20

» WarCraft 3 / cJass - дополнение к языку JASS

почему не юзаешь фильтры ?
какая тебе разница? омг, про Jass'a
bee добавил:
Hellfim, скачал заного JNGP 5d с wc3c.net
после скачал и установил с твоей ссылки парсер
...
проверил
тоже самое
20

» WarCraft 3 / cJass - дополнение к языку JASS

[quote]Автообновление уже давно не пашет, надо с сайта качать.[/quote]
сейчас скачаю, на будущее скажите адольфу что бы он поправил пожалуйста.
20

» WarCraft 3 / cJass - дополнение к языку JASS

O.O
нажимаю
cJass => check for updates now
он говорит что у меня последняя версия
хм.. баг
авто обновление поставлена галка
20

» WarCraft 3 / cJass - дополнение к языку JASS

v 1.4.1.36

cut
scope CircleStrike initializer OnInit
    
    private nothing OnSpellCast ()
    {
        unit c=GetTriggerUnit(), u=null
        group g=CreateGroup()
        
        GroupEnumUnitsInRange(g,GetUnitX(c),GetUnitY(c),230.,F)
        loop
            set u=FirstOfGroup(g)
            exitwhen u==null
            GroupRemoveUnit(g,u)
            if (GetWidgetLife(u)>.405 && IsUnitEnemy(u,GetOwningPlayer(c)) && !IsUnitType(u,UNIT_TYPE_STRUCTURE))
            {UnitDamageTarget(c,u,(GetUnitAbilityLevel(c,'A003')*.25)*GetHeroAgi(c,true),false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)}
            u=null
        endloop
        
        GroupClear(g)
        
        flush locals
    }
    
    private boolean AbilityIdMath () {return GetSpellAbilityId()=='A003'}
    
    private nothing OnInit ()
    {
    integer i=0
    trigger t=CreateTrigger()
    
    loop
        exitwhen i>11
        TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,F)
        i++
    endloop
    
    TriggerAddCondition(t,Condition(function AbilityIdMath))
    TriggerAddAction(t,function OnSpellCast)
    
    t=null
    }
    
endscope
выдает ошибку:
undefined type: flush
, указывая на строку:
local flush locals
20

» WarCraft 3 / cJass - дополнение к языку JASS

Nekit1234007, да я вкурсе. Про новую запись функции. Я просто думал что и так и так можно. :|
20

» WarCraft 3 / cJass - дополнение к языку JASS

ну значит это такой тоненький намек на то, чтобы сделать
local group g = CreateGroup()
call DestoroyGroup(g)
set g = null
bee добавил:

такс... а все будет норм если я сделаю так
define void = takes nothing returns nothing

function test void
/*lol code*/
endfunction
20

» WarCraft 3 / cJass - дополнение к языку JASS

адольф, flush locals - вещь, респект, только вопрос: если у меня вот так
local group g = CreateGroup()
flush locals
... то будет скомпилировано в
local group g = CreateGroup()
call DestoroyGroup(g)
set g = null
?