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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Несколько вопросов.
Несколько вопросов.
FkoFFДата: Среда, 30 Июня 2010, 10:09:58 | Сообщение # 26
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
rep-30011, я тебе это говорю как человек столкнувшийся с ОБЯЗАТЕЛЬНОЙ оптимизацией полярок в моей карте. Карта НЕВЫНОСИМО лагает уже через пол часа. Конечно если полярки юзаются в малом периоде и не в единичном экземпляре.

Для того что бы карта начала лагать и критовать - хватит 6 000 000 точек (порядка 250 мб лишней нагрузки в оперативную память). А теперь посчитай. 0.03 период. Один триггер с такой поляркой делает 132 точки. Умнож на 15 триггеров. 1980 в секунду при 15-и рабочих полярок в малом периоде.
А теперь раздели 6 000 000 на 1980 и получишь цифру в 3 303 секунды. и финальный шаг: разделить это все на 60 и получишь 50 минут игры. Это, хочу заметить, на достаточно сильной машине..

Слабой же машине хватит половины этого захламления что бы критануть из-за недостатка памяти или уйти в ребут. Это через 25 минут игры.

И да, я таки не говорю про десяток другой утечных функций (тоже с юнит локами) которые тоже, так же - дырявят память.

Хотя, если у тебя, конкретно, на карте бегает паладин и фигачит всех кнокбаком, и больше ничего абсолютно нет - тогда я пойму почему у тебя карта не лагает.

Добавлено (30-06-2010, 10:09)
---------------------------------------------
Ах да, еще веселее карта вешается если не удалять крипов после их смерти. Так, в частности на картах типа тд (где юниты бродят ордами) хватит числа в 2000 юнитов (мертвых) - что бы игра вылетела с критом.


 

3JIODEйДата: Среда, 30 Июня 2010, 10:19:50 | Сообщение # 27
6 уровень
Группа: Заблокированные
Сообщений: 198
Награды: 0
Репутация: 47
Блокировки:
FkoFF, а вот я не понял
Quote (FkoFF)
Move UNIT1 insantly to point with polar offset: Position of UNIT1 offset by 150, toward angle between position of UNIT1 and position of UNIT2 degrees.

вот тут UNIT1 и UNIT2 нужно выбранного юнита заносить в переменную?

Добавлено (30-06-2010, 10:19)
---------------------------------------------
Мне то нужно выбрать в радиусе 250 от кастера всех юнитов и смещать их, придётся значит занести в точку, позицию кастера, потом выбрать в радиусе 250 от него всех юнитов и занести их позицию в точку? и занести их самих же в переменную, потом двигать переменную в занесённые точки? но не будет ли проблем, если вокруг кастера окажется больше 1 юнита? в 1 переменную типа боевая еденица, разве может занестись больше 1 юнита?.


Грац меня с шестым взломом администрации
 

FkoFFДата: Среда, 30 Июня 2010, 10:26:13 | Сообщение # 28
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (3JIODEй)
Мне то нужно выбрать в радиусе 250 от кастера всех юнитов и смещать их, придётся значит занести в точку, позицию кастера, потом выбрать в радиусе 250 от него всех юнитов и занести их позицию в точку? и занести их самих же в переменную, потом двигать переменную в занесённые точки? но не будет ли проблем, если вокруг кастера окажется больше 1 юнита? в 1 переменную типа боевая еденица, разве может занестись больше 1 юнита?.

В момент произнесения заклинания все юниты берутся в группу, к примеру udg_group[1], точка нахождения кастера заносится в udg_point[1]
во втором триггере (у которого событие: каждые 0.03 секунды) сразу идет действие:

pick every unit in udg_group[1] and do actions:
set udg_point[2] = position of picked unit
set udg_real[1] = angle between udg_point[1] and udg_point[2]
set udg_point[3] = point with polar offset, udg_point[2] offset by нужное расстояние toward udg_real[1] degrees
move picked unit insantly to udg_point[3]
call RemoveLocation(udg_point[2])
call RemoveLocation(udg_point[3])

