Velociraptor
В пространстве и времени
offline
Опыт:
14,801Активность: |
PolledWait
Если в GUI-триггерах функции типа Wait X game-time seconds заменить на CustomScript: call PolledWait ( X ) - просто увидел такой текст в опендоте - станет ли карта работать лучше, в частности в сетевой игре? Или разницы никакой? Проверил - сам по себе-то такой кастом скрипт работает, интересно с точки зрения оптимальности кода. |
07.12.2010, 05:11 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Pray_AD
stay in c++
offline
Опыт:
7,145Активность: |
Polled Wait
|
07.12.2010, 06:57 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Arty3ooo
...
offline
Опыт:
3,125Активность: |
Velociraptor:
Frog lil noob... карта не станет работать лучше. Вейты для ленивых школо-кидов... В мультиплеере гарантирую калоработу твоих спелов, ивентов и т.д. при использовании этой гадости. Мир спасут только таймеры. Если только у тебя сингл.. хотя и там рекомендую забыть про вейты в любом их исполнении. |
07.12.2010, 08:43 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Velociraptor
В пространстве и времени
offline
Опыт:
14,801Активность: |
Пример бы тогда плз, как с помощью только GUI и Custom Script переписать спелл типа
Событие - unit применяет закл
Условие - закл равняется Добавить Реген Действия: Custom script: local unit u set unit = target unit of ability being cast add Реген to unit Custom script: set u = udg_unit !!! Wait X game-time seconds !!! Custom script: set udg_unit = u Remove Реген from unit Custom script: set u = null В идеале хотелось бы только выделенное заменить подходящим кастом скриптом, при необходимости можно, конечно, через кастом скрипты же добавить и обнулить локалки. Плз, можно прямо пример кода??? попросту: спелл должен добавлять абилу на какое-то время юниту, потом её с него убирать, утечек, понятное дело, не надлежит быть, мультиинстантность обязательна. Реализовать бы хотелось с помощью ГУИ и кастом скриптов only. Или плз, карту-образец (именно карту, сделать 5 мин. же ) с подобной абилой на JASS, в которой можно будет только менять равкоды абил (добавляемой и кастуемой) и время добавления. Уж с равкодами-то как-нибудь разберусь, а так, боюсь, не слажу... |
07.12.2010, 09:51 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JassMan
свободен
offline
Опыт:
4,193Активность: |
Как видно, из того, что привел Pray_AD, ПолледВаит — это кривое использование таймера и sleep'а.
Лучше заменить всё полностью на одни лишь таймеры, и всего-то делов . . . |
07.12.2010, 12:42 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Velociraptor
В пространстве и времени
offline
Опыт:
14,801Активность: |
Velociraptor: Плз, можно прямо пример кода??? |
07.12.2010, 20:29 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
16GB
GhostOne User
offline
Опыт:
60,317Активность: |
на
|
07.12.2010, 20:39 | #7
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MaHBe
offline
Опыт:
5,910Активность: |
16GB:
не обнулил |
07.12.2010, 21:18 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ARHUI
offline
Опыт:
3,341Активность: |
Я что то не понял, разве TriggerSleepAction() не является единственным доступным способом "подождать" ? Если нет, то что делать с таймерами, они идут независимо от выполнения функции так что единственный способ с таймером это проверять в цикле закончился он или нет, чтобы не зависло всё надо разгружать систему останавливая функцию на время, а как это сделать без TriggerSleepAction()? Просто сам не в восторге от TriggerSleepAction(), исходя из названия тормозит триггер, если в теле триггера поставить цикл обращающийся к другой функции в которой написано TriggerSleepAction() то получаются весёлые результаты))) |
08.12.2010, 01:00 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
там утечка, юзайте вейт, в целом это почти ничего не меняет -.- |
08.12.2010, 01:03 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ARHUI
offline
Опыт:
3,341Активность: |
ScorpioT1000, всмысле PolledWait()? |
08.12.2010, 01:06 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
xgm.ru/forum/showpost.php?p=942225&postcount=4 тогда юзай это |
08.12.2010, 01:09 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MyRtZ
offline
Опыт:
6,530Активность: |
ARHUI:
call TriggerSleepAction(real)
всмысле простой wait x seconds
ScorpioT1000, cJass для автора актуален) |
08.12.2010, 01:10 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
в PolledWait не обнуляется хендл таймера |
08.12.2010, 01:11 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ARHUI
offline
Опыт:
3,341Активность: |
call TriggerSleepAction(real) у меня в коде проблема или не я первый замечаю что функция не однозначна ибо работает с рандомными результатами? |
08.12.2010, 01:21 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
записывай сначала всё в локальные переменные, а потом уже работай с вейтом, потому что всякие GetTrigger... после вейта могут давать косяки. |
08.12.2010, 01:24 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ARHUI
offline
Опыт:
3,341Активность: |
((код jass
function xxx takes xxx returns xxx
...
local group g = GetUnitsOfPlayerMatching(Player(11), Condition(function is_graves))
loop exitwhen b > 0 set g = GetUnitsOfPlayerMatching(Player(11), Condition(function is_graves)) if ( CountLivingPlayerUnitsOfTypeId('h00Q', Player(11)) > 0 ) then call ForGroup( g, function create_mega_zombie ) else if ( CountLivingPlayerUnitsOfTypeId('u00F', Player(11)) == 0 ) then set b = 1 endif endif call TriggerSleepAction( 12 / ( udg_Difficulty + 1 ) ) endloop ... endfunction )) функция xxx это тело триггера далее:
((код jass
function create_mega_zombie takes nothing returns nothing
local integer a = 0 local unit cu loop exitwhen a == ( udg_Difficulty + 1 ) set cu = CreateUnitAtLoc(Player(11), 'u00F', PolarProjectionBJ(GetUnitLoc(GetEnumUnit()), 100.00, GetRandomDirectionDeg()), GetRandomDirectionDeg()) call PauseUnitBJ( true, cu ) call SetUnitAnimation( cu, "birth" ) call AddSpecialEffectLocBJ( GetUnitLoc(cu), "Objects\\Spawnmodels\\NightElf\\EntBirthTarget\\EntBirthTarget.mdl" ) call PauseUnitBJ( false, cu ) call IssuePointOrderLocBJ( cu, "patrol", GetRectCenter(GetPlayableMapRect()) ) set a = a + 1 endloop set cu = null set a = 0 endfunction )) функция создания зомбаков) находится выше xxx однако если в create_mega_zombie появляется TriggerSleepAction() внутри цикла, то все что после не выполняется, хотя сам цикл работает до конца...
ARHUI добавил:
Почему? Я анимацию хотел вставить блин а тут вот так получается... для кода используем спец. теги © swdn Отредактировано ShadoW DaemoN, 09.12.2010 в 12:18. |
08.12.2010, 01:43 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Velociraptor
В пространстве и времени
offline
Опыт:
14,801Активность: |
По коду 16Gb: ну кран я, кран, просил же на коленях, если на JASS, а не на GUI сразу, тест-карту, чтобы сам мог тупо копипастить и менять время и равкоды... вот попытался вставить, триг не включается - охота, чтобы срабатывал на абилу целителя (удалено) Отредактировано Velociraptor, 09.12.2010 в 10:46. |
08.12.2010, 02:21 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JassMan
свободен
offline
Опыт:
4,193Активность: |
Значит так:
1 ) Сначала читаем это.
2 ) Затем идём сюда и знакомимся по подробнее (прочесть, желательно, темы полностью). 3 ) Ну и, наконец, для закрепления материала, еще один пост для развития. Прочитаешь всё это, и поймешь, что Sleep вообще не нужен, ибо есть таймеры, как говорится, на все случаи жизни. |
08.12.2010, 03:03 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
запускай каждую итерацию цикла в новом потоке и там уже начинай с локалок+вейта
ScorpioT1000 добавил: это, кстати, в некоторых (очень тонких) случаях даже лучше, чем пускать таймер с той же длительностью (и крепить ничего не надо - передаем через глобалки моментально) |
08.12.2010, 06:08 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|