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 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,524Активность: |
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 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
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 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,524Активность: |
asesmo, ну если тебе не лень расскажи ему про bj... и оптимизацию... |
29.09.2012, 16:20 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
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 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
asesmo
Я I Jag Ich Jeg Ja Minä!
offline
Опыт:
8,073Активность: |
Если грамотно использовать точки, то утечек тоже не будет, но это для гуи, а тут чистый код, думаю автору стоит заменить дистанцию между локациями на длину вектора.
((код jass
local unit Unitof = udg_Units[1]
либо local unit Unitof = null set Unitof = udg_Units[1] )) asesmo добавил: второй вариант используется когда присвоение идёт после каких-либо действий ещё доп. |
29.09.2012, 16:29 | #6
+0/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
pAxsIs
offline
Опыт:
2,389Активность: |
asesmo: Причем тут вычисление растояния между юнитами? я проверяю растояние меньше 100 и все... |
29.09.2012, 16:32 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,524Активность: |
pAxsIs, правильно, но пойми то что редактор глупая машина, неспомобная думать, и с гуи на jass переводит код по уродски,+ использует функции часто вызывающее утечки и снижение производительности скрипта....
Это так называймые BJ функции, которые посути вызывают другие функции, суть их облегчить эизнь новичку... (но порой и это неверно) quq_CCCP добавил: pAxsIs, расстояние высчитывать лучше по координатам, без локейшенов, поскольку их нужно удалять.... |
29.09.2012, 16:33 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
pAxsIs
offline
Опыт:
2,389Активность: |
asesmo:
Это я понял спасибо :) |
29.09.2012, 16:34 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
asesmo:
Их вообще не нужно юзать, ибо есть координаты ._. |
29.09.2012, 16:35 | #10
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
pAxsIs
offline
Опыт:
2,389Активность: |
quq_CCCP:
Ладно я понял нужна оптимизация и замена 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 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ancient
Щпаовапа
offline
Опыт:
38,370Активность: |
pAxsIs, плачу кровавыми слезами, bj везде почти... |
29.09.2012, 17:03 | #12
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
pAxsIs
offline
Опыт:
2,389Активность: |
Ancient:
Если это бж (потому что тут написано BJ) то как сделать без бж, можете разъяснить?) |
29.09.2012, 17:13 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
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 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
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 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
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\\AncientProtectorMissile.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 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ancient
Щпаовапа
offline
Опыт:
38,370Активность: |
Избався от локаций, перейди с них на координаты, это раз. 2 - простo bj удалять нельзя, там не все так просто, и 3 integer и real переменные обнулять НЕ надо. |
29.09.2012, 17:45 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
pAxsIs
offline
Опыт:
2,389Активность: |
Ты тоже когда-то начинал так что лучше не плакать тут
а помочь делом :) |
29.09.2012, 17:50 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
asesmo
Я I Jag Ich Jeg Ja Minä!
offline
Опыт:
8,073Активность: |
pAxsIs:
забей тут много кто издевается ) пиши что надо сюда мб помогу что смогу |
29.09.2012, 17:54 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ancient
Щпаовапа
offline
Опыт:
38,370Активность: |
|
29.09.2012, 17:59 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|