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

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

Ответ
 
JamesBlack
black mind
offline
Опыт: 6,595
Активность:
JB's Planting System

Система роста растений


Описание


Система писалась по просьбе для nikikin'а как система роста растений. Немного модифицировав ее, я получил некую универсальную систему развития декораций.

Смысл легче всего объяснять на примере растений: существуют 2 типа предметов - семя и плод, оба имеют заряды, семя обязательно имеет активную способность.
Когда какой-либо юнит использует семя, он теряет предмет, а впереди юнита появляется декорация-растение. Через определенное время она "вырастет", т.е. сменится другой декорацией. Потом снова. И так, пока не дойдет до последнего этапа роста.
Если на этом этапе разрушить декорацию, из нее выпадет предмет плод. Кол-во плодов зависит от кол-ва семян, вложенных в это растение +-3, при чем значения этого произвольного числа не равновероятны: значения, близкие к 0 будут более вероятны, чем значения -3 и +3.
Если же разрушить декорацию на предыдущих этапах, то никаких плодов вы не получите.
Также в системе присутствует триггер складывания зарядов предметов семян и плодов.

Чтобы не создавать свои декорации у меня в примере "растение" имеет следующие этапы: бочка->ящики->кокон->баррикада.

Плюсы


Систему легко импортировать в другие карты и изменять по своему: в "нестандартном коде" в описании сделал комменты и ссылки на сам "нестандартный код", там указано что и где нужно поменять.

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

Минусы


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

Других минусов пока не нашел.

Планируемые изменения


Исправить ошибки, если такие найдутся и добавить ограничение на территорию, куда устанавливается растение. Ограничение, естественно, будет задавать пользователь.

Версии


Версия 1.0 отличается от 0.8 лишь косметическим ремонтом. С версии 1.1 и вплоть до 2.0 ридми по импорту не будет - нету смысла, пока не реализую до конца все идеи.
v0.8
v1.0
v1.1

Благодарности


Ranger21 и Hellfim за оказанную помощь.
Прикрепленные файлы
Тип файла: w3x JB'sPlantingSystem0.8.w3x (13.4 Кбайт, 22 просмотров )
Тип файла: w3x JB'sPlantingSystem1.0.w3x (14.4 Кбайт, 22 просмотров )
Тип файла: w3x JB'sPlantingSystem1.1.w3x (13.9 Кбайт, 90 просмотров )

Отредактировано JamesBlack, 31.07.2009 в 03:55.
Старый 27.07.2009, 03:21
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
  1. Система расчитана только на 1 тип растений.
  2. Есть лишний код =).
Собственно говоря, это в мягкой форме =) Советую тебе открыть JNGP, и использовать из него хотя бы
globals
    <variable type> <variable name>
endglobals
Т.к. приставка udg_ мозолит глаза =)
Старый 27.07.2009, 03:34
Saturas
Kicked by !
offline
Опыт: 568
Активность:
Класная нароботка.
Автор молодец.
8/10 из за лишнего кода
Старый 27.07.2009, 03:45
xpadd91

offline
Опыт: 10,739
Активность:
JamesBlack, Сперва я взял семечки, положить болото, ну убить всех бочонок, не понял.
А понял, надо подожди вырастите 3 декорации. до убить баррикад, получает предмет ПЛОД.
JamesBlack, Ты надо сделай корень положи трава, вырастите дерево и все растёт?
Старый 27.07.2009, 11:51
JamesBlack
black mind
offline
Опыт: 6,595
Активность:
Цитата:
Система расчитана только на 1 тип растений.

Это вполне можно исправить, хорошая идея, спс.

Цитата:
Есть лишний код =).

Эм, ну я в JNGP работал, но видимо далеко не все в нем изучил =) В близжайшее время все почищу.

xpadd91, эм, ты из какой страны Африки пишешь?

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

JamesBlack добавил:
Цитата:
приставка udg_ мозолит глаза =)

Ты не представляешь какой мукой было искать ошибки в длиннющих названиях переменных XD
Старый 27.07.2009, 13:25
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Он глухой, заканчиваем на эту тему...
Ну вот, а так надо просто где угодно (вне функций) написать
globals
    integer lalala=9
    real nanana=4.0
endglobals
И обращаться к ним просто, т.е.
set lalala=lalala-18
set nanana=8.9
Старый 27.07.2009, 17:31
JamesBlack
black mind
offline
Опыт: 6,595
Активность:
ага, спс, все исправлю. Можещь еще в личку написать, что еще не рационально? ты же про глобалки написал "хотя бы"
Старый 27.07.2009, 20:58
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
По описанию система неплоха. с дачи вернусь - скачаю и заценю...
Старый 27.07.2009, 21:29
CeraRalaz
...
offline
Опыт: 48,115
Активность:
А без JASS это не реализуемо?Как-то это всё слишком просто выглядит, или я каких-то нюансов не углядел?
Ну несколько форм дерева, поочередно сменяются. Где подвох?
Старый 27.07.2009, 21:57
JamesBlack
black mind
offline
Опыт: 6,595
Активность:
Честно, не пробовал на ГУИ (ну, только давно и всякую фигню), так как задалбывает писать одни и те же триггеры, различающиеся скажем одним значением и т.п., что гораздо проще реализуется кодом. Поэтому я не совсем знаю, что можно реализовать на ГУИ, что нельзя.

