|
|
|
|
[Вопрос] GetLocalPlayer()
|
|
FatalBlade | Дата: Среда, 28 Марта 2012, 18:48:57 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| После триггерного добавления/удаления способностей герою, при использование вот этого кода:
Code if GetLocalPlayer() == GetOwningPlayer(u) then call ClearSelection() call SelectUnit( u, true ) endif
Игра подвисает на пол секунды. Хотя это не первый раз когда герой триггерно выбирается подобным образом. Я даже проверил через таймер, то есть выбор юнита я сделал через 5 сек после добавление способностей, и лаг происходит именно через 5 сек, то есть именно во время выбора героя. Причём даже не триггерного... Даже если вручную выбираю героя, лаг происходит. Почему?
|
|
|
|
SirNikolas | Дата: Среда, 28 Марта 2012, 18:54:36 | Сообщение # 2 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Потому что это происходит впервые.Code call RemoveUnit(CreateUnit(Player(15), <ID героя>, .0, .0, .0)) Советую так делать практически со всеми героями и дамми.
|
|
|
|
FatalBlade | Дата: Среда, 28 Марта 2012, 21:23:26 | Сообщение # 3 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (SirNikolas) Потому что это происходит впервые. Quote (FatalBlade) Хотя это не первый раз когда герой триггерно выбирается подобным образом.
Quote (SirNikolas) Советую так делать практически со всеми героями и дамми. Уже делается со всеми дамми и юнитами. С героями правда не делается, но поидее если герой является изменённым стандартным юнитом то лагать вообще не должно при его создании. И... Quote (FatalBlade) это не первый раз когда герой триггерно выбирается подобным образом. Добавлено (28 Март 2012, 21:23:26) ---------------------------------------------
Quote (SirNikolas) Советую так делать практически со всеми героями и дамми. Сделал так же с героями. Ничего не изменилось.
|
|
|
|
SirNikolas | Дата: Четверг, 29 Марта 2012, 07:12:05 | Сообщение # 4 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Что у нас на событии "Unit selected"?
|
|
|
|
FatalBlade | Дата: Четверг, 29 Марта 2012, 14:37:49 | Сообщение # 5 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (SirNikolas) Что у нас на событии "Unit selected"? Вот это Code function Trig_Selection_Conditions takes nothing returns boolean return IsUnitType(GetTriggerUnit(), UNIT_TYPE_STRUCTURE) == true and GetUnitTypeId(GetTriggerUnit()) != 'n001' endfunction
function Trig_Selection_Actions takes nothing returns nothing local player p = GetTriggerPlayer() local unit u = GetTriggerUnit() local player pu = GetOwningPlayer(u) local unit up local integer ut = GetUnitTypeId(u)
if p != pu then set up = LoadUnitHandle(udg_Hash, GetUnitTypeId(u), GetPlayerId(p) + LoadInteger(udg_Hash, GetHandleId(u), 0)) if GetLocalPlayer() == p then call ClearSelection() call SelectUnit( up, true ) endif elseif p == pu and ut == 'ngme' then set up = LoadUnitHandle(udg_Hash, GetHandleId(u), 0) if GetLocalPlayer() == p then call ClearSelection() call SelectUnit( up, true ) endif endif
set p = null set pu = null set u = null set up = null endfunction
//=========================================================================== function InitTrig_Selection takes nothing returns nothing local integer i = 0 set gg_trg_Selection = CreateTrigger( ) loop exitwhen i > 9 call TriggerRegisterPlayerUnitEvent( gg_trg_Selection, Player(i), EVENT_PLAYER_UNIT_SELECTED, null ) set i = i + 1 endloop call TriggerAddCondition( gg_trg_Selection, Condition( function Trig_Selection_Conditions ) ) call TriggerAddAction( gg_trg_Selection, function Trig_Selection_Actions ) endfunction
Добавлено (29 Март 2012, 14:37:49) --------------------------------------------- Но оно лагает только в одном единственном случае, о котором я писал выше. И да, только первый раз. Но это не первый раз когда герой триггерно выбирается. Да и кроме того, условие сразу отсеивает дальнейшие действия этого триггера, так как герои не являются Зданиями.)
Сообщение отредактировал FatalBlade - Четверг, 29 Марта 2012, 14:41:10 |
|
|
|
SirNikolas | Дата: Четверг, 29 Марта 2012, 14:45:59 | Сообщение # 6 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Code loop if p != pu then set up = LoadUnitHandle(udg_Hash, GetUnitTypeId(u), GetPlayerId(p) + LoadInteger(udg_Hash, GetHandleId(u), 0)) else exitwhen ut != 'ngme' set up = LoadUnitHandle(udg_Hash, GetHandleId(u), 0) endif if GetLocalPlayer() == p then call ClearSelection() call SelectUnit( up, true ) endif exitwhen true endloop set p = null set pu = null set u = null set up = null Но это так, мелочи.
Может, просто выполнить эти действия при ините?
|
|
|
|
FatalBlade | Дата: Четверг, 29 Марта 2012, 14:50:05 | Сообщение # 7 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (SirNikolas) Но это так, мелочи. Ладно я понял) Но зачем циклом???
Quote (SirNikolas) Может, просто выполнить эти действия при ините? Ты о чём? Это же реакция на событие Юнит Выбран.
|
|
|
|
Impregnable | Дата: Четверг, 29 Марта 2012, 15:03:20 | Сообщение # 8 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Есть подозрение, что при выборе юнита SelectUnit запускается триггер gg_trg_Selection, и это приводит к бесконечному циклу.
Если долго мучиться, то может, все равно нихуя не получится.
|
|
|
|
SirNikolas | Дата: Четверг, 29 Марта 2012, 15:08:10 | Сообщение # 9 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (FatalBlade) Но зачем циклом??? Поскольку Близзарды не предоставили нам оператор goto, приходится извращаться таким образом. В любом случае цикл выполнится только один раз. Вместо "exitwhen ut != 'ngme'" я мог бы написать "if ut != 'ngme' { return }", но тогда бы не обнулились переменные.
|
|
|
|
FatalBlade | Дата: Четверг, 29 Марта 2012, 15:18:12 | Сообщение # 10 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (Impregnable) Есть подозрение, что при выборе юнита SelectUnit запускается триггер gg_trg_Selection Триггер то да, запускается, но он сразу же отсеивается условием, если выбранный юнит - не здание. А в данном случае, лаг происходит именно с героями , и только после того как все 3 спелла были выбраны.
Как это у меня работает? Обьясню. Игрок выбирает героя в монументе (аналог таверны). Появляется герой, и появляется дамми с 9-ю способностями пустышками, из которых герою выбирается 3. Это его спеллы, которые выбрал игрок. Но не в этом суть.... Как только появляется герой, он выбирается для игрока, триггерно. Лага НЕТУ!!! Раз выбирается 3 из 9 спеллов, то я сделал что после 3-го спелла которого выбрал герой, удаляется дамми, и выбирается герой. Не важно, выбирается ли герой триггерно, или в ручную в игре, лаг всё равно происходит. Хотя герой уже был выбран ранее, при его создание (выборе в таверне).
Quote (Impregnable) и это приводит к бесконечному циклу. Но тогда это должен быть постоянный лаг. То есть начнётся лаг и всё, варик краш, или фатал. А тут на полсекунды.Добавлено (29 Март 2012, 15:18:12) ---------------------------------------------
return или же просто триггерно запустить другой триггер/функцию
|
|
|
|
Impregnable | Дата: Четверг, 29 Марта 2012, 15:24:40 | Сообщение # 11 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Если можешь вырезать все ... постороннее из свой карты, то кидай сюда. Надоело уже гадать.
Если долго мучиться, то может, все равно нихуя не получится.
|
|
|
|
FatalBlade | Дата: Четверг, 29 Марта 2012, 15:31:59 | Сообщение # 12 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (Impregnable) Если можешь вырезать все ... постороннее из свой карты, Не могу эт долго очень)
Но факт в том, что триггер который я только что выложил - единственный триггер который срабатывает на собтие Юнит Выбран. Как он может запустить бесконечный цикл, если в самом триггере нету циклов?
|
|
|
|
Impregnable | Дата: Четверг, 29 Марта 2012, 15:43:25 | Сообщение # 13 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Цикл - многократное, последовательное выполнение одних и тех же действий, а не loop;endloop. Насколько я понял лаг где-то в начале игры и всего 1 раз. Думаю можно признать, что он тебя победил и спокойно доделывать карту.
Если долго мучиться, то может, все равно нихуя не получится.
|
|
|
|
FatalBlade | Дата: Четверг, 29 Марта 2012, 15:48:37 | Сообщение # 14 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (Impregnable) Насколько я понял лаг где-то в начале игры и всего 1 раз. Ну это зависит от игрока. Игрок может и не сразу выбрать все 3 спелла. Играть можно даже не выбрав не одного спелла. Никто конечно затягивать с этим не будет. Мне то лаг особо не мешает, но вот у людей со слабыми компами этот лаг будет не пол секунды, а например полторы.
Quote (Impregnable) Думаю можно признать, что он тебя победил и спокойно доделывать карту.
|
|
|
|
|
|
|
|
|
|
|