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

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

Закрытая тема
 
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
в коде ошибка
function Trig_Regeneratiom_2_passive_Conditions takes nothing returns boolean
    return GetLearnedSkill() == 'A0A3'
endfunction

function Trig_Regeneratiom_2_passive_Actions takes nothing returns nothing
    call UnitAddAbility(GetLearningUnit,'A0A4')
    call SetUnitAbilityLevel( GetLearningUnit, 'A0A4', GetUnitAbilityLevel(GetLearningUnit, 'A0A3',) )
endfunction

//===========================================================================
function InitTrig_Regeneratiom_2_passive takes nothing returns nothing
    set gg_trg_Regeneratiom_2_passive = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Regeneratiom_2_passive, EVENT_PLAYER_HERO_SKILL )
    call TriggerAddCondition( gg_trg_Regeneratiom_2_passive, Condition( function Trig_Regeneratiom_2_passive_Conditions ) )
    call TriggerAddAction( gg_trg_Regeneratiom_2_passive, function Trig_Regeneratiom_2_passive_Actions )
endfunction
помогите разобратся что здесь не так?
Старый 15.04.2012, 06:16
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Cosonic5, ты не поставил скобки после названия функции GetLearningUnit(), после названия всех функций идут скобки, только что их нету в хендлерах, калбеках, (функциях вызывающих другие функции как ForGroup, Condition и другие...)
Вдобавок ты аж 3 раза вызываеш одну и туже функцию, мб присвоить её значение переменной, можно использовать Глобалки или bj_переменные....
Старый 15.04.2012, 06:22
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
quq_CCCP, ааа спс
Старый 15.04.2012, 06:23
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Cosonic5, так куда лучше:
((код jass
function Trig_Regeneratiom_2_passive_Actions takes nothing returns nothing
set bj_lastReplacedUnit = GetLearningUnit()
call UnitAddAbility(bj_lastReplacedUnit,'A0A4')
call SetUnitAbilityLevel( bj_lastReplacedUnit, 'A0A4', GetUnitAbilityLevel(bj_lastReplacedUnit, 'A0A3',) )
set bj_lastReplacedUnit = null
endfunction
))
так куда оптимальнее)
Старый 15.04.2012, 06:28
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
set bj_lastReplacedUnit = GetLearningUnit() 
а это зачем?
Старый 15.04.2012, 06:31
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Cosonic5, это бж переменная, таких переменных довольно много, они инициализируются у тебя в карте не зависимо от твоего желания.... Плюс их по сравнению с локалками, в то что их не надо объявлять в каждой функции, и принципе ненужно обнулять... Ну только это глобальная переменная видимая по всему скрипту карты, используй её только в функциях где с ней делается мгновенное действие, без вейтов и тд...
Старый 15.04.2012, 06:37
DaeDR

offline
Опыт: 8,074
Активность:
Cosonic5, Проще говоря: Глобальная переменная быстрее, чем вызов GetLearningUnit() . Но, только если GetLearningUnit() используется несколько раз
DaeDR добавил:
И другие подобные нативки
Старый 15.04.2012, 06:39
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
DaeDR, там аж 3 раза, так что есть смысл, а так как эти действия мгновенные, то утечки не будет... не успеет использовать её другая функция с такой же переменной...
Старый 15.04.2012, 06:40
DaeDR

offline
Опыт: 8,074
Активность:
quq_CCCP, А я о чем?
Старый 15.04.2012, 06:41
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
DaeDR, GetLearningUnit() в коде Cosonic5,а используется в 3 местах, а с бж переменной только 1... если всюду использовать такие конструкции можно ощутимо выиграть в производительности кода...
Старый 15.04.2012, 06:43
DaeDR

offline
Опыт: 8,074
Активность:
quq_CCCP, Так я именно это и имел в виду, только в 2х словах. Слово "несколько" - больше 2-3х
Старый 15.04.2012, 06:46
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
function Trig_Shield_Attack_Conditions takes nothing returns boolean
    return GetTriggerUnit() == udg_Shield_Marshal_Cater
endfunction

function Trig_Shield_Attack_Func008C takes nothing returns boolean
    if ( not ( udg_Marshal_Shield_XP[2] <= 0 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Shield_Attack_Actions takes nothing returns nothing
    local effect f
    call AddSpecialEffectTarget( udg_Shield_Marshal_Cater, "Abilities\\Spells\\Human\\Defend\\DefendCaster.mdl", "origin" )
    set f = bj_lastCreatedEffect()
    call DestroyEffect( f )
    set f = null
    set udg_Marshal_Shield_XP[2] = ( udg_Marshal_Shield_XP[2] - R2I(GetEventDamage()) )
    call DisplayTextToForce( GetPlayersAll(), I2S(udg_Marshal_Shield_XP[2]) )
    if ( Trig_Shield_Attack_Func008C() ) then
        call CreateUnitAtLoc( GetOwningPlayer(udg_Shield_Marshal_Cater), 'h00L', GetUnitLoc(udg_Shield_Marshal_Cater), 1 )
        call UnitAddAbility( bj_lastCreatedUnit(), 'A0AB' )
        call SetUnitAbilityLevel( bj_lastCreatedUnit(), 'A0AB', GetUnitAbilityLevel(udg_Shield_Marshal_Cater, 'A0AA' )
        call UnitApplyTimedLife( bj_lastCreatedUnit(), 'BTLF', 3.00 )
        call IssueImmediateOrder( bj_lastCreatedUnit(), "fanofknives" )
        call DestroyEffect( udg_Marshal_Shield_Specef[1] )
        set udg_Marshal_Shield_XP[2] = 0
        set udg_Shield_Marshal_Cater = null
        call DisableTrigger( GetTriggeringTrigger() )
    else
        call DoNothing(  )
    endif
endfunction

//===========================================================================
function InitTrig_Shield_Attack takes nothing returns nothing
    set gg_trg_Shield_Attack = CreateTrigger(  )
    call DisableTrigger( gg_trg_Shield_Attack )
    call TriggerAddCondition( gg_trg_Shield_Attack, Condition( function Trig_Shield_Attack_Conditions ) )
    call TriggerAddAction( gg_trg_Shield_Attack, function Trig_Shield_Attack_Actions )
endfunction
Вот еще один незамысловатый код из за него нехочет запускать карту- Сам этот Тригер событие получает урон.
Старый 15.04.2012, 06:50
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
DaeDR, просто меня удивляют нытики которые насколько назадротились на jass что уже и глобальные переменные отвергают и bj шки, тока хештейблы и структуры v/cJass, забывая что это порой телега с авиационным двигателем... И нету смысла так заморачиватся с некоторыми функциями.
quq_CCCP добавил:
Cosonic5, аж плакать хочетсо! mSey матом кроет .... bj_lastCreatedEffect это не функция а глобальная переменная, и возвращяет ранее сзданый эффект только в том случае если ты его создал BJ функцией
((код jass
function AddSpecialEffectTargetUnitBJ takes string attachPointName, widget targetWidget, string modelName returns effect
set bj_lastCreatedEffect = AddSpecialEffectTarget(modelName, targetWidget, attachPointName)
return bj_lastCreatedEffect
endfunction
))
или
((код jass
function AddSpecialEffectLocBJ takes location where, string modelName returns effect
set bj_lastCreatedEffect = AddSpecialEffectLoc(modelName, where)
return bj_lastCreatedEffect
endfunction
))
и так далее, лучше эти функции не юзать, толку 0 можно юзать их содержимое в своей функции вместо того чтобы вызывать их...
quq_CCCP добавил:
Cosonic5, щяс будем матюгать тебя дальше...
((код jass
else
call DoNothing( )
endif
))
вместо этого посто ставим endif ...
call DisableTrigger( GetTriggeringTrigger() ) заменим на call DisableTrigger( gg_trg_Shield_Attack )
так как нам заранее известна ссылка на триггер (gg_trg_Shield_Attack) то нету необходимотсти юзать GetTriggeringTrigger().
Старый 15.04.2012, 06:59
DaeDR

offline
Опыт: 8,074
Активность:
bj_lastCreatedUnit - просто переменная, поэтому без скобок.
» code
function Trig_Shield_Attack_Conditions takes nothing returns boolean
    return GetTriggerUnit() == udg_Shield_Marshal_Cater
endfunction

function Trig_Shield_Attack_Actions takes nothing returns nothing
    local effect f = AddSpecialEffectTarget( udg_Shield_Marshal_Cater, "Abilities\\Spells\\Human\\Defend\\DefendCaster.mdl", "origin" )
    call DestroyEffect( f )
    set f = null
    set udg_Marshal_Shield_XP[2] = ( udg_Marshal_Shield_XP[2] - R2I(GetEventDamage()) )
    call DisplayTextToForce( GetPlayersAll(), I2S(udg_Marshal_Shield_XP[2]) )
    if ( udg_Marshal_Shield_XP[2] <= 0 ) then
        set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer(udg_Shield_Marshal_Cater), 'h00L', GetUnitX(udg_Shield_Marshal_Cater), GetUnitY(udg_Shield_Marshal_Cater), 1 )
        call UnitAddAbility( bj_lastCreatedUnit, 'A0AB' )
        call SetUnitAbilityLevel( bj_lastCreatedUnit, 'A0AB', GetUnitAbilityLevel(udg_Shield_Marshal_Cater, 'A0AA' )
        call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 3.00 )
        call IssueImmediateOrder( bj_lastCreatedUnit, "fanofknives" )
        call DestroyEffect( udg_Marshal_Shield_Specef[1] )
        set udg_Marshal_Shield_XP[2] = 0
        set udg_Shield_Marshal_Cater = null
        call DisableTrigger( gg_trg_Shield_Attack )
    endif
endfunction

//===========================================================================
function InitTrig_Shield_Attack takes nothing returns nothing
    set gg_trg_Shield_Attack = CreateTrigger(  )
    call DisableTrigger( gg_trg_Shield_Attack )
    call TriggerAddCondition( gg_trg_Shield_Attack, Condition( function Trig_Shield_Attack_Conditions ) )
    call TriggerAddAction( gg_trg_Shield_Attack, function Trig_Shield_Attack_Actions )
endfunction
Старый 15.04.2012, 07:00
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
quq_CCCP, получается локальная переменная типа эффект не нужна?
Старый 15.04.2012, 07:00
DaeDR

offline
Опыт: 8,074
Активность:
Cosonic5, Да, можно и без нее
Можно вообще вот так:
call DestroyEffect( AddSpecialEffectTarget( udg_Shield_Marshal_Cater, "Abilities\\Spells\\Human\\Defend\\DefendCaster.mdl", "origin" ) )
Старый 15.04.2012, 07:02
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
DaeDR, опаять GetTriggeringTrigger() вы чё лоальный триггер юзайте? ну у нас же есть gg_trg_Shield_Attack.... там хранится наш триггер, смысл юзать GetTriggeringTrigger()?
Старый 15.04.2012, 07:02
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
где то ошибка(
bj_lastReplacedUnit
для чего используется эта переменная для замены юнита чтоль? я понял что это переменная но вроде как заменяет юнита?
Cosonic5 добавил:
» Code
function Trig_Shield_Attack_Conditions takes nothing returns boolean
    return GetTriggerUnit() == udg_Shield_Marshal_Cater
endfunction

function Trig_Shield_Attack_Actions takes nothing returns nothing
    local effect f = AddSpecialEffectTarget( udg_Shield_Marshal_Cater, "Abilities\\Spells\\Human\\Defend\\DefendCaster.mdl", "origin" )
    call DestroyEffect( f )
    set f = null
    set udg_Marshal_Shield_XP[2] = ( udg_Marshal_Shield_XP[2] - R2I(GetEventDamage()) )
    call DisplayTextToForce( GetPlayersAll(), I2S(udg_Marshal_Shield_XP[2]) )
    if ( udg_Marshal_Shield_XP[2] <= 0 ) then
        set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer(udg_Shield_Marshal_Cater), 'h00L', GetUnitX(udg_Shield_Marshal_Cater), GetUnitY(udg_Shield_Marshal_Cater), 1 )
        call UnitAddAbility( bj_lastCreatedUnit, 'A0AB' )
        call SetUnitAbilityLevel( bj_lastCreatedUnit, 'A0AB', GetUnitAbilityLevel(udg_Shield_Marshal_Cater, 'A0AA' )
        call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 3.00 )
        call IssueImmediateOrder( bj_lastCreatedUnit, "fanofknives" )
        call DestroyEffect( udg_Marshal_Shield_Specef[1] )
        set udg_Marshal_Shield_XP[2] = 0
        set udg_Shield_Marshal_Cater = null
        call DisableTrigger( gg_trg_Shield_Attack )
    endif
endfunction

//===========================================================================
function InitTrig_Shield_Attack takes nothing returns nothing
    set gg_trg_Shield_Attack = CreateTrigger(  )
    call DisableTrigger( gg_trg_Shield_Attack )
    call TriggerAddCondition( gg_trg_Shield_Attack, Condition( function Trig_Shield_Attack_Conditions ) )
    call TriggerAddAction( gg_trg_Shield_Attack, function Trig_Shield_Attack_Actions )
endfunction
Тут около 5 ошибок
Старый 15.04.2012, 07:19
DaeDR

offline
Опыт: 8,074
Активность:
Cosonic5, Это просто переменная. Они ничего не заменяет! В варе есть около 2-3 десятков переменных подобных.
DaeDR добавил:
Сократи вот это
local effect f = AddSpecialEffectTarget( udg_Shield_Marshal_Cater, "Abilities\\Spells\\Human\\Defend\\DefendCaster.mdl", "origin" )
    call DestroyEffect( f )
    set f = null
до этого:
call DestroyEffect( AddSpecialEffectTarget( udg_Shield_Marshal_Cater, "Abilities\\Spells\\Human\\Defend\\DefendCaster.mdl", "origin" ) )
Может хоть строчки, где ошибки?
Старый 15.04.2012, 07:22
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
DaeDR, 1 ошибка
call DestroyEffect( AddSpecialEffectTarget( udg_Shield_Marshal_Cater, "Abilities\\Spells\\Human\\Defend\\DefendCaster.mdl", "origin" ) )
неверный тип аргумента (string)
2 ошибка
call SetUnitAbilityLevel( bj_lastCreatedUnit, 'A0AB', GetUnitAbilityLevel(udg_Shield_Marshal_Cater, 'A0AA' )
Отсутствует символ (string)
Старый 15.04.2012, 07:28
Закрытая тема

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

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

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

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



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