В триггера должен быть ифзен, отсчитывающий время (вейты - не дело, я уже говорил об этом) так вот в этом ифзене должна быть строка:
pick every unit in udg_group[1] and do actions:
remove picked unit from udg_group[1]

В противном случае все, кто однажды побывал под заклинанием - будут двигаться при каждом его произнесении.


 

3JIODEйДата: Среда, 30 Июня 2010, 10:47:07 | Сообщение # 29
6 уровень
Группа: Заблокированные
Сообщений: 198
Награды: 0
Репутация: 47
Блокировки:
http://funkyimg.com/viewer.php?img=/2/796/998/30_06.png
вот посмотрите=( кажется ошибка конвертации кода((

Добавлено (30-06-2010, 10:47)
---------------------------------------------
оу, блин, я тупо всё перекопировал :D щас исправлю перезалью


Грац меня с шестым взломом администрации
 

vov68Дата: Среда, 30 Июня 2010, 10:49:03 | Сообщение # 30
10 уровень
Группа: Проверенные
Сообщений: 1329
Награды: 3
Блокировки:
Quote (FkoFF)
Ах да, еще веселее карта вешается если не удалять крипов после их смерти. Так, в частности на картах типа тд (где юниты бродят ордами) хватит числа в 2000 юнитов (мертвых) - что бы игра вылетела с критом.

здесь вопрос не в мёртвых, они потом зачищаются автоматом, а в живых - при числе юнитов больше 250 - 300 у одной из сторон, они (эти300) просто впадают вспячку с очень вялым движением, даже если есть зачистка по точкам.

память засоряет всё то, что определяется реальным числом - точка (позиция юнита, точка приложения спела, точка прикрепления текста)


Зачем делать для других новые карты...
... лучше устроить коту божественный почесон. :)
 

3JIODEйДата: Среда, 30 Июня 2010, 11:28:40 | Сообщение # 31
6 уровень
Группа: Заблокированные
Сообщений: 198
Награды: 0
Репутация: 47
Блокировки:
FkoFF, http://funkyimg.com/viewer.php?img=/2/557/826/30_06s.png
посмотри, триггер, у меня раньше(до оптимизации) они смещались от юнита, а теперь все толпой в одну сторону смещаются, волной, раньше они прям от юнита во все стороны отодвигались)

Добавлено (30-06-2010, 11:16)
---------------------------------------------
ошибки конвертации нет

Добавлено (30-06-2010, 11:17)
---------------------------------------------
Ах, да, я строчки, удаляющие точки, записал в другой триггер, в нём же и отключение триггера.

Добавлено (30-06-2010, 11:22)
---------------------------------------------
Всё!!!! я просто сразу после первого же цикла, удалял эти точки, нужно было в конце, я переделал, и всё встало на свои места, только вот правильно ли я сделал на скрине?
З.Ы. последние 3 строчки вычеркните

Добавлено (30-06-2010, 11:28)
---------------------------------------------
9).А вот "(позиция UNIT)" при вызове этого, в любом случае будет перегрузка?, или только если двигать туда юнита?


Грац меня с шестым взломом администрации
 

vov68Дата: Среда, 30 Июня 2010, 11:45:42 | Сообщение # 32
10 уровень
Группа: Проверенные
Сообщений: 1329
Награды: 3
Блокировки:
Quote (3JIODEй)
А вот "(позиция UNIT)" при вызове этого, в любом случае будет перегрузка?, или только если двигать туда юнита?

если ты используешь её в триггере, то будет. даже если ты спец эффект сделал в точке позиция юнита...
любая используемая точка даёт лаг: центр области, любая точка в области и так далее (там много способов задания точки)


Зачем делать для других новые карты...
... лучше устроить коту божественный почесон. :)
 

3JIODEйДата: Среда, 30 Июня 2010, 11:48:18 | Сообщение # 33
6 уровень
Группа: Заблокированные
Сообщений: 198
Награды: 0
Репутация: 47
Блокировки:
А реальные тож дают утечки?

Грац меня с шестым взломом администрации
 

FkoFFДата: Среда, 30 Июня 2010, 12:05:35 | Сообщение # 34
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (vov68)
они потом зачищаются автоматом

не правда.
Quote (3JIODEй)
А реальные тож дают утечки?

