Сейчас 17:31:23 Суббота, 20 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Оптимизация спелла, где используются группы (Как?)
[Вопрос] Оптимизация спелла, где используются группы
Ty3uKДата: Четверг, 22 Сентября 2011, 22:52:15 | Сообщение # 26
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Да, именно так. Это раз. Два- ласт креатед- всегда бж. Надо- local unit u = CreateUnit()

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

lawsonДата: Четверг, 22 Сентября 2011, 22:53:35 | Сообщение # 27
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Ty3uK, Слушай не помню есть ли такой статический бж как bj_lastCreatedUnit или я путаю название, хорошая штука ловит юнитов отлично так что можно ею пользоваться.

Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Четверг, 22 Сентября 2011, 22:54:31
 

Ty3uKДата: Четверг, 22 Сентября 2011, 22:56:52 | Сообщение # 28
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Есть, но в сущности это ж локалка, так что имхо проще сразу в локалку создавать :) но это лично мне, тут уж кому как правится

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

Mep3aB4uKДата: Четверг, 22 Сентября 2011, 23:04:39 | Сообщение # 29
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
Quote (Ty3uK)
Есть, но в сущности это ж локалка

В сущности это глобалка, которая пере пишется при новом создании юнита


Сообщение отредактировал Mep3aB4uK - Четверг, 22 Сентября 2011, 23:06:21
 

Ty3uKДата: Четверг, 22 Сентября 2011, 23:06:41 | Сообщение # 30
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Омг, точно. Я тупой :D

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

FatalBladeДата: Четверг, 22 Сентября 2011, 23:15:01 | Сообщение # 31
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Ок а GetLastCreatedGroup() - тоже БЖ?

И как раскрывать PlaySoundAtPointBJ?




Сообщение отредактировал FatalBlade - Четверг, 22 Сентября 2011, 23:16:40
 

lawsonДата: Четверг, 22 Сентября 2011, 23:17:30 | Сообщение # 32
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (FatalBlade)
И как раскрывать PlaySoundAtPointBJ?

Посмотри его в function list

Добавлено (22 Сентябрь 2011, 23:17:30)
---------------------------------------------
Quote (FatalBlade)
Ок а GetLastCreatedGroup() - тоже БЖ?

да, все что выделено красным цветом - все бж.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Четверг, 22 Сентября 2011, 23:17:54
 

Mep3aB4uKДата: Четверг, 22 Сентября 2011, 23:26:17 | Сообщение # 33
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
Quote (FatalBlade)
И как раскрывать PlaySoundAtPointBJ?

Либо зажать ctrl и нажать лкм на PlaySoundAtPointBJ (в JNGP)
 

FatalBladeДата: Четверг, 22 Сентября 2011, 23:40:15 | Сообщение # 34
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Итак. Я оптимизировал спелл насколько мог, не использую при этом ни одной глобалки. Вот код:
Code

function Trig_Explode_Corpses_Conditions takes nothing returns boolean
        if ( GetSpellAbilityId() == 'A0QT' ) then
            return true
        endif
        return false
endfunction

function EC2 takes nothing returns nothing
        local timer t = GetExpiredTimer()
        local group g = LoadGroupHandle(udg_Items, GetSpellAbilityId(), 3)
        local location p = LoadLocationHandle(udg_Items, GetSpellAbilityId(), 2)
        call DestroyTimer(t)
        call RemoveLocation(p)
        call DestroyGroup(g)
        set g = null
        call FlushChildHashtable(udg_Items, GetSpellAbilityId())
endfunction

function group1 takes nothing returns nothing
        local real d = LoadReal(udg_Items, GetSpellAbilityId(), 1)
        local location p = GetUnitLoc(GetEnumUnit())
        call UnitDamagePointLoc( GetEnumUnit(), 0, 180.00, p, d, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FORCE )        ///////// НЕ РАБОТАЕТ!!!!
        call AddSpecialEffectLoc( "Units\\Undead\\Abomination\\AbominationExplosion.mdl", p )
        call DestroyEffect( GetLastCreatedEffectBJ() )
        call RemoveLocation(p)
        call RemoveUnit(GetEnumUnit())
endfunction

function EC1 takes nothing returns nothing
        local timer t = GetExpiredTimer()
        local timer t1 = CreateTimer()
        local group g = LoadGroupHandle(udg_Items, GetSpellAbilityId(), 0)
        local location p = LoadLocationHandle(udg_Items, GetSpellAbilityId(), 2)
        local integer n = LoadInteger(udg_Items, GetSpellAbilityId(), 3)
        call DestroyGroup(g)
        set g = null
        call ForGroup( GetUnitsOfPlayerAndTypeId(Player(n), 'h007'), function group1)
        call SaveGroupHandle(udg_Items, GetSpellAbilityId(), 3, GetLastCreatedGroup())
        call PlaySoundAtPointBJ( gg_snd_ImpaleLand, 100, p, 10.00 )
        call DestroyTimer(t)
        call RemoveLocation(p)
        call TimerStart( t1, 1.00, false, function EC2 )
