XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Finfal

offline
Опыт: 3,413
Активность:
Можно ли добавить атаку через триггеры?
Я имею ввиду не используя add ability. Мне просто нужно что бы постоянно атака увеличивалась на 20 до бесконечности =) Через определенное время
Старый 27.06.2005, 00:06
NETRAT

offline
Опыт: 83,712
Активность:
Нет, только через абилу или апгрейд - а их количество ограничено
Старый 27.06.2005, 00:12
THeBloodiest

offline
Опыт: 20,881
Активность:
Берется W3 unlimited
функция unit че-то такое damage
Второй вариант:
Юзать все-таки абилу повышая у нее уровень, и у каждого нового уровня делать + к атаке героя. Все через триггеры, т.к уровни должны появляться динамически
Старый 27.06.2005, 00:33
NETRAT

offline
Опыт: 83,712
Активность:
THeBloodiest Геморился я с WE Unlim - там фича такая что большинство Advanced Triggers сделаны при помощи грейдов - то есть фактически это будет то же самое что ввести грейд, но места занимать будет много больше(AT много места жрут) и реализовано может быть криво. С этой траблой я столкнулся когда мне нужно было дальность атаки юнитов менять, то есть WEU не так уж и крут
Старый 27.06.2005, 01:01
Sergey
Старейший
offline
Опыт: 44,363
Активность:
Finfal до бесконечности увеличивать атаку - нет смысла. А так, в принципе, даже при помощи 5 абил можно добиться, чтобы бонус атаки можно было варьировать от +20 до +20 000. Т.е. бонус достигнет этого значения за 1000 шагов.Даже если на каждый шаг - 1 сек, то понадобится более 15 минут.
И все это без we unlimited.
Метод правда не самый простой - нужно знать, что такое двоичные числа.
Старый 27.06.2005, 01:06
THeBloodiest

offline
Опыт: 20,881
Активность:
Код:
function ChangeDamage takes unit U, boolean Increase, integer Zahl returns nothing
if not Increase then
set Zahl = 0 - Zahl
endif
call AddBonus(Zahl,U,0)
endfunction

function SetBonus takes integer amount,unit who,integer t returns boolean
local integer bonus=amount
local integer array bit
local integer i=1
set bit[0]=1
loop
set bit[i]=bit[i-1]*2
exitwhen i==11
set i=i+1
endloop
call ClearBonus(who,t)
loop
if (bonus>=bit[i]) then
call UnitAddAbilityBJ(udg_zz_BnsBit[Ix(t,i)],who)
set bonus=bonus-bit[i]
endif
exitwhen i==0
set i=i-1
endloop
return (amount<=4095 and t<=3 and t>=0 and amount>=0 and who!=null)
endfunction

function AddBonus takes integer amount,unit who,integer t returns boolean
return SetBonus((GetBonus(who,t)+amount),who,t)
endfunction


мда... вопрос снят. Абилы однозначно
Старый 27.06.2005, 01:06
NETRAT

offline
Опыт: 83,712
Активность:
Вломы в таком коде разбираться...
Скорее системы счисления... Так вот мне интересно сколько абил входит в набор - две чтоли?
Обьясни на пальцах (кто нибудь)
Старый 27.06.2005, 01:10
Sergey
Старейший
offline
Опыт: 44,363
Активность:
Да код как код. Берется массив абил. Например, атака
+1, +2, +4, +8, +16, +32, +64 и т.д. по степеням двойки
Любое число от 0 до 127 может быть задано двоичным кодом. Ну допустим, у нас 7 разрядов.
1110101 означает 1*64+1*32+1*16+0*8+1*4+0*2+1 = 117
Т.е. чтобы задать бонус +117 надо дать юниту абилу +64, +32, +16, +4 и +1.
Можно сделать алгоритм перевода десятичного числа в двоичное, после чего давать юниту способности бонуса в зависимости от этого двоичного числа. Итого - семь абил дают размах бонуса от 0 до +127.
А если брать не семь способностей, а скажем 10, то уже получаем промежуток от 0 до 2047. Причем нет необходимости создавать новых 10 абил. Можно переделать существующие бонусы атаки - их как раз штук десять и будет.
А если нужен шаг 20 единиц, то можно результат домнажать на 20.

Отредактировано Sergey, 27.06.2005 в 01:25.
Старый 27.06.2005, 01:20
NETRAT

offline
Опыт: 83,712
Активность:
все, понял, а то как обычно стормозил... 2х строк было достаточно
Старый 27.06.2005, 01:25
Finfal

offline
Опыт: 3,413
Активность:
Цитата:
Сообщение от THeBloodiest
Код:
function ChangeDamage takes unit U, boolean Increase, integer Zahl returns nothing
if not Increase then
set Zahl = 0 - Zahl
endif
call AddBonus(Zahl,U,0)
endfunction

function SetBonus takes integer amount,unit who,integer t returns boolean
local integer bonus=amount
local integer array bit
local integer i=1
set bit[0]=1
loop
set bit=bit[i-1]*2
exitwhen i==11
set i=i+1
endloop
call ClearBonus(who,t)
loop
if (bonus>=bit[i]) then
call UnitAddAbilityBJ(udg_zz_BnsBit[Ix(t,i)],who)
set bonus=bonus-bit[i]
endif
exitwhen i==0
set i=i-1
endloop
return (amount<=4095 and t<=3 and t>=0 and amount>=0 and who!=null)
endfunction

function AddBonus takes integer amount,unit who,integer t returns boolean
return SetBonus((GetBonus(who,t)+amount),who,t)
endfunction


мда... вопрос снят. Абилы однозначно

Это ведь jazz? Извинтие я просто его не знаю :( И поэтому не понял систему...

[i]Finfal добавил:
Можно это какни будь переделать на триггеры?
Старый 27.06.2005, 01:45
Markiz

offline
Опыт: 11,432
Активность:
Цитата:
function ChangeDamage takes unit U, boolean Increase, integer Zahl returns nothing
if not Increase then
set Zahl = 0 - Zahl
endif
call AddBonus(Zahl,U,0)
endfunction

А не проще так:
Код:
function ChangeDamage takes unit U, integer Zahl returns nothing
call AddBonus(Zahl,U,0)
endfunction

Отредактировано THeBloodiest, 27.06.2005 в 17:42.
Старый 27.06.2005, 05:00
Sergey
Старейший
offline
Опыт: 44,363
Активность:
При желании алгоритм можно напиисать и без jass. Понадобится пара массивов. В первыйс занести абилы с бонусами-степенями двойки. Второй массив использовать для перевода числа в двоичный вид.
Алгоритм тут несложный. Нужно в цикле находить целую часть и остаток деления на 2. Будет время -кину.
Старый 27.06.2005, 08:32
Finfal

offline
Опыт: 3,413
Активность:
Можно по подробней пожалуста =)
Старый 28.06.2005, 00:57
Sergey
Старейший
offline
Опыт: 44,363
Активность:
держи пример
Старый 28.06.2005, 14:27
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 00:32.