Сейчас 12:14:11 Суббота, 20 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Урон по линии молнии и плавное движение молнии
[Вопрос] Урон по линии молнии и плавное движение молнии
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

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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
Блокировки:
Через два противоположных угла определяем прямоугольник, дамажим всех, кто попадает в него.

 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Урон по линии молнии и плавное движение молнии
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz