В коде ошибку , исправил , показал другую , т.е работает , но показывает по одному.
Добавлено (28 Мая 2013, 18:11:37) --------------------------------------------- Спасибо.Скачал , запустил , ошибку показывает одну , только иконка поменялась =_=
Добавлено (28 Мая 2013, 18:19:32) --------------------------------------------- Скрин ошибки нужен? Там просто ошибка в написании
GetWidget более расширенное? А GetUnit - только юниты?
Добавлено (29 Мая 2013, 14:31:33) --------------------------------------------- Ещё вопрос , смотри если я в начале записал
local real x = GetUnitX(m) + g * Cos(c * bj_DEGTORAD) local real y = GetUnitY(m) + g * Sin(c * bj_DEGTORAD) local location r = Location (x,y)
Потом присваиваю g какое либо значение Потом создаю спецэффект в r
Потом присваиваю g другое значение Потом создаю спецэффект в r
Будет ли меняться r?Или спецэффект будет создаваться в одном месте?
Пока жду ответа на прошлый вопрос , начал другой скилл , в проверке появляется надпись local all cjlocgn_00000000 , в самом коде нет её , пишет ошибку.
Сообщение отредактировал mazahan - Среда, 29 Мая 2013, 14:41:36
GetWidget более расширенное? А GetUnit - только юниты?
Да, юниты, разрушаемые объекты и предметы являются виджетами.
Цитата (mazahan)
Будет ли меняться r? Или спецэффект будет создаваться в одном месте?
Не будет. На самом деле, если ты пишешь на JASS, тебе абсолютно не нужно создавать точки. Любая функция, принимающая точку, имеет аналог с координатами.
Единственное исключение - GetLocationZ. Но даже здесь можно обойтись одной глобальной точкой: она создается прямо в блоке globals. Когда надо, перемещается куда-нибудь посредством MoveLocation, а затем определяется высота рельефа.
Цитата (mazahan)
в проверке появляется надпись local all cjlocgn_00000000, в самом коде нет её , пишет ошибку.
В коде ошибка, скорее всего, где-то стоит слово "all".
function Trig_razduv_Actions takes nothing returns nothing local integer a = 1 local integer b = 6 local unit m = GetSpellAbilityUnit() local unit t local real c = 0 local real g = 300 local effect array u local real x = GetUnitX(m) + g * Cos(c * bj_DEGTORAD) local real y = GetUnitY(m) + g * Sin(c * bj_DEGTORAD) local location r = Location (x,y) call SetUnitInvulnerable( udg_d, true ) call PauseUnit(udg_d, true) loop exitwhen a > b call SetUnitScalePercent( m, (I2R(a) * 100.00 ), ( I2R(a) * 100.00 ), ( I2R(a) * 100.00 ) ) call TriggerSleepAction( 0.50 ) set a = a + 1 endloop call CreateNUnitsAtLoc( 1, 'h009', GetOwningPlayer(m), GetUnitLoc(m), bj_UNIT_FACING ) set t = GetLastCreatedUnit() set a = 1 loop exitwhen a == 13 set u[a] = AddSpecialEffectLoc("Doodads\\Cinematic\\RisingWaterDoodad\\RisingWaterDoodad.mdl",r) set c = ( c + 30.00 ) set a = a + 1 endloop
set g = 700 loop exitwhen a == 26 set u[a] = AddSpecialEffectLoc("Doodads\\Cinematic\\RisingWaterDoodad\\RisingWaterDoodad.mdl",r) set c = ( c + 30.00 ) set a = a + 1 endloop
set g = 1200 loop exitwhen a == 37 set u[a] = AddSpecialEffectLoc("Doodads\\Cinematic\\RisingWaterDoodad\\RisingWaterDoodad.mdl",r) set c = ( c + 30.00 ) set a = a + 1 endloop call TriggerSleepAction( 0.50 ) call SetUnitScalePercent( m, 100.00, 100.00, 100.00 )
call KillUnit(m) call SetUnitInvulnerable( m, false ) call PauseUnit(m, false) call TriggerSleepAction( 15.00 ) call RemoveUnit(t) set a = 1 set b = 36 loop exitwhen a > b call DestroyEffect(u[a]) set u[a]=null set a = a + 1 endloop
if (IsUnitAlly ( GetFilterUnit(), GetOwningPlayer(m))==false) and (IsUnitEnemy (GetFilterUnit(),GetOwningPlayer(m))==true) then call ForGroup(GetUnitsInRangeOfLocAll(1200.00,GetUnitLoc(m)),function Trig_razduv_1 ) endif set t = null set m = null endfunction
function Trig_razduv_Condition takes nothing returns boolean return GetSpellAbilityId() == 'A00F' endfunction //=========================================================================== function InitTrig_razduv takes nothing returns nothing local integer i = 0 set gg_trg_razduv = CreateTrigger( ) call TriggerAddCondition( gg_trg_razduv, Condition( function Trig_razduv_Condition ) ) call TriggerAddAction( gg_trg_razduv, function Trig_razduv_Actions ) loop call TriggerRegisterPlayerUnitEvent( gg_trg_razduv, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null ) set i = i + 1 exitwhen i > 11 endloop endfunction
Может после присваивания g писать set x = GetUnitX(m) + g * Cos(c * bj_DEGTORAD) set y = GetUnitY(m) + g * Sin(c * bj_DEGTORAD) А в локальных писать пустышки?
if (IsUnitAlly ( GetFilterUnit(), GetOwningPlayer(m))==false) and (IsUnitEnemy (GetFilterUnit(),GetOwningPlayer(m))==true) then call ForGroup(GetUnitsInRangeOfLocAll(1200.00,GetUnitLoc(m)) // тут ошибка , надо дописать , но не знаю чего. call UnitDamageTargetBJ( m, GetEnumUnit(), ( I2R(GetHeroStatBJ(bj_HEROSTAT_INT, m, true)) * 400.00 ), ATTACK_TYPE_HERO, DAMAGE_TYPE_COLD ) ) endif и вообще так можно?)
Сообщение отредактировал mazahan - Среда, 29 Мая 2013, 18:50:00
call ForGroup(GetUnitsInRangeOfLocAll(1200.00,GetUnitLoc(m)), function НАЗВАНИЕ ФУНКЦИИ)
Добавлено (29 Мая 2013, 18:56:45) ---------------------------------------------
Цитата (mazahan)
Может после присваивания g писать set x = GetUnitX(m) + g * Cos(c * bj_DEGTORAD) set y = GetUnitY(m) + g * Sin(c * bj_DEGTORAD) А в локальных писать пустышки?
Пока учишься, делай как тебе удобнее и понятнее
Karamba
Сообщение отредактировал Borodach - Среда, 29 Мая 2013, 18:54:21
Мне так удобнее , т.к я вижу только этот способ , а есть ли удобнее?
Добавлено (29 Мая 2013, 20:37:28) ---------------------------------------------
Цитата
function Trig_razduv_1 takes nothing returns nothing local unit m = GetSpellAbilityUnit() call UnitDamageTargetBJ( m, GetEnumUnit(),(I2R(GetHeroStatBJ(bj_HEROSTAT_INT, m, true)) * 400.00 ), ATTACK_TYPE_HERO, DAMAGE_TYPE_COLD ) endfunction function Trig_razduv_Actions takes nothing returns nothing local integer a = 1 local integer b = 6 local unit m = GetSpellAbilityUnit() local unit t local real c = 0 local real g = 300 local effect array u local real x local real y local location r = Location (x,y)
call SetUnitInvulnerable( m, true ) call PauseUnit(m, true) loop exitwhen a > b call SetUnitScalePercent( m, (I2R(a) * 100.00 ), ( I2R(a) * 100.00 ), ( I2R(a) * 100.00 ) ) call TriggerSleepAction( 0.50 ) set a = a + 1 endloop call CreateNUnitsAtLoc( 1, 'h009', GetOwningPlayer(m), GetUnitLoc(m), bj_UNIT_FACING ) set t = GetLastCreatedUnit() set a = 1 set x = GetUnitX(m) + g * Cos(c * bj_DEGTORAD) set y = GetUnitY(m) + g * Sin(c * bj_DEGTORAD) loop exitwhen a == 13 set u[a] = AddSpecialEffectLoc("Doodads\\Cinematic\\RisingWaterDoodad\\RisingWaterDoodad.mdl",r) set c = ( c + 30.00 ) set a = a + 1 endloop
set g = 700 set x = GetUnitX(m) + g * Cos(c * bj_DEGTORAD) set y = GetUnitY(m) + g * Sin(c * bj_DEGTORAD) loop exitwhen a == 26 set u[a] = AddSpecialEffectLoc("Doodads\\Cinematic\\RisingWaterDoodad\\RisingWaterDoodad.mdl",r) set c = ( c + 30.00 ) set a = a + 1 endloop
set g = 1200 set x = GetUnitX(m) + g * Cos(c * bj_DEGTORAD) set y = GetUnitY(m) + g * Sin(c * bj_DEGTORAD) loop exitwhen a == 37 set u[a] = AddSpecialEffectLoc("Doodads\\Cinematic\\RisingWaterDoodad\\RisingWaterDoodad.mdl",r) set c = ( c + 30.00 ) set a = a + 1 endloop call TriggerSleepAction( 0.50 ) call SetUnitScalePercent( m, 100.00, 100.00, 100.00 )
call KillUnit(m) call SetUnitInvulnerable( m, false ) call PauseUnit(m, false) call TriggerSleepAction( 15.00 ) call RemoveUnit(t) set a = 1 set b = 36 loop exitwhen a > b call DestroyEffect(u[a]) set u[a]=null set a = a + 1 endloop if (IsUnitAlly ( GetFilterUnit(), GetOwningPlayer(m))==false) and (IsUnitEnemy (GetFilterUnit(),GetOwningPlayer(m))==true) then call ForGroup(GetUnitsInRangeOfLocAll(1200.00,GetUnitLoc(m)),function Trig_razduv_1) endif set t = null set m = null set x = 0 set y = 0 endfunction
function Trig_razduv_Condition takes nothing returns boolean return GetSpellAbilityId() == 'A00F' endfunction //=========================================================================== function InitTrig_razduv takes nothing returns nothing local integer i = 0 set gg_trg_razduv = CreateTrigger( ) call TriggerAddCondition( gg_trg_razduv, Condition( function Trig_razduv_Condition ) ) call TriggerAddAction( gg_trg_razduv, function Trig_razduv_Actions ) loop call TriggerRegisterPlayerUnitEvent( gg_trg_razduv, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null ) set i = i + 1 exitwhen i > 11 endloop endfunction
Почему не работает спелл? Код без ошибок. Даже не срабатывают изначальные действия call SetUnitInvulnerable( m, true ) call PauseUnit(m, true) условие проверил , скилл тот (индекс)
мне нужно чтобы создался один юнит в случайной точке локации х размерами 700 на 700 local location x = GetSpellTargetLoc() Нормально , или можно проще?
Сообщение отредактировал mazahan - Среда, 29 Мая 2013, 20:47:58
mazahan, BJDebugMsg( "текст" ), после каждого действия сможешь поставить какой-то номер, узнаешь после какого действия обрываются действия. Также проверяй свои переменные, верные ли они.
mazahan, Если юнит то, BJDebugMsg( GetUnitName( unit )), если число целое ...(I2S( integer )) если реальное ...(R2S( real )). Это тебе на будущее, а ошибка в переменных х,у. Ты не задал им значение, перед тем как используешь... local real x = 0. local real y = 0. local location loc = Location(x,y)
Или local real x local real y local location loc ....set x = 0. ....set y = 0. ....set loc = Location(x,y)
Karamba
Сообщение отредактировал Borodach - Среда, 29 Мая 2013, 22:15:29
мне нужно чтобы создался один юнит в случайной точке локации х размерами 700 на 700 local location x = GetSpellTargetLoc() Нормально , или можно проще?
Добавлено (31 Мая 2013, 22:59:43) ---------------------------------------------
Код
function Trig_mec_Actions takes nothing returns nothing local unit a = GetSpellAbilityUnit() local unit array b local integer q local unit array c set q = 1 loop exitwhen q == 100 call CreateUnit(GetOwningPlayer(a),'h00D', GetSpellTargetX() + GetRandomReal(-700., 700.), GetSpellTargetY() + GetRandomReal(-700., 700.), 270.) set b[ку] = GetLastCreatedUnit () call CreateUnit(GetOwningPlayer(a),'h00D', GetSpellTargetX() + GetRandomReal(-700., 700.), GetSpellTargetY() + GetRandomReal(-700., 700.), 270.) set c[ку] = GetLastCreatedUnit () call IssueImmediateOrder(b[ку], "stomp") call UnitApplyTimedLife(b[ку],'h00D',2) call IssueImmediateOrder(c[ку], "stomp") call UnitApplyTimedLife(c[ку],'h00D',2) call TriggerSleepAction (0.05) set q = q+1 endloop
endfunction function Trig_mec_Condition takes nothing returns boolean return GetSpellAbilityId() == 'A00P' endfunction //=========================================================================== function InitTrig_mec takes nothing returns nothing local integer i = 0 set gg_trg_mec = CreateTrigger( ) call TriggerAddAction( gg_trg_mec, function Trig_mec_Actions ) call TriggerAddCondition( gg_trg_mec, Condition(function Trig_mec_Condition) ) loop call TriggerRegisterPlayerUnitEvent( gg_trg_mec, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null ) set i = i + 1 exitwhen i > 11 endloop endfunction
Думми не умирают и не юзают скилл заменял на set b[ку]=CreateUnit(GetOwningPlayer(a),'h00D', GetSpellTargetX() + GetRandomReal(-700., 700.), GetSpellTargetY() + GetRandomReal(-700., 700.), 270.) появлялось 4 думми , но умирали и юзали скилл.
Добавлено (02 Июня 2013, 15:03:38) --------------------------------------------- Сделал в 2 триггера , всё норм , но всё ровно интересно почему не работал предыдущий... И можно ли сделать в 1 триггере?
Код
function Trig_mec_Actions takes nothing returns nothing set udg_a = GetSpellAbilityUnit() set udg_x1 = GetSpellTargetX() set udg_y1 = GetSpellTargetY() EnableTrigger (gg_trg_mec_1) TriggerSleepAction (5) DisableTrigger(gg_trg_mec_1)
endfunction function Trig_mec_Condition takes nothing returns boolean return GetSpellAbilityId() == 'A00P' endfunction //=========================================================================== function InitTrig_mec takes nothing returns nothing local integer i = 0 set gg_trg_mec = CreateTrigger( ) call TriggerAddAction( gg_trg_mec, function Trig_mec_Actions ) call TriggerAddCondition( gg_trg_mec, Condition(function Trig_mec_Condition) ) loop call TriggerRegisterPlayerUnitEvent( gg_trg_mec, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null ) set i = i + 1 exitwhen i > 11 endloop endfunction
2
Код
function Trig_mec_1_Actions takes nothing returns nothing local unit array b local integer q = 1 set b[q1] = CreateUnit(GetOwningPlayer(udg_a),'h00D', udg_x1 + GetRandomReal(-700., 700.), udg_y1 + GetRandomReal(-700., 700.), 270.) call IssueImmediateOrder(b[q1], "stomp") call UnitApplyTimedLife(b[q1],'h00D',2) set q = q+1 endfunction
//=========================================================================== function InitTrig_mec_1 takes nothing returns nothing set gg_trg_mec_1 = CreateTrigger( ) call DisableTrigger( gg_trg_mec_1 ) call TriggerRegisterTimerEventPeriodic( gg_trg_mec_1, 0.09 ) call TriggerAddAction( gg_trg_mec_1, function Trig_mec_1_Actions ) endfunction
Сообщение отредактировал mazahan - Суббота, 01 Июня 2013, 12:08:50
call UnitApplyTimedLife(b[ку],'h00D',2) надо изменить на call UnitApplyTimedLife(b[ку],'BTLF',2) 'BTLF' - это тип таймера для юнита (общий), а не тип юнита.
заменял на set b[ку]=CreateUnit(GetOwningPlayer(a),'h00D', GetSpellTargetX() + GetRandomReal(-700., 700.), GetSpellTargetY() + GetRandomReal(-700., 700.), 270.) появлялось 4 думми , но умирали и юзали скилл.
Добавлено (07 Июня 2013, 23:18:29) ---------------------------------------------
Код
function Trig_razduv_1 takes nothing returns nothing local unit m = GetSpellAbilityUnit() call UnitDamageTargetBJ( m, GetEnumUnit(),(I2R(GetHeroStatBJ(bj_HEROSTAT_INT, m, true)) * 400.00 ), ATTACK_TYPE_HERO, DAMAGE_TYPE_COLD ) endfunction function Trig_razduv_Actions takes nothing returns nothing local integer a = 1 local integer b = 6 local unit m = GetSpellAbilityUnit() local unit t local real c = 0 local real g = 300 local effect array u local real x local real y local location r = Location (x,y)
call SetUnitInvulnerable( m, true ) call PauseUnit(m, true) loop exitwhen a > b call SetUnitScalePercent( m, (I2R(a) * 100.00 ), ( I2R(a) * 100.00 ), ( I2R(a) * 100.00 ) ) call TriggerSleepAction( 0.50 ) set a = a + 1 endloop call CreateNUnitsAtLoc( 1, 'h009', GetOwningPlayer(m), GetUnitLoc(m), bj_UNIT_FACING ) set t = GetLastCreatedUnit() set a = 1 set x = GetUnitX(m) + g * Cos(c * bj_DEGTORAD) set y = GetUnitY(m) + g * Sin(c * bj_DEGTORAD) loop exitwhen a == 13 set u[a] = AddSpecialEffectLoc("Doodads\\Cinematic\\RisingWaterDoodad\\RisingWaterDoodad.mdl",r) set c = ( c + 30.00 ) set a = a + 1 endloop
set g = 700 set x = GetUnitX(m) + g * Cos(c * bj_DEGTORAD) set y = GetUnitY(m) + g * Sin(c * bj_DEGTORAD) loop exitwhen a == 26 set u[a] = AddSpecialEffectLoc("Doodads\\Cinematic\\RisingWaterDoodad\\RisingWaterDoodad.mdl",r) set c = ( c + 30.00 ) set a = a + 1 endloop
set g = 1200 set x = GetUnitX(m) + g * Cos(c * bj_DEGTORAD) set y = GetUnitY(m) + g * Sin(c * bj_DEGTORAD) loop exitwhen a == 37 set u[a] = AddSpecialEffectLoc("Doodads\\Cinematic\\RisingWaterDoodad\\RisingWaterDoodad.mdl",r) set c = ( c + 30.00 ) set a = a + 1 endloop call TriggerSleepAction( 0.50 ) call SetUnitScalePercent( m, 100.00, 100.00, 100.00 )
call KillUnit(m) call SetUnitInvulnerable( m, false ) call PauseUnit(m, false) call TriggerSleepAction( 15.00 ) call RemoveUnit(t) set a = 1 set b = 36 loop exitwhen a > b call DestroyEffect(u[a]) set u[a]=null set a = a + 1 endloop if (IsUnitAlly ( GetFilterUnit(), GetOwningPlayer(m))==false) and (IsUnitEnemy (GetFilterUnit(),GetOwningPlayer(m))==true) then call ForGroup(GetUnitsInRangeOfLocAll(1200.00,GetUnitLoc(m)),function Trig_razduv_1) endif set t = null set m = null set x = 0 set y = 0 endfunction
function Trig_razduv_Condition takes nothing returns boolean return GetSpellAbilityId() == 'A00F' endfunction //=========================================================================== function InitTrig_razduv takes nothing returns nothing local integer i = 0 set gg_trg_razduv = CreateTrigger( ) call TriggerAddCondition( gg_trg_razduv, Condition( function Trig_razduv_Condition ) ) call TriggerAddAction( gg_trg_razduv, function Trig_razduv_Actions ) loop call TriggerRegisterPlayerUnitEvent( gg_trg_razduv, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null ) set i = i + 1 exitwhen i > 11 endloop endfunction