XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Конкурсы (только чтение)> Архив конкурсов> XGM Spell Contests
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

 
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
Цитата:
Думаешь, это не будет заметно?

Если не удалять все его комменты, будет =)

Но врядли найдётся настолько полный кретин.

И, имхо, чтобы разобраться в вексорианских творениях нужно как минимум понять систему SCV, что дано далеко не каждому. А без этих знаний фиг чё вставишь в свою карту. А с этими знаниями можно и самому придумать всё, что угодно...
Старый 04.12.2007, 13:05
adic3x

offline
Опыт: 108,439
Активность:
возрадуйтесь - скоро будут результаты.

ADOLF добавил:
Итак, вот и завершен еще один конкурс. B связи с тем, что работы сделанные заслуженными мастерами шли вне конкурса общий уровень работ обидно низок - мы с смогли выбрать работу только на I место. Однако я надеюсь, что этот конкурс будет хорошим обучающим материалом не только для участников, но и для простых пользователей - ведь есть несколько работ и заслуживающих внимания, тем более отрицательный опыт - тоже опыт. Далее следует список работ, а ниже я рассмотрю каждую работу отдельно и напишу ее положительные/отрицательные стороны.

Работы, участники конкурса:

Лось - 6 (утечки - 1, способ выполнения - 2, MUI - 2, возможность настройки - 1, бонус от жюри - 0)
FREEZE_ball - 5 (утечки - 1, способ выполнения - 1, MUI - 2, возможность настройки - 1, бонус от жюри - 0)
Alex_Hell - 5 (утечки - 1, способ выполнения - 1, MUI - 2, возможность настройки - 1, бонус от жюри - 0)
Uk_gruby - 2 (утечки - 0, способ выполнения - 1, MUI - 0, возможность настройки - 0, бонус от жюри - 1)

Работы участников, идущие мимо конкурса:

ADOLF - 9 (утечки - 2, способ выполнения - 3, MUI - 2, возможность настройки - 2, бонус от жюри - 0)
Markiz - 8 (утечки - 2, способ выполнения - 2, MUI - 2, возможность настройки - 2, бонус от жюри - 0)
Shadow Daemon - 8 (утечки - 2, способ выполнения - 2, MUI - 2, возможность настройки - 2, бонус от жюри - 0)

//===============================================

Пользователь Лось получает приз 200 опыта.


Далее идет описание всех работ. не стесняйтесь, спрашивайте - либо автор, либо другие пользователи разяснят особености кода и т.д.

Alex_Hell



Почти все характеристики занесены в констант функции.

function SpellDamage
Аргументы обнулять незачем. суть обнуления в том, что бы полность удалить обьект, а он небуде удален до тех пор, пока на него существует ссылки (т.е. он помещен в переменную) а при передаче его как аргумент такая ссылка не создается.

Спел неиспользует таймер, т.е. по сути это не волна, а нанесение просто урона по линии (даже не сектор как в оригинальной волне).

function UnitAddGroupOnLine
Алгоритм сортировки юнитов крайне неправильный. Во первых вложеный цикл, правильней было бы создать один фильтр и использовать его в групировки юнитов.

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

FREEZE_ball



function FREEZEballShockWave_DamageForLevel
Не очень оптимально, т.к. много проверок, для тако простой операции. я бы заносил значения в массив (как я и сделал ^^).

Функции настройки как правило принято делать константными.

Опять нанесение урона по линии.

function FREEZEballShockWaveTrig_ShockWave_Conditions
Очень плохое впечатление, как от GUI2JASS =/

function FREEZEballShockWaveTrig_ShockWave_Actions
Во первых сплошной BJ
Код:
call CreateNUnitsAtLoc(1,FREEZEballShockWave_DummyWaveId(),OwnedPlayer,PointToCreate,  theAngle)
    set DummyWaveUnit=GetLastCreatedUnit()

Мягко говоря непорадавало.
Код:
call PolledWait(DummyLifeTime)