endfunction

function group0 takes nothing returns nothing
        local location p = GetUnitLoc(GetEnumUnit())
        if (IsUnitDeadBJ(GetEnumUnit()) == true) then
            call CreateUnitAtLoc( GetOwningPlayer(GetSpellAbilityUnit()), 'h007', p, 0.00 )
            call RemoveUnit(GetEnumUnit())
        endif
        call RemoveLocation(p)
endfunction

function Trig_Explode_Corpses_Actions takes nothing returns nothing
        local timer t = CreateTimer()
        local integer l = GetUnitAbilityLevel( GetSpellAbilityUnit(), 'A0QT')
        local location p = GetUnitLoc(GetSpellAbilityUnit())
        local real d = 0.00
        call ForGroup( GetUnitsInRangeOfLocAll(900.00, p), function group0)
        call SaveGroupHandle(udg_Items, GetSpellAbilityId(), 0, GetLastCreatedGroup())

        if ( l == 1 ) then
            set d = 50.00
        endif
        if ( l == 2 ) then
            set d = 65.00
        endif
        if ( l == 3 ) then
            set d = 85.00
        endif
        if ( l == 4 ) then
            set d = 110.00
        endif
        if ( l == 5 ) then
            set d = 140.00
        endif
        if ( l == 6 ) then
            set d = 175.00
        endif
        if ( l == 7 ) then
            set d = 215.00
        endif
        if ( l == 8 ) then
            set d = 260.00
        endif
        if ( l == 9 ) then
            set d = 310.00
        endif
        if ( l == 10 ) then
            set d = 365.00
        endif

        call SaveReal(udg_Items, GetSpellAbilityId(), 1, d)
        call SaveLocationHandle(udg_Items, GetSpellAbilityId(), 2, p)
        call RemoveLocation(p)
        call TimerStart( t, 0.4, false, function EC1 )
endfunction

//===========================================================================
function InitTrig_Explode_Corpses takes nothing returns nothing
        set gg_trg_Explode_Corpses = CreateTrigger(  )
        call TriggerRegisterAnyUnitEventBJ( gg_trg_Explode_Corpses, EVENT_PLAYER_UNIT_SPELL_CAST )
        call TriggerAddCondition( gg_trg_Explode_Corpses, Condition( function Trig_Explode_Corpses_Conditions ) )
        call TriggerAddAction( gg_trg_Explode_Corpses, function Trig_Explode_Corpses_Actions )
endfunction


Работает всё, кроме одной строки кода, там где написано //НЕ РАБОТАЕТ. А именно - не наносится урон! Почему? Подскажите плз что здесь не так и вообще как ещё можно оптимизировать этот код




Сообщение отредактировал FatalBlade - Четверг, 22 Сентября 2011, 23:45:40
 

Mep3aB4uKДата: Пятница, 23 Сентября 2011, 00:24:57 | Сообщение # 35
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
FatalBlade, Ты попробуй в конце удалить групу:
В функции ЕС1
call DestroyGroup(g)
set g= null
поствь после
call DestroyTimer(t)

Добавлено (23 Сентябрь 2011, 00:24:57)
---------------------------------------------
Попробую по памяти написать более удобно

 

FatalBladeДата: Пятница, 23 Сентября 2011, 00:44:38 | Сообщение # 36
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Mep3aB4uK)
call DestroyGroup(g)
set g= null
поствь после
call DestroyTimer(t)

Тоже после call TimerStart( t1, 1.00, false, function EC2 )? И вообще какое значение это имеет?

Добавлено (23 Сентябрь 2011, 00:42:20)
---------------------------------------------
И кстати не помогло((

Добавлено (23 Сентябрь 2011, 00:44:38)
---------------------------------------------
Вот почему все остальные действия в этой функции работают, и только одно действие, нанесение урона не работает.




Сообщение отредактировал FatalBlade - Пятница, 23 Сентября 2011, 00:32:48
 

Mep3aB4uKДата: Пятница, 23 Сентября 2011, 01:48:27 | Сообщение # 37
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
Может и не лучший вариант, но более оптимизирован. ЗЫ писал по памяти


Добавлено (23 Сентябрь 2011, 01:48:27)
---------------------------------------------
Quote (FatalBlade)
И вообще какое значение это имеет?

разница в том что ты уничтожаеш групу до ее использования


Сообщение отредактировал Mep3aB4uK - Пятница, 23 Сентября 2011, 10:21:09
 

FatalBladeДата: Пятница, 23 Сентября 2011, 01:49:58 | Сообщение # 38
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
спс
Это ты основвавался на моём коде или от себя? А то где эффект взрыва трупов?))

