XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
AdicHelper падает из за этого кода
 function Trig_MovingSys_Filter takes nothing returns boolean
    return IsUnitType(GetFilterUnit(),UNIT_TYPE_DEAD) != true and IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(udg_MS_u[udg_MS_cycle])) == true
endfunction

function IsPointOutOfMap takes real x, real y returns boolean
    if x < GetRectMinX(bj_mapInitialPlayableArea) then
        set x = GetRectMinX(bj_mapInitialPlayableArea)
        return true
    endif 
    if x > GetRectMaxX(bj_mapInitialPlayableArea) then
        set x = GetRectMaxX(bj_mapInitialPlayableArea)
        return true
    endif
    if y < GetRectMinY(bj_mapInitialPlayableArea) then
        set y = GetRectMinY(bj_mapInitialPlayableArea)
        return true
    endif 
    if y > GetRectMaxY(bj_mapInitialPlayableArea) then
        set y = GetRectMaxY(bj_mapInitialPlayableArea)
        return true
    endif  
    return false
endfunction

function CoordProjectionX takes real x, real d, real a returns real
    local real newx = x + d * Cos(a * .0174532)      
    if IsPointOutOfMap(newx,0) then
        return newx
    endif
    return newx 
endfunction

function CoordProjectionY takes real y, real d, real a returns real
    local real newy = y + d * Sin(a * .0174532)     
    if IsPointOutOfMap(0,newy) then
        return newy
    endif
    return newy    
endfunction

function CompareCoordsHeight takes real x1, real y1, real x2, real y2 returns real
    local location loc1 = Location(x1,y1)
    local location loc2 = Location(x2,y2)
    local real z1 = GetLocationZ(loc1)    
    local real z2 = GetLocationZ(loc2)
    call RemoveLocation(loc1)   
    call RemoveLocation(loc2)
    set loc1 = null
    set loc2 = null
    return z2 - z1 
endfunction 

