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

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

Ответ
 
pAxsIs

offline
Опыт: 2,389
Активность:
Объявление переменных до условия
Прошу помочь новичку, который программирует на Pascal, но никак не может понять как можно объявить локалку до условия если условие выше действий... i am a little bit stupid.
Ошибка в 5-ой строчке пишет что не знает названия переменных (локальных)
((код jass
function Trig_Magic_skill_1_passive_Func004003 takes nothing returns nothing
call KillDestructable( GetEnumDestructable() )
endfunction
function Trig_Magic_skill_1_passive_Func009C takes nothing returns boolean
if ( not ( DistanceBetweenPoints(GetUnitLoc(Unitof), GetUnitLoc(Unitof2)) <= 100.00 ) ) then
return false
endif
return true
endfunction
function Trig_Magic_skill_1_passive_Actions takes nothing returns nothing
local unit Unitof
local unit Unitof2
set Unitof = udg_Units[1]
set Unitof2 = udg_Units[2]
call SetUnitPositionLoc( Unitof2, PolarProjectionBJ(GetUnitLoc(Unitof2), -10.00, AngleBetweenPoints(GetUnitLoc(Unitof), GetUnitLoc(Unitof2))) )
call UnitDamageTargetBJ( Unitof, Unitof2, 2.00, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
call SetUnitLifeBJ( Unitof, ( GetUnitStateSwap(UNIT_STATE_LIFE, Unitof) + 1 ) )
call EnumDestructablesInCircleBJ( 100.00, GetUnitLoc(Unitof2), function Trig_Magic_skill_1_passive_Func004003 )
call AddSpecialEffectTargetUnitBJ( "chest", Unitof2, "Abilities\\Weapons\\RedDragonBreath\\RedDragonMissile.mdl" )
call DestroyEffectBJ( GetLastCreatedEffectBJ() )
call AddSpecialEffectLocBJ( GetUnitLoc(Unitof2), "Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl" )
call DestroyEffectBJ( GetLastCreatedEffectBJ() )
if ( Trig_Magic_skill_1_passive_Func009C() ) then
call SetUnitPathing( Unitof2, true )
call UnitRemoveBuffBJ( 'Bmlt', Unitof2 )
set Unitof = null
set Unitof2 = null
set udg_Units[1] = null
set udg_Units[2] = null
call DisableTrigger( GetTriggeringTrigger() )
else
call DoNothing( )
endif
endfunction
===========================================================================
function InitTrig_Magic_skill_1_passive takes nothing returns nothing
set gg_trg_Magic_skill_1_passive = CreateTrigger( )
call DisableTrigger( gg_trg_Magic_skill_1_passive )
call TriggerRegisterTimerEventPeriodic( gg_trg_Magic_skill_1_passive, 0.01 )
call TriggerAddAction( gg_trg_Magic_skill_1_passive, function Trig_Magic_skill_1_passive_Actions )
endfunction
))
Старый 29.09.2012, 15:57
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
pAxsIs, ужас а не код...
((код jass
function Trig_Magic_skill_1_passive_Func009C takes nothing returns boolean
if ( not ( DistanceBetweenPoints(GetUnitLoc(Unitof), GetUnitLoc(Unitof2)) <= 100.00 ) ) then
return false
endif
return true
endfunction
))
Эта функция отдельная, в ней не действуют локальные переменные объявленные в другой функции.
Вдобавок эта функция тут ненужна вовсе.
можно обойтись
((код jass
if DistanceBetweenPoints(GetUnitLoc(Unitof), GetUnitLoc(Unitof2)) <= 100.00 then
тута твои действия
endif
else необязательно
))
Старый 29.09.2012, 16:10
asesmo
Я I Jag Ich Jeg Ja Minä!
offline
Опыт: 8,073
Активность:
какая ещё дистанция между локациями ...
((код jass
local unit Target = GetSpellTargetUnit()
local real TargetX = GetUnitX(Target)
настроил кастера, таргет, их координаты короче
local real distance=SquareRoot((TargetX - CasterX) * (TargetX - CasterX) + (TargetY -CasterY) * (TargetY - CasterY))
etc.
))
Старый 29.09.2012, 16:18
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
asesmo, ну если тебе не лень расскажи ему про bj... и оптимизацию...
Старый 29.09.2012, 16:20
pAxsIs

offline
Опыт: 2,389
Активность:
Это мой первый код ;)
Но чесно говоря я не понял в чем ужас?) quq_CCCP
Я делал по принципу перевода из ГУИ в jass частями и добавлял что нужно, я не знаю мб я щас скапитанил когда сказал, что из ГУИ перевел в jass, просто я не знаю как правильно делать вот сделал как знаю)
Правильно я тебя понял quq_CCCP? вот так нужно? :
((код jass
function Trig_Magic_skill_1_passive_Func004003 takes nothing returns nothing
call KillDestructable( GetEnumDestructable() )
endfunction
function Trig_Magic_skill_1_passive_Actions takes nothing returns nothing
local unit Unitof
local unit Unitof2
set Unitof = udg_Units[1]
set Unitof2 = udg_Units[2]
call SetUnitPositionLoc( Unitof2, PolarProjectionBJ(GetUnitLoc(Unitof2), -10.00, AngleBetweenPoints(GetUnitLoc(Unitof), GetUnitLoc(Unitof2))) )
call UnitDamageTargetBJ( Unitof, Unitof2, 2.00, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
call SetUnitLifeBJ( Unitof, ( GetUnitStateSwap(UNIT_STATE_LIFE, Unitof) + 1 ) )
call EnumDestructablesInCircleBJ( 100.00, GetUnitLoc(Unitof2), function Trig_Magic_skill_1_passive_Func004003 )
call AddSpecialEffectTargetUnitBJ( "chest", Unitof2, "Abilities\\Weapons\\RedDragonBreath\\RedDragonMissile.mdl" )
call DestroyEffectBJ( GetLastCreatedEffectBJ() )
call AddSpecialEffectLocBJ( GetUnitLoc(Unitof2), "Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl" )
call DestroyEffectBJ( GetLastCreatedEffectBJ() )
if DistanceBetweenPoints(GetUnitLoc(Unitof), GetUnitLoc(Unitof2)) <= 100.00 then
call SetUnitPathing( Unitof2, true )
call UnitRemoveBuffBJ( 'Bmlt', Unitof2 )
set Unitof = null
set Unitof2 = null
set udg_Units[1] = null
set udg_Units[2] = null
call DisableTrigger( GetTriggeringTrigger() )
endif
endfunction
===========================================================================
function InitTrig_Magic_skill_1_passive takes nothing returns nothing
set gg_trg_Magic_skill_1_passive = CreateTrigger( )
call DisableTrigger( gg_trg_Magic_skill_1_passive )
call TriggerRegisterTimerEventPeriodic( gg_trg_Magic_skill_1_passive, 0.01 )
call TriggerAddAction( gg_trg_Magic_skill_1_passive, function Trig_Magic_skill_1_passive_Actions )
endfunction
))
Старый 29.09.2012, 16:26
asesmo
Я I Jag Ich Jeg Ja Minä!
offline
Опыт: 8,073
Активность:
Если грамотно использовать точки, то утечек тоже не будет, но это для гуи, а тут чистый код, думаю автору стоит заменить дистанцию между локациями на длину вектора.
asesmo добавил:
pAxsIs,
лучше делай так
((код jass
local unit Unitof = udg_Units[1]
либо
local unit Unitof = null
set Unitof = udg_Units[1]
))
asesmo добавил:
второй вариант используется когда присвоение идёт после каких-либо действий ещё доп.
Старый 29.09.2012, 16:29
pAxsIs

offline
Опыт: 2,389
Активность:
asesmo:
Причем тут вычисление растояния между юнитами?
((код jass
local real distance=SquareRoot((TargetX - CasterX) * (TargetX - CasterX) + (TargetY -CasterY) * (TargetY - CasterY))
))
я проверяю растояние меньше 100 и все...
Старый 29.09.2012, 16:32
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
pAxsIs, правильно, но пойми то что редактор глупая машина, неспомобная думать, и с гуи на jass переводит код по уродски,+ использует функции часто вызывающее утечки и снижение производительности скрипта....
Это так называймые BJ функции, которые посути вызывают другие функции, суть их облегчить эизнь новичку... (но порой и это неверно)
quq_CCCP добавил:
pAxsIs, расстояние высчитывать лучше по координатам, без локейшенов, поскольку их нужно удалять....
Старый 29.09.2012, 16:33
pAxsIs

offline
Опыт: 2,389
Активность:
asesmo:
Если грамотно использовать точки, то утечек тоже не будет, но это для гуи, а тут чистый код, думаю автору стоит заменить дистанцию между локациями на длину вектора.
asesmo добавил:
pAxsIs,
лучше делай так
((код jass
local unit Unitof = udg_Units[1]
либо
local unit Unitof = null
set Unitof = udg_Units[1]
))
asesmo добавил:
второй вариант используется когда присвоение идёт после каких-либо действий ещё доп.
Это я понял спасибо :)
Старый 29.09.2012, 16:34
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
asesmo:
Если грамотно использовать точки
Их вообще не нужно юзать, ибо есть координаты ._.
Старый 29.09.2012, 16:35
pAxsIs

