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

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

Ответ
 
PainKonan

offline
Опыт: 227
Активность:
Помогите исправить ошибку в коде
((код jass
function Trig_UdarGroma1_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A002' ) ) then
return false
endif
return true
endfunction
function Trig_UdarGroma1_Func004002003 takes nothing returns boolean
return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == false ) and ( IsUnitHiddenBJ(GetFilterUnit()) == false ) and ( IsUnitDeadBJ(GetFilterUnit()) == false ) and ( IsUnitType(GetFilterUnit(), UNIT_TYPE_MAGIC_IMMUNE) == false ) and ( IsUnitAlly(GetFilterUnit(), GetOwningPlayer(u)) == false ) and ( IsUnitType(GetFilterUnit(), UNIT_TYPE_MECHANICAL) == false )
endfunction
function Trig_UdarGroma1_Func005Func001C takes nothing returns boolean
if ( not ( IsUnitType(GetEnumUnit(), UNIT_TYPE_HERO) == false ) ) then
return false
endif
return true
endfunction
function Trig_UdarGroma1_Func005A takes nothing returns nothing
if ( Trig_UdarGroma1_Func005Func001C() ) then
set i = ( i + 5 )
else
set i = ( i + 50 )
endif
endfunction
function Trig_UdarGroma1_Actions takes nothing returns nothing
local unit u=GetSpellAbilityUnit()
local timer t=CreateTimer()
local location l=GetUnitLoc(u)
local integer i=0
local group g=GetUnitsInRangeOfLocMatching(716.00, l, Condition(function Trig_UdarGroma1_Func004002003))
call ForGroup( g, function Trig_UdarGroma1_Func005A )
call ModifyHeroStat( bj_HEROSTAT_STR, u, bj_MODIFYMETHOD_ADD, i )
endfunction
===========================================================================
function Init takes nothing returns nothing
set gg_trg_UdarGroma1 = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_UdarGroma1, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_UdarGroma1, Condition( function Trig_UdarGroma1_Conditions ) )
call TriggerAddAction( gg_trg_UdarGroma1, function Trig_UdarGroma1_Actions )
endfunction
))
Выдаёт следующие ошибки:
-undeclared variable u ( IsUnitAlly(GetFilterUnit(), GetOwningPlayer(u))
-undeclared variable i (set i = ( i + 5 ) else set i = ( i + 50 ) endif)

Отредактировано PainKonan, 15.09.2013 в 15:39.
Старый 14.09.2013, 22:50
LOR_D
    
offline
Опыт: 8,450
Активность:
PainKonan, очевидно же, что в функциях где вы используете эти переменные, они не объявлены. Вы объявили переменные i и u в Trig_UdarGroma1_Actions и только там вы ими можете пользоваться.
Старый 14.09.2013, 23:29
PainKonan

offline
Опыт: 227
Активность:
LOR_D, а если объявить переменные в функциях, где они не объявлены, то это будут разные переменные? (т.е. в каждой функции свои переменные?).
Старый 14.09.2013, 23:47
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
читать статьи, и про форматирование на форуме
Старый 14.09.2013, 23:48
LOR_D
    
offline
Опыт: 8,450
Активность:
PainKonan, да, разные.
Старый 15.09.2013, 00:09
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
да тут не столько ошибку сколько код надо исправить
Старый 15.09.2013, 11:49
16GB
GhostOne User
offline
Опыт: 59,317
Активность:
Ошибка в том что переменная i только в одной функции видна, там где ты её объявил (Trig_UdarGroma1_Actions) в других её не существует.
function Trig_UdarGroma1_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A002'
endfunction

function Trig_UdarGroma1_Actions takes nothing returns nothing
local unit c = GetSpellAbilityUnit()
//local timer t = CreateTimer() ?
local real x = GetUnitX(c)
local real y = GetUnitY(c)
local unit u
local integer i=0
local group g = CreateGroup()
call GroupEnumUnitsInRange(g,x,y,716.,null)
loop
set u = FirstOfGroup(g)
if not (GetUnitTypeId(u) == 0 or IsUnitType(u, UNIT_TYPE_DEAD)) and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitHidden(u) and not IsUnitType(u,UNIT_TYPE_MAGIC_IMMUNE)  and not IsUnitAlly(u,GetOwningPlayer(c)) and not IsUnitType(u,UNIT_TYPE_MECHANICAL) then
if IsUnitType(u,UNIT_TYPE_HERO) then
set i = i+50
else
set i = i+5
endif
endif
call GroupRemoveUnit(g,u)
exitwhen u == null
endloop
call SetHeroStr(c,i,true)
call DestroyGroup(g)
set u = null
set c = null
set g = null
endfunction

Отредактировано 16GB, 15.09.2013 в 13:08.
Старый 15.09.2013, 12:09
PainKonan

offline
Опыт: 227
Активность:
Благодарю за помощь.
Тогда можно ли задать все локальные переменные в самом начале: до того, как мы начинаем задавать функции (чтобы эти переменные распространялись на все функции)? (иначе я не знаю, как проверить условия)
Cosonic5, не знаю как его исправить, поэтому обратился за помощью сюда.
16GB, огромное спасибо, я попробую разобраться с этим)

