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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Время перезарядки способности.
Время перезарядки способности.
lawsonДата: Суббота, 22 Января 2011, 19:36:00 | Сообщение # 51
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
О боже да закройте вы уже эту тему. Эт уже какой то беспредел!

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

Banzay89Дата: Суббота, 22 Января 2011, 19:36:09 | Сообщение # 52
9 уровень
Группа: Проверенные
Сообщений: 858
Награды: 1
Репутация: 77
Блокировки:
нету такой функции, которая изменяет кд скилла. или я ошибаюсь?
 

FkoFFДата: Суббота, 22 Января 2011, 19:43:11 | Сообщение # 53
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Делаем следующим образом: Создаем 4 скилла с 100 уровнями, с каждым левелом увеличиваем длительность отката на 0.5 секунд, получим 1\1.5\2\2.5 (+0.5), в итоге до 50 секунд. Далее; При касте нужной абилы запоминаем в хэш абилку, удаляем её у персонажа, добавляем абилу с откатом, устанавливаем нужный уровень для нужной длительности отката, заставляем использовать абилку. Запускаем таймер на соответствующее время, по истечению таймера удаляем откатную абилу и возвращаем герою оригинал. Собственно все..

Примерный внешний вид кода:
function CD2 takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer i = LoadInteger(udg_Data,GetHandleId(t), 0)
local integer i1 = LoadInteger(udg_Data,GetHandleId(t), 1)
local unit u = LoadUnitHandle(udg_Data,GetHandleId(t), 2)

call RemoveLocation(u, 'cooldownabilityid')
call AddAbility(u, i1)
call SetUnitAbilityLevel(u,i1,i)

call DestroyTimer(t)
call FlushChildHashtable(udg_Data,GetHandleId(t))
set t = null
set u = null
endfunction

function CD takes nothing returns nothing
local integer i = 1
local unit u1 = GetTriggerUnit()
local unit u2 = GetSpellTargetUnit()
local real r = 0.5*(GetDist(GetUnitX(u1, GetUnitY(u1), GetUnitX(u2),GetUnitY(u2))\5)
local timer t = CreateTimer()

call SaveInteger(udg_Data,GetHandleId(t),0,GetUnitAbilityLevel(GetSpellAbility()))
call SaveInteger(udg_Data,GetHandleId(t),1, GetSpellAbilityId())
call SaveUnitHandle(udg_Data,GetHandleId(t), 2, u1)
call RemoveAbility(GetSpellAbility())
call AddAbility(u1, 'cooldownabilityid')
call SetUnitAbilityLevel(u1, 'cooldownabilityid', r\2)
call OrderUnit(u1, 'cooldownabilityid')
call TimerStart(t, r, false,function CD2)

set t = null
set u1 = null
set u2= null
endfunction

писал сразу на форуме, по этому ошибок может быть море, но логическая составляющая скрипта верна.

Однако у этого способа есть несколько больших проблем.
1. Сколько Способностей для каста, столько и абил * количество уровней у абилы
2. Все способности должны быть в прелоаде карты (подгружены в ините на дамми юнитах, иначе в игре будут эпические лаги)
3. Если обойти пункт 1, сделав 4 способности(по максимальному количеству нюков у одного героя) то не будет А) - описания скилла, Б) - иконки скилла

Собственно все. Работа муторная, но, в некоторых случаях она того стоит.


 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Время перезарядки способности.
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Поиск:

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