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

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

Ответ
 
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Как можно улучшить производительность?
Есть система. Позволяет создавать юнитов отрядами
Лидер и его солаты
» раскрыть

Код:
CountinGroup=4 //глобальная отвищайущая за количество унитов в созданом отряде.

GTrain - тренировка юнита
Код:
scope Train initializer Init
{
"cj_types_priv.j
struct tr
{
         unit lider
         unit ingr
         group g
}
private void GTrain()
{
tr svt=tr.create()
unit u=GetTriggerUnit()
svt.lider=GetTrainedUnit()
svt.g=CreateGroup()
int id=GetHandleId(svt.lider),i=0
UnitAddAbility(svt.lider,'A000')
whilenot  i>=CountinGroup
{
svt.ingr=CreateUnit(GetOwningPlayer(svt.lider),GetUnitTypeId(svt.lider),GetWidge  tX(u),GetWidgetY(u),GetUnitFacing(svt.lider))
GroupAddUnit(svt.g,svt.ingr)
RemoveGuardPosition(svt.ingr)
i++
}
SaveInteger(Hash,id,id,svt)
u=null
}

private void Init()
{
         gg_trg_GTrain = CreateTrigger(  )
         TriggerRegisterAnyUnitEventBJ( gg_trg_GTrain, EVENT_PLAYER_UNIT_TRAIN_FINISH )
         TriggerAddAction( gg_trg_GTrain, function GTrain )
}
}

GMove - повторение приказов за командиром отряда.
Код:
scope Move initializer Init
{
"cj_types_priv.j
private void GMove()
{
unit t = GetTriggerUnit()
int id = GetHandleId(t),order = GetIssuedOrderId()
float xo=GetOrderPointX(),yo=GetOrderPointY()
tr svt=LoadInteger(Hash,id,id)
     if t==svt.lider && xo!=0 && yo!=0
        {
                GroupPointOrderById(svt.g,order,xo,yo)      
                elseif t==svt.lider
                  GroupTargetOrderById(svt.g,order,GetOrderTargetUnit())       
        }
t = null
}
private void Init()
{
        gg_trg_GMove = CreateTrigger(  )
        TriggerRegisterAnyUnitEventBJ( gg_trg_GMove, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
        TriggerRegisterAnyUnitEventBJ( gg_trg_GMove, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
        TriggerAddAction( gg_trg_GMove, function GMove )
}
}


GSelected - выбор юнита лидера и его отряда
Код:
scope Selected initializer Init
{
"cj_types_priv.j
private void GSelectedAdd()
{
UnitAddAbility(GetEnumUnit(),'A001')
}
private void GSelected()
{
unit t = GetTriggerUnit()
int id = GetHandleId(t)
tr svt=LoadInteger(Hash,id,id)
        if t!=svt.lider && !IsUnitType(t,UNIT_TYPE_STRUCTURE)
        {
                if GetLocalPlayer() == GetTriggerPlayer()
                {
                 SelectUnit(t,false)
                 SelectUnit(svt.lider,true)
                }
                else
                ForGroup(svt.g,function GSelectedAdd)
        }
t = null
}

private void Init()
{
         gg_trg_GSelected=CreateTrigger()
         TriggerRegisterAnyUnitEventBJ(gg_trg_GSelected,EVENT_PLAYER_UNIT_SELECT  ED)
         TriggerAddAction(gg_trg_GSelected,function GSelected)
}
}


GDeSelected - отмена выбора ^

Код:
scope DeSelected initializer Init
{
"cj_types_priv.j
private void GDeSelectedRemove()
{
UnitRemoveAbility(GetEnumUnit(),'A001')
}
private void GDeSelected()
{
unit t = GetTriggerUnit()
int id = GetHandleId(t)
tr svt=LoadInteger(Hash,id,id)
ForGroup(svt.g,function GDeSelectedRemove)
t = null
}

private void Init()
{
         gg_trg_GDeSelected = CreateTrigger(  )
         TriggerRegisterAnyUnitEventBJ(gg_trg_GDeSelected,EVENT_PLAYER_UNIT_DESE  LECTED)
         TriggerAddAction( gg_trg_GDeSelected, function GDeSelected )
}
}


GLeaderdies - смерть лидера и замена его случайным юинтом из отряда.
Код:
scope Leaderdies initializer Init
{
"cj_types_priv.j
private void GLeaderdies()
{
        unit t=GetTriggerUnit(),u
        integer i=GetHandleId(t)
        tr svt=LoadInteger(Hash,i,i)
        call GroupRemoveUnit(svt.g,t)
        if t == svt.lider     
        {
        svt.lider = GetRndUnit(svt.g)
        UnitAddAbility(svt.lider,'A000')
        UnitRemoveAbility(svt.lider,'A001')
        GroupRemoveUnit(svt.g,svt.lider)        
        SaveInteger(Hash,GetHandleId(svt.lider),GetHandleId(svt.lider),svt)
            }     
            if CountUnitsInGroup(svt.g)<=0     
            {
            DestroyGroup(svt.g)
            FlushChildHashtable(Hash,i)
            svt.destroy()
            }
         t = null
}

private void Init()
{
         gg_trg_GLeaderdies = CreateTrigger( )
         TriggerRegisterAnyUnitEventBJ( gg_trg_GLeaderdies, EVENT_PLAYER_UNIT_DEATH )
         TriggerAddAction( gg_trg_GLeaderdies, function GLeaderdies )
}
}



Как можно ее улучшить до максимума?
Старый 09.02.2012, 21:35
Msey
????
offline
Опыт: 67,346
Активность:
Dreii:
Как можно ее улучшить до максимума?
в каком смысле "улучшить"? Оптимизировать в плане читабельности? чтобы работало быстрее?
без подсветки синтаксиса геморно будет ._.
и зачем закинул в раздел по гуи, а не jass?
Старый 09.02.2012, 22:01
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Msey, Ну не знаю.. перенесите в джасс.
Цитата:
Сообщение от Msey
чтобы работало быстрее

Что бы небыло ошибок, что бы можно было показать людям)
Старый 09.02.2012, 22:03
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
А система Дока чем не угодила? Любители изобретать велосипеды.
Старый 09.02.2012, 22:04
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Master_chan, мм ненаходил,если можно линк.
Старый 09.02.2012, 22:05
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
Старый 09.02.2012, 22:06
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Master_chan, там чуть-чуть по-другому
Старый 09.02.2012, 22:09
Msey
????
offline
Опыт: 67,346
Активность:
private void Init() {
         trigger t = CreateTrigger()
         TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_TRAIN_FINISH)
         TriggerAddAction( t, function GTrain)
	 t=null
}
я обычно так делаю, ибо без обнуления триггера вроде утечка происходит

