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

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

Ответ
 
Soul killer

offline
Опыт: 320
Активность:
Типы переменных?
Создал глобальную переменную типа "Способность" и локальную типа "ability". При попытке присвоить значение одной переменной другой компилятор говорит, что типы переменных не совпадают.
Если это не одни и тот же тип, как будет "Способность" на языке jass?
Старый 01.04.2006, 20:19
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Цитата:
компилятор

Во-первых не компилятор...
Ошибка скорее в другом месте...
Ты поставил перед глобальной индекс udg_ ?
Старый 01.04.2006, 20:33
Soul killer

offline
Опыт: 320
Активность:
Ошибка показывается именно в строчке "set a = udg_ability", говорит "несовпадение типов при присвоении". a - локальная переменная типа ability, а ability - глобальная типа Способность
Старый 01.04.2006, 21:03
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Джасс парсер в Варе кривой... попробуй поискать ошибку в остальном коде или пересоздай триггер... а лучше выложи ошибочный кусок кода, можить вместе найдем чего...
Старый 01.04.2006, 21:30
Soul killer

offline
Опыт: 320
Активность:
суть в том, что когда колдун кастует огненную стрелу, после того, как стрела достигает цели, эта цель получает способность "Дух" (это одно из упражнений в статье про локальные переменные :))
function Trig_Banish_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'ANfb' ) ) then
return false
endif
return true
endfunction
function Trig_Banish_Actions takes nothing returns nothing
local ability a
local unit u
set udg_unit = GetSpellTargetUnit()
set u = udg_unit
call TriggerSleepAction( ( DistanceBetweenPoints(GetUnitLoc(GetSpellAbilityUnit()), GetUnitLoc(GetSpellTargetUnit())) / 1000.00 ) )
set udg_unit = u
set udg_ability = 'Aeth'
call UnitAddAbilityBJ( udg_ability, udg_unit )
set u = udg_unit
set a = udg_ability <-- здесь появляется ошибка
call TriggerSleepAction( 4.00 )
set udg_ability = a
set udg_unit = u <-- и здесь тоже
call UnitRemoveAbilityBJ( udg_ability, udg_unit )
endfunction
===========================================================================
function InitTrig_Banish takes nothing returns nothing
set gg_trg_Banish = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Banish, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Banish, Condition( function Trig_Banish_Conditions ) )
call TriggerAddAction( gg_trg_Banish, function Trig_Banish_Actions )
endfunction
Старый 01.04.2006, 23:16
NETRAT

offline
Опыт: 83,712
Активность:
Soul killer дело в том что есть разница между ability и abilityID, то есть когда ты делаешь set udg_ability = 'Aeth' это несоответствие типов, ибо udg_ability имеет тип ability а 'Aeth' имеет тип abilityID(или integer что впринципе один фиг)
Старый 01.04.2006, 23:32
Soul killer

offline
Опыт: 320
Активность:
А как первести тип abilityID в ability :?
Или как получить вышеупомянутый результат иным способом?
Старый 01.04.2006, 23:38
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Soul killer, просмотри целоисчисленную самой способности в редакторе объектов (Ctrl+D - переводят в режим просмотраитипов Ид). Ид номер представлен скольки-то там битным целым, так что буква А означает 10, В - 11 и т.д. Способности начинаются с буквы А, баффы с В, а предметы и юниты - I и U соответственно.

FellGuard добавил:
Soul killer, можно упростить If у тебя в коде. Например,
Код:
function Trig_Banish_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'ANfb' ) ) then
return false
endif
return true
endfunction

упрощается до
Код:
function Trig_Banish_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'ANfb' 
endfunction


FellGuard добавил:
Ещё хорошо бы тебе поуничтожать локации, но ты и сам потом до этого дойдёш.
Старый 02.04.2006, 09:33
zibada

offline
Опыт: отключен
local integer a
и все.
в редакторе триггеров, насколько я помню, работы с типом ability нет вообще (хотя в джассе он появился с версии 1.13 что ли...), там юзаются только инты.
по крайней мере, если что-то имеет значение 'Axxx' - это обычный integer, просто так записанный =)
соответственно, попытки его привести к каким-то ссылочным типам ничего хорошего не дадут.
Старый 02.04.2006, 12:40
Soul killer

offline
Опыт: 320
Активность:
Всем большое спасибо, пойду тренироватья дальше :)
Старый 02.04.2006, 15:13
Ответ

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

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

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

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



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