Сейчас 12:38:16 Четверг, 28 марта, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


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

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

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
Блокировки:
Могу предложить- каждый напишет рандом на юнитпуле. Чем не домашнее задание

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

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
Блокировки:
Ахахаха. Да ты за словом в карман не полезешь ^_^

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

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 и не дать урок самому? Векс все доступно излагает, я уже в этом убедился

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

SirNikolasДата: Вторник, 07 Февраля 2012, 17:00:55 | Сообщение # 18
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (IIAXAH)
Как икать
Можно подробнее?

Ty3uK, это ты lawson'у?


 

Ty3uKДата: Вторник, 07 Февраля 2012, 17:05:08 | Сообщение # 19
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Да

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

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
    Блокировки:
    Quote (|DUОS|)
    weight


    это шанс выпадания героя ?
    как его правильно настроить ?
    делать 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], окей, понял
     

    Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Урок] unitpool и itempool
    • Страница 1 из 1
    • 1
    Поиск:

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