Добавлено (23 Сентябрь 2011, 01:49:58)
---------------------------------------------

Quote (Mep3aB4uK)
разница в том что ты уничтожаеш групу до ее использования

Это другая группа. Их у меня 2. Первая пикает трупов, а вторая - созданных дамми.




Сообщение отредактировал FatalBlade - Пятница, 23 Сентября 2011, 01:49:02
 

Mep3aB4uKДата: Пятница, 23 Сентября 2011, 02:38:00 | Сообщение # 39
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
Quote (FatalBlade)
Это ты основвавался на моём коде или от себя? А то где эффект взрыва трупов?

основвался на твоем, а эффект перед call RemoveUnit(e)
call DestrotEffect(AddSpecialEffect("какой эффект",GetWidgetX(e),GetWidgetY(e)))
 

Ty3uKДата: Пятница, 23 Сентября 2011, 06:34:15 | Сообщение # 40
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Убери убогий кондишн в начале триггера. Впиши в функцию кондишина return GetSpellAbilityId(unit, ability), а то близзовская конструкция убога

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

FatalBladeДата: Пятница, 23 Сентября 2011, 12:35:19 | Сообщение # 41
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Что такое GetFilterUnit?

 

lawsonДата: Пятница, 23 Сентября 2011, 12:39:04 | Сообщение # 42
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (FatalBlade)
Что такое GetFilterUnit?

Ну из перевода очевидно что юнит который участвует в фильтре. Вот только зачем это тебе в condition используешь?

Добавлено (23 Сентябрь 2011, 12:39:04)
---------------------------------------------
Что ты вообще хочешь сделать что за способсноть такая?


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

FatalBladeДата: Пятница, 23 Сентября 2011, 12:45:16 | Сообщение # 43
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Mep3aB4uK, твой код выдаёт кучу ошибок(((

Quote (lawson)
Ну из перевода очевидно что юнит который участвует в фильтре. Вот только зачем это тебе в condition используешь?

Я его не использую. Это код Mep3aB4uK'a
И я понял что это юнит который участвует в фильтре, но что это вообще за фильтр?

Добавлено (23 Сентябрь 2011, 12:45:16)
---------------------------------------------

Quote (lawson)
Что ты вообще хочешь сделать что за способсноть такая?

Герой взрывает всех трупов вокруг себя в радиусе 900. Каждый труп который взрывается наносит урон всем юнитам в радиусе 180. Скилл очень простенький на ГУИ (с удалением утечек естественно), но на ГУИ используется много глобалок...


 

lawsonДата: Пятница, 23 Сентября 2011, 12:46:49 | Сообщение # 44
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (FatalBlade)
но что это вообще за фильтр?

Ну это используется когда ты добавляешь юнитов в группу например ты хочешь чтобы туда добавлялись только те юниты у которых хп меньше 100:
call GroupEnumUnitsInRect(group, rect, а здесь указываеться фильт который и будет тебе добавлять только тех юнитов у которых хп < 100)
Обычно вместо фильтра ставиться null если хочешь добавлять всех юнитов подряд, иначе пишеться фильтр который с помощью своей отдельной функции фильтрует юнитов.

Добавлено (23 Сентябрь 2011, 12:46:49)
---------------------------------------------

Quote (FatalBlade)
Каждый труп который взрывается наносит урон всем юнитам в радиусе 180

с каким периодом взрываеться труп?


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

Ty3uKДата: Пятница, 23 Сентября 2011, 12:50:27 | Сообщение # 45
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Не забывай еще удалять ссылку (фильтр) :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

lawsonДата: Пятница, 23 Сентября 2011, 12:51:12 | Сообщение # 46
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (Ty3uK)
Не забывай еще удалять ссылку (фильтр)

condition не вызывает утечек.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

Ty3uKДата: Пятница, 23 Сентября 2011, 12:51:13 | Сообщение # 47
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Кста, null - это тоже вызов пустой функции ;-)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

lawsonДата: Пятница, 23 Сентября 2011, 12:51:37 | Сообщение # 48
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (Ty3uK)
Кста, null - это тоже вызов пустой функции ;-)

Нет это присвоение значения для переменной.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

FatalBladeДата: Пятница, 23 Сентября 2011, 12:51:59 | Сообщение # 49
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Ну например 0.4 секунды. То есть после 0.4 секунд активации спелла, трупы вокруг героя взрываются. Скилл не требует цель. Основа Канал.

 

Ty3uKДата: Пятница, 23 Сентября 2011, 12:51:59 | Сообщение # 50
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Кондишн, как и фильтр- ссылка, которая занимает место в памяти :) утечек нет, но ссылка висит

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Оптимизация спелла, где используются группы (Как?)
  • Страница 2 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz