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

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

Ответ
 
Zerker
G Unit
offline
Опыт: 25,120
Активность:
Помогите! В чём ошибка?
Начал изучать Jass, учу по статье Сергея. Скажите, в чём тут ошибка:

Цитата:
function Trig_____________________________________002_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'AHtb' ) ) then
return false
endif
return true
endfunction

function Trig_____________________________________002_Actions takes nothing returns nothing
local unit u
local ability a
set udg_man = GetSpellTargetUnit()
set u = udg_man
call PolledWait( ( DistanceBetweenPoints(GetUnitLoc(GetSpellAbilityUnit()), GetUnitLoc(GetSpellTargetUnit())) / 1000.00 ) )
set udg_man = u
call UnitAddAbilityBJ( 'AUav', udg_man )
set udg_ab = 'AUav'
set a = udg_ab
call PolledWait( 10.00 )
set udg_ab = a
call UnitRemoveAbilityBJ( udg_ab, udg_man )
endfunction

//===========================================================================
function InitTrig_____________________________________002 takes nothing returns nothing
set gg_trg_____________________________________002 = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_____________________________________002, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_____________________________________002, Condition( function Trig_____________________________________002_Conditions ) )
call TriggerAddAction( gg_trg_____________________________________002, function Trig_____________________________________002_Actions )
endfunction

Старый 10.05.2006, 22:24
NETRAT

offline
Опыт: 83,712
Активность:
А что оно должно делать? Синтаксис вроде правильный
Старый 11.05.2006, 02:31
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Zerker, убери русские названия триггера, и попробуй обойтись без глобалок.
Например, конструкцию типа
Код:
set udg_man = GetSpellTargetUnit()
set u = udg_man
можно упростить до
Код:
set u = GetSpellTargetUnit()

и уже после оперировать с локальными. Незачем на одно заклинание таскать целых две глобальные.
Если используеш несколько триггеров, вызывай функцию с передачей значения переменных либо пиши переменные в кэш.
Старый 11.05.2006, 06:59
DioD

offline
Опыт: 45,134
Активность:
Это из за хитрых манипуляций с переменными, значение просто теряется.
Старый 11.05.2006, 10:26
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Цитата:
из за хитрых манипуляций с переменными
Добавлю - бессмысленных
Код:
set udg_ab = 'AUav'
set a = udg_ab
call PolledWait( 10.00 )
set udg_ab = a
то, что курсивом - зачем это?
Старый 11.05.2006, 10:34
MapMan
Corey 8 Taylor
offline
Опыт: 21,554
Активность:
Точто ты подчиркнул это Custom Scripts он приравнивал локалки к глобалкам и наоборот, используется в триггерах, в джассе этого ненадо!
Старый 11.05.2006, 10:38
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Да я знаю. Это был риторический вопрос, значащий - Нафиг вам это?! Уберите немедленно!
Старый 11.05.2006, 10:42
Zerker
G Unit
offline
Опыт: 25,120
Активность:
NETRAT я только начал изучать, и вот экспериментирую. Короче, герой кастует абилу на своего воина и ему (воину) на 20 сек даётся вампиризм.
Старый 11.05.2006, 13:41
MapMan
Corey 8 Taylor
offline
Опыт: 21,554
Активность:
FellGuard этот ответ предназначался Zerker'у!
Старый 11.05.2006, 13:45
Zerker
G Unit
offline
Опыт: 25,120
Активность:
MapMan у меня при сохранении выдаются 2 ошибки, связанные с переменными.
Старый 11.05.2006, 13:51
Warden
:::...
offline
Опыт: 26,106
Активность:
жассер блин... CallPoledWait, Local ability - че выеживаться??? Есдинственное , када Local прегождается - это когда нада спецэфекты (Создающиеся каждые 0.01 сек.) удалять без проблем...

Warden добавил:
Zerker - Учи RB и SCV!!!
Старый 11.05.2006, 13:52
Zerker
G Unit
offline
Опыт: 25,120
Активность:
Warden я ещё до туда не дошёл!
Старый 11.05.2006, 13:53
NETRAT

offline
Опыт: 83,712
Активность:
DioD, FellGuard подобные манипуляции используются чтобы показать как можно использовать локалки/глобалки для хранения значений. В данном случае значение глобалки сохраняется в локалке на 10 сек, а затем восстанавливается. Триггер не претендует на оптимальность
Старый 11.05.2006, 15:33
Zerker
G Unit
offline
Опыт: 25,120
Активность:
NETRAT почему не претендует? И как его сделать правильным?
Старый 11.05.2006, 16:31
Podk

offline
Опыт: 420
Активность:
Не претендует на оптимальность так как использует как локальные переменные так и глобальные, хотя можно обйтись только локальными. Что сделать? Избавиться от глобальных - как уже писалось выше.
Старый 11.05.2006, 16:54
DioD

offline
Опыт: 45,134
Активность:
Зачем всё это мутить непонятно, есть прекрасная функция H2I и кеш
Старый 11.05.2006, 17:18
NETRAT

offline
Опыт: 83,712
Активность:
DioD для этого есть отдельная статья - RB + Cache
Старый 11.05.2006, 17:27
DioD

offline
Опыт: 45,134
Активность:
Так и без статьи СКВ попрёт нормально.
Старый 11.05.2006, 17:37
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Цитата:
Так и без статьи СКВ попрёт нормально.
Угу, имхо тут и сохранять нечего - вс действия умещаются в одну ф-ию. Вам же пишут - человек еще не добрался до РБ
Старый 11.05.2006, 20:14
remal
нечто
offline
Опыт: 2,087
Активность:
явно этоот триггер - это gui переведённый в jass-код. отсюда и невероятные для jass'еров выкрутасы с переменными...

ну а причину надо искать стандартно:
пишешь функцию
Код:
function dm takes string msg returns nothing
    if true then
        call DisplayTimedTextToPlayer(GetLocalPlayer(), 0.1 , 0.0 , 10.0, msg)
    endif
endfunction


и потом вставляешь везде...
выводишь значения всех переменных и всех вычисляемых значений. для юнитов выводишь их имена. для абилок и тп - названия. перед и после каждого wait'a ставишь контрольное сообщение.
также не надо забывать о том, что триггер может и не сработать из-за condition'a. отсюда вывод: прежде всего проверяем запускается ли основная функция выводом любого сообщения сразу после объявления локалок.

remal добавил:
какого хрена отступы в тэге [code] не сохранились? (они у меня табуляциями)

Отредактировано THeBloodiest, 12.05.2006 в 22:58.
Старый 12.05.2006, 03:47
Ответ

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

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

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

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



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