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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Заряды способности
Заряды способности
PrikolДата: Воскресенье, 15 Марта 2015, 14:01:40 | Сообщение # 1
8 уровень
Группа: Проверенные
Сообщений: 699
Награды: 0
Репутация: 427
Блокировки:
Доброго времени суток, у меня возникла проблема.
Я захотел сделать способность, которая увеличивается свой урон за её использование. То есть, молот бурь наносит 200 урона, ты использовал данный скилл, Молот стал наносить 250 урона, ещё раз использовал, он начал наносить 300 урона и тд.
Но самое главное через определённое кол-во времени урон должен возвратиться в 200 урона. То есть из 300 в 250, из 250 в 200. Вот так вот.
Я как сделал: Создал переменную Z, прибавляю к ней + 1 после использования скила, и наношу урон (200 + Z * 50). Вроде всё норм, но я не могу допереть, как реализовать как бэ спадение зарядов постепенно...
Ну типо пассивки Сларка из доты. Ты получил 1 заряд он у тебя спадет через 20 сек, у тебя 2 заряда : 1 спадет через 15, другой через 13 секунд и тд.


 

КристоферДата: Воскресенье, 15 Марта 2015, 14:11:53 | Сообщение # 2
7 уровень
Группа: Проверенные
Сообщений: 401
Награды: 0
Репутация: 338
Блокировки:
Опиши подробнее, при каких условиях должно спадать, в зависимости от времени или от кол-ва использования скила?

"История нашего народа знает немало светлых страниц. Темных было тоже достаточно. И все с белыми пятнами. От белых пятен истории нужно избавляться, но нельзя же всё мазать черной краской!"(с) Рохан.
 

BiboДата: Воскресенье, 15 Марта 2015, 14:18:51 | Сообщение # 3
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
Создай массив таймеров. При использовании способности, пройди циклом по массиву и запускай первый не запущенный таймер. По окончанию действия таймера, снижай значение урона/стаков в переменной.

Сообщение отредактировал Bibo - Воскресенье, 15 Марта 2015, 14:19:41
 

BorodachДата: Воскресенье, 15 Марта 2015, 15:15:38 | Сообщение # 4
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
Лучше 1 таймер и массив реальных ( time[index] ).

Приводит способность в действие
если time[1] <= 0.
Запускаешь периодический таймер
установить Z = Z + 1

цыкл от 1 до Z
если time[index] <= 0.
установить time[index] = время
*************************
В триггере с таймером
если time[1] <= 0.
Паузишь периодический таймер

цыкл от 1 до Z
если time[index] > 0.
установить time[index] = time[index] - 1.
иначе
установить Z = Z - 1


Karamba
 

BiboДата: Воскресенье, 15 Марта 2015, 15:19:09 | Сообщение # 5
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
Цитата Borodach ()
Лучше 1 таймер и массив реальных ( time[index] ).

Один, но с малым интервалом, чтобы погрешность была минимальна.
 

ExtrematorДата: Понедельник, 16 Марта 2015, 17:01:53 | Сообщение # 6
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
а стаки должны виcеть N сек после получения? (как пассив Сларка / стрелы Хускара)
или складываться, и обновлять время действия? (как яд ШД / напалм БэтРайдера)
 

PrikolДата: Вторник, 17 Марта 2015, 15:14:05 | Сообщение # 7
8 уровень
Группа: Проверенные
Сообщений: 699
Награды: 0
Репутация: 427
Блокировки:
Extremator,
Цитата Extremator ()
как пассив Сларка

Да, как пассивка сларка.
____________________
Разбирая пример Borodach'a, я додумался до того, что можно сделать так : создавать дамми юнита, давать ему время жизни ( время заряда ), и в способности я бы ставил [ 200 + (50* Кол-во юнитов на карте типа). Возможна ли такая реализация? Куда меньше заморочки...


 