function Trig_MovingSys_Group takes nothing returns nothing
    if udg_MS_Shell[udg_MS_cycle] == true then
        set udg_MS_Timer[udg_MS_cycle] = 0.
    endif
    call DestroyEffect(AddSpecialEffect(udg_MS_SFX2[udg_MS_cycle],GetWidgetX(GetEnumUnit()),GetWidgetY(GetEnu​mUnit())))
    udg_Weak = LoadReal(udg_Hash, GetHandleId(GetEnumUnit()), udg_MS_AttackType[udg_MS_cycle]) // Выгружаем нужную уязвимость, в соответствии с номером типа атаки.
    // просчет урона в зависимости от атакующего параметра и защитного параметра выбранных юнитов.
    call UnitDamageTarget(udg_MS_u[udg_MS_cycle],GetEnumUnit(),udg_MS_Damage[udg_MS_cycle] - (udg_MS_Damage[udg_MS_cycle] * udg_Weak) ,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
endfunction

set udg_MS_cycle = 1
    loop
        exitwhen udg_MS_cycle > udg_MS_cycle_Count
        set udg_MS_Timer[udg_MS_cycle] = udg_MS_Timer[udg_MS_cycle] - .04
        if udg_MS_Timer[udg_MS_cycle] <= 0. then
            call DestroyEffect(AddSpecialEffect(udg_MS_SFX2[udg_MS_cycle],GetWidgetX(udg_MS_u[udg_MS_cycle]),GetWidge​tY(udg_MS_u[udg_MS_cycle])))
            set udg_MS_u[udg_MS_cycle] = null
            set udg_MS_Ang[udg_MS_cycle] = 0
            set udg_MS_Ang1[udg_MS_cycle] = 0
            set udg_MS_Damage[udg_MS_cycle] = 0
            set udg_MS_Damager[udg_MS_cycle] = false
            set udg_MS_Distantion[udg_MS_cycle] = 0
            set udg_MS_Fly[udg_MS_cycle] = false
            set udg_MS_Range[udg_MS_cycle] = 0
            set udg_MS_Remove[udg_MS_cycle] = false
            set udg_MS_Shell[udg_MS_cycle] = false
            set udg_MS_Speed[udg_MS_cycle] = 0
            set udg_MS_FlyHeight[udg_MS_cycle] = 0
            set udg_MS_Timer[udg_MS_cycle] = 0
            set udg_MS_SFX[udg_MS_cycle] = "" 
            set udg_MS_SFX1[udg_MS_cycle] = ""
            set udg_MS_SFX2[udg_MS_cycle] = ""
            if udg_MS_Remove[udg_MS_cycle] == true then
                call RemoveUnit(udg_MS_u[udg_MS_cycle])
            endif
            set udg_MS_u[udg_MS_cycle] = udg_MS_u[udg_MS_cycle_Count]
            set udg_MS_Ang[udg_MS_cycle] = udg_MS_Ang[udg_MS_cycle_Count]
            set udg_MS_Damage[udg_MS_cycle] = udg_MS_Damage[udg_MS_cycle_Count]
            set udg_MS_Damager[udg_MS_cycle] = udg_MS_Damager[udg_MS_cycle_Count]
            set udg_MS_Distantion[udg_MS_cycle] = udg_MS_Distantion[udg_MS_cycle_Count]
            set udg_MS_Fly[udg_MS_cycle] = udg_MS_Fly[udg_MS_cycle_Count]
            set udg_MS_Range[udg_MS_cycle] = udg_MS_Range[udg_MS_cycle_Count]
            set udg_MS_Remove[udg_MS_cycle] = udg_MS_Remove[udg_MS_cycle_Count]
            set udg_MS_Shell[udg_MS_cycle] = udg_MS_Shell[udg_MS_cycle_Count]
            set udg_MS_Speed[udg_MS_cycle] = udg_MS_Speed[udg_MS_cycle_Count]
            set udg_MS_FlyHeight[udg_MS_cycle] = udg_MS_FlyHeight[udg_MS_cycle_Count]
            set udg_MS_Timer[udg_MS_cycle] = udg_MS_Timer[udg_MS_cycle_Count]
            set udg_MS_SFX[udg_MS_cycle] = udg_MS_SFX[udg_MS_cycle_Count]
            set udg_MS_SFX1[udg_MS_cycle] = udg_MS_SFX1[udg_MS_cycle_Count]
            set udg_MS_SFX2[udg_MS_cycle] = udg_MS_SFX2[udg_MS_cycle_Count]
            set udg_MS_cycle_Count = udg_MS_cycle_Count - 1
        else
            set Axis_X = CoordProjectionX(GetWidgetX(udg_MS_u[udg_MS_cycle]),udg_MS_Speed[udg_MS_cycle],udg_MS_Ang[udg_MS_cyc​le])
            set Axis_Y = CoordProjectionY(GetWidgetY(udg_MS_u[udg_MS_cycle]),udg_MS_Speed[udg_MS_cycle],udg_MS_Ang[udg_MS_cyc​le])
            call SetUnitX(udg_MS_u[udg_MS_cycle],Axis_X)
            call SetUnitY(udg_MS_u[udg_MS_cycle],Axis_Y)
            call DestroyEffect(AddSpecialEffect(udg_MS_SFX[udg_MS_cycle],Axis_X,Axis_Y))
            if udg_MS_Zcontrol[udg_MS_cycle] == true then
                    local real wx
                    local real wy
                    set wx = GetWidgetX(udg_MS_u[udg_MS_cycle])
                    set wy = GetWidgetY(udg_MS_u[udg_MS_cycle])
                    set z = CompareCoordsHeight(wx,wy,Axis_X,Axis_Y)
                    if z > 200. then
                        set udg_MS_Timer[udg_MS_cycle] = 0
                        call SetUnitFlyHeight(udg_MS_u[udg_MS_cycle],udg_MS_FlyHeight[udg_MS_cycle] + 0,600.)
                    endif    
            endif
            
            if udg_MS_Fly[udg_MS_cycle] == true then
                call UnitAddAbility(udg_MS_u[udg_MS_cycle],'Amrf')
                call UnitRemoveAbility(udg_MS_u[udg_MS_cycle],'Amrf')
                if udg_MS_Speed[udg_MS_cycle] * udg_MS_Timer[udg_MS_cycle] >= udg_MS_Distantion[udg_MS_cycle] / 2. and udg_MS_FlyHeight[udg_MS_cycle] <= 400. then
                    set udg_MS_FlyHeight[udg_MS_cycle] = udg_MS_FlyHeight[udg_MS_cycle] + 30.
                else
                    set udg_MS_FlyHeight[udg_MS_cycle] = udg_MS_FlyHeight[udg_MS_cycle] - 30.
                endif
                call SetUnitFlyHeight(udg_MS_u[udg_MS_cycle],udg_MS_FlyHeight[udg_MS_cycle] + z,0.)
            endif
            if udg_MS_Damager[udg_MS_cycle] == true then
                call GroupEnumUnitsInRange(udg_Dummy_UG,Axis_X,Axis_Y,udg_MS_Range[udg_MS_cycle],Filter(function Trig_MovingSys_Filter))
                call ForGroup(udg_Dummy_UG,function Trig_MovingSys_Group)
                call GroupClear(udg_Dummy_UG)
            endif
        endif
        set udg_MS_cycle = udg_MS_cycle + 1
    endloop
endfunction

//===========================================================================
function InitTrig_MovingSys takes nothing returns nothing
    set gg_trg_MovingSys = CreateTrigger()
    call TriggerRegisterTimerEvent(gg_trg_MovingSys,.04,true)
    call TriggerAddAction(gg_trg_MovingSys,function Trig_MovingS_Actions)
endfunction
В общем при проверке этого кода Адик падает, а без него ессно выдается куча ошибок, хотя бы по причине объявления локалок не в начале функции. Прошу проверить код, и подсказать, где я накосячил так, что аж адик в обморок падает О_о

Отредактировано alexkill, 18.07.2010 в 21:20.
Старый 18.07.2010, 21:06
newzoom
Kicked by ScorpioT1002
offline
Опыт: 207
Активность:
Faion, попробуй отключить AdicHelper (я вообще не вижу, где используется cJass в коде).
Юзай тег /code/.
Старый 18.07.2010, 21:17
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Вернул к утренней версии, не критует, значит ошибка в этой части
function Trig_MovingSys_Group takes nothing returns nothing
    if udg_MS_Shell[udg_MS_cycle] == true then
        set udg_MS_Timer[udg_MS_cycle] = 0.
    endif
    call DestroyEffect(AddSpecialEffect(udg_MS_SFX2[udg_MS_cycle],GetWidgetX(GetEnumUnit()),GetWidgetY(GetEnu​mUnit())))
    local real Weak = LoadReal(udg_Hash, GetHandleId(GetEnumUnit()), udg_MS_AttackType[udg_MS_cycle]) // Выгружаем нужную уязвимость, в соответствии с номером типа атаки.
    // просчет урона в зависимости от атакующего параметра и защитного параметра выбранных юнитов.
    call UnitDamageTarget(udg_MS_u[udg_MS_cycle],GetEnumUnit(),udg_MS_Damage[udg_MS_cycle] - (udg_MS_Damage[udg_MS_cycle] * Weak) ,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
endfunction
Я в жасс новичек, так что могу делать глупые ошибки.
Старый 18.07.2010, 21:28
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
    // просчет урона в зависимости от атакующего параметра и защитного параметра выбранных юнитов.
    call UnitDamageTarget(udg_MS_u[udg_MS_cycle],GetEnumUnit(),udg_MS_Damage[udg_MS_cycle] - (udg_MS_Damage[udg_MS_cycle] * udg_Weak) ,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
endfunction // no comments...

set udg_MS_cycle = 1
Убери endfunction.

udg_Weak = LoadReal(udg_Hash, GetHandleId(GetEnumUnit()), udg_MS_AttackType[udg_MS_cycle]) // Выгружаем нужную уязвимость, в соответствии с номером типа атаки.
Здесь call почему-то нет. Хотя при включенном адикхелпере без разницы.
Старый 18.07.2010, 22:12
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Тему можно закрыть, пофиксил, не уверен, но вроде при загрузке, хт не нравится когда указывают нужную ячейку в виде массива.
Старый 18.07.2010, 22:21
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 11:25.