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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Раздел картостроителя » [Статья] Неограниченный инвентарь (Как сделать это без помощи триггеров)
[Статья] Неограниченный инвентарь
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)
пишем вот такой триггер

hmm


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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 trollface

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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)
---------------------------------------------
Ещё можно триггерно дропнуть все предметы с героя, если не ощибаюсь это вывалит все предметы со всеми рюкзаками, но герой может потерять способность "предметы герой", триггерно добавить её следует.


 

Форум о Warcraft 3 » Раздел для картостроителей » Раздел картостроителя » [Статья] Неограниченный инвентарь (Как сделать это без помощи триггеров)
  • Страница 1 из 1
  • 1
Поиск:

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