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

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

Ответ
 
Wulfrein
где я?
offline
Опыт: 86,477
Активность:
Красные дисбтн. С оттенком. Ну вот пример из вовки. Я дисбтн делал Easy Button Creator'ом. А чем из блп2 в тга перегоняешь?
Старый 28.01.2006, 18:30
Mefist
Is it cocktail hour yet?
offline
Опыт: 94,240
Активность:
у нас в базе есть уже все иконки из вова готовые
Делай дисбтн фотошопом, просто накладываешь эту рамку. Я еще иногда hue -30-50 делаю
Изображения
 
Старый 28.01.2006, 18:34
Wulfrein
где я?
offline
Опыт: 86,477
Активность:
О, спасибо. Сам чё-то не додумался. Кста, у меня NETRAT'овский Warcraft3ButtonDisabler иконки отражает сверху вниз, причем не только те, которые создает, но и исходные...
Старый 28.01.2006, 18:49
tysch_tysch
Делаем вид
offline
Опыт: отключен
тюбик ацтой, затеи не понял
посох дождя должен показывать, что он дождь вызывает
твалайт второй, аура воды пусть будет первая
Старый 29.01.2006, 02:37
tysch_tysch
Делаем вид
offline
Опыт: отключен
NETRAT объясни каким образом делаются длинные описания?
Старый 11.02.2006, 03:15
NETRAT

offline
Опыт: 82,062
Активность:
ZlaYa1000 вся описуха запихивается либо в SLK либо в w3o только ручками. Фактически из slk можно перегнать в w3o и всего-то. По поводу мода, вообще рекоммендую его финализировать оптимайзеро-виджетайзером - ибо это вариант протекшна и увеличивает скорость загрузки карты раза в 1.5-2

NETRAT добавил:
А что уже нужны длинные описухи?
Старый 11.02.2006, 03:27
tysch_tysch
Делаем вид
offline
Опыт: отключен
мдя, вот только мне всё это ещё редактировать придётся, а так ничё=(
значит в в3о ручками, а такой в3о потом в редакторе откроется и что будет при сохранении?

ZlaYa1000 добавил:
ага первый артефакт склепал

ZlaYa1000 добавил:
да и "краткость - сестра таланта" эт не моё
Старый 11.02.2006, 03:31
Mefist
Is it cocktail hour yet?
offline
Опыт: 94,240
Активность:
описухи длинные не делайте: около 10 строчек со всеми историями и прочим
Старый 11.02.2006, 11:15
NETRAT

offline
Опыт: 82,062
Активность:
ZlaYa1000 если менять поле не будешь то все должно работать. Фича в том, что ограничение на длинну поля встроено в то окошко, в которое ты вводишь текст, но не более того

Mefist в артифаках нужно другим цветом историю прописывать - смотри как у близзов и как в доте - имхо так и должно быть
Старый 11.02.2006, 13:19
Mefist
Is it cocktail hour yet?
offline
Опыт: 94,240
Активность:
ну да ...
Старый 11.02.2006, 17:35
tysch_tysch
Делаем вид
offline
Опыт: отключен
Mefist ты сумрак переделал?
Старый 12.02.2006, 00:12
Mefist
Is it cocktail hour yet?
offline
Опыт: 94,240
Активность:
Вот так:

Код:
function Trig_Twilight_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'AIsa' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Twilight_Con takes nothing returns boolean
    return GetBooleanAnd( UnitHasBuffBJ(GetFilterUnit(), 'Bspe') == true, IsPlayerEnemy(GetOwningPlayer(GetSpellAbilityUnit()), GetOwningPlayer(GetFilterUnit())) == false )
endfunction

function Trig_Twilight_Actions takes nothing returns nothing
    local location p = GetUnitLoc(GetSpellAbilityUnit())
    local unit array c
    local unit t
    local integer i
    local group g1
    local group g2 
    call TriggerSleepAction(0.50)
    set g1 = GetUnitsInRangeOfLocMatching(600, p, Condition(function Trig_Twilight_Con))
    set g2 = GetUnitsInRangeOfLocMatching(600, p, Condition(function Trig_Twilight_Con))
//________________________________________________________________________________  _____________
    set i = 1
    loop
        exitwhen i > CountUnitsInGroup(g1)
        set c[i] = CreateUnitAtLoc(GetOwningPlayer(GetTriggerUnit()),'hsor', p ,bj_UNIT_FACING)
        set t = GroupPickRandomUnit(g2)
        call IssueTargetOrderBJ( c[i], "invisibility", t )
        call GroupRemoveUnitSimple( t, g2 )
        set i = i + 1
    endloop
//________________________________________________________________________________  ____________
    call TriggerSleepAction(1.00)
    set i = 1
    loop
        exitwhen i > CountUnitsInGroup(g1)
        call RemoveUnit( c[i] )
        set c[i] = null
        set i = i + 1
    endloop
    set p = null
    set i = 0
    set t = null
    set g1 = null
    set g2 = null
endfunction

//===========================================================================
function InitTrig_Twilight takes nothing returns nothing
    set gg_trg_Twilight = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Twilight, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_Twilight, Condition( function Trig_Twilight_Conditions ) )
    call TriggerAddAction( gg_trg_Twilight, function Trig_Twilight_Actions )