омг! Сколько раз рассказывали о том, насколько это глючно. опять же, ребята, запомните, обнуляются только некоторые handle переменные в некоторых случаях только.

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

Лось



Используется фильтр - это сразу плюс.

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

С другой стороны спел выполнен правильно. хотя можно было бы немного и оптимизировать - к примеру использовать один фильтр, а не создавать его постоянно, не использовать BJ и т.д.

Смысл действия - создается таймер - и на его handle значение через RB и кешь вешаются значения (координаты, угол, урон и т.д.) потом таймер запускается, и при кажой его сработке через опять же RB и кешь считываются необходимые обьекты, и производятся необходимые действия. также, на таймер вешается integer счетчик, который при его равентсве 0 запускает удаление обьектов и записей в кеше. вот и все)

Markiz



MConfigSystem
Хотя это и мое имхо, но мне показалось это идиотизмом. Что бы записать в массив integer мы записываем его в виде строки и потом вложеными циклами ищем запись и переводим ее обратно в integer. Я долго пытался придумать, когда бы это смогло быть удобным, но так и не смог. ничего кроме гемороя и тормозов этот способ не приносит.
Ну да ладно=) впринципе к самой волне это почти неимеет никакого отношения. Хотя осадок остался тяжелый.

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

От этой работы у меня остались смешанные впечатления. Пока я не запустил карту. увидев, как создается еффект волны (он всегда смотрит на восток, в сторону Австралии) Мои впечатления окончательно испортились. Тупые навороты, которые кроме якобы красивого внешнего вида кода ничего не дают (хотя нет, дают понижение быстродействия ^^) и нежелание сделать нормальный ефект = незачот. От афтора я ждал большего.

Shadow Daemon



Что у нас тут?) О, период таймера .01 цитата из CS Векса:

Цитата:
0.01 looks smooth but is lag friendly
0.025 looks smooth and probably matches wc3's frame rate (so in theory, lower values than it are not needed)
0.1 looks horrible but is not laggy
0.04 is decent for the human eye and very efficient.
0.035 is ... well, a little smoother than 0.04
0.05 would be an improvement in efficiency but probably doesn't look too well )


Идем дальше...

function Sockwave_Runtime
Утечка. при групировке юнитов conditionfunc создается и не удаляется.
Хотя нет, спасибо Tc за поправку + я сам проверил по хендл значениям - утечки нет.

function Sockwave_Filter
Не обнуляется локалка.

Впринципе сделанно вобщем правильно, но нехватает немного нормального внешнего оформления)
Больше сказать нечего ;)

Uk_gruby



опять Gui2JASS =/ на этот раз откровенный=/

Запустви волну в игре, я долго думал, баг это или фича, что после запуска волны при повороте кастера волна меняет направление. увы так и непридумал ;), но смотрелось прикольно ;)
Код:
call TriggerSleepAction( 0.25 )

Это некоректно, т.к. данная функция отсчитывает время, даже когда игра находится на паузе.

Волна сделана на глобальных переменных, за счет включения/выключения тригера. понятно, что говорить о двух одновременных коректных кастах тут нельзя.
кроме кучи утечек нам тут больше искать нечего, а афтору марш читать статьи=)
Но он получает бонус от жюри - неплохое начало для изучения Jass'a + очень понравилась фичебага с поворотом волны, да и волна выглядела красиво

ADOLF



Незнаю, но мне почемуто моя волна понравилась больше всех остальных ;)

Сейчас вкратце опишу принцип работы... используется vJass со всеми (ну скажем не со всеми, но с многими) его прелестями. создается класс S (ShockWave), который при касте создается и в него заносятся основные характеристики волны (уровень, координаты, группа и т.д.).

Точно также запускается таймер, но на него не вешается через не особо быстрый кешь множество значений, на него вешается через Toadcop's XAT (система на массивах) лишь S. поэтому за период идет всего одно обращение к сложной структуре (в остальных работах как правило вешали на таймер через кешь все и вся).

