Реалезуем ли дроп определённых предметов с каждого типа юнита.Допустим с паука падает либо лапа паука,либо мясо паука.А с скелета кости либо оружие.С учетом того что карта RPG жанра (Помимо этой механики есть еще куча всего),и в карте присутствует +-20 типов юнитов.Если возможно,то как это скажется на оптимизации?

anton1623, qне забудь про это. Там равкоды с калькулятором проверяй, для точности
казалось бы все правильно, равкод числа на одну единицу меньше. Но как оказалось, где-то допустил ошибку. Берем любой онлайн-калькулятор ASCII , и переводим 10-чную систему, проверяя насколько отличается.
I008=1227894840
I009=1227894841
I00A=1227894849 Тут отличается на целых 8 знаков, короче сбивается база данных
Давайте

жаль отреддактировать выше
//добавляем итемы в список it[0]
call ItemPoolAddItemType(it[0], 'I000',0) //нога Берги
call ItemPoolAddItemType(it[0], 'I001',0) //карта пеонов
call ItemPoolAddItemType(it[0], 'I002',0) //бкговые кроссовки Берги
//добавляем итемы в список it[1]
call ItemPoolAddItemType(it[1], 'I003',0) //маска Тыщи
call ItemPoolAddItemType(it[1], 'I004',0) //пистолет начальника
call ItemPoolAddItemType(it[1], 'I005',0) //мясо тюленя
call ItemPoolAddItemType(it[1], 'I006',0) //водка
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
27
Ну, и в 1.26 можно использовать бд. Помню, там минус в том, что в табличку можно прописать индекс макс 8192. А вот равкоды юнитов нельзя использовать, тк числа превышают 8192.
Как обойти: 1) используй в качестве бд равкоды, пример U000 и U001 ртличаются на единицу. Так можно получить номер массива. Пример, умер юнит с типом U007, так могу узнать, номер индекса юнита U007-U000=7 Ну а двльше думайте, как строить вашу структуру. Типа для чего вам нужен был индекс 2) ну а дальше используй отдельную хэш таблицу, для заполнения [I000+7] [max] = 7 [I000+7] [1] = rawcode 1 [I000+7] [2] = rawcode 2 [I000+7] [3] = rawcode 3 [I000+7] [4] = rawcode 4 [I000+7] [5] = rawcode 5 [I000+7] [6] = rawcode 6 [I000+7] [7] = rawcode 7 max это типа кэширование строки в число GetStringHash или GetHashString Можно вместо I000+7 сразу использовать равкод юнита U007. Ранее I000+7 был просто ключ и примером работы бд с равкодами, правда бесполезный
Ну далее рандомим число от 1 до max и вауу

anton1623, мемхак переходи на сторону зла
8
Итемпулы - вот ваше решение. Они именно для этого и придуманы.
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
30
Но вот луа самый шедевр в плане удобства
На хт можно то же самое реализовать.

Итемпулы - вот ваше решение.
Итемпул всегда отдаёт предмет и не слишком тонко настраивается. Хотя для примитивного дропа подойдёт.
10
Реализуем.
Для твоего уровня хорошим вариантом будут параллельные массивы.
Об оптимизации опять же на твоем уровне вообще думать не стоит
30
Для твоего уровня хорошим вариантом будут параллельные массивы.
Не будут, ибо двумерные он не потянет.
8
nazarpunk, факт

Так почему по системе со скринов выше делать не стоит?
27
anton1623, ну у тебя список не привязан к типу. Как триггер это определяет?
30
Как триггер это определяет?
На каждый тип создаётся триггер Лут_Копировать_Копировать_Копировать_Копировать_Копировать.
27
База данных равкодов юнитов. Или можно другим способом добывать номер итемпула. Ну тут число завязано на тип, то проще сделать свою базу в ро. Или повторно инициируйте бд в таблицах или где то еще
//Можно бд равкодов юнита. Тут можно узнвть номер итемпула.
U000-U000=0
U001-U000=1
U002-U000=2
Создаем списки (итемпул)
//Ну пример, бд итемпула:
It[0] = CreateItemPool() //создаем список для U000
It[1] = CreateItemPool() //создаем список для U001

//добавляем итемы в список it[0]
call ItemPoolAddItemType(it[0], 'I000',0)
call ItemPoolAddItemType(it[0], 'I001',0)
call ItemPoolAddItemType(it[0], 'I002',0)
//добавляем итемы в список it[1]
call ItemPoolAddItemType(it[1], 'I003',0)
call ItemPoolAddItemType(it[1], 'I004',0)
call ItemPoolAddItemType(it[1], 'I005',0)
Узнаем номер списка. Если нужно рандомить случайный предмет из списка it[0]. Где x,y - координаты умирающего юнита
function CreateRandomItemForUnit takes integer num, unit u return nothing
call PlaceRandomItem(it[num], GetUnitX(u),GetUnitY(u))
endfunction

А если нужно удалить из списка итем
ItemPoolRemoveItemType(it[0],'I001')
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.