offline
Опыт: 2,389
Активность:
quq_CCCP:
pAxsIs, правильно, но пойми то что редактор глупая машина, неспомобная думать, и с гуи на jass переводит код по уродски,+ использует функции часто вызывающее утечки и снижение производительности скрипта....
Это так называймые BJ функции, которые посути вызывают другие функции, суть их облегчить эизнь новичку... (но порой и это неверно)
quq_CCCP добавил:
pAxsIs, расстояние высчитывать лучше по координатам, без локейшенов, поскольку их нужно удалять....
Ладно я понял нужна оптимизация и замена bj функций правда я не очень понимаю как определить bj))
ну вот такой код норм? :
((код jass
function Trig_Magic_skill_1_passive_Func004003 takes nothing returns nothing
call KillDestructable( GetEnumDestructable() )
endfunction
function Trig_Magic_skill_1_passive_Actions takes nothing returns nothing
local unit Unitof = udg_Units[1]
local unit Unitof2 = udg_Units[2]
local unit Target = GetSpellTargetUnit()
local real TargetY = GetUnitY(Target)
local real TargetX = GetUnitX(Target)
local unit Caster = GetSpellAbilityUnit()
local real CasterY = GetUnitY(Caster)
local real CasterX = GetUnitX(Caster)
local real distance = SquareRoot((TargetX - CasterX) * (TargetX - CasterX) + (TargetY - CasterY) * (TargetY - CasterY))
call SetUnitPositionLoc( Unitof2, PolarProjectionBJ(GetUnitLoc(Unitof2), -10.00, AngleBetweenPoints(GetUnitLoc(Unitof), GetUnitLoc(Unitof2))) )
call UnitDamageTargetBJ( Unitof, Unitof2, 2.00, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
call SetUnitLifeBJ( Unitof, ( GetUnitStateSwap(UNIT_STATE_LIFE, Unitof) + 1 ) )
call EnumDestructablesInCircleBJ( 100.00, GetUnitLoc(Unitof2), function Trig_Magic_skill_1_passive_Func004003 )
call AddSpecialEffectTargetUnitBJ( "chest", Unitof2, "Abilities\\Weapons\\RedDragonBreath\\RedDragonMissile.mdl" )
call DestroyEffectBJ( GetLastCreatedEffectBJ() )
call AddSpecialEffectLocBJ( GetUnitLoc(Unitof2), "Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl" )
call DestroyEffectBJ( GetLastCreatedEffectBJ() )
if distance <= 100.00 then
call SetUnitPathing( Unitof2, true )
call UnitRemoveBuffBJ( 'Bmlt', Unitof2 )
set Unitof = null
set Unitof2 = null
set Target = null
set Caster = null
set CasterY = 0
set CasterX = 0
set TargetX = 0
set TargetY = 0
set distance = 0
call DisableTrigger( GetTriggeringTrigger() )
endif
endfunction
===========================================================================
function InitTrig_Magic_skill_1_passive takes nothing returns nothing
set gg_trg_Magic_skill_1_passive = CreateTrigger( )
call DisableTrigger( gg_trg_Magic_skill_1_passive )
call TriggerRegisterTimerEventPeriodic( gg_trg_Magic_skill_1_passive, 0.01 )
call TriggerAddAction( gg_trg_Magic_skill_1_passive, function Trig_Magic_skill_1_passive_Actions )
endfunction
))
долго писал (минут 10 из за того что пришлось перематывать вверх вниз код)
Старый 29.09.2012, 16:47
Ancient
Щпаовапа
offline
Опыт: 38,370
Активность:
pAxsIs, плачу кровавыми слезами, bj везде почти...
Старый 29.09.2012, 17:03
pAxsIs

offline
Опыт: 2,389
Активность:
Ancient:
((код jass
call DestroyEffectBJ( GetLastCreatedEffectBJ() )
))
Если это бж (потому что тут написано BJ) то как сделать без бж, можете разъяснить?)
Старый 29.09.2012, 17:13
asesmo
Я I Jag Ich Jeg Ja Minä!
offline
Опыт: 8,073
Активность:
((код jass
call DestroyEffect(AddSpecialEffectTarget( "chest", Unitof2, "Abilities\\Weapons\\RedDragonBreath\\RedDragonMissile.mdl" ))
и не надо переменных (но работает не на все эффекты)
:D
))
избавились от бж в эффектах )
asesmo добавил:
и ещё там реальная distance, можно не обнулять
asesmo добавил:
как и все Х, У, 3
Старый 29.09.2012, 17:30
pAxsIs