нет
Quote (vov68)
точка приложения спела

ложь и провокация, target point of ability being cast = не утечная точка.
Quote (vov68)
точка прикрепления текста

смотря к чему крепится текст.
3JIODEй,

все ты, друг мой, делаешь через пятую точку.

Объясняю как юзать группы - что бы не было тормозов - а то при неправильном (в твоем случае именно таком) использовании pick every unit - лаги гарантированны.

Так вот, в группу добавляешь следующим образом:

pick every unit in range *600 at udg_point[1] MATCHING conditions: через AND записываешь хоть 200 условий, в данном случае условия следующие:
real comparison: здоровье of matching unit > 0 || Boolean Comparison: matching unit belongs an ally to triggering unit != (не равно) да || Boolean Comparison: Matching unit is здание != да ||
Таким образом будут выбираться только эти юниты, без всяких ифзенов. В противном случае ты повесишь карту через 30-40 запросов к "pick every unit in playable map area" что бы определить, к примеру, кто ж из них герой.

Это первое что бросилось в глаза.

зачем в самом начале цикла перебора юнитов стоит set udg_Rev3_unit = picked unit?

убрать нафиг. просто set udg_point[2] = position of picked unit
Ошибка стоит в set real

должна быть следующей set udg_real = ANGLE BETWEEN POINTS (Угол между точками): udg_point[1] and udg_point[2]

функцию Боевая единица - cause facing angle (заставить повернуться к udg_point[1]) можно убрать, так как в следующей функции ты опять же, указываешь это направление.




Сообщение отредактировал FkoFF - Среда, 30 Июня 2010, 12:07:14
 

vov68Дата: Среда, 30 Июня 2010, 12:43:01 | Сообщение # 35
10 уровень
Группа: Проверенные
Сообщений: 1329
Награды: 3
Блокировки:
не знаю, что там говорит наука про мёртвых юнитов, только у меня на карточке воевало более часа 100 на 100( это суммарно на линиях) и ничего, а вот когда случился перекос 50 на 250, то 250 встали. хотя 50 бегали очень живо и мёрли замечательно, плодя очередные труппы. учти с 50 ничего не произошло!
скажем так: зачистка по мёртвым юнитам есть, только иногда её скорости недостаточно для вычищения выделенной памяти чтобы работала нормальна мультипликация.


Зачем делать для других новые карты...
... лучше устроить коту божественный почесон. :)
 

3JIODEйДата: Среда, 30 Июня 2010, 18:02:55 | Сообщение # 36
6 уровень
Группа: Заблокированные
Сообщений: 198
Награды: 0
Репутация: 47
Блокировки:
FkoFF, я всё понял(ну, почти), смотри:
http://funkyimg.com/viewer.php?img=/2/728/946/30_06.png

Добавлено (30-06-2010, 16:10)
---------------------------------------------
10).Вот в конце запуска карты, обычно она начинает грузиться очень долго, почему?

Добавлено (30-06-2010, 18:02)
---------------------------------------------
11).Вот я скачал JNGP драгона, в редакторе объектов у каждого значения, характеристик, данных и т. д. появились какие то строчки, что это такое? я думал переменные, ведущие к значению скилла, но это не так))) подскажите)))


Грац меня с шестым взломом администрации
 

FkoFFДата: Среда, 30 Июня 2010, 20:14:31 | Сообщение # 37
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
3JIODEй, ничего ты не понял....

В группу юнитов добавляешь следующей функцией:
В ПЕРВОМ ТРИГГЕРЕ:
pick every unit in range сколько нужно at udg_point[1]MATCHING CONDITIONS через AND (ТАК ЖЕ) добавляешь условия..
собственно те которые я тебе перечислил.

И никаких ифзенов в триггере на движение не должно быть, ты заставляешь процессор делать 3 ненужных действия при переборе юнитов.

Rev3_real = поворот выбранный юнит + 180. это бред, почему? потому что опять же - делаешь лишние телодвижения

Тебе надо что бы юниты разлетались от кастера - функция:

Quote (vov68)
250 встали

