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

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

Закрытая тема
 
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
В чем ошибка и как ее исправить?
Вот код:
» раскрыть

Код:
function Trig_Dobica_Gold_J_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A007'
endfunction

function Trig_Dobica_Gold_J_Actions takes nothing returns nothing
    local unit un=GetSpellAbilityUnit()
    local location pon=GetUnitLoc(un)
    local unit un2=GetEnumUnit()
    
    call ForGroupBJ( GetUnitsInRangeOfLocAll(250.00, pon), Condition( DobGold boolean() {
    if GetUnitTypeId(un2) == 'n000' and GetResourceAmount(un2) > 0 then
       call AdjustPlayerStateBJ( 1, GetOwningPlayer(un),PLAYER_STATE_RESOURCE_GOLD)
       call AddResourceAmountBJ( -1, un2)
    else
       call IssueImmediateOrderBJ( un,"stop")
    endif    
    return false
    })
    
    set un=null
    set un2=null
    set pon=null
endfunction

//===========================================================================
function InitTrig_Dobica_Gold_J takes nothing returns nothing
    set gg_trg_Dobica_Gold_J = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Dobica_Gold_J, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Dobica_Gold_J, Condition( function Trig_Dobica_Gold_J_Conditions ) )
    call TriggerAddAction( gg_trg_Dobica_Gold_J, function Trig_Dobica_Gold_J_Actions )
endfunction



Оригинал на триггерах, правда немного отличается...




Немного подумав, я сделал следующее
» раскрыть
Код:
function Trig_Dobica_Gold_J_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A007'
endfunction

function Trig_Dobica_Gold_J_Actions takes nothing returns nothing
    local unit un=GetSpellAbilityUnit()
    local location pon=GetUnitLoc(un)
    local unit un2=GetEnumUnit()
    
    if GetUnitTypeId(un2) == 'n000' and GetResourceAmount(un2) > 0 then
       call AdjustPlayerStateBJ( 1, GetOwningPlayer(un),PLAYER_STATE_RESOURCE_GOLD)
       call AddResourceAmountBJ( -1, un2)
    else
       call IssueImmediateOrderBJ( un,"stop")
    endif
    
    set un=null
    set un2=null
    set pon=null
endfunction

//===========================================================================
function InitTrig_Dobica_Gold_J_2 takes nothing returns nothing
    set gg_trg_Dobica_Gold_J_2 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Dobica_Gold_J_2, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Dobica_Gold_J_2, Condition( function Trig_Dobica_Gold_J_Conditions ) )
    call TriggerAddAction( gg_trg_Dobica_Gold_J_2, function Trig_Dobica_Gold_J_Actions )
endfunction

Но он тоже неработает, тоесть условие НЕ проходит...


A007 способность канал, цель которой рудники.
n000 рудник почти стандартный кроме количества голда
Старый 30.06.2012, 17:50
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
Hatsume_Hate добавил:
и вообще непонятно что за хрень у тебя тут
call ForGroupBJ( GetUnitsInRangeOfLocAll(250.00, pon), Condition( DobGold boolean() {
    if GetUnitTypeId(un2) == 'n000' and GetResourceAmount(un2) > 0 then
       call AdjustPlayerStateBJ( 1, GetOwningPlayer(un),PLAYER_STATE_RESOURCE_GOLD)
       call AddResourceAmountBJ( -1, un2)
    else
       call IssueImmediateOrderBJ( un,"stop")
    endif    
    return false
    })
тонны бж, мои глаза кровоточат т_т
Старый 30.06.2012, 18:06
Lipen

offline
Опыт: 1,550
Активность:
» Тык
function Trig_Dobica_Gold_J_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A007'
endfunction

function Trig_Dobica_Gold_J_Actions takes nothing returns nothing
    local unit un=GetTriggerUnit()
    local unit un2=GetSpellTargetUnit()
    local player p = GetOwningPlayer(un)
    local integer gold = GetPlayerState(p, PLAYER_STATE_RESOURCE_GOLD)

    if GetUnitTypeId(un2) == 'n000' and GetResourceAmount(un2) > 0 then
       call SetPlayerState(p, PLAYER_STATE_RESOURCE_GOLD, gold+1)
       call AddResourceAmount(un2, -1)
    else
       call IssueImmediateOrder( un,"stop")
    endif

    set un=null
    set un2=null
endfunction

//===========================================================================
function InitTrig_Dobica_Gold_J_2 takes nothing returns nothing
    set gg_trg_Dobica_Gold_J_2 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Dobica_Gold_J_2, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Dobica_Gold_J_2, Condition( function Trig_Dobica_Gold_J_Conditions ) )
    call TriggerAddAction( gg_trg_Dobica_Gold_J_2, function Trig_Dobica_Gold_J_Actions )
endfunction
Condition( DobGold boolean() {
Если это попытка вставить сиджасс, то нужно писать lambda, а возвращаемый тип должен быть перед именем.
Condition(lambda boolean DobGold {
Старый 30.06.2012, 18:06
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
Да, спасибо Lipen, за
GetSpellTargetUnit()
И за lamda, а то я думал, что lamda так для прикола название такое... =)

А с таймерами lamda прокатит? Ну так чтобы внутри ОДНОй функции было еще и истечение таймера, тоесть через использование Lamda или cJass.

Xipxop добавил:
Цитата:
Сообщение от Hatsume_Hate
тонны бж, мои глаза кровоточат т_т


А BJ это часть названия функции, ее убрать не получится, так как не будет работать. =)
Старый 30.06.2012, 18:21
Lipen

offline
Опыт: 1,550
Активность:
Xipxop, да.
TimerStart(..., lambda void Timer() {
//...
})
А BJ это часть названия функции, ее убрать не получится, так как не будет работать. =)
BJ раскрываются, а не убирается "BJ" из названия.
Старый 30.06.2012, 18:23
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
Цитата:
Сообщение от Lipen
А BJ это часть названия функции, ее убрать не получится, так как не будет работать. =)
BJ раскрываются, а не убирается "BJ" из названия.


То есть можно более подробнее о BJ
просто видел некоторые функции имеют 2 вида xxxBJ и xxx в поиске искал нету
Старый 30.06.2012, 18:28
Lipen

offline
Опыт: 1,550
Активность:
Xipxop, ставим JNGP, заходим Function list, ищем бж функцию, смотрим из чего она состоит, раскрываем пока не останутся одни нативки.
Старый 30.06.2012, 18:33
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Вообще да - рьяное раскрытие бж не всегда имеет очень потрясное соотношение размер полученного кода\повышение производительности и больше смахивает на рак мозга и манию преследования
Сжасс изучать сразу после гуи это как то не очень
Лучше сначала изучить чистый жасс,затем уже если не будет хватать возможностей(а это надо постараться) то уже можно искать их у в\сжасса
Xipxop, вообще да - установи жнгп - будет подсветка функций+возможность их раскрытия
Старый 30.06.2012, 18:49
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
Ладно, думаю тема закрыта.
Знаний на изучения cjass, не зная еще Jass хватит, поверьте

Тема закрыта

Старый 30.06.2012, 21:11
Закрытая тема

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

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

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

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



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