Kr0nus | Дата: Вторник, 09 Августа 2011, 12:35:17 | Сообщение # 1 |
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
| Пытался сделать способность на jass'e : Герой бросает сеть в указанную область,сеть летит,если по пути встречает цель,на него кастуется сеть,а дамми-сеть(который летит) удаляется.Проблема в том,что при использовании у меня вылетает фатал.Прошу,помогите исправить способность,чтобы работала корректно,ну или покажите как надо делать. Code function Trig_CeTb_Conditions takes nothing returns boolean return GetSpellAbilityId() == 'A000' endfunction
function CeTbCast takes nothing returns nothing local unit cast if ( IsUnitType(GetEnumUnit(), UNIT_TYPE_GROUND) == true ) then set udg_CeTb_bool = true set cast = CreateUnit( Player(16), 'h001' , GetUnitX(GetEnumUnit()), GetUnitY(GetEnumUnit()), GetUnitFacing(GetEnumUnit()) ) call UnitAddAbility( cast, 'A001' ) call IssueTargetOrder( cast, "ensnare", GetEnumUnit() ) endif set cast = null endfunction
function Move takes nothing returns nothing local timer t = GetExpiredTimer() local real X local real Y local unit dammy = udg_CeTb_dammy local location point = udg_CeTb_point if udg_CeTb_bool == false then if DistanceBetweenPoints( GetUnitLoc(dammy), point ) <= 50 then call RemoveUnit(dammy) set dammy = null set t = null call DestroyTimer(t) endif set X = ( GetUnitX(dammy) + ( 50 * Cos( GetUnitFacing(dammy) * 0.0174 ) ) ) set Y = ( GetUnitY(dammy) + ( 50 * Sin( GetUnitFacing(dammy) * 0.0174 ) ) ) call SetUnitPosition( dammy, X, Y ) call ForGroup( GetUnitsInRangeOfLocAll( 100, Location( X, Y ) ) , function CeTbCast ) set dammy = null set t = null endif endfunction
function Trig_CeTb_Actions takes nothing returns nothing local unit caster = GetSpellAbilityUnit() local unit dammy = CreateUnit( GetOwningPlayer(caster), 'h000', GetUnitX(caster), GetUnitY(caster), GetUnitFacing(caster) ) local location point = GetSpellTargetLoc() local timer t = CreateTimer() set udg_CeTb_dammy = dammy set udg_CeTb_point = point call TimerStart( t, 0.05, true, function Move ) set caster = null set dammy = null set t = null endfunction
//=========================================================================== function InitTrig_CeTb takes nothing returns nothing local trigger CeTb = CreateTrigger( ) local integer index = 0 loop exitwhen index > 16 call TriggerRegisterPlayerUnitEvent( CeTb, Player(index), EVENT_PLAYER_UNIT_SPELL_CAST, null ) set index = index + 1 endloop call TriggerAddCondition( CeTb, Condition( function Trig_CeTb_Conditions ) ) call TriggerAddAction( CeTb, function Trig_CeTb_Actions ) endfunction
Сообщение отредактировал Kr0nus - Вторник, 09 Августа 2011, 12:35:45 |
|
|
|
Hexing | Дата: Вторник, 09 Августа 2011, 13:50:09 | Сообщение # 2 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Code set t = null call DestroyTimer(t) наоборот :/ Code set cast = CreateUnit( Player(16), 'h001' , GetUnitX(GetEnumUnit()), GetUnitY(GetEnumUnit()), GetUnitFacing(GetEnumUnit()) ) call UnitAddAbility( cast, 'A001' ) call IssueTargetOrder( cast, "ensnare", GetEnumUnit() ) проверь чтобы 'A001' была заимствована от способности esnare а серьезного ничего не нашел... Кинь исходник мб. p.s. код сделан мега криво и если 2-ое кастанут это однавременно, будет огромная каша неразгребаемая(я уж не говорю о ссылочных локалках на глобалки)
|
|
|
|
[DS] | Дата: Вторник, 09 Августа 2011, 14:27:07 | Сообщение # 3 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| Я же говорил паузит, дестройть и нуллить таймер. Походу из-за этого и фаталить. И да "код сделан мега криво и если 2- ое кастанут это однавременно, будет огромная каша неразгребаемая(я уж не говорю о ссылочных локалках на глобалки)" что сказали выше.
|
|
|
|
lawson | Дата: Вторник, 09 Августа 2011, 15:03:29 | Сообщение # 4 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Kr0nus, Какойто бредовый триг у тебя.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|