Отредактировано PainKonan, 15.09.2013 в 12:21.
Старый 15.09.2013, 12:13
16GB
GhostOne User
offline
Опыт: 59,317
Активность:
PainKonan:
Тогда можно ли задать все локальные переменные в самом начале: до того, как мы начинаем задавать функции (чтобы эти переменные распространялись на все функции)? (иначе я не знаю, как проверить условия)
или глобалки или hash
Старый 15.09.2013, 12:33
PainKonan

offline
Опыт: 227
Активность:
16GB, я вроде разобрался, как ты сделал, но прибавка к силе не происходит
Старый 15.09.2013, 12:40
16GB
GhostOne User
offline
Опыт: 59,317
Активность:
подправил
Старый 15.09.2013, 13:09
PainKonan

offline
Опыт: 227
Активность:
16GB, всё равно не работает...
вот весь код:
((код jass
function Trig_UdarGroma1_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A002' ) ) then
return false
endif
return true
endfunction
function Trig_UdarGroma1_Actions takes nothing returns nothing
local unit c = GetSpellAbilityUnit()
local timer t = CreateTimer() ?
local real x = GetUnitX(c)
local real y = GetUnitY(c)
local unit u
local integer i=0
local group g = CreateGroup()
call GroupEnumUnitsInRange(g,x,y,716.,null)
loop
set u = FirstOfGroup(g)
if not (GetUnitTypeId(u) == 0 or IsUnitType(u, UNIT_TYPE_DEAD)) and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitHidden(u) and not IsUnitType(u,UNIT_TYPE_MAGIC_IMMUNE) and not IsUnitAlly(u,GetOwningPlayer(c)) and not IsUnitType(u,UNIT_TYPE_MECHANICAL) then
if IsUnitType(u,UNIT_TYPE_HERO) then
set i = i+50
else
set i = i+5
endif
endif
call GroupRemoveUnit(g,u)
exitwhen u == null
endloop
call SetHeroStr(c,i,true)
call DestroyGroup(g)
set u = null
set c = null
set g = null
endfunction
===========================================================================
function Init takes nothing returns nothing
set gg_trg_UdarGroma1 = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_UdarGroma1, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_UdarGroma1, Condition( function Trig_UdarGroma1_Conditions ) )
call TriggerAddAction( gg_trg_UdarGroma1, function Trig_UdarGroma1_Actions )
endfunction
))
Старый 15.09.2013, 15:24
16GB
GhostOne User
offline
Опыт: 59,317
Активность:
у меня всё работает, только надо
call SetHeroStr(c,i,true)
на это
call SetHeroStr(c,GetHeroStr(c,true)+i,true)
Старый 15.09.2013, 16:07
PainKonan

offline
Опыт: 227
Активность:
16GB, это тоже исправил, но всё равно не работает ... я не знаю в чём дело

Отредактировано PainKonan, 15.09.2013 в 19:20.
Старый 15.09.2013, 16:27
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
есть такая вещь как отладка, но т.к. вы никогда статьи не откроете то уж извините
Старый 15.09.2013, 21:19
PainKonan

offline
Опыт: 227
Активность:
Hate, увы, но из этих статьей про отладку я так ничего и не узнал
жаль, что мнение обо мне у вас плохое, но я не из тех, кто рвался в jass ничего не прочитав.
Старый 15.09.2013, 22:29
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
потому что отладка не в разделе жасса.
Старый 15.09.2013, 23:25
PainKonan

offline
Опыт: 227
Активность:
Hate, не могли бы вы указать на ссылки со статьями, где говорится об отладке? (я не нашёл такие статьи, к сожалению).
Старый 15.09.2013, 23:58
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
Старый 16.09.2013, 00:07
PainKonan

offline
Опыт: 227
Активность:
Hate, благодарю, попытаюсь разобраться.
Старый 16.09.2013, 16:20
Ответ

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

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

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

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



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