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 за оказанную помощь. Отредактировано JamesBlack, 31.07.2009 в 03:55. |
27.07.2009, 03:21 | #1
+2/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hellfim
Новичок
offline
Опыт:
79,880Активность: |
Собственно говоря, это в мягкой форме =) Советую тебе открыть JNGP, и использовать из него хотя бы
Т.к. приставка udg_ мозолит глаза =) |
27.07.2009, 03:34 | #2
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Saturas
Kicked by !
offline
Опыт:
568Активность: |
Класная нароботка.
Автор молодец. 8/10 из за лишнего кода |
27.07.2009, 03:45 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
xpadd91
offline
Опыт:
10,739Активность: |
JamesBlack, Сперва я взял семечки, положить болото, ну убить всех бочонок, не понял.
А понял, надо подожди вырастите 3 декорации. до убить баррикад, получает предмет ПЛОД. JamesBlack, Ты надо сделай корень положи трава, вырастите дерево и все растёт? |
27.07.2009, 11:51 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JamesBlack
black mind
offline
Опыт:
6,595Активность: |
Цитата:
Это вполне можно исправить, хорошая идея, спс. Цитата:
Эм, ну я в JNGP работал, но видимо далеко не все в нем изучил =) В близжайшее время все почищу. xpadd91, эм, ты из какой страны Африки пишешь? Вобщем, сегодня-завтра сделаю версию с косметическим ремонтом, более существенное чуть позже. мне прост еще курсач по сишнику надо преподу сдать будет)))) JamesBlack добавил: Цитата:
Ты не представляешь какой мукой было искать ошибки в длиннющих названиях переменных XD |
|||
27.07.2009, 13:25 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hellfim
Новичок
offline
Опыт:
79,880Активность: |
Он глухой, заканчиваем на эту тему...
Ну вот, а так надо просто где угодно (вне функций) написать
И обращаться к ним просто, т.е.
|
27.07.2009, 17:31 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JamesBlack
black mind
offline
Опыт:
6,595Активность: |
ага, спс, все исправлю. Можещь еще в личку написать, что еще не рационально? ты же про глобалки написал "хотя бы"
|
27.07.2009, 20:58 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
bee
vjass.optimizer
offline
Опыт:
16,615Активность: |
По описанию система неплоха. с дачи вернусь - скачаю и заценю... |
27.07.2009, 21:29 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
CeraRalaz
...
offline
Опыт:
48,015Активность: |
А без JASS это не реализуемо?Как-то это всё слишком просто выглядит, или я каких-то нюансов не углядел? Ну несколько форм дерева, поочередно сменяются. Где подвох? |
27.07.2009, 21:57 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JamesBlack
black mind
offline
Опыт:
6,595Активность: |
Честно, не пробовал на ГУИ (ну, только давно и всякую фигню), так как задалбывает писать одни и те же триггеры, различающиеся скажем одним значением и т.п., что гораздо проще реализуется кодом. Поэтому я не совсем знаю, что можно реализовать на ГУИ, что нельзя.
Могу кратко описать проблемы, которые мне встретились: 1) отслеживание смерти дерева до того, как получится последняя стадия. Если на это не обратить внимание, то если даже разрушить дерево на одном из этапов, то когда прийдет время для перехода на следующую стадию, декорация следующего этапа появится на том месте. Так что пришлось вызывать триггер с ивентом смерти декора при каждом создании каждой декорации (при посадке деревьев и смене этапа). 2) в связи с реализацией первой проблемы, возникла вторая проблема. Ведь когда происходит смена этапа, я удаляю дерево из массивов растущих деревьев и переношу в массив выросших. Но на удаление срабатывает триггер смерти, и это дерево в массивах удаляется повторно (а ведь в ту ячейку уже сместилось другое, следующее растущее дерево). Так что приходилось еще устраивать доп. проверки... А, кстати, я вспомнил, что нельзя было б реализовать на ГУИ - там у меня цикл есть, в нем условие выхода - результат сравнения двух переменных. А насколько я помню, в ГУИ цикл имеет конечное число циклов и работает только как цикл-счетчик. Ну и вообще, даже обычный тригг для складывания зарядов на ГУИ, если перевести в джасс просто ужасен, в нем кажется даже утечка была, item или что-т типа того утекало. Я не говорю уже про невозможность использования локальных переменных, глупые BJ функции и проч. |
28.07.2009, 01:35 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Saturas
Kicked by !
offline
Опыт:
568Активность: |
Когда будет версия 0.9? |
28.07.2009, 01:41 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
CeraRalaz
...
offline
Опыт:
48,015Активность: |
Так можно же циклом "плюс один" сделать и ограничить количество повторов. Всю жизнь на одних глобалках сижу и ничего. |
28.07.2009, 09:20 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
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 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JamesBlack
black mind
offline
Опыт:
6,595Активность: |
А это разве действетильно будет рациональней???
Я всю проверку смерти свел на проверку булевской глоаблки "мертво ли дерево". Когда я удаляю дерево для смены стадии, я ставлю туда тру. ПОтом сразу запускается тригер с ивентом на смерть и меняет "мертво ли дерево" на противоположное значение. И при следующем проходе тригга роста, если он натыкается на тру в этой глобалке для данного дерева, то стирает данные из массивов по этому дереву. Так как ты предложил... Рационально ли это? А если у меня накопится уже по 20 деревьев каждой стадии в том кармашке? И кстати, для общего развития, а как предотвратить смерть после ивента смерти? |
28.07.2009, 13:46 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ranger21
I love beatiul days XD
offline
Опыт:
13,274Активность: |
Надо использовать EVENT_UNIT_DAMAGED
И отлавливать, если дамаг способен убить юнита, а именно сделать здоровье <=0.405, то поднять юниту здоровье, запаузить, переместить в рай. (тут через группы лучше всего). Но вообще у буржуев есть системка для юнитов такая, но GetWidgetLife может тоже работает
Лучше хранить 20 юнитов в "Раю", чем допускать Leak эвентов |
28.07.2009, 14:54 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JamesBlack
black mind
offline
Опыт:
6,595Активность: |
А как там может произойти утечка ивента? Не понимаю...
|
28.07.2009, 15:43 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ranger21
I love beatiul days XD
offline
Опыт:
13,274Активность: |
Ты регистрируешь эвент на одного ЮНИТА ( Не на переменную), юнит умирает.
И чтобы эвент сработал заново при записи на переменную, тебе надо заново создавать эвент.
Это создаёт большое количество эвентов при долгой игре. Варик начинает жрать больше памяти. |
28.07.2009, 15:46 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JamesBlack
black mind
offline
Опыт:
6,595Активность: |
А разве эти ивенты не удаляются после окончания тригга? *SCRATCH* Если нет, то как их можно почистить?
|
28.07.2009, 16:21 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ranger21
I love beatiul days XD
offline
Опыт:
13,274Активность: |
JamesBlack, никак они не удаляются, никак их не почистить, после удаления тригга эвенты не удаляются, но перестают работать. |
28.07.2009, 16:26 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JamesBlack
black mind
offline
Опыт:
6,595Активность: |
А как же тогда твой ивент на получение damage? Он ведь также будет накапливаться?
|
28.07.2009, 16:40 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|