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

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

Ответ
 
Аминь
Crazy about that shit
offline
Опыт: 3,214
Активность:
Система опыта
Помогите решить проблему - компилятор постоянно выдаёт ошибки в тех местах, где казалось бы их быть не может.

Код:
//===========================================================================
function Trig_New_Expsys_Func008C takes nothing returns boolean
    if ( not ( DistanceBetweenPoints(GetUnitLoc(GetKillingUnitBJ()), GetUnitLoc(udg_RedHero)) <= 1500.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_New_Expsys_Func009C takes nothing returns boolean
    if ( not ( DistanceBetweenPoints(GetUnitLoc(GetKillingUnitBJ()), GetUnitLoc(udg_BlueHero)) <= 1500.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_New_Expsys_Func010C takes nothing returns boolean
    if ( not ( DistanceBetweenPoints(GetUnitLoc(GetKillingUnitBJ()), GetUnitLoc(udg_TealHero)) <= 1500.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_New_Expsys_Func011C takes nothing returns boolean
    if ( not ( DistanceBetweenPoints(GetUnitLoc(GetKillingUnitBJ()), GetUnitLoc(udg_PurpleHero)) <= 1500.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_New_Expsys_Func012C takes nothing returns boolean
    if ( not ( DistanceBetweenPoints(GetUnitLoc(GetKillingUnitBJ()), GetUnitLoc(udg_OrangeHero)) <= 1500.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_New_Expsys_Func013C takes nothing returns boolean
    if ( not ( DistanceBetweenPoints(GetUnitLoc(GetKillingUnitBJ()), GetUnitLoc(udg_GreenHero)) <= 1500.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_New_Expsys_Func014C takes nothing returns boolean
    if ( not ( DistanceBetweenPoints(GetUnitLoc(GetKillingUnitBJ()), GetUnitLoc(udg_PinkHero)) <= 1500.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_New_Expsys_Func015C takes nothing returns boolean
    if ( not ( DistanceBetweenPoints(GetUnitLoc(GetKillingUnitBJ()), GetUnitLoc(udg_YellowHero)) <= 1500.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_New_Expsys_Actions takes nothing returns nothing
    local group qwer
    local real count = 0
    local real sum = 0
    local real allexp = 0
    local real koof = 0
    local unit tmp
    local integer gold = 0
    if ( Trig_New_Expsys_Func008C() ) then
        call DisplayTextToForce( bj_FORCE_PLAYER[0], "TRIGSTR_1340" )
        set count = count + 1
        set sum = sum + I2R(GetHeroLevel(udg_RedHero))
        call GroupAddUnit ( qwer, udg_RedHero )
    else
        call DisplayTextToForce( bj_FORCE_PLAYER[0], "TRIGSTR_1341" )
    endif
    if ( Trig_New_Expsys_Func009C() ) then
        call DisplayTextToForce( bj_FORCE_PLAYER[0], "TRIGSTR_1342" )
        set count = count + 1
        set sum = sum + I2R(GetHeroLevel(udg_BlueHero))
        call GroupAddUnit ( qwer, udg_BlueHero )
    else
        call DisplayTextToForce( bj_FORCE_PLAYER[0], "TRIGSTR_1343" )
    endif
    if ( Trig_New_Expsys_Func010C() ) then
        set count = count + 1
        set sum = sum + I2R(GetHeroLevel(udg_TealHero))
        call GroupAddUnit ( qwer, udg_TealHero )
    else
    endif
    if ( Trig_New_Expsys_Func011C() ) then
        set count = count + 1
        set sum = sum + I2R(GetHeroLevel(udg_PurpleHero))
        call GroupAddUnit ( qwer, udg_PurpleHero )
    else
    endif
    if ( Trig_New_Expsys_Func012C() ) then
        set count = count + 1
        set sum = sum + I2R(GetHeroLevel(udg_OrangeHero))
        call GroupAddUnit ( qwer, udg_OrangeHero )
    else
    endif
    if ( Trig_New_Expsys_Func013C() ) then
        set count = count + 1
        set sum = sum + I2R(GetHeroLevel(udg_GreenHero))
        call GroupAddUnit ( qwer, udg_GreenHero )
    else
    endif
    if ( Trig_New_Expsys_Func014C() ) then
        set count = count + 1
        set sum = sum + I2R(GetHeroLevel(udg_PinkHero))
        call GroupAddUnit ( qwer, udg_PinkHero )
    else
    endif
    if ( Trig_New_Expsys_Func015C() ) then
        set count = count + 1
        set sum = sum + I2R(GetHeroLevel(udg_YellowHero))
        call GroupAddUnit ( qwer, udg_YellowHero )
    else
    endif
    set allexp = ( GetUnitStateSwap(UNIT_STATE_MAX_LIFE, GetDyingUnit() ) * (( 0.10 + (count * 0.07))  - 0.07 ) )
    set koof = ( allexp / sum )
    set udg_StateDungeon = R2I(count)
    call DisplayTextToForce( bj_FORCE_PLAYER[0], I2S(udg_StateDungeon) )
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = udg_StateDungeon
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        set tmp = GroupPickRandomUnit(qwer)
        set gold = ( ( GetUnitLevel(GetTriggerUnit()) * 5 ) / R2I(count) )
        call AdjustPlayerStateBJ( R2I(gold), GetOwningPlayer(GetKillingUnitBJ()), PLAYER_STATE_RESOURCE_GOLD )
        call AddHeroXPSwapped((koof * GetHeroLevel(tmp)), tmp, true )
        call GroupRemoveUnit(qwer,  tmp)
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
endfunction

//===========================================================================
function InitTrig_New_Expsys takes nothing returns nothing
    set gg_trg_New_Expsys = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_New_Expsys, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddAction( gg_trg_New_Expsys, function Trig_New_Expsys_Actions )
endfunction
Старый 15.03.2008, 14:33
Лось

offline
Опыт: 7,223
Активность:
Тут нет синтаксических ошибок.
GUI2Jass читать не удобно!
Старый 15.03.2008, 14:45
J
expert
offline
Опыт: 48,447
Активность:
О боже, типы переменых неправельны, почти все, група не создается но юзается (я подозреваю это было главной ошибкой), ты че не умееш пльзоватся массивами? засовывай героев в массив а не в отдельные переменные, это умньшит размер кода больше чем наполовину
Код:
function DistanceBetweenCord takes real AX, real AY, real BX, real BY returns real
    local real dx = BX - AX
    local real dy = BY - AY
    return SquareRoot(dx * dx + dy * dy)
endfunction 

function Trig_New_Expsys_Actions takes nothing returns nothing
    local integer i = 1
    local group qwer = CreateGroup()
    local integer count = 0
    local integer sum = 0
    local real allexp
    local real koof
    local unit tmp
    local real gold = 0
    local unit Kill = GetKillingUnit()
    local real XKill = GetUnitX(Kill)
    local real YKill = GetUnitY(Kill)
    if (DistanceBetweenCord(XKill, YKill, GetUnitX(udg_RedHero), GetUnitY(udg_RedHero)) <= 1500) then
        call DisplayTextToForce( bj_FORCE_PLAYER[0], "TRIGSTR_1340" )
        set count = count + 1
        set sum = sum + GetHeroLevel(udg_RedHero)
        call GroupAddUnit ( qwer, udg_RedHero )
    else
        call DisplayTextToForce( bj_FORCE_PLAYER[0], "TRIGSTR_1341" )
    endif
    if (DistanceBetweenCord(XKill, YKill, GetUnitX(udg_BlueHero), GetUnitY(udg_BlueHero)) <= 1500) then
        call DisplayTextToForce( bj_FORCE_PLAYER[0], "TRIGSTR_1342" )
        set count = count + 1
        set sum = sum + GetHeroLevel(udg_BlueHero)
        call GroupAddUnit ( qwer, udg_BlueHero )
    else
        call DisplayTextToForce( bj_FORCE_PLAYER[0], "TRIGSTR_1343" )
    endif
    if (DistanceBetweenCord(XKill, YKill, GetUnitX(udg_TealHero), GetUnitY(udg_TealHero)) <= 1500) then
        set count = count + 1
        set sum = sum + GetHeroLevel(udg_TealHero)
        call GroupAddUnit ( qwer, udg_TealHero )
    endif
    if (DistanceBetweenCord(XKill, YKill, GetUnitX(udg_PurpleHero), GetUnitY(udg_PurpleHero)) <= 1500) then
        set count = count + 1
        set sum = sum + GetHeroLevel(udg_PurpleHero)
        call GroupAddUnit ( qwer, udg_PurpleHero )
    endif
    if (DistanceBetweenCord(XKill, YKill, GetUnitX(udg_OrangeHero), GetUnitY(udg_OrangeHero)) <= 1500) then
        set count = count + 1
        set sum = sum + GetHeroLevel(udg_OrangeHero)
        call GroupAddUnit ( qwer, udg_OrangeHero )
    endif
    if (DistanceBetweenCord(XKill, YKill, GetUnitX(udg_GreenHero), GetUnitY(udg_GreenHero)) <= 1500) then
        set count = count + 1
        set sum = sum + GetHeroLevel(udg_GreenHero)
        call GroupAddUnit ( qwer, udg_GreenHero )
    endif
    if (DistanceBetweenCord(XKill, YKill, GetUnitX(udg_PinkHero), GetUnitY(udg_PinkHero)) <= 1500) then
        set count = count + 1
        set sum = sum + GetHeroLevel(udg_PinkHero)
        call GroupAddUnit ( qwer, udg_PinkHero )
    endif
    if (DistanceBetweenCord(XKill, YKill, GetUnitX(udg_YellowHero), GetUnitY(udg_YellowHero)) <= 1500) then
        set count = count + 1
        set sum = sum + GetHeroLevel(udg_YellowHero)
        call GroupAddUnit ( qwer, udg_YellowHero )
    endif
    set allexp = GetUnitStateSwap(UNIT_STATE_MAX_LIFE, GetDyingUnit()) * (0.03 + count * 0.07)
    set koof = allexp / I2R(sum)
    set udg_StateDungeon = count
    call DisplayTextToForce( bj_FORCE_PLAYER[0], I2S(udg_StateDungeon) )
    loop
        exitwhen i > udg_StateDungeon
        set tmp = GroupPickRandomUnit(qwer)
        set gold = 5 * GetUnitLevel(GetTriggerUnit()) / I2R(count)
        call AdjustPlayerStateBJ( R2I(gold), GetOwningPlayer(GetKillingUnit()), PLAYER_STATE_RESOURCE_GOLD )
        call AddHeroXP(tmp, R2I(koof) * GetHeroLevel(tmp), true )
        call GroupRemoveUnit(qwer,  tmp)
        set i = i + 1
    endloop
    call DestroyGroup(qwer)
    set qwer = null
endfunction

function InitTrig_New_Expsys takes nothing returns nothing
    set gg_trg_New_Expsys = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_New_Expsys, EVENT_PLAYER_UNIT_DEATH         )
    call TriggerAddAction             (gg_trg_New_Expsys, function Trig_New_Expsys_Actions)
endfunction
Старый 15.03.2008, 15:08
Аминь
Crazy about that shit
offline
Опыт: 3,214
Активность:
Согласен... я его делал в 3 часа ночи =)

Alex27 добавил:
Огромное спасибо Jon. Всё рабоатет :D

Alex27 добавил:
Цитата:
Сообщение от Jon
ты че не умееш пльзоватся массивами? засовывай героев в массив а не в отдельные переменные, это умньшит размер кода больше чем наполовину

Умею, просто мне так нужно.
Старый 15.03.2008, 16:10
Ответ

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

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

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

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



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