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

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

Закрытая тема
 
pAxsIs

offline
Опыт: 2,389
Активность:
Оптимизация, критика и тд.
Это мой первый код который я именно с 0 написал... Прошу критиковать и объяснять как можно его сделать лучше, чтобы в след раз я мог это учитывать, когда писал код. Это простой код, но все же. Я пытался писать не используя БЖ функций.
((код jass
globals
unit array Units
endglobals
function Trig_First_act_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A000' ) ) then
return false
endif
return true
endfunction
function FCO3 takes nothing returns integer
local integer index = 0
loop
set index = index + 1
exitwhen index == 8
endloop
return index
endfunction
function Trig_First_act_Actions takes nothing returns nothing
local unit Unitof
local unit Unitof2
set Unitof = GetSpellAbilityUnit()
set Unitof2 = GetSpellTargetUnit()
call SetUnitFacingToFaceUnitTimed( Unitof, Unitof2, 0.00 )
set udg_Units[1] = Unitof
set udg_Units[2] = Unitof2
set Unitof = null
set Unitof2 = null
call EnableTrigger( gg_trg_Second_act )
endfunction
===========================================================================
function InitTrig_First_act takes nothing returns nothing
set gg_trg_First_act = CreateTrigger( )
call TriggerRegisterPlayerUnitEvent(gg_trg_First_act, Player( FCO3() ), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
call TriggerAddCondition( gg_trg_First_act, Condition( function Trig_First_act_Conditions ) )
call TriggerAddAction( gg_trg_First_act, function Trig_First_act_Actions )
endfunction
))
Старый 29.09.2012, 20:43
asesmo
Я I Jag Ich Jeg Ja Minä!
offline
Опыт: 8,073
Активность:
((код jass
function Trig_First_act_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A000' ) ) then
return false
endif
return true
endfunction
сжимается до
function Trig_First_act_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A000'
endfunction
))
asesmo добавил:
((код jass
local unit Unitof
local unit Unitof2
set Unitof = GetSpellAbilityUnit()
set Unitof2 = GetSpellTargetUnit()
переделай в
local unit Unitof = GetSpellAbilityUnit()
local unit Unitof2 = GetSpellTargetUnit()
))
Старый 29.09.2012, 20:47
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
function Trig_First_act_Conditions takes nothing returns boolean

    if GetSpellAbilityId() == 'A000' then
           call SetUnitFacingToFaceUnitTimed( GetSpellAbilityUnit(), GetSpellTargetUnit(), 0.00 )
           call EnableTrigger( gg_trg_Second_act )
    endif

return false
endfunction

//===========================================================================
function InitTrig_First_act takes nothing returns nothing
local integer index = 0
set gg_trg_First_act = CreateTrigger(  )

    loop
        call TriggerRegisterPlayerUnitEvent(gg_trg_First_act, Player( index ), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
        set index = index + 1
        exitwhen index == 8
    endloop

    call TriggerAddCondition( gg_trg_First_act, Condition( function Trig_First_act_Conditions ) )
endfunction
Старый 29.09.2012, 20:52
pAxsIs

offline
Опыт: 2,389
Активность:
asesmo,
ок спасибо :)
Hate,
Долго пересматривал код, наконец, все понял))
но не понимаю зачем это?
((код jass
return false
))
Но ты не учел, что я не спроста в глобальные перевел из локалок
((код jass
set udg_Units[1] = Unitof
set udg_Units[2] = Unitof2
))
Я этих юнитов буду использовать в след триггере или можно без глобальных обойтись?
если нельзя то вот такой код должен получиться с учетом твоих поправок. Спасибо.
((код jass
function Trig_First_act_Conditions takes nothing returns boolean
if GetSpellAbilityId() == 'A000' then
call SetUnitFacingToFaceUnitTimed( GetSpellAbilityUnit(), GetSpellTargetUnit(), 0.00 )
call EnableTrigger( gg_trg_Second_act )
set udg_Units[1] = GetSpellAbilityUnit()
set udg_Units[2] = GetSpellTargetUnit()
endif
return false
вроде верхняя строчка, которая в комментах, не нужна?!
endfunction
===========================================================================
function InitTrig_First_act takes nothing returns nothing
local integer index = 0
set gg_trg_First_act = CreateTrigger( )
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_First_act, Player( index ), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set index = index + 1
exitwhen index == 8
endloop
Я был не уверен, что можно использовать цикл в событиях
call TriggerAddCondition( gg_trg_First_act, Condition( function Trig_First_act_Conditions ) )
endfunction
))

Отредактировано pAxsIs, 29.09.2012 в 21:27.
Старый 29.09.2012, 21:20
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
ты регистрируешь события, тоесть цикл регистрирует 8 событий для каждого игрока.
return false потому что действия у нас в условии, а условия должны возвращать логическую переменную, поэтому ретурним фолс.
ну и конечно endif нужен если без жнгп.
Старый 29.09.2012, 21:23
pAxsIs

offline
Опыт: 2,389
Активность:
Подправил на счет endif)
pAxsIs добавил:
Но вот вопрос был в том, что может мы и возвращаем что-то, но почему false?) я этого не могу понять это может что-нибудь изменить?
Старый 29.09.2012, 21:26
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
если действий нет, то впринципе фолс логично, если действия в триггере есть, то там уже надо по ходу дела возвращать тру или фолс, фолс = действия не запустятся, тру = запустятся. В данном случае действий нету (TriggerAddAction) т.к. мы все что нужно сделали в самом условии триггера.
Старый 29.09.2012, 21:28
pAxsIs

offline
Опыт: 2,389
Активность:
Hate:
Понял, спасибо за объяснения! :)
Jass это супер) не думал что можно будет в условии все сделать до действий(так как само название как бы намекало, что там все происходит) :)
Старый 29.09.2012, 21:31
asesmo
Я I Jag Ich Jeg Ja Minä!
offline
Опыт: 8,073
Активность:
вообще можно все в 1 функцию без всяких условие событие действие )
Старый 29.09.2012, 21:39
pAxsIs

offline
Опыт: 2,389
Активность:
напиши как, а то я не могу понять)
Старый 29.09.2012, 21:42
влад10011

offline
Опыт: 2,337
Активность:
Цитата:
Сообщение от asesmo
вообще можно все в 1 функцию без всяких условие событие действие )

это можно сделать только при инициализации триггера, но ему нужно чтобы действия происходили после каста. Hate, привёл хороший пример.
Цитата:
Сообщение от asesmo
function Trig_First_act_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A000'
endfunction

объясню более понятно:
returns boolean, означает что функция вернёт булево(boolean- логическая или булево)
от return GetSpellAbilityId() == 'A000' идёт проверка- ИД способности равен 'A000'(рав код), или нет.
Если да то вернёт true-истина, если нет вернёт false-лож.
В условии идёт проверка на истину или лож, если истина, то делать действия, если лож, то нечего не делать.
А в примере Hate, просто идёт такая же проверка, но если условия выполнились, то происходят действия прямо в условии и в конце тк у нас нет действия(в триггере) возвращаем лож.
Старый 30.09.2012, 09:46
DioD

offline
Опыт: 45,134
Активность:
GUI не оптимизируется в принципе, хотите оптимизировать пишите для начала на жасс.
хотя я вам помогу
function FCO3 takes nothing returns integer
return 8 // choosen by fair code execution logic
endfunction
Старый 30.09.2012, 12:40
pAxsIs

offline
Опыт: 2,389
Активность:
DioD:
GUI не оптимизируется в принципе, хотите оптимизировать пишите для начала на жасс.
Так я и написал на jass..
хотя я вам помогу
((код jass
function FCO3 takes nothing returns integer
return 8 // choosen by fair code execution logic
endfunction
))
мне ведь нужно проверить каждого игрока, а не именно определенного.
Старый 30.09.2012, 13:15
влад10011

offline
Опыт: 2,337
Активность:
Цитата:
Сообщение от pAxsIs
мне ведь нужно проверить каждого игрока, а не именно определенного.

Код:
local integer index = 0
set gg_trg_First_act = CreateTrigger(  )

    loop
        call TriggerRegisterPlayerUnitEvent(gg_trg_First_act, Player( index ), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
        set index = index + 1
        exitwhen index==16
    endloop
Старый 30.09.2012, 13:20
pAxsIs

offline
Опыт: 2,389
Активность:
влад10011:
local integer index = 0
set gg_trg_First_act = CreateTrigger( )
((код jass
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_First_act, Player( index ), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set index = index + 1
exitwhen index==16
endloop
))
У меня так и написано в последнем посте где я использовал весь код, просто я не понял к чему добавил диод, ведь уже все, что можно написали...
Старый 30.09.2012, 13:34
влад10011

offline
Опыт: 2,337
Активность:
Цитата:
Сообщение от pAxsIs
просто я не понял к чему добавил диод, ведь уже все, что можно написали...

Цитата:
Сообщение от pAxsIs
именно определенного игрока.

----------------------------------------------------------------------------------------------------
Цитата:
Сообщение от pAxsIs
У меня так и написано в последнем посте

у тебя написано на 9 игроков красный-серый игрок(0-8)
а у меня на всех игроков(от красного до нейтрала 0-16)
Старый 30.09.2012, 13:45
pAxsIs

offline
Опыт: 2,389
Активность:
влад10011:
у тебя написано на 9 игроков красный-серый игрок(0-8)
а у меня на всех игроков(от красного до нейтрала 0-16)
Не столь важно, но ладно, спасибо :)
Старый 30.09.2012, 14:27
DioD

offline
Опыт: 45,134
Активность:
я очень тонко намекнул что функция всегда возвращает 8, а вы оказывается не лечитесь.
Старый 30.09.2012, 15:17
adic3x

offline
Опыт: 108,439
Активность:
Без кода второго триггера тут вообще не о чем говорить.
Старый 30.09.2012, 20:05
pAxsIs

offline
Опыт: 2,389
Активность:
DioD:
я очень тонко намекнул что функция всегда возвращает 8, а вы оказывается не лечитесь.
У меня 9 игроков так то)
+ я спросил, что можно конкретно сделать с кодом(без намеков)
ADOLF
Без кода второго триггера тут вобще не о чем говорить
это ясно понятно, меня интересовала только оптимизация (сокращение кода)

Отредактировано pAxsIs, 01.10.2012 в 01:01.
Старый 30.09.2012, 21:14
Закрытая тема

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

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

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

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



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