endfunction
Старый 12.02.2006, 13:02
NETRAT

offline
Опыт: 82,062
Активность:
Mefist у, блин, где ты этого набрался
set g1 = null
call TriggerSleepAction(1.00)
....
Старый 12.02.2006, 16:00
Mefist
Is it cocktail hour yet?
offline
Опыт: 94,240
Активность:
emmm ... what?
Старый 12.02.2006, 16:06
NETRAT

offline
Опыт: 82,062
Активность:
Почему ты не использовал кеш? При его использовании все эти перечисления заносятся в одну функцию - одно перечисление.
1 перечисление
Код:
set g1 = GetUnitsInRangeOfLocMatching(600, p, Condition(function Trig_Twilight_Con))

2 перечисление
Код:
set g2 = GetUnitsInRangeOfLocMatching(600, p, Condition(function Trig_Twilight_Con))

3 перечисление (ахтунг - это перечисление в цикле, хотя это перечисление и не полное - в среднем перечисляются половина юнитов группы)
Код:
exitwhen i > CountUnitsInGroup(g1)

4 перечисление (ахтунг - это перечисление в цикле!)
Код:
set t = GroupPickRandomUnit(g2)

5 перечисление (ахтунг - это перечисление в цикле!)
Код:
exitwhen i > CountUnitsInGroup(g1)

И все эти перечисления фактически перебирают одних и тех же юнитов...

NETRAT добавил:
Кеш можно использовать? Или хотя бы глобалки(это хуже намного)?

