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

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

Закрытая тема
 
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Pray_AD, как так не решит? хочешь сказать что для айтемов типа книг действие ремув больше не распространяется? O_o а по поводу памяти я это и хотел сказать, просто не знал как выразиться =)
Старый 08.01.2009, 20:07
Pray_AD
stay in c++
offline
Опыт: 7,145
Активность:
Vampirrr, на книги прекрасно распространяется, а вот на то, что он них остается после использования нет.
Старый 08.01.2009, 20:15
ScorpioT1000
Работаем
offline
Опыт: отключен
пока есть модель, есть и юнит, чтото ты не то говоришь
Старый 09.01.2009, 05:30
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Да помойму ScorpioT1000 написал уже рабочий код! Я делал кстате также в карте и все норм работало... никакого мусора! Что тут еще обсуждать то? 0о
Старый 09.01.2009, 06:13
ScorpioT1000
Работаем
offline
Опыт: отключен
кстати надо будет в какоенить факу добавить, это ведь стандартные книги так виснут? =O
Старый 09.01.2009, 07:00
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Цитата:
Сообщение от ScorpioT1000
кстати надо будет в какоенить факу добавить, это ведь стандартные книги так виснут? =O

Да это стандартные книжки... желательно бы в ФАК добавить! Кстате у меня этот глюк начался еще в 1.21 версии!
Старый 09.01.2009, 07:11
FEARKILLER

offline
Опыт: 15
Активность:
Цитата:
Сообщение от ScorpioT1000
здесь будут удаляться все поднятые Усиливающие предметы, забивать ничего не надо

Только что проверил код, ни хрена подобного. Не всё так просто как казалось бы, я не в курсе кто там у близзард занимался написанием этой нативки, но он был явно упорот.
Я не нашёл больше подобной темы с багом про книги, по этому напишу здесь. Да и не только книги, вообще любые предметы где в РО поставлена галочка "Характеристики - Используется сразу - Да" и этот предмет может носить при этом любую классификацию, например "Разные" типо "Энциклопедии(Книга опыта)", а в этом коде проверка идёт именно по классификации предмета(GetItemType(GetManipulatedItem()) == ITEM_TYPE_POWERUP), то есть предметы с другой классификацией но применяющиеся сразу после подбора, будут идти лесом.
И самая главная ошибка это удаление через RemoveItem(), просто тестируя я заметил что функция RemoveItem() игнорирует все предметы с отрицательным или 0-ым ХП(проще сказать мёртвые предметы игнорируются). После такого удаления предмет просто "скрывается" но всё же продолжает существовать на карте, проверить это можно через EnumItemsInRect() и SetItemVisible(i,true), после такого он станет опять видимым, его как все заметили видно по палящей анимации "death", но невозможно выделить при этом. При поднятии триггерно ему ХП хотя бы на 1 ед, он вновь станет выделяемым и его можно будет ещё раз так же использовать, но анимация "stand" таким путём не восстанавливается.

» Ну вообщем вот так как-то, на обычном Jass (True Remove Item)
Код:
function DestroyBook takes nothing returns nothing
    local integer h=GetHandleId(GetExpiredTimer())
    local item i=LoadItemHandle(ht,h,100500)
    if GetWidgetLife(i)<1. then
        call SetWidgetLife(i,1.)
//        call BJDebugMsg("Имя Предмета (До Удаления): "+GetItemName(i))//Мусор, нужно лишь для убедительности удаления
        call RemoveItem(i)
//        call BJDebugMsg("Имя Предмета (После Удаления): "+GetItemName(i))//Мусор, нужно лишь для убедительности удаления
    endif
    call FlushChildHashtable(ht,h)
    call DestroyTimer(GetExpiredTimer())
    set i=null
endfunction
function StartDestroyBook takes nothing returns nothing
    local timer t=CreateTimer()
    call SaveItemHandle(ht,GetHandleId(t),100500,GetManipulatedItem())
    call TimerStart(t,.001,false,function DestroyBook)//Предмет удаляется так быстро, что анимация дэт не успевает проигрываться, кому она нужна, ставьте таймер побольше
    set t=null
endfunction
function DestroyerBookCond takes nothing returns boolean
    if IsItemPowerup(GetManipulatedItem())then
        call StartDestroyBook()
    endif
    return false
endfunction
function InitTrig_DestroyerBooks takes nothing returns nothing
    local trigger t=CreateTrigger()
    local integer i=0
    loop
        call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_PICKUP_ITEM,null)
        exitwhen i>11
        set i=i+1
    endloop
    call TriggerAddCondition(t,Condition(function DestroyerBookCond))
    set t=null
endfunction


P.S. И так жаль, что не хватает такой нативки в варике как SetItemMaxLife() и GetItemMaxLife()
Старый 12.02.2013, 01:30
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
FEARKILLER, Нафига вам таймеры и вейты, просто поражаюсь, все руны и все что используется сразу нужно удалять мгновенно только когда подобрал юнит...
Для всего того что дропается, устанавливаем время жизни через хештаблицу и таймер...

Отредактировано SSrunX, 12.02.2013 в 16:38.
Старый 12.02.2013, 03:57
Закрытая тема

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

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

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

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



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