Могу кратко описать проблемы, которые мне встретились:

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

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

А, кстати, я вспомнил, что нельзя было б реализовать на ГУИ - там у меня цикл есть, в нем условие выхода - результат сравнения двух переменных. А насколько я помню, в ГУИ цикл имеет конечное число циклов и работает только как цикл-счетчик.

Ну и вообще, даже обычный тригг для складывания зарядов на ГУИ, если перевести в джасс просто ужасен, в нем кажется даже утечка была, item или что-т типа того утекало. Я не говорю уже про невозможность использования локальных переменных, глупые BJ функции и проч.
Старый 28.07.2009, 01:35
Saturas
Kicked by !
offline
Опыт: 568
Активность:
Когда будет версия 0.9?
Старый 28.07.2009, 01:41
CeraRalaz
...
offline
Опыт: 48,115
Активность:
А, кстати, я вспомнил, что нельзя было б реализовать на ГУИ - там у меня цикл есть, в нем условие выхода - результат сравнения двух переменных. А насколько я помню, в ГУИ цикл имеет конечное число циклов и работает только как цикл-счетчик.
Так можно же циклом "плюс один" сделать и ограничить количество повторов.
Всю жизнь на одних глобалках сижу и ничего.
Старый 28.07.2009, 09:20
Ranger21
I love beatiul days XD
offline
Опыт: 13,274
Активность:
call TriggerRegisterDeathEvent(gg_trg_DestroyPlant, udg_plants[udg_num_of_plants])
Лучше наверно отслеживать дамаг и предотвращать смерть "Растений", переносить их куда-нибудь в скрытое место на карте. А при создании нового растения проверять, есть ли тип такого растения в нашем "Раю", то переместить, а если нету - создать новое.
Но это опять же мои замуты, просто я познал силу переиспользования юнитов при использовании регистра эвентов на юнита. :)
Старый 28.07.2009, 09:55
JamesBlack
black mind
offline
Опыт: 6,595
Активность:
А это разве действетильно будет рациональней???

Я всю проверку смерти свел на проверку булевской глоаблки "мертво ли дерево". Когда я удаляю дерево для смены стадии, я ставлю туда тру. ПОтом сразу запускается тригер с ивентом на смерть и меняет "мертво ли дерево" на противоположное значение. И при следующем проходе тригга роста, если он натыкается на тру в этой глобалке для данного дерева, то стирает данные из массивов по этому дереву.

Так как ты предложил... Рационально ли это? А если у меня накопится уже по 20 деревьев каждой стадии в том кармашке?

И кстати, для общего развития, а как предотвратить смерть после ивента смерти?
Старый 28.07.2009, 13:46
Ranger21
I love beatiul days XD
offline
Опыт: 13,274
Активность:
Надо использовать EVENT_UNIT_DAMAGED
И отлавливать, если дамаг способен убить юнита, а именно сделать здоровье <=0.405, то поднять юниту здоровье, запаузить, переместить в рай. (тут через группы лучше всего). Но вообще у буржуев есть системка для юнитов такая, но GetWidgetLife может тоже работает
Лучше хранить 20 юнитов в "Раю", чем допускать Leak эвентов
Старый 28.07.2009, 14:54
JamesBlack
black mind
offline
Опыт: 6,595
Активность:
А как там может произойти утечка ивента? Не понимаю...
Старый 28.07.2009, 15:43
Ranger21
I love beatiul days XD
offline
Опыт: 13,274
Активность:
Ты регистрируешь эвент на одного ЮНИТА ( Не на переменную), юнит умирает.
И чтобы эвент сработал заново при записи на переменную, тебе надо заново создавать эвент.
Это создаёт большое количество эвентов при долгой игре. Варик начинает жрать больше памяти.
Старый 28.07.2009, 15:46
JamesBlack
black mind
offline
Опыт: 6,595
Активность:
А разве эти ивенты не удаляются после окончания тригга? *SCRATCH* Если нет, то как их можно почистить?
Старый 28.07.2009, 16:21
Ranger21
I love beatiul days XD
offline
Опыт: 13,274
Активность:
JamesBlack, никак они не удаляются, никак их не почистить, после удаления тригга эвенты не удаляются, но перестают работать.
Старый 28.07.2009, 16:26
JamesBlack
black mind
offline
Опыт: 6,595
Активность:
А как же тогда твой ивент на получение damage? Он ведь также будет накапливаться?
Старый 28.07.2009, 16:40
Ответ

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

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

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

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



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