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

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

Ответ
 
APXEOLOG
Прощай XGM, удачи тебе.
offline
Опыт: 1,015
Активность:
Динамическое изменение запаса маны
Можно ли динамически установить герою уровень максимальной маны?
При этом само кол-во максимальной маны будет тоже определяться триггерно.
Старый 20.02.2009, 13:06
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
APXEOLOG, добавить абилки на основе камня маны.
Старый 20.02.2009, 13:25
APXEOLOG
Прощай XGM, удачи тебе.
offline
Опыт: 1,015
Активность:
Hellfim, добавление абилок подразумевает что я знаю количество добавляемой маны не так ли?

APXEOLOG добавил:
Да и еще, можно ли герою добавить например 100 абилок (невидимых но тем не менее)
Старый 20.02.2009, 13:27
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
APXEOLOG, в чем проблема сделать абилки на 1, 2, 8, 16, 32, 64...4096 едениц маны и высчитывать по степени двойки?

Hellfim добавил:
Можно
Старый 20.02.2009, 13:29
Profi

offline
Опыт: 3,640
Активность:
Тригерно можно узнавать максимальное количество манны. А так да добавлять абилку предметную.
Старый 20.02.2009, 13:31
APXEOLOG
Прощай XGM, удачи тебе.
offline
Опыт: 1,015
Активность:
Ну видимо так и придется делать...просто я не хотел очень париться, думал мож легче можно =)

APXEOLOG добавил:
Вот алгоритм, может кому понадобиться... Использую 12 абилок. (1-2048) по степеням двойки.
Код:
function AddMaxMana takes integer value returns nothing
loop
exitwhen value == 0
if (value-2048 >= 0) then
 +1 абилка на 2048
 set value = value - 2048
elseif (value-1024 >= 0) then
  +1 абилка на 1024
 set value = value - 1024
.........
elseif (value - 1 >= 0)
  +1 абилка на 1
 set value = value - 1
endif
endloop
endfunction
Старый 20.02.2009, 13:52
vinc2k

offline
Опыт: 130
Активность:
Неоптимальный алгоритм. Допустим я установил ману на 2048. Как мне потом установить ману скажем на 1024? Или например на -1024? =)
Код:
method UnitSetMana takes integer amount returns nothing
        local integer i = 14 - 1
        set .bMana = amount
        if amount < 0 then
            call UnitAddAbility(.u,ManaAbil[i+1])
            set amount = 0-(Pow2Mana[i+1] - amount)
        else
            call UnitRemoveAbility(.u,ManaAbil[i+1])
        endif
        loop
            if amount >= Pow2Mana[i] then
            call UnitAddAbility(.u,ManaAbil[i])
            set amount = amount - Pow2Mana[i]
            else
                call UnitRemoveAbility(.u,ManaAbil[i])
            endif
            set i = i - 1
            exitwhen i < 0
        endloop
        call SetUnitState(.u,UNIT_STATE_MANA,GetUnitState(.u,UNIT_STATE_MAX_MANA))
    endmethod

       //.....Init
        set i = 1
        loop
            set Pow2Mana[i] = Pow2Mana[i - 1] * 2
            set i = i + 1
            exitwhen i > 13
        endloop
        set Pow2Mana[14] = -16384

       //....Preload
        set u = CreateUnit(Player(15),'hpea',0,0,0)
        set i = 0
        loop
            call UnitAddAbility(u,ManaAbil[i])
            set i = i + 1
            exitwhen i > 14
        endloop
Старый 20.02.2009, 14:23
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
vinc2k
» Ну тогда уж так

Код:
globals
    integer array abid
    unit lol
endglobals

function InitAndPreload takes nothing returns nothing
    local integer i=0
    set abid[0]='A000'
    //...
    set abid[14]='A00E'
    loop
        exitwhen i>14
        call UnitAddAbility(lol,abid[i])
        call UnitRemoveAbility(lol,abid[i])
        set i=i+1
    endloop
endfunction

function UnitSetMana takes integer j, returns nothing
    local integer i=0
    loop
        exitwhen i>14
        call UnitRemoveAbility(lol,abid[i])
        set i=i+1
    endloop
    loop
        exitwhen i<0
        if Pow(2,i)<=j then
            call UnitAddAbility(lol,abid[i])
            set j=j-R2I(Pow(2,i))
        endif
        set i=i-1
    endloop
endfunction

Старый 20.02.2009, 15:00
APXEOLOG
Прощай XGM, удачи тебе.
offline
Опыт: 1,015
Активность:
Написал две функции:
AddMaxMana
ResetMaxMana
И даже сделал спелл - временное увеличение маны. Если комуто надо - могу выложить
Собственно это первые функции которые сработали правильно с первого раза (с чем себя и поздравляю)
Старый 20.02.2009, 15:22
alexkill

offline
Опыт: 18,872
Активность:
APXEOLOG, я там понимаю, вопрос решен? Закрыто.

Отредактировано alexkill, 12.04.2009 в 22:26.
Старый 20.02.2009, 15:45
Ответ

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

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

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

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



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