Warden
:::...
offline
Опыт:
21,706Активность: |
Группы предметов или “Долой ItemPool!”
<Глава 1 : Близовский Item Pool>
Вы спросите - “Что такое Item Pool” - это скрытые близовская функции, позволяющие создавать нестандартные группы предметов. Функции ItemPool - немного недоделанные, но все же могут кому-нибудь пригодиться… Основная недоделка функций в том, что загрузить предмет из группы можно только случайный, хотя в функции сохранения предмета в ItemPool есть оператор номера объекта… В этой статье я подробно (на всякий случай) опишу все функции ItemPool и расскажу о правильном варианте их замены. (см. Вторую главу) Функции ItemPool
native CreateItemPool () returns itempool - оператор, для локальной переменной. Например : local itempool ip = CreateItemPool() native DestroyItemPool (itempool whichItemPool) returns nothing - функция для уничтожения переменной типа ItemPool Например call DestroyItemPool(ip) native ItemPoolAddItemType (itempool whichItemPool, integer itemId, real weight) returns nothing - Функция для добавления типа предмета в группу ItemPool. Например : call ItemPoolAddItemType (ip, ‘I000’, 1) - Регистрация предмета ‘I000’ в группу “ip”, под номером 1. native ItemPoolRemoveItemType (itempool whichItemPool, integer itemId) returns nothing - Удаления предмета из группы. Например : call ItemPoolRemoveItemType (ip, 1) - удаления типа предмета из группы “ip”, под номером 1. native PlaceRandomItem (itempool whichItemPool, real x, real y) returns item - А вот и функция, для загрузки случаного предмета из группы : Например : call PlaceRandomItem (ip, GetUnitX(u), GetUnitY(u)) - создать случайный предмет из группы “ip” на позиции юнита “u”. В WarCraft есть классификация предметов, но иногда не выгодно ее нарушать Найти достойное применение функциям я не смог, и понять, зачем они нужны, тоже. Их можно использовать только в одном триггере или в сочетании с кэшом, что делает их неудобными. Далее я расскажу, как их можно достойно заменить... <Глава 2 : Кэш группы для предметов>
Я знаю, что в первом разделе я заставил вас задуматься - “Зачем он написал эту статью” или “Что за бред он несет”. Моя цель написать необычную статью, с объективным содержанием, что может отразиться в этой главе. Все же иногда бывает нужно как-то классифицировать предметы по собственным группам и я хочу сначала рассказать, как это правильно сделать, а потом привести примеры, для чего это бывает нужно и доказать, что это удобно. Я написал несколько функций, которые отлично во всем заменят ItemPool, упростят ее и добавят новые возможности. Код:
Выше изложенная система, отлично заменит ItemPool и добавит много новых возможностей. Для не очень опытных картостроителей я распишу для чего нужна каждая функция : ig_cache - нужна для всех функций системы - хранит в себе данные о группах и предметах. save_group_item - первая основная функция системы - обеспечит удобную регистрацию предмета в группу. Например : call save_group_item (2, 1, 'ankh') - Зарегистрировать “Крест перерождения” в группу номер ‘2’, под номером ‘1’ load_group_item - вторая основная функция системы - обеспечит быстрое нахождение ячейки предмета в группе. Например : call CreateItem( load_group_item(1, GetRandomInt(1, 6)), GetUnitX(u), GetUnitY(u) ) : locad_group_item(1, GetRandomInt(1, 6)) - использовать случайный предмет группы 1, с промежуточным номером от 1 до 6 set it = locad_group_item(1,1) - тип предмета равен типу предмета под номером 1, в группе номер 1. remove_group_item - служит для удаления данных о предмете выбранной группы. Например : call remove_group_item (1,1) - удалить предмет группы 1, под номером 1. clear_group - удалить все данные и саму группу. Например : call clear_group (1) - удалить группу 1 В общем принцип системы наверное ясен и я могу перейти к описанию ее применения. По правде я не смог найти много применений системе, но я думаю, что вы сами найдете. Прикрепленный к статье файл объяснит, вам почему это удобно. А вот краткий список применений системе : 1. Допустим вы делаете Арену, у вас есть такой аспект, как выпадение случайного предмета после смерти героя… - создайте группу, зарегистрируйте нужные предметы и готово. 2. Функции удобны для тех, кто делает AI для карт типа AoS… - можно каждому герою создать свой список предметов, используя группы. 3. Возможности переключения групп -- глобальными массивами этого не добиться. Но самое главное, что для системы не нужно создавать кучу глобальных переменных и пользоваться ею легче и удобней, чем глобальными переменными. Система отлично подойдет для распространенного типа Jass-еров, которые “презирают” глобальные переменные. В прикрепленном к статье файле - доходчиво практикована вся информация второй главы. Надеюсь теперь вам понятно, как лучше создавать нестандартные группы предметов... |
28.11.2006, 15:03 | #1
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
dk
offline
Опыт:
61,843Активность: |
Warden ты несовсем правильно понял назначение этих функций. Они находятся в группе "рандомайзеров" и он служит как раз для создания случайных предметов из заранее созданой группы. И применяются как раз здесь:
Цитата:
Так, что они вполне доделаны и выполняют свое назначение: рандом. Цитата:
Но чем он точно является я тоже не догадываюсь, судя по переводу вес =) Цитата:
Твоя же нароботка является не аналогом этих функций, скорее это просто способ юзать сколько угодно групп итемов(нужная вещь кстати). Конечно с помощью наработки можно найти и случайный предмет из группы, но столько обращений к кешу будут работать куда медленнее чем движковые функции. Короче наработку в барахолке наверно разместить не помешает. Пока все =) |
|||
28.11.2006, 16:37 | #2
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
ArchWorm
Матрица незалежности
offline
Опыт:
4,675Активность: |
А где функции с условиями??? Фе, IsItemInGroup?
И вообще, уж если упрощать жизнь, то надо это делать основательно. То есть, добавить функцию, например Код:
Чтоб она сама генерила предмет внутри и создавала его FoK_KruGer, для тех кто нипанимаит, твоя подпись - абуз! |
28.11.2006, 16:42 | #3
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Warden
:::...
offline
Опыт:
21,706Активность: |
Цитата:
Ну я ваще не пользуюсь глобалками и многие жассеры тоже =) Цитата:
Я блин тоже гадал... Причем тут "вес", но по структуре - это похоже на номер предмета... Я видимо не все Pool-ы нашел, но по сути ими пользоваться все-равно не удобно... ArchWorm12612 - Я думаю, ты прав, но я выложил ведь только главные функции... Dead_knight - по любому по моей системе намного удобней, чем через Pool-ы =) |
||
28.11.2006, 17:15 | #4
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
ArchWorm
Матрица незалежности
offline
Опыт:
4,675Активность: |
Warden, зря ты глобалки не юзаешь. Кэш-вчерашний день, пора переходить на более современные способы хранения информации.
|
28.11.2006, 19:16 | #5
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
p01nTT
offline
Опыт:
10,760Активность: |
Йа ни фишу в етом смысла
ArchWorm12612 Не знаю насчёт глобалок - к кэшу привык,всё таки сопоставляешь объекту,а не просто переменная |
28.11.2006, 19:53 | #6
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Алексей
Где кошачья мята?!
offline
Опыт:
26,543Активность: |
Вес - это и есть "вес", т.е. вероятность выпадения из пула данного предмета. Рекомендуется передавать туда число от 0 до 1, но можно передать и др. значения - всё равно перед выбором предмета с помощью PlaceRandomItem список (насколько я понял) нормируется к 1.
Например, если задать: call ItemPoolAddItemType(ip,предмет1,0.1) call ItemPoolAddItemType(ip,предмет2,0.9) то предмет2 будет выпадать в 9 раз чаще, чем предмет1. |
28.11.2006, 19:55 | #7
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
p01nTT
offline
Опыт:
10,760Активность: |
а хде ше смысл, омг йа умирайу бес нефо |
28.11.2006, 20:13 | #8
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
ArchWorm
Матрица незалежности
offline
Опыт:
4,675Активность: |
p01nTT, ты хоть как-то говори по-русски.
Алексей, да ты прав. p01nTT, ты не врубился в фичу. Во-первых, есть несколько резервных способов сопоставления. Например, локации. |
28.11.2006, 20:54 | #9
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Warden
:::...
offline
Опыт:
21,706Активность: |
Цитата:
Я считаю, что глобалки - это мамонт, кэш пока еще рулит... или ты знаешь более совершенную систему? |
|
29.11.2006, 08:08 | #10
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
ArchWorm
Матрица незалежности
offline
Опыт:
4,675Активность: |
Warden, вообще мы тут уже не в тему говорим. Лично я знаю даже несколько: Динамические массивы. CSCache.
Вообще ты почаще к Великому В заглядвай, чем он занимается. |
29.11.2006, 12:18 | #11
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Warden
:::...
offline
Опыт:
21,706Активность: |
"к Великому В" я часто заглядываю, но нелюблю я его мозгопарку... |
29.11.2006, 12:58 | #12
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
NECros88
offline
Опыт:
15,951Активность: |
Не учитывая то, что я половину не понял, статья в любом случае пригодятся для общего ознакомления. |
29.11.2006, 13:00 | #13
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
p01nTT
offline
Опыт:
10,760Активность: |
ArchWorm12612 Я локациям вещь смогу и так сопоставить - через CSCache
|
29.11.2006, 18:42 | #14
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
ArchWorm
Матрица незалежности
offline
Опыт:
4,675Активность: |
p01nTT, ну тогда да.
|
29.11.2006, 19:50 | #15
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
не страдайте идиотизмом, я писал как включать новые виды глобалок
регестрируем массив айтем пулов и КЕША НЕ НУЖНО |
30.11.2006, 13:01 | #16
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|