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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Раздел картостроителя » ФУНКЦИЯ для отслеживания времени "Анимация - точка поврежден
ФУНКЦИЯ для отслеживания времени "Анимация - точка поврежден
BorodachДата: Четверг, 12 Марта 2015, 15:18:07 | Сообщение # 1
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
Данная функция отслеживает время от начала атаки до начала вылета снаряда. Принимает 2 значения, базовую анимацию - повреждений и текущую скорость атаки.
Можно использовать для собственных системок урона и не только...
Одна из ее полезностей в карте "черновике" где можно отловить промахи по цели и нанесеный урон "рукой" (юнитам у которых нет снарядов)

Код

scope ANIMATIONSPEED initializer Registry

globals
real array number [80]
endglobals

function AniSpeed takes integer AtSpeed,real AnSpeed returns real
local integer l = 0
local real data = AnSpeed
local real temp = AnSpeed
local real exit = AnSpeed
      
     if AtSpeed > 400 then
         set AtSpeed = 400
     elseif AtSpeed < -80 then
         set AtSpeed = -80
     endif
      
     if AtSpeed != 0 then
          
         if AtSpeed < 0 then
          
             set l = AtSpeed - AtSpeed * 2
             set temp = temp * number[l]
              
         else
              
             loop
             set l = l + 1
              
                     set temp = data - temp * (0.01 * l)
                     if exit > temp then
                         set exit = temp
                     else
                         set temp = exit
                     endif
                  
                 exitwhen l >= AtSpeed  
             endloop
              
         endif
     endif
      
     return temp
endfunction

function Registry takes nothing returns nothing
number[1] = 1.0101
number[2] = 1.0204
number[3] = 1.0309
number[4] = 1.0416
number[5] = 1.0526
number[6] = 1.0638
number[7] = 1.0752
number[8] = 1.0869
number[9] = 1.0989
number[10] = 1.1111
number[11] = 1.1235
number[12] = 1.1363
number[13] = 1.1494
number[14] = 1.1627
number[15] = 1.1764
number[16] = 1.1904
number[17] = 1.2048
number[18] = 1.2195
number[19] = 1.2345
number[20] = 1.2500
number[21] = 1.2658
number[22] = 1.2820
number[23] = 1.2986
number[24] = 1.3157
number[25] = 1.3333
number[26] = 1.3513
number[27] = 1.3698
number[28] = 1.3888
number[29] = 1.4084
number[30] = 1.4285
number[31] = 1.4492
number[32] = 1.4705
number[33] = 1.4925
number[34] = 1.5151
number[35] = 1.5384
number[36] = 1.5625
number[37] = 1.5873
number[38] = 1.6129
number[39] = 1.6393
number[40] = 1.6666
number[41] = 1.6949
number[42] = 1.7241
number[43] = 1.7543
number[44] = 1.7857
number[45] = 1.8181
number[46] = 1.8518
number[47] = 1.8868
number[48] = 1.9230
number[49] = 1.9607
number[50] = 2.0000
number[51] = 2.0408
number[52] = 2.0833
number[53] = 2.1276
number[54] = 2.1739
number[55] = 2.2222
number[56] = 2.2727
number[57] = 2.3255
number[58] = 2.3809
number[59] = 2.4390
number[60] = 2.5000
number[61] = 2.5641
number[62] = 2.6315
number[63] = 2.7027
number[64] = 2.7777
number[65] = 2.8571
number[66] = 2.9411
number[67] = 3.0303
number[68] = 3.1250
number[69] = 3.2258
number[70] = 3.3333
number[71] = 3.4482
number[72] = 3.5714
number[73] = 3.7037
number[74] = 3.8461
number[75] = 4.0000
number[76] = 4.1666
number[77] = 4.3478
number[78] = 4.5454
number[79] = 4.7619
number[80] = 5.0000
endfunction

endscope


TestingMap


Karamba
 

BiboДата: Четверг, 12 Марта 2015, 16:22:13 | Сообщение # 2
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
Страдающие отступы. Смесь vJass и cJass. Тонна закомментированных строк.
Возможность понять и разобраться в примере стремится к нулю.
 

BorodachДата: Четверг, 12 Марта 2015, 17:00:24 | Сообщение # 3
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
Bibo,
Цитата Borodach ()
в карте "черновике"

Карта для проверки работоспособности скорее... Саму функцию написал в теме.