Дальше проверка юнитов от точки (кстати у меня урон идет не линией а сектором) и нанесение урона. я делал особый упор на быстродействие, к примеру пик юнитов идет только в том случае, если волна не нанесла еще максимальный урон. также я использую часто глобальные переменные, для передачи значений в другие функции.
Прикрепленные файлы
Тип файла: rar XGM ShockWave contest.rar (180.5 Кбайт, 116 просмотров )

Отредактировано ADOLF, 06.12.2007 в 12:52.
Старый 05.12.2007, 15:08
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
хм, адольф немного ошибся ) сейчас подредактирую, там бонусы от жюри были )
Старый 05.12.2007, 18:23
adic3x

offline
Опыт: 108,439
Активность:
кста? у кого какие впечатления от работ? какие мнения о исполнение? о внешнем виде?
нестесняемся)
Старый 05.12.2007, 19:13
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
Цитата:
Пользователь Лось получает приз 200 опыта.

А на 2ом месте, получается я? Или нет?
А на 2ем кто?
Старый 05.12.2007, 19:38
adic3x

offline
Опыт: 108,439
Активность:
чиорт, я таки забыл написать, что выдали только первое место, ибо уровень работ недотягивал=/
Старый 05.12.2007, 19:41
Markiz

offline
Опыт: 11,432
Активность:
Цитата:
Хотя это и мое имхо, но мне показалось это идиотизмом. Что бы записать в массив integer мы записываем его в виде строки и потом вложеными циклами ищем запись и переводим ее обратно в integer. Я долго пытался придумать, когда бы это смогло быть удобным, но так и не смог. ничего кроме гемороя и тормозов этот способ не приносит.
Ну да ладно=) впринципе к самой волне это почти неимеет никакого отношения. Хотя осадок остался тяжелый.

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

От этой работы у меня остались смешанные впечатления. Пока я не запустил карту. увидев, как создается еффект волны (он всегда смотрит на восток, в сторону Австралии) Мои впечатления окончательно испортились. Тупые навороты, которые кроме якобы красивого внешнего вида кода ничего не дают (хотя нет, дают понижение быстродействия ^^) и нежелание сделать нормальный ефект = незачот. От афтора я ждал большего.

ADOLF
Ну, поехали.
1. MConfigSystem -- работа со строками идет в инициализации. Дальше не используется ни одного цикла, наоборот все операции мгновенны. Такой способ хранения констант мне показался более удобным, поскольку не требует монструозно много места.
2. Про поворот забыл. Мой косяк, да. Исправляется одной строчкой.
3. Два таймера удобнее, т.к. один можно поставить с меньшим периодом -- в два-три раза уменьшить число обращений к кэшу, что показалось мне достаточно разумным подходом.
Плюс, как нетрудно догадаться, это позволяет закодить движение прожектила один раз (были еще варианты, конечно, но такой показался мне наиболее оптимальным)
4. Какой нормальный эффект от меня требовался? Гм?
5. В чем заключается тупость наворотов? Гммм?
---
В общем, как-то странно. Столько непонятных претензий, но баллы поставлены достаточно высокие. И на том спасибо.

p.s. Проверил еще раз насчет угла поворота. Оказывается это такое дебильное свойство вексовской модельки =)
p.p.s. 90% vJass'овских фич (кроме ПЖАССа и возможности объявления глобалок внутри кода) -- мракобесие и идиотизм.

Отредактировано Markiz, 05.12.2007 в 20:48.
Старый 05.12.2007, 20:36
adic3x

offline
Опыт: 108,439
Активность:
Markiz, эффект - серьезный косяк который испортил полность внешний вид волны. тупые навороты - нконфигсистем/два таймера, второй совершенно ненужен.

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

у каждого свой подход) ладно, положение обязывает отбиццо:

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

2) я сужу результат а не отмазки... ты ее хоть запускал? что незаметил такого косяка...

