|
|
|
|
[Заказ] Уменьшить код
|
|
Dreii | Дата: Воскресенье, 15 Января 2012, 16:13:50 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| Code //=========================================================================== // Trigger: Ult //=========================================================================== // ******************************************************************************* // ** ** // ** Ult ** // ** ———————— ** // ** ** // ** Powered by Dreii (c)** // ** ** // *******************************************************************************
scope Ult initializer Init { define { private DumId='h002' private SpellId='A00C' private SpellAdd='A003' private range=200. private hp=200. } public struct Data { unit array dammy[4] unit caster real xcast real ycast } private bool UltCond() { return GetSpellAbilityId() == SpellId } private boolean UltCOND() { return GetUnitAbilityLevel(GetTriggerUnit(),SpellId)>0 }
private void UltACT() { Data d=LoadInteger(Hash,GetHandleId(GetTriggeringTrigger()),1) real x=GetOrderPointX() real y=GetOrderPointY() unit tr=GetOrderTargetUnit() real xt=GetWidgetX(tr) real yt=GetWidgetY(tr) if GetUnitAbilityLevel(d.caster,SpellId)==1 { if GetIssuedOrderId()==852125 { if tr==null { IssuePointOrderById(d.dammy[1],852125,x,y) else IssuePointOrderById(d.dammy[1],852125,xt,yt) } else IssuePointOrderById(d.dammy[1],851986,x,y) } } if GetUnitAbilityLevel(d.caster,SpellId)==2 { if GetIssuedOrderId()==852125 { if tr==null { IssuePointOrderById(d.dammy[1],852125,x,y) IssuePointOrderById(d.dammy[2],852125,x+range,y+range) else IssuePointOrderById(d.dammy[1],852125,xt,yt) IssuePointOrderById(d.dammy[2],852125,xt+range,yt+range) } else IssuePointOrderById(d.dammy[1],851986,x,y) IssuePointOrderById(d.dammy[2],851986,x+range,y+range) } } if GetUnitAbilityLevel(d.caster,SpellId)==3 { if GetIssuedOrderId()==852125 { if tr==null { IssuePointOrderById(d.dammy[1],852125,x,y) IssuePointOrderById(d.dammy[2],852125,x+range,y+range) IssuePointOrderById(d.dammy[3],852125,x-range,y-range) else IssuePointOrderById(d.dammy[1],852125,xt,yt) IssuePointOrderById(d.dammy[2],852125,xt+range,yt+range) IssuePointOrderById(d.dammy[3],852125,xt-range,yt-range) } else IssuePointOrderById(d.dammy[1],851986,x,y) IssuePointOrderById(d.dammy[2],851986,x+range,y+range) IssuePointOrderById(d.dammy[3],851986,x-range,y-range) } } d.destroy() }
private void Action() { Data d=Data.create() d.caster=GetTriggerUnit() d.xcast=GetWidgetX(d.caster) d.ycast=GetWidgetY(d.caster) trigger trig=CreateTrigger() int i=1 whilenot i>GetUnitAbilityLevel(d.caster,SpellId) { if i==1 { d.dammy[i]=CreateUnit(GetOwningPlayer(d.caster),DumId,d.xcast,d.ycast,GetUnitFacing(d.caster)) elseif i==2 d.dammy[i]=CreateUnit(GetOwningPlayer(d.caster),DumId,d.xcast+range,d.ycast+range,GetUnitFacing(d.caster)) elseif i==3 d.dammy[i]=CreateUnit(GetOwningPlayer(d.caster),DumId,d.xcast-range,d.ycast-range,GetUnitFacing(d.caster)) } AbUnit(d.dammy[i],SpellAdd,1,25.," ",d.caster) SetUnitVertexColor(d.dammy[i],100,50,5,50) SetWidgetLife(d.caster,GetWidgetLife(d.caster)+hp) SetUnitPathing(d.dammy[i],false) i++ } TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER) TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER) TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_ISSUED_ORDER) TriggerAddCondition(trig,Condition(function UltCOND)) TriggerAddAction(trig,function UltACT) SaveInteger(Hash,GetHandleId(trig),1,d) trig=null } //=========================================================================== private void Init() { gg_trg_Ult = CreateTrigger( ) TriggerRegisterAnyUnitEventBJ( gg_trg_Ult, EVENT_PLAYER_UNIT_SPELL_EFFECT ) TriggerAddCondition( gg_trg_Ult, Condition( function UltCond ) ) TriggerAddAction( gg_trg_Ult, function Action ) } }
Сделал спел,но хочу уменьшить его. Думаю много ненужных действий,но не знаю как сократить
Сообщение отредактировал Dreii - Воскресенье, 15 Января 2012, 16:49:04 |
|
|
|
SirNikolas | Дата: Воскресенье, 15 Января 2012, 16:25:11 | Сообщение # 2 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| В чем суть заклинания?Можно взглянуть?Code IssuePointOrderById(d.dammy[i],852125,x,y) IssuePointOrderById(d.dammy[i],852125,x+300,y+300) IssuePointOrderById(d.dammy[i],852125,x-300,y-300) И это работает?
А вообще, локалтригги - зло. © DragoN
|
|
|
|
Dreii | Дата: Воскресенье, 15 Января 2012, 16:30:36 | Сообщение # 3 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| SirNikolas, Code vioid AbUnit ( unit u,integer id,integer lvl,real time,string order,unit t ) { UnitApplyTimedLife(u,'BTLF',time) UnitAddAbility(u,id) SetUnitAbilityLevel(u,id,lvl) IssueTargetOrder(u,order,t) }
Насчет локалтригов, а как по другому приказывать дамикам ходить?
Да редко рабоатет
Сообщение отредактировал Dreii - Воскресенье, 15 Января 2012, 16:37:22 |
|
|
|
SirNikolas | Дата: Воскресенье, 15 Января 2012, 16:40:03 | Сообщение # 4 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Уничтожать структуру в действиях - все равно что удалять таймер до запуска.Quote (SirNikolas) В чем суть заклинания?
|
|
|
|
Dreii | Дата: Воскресенье, 15 Января 2012, 16:48:50 | Сообщение # 5 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| SirNikolas, создает 3 копии которые повторяют все действия. Вот код все работает как нуджно,но громоздкий.
Code //=========================================================================== // Trigger: Ult //=========================================================================== // ******************************************************************************* // ** ** // ** Ult ** // ** ———————— ** // ** ** // ** Powered by Dreii (c)** // ** ** // *******************************************************************************
scope Ult initializer Init { define { private DumId='h002' private SpellId='A00C' private SpellAdd='A003' private range=200. private hp=200. } public struct Data { unit array dammy[4] unit caster real xcast real ycast } private bool UltCond() { return GetSpellAbilityId() == SpellId } private boolean UltCOND() { return GetUnitAbilityLevel(GetTriggerUnit(),SpellId)>0 }
private void UltACT() { Data d=LoadInteger(Hash,GetHandleId(GetTriggeringTrigger()),1) real x=GetOrderPointX() real y=GetOrderPointY() unit tr=GetOrderTargetUnit() real xt=GetWidgetX(tr) real yt=GetWidgetY(tr) if GetUnitAbilityLevel(d.caster,SpellId)==1 { if GetIssuedOrderId()==852125 { if tr==null { IssuePointOrderById(d.dammy[1],852125,x,y) else IssuePointOrderById(d.dammy[1],852125,xt,yt) } else IssuePointOrderById(d.dammy[1],851986,x,y) } } if GetUnitAbilityLevel(d.caster,SpellId)==2 { if GetIssuedOrderId()==852125 { if tr==null { IssuePointOrderById(d.dammy[1],852125,x,y) IssuePointOrderById(d.dammy[2],852125,x+range,y+range) else IssuePointOrderById(d.dammy[1],852125,xt,yt) IssuePointOrderById(d.dammy[2],852125,xt+range,yt+range) } else IssuePointOrderById(d.dammy[1],851986,x,y) IssuePointOrderById(d.dammy[2],851986,x+range,y+range) } } if GetUnitAbilityLevel(d.caster,SpellId)==3 { if GetIssuedOrderId()==852125 { if tr==null { IssuePointOrderById(d.dammy[1],852125,x,y) IssuePointOrderById(d.dammy[2],852125,x+range,y+range) IssuePointOrderById(d.dammy[3],852125,x-range,y-range) else IssuePointOrderById(d.dammy[1],852125,xt,yt) IssuePointOrderById(d.dammy[2],852125,xt+range,yt+range) IssuePointOrderById(d.dammy[3],852125,xt-range,yt-range) } else IssuePointOrderById(d.dammy[1],851986,x,y) IssuePointOrderById(d.dammy[2],851986,x+range,y+range) IssuePointOrderById(d.dammy[3],851986,x-range,y-range) } } d.destroy() }
private void Action() { Data d=Data.create() d.caster=GetTriggerUnit() d.xcast=GetWidgetX(d.caster) d.ycast=GetWidgetY(d.caster) trigger trig=CreateTrigger() int i=1 whilenot i>GetUnitAbilityLevel(d.caster,SpellId) { if i==1 { d.dammy[i]=CreateUnit(GetOwningPlayer(d.caster),DumId,d.xcast,d.ycast,GetUnitFacing(d.caster)) elseif i==2 d.dammy[i]=CreateUnit(GetOwningPlayer(d.caster),DumId,d.xcast+range,d.ycast+range,GetUnitFacing(d.caster)) elseif i==3 d.dammy[i]=CreateUnit(GetOwningPlayer(d.caster),DumId,d.xcast-range,d.ycast-range,GetUnitFacing(d.caster)) } AbUnit(d.dammy[i],SpellAdd,1,25.," ",d.caster) SetUnitVertexColor(d.dammy[i],100,50,5,50) SetWidgetLife(d.caster,GetWidgetLife(d.caster)+hp) SetUnitPathing(d.dammy[i],false) i++ } TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER) TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER) TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_ISSUED_ORDER) TriggerAddCondition(trig,Condition(function UltCOND)) TriggerAddAction(trig,function UltACT) SaveInteger(Hash,GetHandleId(trig),1,d) trig=null } //=========================================================================== private void Init() { gg_trg_Ult = CreateTrigger( ) TriggerRegisterAnyUnitEventBJ( gg_trg_Ult, EVENT_PLAYER_UNIT_SPELL_EFFECT ) TriggerAddCondition( gg_trg_Ult, Condition( function UltCond ) ) TriggerAddAction( gg_trg_Ult, function Action ) } }
|
|
|
|
SirNikolas | Дата: Воскресенье, 15 Января 2012, 16:57:20 | Сообщение # 6 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Я что-то не заметил условия окончания.
|
|
|
|
Dreii | Дата: Воскресенье, 15 Января 2012, 16:58:41 | Сообщение # 7 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| SirNikolas, Бтв,если включен дебаг мод,то при дестрои структуры не в Action() выводит: Double free of type: Ult_Data )
Добавлено (15 Январь 2012, 16:58:41) --------------------------------------------- SirNikolas, Какого окончания?
|
|
|
|
SirNikolas | Дата: Воскресенье, 15 Января 2012, 17:03:46 | Сообщение # 8 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| У тебя двойники навсегда создаются?
|
|
|
|
Dreii | Дата: Воскресенье, 15 Января 2012, 18:27:42 | Сообщение # 9 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| SirNikolas, на 25 секунд. Таймер истичения добавляю
|
|
|
|
SirNikolas | Дата: Воскресенье, 15 Января 2012, 18:52:05 | Сообщение # 10 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| До меня наконец дошло, что ты хотел там сделать.Code int level = GetUnitAbilityLevel(u, Abilcode); IssuePointOrderById(dummy[0], 851986, x, y); if level > 1 { IssuePointOrderById(dummy[1], 851986, x, y); if level > 2 { IssuePointOrderById(dummy[2], 851986, x, y); } } А еще надо запускать таймер на 25 секунд и через это время удалять структуру.
|
|
|
|
|
|
|
|
|
|
|