|
|
|
|
[Урок] unitpool и itempool
|
|
[DUОS] | Дата: Суббота, 04 Февраля 2012, 15:36:40 | Сообщение # 1 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| На сей раз я решился написать о unitpool и itempool.
unitpool - Это группа типов боевых единиц. Фактически, это массив целочисленных с куда более широкими возможностями. Существует несколько функций, связанных с этим недоработанным, но полезным, типом. Code native CreateUnitPool takes nothing returns unitpool native DestroyUnitPool takes unitpool whichPool returns nothing native UnitPoolAddUnitType takes unitpool whichPool, integer unitId, real weight returns nothing native UnitPoolRemoveUnitType takes unitpool whichPool, integer unitId returns nothing native PlaceRandomUnit takes unitpool whichPool, player forWhichPlayer, real x, real y, real facing returns unit native SaveUnitPoolHandle takes hashtable table, integer parentKey, integer childKey, unitpool whichUnitpool returns boolean native LoadUnitPoolHandle takes hashtable table, integer parentKey, integer childKey returns unitpool В функции UnitPoolAddUnitType появляется огромный вопрос - что такое weight? Всё дело в том, что пулы дают нам также возможность гибкой приоритетной рандомизации типов. Такие вещи очень и очень полезны для ORPG и RPG карт, где существуют сотни разных крипов - какие-то встречаются реже, какие-то - чаще. К слову, этот тип может использоваться для создания команд -random и -ar без ряда математических извращений, которые, несомненно, грузят карту. Чем меньше weight по сравнению с другими weight - тем реже будет генерироваться этот юнит в PlaceRandomUnit.
История с itempool буквально такая же, но содержит типы предметов. Функции буквально идентичны типу unitpool. Code native CreateItemPool takes nothing returns itempool native DestroyItemPool takes itempool whichItemPool returns nothing native ItemPoolAddItemType takes itempool whichItemPool, integer itemId, real weight returns nothing native ItemPoolRemoveItemType takes itempool whichItemPool, integer itemId returns nothing native PlaceRandomItem takes itempool whichItemPool, real x, real y returns item native LoadItemPoolHandle takes hashtable table, integer parentKey, integer childKey returns itempool native SaveItemPoolHandle takes hashtable table, integer parentKey, integer childKey, itempool whichItempool returns boolean
Подумайте на досуге, как можно расширить функционал этих типов. И задавайте любые вопросы по теме.
|
|
|
|
Diabfall | Дата: Суббота, 04 Февраля 2012, 16:27:45 | Сообщение # 2 |
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
| Гуд инфа. Как раз буду делать систему лута, возможно это пригодится.)
|
|
|
|
Ty3uK | Дата: Суббота, 04 Февраля 2012, 17:21:18 | Сообщение # 3 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Коротко и информативно. Большое спасибо, перепишу свой рандом
|
|
|
|
SirNikolas | Дата: Суббота, 04 Февраля 2012, 17:54:40 | Сообщение # 4 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (|DUОS|) Подумайте на досуге, как можно расширить функционал этих типов. Все, что приходит в голову:Code //! runtextmacro DeclareDictionary("integer","integer","IntegerComparison","8191")
library_once IntegerComparison { public boolean less (integer op1, integer op2) { return op1 < op2 } public boolean equal(integer op1, integer op2) { return op1 == op2 } }
struct Randomizer { define private MAX = $1f private static integer array Types private static constant thistype create() { return 0 } private nothing destroy() { }
private Dictionary_integer_integer d private itempool p = CreateItemPool() private integer count = 0
static thistype Create() { thistype this = allocate(); d = Dictionary_integer_integer.Create(); return this } nothing Destroy() { DestroyItemPool(p); d.Destroy(); deallocate() }
nothing Add(integer value, real chance) { if value != 0 && count <= MAX { ItemPoolAddItemType(p, Types[count], chance) d[Types[count]] = value count++ } }
nothing Remove(integer value) { if value != 0 { ItemPoolRemoveItemType(p, Types[count]) d[Types[count]] = 0 count-- } }
nothing Rebuild() { d.Rebuild() }
integer Next() { item i = PlaceRandomItem(p, .0, .0) integer result = d[GetItemTypeId(i)] RemoveItem(i) i = null return result }
private static nothing onInit() { Types[0] = 'spsh' Types[1] = 'pmna' Types[2] = 'penr' Types[3] = 'ward' Types[4] = 'ratc' Types[5] = 'spsh' Types[6] = 'rat6' Types[7] = 'rat9' Types[8] = 'cnob' Types[9] = 'rhth' Types[$a] = 'dsum' Types[$b] = 'hcun' Types[$c] = 'belv' Types[$d] = 'rde1' Types[$e] = 'rde2' Types[$f] = 'rde3' Types[$10] = 'rlif' Types[$11] = 'sbch' Types[$12] = 'rin1' Types[$13] = 'rwiz' Types[$14] = 'mcou' Types[$15] = 'clfm' Types[$1a] = 'ciri' Types[$1b] = 'gcel' Types[$1c] = 'clsd' Types[$1d] = 'ssil' Types[$1e] = 'stel' Types[$1f] = 'bgst' } }
|
|
|
|
[DUОS] | Дата: Суббота, 04 Февраля 2012, 18:39:56 | Сообщение # 5 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| SirNikolas, IsUnitTypeInUnitPool функция например)
|
|
|
|
SirNikolas | Дата: Суббота, 04 Февраля 2012, 19:31:44 | Сообщение # 6 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Ставить юнита из пула, пока он не поставится или до 100 попыток?
|
|
|
|
wetalq | Дата: Воскресенье, 05 Февраля 2012, 11:12:07 | Сообщение # 7 |
8 уровень
Группа: Проверенные
Сообщений: 550
Награды: 0
Репутация: 117
Блокировки:
| Классная штука этот unitpool, надо бы попробовать сделать на нем -ar
|
|
|
|
lawson | Дата: Воскресенье, 05 Февраля 2012, 14:12:39 | Сообщение # 8 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Я понимаю что юнитПул это что-то типа динамического массива + некоторый набор функций для управления им. Прикольно, можно действително сделать рандом, но как очищать тип уже выбранного юнита из пула? Всеравно придется проверять тип выбранного юнита и только тогда очищать из пула.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Воскресенье, 05 Февраля 2012, 17:18:07 |
|
|
|
SirNikolas | Дата: Воскресенье, 05 Февраля 2012, 17:43:43 | Сообщение # 9 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Code call UnitPoolRemoveUnitType(p, GetUnitTypeId(PlaceRandomUnit(p, Player(0), .0, .0, .0)))
Сообщение отредактировал SirNikolas - Понедельник, 06 Февраля 2012, 09:43:53 |
|
|
|
lawson | Дата: Воскресенье, 05 Февраля 2012, 18:39:26 | Сообщение # 10 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| SirNikolas, МОЗГ!!! Пасиб.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
PUVer | Дата: Понедельник, 06 Февраля 2012, 03:23:39 | Сообщение # 11 |
Сухопутные крысы!
Группа: Модераторы
Сообщений: 4462
Награды: 8
Репутация: 1845
Блокировки:
| C таким же успехом эти все темки могли бы и существовать в разделе картостроителя. Не вижу реальной работы этого класса. Класс А работает. А этот нет. Учителя нифига не делают с учениками. Ну написал статейки. И что? А заданий то нет.
|
|
|
|
Ty3uK | Дата: Понедельник, 06 Февраля 2012, 09:48:52 | Сообщение # 12 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Могу предложить- каждый напишет рандом на юнитпуле. Чем не домашнее задание
|
|
|
|
lawson | Дата: Понедельник, 06 Февраля 2012, 19:31:49 | Сообщение # 13 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Ty3uK) Могу предложить- каждый напишет рандом на юнитпуле ЧТоб когото научить, нужно требовать, а ты видишь как здесь относятся к урокам да и учителям вместе взятыми.
Добавлено (06 Февраль 2012, 19:31:49) --------------------------------------------- Теперь я реально согласен с Дрюшей, создать класс для прошаренных типа "мастер-класс по вЖассу и сЖассу" чтобы хоть ктото мог действительно чему-то научиться, например я и Дрюша одни из этих.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Понедельник, 06 Февраля 2012, 19:32:01 |
|
|
|
Ty3uK | Дата: Понедельник, 06 Февраля 2012, 21:59:14 | Сообщение # 14 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Ахахаха. Да ты за словом в карман не полезешь
|
|
|
|
IIAXAH | Дата: Понедельник, 06 Февраля 2012, 23:18:05 | Сообщение # 15 |
3 уровень
Группа: Проверенные
Сообщений: 72
Награды: 0
Репутация: 26
Блокировки:
| Quote (PUVer) Ну написал статейки. И что? Значит необходимо составить учебный план. Code [1] Мрак Как икать термины, язык программирования,языковая конструкция,скриптовой язык,проблемно-ориентированный язык,событийно-ориентированный язык,лексема(token) ,выражение,тип данных,литерал,оператор, поток выполнения,управляющая конструкция,значение,переменная,встроенный,нативный,JASS2|JASS|Jass|jass. [2] Джентельментский набор кодировка,литерал, выражение, оператор, ветвление, цикл, функция, объявление, операторная скобка, арифметика, операторы сравнения, массивы, типы данных,комментарий, set, call,триггер ,некоторые события, вывод текста ,Предопределенные значения,создание удаление движение юнита. [3] Реализация джасс в варкрафт место кода в карте тип языка нативки встроенные ошибки потоки порядок выполнения ограничения структура коммон и коммон аи ии близзард вар3мап поведение при ошибках [4] Основные объекты координаты локи регионы области игроки группы юниты предметы десруктебли [5]утечки удаление обнуление суперпозиция быстровызов встроенная утечка [6]правила хорошего кода концепции программирования-обзор именование документирование комментирование удобочитаемость стадии разработки(не ГОСТ 19.102) [7]штампы программирования флажок семафор сортировки стек система весов параллельные массивы полярные координаты [8] Файлы карты [100500]рефераты учащихся на свободную тему. Quote (PUVer,Ty3uK) Учителя нифига не делают с учениками. Чем не домашнее задание Выдача домашних заданий - это способ ничего не делания для учителей. Учебный процесс идет при индивидуальной защите практических заданий. Даже те, кто успешно учится самостоятельно защищают свою практику самим себе. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Или еще можно признать факт, что учить не кому. Тогда можно поставить этот класс иначе: учителей нет, ученики сами ищут знания по интернету и обмениваются ими, также обмениваются приватными наработками, благодаря секретному паролю на класс.
|
|
|
|
lawson | Дата: Вторник, 07 Февраля 2012, 10:30:14 | Сообщение # 16 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (IIAXAH) Или еще можно признать факт, что учить не кому. Тогда можно поставить этот класс иначе: учителей нет, ученики сами ищут знания по интернету и обмениваются ими, также обмениваются приватными наработками, благодаря секретному паролю на класс. И смешно и грустно.Добавлено (07 Февраль 2012, 10:30:14) ---------------------------------------------
Quote (Ty3uK) Да ты за словом в карман не полезешь Мне вот хотелось бы урок на тему статические функции и переменные, урок про интерфейсы, а не эту дребедень которую ни кто не читает.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Ty3uK | Дата: Вторник, 07 Февраля 2012, 15:41:59 | Сообщение # 17 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Почему бы не прокурить мануал vjass и не дать урок самому? Векс все доступно излагает, я уже в этом убедился
|
|
|
|
SirNikolas | Дата: Вторник, 07 Февраля 2012, 17:00:55 | Сообщение # 18 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Можно подробнее?
Ty3uK, это ты lawson'у?
|
|
|
|
Ty3uK | Дата: Вторник, 07 Февраля 2012, 17:05:08 | Сообщение # 19 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Да
|
|
|
|
IIAXAH | Дата: Воскресенье, 18 Марта 2012, 22:01:03 | Сообщение # 20 |
3 уровень
Группа: Проверенные
Сообщений: 72
Награды: 0
Репутация: 26
Блокировки:
| Можно. Порядок поиска такой: 1. Значения понятий записаны в русских и международных стандартах. (ГОСТ 19781-90; ГОСТ 28397-89; ГОСТ 15971-90). Это истина первой инстанции. 2. Значение некоторых (обычно экономических) терминов записано в федеральных законах РФ. 3. Значения слов не прописанных в стандартах и законах берется из толковых словарей. 4. Многие даже привычные термины отсутствуют в стандартах, законах и словарях. Этим терминам как переменным можно назначать значения. Математики, к слову, очень любят этим побаловаться. Хотя у слов есть еще традиционное значение, но известно оно только тем, кто принадлежит этой традиции, а для прочих буде от лукавого. 0. В русских стандартах по информатике все расплывчато и старо. В международных стандартах - не по русски. Законы пишутся не для программистов. Поэтому все нормальные люди ограничиваются википедией, до первого тролля блин. Язык программирования - множество символов и набор правил, определяющих способы представления программ в рамках определенных систем программирования. Языковая конструкция - допускаемая соглашениями ЯП последовательность лексем. Скриптовой язык - ЯП, используемый для управления и автоматизации существующей системы. Проблемно-ориентированный язык - ЯП, соответствующий понятиям рассматриваемой прикладной задачи. То есть элементы задачи практически все можно описать нативными элементами ЯП. Событийно-ориентированный язык - ЯП, в котором алгоритм обработки данных описывается в виде реакций на события. Лексема(token) - элементарная (неделимая) синтаксическая единица ЯП. Т е это ключевое слово литерал или знак препинания. ...
|
|
|
|
[DUОS] | Дата: Понедельник, 19 Марта 2012, 23:33:33 | Сообщение # 21 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Quote (IIAXAH) благодаря секретному паролю на класс. Ох правда? Ты же их выдаёшь.
|
|
|
|
ggSpaM | Дата: Понедельник, 19 Марта 2012, 23:53:37 | Сообщение # 22 |
3 уровень
Группа: Проверенные
Сообщений: 66
Награды: 0
Репутация: 27
Блокировки:
| А буду ли я мешаться, если в запароленном разделе заведутся серьезные делишки? При таком раскладе посторонним лицом станет только текущий СМ. Если гипотетический админ не проставит нужные галочки.
|
|
|
|
wetalq | Дата: Пятница, 23 Марта 2012, 14:19:50 | Сообщение # 23 |
8 уровень
Группа: Проверенные
Сообщений: 550
Награды: 0
Репутация: 117
Блокировки:
|
это шанс выпадания героя ? как его правильно настроить ? делать weight = 100 \ количество героев ?
|
|
|
|
[DUОS] | Дата: Пятница, 23 Марта 2012, 17:40:46 | Сообщение # 24 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Если ты поставишь всем weight = 0.5, тогда шансы выпадания того или иного героя будут равны. Можно и другие значения одинаковые ставить. Если поставишь кому-то больше, он будет выпадать чаще.
|
|
|
|
wetalq | Дата: Пятница, 23 Марта 2012, 17:48:07 | Сообщение # 25 |
8 уровень
Группа: Проверенные
Сообщений: 550
Награды: 0
Репутация: 117
Блокировки:
| [DUОS], окей, понял
|
|
|
|
|
|
|
|
|
|
|