|
|
|
|
Утечка
|
|
MTT | Дата: Воскресенье, 27 Декабря 2009, 16:54:30 | Сообщение # 1 |
9 уровень
Группа: Пользователи
Сообщений: 941
Награды: 0
Репутация: 81
Блокировки:
| Вот мой триггер: Pick every unit in (Units within 100.00 of (Position of Rocket[a])) and do (Actions) If (All Conditions are True) then do (Then Actions) else do (Else Actions) (Owner of (Picked unit)) не равно (Owner of Rocket[a]) then Cause Rocket[a] to damage (Picked unit), dealing 100.00 damage of attack type... Remove Rocket[a] from the game и там другие действие для смещения массива... Этот триггер повторяется примерно по 20 раз каждую секунду. Помогите придумать другой способ, без утечек. Я думаю на ГУИ не получится... Если я удаляю эту строчку, у меня карта лагать перестает, значит проблема, скорее всего, в том, что пиается очень много пустых отрядов... Помогите пожалуйста. Добавлено (27-12-2009, 14:14) ---------------------------------------------
Quote (MTT) Этот триггер повторяется примерно по 20 раз каждую секунду. По 20 раз каждую 0,01 секунду, я хател сказать.Добавлено (27-12-2009, 16:54) --------------------------------------------- Надо мне было тоже темы назвать, типа "ПАМАГИТЕ, У МИНЯ ПРАБЛЕМА, ЗАГЛИНИТЕ В ТЕМУ НЕВПАДЛУ" Тема с подобным названием уже 2 страницы ответов набрала, а на мою всем по...
|
|
|
|
ShadowDragon | Дата: Воскресенье, 27 Декабря 2009, 16:59:19 | Сообщение # 2 |
10 уровень
Группа: Проверенные
Сообщений: 1564
Награды: 1
Репутация: 286
Блокировки:
| MTT, Quote (MTT) Тема с подобным названием уже 2 страницы ответов набрала, а на мою всем по... Объясню почему. На вопросы в той теме: Quote Если да то вот первые вопросы на которые легко ответить знаюшим людям: 1:Как зделать в начале заставвку с диологом о сокровище 2:Как вставить в верьфь корабыль Альянса 3:Можно ли зделать чтоб вражеские каробли плавали по морю 4:Как зделать чтоб 40 лвл был последний 5:И самое тупое просто я забыл как убрать гланую базу чтоб не появлялась! Может ответить даже средний триггерщик, а на твой вопрос нужен джассер. А их не так много
Человечество так низко пало... Даже я за ним не успеваю © Не помню
|
|
|
|
MTT | Дата: Понедельник, 28 Декабря 2009, 01:51:10 | Сообщение # 3 |
9 уровень
Группа: Пользователи
Сообщений: 941
Награды: 0
Репутация: 81
Блокировки:
| ShadowDragon, Патеря Добавлено (28-12-2009, 01:51) --------------------------------------------- Дайте мне ответ на вопрос пожайлуйста, я перепробовал все варианты... Я уже переделал все, что может прийти в голову... Без функции Pick unit in unit group не получается...
|
|
|
|
Arius | Дата: Понедельник, 28 Декабря 2009, 07:15:40 | Сообщение # 4 |
10 уровень
Группа: Проверенные
Сообщений: 2163
Награды: 2
Репутация: 267
Блокировки:
| MTT, каждую секунду пикать отряд не надо, заноси его в переменную и включай триггер где они смещаются. Добавлено (28-12-2009, 07:15) --------------------------------------------- Надо делать 2 триггера
|
|
|
|
Эллесар | Дата: Понедельник, 28 Декабря 2009, 08:46:07 | Сообщение # 5 |
DeMoN
Группа: Ветераны
Сообщений: 934
Награды: 1
Репутация: 210
Блокировки:
| MTT, Полностью нужен триггер О_о... может ты двигал юнита ?... А вообще там создаётся точка которая "висит в памяти" Quote (MTT) (Position of Rocket[a]))
база паролей: https://yadi.sk/d/mdDhWuvPcTSKw бекап сайта от 26.12.2010 https://yadi.sk/d/L3xNpibbiHpYE
|
|
|
|
Arius | Дата: Понедельник, 28 Декабря 2009, 09:40:27 | Сообщение # 6 |
10 уровень
Группа: Проверенные
Сообщений: 2163
Награды: 2
Репутация: 267
Блокировки:
| MTT, пустая переменная отряда не глюк, потому что посуди сам переменная у тебя есть сначала карты, и она пустая пока не сработает этот триггер.
|
|
|
|
FkoFF | Дата: Понедельник, 28 Декабря 2009, 11:09:18 | Сообщение # 7 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (MTT) Дайте мне ответ на вопрос пожайлуйста, я перепробовал все варианты... Я уже переделал все, что может прийти в голову... Без функции Pick unit in unit group не получается... pick every unit in range 500 within rocket[a] matchin conditions - matching unit не является unit from Prays[1] and do actions: add picked unit in prays[1] pick every unit in prays[1] and do multiplie actions. тут действия.. если надо - удаляй их оттуда через какое то время...
|
|
|
|
Arius | Дата: Понедельник, 28 Декабря 2009, 11:22:08 | Сообщение # 8 |
10 уровень
Группа: Проверенные
Сообщений: 2163
Награды: 2
Репутация: 267
Блокировки:
| MTT, конечно у тебя глючить будет если ты каждые 0.01 сек пикаешь всех и у тебя стоит триггер двигать picked unit, каждые 0.01 набор юнитов в picked unit разный и компу надо соображать и заносить всех picked unit
|
|
|
|
MTT | Дата: Понедельник, 28 Декабря 2009, 13:01:06 | Сообщение # 9 |
9 уровень
Группа: Пользователи
Сообщений: 941
Награды: 0
Репутация: 81
Блокировки:
| Arius, Ты не правильно думаеш. Я двигаю массив юнита Rocket[a]. Каждого из них к своему Traget[a]. Действие происходит столько раз, за 0,01 секунду, сколько юнитов я двигаю. Если я удаляю строчку, каторая Пикает отряд, лагать перестает. Picked Unit я не двигаю, если на пути Rocket[a] встречается любой юнит, чей хозяин не равен хозяину Rocket[a], я удаляю ракету и смещаю массив. Вот тебе пример. Every 0.01 sec For (integerA) from 1 to 1000 Pick every units in region (Область, в которой никаво нет) Соотвественно каждую 0,01 секунду редактор 1000 раз выделяет всех юнитов в области, в которой нету юнитов. При таком триггере карта виснет сразуже. Что это означает? То, что при действии пик в отряд юнитов, даже если юнитов нету, сохраняется пустой отряд. И функция Clear unit group не помогает Добавлено (28-12-2009, 13:01) ---------------------------------------------
Quote (Arius) MTT, каждую секунду пикать отряд не надо, заноси его в переменную и включай триггер где они смещаются Ты не правильно понял выражение "Смещаю массив". Да и не имеет значение, что это значит, я это проверял отдельно, утечек нет.
|
|
|
|
[SOAD]Damager | Дата: Понедельник, 28 Декабря 2009, 15:17:34 | Сообщение # 10 |
5 уровень
Группа: Пользователи
Сообщений: 131
Награды: 0
Репутация: 2
Блокировки:
| MTT, Извини за мой тупизм... Попробуй делать сначало проверку, есть ли там ктонибудь, в той области и засыпь условие впереди своего действия... и щитай не до 1000 а до колличества юнитов. ( условие надо, потому что от 1 до 0 никто не считает )
ICQ: 351676654 Skype: lxoxol Работаю над УГ'о ОРПГ.
|
|
|
|
Arius | Дата: Понедельник, 28 Декабря 2009, 15:20:11 | Сообщение # 11 |
10 уровень
Группа: Проверенные
Сообщений: 2163
Награды: 2
Репутация: 267
Блокировки:
| MTT, я думал ты пикаешь всех чтобы двигать их. Скажи что ты хочешь сделать, сам эффект как действует. Я попробую сделать.
|
|
|
|
MTT | Дата: Понедельник, 28 Декабря 2009, 15:43:57 | Сообщение # 12 |
9 уровень
Группа: Пользователи
Сообщений: 941
Награды: 0
Репутация: 81
Блокировки:
| [SOAD]Damager, Я привел цикл как пример, у меня не такое действие... Arius, Вот движется юнит с полярным смещениеим, при сталкивании с другим юнитом, первый должен пропасть ну и там другие действия еще... Нада сделать это без утечек...Добавлено (28-12-2009, 15:43) ---------------------------------------------
Quote (FkoFF) pick every unit in range 500 within rocket[a] matchin conditions - matching unit не является unit from Prays[1] and do actions: add picked unit in prays[1] pick every unit in prays[1] and do multiplie actions. тут действия.. при твоем действиии выделюятся лиш определенные юниты. Если там нету никаво, из тех, каво ты указал, он сохранит пустой отряд... Утечка...
|
|
|
|
Arius | Дата: Понедельник, 28 Декабря 2009, 15:57:05 | Сообщение # 13 |
10 уровень
Группа: Проверенные
Сообщений: 2163
Награды: 2
Репутация: 267
Блокировки:
| MTT, а тот юнит, с кем должен столкнуться, на одном месте стоит или двигается? Пустой отряд не должен быть утечкой, потому что в самом начале карты переменные уже созданы и они пустые, пока нет действия установить их. И если никакие юниты не выбраны комп ничего не сохранит, всё останется так же. Добавлено (28-12-2009, 15:57) --------------------------------------------- Я всегда в спеллах последним действием ставлю очистить отряд на который заклинание подействовало, и ниче у меня не глючит.
|
|
|
|
MTT | Дата: Понедельник, 28 Декабря 2009, 16:16:01 | Сообщение # 14 |
9 уровень
Группа: Пользователи
Сообщений: 941
Награды: 0
Репутация: 81
Блокировки:
| Quote (Arius) MTT, а тот юнит, с кем должен столкнуться, на одном месте стоит или двигается? Он может ходить.Quote (Arius) Пустой отряд не должен быть утечкой, потому что в самом начале карты переменные уже созданы и они пустые, пока нет действия установить их. И если никакие юниты не выбраны комп ничего не сохранит, всё останется так же Неправильная у тебя логика Ты ведь можеш бесконечное количество отрядов создать, так? В памяти не может быть бесконечное количество отрядов не имеющих значения. Я написал выше пример. Очень много и очень часто пикается путой отряд, карта зависает с нарастающей, щнач утечка нарастающая и отряд не имеющий значния записывается в памяти... Функция Clear unit group, как я понял, не удаляет отряд, а уберает всех юнитов из отряда... Если я дабавлю условие, которое пикает всех юнитов только в том случае, что вокруг ракеты больше 1 юнита, утечка всеравно есть, но меньше. (притом, что для меня странно, функция воопще не работает, а лаги есть ) Я пробовал цыклом перемещать область, заранее мною нарисованную. Тоесть за 0,01 сек, область была на ракете. Событие юнит входит в эту область не прощитывается... Наверно потому что он в нее не входил, а область переместилась к нему... Нужен жасс... Проста один кустом триггер. И все... Прийдется изучить джас ради этого, ато никто мне помоч не хочет...
|
|
|
|
[DUОS] | Дата: Понедельник, 28 Декабря 2009, 16:19:28 | Сообщение # 15 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| local group g = CreateGroup() call GroupEnumUnitsInRange(g,GetUnitX(udg_Rocket[a]),GetUnitY(udg_Rocket[a]),500,function Conditions) call ForGroup(g,function GroupGActions) call DestroyGroup(g) set g = null function Conditions - укажешь в ней Quote (MTT) matching unit не является unit from Prays[1] function GroupGActions - тут укажи Quote (MTT) If (All Conditions are True) then do (Then Actions) else do (Else Actions) (Owner of (Picked unit)) не равно (Owner of Rocket[a]) then Cause Rocket[a] to damage (Picked unit), dealing 100.00 damage of attack type... Remove Rocket[a] from the game
|
|
|
|
Arius | Дата: Понедельник, 28 Декабря 2009, 16:29:45 | Сообщение # 16 |
10 уровень
Группа: Проверенные
Сообщений: 2163
Награды: 2
Репутация: 267
Блокировки:
| MTT, не знаю, но у меня ниче не глючит.
|
|
|
|
[DUОS] | Дата: Понедельник, 28 Декабря 2009, 16:30:49 | Сообщение # 17 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Arius, Он спросил, где утечка и как зафиксить, а не "глючит-не глючит".
|
|
|
|
Arius | Дата: Понедельник, 28 Декабря 2009, 16:34:05 | Сообщение # 18 |
10 уровень
Группа: Проверенные
Сообщений: 2163
Награды: 2
Репутация: 267
Блокировки:
| MTT, у тебя в триггере где пикается отряд событие 0.01 сек.? Добавлено (28-12-2009, 16:34) --------------------------------------------- [DUOS], он говорит что у него память забивается, а я сказал что я таким же действием делаю и у меня не глючит
|
|
|
|
MTT | Дата: Понедельник, 28 Декабря 2009, 16:38:19 | Сообщение # 19 |
9 уровень
Группа: Пользователи
Сообщений: 941
Награды: 0
Репутация: 81
Блокировки:
| Quote (|DUОS|) local group g = CreateGroup() call GroupEnumUnitsInRange(g,GetUnitX(udg_Rocket[a]),GetUnitY(udg_Rocket[a]),500,function Conditions) call ForGroup(g,function GroupGActions) call DestroyGroup(g) set g = null А что вот это значит?Добавлено (28-12-2009, 16:38) --------------------------------------------- Arius, У тебя она тоже забивается, проста у тебя действий меньше, у меня на карте это действие часто повторяется. Если ты со своим триггером оставиш игру на пол часа, зависнет она...
|
|
|
|
Arius | Дата: Понедельник, 28 Декабря 2009, 16:56:03 | Сообщение # 20 |
10 уровень
Группа: Проверенные
Сообщений: 2163
Награды: 2
Репутация: 267
Блокировки:
| MTT, у меня есть 2 триггера, первый при применении спелла заносит юнитов в диапазоне точки каста в переменную и включает такой триггер: событие каждые 0.01 секунд выделить всех юнитов в [переменная] цикл двигать выбранного юнита со смещением и т.д. Таких способностей несколько и ниче не глючит. Добавлено (28-12-2009, 16:56) --------------------------------------------- Кстати в первом триггере отряд очищается
|
|
|
|
MTT | Дата: Понедельник, 28 Декабря 2009, 17:03:01 | Сообщение # 21 |
9 уровень
Группа: Пользователи
Сообщений: 941
Награды: 0
Репутация: 81
Блокировки:
| Arius, А у меня подобное действие повторяется во много раз чаще. В твоем действие есть утечка, проста игра начнет лагать гараздо пожже...Добавлено (28-12-2009, 17:03) --------------------------------------------- [DUОS], Блин.. Я наверно совсем туплю... Куда нада вставить твой код?
|
|
|
|
[DUОS] | Дата: Понедельник, 28 Декабря 2009, 17:12:36 | Сообщение # 22 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| MTT, Радиус Quote (MTT) function Conditions Будут занесены в группу онли те юниты, которые подходят под условие Conditions. Quote (MTT) Куда нада вставить твой код? Вышли мне сконвертированный в жасс код.
|
|
|
|
MTT | Дата: Понедельник, 28 Декабря 2009, 17:18:00 | Сообщение # 23 |
9 уровень
Группа: Пользователи
Сообщений: 941
Награды: 0
Репутация: 81
Блокировки:
| function Trig_Move_Rocket_Func001Func002Func001C takes nothing returns boolean if ( not ( GetOwningPlayer(GetEnumUnit()) != GetOwningPlayer(udg_Rocket[udg_a]) ) ) then return false endif if ( not ( udg_a > 0 ) ) then return false endif return true endfunction function Trig_Move_Rocket_Func001Func002A takes nothing returns nothing if ( Trig_Move_Rocket_Func001Func002Func001C() ) then call UnitDamageTargetBJ( udg_Rocket[udg_a], GetEnumUnit(), 100.00, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL ) call RemoveUnit( udg_Rocket[udg_a] ) call TriggerExecute( gg_trg_VzrivRocket ) set udg_b = ( udg_a + 1 ) set bj_forLoopAIndex = 1 set bj_forLoopAIndexEnd = ( udg_NumberOfRockets - udg_a ) loop exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd set udg_Rocket[( udg_b - 1 )] = udg_Rocket[udg_b] set udg_Target[( udg_b - 1 )] = udg_Target[udg_b] set udg_b = ( udg_b + 1 ) set bj_forLoopAIndex = bj_forLoopAIndex + 1 endloop else endif endfunction function Trig_Move_Rocket_Func001Func004C takes nothing returns boolean if ( not ( DistanceBetweenPoints(GetUnitLoc(udg_Rocket[udg_a]), udg_Target[udg_a]) <= 50.00 ) ) then return false endif if ( not ( udg_a > 0 ) ) then return false endif return true endfunction function Trig_Move_Rocket_Func001Func006C takes nothing returns boolean if ( not ( udg_a > udg_NumberOfRockets ) ) then return false endif return true endfunction function Trig_Move_Rocket_Actions takes nothing returns nothing set bj_forLoopAIndex = 1 set bj_forLoopAIndexEnd = udg_NumberOfRockets loop exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd call SetUnitPositionLoc( udg_Rocket[udg_a], PolarProjectionBJ(GetUnitLoc(udg_Rocket[udg_a]), udg_RocketSpeed[GetConvertedPlayerId(GetOwningPlayer(udg_Rocket[udg_a]))], AngleBetweenPoints(GetUnitLoc(udg_Rocket[udg_a]), udg_Target[udg_a])) ) call ForGroupBJ( GetUnitsInRangeOfLocAll(100.00, GetUnitLoc(udg_Rocket[udg_a])), function Trig_Move_Rocket_Func001Func002A ) call GroupClear( GetLastCreatedGroup() ) if ( Trig_Move_Rocket_Func001Func004C() ) then call RemoveUnit( udg_Rocket[udg_a] ) set udg_b = ( udg_a + 1 ) set bj_forLoopAIndex = 1 set bj_forLoopAIndexEnd = ( udg_NumberOfRockets - udg_a ) loop exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd set udg_Rocket[( udg_b - 1 )] = udg_Rocket[udg_b] set udg_Target[( udg_b - 1 )] = udg_Target[udg_b] set udg_b = ( udg_b + 1 ) set bj_forLoopAIndex = bj_forLoopAIndex + 1 endloop set udg_NumberOfRockets = ( udg_NumberOfRockets - 1 ) else endif set udg_a = ( udg_a + 1 ) if ( Trig_Move_Rocket_Func001Func006C() ) then set udg_a = 0 else endif set bj_forLoopAIndex = bj_forLoopAIndex + 1 endloop endfunction //=========================================================================== function InitTrig_Move_Rocket takes nothing returns nothing set gg_trg_Move_Rocket = CreateTrigger( ) call TriggerRegisterTimerEventPeriodic( gg_trg_Move_Rocket, 0.01 ) call TriggerAddAction( gg_trg_Move_Rocket, function Trig_Move_Rocket_Actions ) endfunction
|
|
|
|
[DUОS] | Дата: Понедельник, 28 Декабря 2009, 17:26:43 | Сообщение # 24 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| MTT, Да у тебя код может подтормаживать... Ну подожди, сейчас я тебе сделаю его понормальнее.Добавлено (28-12-2009, 17:26) --------------------------------------------- MTT, Поясни, что у тебя есть a и что у тебя есть b?
|
|
|
|
MTT | Дата: Понедельник, 28 Декабря 2009, 17:32:09 | Сообщение # 25 |
9 уровень
Группа: Пользователи
Сообщений: 941
Награды: 0
Репутация: 81
Блокировки:
| [DUОS], a это проста счетчик, который мне нужен для обращения к каждому юнита из массива Rocket[]. b Это второй счетчик, который мне нужен для того, чтобы сместить значение массива. Тоесть если пропадает, например Rocket[3], то Rocket[3] должен стать равен Rocket[4], Rocket[4] = Rocket[5] и так далее. Для того, чтобы массив Rocket[] не заполнился.Добавлено (28-12-2009, 17:32) --------------------------------------------- Можно все делать через локальные переменные, если бы на ГУИ можно было их создавать, а жасс я не знаю.
|
|
|
|
|
|
|
|
|
|
|