3) насчет двух таймеров в упор невижу удобство/быстродействие. хотя не, удобство мб и есть... вот только на гуи подменюшки выбирать наверное еще удобней))) шучу. в любом случае на каждый таймер нужно аттачить значение.

4) и 5) зри вверху поста.

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

кста остальные работы зрил?)
Старый 05.12.2007, 20:47
Markiz

offline
Опыт: 11,432
Активность:
ADOLF
2. Запускал. Проверял мультинстансовость в первую очередь + баги с клиффами.
Я не отмазываюсь -- сам виноват. Посыпаю голову пеплом.

3. Еще раз. У второго таймера период в 3-4 раза больше, чем у первого, это означает в 3-4 раза меньше обращений к кэшу = меньше тормозов.
4. Ладно, бог с ним. Никогда ничего не смыслил в эффектах.
5. Не согласен.
Цитата:
почитал я... наверно у нас просто разные взгляды на код: мой критерий качество и скорость выполнения. у тебя же как написать проще неудосуживая себя лишними задачами. попроавь меня если я неправ)

Эм. Как раз нет.
С этими конфигсистемами и вынесением в отдельную часть создания/движения прожектила я решал лишние задачи.
Но фокус в том, чтобы соблюсти принцип модульности и разделения задачи на более мелкие, тем самым обезопасивая себя от написания одного и того же кода сто раз.
Остальные работы пока не смотрел. Позже.
Старый 05.12.2007, 20:55
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
У второго таймера период в 3-4 раза больше

делать один таймер и вешать коунтер, что бы скажем сработка была каждые 3-4 периода. это же елементарно)

Цитата:
С этими конфигсистемами и вынесением в отдельную часть создания/движения прожектила я решал лишние задачи
наконецто ты со мной согласился) именно что эти задачи лишнии.

Цитата:
Но фокус в том, чтобы соблюсти принцип модульности и разделения задачи на более мелкие, тем самым обезопасивая себя от написания одного и того же кода сто раз


хм... скажу немного грубо, но думаю ты поймешь о чем я: для таких целей лучше использовать моск а не всякие системы, тем более такие (ну непонравилась она мне ^^) т.е. если все норамально продумать изначально то таких проблем не дб. имхо.
Старый 05.12.2007, 21:04
Markiz

offline
Опыт: 11,432
Активность:
ADOLF
По первому пункту это изврат и только портит впечатление.
А если я хочу чтобы проверялось раз в секунду, а период 0.014 (тоже, кстати, руководствовался заветами векса :))
---
по последнему -- и все-таки налицо разница в подходах. Не решая одну задачу по 1123345346457 раз, ты тупо больше времени потратишь на решение важной задачи, чем на написание рутинного кода.
Не говорю, что мой подход идеален, но он позволяет уменьшить время на разработку без заметной потери качества (ну забудем про тот баг с англом, ну пожалуйста ))

Markiz добавил:
ADOLF
Эти задачи, кстати, лишние только с точки зрения кодирования волны.
Если мне надо накодить волну, затем еще два десятка спеллов, эта задача ен только лишняя, но скорее обязательная и первостепенная.
Старый 05.12.2007, 21:27
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
По первому пункту это изврат и только портит впечатление

имхо изврат все, что делает в конечном итоге код менее работоспособным.
Цитата:
А если я хочу чтобы проверялось раз в секунду, а период 0.014

поставь счетчик до 71 и уменьшай его) будет правда не 1 а .994)))

Цитата:
Эти задачи, кстати, лишние только с точки зрения кодирования волны


я промолчу что задача в конкретном случае именно в этом и заключалась, и скажу, что на написание волны ушло минимум полчаса, в то время как занесение такого же колва значений в массивы у тебя заняло скажет 30 сек, а так оно бы заняло 2 минуты. к примеру. не играет это значения.

Цитата:
Если мне надо накодить волну, затем еще два десятка спеллов


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

