Сейчас 00:23:23 Понедельник, 4 июля, 2022 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » 1й скилл на jass (помогите))
1й скилл на jass
-Velikolepniy-Дата: Суббота, 21 Июля 2012, 15:07:57 | Сообщение # 1
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
Я написал свой 1й jasss скилл. Суть его в том, что плавно летит ракета в чувака, а если он ходит то поворачивает за ним. НО! я ставлю
call PolledWait( 0.01 ), но все равно двигается рывками :\\

помогите плиз, что нужно написать что бы была плавная анимация?
 

SirNikolasДата: Суббота, 21 Июля 2012, 15:45:26 | Сообщение # 2
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Использовать таймеры.

 

-Velikolepniy-Дата: Суббота, 21 Июля 2012, 15:47:46 | Сообщение # 3
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
Ответа глупее я и ожидать не мог))

Может кто-нибудь знающий поможет плиз?)
 

SirNikolasДата: Суббота, 21 Июля 2012, 16:33:18 | Сообщение # 4
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Code
globals
    constant hashtable udg_Hash = InitHashtable()
    constant integer Spell_Rocket_Ability = 'A000'
    constant integer Spell_Rocket_Dummy = 'h000'
    constant real Spell_Rocket_Speed = 20.//speed * period
    constant real Spell_Rocket_Period = .05
    constant real Spell_Rocket_ExplodeRange = 100.
endglobals

constant function Trig_Rocket_Damage takes integer level returns real
    return 50. + level * 100.
endfunction

function Trig_Rocket_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == Spell_Rocket_Ability
endfunction

function Trig_Rocket_Timer takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer id = GetHandleId(t)
    local unit r = LoadUnitHandle(udg_Hash, id, 0)
    local unit u2 = LoadUnitHandle(udg_Hash, id, 1)
    local real x = GetWidgetX(r)
    local real y = GetWidgetY(r)
    local real x2 = GetWidgetX(u2)
    local real y2 = GetWidgetY(u2)
    local real a = Atan2(y2 - y, x2 - x)
    if IsUnitInRange(r, u2, Spell_Rocket_ExplodeRange) then
        call UnitDamageTarget(r, u2, LoadReal(udg_Hash, id, 2), true, false, null, DAMAGE_TYPE_MAGIC, null)
        call KillUnit(r)
        //call PauseTimer(t)
        call DestroyTimer(t)
        call FlushChildHashtable(udg_Hash, id)
    else
        call SetUnitFacing(r, a * 57.296)
        call SetUnitX(r, x + Cos(a) * Spell_Rocket_Speed)
        call SetUnitY(r, y + Sin(a) * Spell_Rocket_Speed)
    endif
    set t = null
    set r = null
    set u2 = null
endfunction

function Trig_Rocket_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    local integer id = GetHandleId(t)
    local unit u = GetTriggerUnit()
    local unit u2 = GetSpellTargetUnit()
    local real x = GetWidgetX(u)
    local real y = GetWidgetY(u)
    call SaveAgentHandle(udg_Hash, id, 0, CreateUnit(GetOwningPlayer(u), Spell_Rocket_Dummy, x, y, Atan2(GetWidgetY(u2) - y, GetWidgetX(u2) - x) * 57.296))
    call SaveAgentHandle(udg_Hash, id, 1, u2)
    call SaveReal(udg_Hash, id, 2, Trig_Rocket_Damage(GetUnitAbilityLevel(u, Spell_Rocket_Ability)))
    call TimerStart(t, Spell_Rocket_Period, true, function Trig_Rocket_Timer)
    set t = null
    set u = null
    set u2 = null
endfunction

function InitTrig_Rocket 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 == 11
        set i = i + 1
    endloop
    call TriggerAddCondition(trig, Condition(function Trig_Rocket_Conditions))
    call TriggerAddAction(trig, function Trig_Rocket_Actions)
    set trig = null
endfunction


 

-Velikolepniy-Дата: Суббота, 21 Июля 2012, 17:53:21 | Сообщение # 5
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
и?
 