offline
Опыт: 2,389
Активность:
asesmo:
Вот так? Еще я убрал слова BJ ;O или так делать нельзя?
((код jass
function Trig_Magic_skill_1_passive_Actions takes nothing returns nothing
local unit Unitof = udg_Units[1]
local unit Unitof2 = udg_Units[2]
local unit Target = GetSpellTargetUnit()
local real TargetY = GetUnitY(Target)
local real TargetX = GetUnitX(Target)
local unit Caster = GetSpellAbilityUnit()
local real CasterY = GetUnitY(Caster)
local real CasterX = GetUnitX(Caster)
local real distance = SquareRoot((TargetX - CasterX) * (TargetX - CasterX) + (TargetY - CasterY) * (TargetY - CasterY))
call SetUnitPositionLoc( Unitof2, PolarProjectionBJ(GetUnitLoc(Unitof2), -10.00, AngleBetweenPoints(GetUnitLoc(Unitof), GetUnitLoc(Unitof2))) )
call UnitDamageTarget( Unitof, Unitof2, 2.00, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
call SetUnitLife( Unitof, ( GetUnitStateSwap(UNIT_STATE_LIFE, Unitof) + 1 ) )
call EnumDestructablesInCircle( 100.00, GetUnitLoc(Unitof2), KillDestructable( GetEnumDestructable() ) )
call AddSpecialEffectTargetUnit( "chest", Unitof2, "Abilities\\Weapons\\RedDragonBreath\\RedDragonMissile.mdl" )
call DestroyEffect(AddSpecialEffectTarget( "chest", Unitof2, "Abilities\\Weapons\\RedDragonBreath\\RedDragonMissile.mdl" ))
call AddSpecialEffectLoc( GetUnitLoc(Unitof2), "Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl" )
call DestroyEffect(AddSpecialEffectTarget( "chest", Unitof2, "Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl" ))
if distance <= 100.00 then
call SetUnitPathing( Unitof2, true )
call UnitRemoveBuff( 'Bmlt', Unitof2 )
set Unitof = null
set Unitof2 = null
set Target = null
set Caster = null
set CasterY = 0
set CasterX = 0
set TargetX = 0
set TargetY = 0
set distance = 0
call DisableTrigger( GetTriggeringTrigger() )
endif
endfunction
===========================================================================
function InitTrig_Magic_skill_1_passive takes nothing returns nothing
set gg_trg_Magic_skill_1_passive = CreateTrigger( )
call DisableTrigger( gg_trg_Magic_skill_1_passive )
Строчка выше этой вобще для чего?) она не нужна помоему :D
call TriggerRegisterTimerEventPeriodic( gg_trg_Magic_skill_1_passive, 0.01 )
call TriggerAddAction( gg_trg_Magic_skill_1_passive, function Trig_Magic_skill_1_passive_Actions )
endfunction
))
Старый 29.09.2012, 17:35
asesmo
Я I Jag Ich Jeg Ja Minä!
offline
Опыт: 8,073
Активность:
((код jass
native AddSpecialEffect takes string modelName, real x, real y returns effect
))
тоесть
((код jass
call DestroyEffect(AddSpecialEffectLoc("Abilities\\Weapons\\AncientProtectorMissile\\AncientProtecto​rMissile.mdl",NuzhniiX,NuzhniiY))
))
((код jass
call AddSpecialEffectTargetUnit( "chest", Unitof2, "Abilities\\Weapons\\RedDragonBreath\\RedDragonMissile.mdl" )eto ne nado
call DestroyEffect(AddSpecialEffectTarget( "chest", Unitof2, "Abilities\\Weapons\\RedDragonBreath\\RedDragonMissile.mdl" ))
))
Старый 29.09.2012, 17:42
Ancient
Щпаовапа
offline
Опыт: 38,370
Активность:
Избався от локаций, перейди с них на координаты, это раз. 2 - простo bj удалять нельзя, там не все так просто, и 3 integer и real переменные обнулять НЕ надо.
Старый 29.09.2012, 17:45
pAxsIs

offline
Опыт: 2,389
Активность:
Ancient 09.09.11, 12:01 [11]
Дааа, надоели триггеры, пора Jass учить))
Ты тоже когда-то начинал так что лучше не плакать тут
pAxsIs, плачу кровавыми слезами, bj везде почти...
а помочь делом :)
Старый 29.09.2012, 17:50
asesmo
Я I Jag Ich Jeg Ja Minä!
offline
Опыт: 8,073
Активность:
pAxsIs:
а помочь делом :)
забей тут много кто издевается )
пиши что надо сюда мб помогу что смогу
Старый 29.09.2012, 17:54
Ancient
Щпаовапа
offline
Опыт: 38,370
Активность:
pAxsIs, прочитай это, кратко и по делу. и гугл для поиска не отменили еще.
Старый 29.09.2012, 17:59
Ответ

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

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

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

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



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