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

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

Закрытая тема
 
vladfaust

offline
Опыт: 12,714
Активность:
Утечно?
Вот код на exp:
function Trig_Exp_Func001001003001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) == true )
endfunction

function Trig_Exp_Func001001003002 takes nothing returns boolean
    return ( IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()), GetOwningPlayer(GetDyingUnit())) == true )
endfunction

function Trig_Exp_Func001001003 takes nothing returns boolean
    return GetBooleanAnd( Trig_Exp_Func001001003001(), Trig_Exp_Func001001003002() )
endfunction

function Trig_Exp_Func001A takes nothing returns nothing
    call GroupAddUnitSimple( GetEnumUnit(), udg_ExpGroup )
    call AddHeroXPSwapped( ( ( GetUnitLevel(GetDyingUnit()) * 29 ) / CountUnitsInGroup(udg_ExpGroup) ), GetEnumUnit(), false )
endfunction

function Trig_Exp_Actions takes nothing returns nothing
    call ForGroupBJ( GetUnitsInRangeOfLocMatching(800.00, GetUnitLoc(GetDyingUnit()), Condition(function Trig_Exp_Func001001003)), function Trig_Exp_Func001A )
    call DestroyGroup( GetLastCreatedGroup() )
    call GroupClear( udg_ExpGroup )
    call AddHeroXPSwapped( ( GetUnitLevel(GetDyingUnit()) * 13 ), GetKillingUnitBJ(), false )
endfunction

//===========================================================================
function InitTrig_Exp takes nothing returns nothing
    set gg_trg_Exp = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Exp, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddAction( gg_trg_Exp, function Trig_Exp_Actions )
endfunction
Просто перевел с Гуи. Посмотрел - из локалок только булеан. С группами на джассе плохо дружу. Поэтому скажите - будут утечки? (Вызывается оч часто)
Старый 12.05.2011, 17:42
Еня
Kicked by ScorpioT1000
offline
Опыт: 1
Активность:
всё отлично, прекрасный код
[+] замечание от Hanabishi: 2.2 (троллинг)
Старый 12.05.2011, 17:49
Hanabishi
COOL STATUS
offline
Опыт: отключен
Head_Hunter_44, код ужасен, утечки есть
Старый 12.05.2011, 18:08
Hanabishi
COOL STATUS
offline
Опыт: отключен
вот так, и создай целочисленную переменную ExpGroupCount
function Trig_Exp_Enum_Cond takes nothing returns boolean
    if IsUnitType(GetFilterUnit(),UNIT_TYPE_HERO) and IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(GetDyingUnit())) then
        set udg_ExpGroupCount = udg_ExpGroupCount+1
        return true
    endif
    return false
endfunction

function Trig_Exp_Enum takes nothing returns nothing
    call AddHeroXP((GetUnitLevel(GetDyingUnit())*29)/udg_ExpGroupCount), GetEnumUnit(), false )
endfunction

function Trig_Exp_Actions takes nothing returns nothing
    set udg_ExpGroupCount = 0
    call GroupEnumUnitsInRange(udg_ExpGroup,GetUnitX(GetDyingUnit()),GetUnitY(GetDyingUnit()),800.0,Filter(fu​nction Trig_Exp_Enum_Cond))
    call ForGroup(g,function Trig_Exp_Enum)
    call GroupClear(udg_ExpGroup)
    call AddHeroXP((GetUnitLevel(GetDyingUnit())*13),GetKillingUnit(),false)
endfunction

//===========================================================================
function InitTrig_Exp takes nothing returns nothing
    set gg_trg_Exp = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Exp, EVENT_PLAYER_UNIT_DEATH)
    call TriggerAddAction(gg_trg_Exp, function Trig_Exp_Actions)
endfunction
Старый 12.05.2011, 19:57
vladfaust

offline
Опыт: 12,714
Активность:
Ох спасибо)
Head_Hunter_44 добавил:
Hanabishi, добрый Вы человек...
Тему не закрывайте, ща проверю еще!
Старый 12.05.2011, 19:59
Hanabishi
COOL STATUS
offline
Опыт: отключен
OK.
нафиг вообще точку создавать? координаты юзай
Старый 12.05.2011, 19:59
vladfaust

offline
Опыт: 12,714
Активность:
Вы, Hanabishi, простите, ВЕСЬ код выложили?
Что-то я не заметил объявления local group g.
И еще, udg_ExpGroup - каждый раз создается при работе триггера, обнуляется каждый раз (этот код - опыт при убийстве крипов)
Head_Hunter_44 добавил:
В общем, группу надо создавать. Поэтому оцените, плз низлежащий код на утечки:
function Trig_Exp_Func001001003001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) == true )
endfunction

function Trig_Exp_Func001001003002 takes nothing returns boolean
    return ( IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()), GetOwningPlayer(GetDyingUnit())) == true )
endfunction

function Trig_Exp_Func001001003 takes nothing returns boolean
    return GetBooleanAnd( Trig_Exp_Func001001003001(), Trig_Exp_Func001001003002() )
endfunction

function Trig_Exp_Func001A takes nothing returns nothing
    call AddHeroXPSwapped( ( ( GetUnitLevel(GetDyingUnit()) * 29 ) / CountUnitsInGroup(udg_ExpGroup) ), GetEnumUnit(), false )
endfunction

function Trig_Exp_Actions takes nothing returns nothing
local group g = CreateGroup()
set udg_ExpGroup = g
call GroupEnumUnitsInRangeOfLoc(g, GetUnitX(GetDyingUnit()),GetUnitY(GetDyingUnit()) 800, Condition(function Trig_Exp_Func001001003))
call ForGroup(g, function Trig_Exp_Func001A)
call DestroyGroup(g)
set g = null
set udg_ExpGroup = null
call AddHeroXPSwapped( ( GetUnitLevel(GetDyingUnit()) * 13 ), GetKillingUnit(), false )
endfunction

//===========================================================================
function InitTrig_Exp1 takes nothing returns nothing
    set gg_trg_Exp1 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Exp1, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddAction( gg_trg_Exp1, function Trig_Exp_Actions )
endfunction
Старый 12.05.2011, 20:04
Hanabishi
COOL STATUS
offline
Опыт: отключен
каждый раз создается при работе триггера, обнуляется каждый раз
это не нужно, достаточно один раз создать группу, заносить юнитов и потом чистить
имхо в оптимизации не шаришь
Hanabishi добавил:
и никакие локалки здесь не нужны
Старый 12.05.2011, 20:07
vladfaust

offline
Опыт: 12,714
Активность:
Кароч выдает кучу ошибок на Ваш код. Спасибо, тему закройте)
Старый 12.05.2011, 20:20
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
глобалку надо создать как бы на группу
Старый 12.05.2011, 20:22
vladfaust

offline
Опыт: 12,714
Активность:
Я кстати тож подумал что нужна просто группа в глобалке. Но! А если умрут сразу несколько крипов? Всё может перепутаться! Локалки! Закройте...
Старый 12.05.2011, 20:25
Hanabishi
COOL STATUS
offline
Опыт: отключен
Head_Hunter_44, не может перепутаться, действия выполняются мгновенно
закрыто
Старый 12.05.2011, 20:29
Закрытая тема

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

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

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

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



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