SirNikolasДата: Суббота, 21 Июля 2012, 17:59:12 | Сообщение # 6
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (-Velikolepniy-)
что нужно написать, чтобы была плавная анимация


 

-Velikolepniy-Дата: Суббота, 21 Июля 2012, 18:09:34 | Сообщение # 7
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
я нифига не понимаю)
constant real Spell_Rocket_Period = .05 я так понял это частота
//call PauseTimer(t)
call DestroyTimer(t)

а где время таймера обозначается?)

мне нужна была просто подсказка как это делается, а скил я сам уж сделаю)
 

BiboДата: Суббота, 21 Июля 2012, 18:11:22 | Сообщение # 8
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
Quote (-Velikolepniy-)
а где время таймера обозначается?)

call TimerStart(t, Spell_Rocket_Period, true, function Trig_Rocket_Timer)
 

SirNikolasДата: Суббота, 21 Июля 2012, 18:12:56 | Сообщение # 9
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
С помощью wait'ов плавно сделать нельзя. Нужно использовать таймеры.
Quote (-Velikolepniy-)
а где время таймера обозначается?)
Нигде. Ракета может лететь сколько угодно, пока не достигнет цели.


 

PocifikДата: Суббота, 21 Июля 2012, 18:13:20 | Сообщение # 10
9 уровень
Группа: Проверенные
Сообщений: 1130
Награды: 1
Репутация: 495
Блокировки:
Quote (-Velikolepniy-)
мне нужна была просто подсказка как это делается, а скил я сам уж сделаю)

Создаешь таймер при применении способности, записываешь все нужные значения в хендл уникального айди таймера, запускаешь таймер с нужным периодом (повторяющийся), в таймере загружаешь все значения и делаешь движения.




Сообщение отредактировал Pocifik - Суббота, 21 Июля 2012, 18:14:26
 

-Velikolepniy-Дата: Суббота, 21 Июля 2012, 18:14:21 | Сообщение # 11
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
call TimerStart(t, Spell_Rocket_Period, true, function Trig_Rocket_Timer)

т - таймер, Spell_Rocket_Period-время таймера

а true, function Trig_Rocket_Timer что это?
 

PocifikДата: Суббота, 21 Июля 2012, 18:15:34 | Сообщение # 12
9 уровень
Группа: Проверенные
Сообщений: 1130
Награды: 1
Репутация: 495
Блокировки:
Quote (-Velikolepniy-)
а true, function Trig_Rocket_Timer что это?

Тру, это значит таймер повторятся будет, а функция это название функции, которая будет запускаться при каждом срабатывании таймера (0.05 сек в данном случаи)




Сообщение отредактировал Pocifik - Суббота, 21 Июля 2012, 18:15:53
 

SirNikolasДата: Суббота, 21 Июля 2012, 18:16:04 | Сообщение # 13
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (common.j)
Code
native TimerStart           takes timer whichTimer, real timeout, boolean periodic, code handlerFunc returns nothing


 

-Velikolepniy-Дата: Суббота, 21 Июля 2012, 18:16:50 | Сообщение # 14
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
ну вот мой код) я не понимаю что там не так)

function Trig_Spell_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A006' ) ) then
return false
endif
return true
endfunction

function Trig_Jakiro1_Actions takes nothing returns nothing
local unit chel
local unit kaster
local unit dummy
local integer i = 0
set udg_Kaster_banshi = GetSpellAbilityUnit()
set kaster = udg_Kaster_banshi
set udg_Target_banshi = GetSpellTargetUnit()
set chel = udg_Target_banshi
call CreateNUnitsAtLoc( 1, 'h004', Player(0), GetUnitLoc(udg_Kaster_banshi), bj_UNIT_FACING )
set dummy = GetLastCreatedUnit()
loop
exitwhen i > 10
if ( not ( DistanceBetweenPoints(GetUnitLoc(dummy), GetUnitLoc(chel)) < 50.00 ) ) then
call SetUnitPositionLocFacingBJ( dummy, PolarProjectionBJ(GetUnitLoc(dummy), 10.00, AngleBetweenPoints(GetUnitLoc(dummy), GetUnitLoc(chel))), AngleBetweenPoints(GetUnitLoc(dummy), GetUnitLoc(chel)) )
call TriggerSleepAction( .02 )
else
set i = 11
call KillUnit( dummy )
endif
endloop
endfunction

