|
|
|
|
[Вопрос] Урон по линии молнии и плавное движение молнии
|
|
Gamefr@nk | Дата: Суббота, 07 Января 2012, 21:03:51 | Сообщение # 1 |
8 уровень
Группа: Проверенные
Сообщений: 638
Награды: 0
Репутация: 188
Блокировки:
| Помогите пожалуйста как сделать урон по линии молнии и движение молнии более плавное. Code function Trig_NewYearStar_Actions takes nothing returns nothing local string eff="Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl" local unit u=GetTriggerUnit() local integer i=0 local real x=GetUnitX(u) local real y=GetUnitY(u) local real a1=70 local real a2=140 local real a3=210 local real a4=280 local real a5=360 local real x1=GetWidgetX(u) + 500. * Cos(a1 * .017) local real y1=GetWidgetY(u) + 500. * Sin(a1 * .017) local real x2=GetWidgetX(u) + 500. * Cos(a2 * .017) local real y2=GetWidgetY(u) + 500. * Sin(a2 * .017) local real x3=GetWidgetX(u) + 500. * Cos(a3 * .017) local real y3=GetWidgetY(u) + 500. * Sin(a3 * .017) local real x4=GetWidgetX(u) + 500. * Cos(a4 * .017) local real y4=GetWidgetY(u) + 500. * Sin(a4 * .017) local real x5=GetWidgetX(u) + 500. * Cos(a5 * .017) local real y5=GetWidgetY(u) + 500. * Sin(a5 * .017) local lightning l1=AddLightning("SPLK",true,x,y,x1,y1) local lightning l2=AddLightning("SPLK",true,x,y,x2,y2) local lightning l3=AddLightning("SPLK",true,x,y,x3,y3) local lightning l4=AddLightning("SPLK",true,x,y,x4,y4) local lightning l5=AddLightning("SPLK",true,x,y,x5,y5) loop exitwhen i>15*GetUnitAbilityLevel(u,'A008') call MoveLightning(l1,true,x,y,x1,y1) call MoveLightning(l2,true,x,y,x2,y2) call MoveLightning(l3,true,x,y,x3,y3) call MoveLightning(l4,true,x,y,x4,y4) call MoveLightning(l5,true,x,y,x5,y5) set a1=a1+5 set a2=a2+5 set a3=a3+5 set a4=a4+5 set a5=a5+5 set x1=GetWidgetX(u) + 500. * Cos(a1 * .017) set y1=GetWidgetY(u) + 500. * Sin(a1 * .017) set x2=GetWidgetX(u) + 500. * Cos(a2 * .017) set y2=GetWidgetY(u) + 500. * Sin(a2 * .017) set x3=GetWidgetX(u) + 500. * Cos(a3 * .017) set y3=GetWidgetY(u) + 500. * Sin(a3 * .017) set x4=GetWidgetX(u) + 500. * Cos(a4 * .017) set y4=GetWidgetY(u) + 500. * Sin(a4 * .017) set x5=GetWidgetX(u) + 500. * Cos(a5 * .017) set y5=GetWidgetY(u) + 500. * Sin(a5 * .017) set x=GetUnitX(u) set y=GetUnitY(u) call DestroyEffect(AddSpecialEffect(eff,x1,y1)) call DestroyEffect(AddSpecialEffect(eff,x2,y2)) call DestroyEffect(AddSpecialEffect(eff,x3,y3)) call DestroyEffect(AddSpecialEffect(eff,x4,y4)) call DestroyEffect(AddSpecialEffect(eff,x5,y5)) call TriggerSleepAction(0.01) endloop endfunction
|
|
|
|
lawson | Дата: Суббота, 07 Января 2012, 21:06:26 | Сообщение # 2 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Gamefr@nk) call TriggerSleepAction(0.01) Вейт в цикле: хмм играешься с огнем.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Gamefr@nk | Дата: Суббота, 07 Января 2012, 21:17:07 | Сообщение # 3 |
8 уровень
Группа: Проверенные
Сообщений: 638
Награды: 0
Репутация: 188
Блокировки:
| lawson, Я уже писал я пока с таймерами неразобрался)
|
|
|
|
Dreii | Дата: Воскресенье, 08 Января 2012, 00:02:17 | Сообщение # 4 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| Для плавного движение используем таймеры, с переодичность .0348. Для дамаг по линии молнии как вариант создавать от 1 точки с полярным смещением 2-3 точки и от 2 тоже 2-3 и уже от них наносить дамаг в облости 100 - гемор
|
|
|
|
Gamefr@nk | Дата: Воскресенье, 08 Января 2012, 00:14:35 | Сообщение # 5 |
8 уровень
Группа: Проверенные
Сообщений: 638
Награды: 0
Репутация: 188
Блокировки:
| Quote (Gamefr@nk) с таймерами неразобрался На мои попытки комп чуть не умер. вот то что вызывало ужс
Code function Trig_NewYearStar_Actions takes nothing returns nothing local string eff="Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl" local unit u=GetTriggerUnit() local integer i=0 local real x=GetUnitX(u) local real y=GetUnitY(u) local real a1=70 local real a2=140 local real a3=210 local real a4=280 local real a5=360 local real x1=GetWidgetX(u) + 500. * Cos(a1 * .017) local real y1=GetWidgetY(u) + 500. * Sin(a1 * .017) local real x2=GetWidgetX(u) + 500. * Cos(a2 * .017) local real y2=GetWidgetY(u) + 500. * Sin(a2 * .017) local real x3=GetWidgetX(u) + 500. * Cos(a3 * .017) local real y3=GetWidgetY(u) + 500. * Sin(a3 * .017) local real x4=GetWidgetX(u) + 500. * Cos(a4 * .017) local real y4=GetWidgetY(u) + 500. * Sin(a4 * .017) local real x5=GetWidgetX(u) + 500. * Cos(a5 * .017) local real y5=GetWidgetY(u) + 500. * Sin(a5 * .017) local lightning l1=AddLightning("SPLK",true,x,y,x1,y1) local lightning l2=AddLightning("SPLK",true,x,y,x2,y2) local lightning l3=AddLightning("SPLK",true,x,y,x3,y3) local lightning l4=AddLightning("SPLK",true,x,y,x4,y4) local lightning l5=AddLightning("SPLK",true,x,y,x5,y5) local integer rad=50 local timer t=CreateTimer() local integer id=GetHandleId(t) loop exitwhen i>15*GetUnitAbilityLevel(u,'A008') call MoveLightning(l1,true,x,y,x1,y1) call MoveLightning(l2,true,x,y,x2,y2) call MoveLightning(l3,true,x,y,x3,y3) call MoveLightning(l4,true,x,y,x4,y4) call MoveLightning(l5,true,x,y,x5,y5) call UnitDamagePoint(u,0.,rad,x1,y1,100.,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS) call UnitDamagePoint(u,0.,rad,x2,y2,100.,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS) call UnitDamagePoint(u,0.,rad,x3,y3,100.,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS) call UnitDamagePoint(u,0.,rad,x4,y4,100.,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS) call UnitDamagePoint(u,0.,rad,x5,y5,100.,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS) set a1=a1+5 set a2=a2+5 set a3=a3+5 set a4=a4+5 set a5=a5+5 set x1=GetWidgetX(u) + 500. * Cos(a1 * .017) set y1=GetWidgetY(u) + 500. * Sin(a1 * .017) set x2=GetWidgetX(u) + 500. * Cos(a2 * .017) set y2=GetWidgetY(u) + 500. * Sin(a2 * .017) set x3=GetWidgetX(u) + 500. * Cos(a3 * .017) set y3=GetWidgetY(u) + 500. * Sin(a3 * .017) set x4=GetWidgetX(u) + 500. * Cos(a4 * .017) set y4=GetWidgetY(u) + 500. * Sin(a4 * .017) set x5=GetWidgetX(u) + 500. * Cos(a5 * .017) set y5=GetWidgetY(u) + 500. * Sin(a5 * .017) set x=GetUnitX(u) set y=GetUnitY(u) call DestroyEffect(AddSpecialEffect(eff,x1,y1)) call DestroyEffect(AddSpecialEffect(eff,x2,y2)) call DestroyEffect(AddSpecialEffect(eff,x3,y3)) call DestroyEffect(AddSpecialEffect(eff,x4,y4)) call DestroyEffect(AddSpecialEffect(eff,x5,y5)) call TimerStart(t,0.0348,true,function Trig_NewYearStar_Actions) endloop endfunction
|
|
|
|
Dreii | Дата: Воскресенье, 08 Января 2012, 01:08:02 | Сообщение # 6 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| ты перезапускаешь одну и туже ф-ию каждые 0,348 секунд - лагистрашные
|
|
|
|
Gamefr@nk | Дата: Воскресенье, 08 Января 2012, 01:10:43 | Сообщение # 7 |
8 уровень
Группа: Проверенные
Сообщений: 638
Награды: 0
Репутация: 188
Блокировки:
| Dreii, я знаю,а как сделать правильно то?)
|
|
|
|
Dreii | Дата: Воскресенье, 08 Января 2012, 01:26:03 | Сообщение # 8 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| Gamefr@nk, то что должно произойти через ,348 в отдельную ф-ию
|
|
|
|
Gamefr@nk | Дата: Воскресенье, 08 Января 2012, 01:35:25 | Сообщение # 9 |
8 уровень
Группа: Проверенные
Сообщений: 638
Награды: 0
Репутация: 188
Блокировки:
| Dreii, а как...... Надо же чтобы происходило этот цикл раз в 0.0348 и закончился спустя время
|
|
|
|
Ty3uK | Дата: Воскресенье, 08 Января 2012, 09:26:58 | Сообщение # 10 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Не .0348, а .035. Варик берет числа с плавающей запятой с тремя десятичными знаками. Или пользоваться советом Дуоса и брать .04
|
|
|
|
Gamefr@nk | Дата: Воскресенье, 08 Января 2012, 12:46:19 | Сообщение # 11 |
8 уровень
Группа: Проверенные
Сообщений: 638
Награды: 0
Репутация: 188
Блокировки:
| а может кто нить сделать пример с таймерам на цикл? Ну не суть важно с этим кодом просто пример,я ни как не пойму как его юзать.Добавлено (08 Январь 2012, 12:46:19) --------------------------------------------- Весь код если нужно... Code function Trig_NewYearStar_Conditions takes nothing returns boolean return GetSpellAbilityId()=='A008' endfunction function Trig_NewYearStar_Actions takes nothing returns nothing local string eff="Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl" local unit u=GetTriggerUnit() local integer i=0 local real x=GetUnitX(u) local real y=GetUnitY(u) local real a1=70 local real a2=140 local real a3=210 local real a4=280 local real a5=360 local real x1=GetWidgetX(u) + 500. * Cos(a1 * .017) local real y1=GetWidgetY(u) + 500. * Sin(a1 * .017) local real x2=GetWidgetX(u) + 500. * Cos(a2 * .017) local real y2=GetWidgetY(u) + 500. * Sin(a2 * .017) local real x3=GetWidgetX(u) + 500. * Cos(a3 * .017) local real y3=GetWidgetY(u) + 500. * Sin(a3 * .017) local real x4=GetWidgetX(u) + 500. * Cos(a4 * .017) local real y4=GetWidgetY(u) + 500. * Sin(a4 * .017) local real x5=GetWidgetX(u) + 500. * Cos(a5 * .017) local real y5=GetWidgetY(u) + 500. * Sin(a5 * .017) local lightning l1=AddLightning("SPLK",true,x,y,x1,y1) local lightning l2=AddLightning("SPLK",true,x,y,x2,y2) local lightning l3=AddLightning("SPLK",true,x,y,x3,y3) local lightning l4=AddLightning("SPLK",true,x,y,x4,y4) local lightning l5=AddLightning("SPLK",true,x,y,x5,y5) local integer rad=50 loop exitwhen i>15*GetUnitAbilityLevel(u,'A008') call MoveLightning(l1,true,x,y,x1,y1) call MoveLightning(l2,true,x,y,x2,y2) call MoveLightning(l3,true,x,y,x3,y3) call MoveLightning(l4,true,x,y,x4,y4) call MoveLightning(l5,true,x,y,x5,y5) call UnitDamagePoint(u,0.,rad,x1,y1,100.,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS) call UnitDamagePoint(u,0.,rad,x2,y2,100.,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS) call UnitDamagePoint(u,0.,rad,x3,y3,100.,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS) call UnitDamagePoint(u,0.,rad,x4,y4,100.,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS) call UnitDamagePoint(u,0.,rad,x5,y5,100.,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS) set a1=a1+5 set a2=a2+5 set a3=a3+5 set a4=a4+5 set a5=a5+5 set x1=GetWidgetX(u) + 500. * Cos(a1 * .017) set y1=GetWidgetY(u) + 500. * Sin(a1 * .017) set x2=GetWidgetX(u) + 500. * Cos(a2 * .017) set y2=GetWidgetY(u) + 500. * Sin(a2 * .017) set x3=GetWidgetX(u) + 500. * Cos(a3 * .017) set y3=GetWidgetY(u) + 500. * Sin(a3 * .017) set x4=GetWidgetX(u) + 500. * Cos(a4 * .017) set y4=GetWidgetY(u) + 500. * Sin(a4 * .017) set x5=GetWidgetX(u) + 500. * Cos(a5 * .017) set y5=GetWidgetY(u) + 500. * Sin(a5 * .017) set x=GetUnitX(u) set y=GetUnitY(u) call DestroyEffect(AddSpecialEffect(eff,x1,y1)) call DestroyEffect(AddSpecialEffect(eff,x2,y2)) call DestroyEffect(AddSpecialEffect(eff,x3,y3)) call DestroyEffect(AddSpecialEffect(eff,x4,y4)) call DestroyEffect(AddSpecialEffect(eff,x5,y5)) call TriggerSleepAction(0.01) endloop call DestroyLightning(l1) call DestroyLightning(l2) call DestroyLightning(l3) call DestroyLightning(l4) call DestroyLightning(l5) set u=null set eff="" set l1=null set l2=null set l3=null set l4=null set l5=null endfunction
//=========================================================================== function InitTrig_NewYearStar takes nothing returns nothing set gg_trg_NewYearStar = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_NewYearStar, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_NewYearStar, Condition( function Trig_NewYearStar_Conditions ) ) call TriggerAddAction( gg_trg_NewYearStar, function Trig_NewYearStar_Actions ) endfunction
|
|
|
|
SirNikolas | Дата: Воскресенье, 08 Января 2012, 13:01:03 | Сообщение # 12 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Взялся.
|
|
|
|
Gamefr@nk | Дата: Воскресенье, 08 Января 2012, 13:01:43 | Сообщение # 13 |
8 уровень
Группа: Проверенные
Сообщений: 638
Награды: 0
Репутация: 188
Блокировки:
| SirNikolas,
|
|
|
|
SirNikolas | Дата: Воскресенье, 08 Января 2012, 13:06:06 | Сообщение # 14 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Постой, что я вижу! Ты просишь оптимизировать заклинание для турнира?!
|
|
|
|
Gamefr@nk | Дата: Воскресенье, 08 Января 2012, 13:08:22 | Сообщение # 15 |
8 уровень
Группа: Проверенные
Сообщений: 638
Награды: 0
Репутация: 188
Блокировки:
| SirNikolas, нет это другое
Добавлено (08 Январь 2012, 13:07:06) --------------------------------------------- для карты SirNikolas, и не оптимизировать ,а пример таймера прошу... Пример таймера на цикл* турнирные я уже сделал кроме ульты
Сообщение отредактировал Gamefr@nk - Воскресенье, 08 Января 2012, 13:10:54 |
|
|
|
SirNikolas | Дата: Воскресенье, 08 Января 2012, 13:23:56 | Сообщение # 16 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Gamefr@nk) Trig_NewYearStar_Actions Ну-ну.
Простейший пример - в течение пяти секунд создает эффект, потом наносит урон:Code globals constant hashtable udg_Hash = InitHashtable() endglobals
function Trig_test_Conditions takes nothing returns boolean return GetSpellAbilityId() == 'A000' endfunction
function Trig_test_Timer takes nothing returns nothing local timer t = GetExpiredTimer() local integer id = GetHandleId(t) local widget w = LoadWidgetHandle(udg_Hash, id, 1) local integer count = LoadInteger(udg_Hash, id, 2) + 1 call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl", w, "origin")) if count == 5 then call UnitDamageTarget(LoadUnitHandle(udg_Hash, id, 0), w, 100., true, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS) call PauseTimer(t) call DestroyTimer(t) call FlushChildHashtable(udg_Hash, id) else call SaveInteger(udg_Hash, id, 2, count) endif set t = null set w = null endfunction
function Trig_test_Actions takes nothing returns nothing local timer t = CreateTimer() local integer id = GetHandleId(t) call SaveAgentHandle(udg_Hash, id, 0, GetTriggerUnit()) call SaveAgentHandle(udg_Hash, id, 1, GetSpellTargetUnit()) call TimerStart(t, 1., true, function Trig_test_Timer) set t = null endfunction
function InitTrig_test takes nothing returns nothing local trigger trig = CreateTrigger() local integer i = 0 loop call TriggerRegisterPlayerUnitEvent(trig, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) exitwhen i == 15 set i = i + 1 endloop call TriggerAddCondition(trig, Condition(function Trig_test_Conditions)) call TriggerAddAction(trig, function Trig_test_Actions) set trig = null call Preload("Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl") endfunction
|
|
|
|
Gamefr@nk | Дата: Воскресенье, 08 Января 2012, 13:24:58 | Сообщение # 17 |
8 уровень
Группа: Проверенные
Сообщений: 638
Награды: 0
Репутация: 188
Блокировки:
| SirNikolas, Я думаю в конце турнира если спросишь у судей тебе дадут мои спеллы,сам увидишь) Добавлено (08 Январь 2012, 13:24:58) --------------------------------------------- Спасибо)
|
|
|
|
Dreii | Дата: Воскресенье, 08 Января 2012, 14:08:12 | Сообщение # 18 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| SirNikolas, local trigger же плохо?
|
|
|
|
SirNikolas | Дата: Воскресенье, 08 Января 2012, 15:28:19 | Сообщение # 19 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| При ините - нет. Я бы еще переменную триггера из globals выкинул:Code define <trigger gg_trg_test = null>
|
|
|
|
Dreii | Дата: Воскресенье, 08 Января 2012, 15:58:06 | Сообщение # 20 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| SirNikolas, Вот он еще спрашивал урон по линии молнии,как бы ты это реализовал?Мне самому интересно)
|
|
|
|
SirNikolas | Дата: Воскресенье, 08 Января 2012, 18:59:49 | Сообщение # 21 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Через два противоположных угла определяем прямоугольник, дамажим всех, кто попадает в него.
|
|
|
|
|
|
|
|
|
|
|