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

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

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

offline
Опыт: 3,543
Активность:
Pick Units
В Jass'e я не особо силён, но тем не менее что то умею.
Сегодня решил сделать спелл, там надо пикать юнитов враждебных в опр. зоне, вобщем всё как обычно,
Когда из гуи переводишь в Jass эти дела с пиком и условием , там over9000 функций.
Можно ли всё одной функции сделать? Мне кажется что полюбому
Короче вот для примера код, сделайте тоже самое , только 1 функцией (ну или если уж так нельзя то обьясните и сделайте как можно по другому упростить)
//==================================================================
function Trig_Spell2_Func002Func004A takes nothing returns nothing
    call GroupAddUnitSimple( GetEnumUnit(), udg_My_group )
endfunction

function Trig_Spell2_Func002C takes nothing returns boolean
    if ( not ( IsUnitDeadBJ(GetEnumUnit()) == false ) ) then
        return false
    endif
    if ( not ( IsUnitIdType(GetUnitTypeId(GetEnumUnit()), UNIT_TYPE_STRUCTURE) == false ) ) then
        return false
    endif
    if ( not ( IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(udg_My_unit)) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Spell2_Actions takes nothing returns nothing
    if ( Trig_Spell2_Func002C() ) then
        call ForGroupBJ( GetUnitsInRangeOfLocAll(350.00, GetUnitLoc(udg_My_unit)), function Trig_Spell2_Func002Func004A )
    else
    endif
endfunction

//===========================================================================
function InitTrig_Spell2 takes nothing returns nothing
    set gg_trg_Spell2 = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Spell2, 1.00 )
    call TriggerAddAction( gg_trg_Spell2, function Trig_Spell2_Actions )
endfunction
[+] замечание от Nerevar: Используйте теги форматирования+это не стол заказов

Отредактировано Nerevar, 22.06.2012 в 17:12.
Старый 22.06.2012, 17:03
Doc

offline
Опыт: 63,163
Активность:
Не вижу твоих попыток что-то сделать.
Короче вот для примера код, сделайте тоже самое , только 1 функцией
Почитай правила для начала, это не стол заказов.
Старый 22.06.2012, 17:10
EviLInside

offline
Опыт: 3,543
Активность:
Код собственно ниочём, просто делался для проверки.



Код:
//========================================================================
function Trig_Periodic_Actions takes nothing returns nothing
    local unit u2 = gg_unit_H000_0006
    local group gr
  !!!  call ForGroupBJ (GetUnitsInRangeOfLocAll 350.00, GetUnitLoc(u2))   !!! <--- Вот ошибка, и я подозреваю почему , там должна быть ссылка на функцию, а вот я её убрал думал прокатит...но но ничего не вышло.
    if (IsUnitDeadBJ(GetEnumUnit()) == false and IsUnitIdType(GetUnitTypeId(GetEnumUnit()), UNIT_TYPE_STRUCTURE) == false and IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(u2)) == true 
    call GroupAddUnitSimple( GetEnumUnit(), gr) 
    call KillUnit( GroupPickRandomUnit(gr) )
    else
    endif
 
endfunction

//===========================================================================
function InitTrig_Periodic takes nothing returns nothing
    set gg_trg_Periodic = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Periodic, 1.00 )
    call TriggerAddAction( gg_trg_Periodic, function Trig_Periodic_Actions )
endfunction

Отредактировано EviLInside, 22.06.2012 в 17:23.
Старый 22.06.2012, 17:18
JugHead

offline
Опыт: 1,612
Активность:
EviLInside,
тогда уж так:
выносишь фильтр, по которому набираются юниты в группу, в отдельную функцию, при пике юнитов в группу указываешь его. Дальше либо ForGroup() , либо через цикл делаешь действия для каждого юнита в группе...
И бога ради, не используй BJ.
» Фасткод
((код jass
========================================================================
function filter takes nothing returns boolean
return IsPlayerEnemy(GetOwningPlayer(gg_unit_H000_0006),GetOwningPlayer(GetFilterUnit())) and GetWidgetLife(GetFilterUnit())>=0.405 and not IsUnitIdType(GetUnitTypeId(GetFilterUnit()), UNIT_TYPE_STRUCTURE)
endfunction
function kill takes nothing returns nothing
call KillUnit(GetEnumUnit())
endfunction
function Trig_Periodic_Actions takes nothing returns nothing
local unit u2 = gg_unit_H000_0006
local boolexpr b = Condition(function filter)
local group gr = CreateGroup()
call GroupEnumUnitsInRange(g, GetUnitX(u2), GetUnitY(u2), 350.00, b)
call ForGroup(g, function function kill)
call DestroyBoolExpr(b)
call DestroyGroup(g)
set b = null
set g = null
set u2 = null
endfunction
===========================================================================
function InitTrig_Periodic takes nothing returns nothing
set gg_trg_Periodic = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_Periodic, 1.00 )
call TriggerAddAction( gg_trg_Periodic, function Trig_Periodic_Actions )
endfunction
))

Отредактировано JugHead, 22.06.2012 в 17:41.
Старый 22.06.2012, 17:33
EviLInside

offline
Опыт: 3,543
Активность:
Ясно, просто как бы я всё это пытался для того что б внутри 1 функции что б не делать глобалки, т.к можно отделаться было бы локальными переменными, как бы всё это что б спелл был MUI
Терь буду думать как это всё сделать с JNGP, наверное придёт на помощь Struct или хеш опять юзать) а JNGP тока начал изучать, вроде кое что понятно, но из за того что Jass не очень знаю вытекают новые вопросы)
Старый 22.06.2012, 17:42
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
EviLInside:
Терь буду думать как это всё сделать с JNGP, наверное придёт на помощь Struct или хеш опять юзать) а JNGP тока начал изучать, вроде кое что понятно, но из за того что Jass не очень знаю вытекают новые вопросы)
Читай статьи по ОБЫЧНОМУ жассу и не пытайся прыгнуть выше головы без ног
Старый 22.06.2012, 17:48
Doc

offline
Опыт: 63,163
Активность:
for(unit u: UnitsInRange(r, x, y)){
	if (something){
		KillUnit(u)
	}
}
Старый 22.06.2012, 18:24
Закрытая тема

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

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

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

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



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