это глюки движка. Я тебе говорю про мертвых юнитов. На стандарте варкрафт их не удаляет из игры и со временем - память очень жестко засоряется. Как только поставил системку на удаление трупов - дышать в карте стало в десять раз легче.


 

3JIODEйДата: Среда, 30 Июня 2010, 20:28:15 | Сообщение # 38
6 уровень
Группа: Заблокированные
Сообщений: 198
Награды: 0
Репутация: 47
Блокировки:
FkoFF, эээ matching юнит как переводится? ^_^

Добавлено (30-06-2010, 20:28)
---------------------------------------------
Случайно не совподающий юнит?


Грац меня с шестым взломом администрации
 

FkoFFДата: Среда, 30 Июня 2010, 20:29:02 | Сообщение # 39
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
3JIODEй, условный юнит, или что то в этом духе. Там сверху, рядом с "последний созданный юнит" и "выбранный юнит"

 

3JIODEйДата: Среда, 30 Июня 2010, 20:40:38 | Сообщение # 40
6 уровень
Группа: Заблокированные
Сообщений: 198
Награды: 0
Репутация: 47
Блокировки:
Всё, получилось matching = совпадающий.
Смотри)):
http://funkyimg.com/viewer.php?img=/2/563/415/30_062.png
http://funkyimg.com/viewer.php?img=/2/493/892/30_06.png
Только сильно не ругайся)))


Грац меня с шестым взломом администрации
 

FkoFFДата: Среда, 30 Июня 2010, 21:05:30 | Сообщение # 41
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
3JIODEй, скрин первый: cоздать дамми на позиции переключающий юнит.
Создавай его на udg_To4ka_Skill[1]
Далее: последний кусок триггера (после включения триггера рев2) - не самое лучшее решение.

Предлогаю такой вариант:

В триггер на движение добавь следующий пункт:

В самое начало, первой строкой:
Set udg_real[2] = udg_real[2]+5

в этом месте идет перебор юнитов и их движение;
После него - следующий ифзен:
if\then\else:
udg_real[2] >= предельное расстояние отталкивания, например 450.
then:
turn off this trigger
call RemoveLocation(udg_To4ka_Skill[1])
call RemoveLocation(udg_To4ka_Skill[2])
call RemoveLocation(udg_To4ka_Skill[3])
pick every unit in udg_group[1] and do action: remove picked unit from udg_group[1]

После этих действий - удаляешь из первого триггера все, что идет после turn rev2 ON

Теперь немного визуальной оптимизации:

В тот кусок триггера, который осуществляет движение юнитов:
pick every destructible within 150 at udg_point[3] and do actions:
kill picked destructible

Что бы деревья возрождались после смерти, создай отдельный триггер:

Destructible in playable map area dies
actions:
wait 50 seconds
revive dying destructible показать birth animation

Ну и на последок, в начало первого триггера добавь следующие строки.
pick every unit in udg_group[1] and do action: remove picked unit from udg_group[1]
set udg_real[2] = 0
call RemoveLocation(udg_To4ka_Skill[1])




Сообщение отредактировал FkoFF - Среда, 30 Июня 2010, 21:09:53
 

3JIODEйДата: Среда, 30 Июня 2010, 21:41:47 | Сообщение # 42
6 уровень
Группа: Заблокированные
Сообщений: 198
Награды: 0
Репутация: 47
Блокировки:
Окей, щас исправляю, а вот что значат X,Y и как их можно применить? А то я читал в статье, что лучше использовать именно их чем точки. Еще Width и Hight? И еще (0.00, 0.00, 0.00, 0.00).

Грац меня с шестым взломом администрации
 

FkoFFДата: Среда, 30 Июня 2010, 21:44:54 | Сообщение # 43
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
3JIODEй, если будешь делать с резервированием всех точек - разницы не будет никакой. X\Y это джасс, в котором еще надо разобраться.

 

3JIODEйДата: Среда, 30 Июня 2010, 21:45:55 | Сообщение # 44
6 уровень
Группа: Заблокированные
Сообщений: 198
Награды: 0
Репутация: 47
Блокировки:
Quote (FkoFF)
Destructible in playable map area dies actions: wait 50 seconds revive dying destructible показать birth animation

