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

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

Закрытая тема
 
insane88
hail xgm
offline
Опыт: 2,228
Активность:
Инвентарь
Всем привет.
Решил сделать свою систему инвентаря, и вроде бы ничего, но есть загвоздка.

Есть кучка "ничего-не-делающих" спеллов в спеллбуке - "кукла" инвентаря. Предмет по щелчку исчезает из инвентаря, вместо него добавляется активная абилка в соответствующем спелбуке - чтобы предмет можно было снять. Но она оказывается не на месте удаленной "ничего-не-делающей", а последней.
Как сделать, чтобы активная абилка добавлялась в нужный слот?

Пример карты там

Код:
function InitAll takes nothing returns nothing
    local integer c=1

    loop
        exitwhen c>10
        set udg_ITEMS_ONHERO[c]=c
        set c=c+1
    endloop

    set udg_ABILITY_BASE[1] ='A008'//Описания способностей
    set udg_ABILITY_BASE[2] ='A003'
    set udg_ABILITY_BASE[3] ='A00N'
    set udg_ABILITY_BASE[4] ='A009'
    set udg_ABILITY_BASE[5] ='A00F'
    set udg_ABILITY_BASE[6] ='A00B'
    set udg_ABILITY_BASE[7] ='A00D'
    set udg_ABILITY_BASE[8] ='A00H'
    set udg_ABILITY_BASE[9] ='A00J'
    set udg_ABILITY_BASE[10]='A00L'//Здесб заканчитвается "кукла"
    set udg_ABILITY_BASE[11]='A004ю//Меч

    set udg_ITEM_BASE[11] ='I000'//Описания предметов
endfunction

//Удаляем предметы, меняем значение в массиве
function UnEquipItem takes unit t_unit, integer item_slot returns nothing
    local integer c=1

    loop
        exitwhen c>10
        call UnitRemoveAbility ( t_unit, udg_ABILITY_BASE[udg_ITEMS_ONHERO[c]] )

        set c=c+1
    endloop
  
    set udg_ITEMS_ONHERO[item_slot]=item_slot
endfunction

//Добавляем предметы обратно
function EquipItems takes unit t_unit returns nothing
    local integer c=1

    loop
        exitwhen c>10
        call UnitAddAbility ( t_unit, udg_ABILITY_BASE[udg_ITEMS_ONHERO[c]] )
        call SetPlayerAbilityAvailable ( GetOwningPlayer(t_unit), udg_ABILITY_BASE[udg_ITEMS_ONHERO[c]], false )

        set c=c+1
    endloop
endfunction

//Надеваем предмет
function ItemStartEquip takes unit t_unit, integer item_id returns nothing
    local integer c=1
    
    loop
        exitwhen c>999
        if udg_ITEM_BASE[c]==item_id then
             if c>10 and c<101 then
                 
                 call UnEquipItem ( t_unit, 2 )
                 set udg_ITEMS_ONHERO[2]=c
                 
                
                 call EquipItems ( t_unit )
             else
             endif
        else
        endif

        set c=c+1
    endloop
endfunction

Отредактировано insane88, 26.04.2009 в 15:42.
Старый 24.04.2009, 19:03
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
Абилка всегда должна быть в одном слоте? Или ее положение тоже меняется? Если вариант 1 то разрешимо, если 2 то нет.

MF_Andreich добавил:
Хотя 2 тоже разрешимо, но более сложно, да и абилок будет несколько больше.
Старый 24.04.2009, 19:06
insane88
hail xgm
offline
Опыт: 2,228
Активность:
Например:
  • Слот "пустая рука" (кукла, лежит где надо)
  • Надеваем меч
  • Слота "пустая рука" нет, слот с мечом должен быть на месте руки, но он в конце списка.
Все абилки в спелбуке удаляются и добавляются обратно в одном и том же порядке (циклом).
Нужно, что бы все абилки "для рук" (мечи, ножики, дилды и т.п.) всегда оказывались в одном и том же слоте в спелбуке.
Старый 24.04.2009, 19:34
insane88
hail xgm
offline
Опыт: 2,228
Активность:
Добавил код в первый пост
Старый 26.04.2009, 15:42
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
а спеллбуку ваще побаробану какое место ты указал спосбности в РО он ставит их попоряду, так что единственный выход (помоему) забить все пусты слоты черными квадратами
Старый 26.04.2009, 17:10
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
ELDAR фэйл
Спеллбук запоминает порядок добавлени в него спелов, причем не важно какому из юнитов. В общем если ты хочешь чтоб 10 спелов стояли на первом месте, то при старте игры надо создать юнита (любого с пустым спеллбуком), и добавить, а потом удалить все способности которые должны стоять на 1 месте, потом те которые на втором месте, и так далее. Не забываем, очередь слетает при загрузке. Поэтому нужно при сохранении запомнить все спеллы из спеллбука, удалить их, создать таймер на 0.1 секунду который их добавит (то есть добавит после того как сохранение кончится, и после загрузки игры с этого сэйва) причем при загрузке так же необходимо поставить спеллы в очередь. Распиал как мог. Если не понятно, смотрим мою зарисовку на эту тему в барахолке http://xgm.guru/forum/showthread.php?t=24103

MF_Andreich добавил:
При этом если очеред создана правильно, то не важно в каком порядке ты их после будешь добавлять, они все равно будут на своих местах.
Старый 26.04.2009, 17:21
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
MF_Andreich спосибо за инфу, я ее посмотрел, вдохновился и делаю (точнее ужо доделываю) систему для Подземных хроников
Цитата:
Не забываем, очередь слетает при загрузке

а я думал зачем тебе эта запара )
Старый 26.04.2009, 17:25
insane88
hail xgm
offline
Опыт: 2,228
Активность:
Проблема решена :)
Добавлением всех по очереди всех первых, затем всех вторых, затем всех третьих и т.д. абилок дамми юниту в инициализации.
Старый 27.04.2009, 13:48
Закрытая тема

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

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

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

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



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