BiboДата: Вторник, 17 Марта 2015, 15:52:37 | Сообщение # 8
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
Вот это я понимаю, метода.
 

PrikolДата: Вторник, 17 Марта 2015, 16:51:43 | Сообщение # 9
8 уровень
Группа: Проверенные
Сообщений: 699
Награды: 0
Репутация: 427
Блокировки:
Bibo, Я не пойму. Ирония или нет?

 

BruДата: Вторник, 17 Марта 2015, 18:17:53 | Сообщение # 10
i<3bo4k@
Группа: Акулы
Сообщений: 4750
Награды: 2
Репутация: 1950
Блокировки:
Цитата Prikol ()
Разбирая пример Borodach'a, я додумался до того, что можно сделать так : создавать дамми юнита, давать ему время жизни ( время заряда ), и в способности я бы ставил [ 200 + (50* Кол-во юнитов на карте типа). Возможна ли такая реализация? Куда меньше заморочки...

Цитата Prikol ()
Куда меньше заморочки...

 

ВолчачкаДата: Вторник, 17 Марта 2015, 22:50:17 | Сообщение # 11
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Код

function ExThunderBolt takes nothing returns nothing
       local timer t = GetExpiredTimer()
       local integer id = GetHandleId(t)
       local integer ip = LoadInteger( udg_H, id, 0)
       local integer i = 0
       local integer end = 0
          
       loop
           exitwhen i == 15
           if udg_ThunderBoltCharge[i+ip*15] != 0 then
               set udg_ThunderBoltCharge[i+ip*15] = udg_ThunderBoltCharge[i+ip*15]  - 1
               set end = end + 1
           endif
           set i = i + 1
           endloop
          
       if end == 0 then
          call DestroyTimer(t)
          set udg_ThunderBoltTimer[ip] = null
          call FlushChildHashtable( udg_H, id )
              
       endif
          
       set t = null
endfunction

function RegThunderBoltDmgUp takes unit u returns nothing
       local integer i = 0
       local integer en = GetPlayerId(GetOwningPlayer(u))
       local boolean b = false
       local timer t = udg_ThunderBoltTimer[en]
       if t != null then
           loop
           exitwhen i == 15 or b
           set udg_ThunderBoltDamageStuck[en] = udg_ThunderBoltDamageStuck[en] + 50.
           if udg_ThunderBoltCharge[i+en*15] == 0 then
               set udg_ThunderBoltCharge[i+en*15] = udg_ThunderBoltCharge[i+en*15]  + 20
               set b = true  
           endif
           set i = i + 1
           endloop
       else
           set t = CreateTimer()
           set i = GetHandleId(t)
           call SaveTimerHandle( udg_H, GetHandleId(u), 127, t )
           call SaveInteger(  udg_H, i, 0, GetPlayerId(GetOwningPlayer(u)) )
          call SaveUniHandlet(  udg_H,i, 1, u )
           set udg_ThunderBoltCharge[i+en*15] = udg_ThunderBoltCharge[en*15]  + 20
           call TimerStart( t, 1., true, function ExThunderBolt)
       endif
          
       set t = null
endfunction


Обн: 19.03.2015


Сообщение отредактировал Волчачка - Четверг, 19 Марта 2015, 18:59:08
 

BiboДата: Вторник, 17 Марта 2015, 23:05:16 | Сообщение # 12
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
Волчачка, осилил жасс - молодец, но ни к чему теперь давить им каждого гуишника.
Цитата Prikol ()
Bibo, Я не пойму. Ирония или нет?

Утрирую.
Твой способ пригоден для использования, однако он еще более ресурсозатратный и не оптимальный.
 

ВолчачкаДата: Вторник, 17 Марта 2015, 23:10:18 | Сообщение # 13
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Цитата Bibo ()
Волчачка, осилил жасс - молодец, но ни к чему теперь давить им каждого гуишника.

Я могу это реализовать и на GUI
Не до оценивай меня :D
 

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

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