NETRAT добавил:
Тыц, тыц, в этом спелле можно кешу использовать?
Старый 12.02.2006, 17:51
tysch_tysch
Делаем вид
offline
Опыт: отключен
глобалки ненадо=(
кеш даже нужно...

ZlaYa1000 добавил:
нужны шмотки на тему гнолов
Старый 12.02.2006, 18:01
NETRAT

offline
Опыт: 82,062
Активность:
Mefist еще ты забыл тень у волшебницы убрать, бафф этого ускорения вешается не менее пол-секунды, поэтому проверку баффа лучше бы заменить другими проверками - на тип юнита и т.п.
в противном случае задержка между ускорением и невидимостю будет составлять не менее пол-секунды
Код:
//===========================================================================
function twi_RemoveCasterTimer takes nothing returns nothing
    local timer t=GetExpiredTimer()
    local unit u = I2U(GetStoredInteger(udg_murlocs_cache,"temporary",I2S(H2I(t))))
call DisplayTextToPlayer(GetLocalPlayer(),0,0,"Utilize "+GetUnitName(u))
    call RemoveUnit(u)
    call FlushStoredInteger(udg_murlocs_cache,"temporary",I2S(H2I(t)))
    call DestroyTimer(t) 
endfunction

//===========================================================================
function twi_UnitFilter takes nothing returns boolean
    local unit caster = I2U(GetStoredInteger(udg_murlocs_cache,"global","twi_caster"))
    local unit u = GetFilterUnit()
    local unit temp = null
    local timer t
    if GetUnitAbilityLevel(u,'Bspe') <= 0 then
        return false
    endif
    if IsUnitEnemy(u, GetOwningPlayer(caster)) then
        return false
    endif
    set temp = CreateUnit(Player(13),'hsor',GetUnitX(u),GetUnitY(u),bj_UNIT_FACING)
    call IssueTargetOrderBJ(temp,"invisibility",u)
    set t = CreateTimer()
    call StoreInteger(udg_murlocs_cache,"temporary",I2S(H2I(t)),H2I(temp))
    call TimerStart(t,3,false,function twi_RemoveCasterTimer) // утилизация, где 3 - время жизни юнита-дамми
    return false
endfunction

//===========================================================================
function twi_TwilightCastTimer takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local unit u = I2U(GetStoredInteger(udg_murlocs_cache,"temporary",I2S(H2I(t))))
    local group g = CreateGroup()
    call StoreInteger(udg_murlocs_cache,"global","twi_caster",H2I(u))
    call GroupEnumUnitsInRange(g, GetUnitX(u), GetUnitY(u), 600.0, Filter(function twi_UnitFilter)) 
    call DestroyGroup(g)
    call FlushStoredInteger(udg_murlocs_cache,"temporary",I2S(H2I(t)))
    call DestroyTimer(t) 
endfunction

//===========================================================================
function twi_TwilightCastAction takes nothing returns nothing
    local unit u = GetSpellAbilityUnit()
    local timer t
    if not (GetSpellAbilityId()=='AIsa') then
        return // не наш спелл
    endif
    set t = CreateTimer()
    call StoreInteger(udg_murlocs_cache,"temporary",I2S(H2I(t)),H2I(u))
    call TimerStart(t,0.7,false,function twi_TwilightCastTimer) // 0.7 - buff aquiring delay
endfunction

//===========================================================================
function InitTrig_Twilight takes nothing returns nothing
    local trigger t = CreateTrigger()
    set udg_murlocs_cache = InitGameCache("Murlocs.w3v")
    call FlushGameCache(udg_murlocs_cache)
    call SaveGameCache(udg_murlocs_cache)
    set udg_murlocs_cache = InitGameCache("Murlocs.w3v")

    call TriggerAddAction(t, function twi_TwilightCastAction)
    call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_CAST)
endfunction

Отредактировано NETRAT, 12.02.2006 в 19:26.
Старый 12.02.2006, 19:19
Mefist
Is it cocktail hour yet?
offline
Опыт: 94,240
Активность:
Ммм, а чем кэш лучше?
Проверку на бафф я сделал, чтобы злому было удобнее цели настраивать, а поскольку (как я понял) невидимонсти и ускорению нужно сделать один бафф, то это задержка будет не заметна
Старый 12.02.2006, 19:53
NETRAT

offline
Опыт: 82,062
Активность:
Mefist лучше чего? в данном случае с помощью кеша мне удалось заменить твои 1+1+[n]+[n]*[n]/2+1+[n] переборов групп из n юнитов(n - количество юнитов). По-моему разница между 1 и n*n огромная... Использование групп сведено к минимуму, все действия осуществляются за один проход. Кеш - это универсальный инструмент для хранения данных, позволяет реализовывать в памяти даже сложные структуры вроде мультиграфов

Дополнительно, триггер не висит в очереди и не ждет TriggerSleepAction, хотя там время незначительное, однако, в некоторых случаях может мешать

Чорт, я кажись дебаг сообщение забыл убрать - строку call DisplayTextToPlayer(GetLocalPlayer(),0,0,"Utilize "+GetUnitName(u)) можно стирать - это сообщение о удалении дамми-sorceress
Старый 13.02.2006, 00:31
tysch_tysch
Делаем вид
offline
Опыт: отключен
млин похоже в колор темплейт, что в утилите лежит, перепутаны каналы, придётся ручками писать
Старый 13.02.2006, 01:53
Ответ

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

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

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

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



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