Хм, а разве здесь не нужно использовать положение декорации и тип декорации в локальных переменных?


Грац меня с шестым взломом администрации
 

FkoFFДата: Среда, 30 Июня 2010, 21:47:23 | Сообщение # 45
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
3JIODEй, нет, будет восстанавливать умирающую декорацию на её точке, с теми же параметрами с которыми она была до уничтожения )

 

3JIODEйДата: Среда, 30 Июня 2010, 21:58:40 | Сообщение # 46
6 уровень
Группа: Заблокированные
Сообщений: 198
Награды: 0
Репутация: 47
Блокировки:
Quote (FkoFF)
показать birth animation

Оо а деревья то выростают))) Ну вот короче мои триггеры:
http://funkyimg.com/viewer.php?img=/2/741/456/30_06.png
http://funkyimg.com/viewer.php?img=/2/202/576/30_062.png
Ну сейчас то надеюсь всё правильно?) систему воскрешения и уничтожения деревьев я сделал, ток унижтожение в другом скилле, по идее рёв не должен сметать деревья)

Добавлено (30-06-2010, 21:58)
---------------------------------------------
ой блин, накосячил, там в 1 тригге надо 1 выключатель убрать)


Грац меня с шестым взломом администрации
 

FkoFFДата: Среда, 30 Июня 2010, 22:01:00 | Сообщение # 47
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (3JIODEй)
рёв не должен сметать деревья)

деревья сметают разлетающиеся в сторону юниты ) Это, помимо всего, еще и залог того что в деревьях они не застрянут )

По второму скрину, не знаю, то ли ты не заскринил этот кусок, то ли, зачем то, его удалил. В конце цикла ОБЯЗАТЕЛЬНО должны быть строчки на удаление двух точек (udg_point[2] и udg_point[3])

Добавлено (30-06-2010, 22:01)
---------------------------------------------
А так, да, уже лучше )

Ах, да, в первый триггер таки добавь удаление юнитов из группы (перед добавлением новых) и установку значения 0 для переменной udg_Real_Skill[6]


 

3JIODEйДата: Среда, 30 Июня 2010, 22:05:13 | Сообщение # 48
6 уровень
Группа: Заблокированные
Сообщений: 198
Награды: 0
Репутация: 47
Блокировки:
Quote (FkoFF)
то ли ты не заскринил этот кусок

Я заскринил тот кусок) ток действия удаления у меня в первом триггере

Добавлено (30-06-2010, 22:05)
---------------------------------------------
FkoFF, школу открывай ^_^ .
Спасибо, хороший чувак)
Кстати, я так же попутно делал остальные тригги и вот эта проблема почти исчерпалась:

Quote (3JIODEй)
10).Вот в конце запуска карты, обычно она начинает грузиться очень долго, почему?


Грац меня с шестым взломом администрации
 

FkoFFДата: Среда, 30 Июня 2010, 22:17:09 | Сообщение # 49
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (3JIODEй)
ток действия удаления у меня в первом триггере

действия удаления должны быть во всех триггерах связанных с этими точками.

первый раз: в начале триггера - подтираем те точки, которые, возможно, остались при прошлом использовании. Так же страхует при повторном касте от утечек.
Там же в ноль выставляются все переменные, используемые в триггере.

Второй раз: в конце цикла, они должны стоять обязательно, потому как в цикле они создаются, и если их не удалять - они останутся висеть в памяти. Ведь каждое использование цилка - перезаписывает существующие переменные (которые внутри него выставляются).


 

3JIODEйДата: Четверг, 01 Июля 2010, 10:44:06 | Сообщение # 50
6 уровень
Группа: Заблокированные
Сообщений: 198
Награды: 0
Репутация: 47
Блокировки:
FkoFF, А вот если устанавливать переменную, точку на карте путём:
установить переменную to4ka = позиция(переключающий юнит)
То сам редактор создаст ли ещё 1 точку "позиция(переключающий юнит)"? Или он сразу занесёт в переменную точку, без создания "позиция(переключающий юнит)"?


Грац меня с шестым взломом администрации
 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Несколько вопросов.
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:

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