"cj_types_priv.j"
достаточно один раз прописать в инит ветке

{
tr svt=tr.create()
unit u=GetTriggerUnit()
svt.lider=GetTrainedUnit()
svt.g=CreateGroup()
вот насчет этого я не уверен, но по-моему всё проще вбивать в константы и использовать скобы через uses (структуры и методы компилятся в говнокод)

TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_TRAIN_FINISH)
эту утечку можно заменить на юнита с игроком(i); i++ но, как альфа говорил, это сказывается на производительности
Старый 09.02.2012, 22:15
alpha

offline
Опыт: 7,387
Активность:
Dreii:
Как можно ее улучшить до максимума?
Улучшение до максимума системы на vJass невозможно как правило.
Само улучшение должно начинатся с перевода на Jass(выполняется выкапыванием в конечном коде), систему устанавливать стоит полностью под карту.
alpha добавил:
CountinGroup=4 //глобальная отвищайущая за количество унитов в созданом отряде.
После оптимизации эта переменная по стандартам должна объеденятся с массивом "integer array"
Старый 09.02.2012, 23:00
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Цитата:
Сообщение от Msey
"cj_types_priv.j"
достаточно один раз прописать в инит ветке

Могут быть конфликты с некоторыми именами.
Старый 10.02.2012, 17:21
Msey
????
offline
Опыт: 67,346
Активность:
Dreii, если все правильно сделать, то и конфликтов не будет .___.
Старый 10.02.2012, 19:24
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Msey, сделай один для всего и создай переменную с именем int.
Старый 10.02.2012, 20:13
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
Dreii:
сделай один для всего и создай переменную с именем int.
Done. И что должно было произойти?
Старый 10.02.2012, 20:36
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Master_chan, у меня ошибку выдает оО
Старый 10.02.2012, 20:55
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
достаточно один раз в custom code написать:
include "cj_types.j"
Старый 10.02.2012, 20:58
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Master_chan, ну это ясно офк
Старый 10.02.2012, 21:00
Ответ

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

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

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

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



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