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

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

Ответ
 
Aspid

offline
Опыт: 8,361
Активность:
Тупой вопрос
Энто текст примера симпл локс из статьи димонаТ. Объясните что тут должно происходить
Автор пишет что тут введены локальные переменные для того что бы убрать тригерный конфликт. Меж тем он все равно остается (имхо при одновременном касте абилы спецэффект появляется не один а несколько. я узнал это изменив спецэффект с восклицательного на вопросительный знак.)

Код:
function Trig_Cast_fireball_method_1_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'Awfb' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Cast_fireball_method_1_Actions takes nothing returns nothing
    // это команды создать две локальных переменных u - типа юнит и e типа спецэффект
    // такие команды должны располагаться в самом верху
    local unit u
    local effect e
    set udg_unit = GetSpellTargetUnit()
    // Все глобальные переменные выглядят в jass как udg_[название переменной]
    // этой командой мы поместили в локальную переменную u значение глобальной переменной юнит
    set u = udg_unit
    // скорость снаяряда 1000 - смотрел в редакторе объектов
    call PolledWait( ( DistanceBetweenPoints(GetUnitLoc(GetSpellAbilityUnit()), GetUnitLoc(GetSpellTargetUnit())) / 1000.00 ) )
    // после назначенного срока, мы помещаем значение локальной переменной обратно в глобальную
    set udg_unit = u
    call AddSpecialEffectTargetUnitBJ( "overhead", udg_unit, "Abilities\\Spells\\Other\\TalkToMe\\TalkToMe.mdl" )
    set udg_se = GetLastCreatedEffectBJ()
    // помещаем в переменную e значение глобальной переменной se
    set e = udg_se
    call PolledWait( 3.00 )
    // а спустя нужное время делаем все наоборот
    set  udg_se = e
    call DestroyEffectBJ( udg_se )
endfunction

//===========================================================================
function InitTrig_Cast_fireball_method_1 takes nothing returns nothing
    set gg_trg_Cast_fireball_method_1 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Cast_fireball_method_1, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Cast_fireball_method_1, Condition( function Trig_Cast_fireball_method_1_Conditions ) )
    call TriggerAddAction( gg_trg_Cast_fireball_method_1, function Trig_Cast_fireball_method_1_Actions )
endfunction
Старый 14.04.2006, 02:53
Iron
Листовой
offline
Опыт: 24,427
Активность:
Все тут правильно, т.к. в глобальную переменную значение помещается на 0 сек. (относительный 0, т.к. необходимовремя для преобразований). А во время wait-ов значение хранится в локалках, и зн. при одновременном касте здля каждого каста в нужное время будет создан эффект, а потом ровно через 3 сек. для каждого он будет убран.
Старый 14.04.2006, 08:30
dk

offline
Опыт: 60,293
Активность:
Iron прав Avatar при касте он запоминает нужные переменные в глобальные, после сохраняет в локальные и в дальнейшем локальные снова приравнивает к глобальным и т.д. Теоретически этот способ можно запороть, но нужно будет применить это заклинание одновременно, причем абсолютно одновременно, а это практически невозможно!
Старый 14.04.2006, 11:59
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
Честно говоря я непонял, зачем все ети переведения в глобальные если можно так :
Код:
function Trig_Cast_fireball_method_1_Conditions takes nothing returns boolean
    return GetSpellAbilityId()=='Awfb' 
endfunction

function Trig_Cast_fireball_method_1_Actions takes nothing returns nothing
    local unit u=GetSpellTargetUnit()
    local effect e=null
    call TriggerSleepAction((DistanceBetweenPoints(GetUnitLoc(GetSpellAbilityUnit()), GetUnitLoc(u)) /1000.00))
    call AddSpecialEffectTargetUnitBJ("overhead",u,"Abilities\\Spells\\Other\\TalkToMe\\TalkToMe.mdl")
    set e=GetLastCreatedSpecialEffect()
    call TriggerSleepAction(3)
    call DestroyEffectBJ(e)
   set e=null
   set u=null
endfunction

//===========================================================================
function InitTrig_Cast_fireball_method_1 takes nothing returns nothing
    set gg_trg_Cast_fireball_method_1=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Cast_fireball_method_1, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(gg_trg_Cast_fireball_method_1, Condition(function Trig_Cast_fireball_method_1_Conditions))
    call TriggerAddAction(gg_trg_Cast_fireball_method_1, function Trig_Cast_fireball_method_1_Actions)
endfunction
Старый 14.04.2006, 14:51
dk

offline
Опыт: 60,293
Активность:
Понимаешь MrSmiLe ДимонТ хотел показать какая бывает от них польза, без особого знания джасса!
Старый 14.04.2006, 15:29
Aspid

offline
Опыт: 8,361
Активность:
Dead_knight да это я понял. вы мне обясните должно ли тут создаваться несколько спецэффектов? и если да то зачем тода воще все эта галиматья если можно полность через локальные переменные, не используя глобальные для переброски значений.
Старый 15.04.2006, 02:34
Dead Jay
Братег Дракончег
offline
Опыт: 8,425
Активность:
Avatar Это чтобы показать все методы использования локольных переменных для этой цели!
Старый 15.04.2006, 02:55
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Вообще то, глобальные переменные использовать вообще необязательно (кроме gg_ есессно). Можно тупо возвращать значения локальных как константу или заносить в кэш, а потом обнулять для межтриггерного использования.
Глобальные переменные хороши в тех случаях, когда они более-менее мало используются, являя собой нечто вроде user defined constant... В тех случаях, когда опрашивается значение с переменной. А при частом вызове функции с изменением глобальной (да ещё вероятно и для разных объектов и игроков) - более чем воероятны глюки, да и неоптимально это.
Старый 15.04.2006, 11:10
Ответ

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

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

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

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



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