|
|
|
|
[Статья] Неограниченный инвентарь
|
|
Naturekid | Дата: Среда, 21 Ноября 2012, 15:54:25 | Сообщение # 1 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| Я думаю, что многих, если не всех, не устраивает ограничение варика в 6 предметов. Ну и каждый хотя бы раз хотел увеличить ёмкость инвентаря героя и конечно же не мучаясь при этом над грандиозным количеством кода. Собственно для вас такая статья. Сделать это можно не прибегая к помощи триггеров вовсе. Нам понадобится триггер фактически, если мы хотим исключить использование багов в свою пользу, но чтобы этот инвентарь просто РАБОТАЛ - триггеры не нужны. Итак, что мы делаем: Создаём новый предмет, в принципе не суть важна на основе чего, лишь бы он не использовался при получении как руна или книга :). Например на основе когтей атаки(+15). Убираем у них родную способность повышения атаки. Создаём новую способность на основе "Предметы (герой)", обязательно в ней ставим галочку "относится к предмету". Даём новую способность нашему новому предмету. Наш "Рюкзак" готов к употреблению. При его получении все имеющиеся предметы в инвентаре у героя переходят так сказать в скрытый режим. Они продолжают действовать, но мы их не видим. Требование: Очень желательно, чтобы с 1 по 5 слоты героя были заняты предметами перед получением рюкзака. Иначе в скрытый режим обязательно попадут случайные предметы из тех, которые герой получит после приобретения рюкзака. Рекомендуется продавать предметы-пустышки на карте для занятия места. =) Примечания по использованию рюкзака: Желательно не хранить в скрытом режиме активирующиеся(щёлкающиеся) арты. Если у вас в скрытом режиме например лежит шлем безумия во 2 слоте, то если вы положите активирующийся предмет в открытом режиме во 2 слот и щёлкнете по нему - герой применит берсерк, так как кликается и предмет в скрытом режиме. Выпадающие предметы продолжают выпадать даже из скрытого режима. И что? А то, что случайный предмет из подобранных позже отправится в скрытый режим. Имеем это в виду и стараемся избегать попадания падающих предметов в рюкзак. Предмет в скрытом режиме не отлавливается триггерно. То есть если мы хотим иметь в виду, есть ли у героя королевская корона(которая в скрытом режиме будет находиться) - заводим соответствующую переменную, которую ставим в положение "да" при получении короны и в "нет" при потере короны с условием, что корон на герое нету больше. Предметы, имеющие способность "Защита от магии(амулет)" - теряют свой кд в рюкзаке и становятся читерскими. То есть Амулет защиты от магии, помещённый в рюкзак будет блокировать все-все негативные заклинания, направленные на носителя. Чтобы устранить абузу пишем вот такой триггер, заменяющий амулет на пустышку. Амулет вернётся к герою в открытом режиме, пространство в рюкзаке занято предметом-пустышкой. Общие рекомендации по типам предметов, которые можно отправить в скрытый режим: На количество ХП-МП, регенерацию ХП-МП, криты-баши-АОЕ атака, Броня, уклонение, блок урона. Одним словом все, неактивирующиеся, невыпадающие, желательно без триггерных свойств и без способности "Защита от магии(Амулет)". При загрузке сохранённой игры содержимое последнего рюкзака будет "вывернуто" наружу, если бросить "рюкзак" - ваш герой лишится возможности подбирать предметы! Чтобы такого не произошло - делаем рюкзак небросаемым в РО, выкидываем любой другой нерюкзак при загрузке сохранки и покупаем рюкзак(или выдаём его триггерно бесплатно - по вашему усмотрению), смотрим триггерно имел ли юнит рюкзак на момент покупки - и если да - даём юниту 6 предметов пустышек. Это важно для РПГ... Скачать наработку "Неограниченный инвентарь"
Сообщение отредактировал Naturekid - Среда, 21 Ноября 2012, 16:29:53 |
|
|
|
Ty3uK | Дата: Среда, 21 Ноября 2012, 16:50:45 | Сообщение # 2 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Quote (Naturekid) (Как сделать это без помощи триггеров) Quote (Naturekid) пишем вот такой триггер
|
|
|
|
Naturekid | Дата: Среда, 21 Ноября 2012, 17:27:35 | Сообщение # 3 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| Ty3uK, так и знал, что кто-то так напишет. Но к счастью там есть такое: Quote (Naturekid) но чтобы этот инвентарь просто РАБОТАЛ - триггеры не нужны. =)Добавлено (21 Ноября 2012, 17:27:35) --------------------------------------------- Я осветил сразу все неудобства которые КОГДА-ЛИБО могут выявиться при использовании этого. Собственно с большинством освещённых неудобств картостроитель может и не столкнуться.
|
|
|
|
sumert | Дата: Среда, 21 Ноября 2012, 17:39:22 | Сообщение # 4 |
10 уровень
Группа: Проверенные
Сообщений: 2330
Награды: 2
Репутация: 1094
Блокировки:
| На трехбуквенном сайте давно уже всплывала тема бага со способностью "Предметы". Я тогда пытался сделать переключение между этими сумками. Их было 3, а переключение задавлось активацией предмета. Три сумки и предметов в сумке 6/5/4 в каждой. И по одному слоту в каждой сумке(6/5/4 соответственно) помещался предмет, активация которого позволяла игроку видеть разные сумки (правда, в последовательном порядке, а не как видит пользователь). Идея идееё, но у меня ничего не получилось, кучу багов и я это дело бросил. конечно, мне это теперь не нужно, но может ты попробуешь сделать такое? С двумя инвенторями поблем не возникло, но с тремя...
|
|
|
|
Naturekid | Дата: Среда, 21 Ноября 2012, 17:42:37 | Сообщение # 5 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| sumert, едва ли, я например юзаю это для Hero Defence, там нафиг не надо лишний раз щёлкать куда-то, сам понимаешь. Досыта хватает 6 кликабельных предметов, а в скрытый режим идут некликабельные - для атаки, брони и прочего первой необходимости. К тому же система сильно усложнится, а то, что представлено тут - даже нубу легко переварить будет. =)
Сообщение отредактировал Naturekid - Среда, 21 Ноября 2012, 17:42:47 |
|
|
|
Duosora | Дата: Четверг, 22 Ноября 2012, 10:37:50 | Сообщение # 6 |
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
| Wait 0.00 seconds всё равно прождёт 0.10, не заабузишь)
Не зли других и сам не злись. Мы - гости в этом мире. И если что не так - смирись, Будь поумнее - улыбнись, Ведь в мире всё закономерно. Зло, излучённое тобой, К тебе вернётся непременно.
|
|
|
|
Naturekid | Дата: Четверг, 22 Ноября 2012, 10:58:11 | Сообщение # 7 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| Duosora, мда? А я думал, что это как бы момент. Но в любом случае без вейта тут не обойтись. Хотя можно просто дропнуть амулет, а игрок пусть ручками подбирает его.
|
|
|
|
SirNikolas | Дата: Четверг, 22 Ноября 2012, 11:26:58 | Сообщение # 8 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Duosora) Wait 0.00 seconds всё равно прождёт 0.10, не заабузишь) Вполне себе заабузишь. Не путай с "wait (game-time)".
|
|
|
|
Extremator | Дата: Четверг, 22 Ноября 2012, 11:30:42 | Сообщение # 9 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| Quote (Duosora) Wait 0.00 seconds всё равно прождёт 0.10, не заабузишь)
ну вообще-то...вроде... минимум разницы это 0.1 0.00 / 0.10 / 0.20 / ... / 2.4 / 2.5 / 2.6 / ...
и то по внутреннему времени... вроде
0.00 прождать можно
как вариант для теста... > запустить многократный таймер на ((0.01 * 0.01) * 0.01 ) сек и при его срабатывании делать set I = I+1 > ждать 0.00 сек > запаузить таймер > показать значение I
интересно что выдаст хД проверять лениво
|
|
|
|
SirNikolas | Дата: Четверг, 22 Ноября 2012, 11:42:02 | Сообщение # 10 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Extremator) ((0.01 * 0.01) * 0.01 ) .01 * .01 * .01 = .0
|
|
|
|
Extremator | Дата: Четверг, 22 Ноября 2012, 11:43:21 | Сообщение # 11 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| Quote (SirNikolas) .01 * .01 * .01 = .0 вообще-то нет :С
|
|
|
|
SirNikolas | Дата: Четверг, 22 Ноября 2012, 11:46:46 | Сообщение # 12 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Code callback onInit() { printf("%r", .01 * .01 * .01); }
|
|
|
|
Extremator | Дата: Четверг, 22 Ноября 2012, 12:08:11 | Сообщение # 13 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| ок... сделай тригг с передическим событием каждые 0.01*0.01*0.01 сек и посмотри сам у меня вар зависает за 1-2 сек хД
я понимаю что там будет не 0.000001 но я точно знаю что там будет НЕ 0.000Добавлено (22 Ноября 2012, 12:08:11) --------------------------------------------- тригг с 0.01*0.01*0.01 срабатывает от 1200 до 2772 раз за 0.10 сек
тригг с 0.00 срабатывает так же...
следовательно... есть некий минимум чаще которого таймер не срабатывает... 0.10 / 2772 = 0.00004 примерно даже если брать 2000 раз за 0.1 сек, то будет 0,00005 и это больше чем 0.000
|
|
|
|
SirNikolas | Дата: Четверг, 22 Ноября 2012, 12:17:17 | Сообщение # 14 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Мне все-таки интересно, что курили Близзы, когда писали wait'ы:Code callback onInit() { trigger trig = CreateTrigger(); TriggerRegisterTimerEvent(trig, 1., false); TriggerAddAction(trig, \ lambda void() { timer t = CreateTimer(); TimerStart(t, .5, false, \ lambda void() { printf("timer expired"); } ); TriggerSleepAction(.0); printf("trigger woke up, elapsed = %r, remaining = %r", TimerGetElapsed(t), TimerGetRemaining(t)); TriggerSleepAction(1.); DestroyTimer(t); printf("timer destroyed"); flush locals; } ); flush locals; } TriggerSleepAction(.0) спит на каждом тесте разное время, от 0.075 до 0.150.Quote (Extremator) тригг с 0.01*0.01*0.01 срабатывает от 1200 до 2772 раз за 0.10 сек
тригг с 0.00 срабатывает так же... Ты проверял правильность времени по wait'у? Даже если так, ты сам говоришь, что между .01 * .01 * .01 и .0 разницы нет.Добавлено (22 Ноября 2012, 12:17:17) ---------------------------------------------
Quote (SirNikolas) TriggerRegisterTimerEvent(trig, 1., false); Если же запускать тесты в main-потоке, время ожидания составляет от 0.200 до 0.300.
|
|
|
|
Ty3uK | Дата: Четверг, 22 Ноября 2012, 13:06:16 | Сообщение # 15 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| можно ввести fixedDeltaTime
|
|
|
|
CCTCTCC | Дата: Пятница, 01 Марта 2013, 12:49:58 | Сообщение # 16 |
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 26
Блокировки:
| А как из этой сумки то достать предмет?
|
|
|
|
Naturekid | Дата: Пятница, 01 Марта 2013, 13:07:08 | Сообщение # 17 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| Никак. Только сохранить игру и загрузить. Читай внимательно весь текст, рекомендуется класть всякие предметы с пассивными свойствами, к которым нет нужды обращаться. Например если говорить о доте - батл фюри, буриза и т.п.
Добавлено (01 Марта 2013, 13:07:08) --------------------------------------------- Ещё можно триггерно дропнуть все предметы с героя, если не ощибаюсь это вывалит все предметы со всеми рюкзаками, но герой может потерять способность "предметы герой", триггерно добавить её следует.
|
|
|
|
|
|
|
|
|
|
|