//===========================================================================
function InitTrig_Spell takes nothing returns nothing
set gg_trg_Spell = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Spell, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Spell, Condition( function Trig_Jakiro1_Conditions ) )
call TriggerAddAction( gg_trg_Spell, function Trig_Jakiro1_Actions )
endfunction
 

BiboДата: Суббота, 21 Июля 2012, 18:17:41 | Сообщение # 15
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
Quote (-Velikolepniy-)
а true, function Trig_Rocket_Timer что это?

true = таймер запускается заного по истечению времени
false = таймер выполнит действие однократно и отключится
Trig_Rocket_Timer = название функции которая будет выполнена по истечению таймера
 

SirNikolasДата: Суббота, 21 Июля 2012, 18:18:18 | Сообщение # 16
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (-Velikolepniy-)
loop
Quote (-Velikolepniy-)
TriggerSleepAction
Quote (-Velikolepniy-)
endloop
Вот что не так. Ожидания в цикле криво работают.


 

PocifikДата: Суббота, 21 Июля 2012, 18:20:24 | Сообщение # 17
9 уровень
Группа: Проверенные
Сообщений: 1130
Награды: 1
Репутация: 495
Блокировки:
-Velikolepniy-, тебе надо всё переделывать, использовать функцию ожидания нельзя, когда нужен мелкий период, по этому надо делать через таймер.



Сообщение отредактировал Pocifik - Суббота, 21 Июля 2012, 18:20:44
 

-Velikolepniy-Дата: Суббота, 21 Июля 2012, 18:21:16 | Сообщение # 18
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
ну вооот((
 

PocifikДата: Суббота, 21 Июля 2012, 18:22:23 | Сообщение # 19
9 уровень
Группа: Проверенные
Сообщений: 1130
Награды: 1
Репутация: 495
Блокировки:
-Velikolepniy-, кстати у тебя код утечен, и вообще он очень не очень.

 

-Velikolepniy-Дата: Суббота, 21 Июля 2012, 18:26:22 | Сообщение # 20
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
ну первый код, как могу)

Добавлено (21 Июля 2012, 18:26:22)
---------------------------------------------
Блин, дайте ссылку плиз на статейку по таймерам)

 

lawsonДата: Воскресенье, 22 Июля 2012, 01:26:34 | Сообщение # 21
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (SirNikolas)
Использовать таймеры.

Quote (-Velikolepniy-)
Ответа глупее я и ожидать не мог

Quote (-Velikolepniy-)
и?

Quote (SirNikolas)
что нужно написать

Quote (-Velikolepniy-)
я нифига не понимаю)

Да согласен, этот Николас надоел своими нубожасс кодами, вообще ни че не шарит в этом ЖНПГ, че он забыл на этом форуме пусть идет учит основы жасс коддинга, чем учить здесь уже прошаренных.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Воскресенье, 22 Июля 2012, 09:08:41
 

PocifikДата: Воскресенье, 22 Июля 2012, 04:50:29 | Сообщение # 22
9 уровень
Группа: Проверенные
Сообщений: 1130
Награды: 1
Репутация: 495
Блокировки:
-Velikolepniy-, кинул статью в лс, а то еще за спам примут.

 

-Velikolepniy-Дата: Воскресенье, 22 Июля 2012, 10:22:57 | Сообщение # 23
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
Спс)
 

SirNikolasДата: Воскресенье, 22 Июля 2012, 10:25:56 | Сообщение # 24
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Вот еще, почитай.

 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » 1й скилл на jass (помогите))
  • Страница 1 из 1
  • 1
Поиск:

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