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

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

Ответ
 
DioD

offline
Опыт: 45,134
Активность:
Рандом через юнит пул
Код:
function P2I takes unitpool I returns integer
    return I
    return 0
endfunction

function I2P takes integer I returns unitpool
    return I
    return null
endfunction

function GetRandomUnit takes nothing returns nothing
    local unit P = null
    local unitpool U = I2P(udg_Pool)
    set P =  PlaceRandomUnit(U,Player(0),2000,2000,0)
    call UnitPoolRemoveUnitType(U,GetUnitTypeId(P)) 
endfunction

function InitRandomUnit takes nothing returns nothing
    local unitpool U = null
    set udg_Pool = P2I(CreateUnitPool())
    set U = I2P(udg_Pool)
    call UnitPoolAddUnitType(U,'hpea',1)
    call UnitPoolAddUnitType(U,'hmpr',1)
    call UnitPoolAddUnitType(U,'hrif',1)
endfunction


Невероятно простой пример того, что в доте всё сделано криво и косо, для рандом выбора героев тремуется всего 1 глобалка, да и лагов вроде как не наблюдается.

Скорее всего это не было реализовано в доте так как глобалки юнит пул в редакторе нету.
Старый 13.07.2006, 12:29
wampir

offline
Опыт: 12
Активность:
DioD
а ты думал )

ты посмотри например код ульта джаггера. или код ульта невермора. образцы ламмерства и бажности.

бтв ты заблуждаешься немного. такой код создания героя не сильно упростит задачу. забить массив и забить юнитпул - по сути одно и то же.

что до инициализации героев то с массивом она на порядок проще чем с юнит пулом - фактически массив строк, а при пике поиск по массиву.

а с пулом там сложнее. в доте есть одна очень красивая идея ( и единственная). если её ещё и применить красиво, а не как в доте, то инициализация становится совсем безлаговой.

з.ы. имхо идея спёрта у сами знете кого, ибо до 6.30 этого небыло.
Старый 14.07.2006, 05:37
DioD

offline
Опыт: 45,134
Активность:
Юнит пул это натив функция, а как известно нативы работают быстрее чего либо еще.
Тем более пул предназначен исключительно для этих целей.
А про баги, это на мой взгляд глобалки в таймерах...
Про безлаговую инициализацию еще терпимо, но вот когда записи перносятся по ячейкам начинаются лаги...
Старый 14.07.2006, 07:56
DioD

offline
Опыт: 45,134
Активность:
Значит так, еще более упрощеный способ, всего один тригер
Код:
function Trig_Heroes_Random_Actions takes nothing returns nothing
    local unit P = null
    local unitpool U = I2P(udg_Pool)
    set P =  PlaceRandomUnit(U,Player(0),2000,2000,0)
    call UnitPoolRemoveUnitType(U,GetUnitTypeId(P)) 
endfunction

function InitTrig_Heroes_Random takes nothing returns nothing
    local unitpool U = null
    set udg_Pool = P2I(CreateUnitPool())
    set U = I2P(udg_Pool)
    call UnitPoolAddUnitType(U,'hpea',1)
    call UnitPoolAddUnitType(U,'hmpr',1)
    call UnitPoolAddUnitType(U,'hrif',1)
    set gg_trg_Heroes_Random = CreateTrigger(  )
    call TriggerRegisterTimerEvent( gg_trg_Heroes_Random, 5 ,true)
    call TriggerAddAction( gg_trg_Heroes_Random, function Trig_Heroes_Random_Actions )
endfunction
Старый 14.07.2006, 17:54
Ответ

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

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

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

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



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