Сейчас 18:54:23 Понедельник, 29 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Утечка (Жассеры помогите)
Утечка
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)
500

Радиус
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)
---------------------------------------------
Можно все делать через локальные переменные, если бы на ГУИ можно было их создавать, а жасс я не знаю.

 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Утечка (Жассеры помогите)
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz