Я только начал осваивать Jass, и столкнулся с такими ошибками в своем "коде": Undedared varible: i Undedared varible:GetLastCreatedUnit Undedared varible: dammi dammi not an array Буду благодарен если кто-нибудь объяснит в чем тут дело, и воздержится от всяких высказываний, вроде: автор нуб удали WE!!O_o
//*************************************************************************** //* //* Global Variables //* //***************************************************************************
globals // User-defined unit udg_target = null unit udg_caster = null integer udg_i = 0
function InitGlobals takes nothing returns nothing set udg_i = 0 endfunction
function Trig_Molot_drobayshi_Conditions takes nothing returns boolean if ( not ( GetSpellAbilityId() == 'A001' ) ) then return false endif return true endfunction
function Trig_Molot_drobayshi_Func012Func001C takes nothing returns boolean if ( not ( IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(udg_caster)) == true ) ) then return false endif return true endfunction
function Trig_Molot_drobayshi_Func012A takes nothing returns nothing if ( Trig_Molot_drobayshi_Func012Func001C() ) then set i = i+1 call CreateNUnitsAtLoc( 1, 'h001', GetOwningPlayer(udg_caster), GetUnitLoc(udg_target), bj_UNIT_FACING ) set dammi[i] = GetLastCreatedUnit call UnitAddAbilityBJ( 'A000', GetLastCreatedUnit() ) call SetUnitAbilityLevelSwapped( 'A000', GetLastCreatedUnit(), GetUnitAbilityLevelSwapped('A001', udg_caster) ) call IssueTargetOrderBJ( GetLastCreatedUnit(), "thunderbolt", GetEnumUnit() ) else call DoNothing( ) endif endfunction
function Trig_Molot_drobayshi_Actions takes nothing returns nothing local unit array dammi local integer i =0 local unit caster local unit target set udg_caster = GetSpellAbilityUnit() set udg_target = GetSpellTargetUnit() set caster = udg_caster set target = udg_target call PolledWait( ( DistanceBetweenPoints(GetUnitLoc(udg_caster), GetUnitLoc(udg_target)) / 1000.00 ) ) set udg_target = target set udg_caster = caster call ForGroupBJ( GetUnitsInRangeOfLocAll(450.00, GetUnitLoc(udg_target)), function Trig_Molot_drobayshi_Func012A ) set caster = null set target = null set udg_caster = null set udg_target = null set udg_i = i set bj_forLoopAIndex = 1 set bj_forLoopAIndexEnd = udg_i loop exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd call RemoveUnit( dammi[i] ) set dammi[i] = null set i = i - 1 set bj_forLoopAIndex = bj_forLoopAIndex + 1 endloop set i = 0 endfunction
//=========================================================================== function InitTrig_Molot_drobayshi takes nothing returns nothing set gg_trg_Molot_drobayshi = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Molot_drobayshi, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_Molot_drobayshi, Condition( function Trig_Molot_drobayshi_Conditions ) ) call TriggerAddAction( gg_trg_Molot_drobayshi, function Trig_Molot_drobayshi_Actions ) endfunction
function InitGlobals takes nothing returns nothing set udg_i = 0 endfunction
function Trig_Molot_drobayshi_Conditions takes nothing returns boolean if ( not ( GetSpellAbilityId() == 'A001' ) ) then return false endif return true endfunction
function Trig_Molot_drobayshi_Func012Func001C takes nothing returns boolean if ( not ( IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(udg_caster)) == true ) ) then return false endif return true endfunction
function Trig_Molot_drobayshi_Func012A takes nothing returns nothing if ( Trig_Molot_drobayshi_Func012Func001C() ) then set i = i+1 call CreateNUnitsAtLoc( 1, 'h001', GetOwningPlayer(udg_caster), GetUnitLoc(udg_target), bj_UNIT_FACING ) set dammi[i] = GetLastCreatedUnit call UnitAddAbilityBJ( 'A000', GetLastCreatedUnit() ) call SetUnitAbilityLevelSwapped( 'A000', GetLastCreatedUnit(), GetUnitAbilityLevelSwapped('A001', udg_caster) ) call IssueTargetOrderBJ( GetLastCreatedUnit(), "thunderbolt", GetEnumUnit() ) else call DoNothing( ) endif endfunction
function Trig_Molot_drobayshi_Actions takes nothing returns nothing local unit array dammi local integer i =0 local unit caster local unit target set udg_caster = GetSpellAbilityUnit() set udg_target = GetSpellTargetUnit() set caster = udg_caster set target = udg_target call PolledWait( ( DistanceBetweenPoints(GetUnitLoc(udg_caster), GetUnitLoc(udg_target)) / 1000.00 ) ) set udg_target = target set udg_caster = caster call ForGroupBJ( GetUnitsInRangeOfLocAll(450.00, GetUnitLoc(udg_target)), function Trig_Molot_drobayshi_Func012A ) set caster = null set target = null set udg_caster = null set udg_target = null set udg_i = i set bj_forLoopAIndex = 1 set bj_forLoopAIndexEnd = udg_i loop exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd call RemoveUnit( dammi[i] ) set dammi[i] = null set i = i - 1 set bj_forLoopAIndex = bj_forLoopAIndex + 1 endloop set i = 0 endfunction
//=========================================================================== function InitTrig_Molot_drobayshi takes nothing returns nothing set gg_trg_Molot_drobayshi = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Molot_drobayshi, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_Molot_drobayshi, Condition( function Trig_Molot_drobayshi_Conditions ) ) call TriggerAddAction( gg_trg_Molot_drobayshi, function Trig_Molot_drobayshi_Actions ) endfunction
local unit caster local unit target set udg_caster = GetSpellAbilityUnit() set udg_target = GetSpellTargetUnit() set caster = udg_caster set target = udg_target
Тебе не кажеться что это глупость? local unit target=GetSpellTargetUnit() local unit caster=GetSpellAbilityUnit()
Добавлено (30-12-2010, 19:12) --------------------------------------------- Syzaky, ты выкладываешь код который тебе выдает JNGP в случае ошибики?
Syzaky, ужасно..... Если начал делать на JASS делай на JASS зачем ты ставишь
Quote (Syzaky)
local unit caster local unit target set udg_caster = GetSpellAbilityUnit() set udg_target = GetSpellTargetUnit() set caster = udg_caster set target = udg_target
Syzaky, невижу смысла задавать локалки target и caster
Добавлено (30-12-2010, 19:23) --------------------------------------------- Syzaky, я так понял тебе нужен молот бурь, который летит в противника. Когда он долетит то станит всех вокруг него?
Добавлено (30-12-2010, 19:28) --------------------------------------------- Syzaky, так же и с переменной i Она у тебя установлена в 1 функции а используеться в другой
Добавлено (30-12-2010, 19:28) --------------------------------------------- Syzaky, скинь эту карту, я тебе сделаю правильно
Добавлено (30-12-2010, 19:47) --------------------------------------------- Syzaky, у тебя JNGP есть?
только если так: set bj_lastCreatedUnit=CreateUnit(....) хотя я бы использовал более короткую и менее значительную переменную обладающую массивом bj_ghoul хотя это всё зависит от цели, ведь если переменная нужна внутри функции то единственно правильным решением станут локалки.
Добавлено (30-12-2010, 20:01) --------------------------------------------- EdiTTORR, скажи зачем он сделал так?
Quote (Syzaky)
local unit caster local unit target set udg_caster = GetSpellAbilityUnit() set udg_target = GetSpellTargetUnit() set caster = udg_caster set target = udg_target
я не знаю что такое MUI, но вроде как можно занести глобальные переменные в локальные, и тогда они сохраняться,на время полета Также если этого не сделать, придется для новой способности делать свои переменные таргет и кастер,
Сообщение отредактировал Syzaky - Четверг, 30 Декабря 2010, 20:25:18
нужно новые переменные вводить, для новой способности, target (цель) и caster(применяющий скил), иначе если использовать новую способность, во время полета молота, переменной "цель" присвоиться другое значение.И способность может сработать не так как задумывалось.А если занести все глобальные переменные, в локальные, чтобы на время полета молота сохранить данные о цели, а потом из локальных загрузить назад в глобальные, можно этого избежать, это я пытался сделать.
Сообщение отредактировал Syzaky - Четверг, 30 Декабря 2010, 20:33:23