я говорю только что все по возможности надо делать оптимально.
Старый 05.12.2007, 21:40
Markiz

offline
Опыт: 11,432
Активность:
ADOLF
Баланс между временем разработки и оптимальностью работы -- наше все :)
p.s. а срачей, кстати, бояться не надо. в одном сраче можно почерпнуть больше мыслей, чем в десяти дискуссиях.
Старый 05.12.2007, 21:48
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
дефолт период 0.025 )
Старый 06.12.2007, 00:51
Toadcop

offline
Опыт: 54,313
Активность:
ADOLF +1 =)
Markiz ты некогда не решал...
Цитата:
дефолт период 0.025 )
угу типо под 40 фпс =) теория если сделать период 0.015625
то объект будет "двигатьса с фреймами" хотя это тож очень относительно =) (т.е. с фреймами в идеальном случаи т.е. 64 фпса)
но имхо на практике это не нужно.

а тру аццы вообще делают 1 таймер и нахрен нечего аттачить не надо :Р

Цитата:
function Sockwave_Runtime
Утечка. при групировке юнитов conditionfunc создается и не удаляется.
бред =) булекспр кешируютьса =) (ну или кондишенфунк это одно и тоже)
Старый 06.12.2007, 02:19
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
бред =) булекспр кешируютьса =) (ну или кондишенфунк это одно и тоже)

проверил, действительно. чиорт, пока в один день вникал во все коды моск впал в состояние, в котором был достоен быть выкинутым на мусорку=)

всеравно, если ли смысл создавать его постоянно или создать один раз глобалку?

зы давно тебя в асе нету, назрели вопросы, как нибудь надо с тобой поговорить...)

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


срач ставит своей самоцелью доказательства того, что низкий уровень креатива обусловлен умственными способностями, в то время как это и так всем понятно, с другой стороны дискуссия направлена имено на разьяснение констуктивно допущеных ошибок именно с целью повышения онных способностей - чем я и занимаюсь)

ADOLF добавил:
Цитата:
тру аццы вообще делают 1 таймер и нахрен нечего аттачить не надо :Р

впринципе да)

кста, почему все молчат? почему нет коментариев по спелам? их хоть кто то смотрел?)
Старый 06.12.2007, 12:59
Toadcop

offline
Опыт: 54,313
Активность:
Цитата:
всеравно, если ли смысл создавать его постоянно или создать один раз глобалку?
2 вариант конечно лутче но это если там аццки много и быстро вычислять надо а в простых случиях это не очень важно.


Цитата:
зы давно тебя в асе нету, назрели вопросы, как нибудь надо с тобой поговорить...)
я бываю ночью т.к. "Life:)" сцуги =/ (у меня через них нет =))


Цитата:
кста, почему все молчат? почему нет коментариев по спелам? их хоть кто то смотрел?)
блин -_- я вчера случайно запускал ваши спеллы на новой VM PipeDream'a
у меня глючи шли xD (VM = Virtual Machine грубо сказать интерпритатор Джасса угу Пайп сейчас имбу делает :Р и я буду в ТсХ юзать =) ну пока там еще трабблы есть но он тока чуть этим занималса.)
еще посмотрю... кстати =) если нету деформа террайна надо было добавить камера шейк что бы круче выгледило 8-)
Старый 07.12.2007, 02:27
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
Цитата:
чиорт, я таки забыл написать, что выдали только первое место, ибо уровень работ недотягивал=/

Обалденно... А насчёт того, чтобы держать свои слова:
Цитата:
Награда: 1ое место - 200 опыта, 2ое место - 100 опыта, 3ье место - 50 опыта.
Старый 07.12.2007, 13:32
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
основная проблема невыдавания экспа в количестве работ, а не в качестве, просто должно было быть 6 работ, а тут только 4 )
Старый 07.12.2007, 17:20
Лось

offline
Опыт: 7,223
Активность:
Ткните меня носом где утечки плз =)
Старый 07.12.2007, 17:40

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 00:58.