Karamba
 

BiboДата: Четверг, 12 Марта 2015, 17:23:02 | Сообщение # 4
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
То же относится и к тексту темы в тегах кода, ну, кроме части о комментариях.
Но не буду оффтопить своим чувством прекрасного. Говоря по делу:
Зачем это может быть нужно на практике?
Зачем указывать размерность массива глобальной переменной? В жассе размерность в принципе указать невозможно.
 

BorodachДата: Четверг, 12 Марта 2015, 20:28:20 | Сообщение # 5
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
Цитата Bibo ()
Зачем это может быть нужно на практике?

Ну к примеру: "Тиренд" может стрелять несколькими "Огненными стрелами"
Цитата Bibo ()
Зачем указывать размерность массива глобальной переменной?

Помню раньше нельзя было....


Karamba
 

BiboДата: Четверг, 12 Марта 2015, 20:47:04 | Сообщение # 6
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
Цитата Borodach ()
Ну к примеру: "Тиренд" может стрелять несколькими "Огненными стрелами"

Только если вся система атаки будет выполнена триггерно, что подарит необходимость в огромной базе данных способностей и базового урона юнитов. Или же создавать даммиков, что выстрелят одновременно с Тиренд, но в таком случае возникнут проблемы с расчетом урона, если дополнительный снаряд долетит до цели раньше чем основной.
Цитата Bibo ()
Помню раньше нельзя было....

Независимо от того, указываешь ты размерность массива или нет, тебе в любом случае будут доступны все ~8 тысяч ячеек. Размер указанный после объявления переменной, парсер просто напросто закомментирует.


Сообщение отредактировал Bibo - Четверг, 12 Марта 2015, 20:49:36
 

SirNikolasДата: Пятница, 13 Марта 2015, 00:01:34 | Сообщение # 7
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Если указать размерность больше 8192 (213), vJass создаст несколько подряд идущих массивов и две функции - аксессор и мутатор - к ним, что позволяет успешно имитировать очень большие массивы. Функции по индексу определяют нужный массив (бин. поиском) и возвращают/задают его элементы (транслируя индекс, естественно).
Примечание: в текущей версии JassHelper есть баг: он создает "длинный" массив, даже если указана размерность строго 8192 (которая влезает и в обычный).

Если указать размерность меньше 8192, это дает возможность оптимизатору слить несколько массивов в один. Очень полезно во многих случаях. Первый пришедший на ум пример: в карте есть десятки MPI-заклинаний, на каждое требуется несколько массивов на 12 элементов.
Ну и ложка дегтя, как же без нее. Я бы даже сказал, не ложка, а бочка. Текущая версия JassHelper вообще не умеет сливать массивы. :) То есть малые размерности попросту игнорируются.


 

DuosoraДата: Пятница, 13 Марта 2015, 00:38:22 | Сообщение # 8
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Цитата SirNikolas ()
Ну и ложка дегтя, как же без нее. Я бы даже сказал, не ложка, а бочка. Текущая версия JassHelper вообще не умеет сливать массивы. :) То есть малые размерности попросту игнорируются.

На месте разработчиков JassHelper (не только один Vexorian потеет над ним) я бы сделал так, чтобы слишком малоразмерные массивы (<100) бы интерпретировались как немассивные переменные. Это бы сэкономило память.


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.


Сообщение отредактировал Duosora - Пятница, 13 Марта 2015, 00:38:35
 

SirNikolasДата: Пятница, 13 Марта 2015, 00:59:31 | Сообщение # 9
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Не пройдет. Во что ты транслируешь set a[i] = 0? Компилятор ведь не всегда может вывести, чему равно i в данном месте.

 

DuosoraДата: Пятница, 13 Марта 2015, 12:38:49 | Сообщение # 10
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Цитата SirNikolas ()
Не пройдет. Во что ты транслируешь set a[i] = 0? Компилятор ведь не всегда может вывести, чему равно i в данном месте.

Да, совсем за это забыл. Но, думаю, эти циклы всё одно можно развернуть в какой-то индусский код с приплетением макросов. Ну а как оно себя тогда будет вести - совсем другой вопрос.)


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.
 

Форум о Warcraft 3 » Раздел для картостроителей » Раздел картостроителя » ФУНКЦИЯ для отслеживания времени "Анимация - точка поврежден
  • Страница 1 из 1
  • 1
Поиск:

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