Доброго времени суток! тут у меня что-то пошло не так, можете взглянуть и подсказать что не так делаю?
решил доработать пример от 8gabriel8 об ограничении предмета используя цикл..но когда речь идет о 200 предметов то плодить 200 триггеров для этого нет смысла, по этой теме xgm.guru/p/wc3/196436?postid=361451
вот наработки
в основном цикл предназначен для повтора...то есть он повторяется 999 раз но...как мне сделать его чтобы работал по убыванию? также читал про Хэш Таблицу...как понял это...шахматная доска внутри памяти...есть возможность чтобы например в 1 0 был 1 предмет 2 0 2 предмет 3 0 3 предмет из массива конечно а 1 1 будет уже ограничение для предмета с индексным номером или 2 1 или 3 1

Дополняю ответ что я хотел этим сказать
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
23
Похожие вопросы:

ответ
  1. В кампании орды за Рекксара медведь призывается без ограничения по времени.
  2. Любая способность призыва, в которой указать количество призываемых юнитов = 0.
ответ
Steal nerves:
ответы
Как объединить зелья лечения в одно с зарядом, если герой имеет одно в инвентаре и поднимает второе?
обычно используют "событие - юнит получает предмет", И на предмет, который вы получаете, ссылается переменная, которая называется item being manipulated. А юнит, который получает итем - Triggering Unit. Вы можете с помощью этой переменной итема узнать тип, сравнить. Потом циклом пробегаете по слотам (от 1 до 6), тут вся суть в одной команде триггерной (item in slot X, итем в слоте Х) и проверяете есть ли такой же итем (не забываем делать проверки, на то что этот предмет не равен item being manipulated и сравниваете не одинаковые ли типы). Если есть такой же (находите тот же тип что и item being manipulated), то от item being manipulated берете заряды и прибавляете к зарядам существующего, а потом item being manipulated удаляете. Недостаток: при заполненном инвентаре такая штука не будет работать.Не хватает свободного места.
код
цикл А от 1 до 6
if тип итема (item being manipulated) РАВНО тип итема (item in slot А) and item being manipulated НЕ РАВНО item in slot А then проверяете
set k = Charges remaining in ( item being manipulated) + Charges remaining in ( item in slot А) складываете заряды
Set charges remaining in ( item in slot А) to ( k) устанавливаете кол-во зарядов
Remove Item (item being manipulated) удаляете
endif
Есть гуишная проверка на наличие итема определенного типа в инвентаре, но она утечна. И лучше циклом прогонять.
Кстати выше пример, там вот дропают итем, зачем? чтобы проверить есть ли такой же итем. А то мб проверка на наличие итема определенного типа в инвентаре найти подобранный итем. А нам нужно знать, что есть еще один, кроме подобранного. Поэтому дропают. Только не понятно зачем создаете новый итем.
Проверка, на то что подобранный предмет имеет зарядов больше 0, говорит нам о том что это не обычный предмет.
есть статьи
Как зелье с зарядом разделить, если игрок перекладывает зелье с зарядом в другую ячейку инвентаря, если возможно, то разделение происходить должно только при нажатии какой-то клавиши?
можно перекладывать в другой слот. для этого ловят приказ. Короче смотрите системы CCS
там создают новый такой же предмет, и выделяют кол-во зарядов, деля поровну например. Абилкой например, попробуй сделать целевую активную абилку с целью предмет, указывай на инвентарь и дели.
Как это можно сделать покороче для множества разных типов предметов?
всмысле покороче? сделать под одну группу? есть же классификация. Я вот делаю так, что все предметы, которые с зарядами, должны иметь классификацию "с зарядами". Не помню точно как называется класс итемов.
Как правильно реализовать в инвентаре 7 слот?
если у героя заполнен инвентарь, то он может подобрать руну. Вот в доте система скрещивания. То же самое можно сделать и с зарядами. На земле у него лежат руны, при подборе руна исчезает. Но мы проверяем слоты, есть ли такой итем. Если есть, прибавляем заряды к существующему. Иначе создать новый. При дропе итема, оригинал подменяет снова на руну. В руну можно передать значения зарядов.
А также ограничения какие-то на количество зарядов нужно ставить или сама система выше какой-то планки не даст собирать?
до такого не доходил.
скинул примеры (хотя многие дурацкие, но делал здесь хгм в качестве ответов)
вот еще одна система hh
ответ
Рабочий лимит предметов на гуях есть в конфетных войнах близзардов, скопируйте от туда...
ответ
Name Legion:
меня не волнует уровень героя я хочу убрать этот предмет если их больше 2..уровень предмета то да..по другому я не вижу...вопрос в не в этом вопрос в том что увеличить а что убрать
пример взял отсюда
Item System
Events
Unit - A unit Acquires an item
Conditions
Actions
Set Item = 0
For each (Integer Slot_Integer) from 1 to 6, do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Item level of (Item carried by (Hero manipulating item) in slot Slot_Integer)) Equal to (Item level of (Item being manipulated))
Then - Actions
Set Item = (Item + 1)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Item Greater than 1
Then - Actions
Hero - Drop (Item being manipulated) from (Hero manipulating item)
Game - Display to (All players) for 5.00 seconds the text: Can't carry more th...
Else - Actions
решил вопрос....я проверял сколько предметов такого типа предмета и 2 убрал...написал так чтобы он понимал только этот тип предмета....теперь он правильно работает....надеюсь и другим этот триггер поможет в реализации..правда его надо доработать ну тем не менее
вот
тип переменной
ответ
Name Legion:
а почему именно любой? я же прописал какой предмет нужно удалить и с каким нужно работать
ну я так и делаю...только почему то он не понимает
яяяя не знаю в чем ошибка...и по другому сделал и так и сяк и никак..он все равно уничтожает предмет....мне нужно конкретно знать где он останавливается и решить этот вопрос...
может ошибка в других триггерах?..я так не думаю...он же по любому должен увидеть уровень... да даже если я уберу hero manipulating item и оставлю только кол-во предметов он все равно уничтожит...мне нужно только 2 уничтожить а не все предметы такого типа...черт его знает
да и так пробовал...уничтожает через раз предметы..1 подбирал остается 2 подобрал уничтожает 3 взял подбирается 4 уничтожается и так до бесконечности
и этот цикл убрал...from 1 to 6....тоже нет
может убрать эту огромную строчку и тупо уничтожить предмет из item caried by hero manipulating item of type?
решил вопрос...не хватало одно if all condition are true при условии что срабатывает ИНАЧЕ при первом подбирание предмета...ИНАЧЕ НЕ ТРОГАТЬ...а то условие срабатывало как ТО и ИНАЧЕ...не хотела проходить дальше вот и уничтожало предмет..обошлось малой кровью...я забыл что одно условие не может проверить что нужно если не прописать это
выкладываю мою систему систему...теперь она правильно работает...

7
Не совсем понимаю, зачем нужен цикл до 999. Если я правильно понял, то предметы из списка не должны повторяться в инвентаре, тогда при взятии предмета можно обойтись циклом в 6 шагов. И зачем 200 триггеров я тоже не понял, ведь каждое событие обрабатывает всех юнитов
мы же не должны сравнивать сразу все предметы из списка, а только тот, который берем в этот момент
18
при инициализации карты не использовать set variable и так для кол-в предметов из переменной item type
все правильно..но я хочу задать для каждого предмета свой предел чтобы потом убрать цикл и использовать например NumOfItems 999 как 8..это привязка NumOfItems к ItemType...далее в цикле она проверяется 200 триггеров чтобы не использовать пример как показал от габриела...его метод отлично работает но для него нужно использовать отдельные триггеры для проверки предметов
здесь проблема в цикле...он не идет по убыванию а прямо =>>>>>>
либо отказаться от цикла либо использовать хэш таблицу либо использовать цикл но чтобы он понимал к какому предмету прибавлять 1 при получении предмета
вот как он должен работать но...при этом надо задать массив предметов и кол-во для каждого предмета
Загруженные файлы
7
Плохо понял суть, но вот так вижу я:
Переменная-массив чисел с id нужных предметов

Событие получение предмета
   Запоминаем id взятого предмета

   Тут просто проверка, что он есть в массиве нужных нужных предметов, но опустим это пока

   Устанавливаем численную переменную count в 0
   Цикл A от 1 до 6
      Если id предмета из слота A == id взятого предмета Тогда
         Если count > 1 Тогда
            Выбросить предмет из слота A
         Иначе
            count = count + 1
         Конец если
      Конец если
   Конец цикла
Конец триггера
Я бы скинул пример, но отвык от триггеров, могу кодом
26
Что значит "для каждого предмета свой предел"?
Объясни кратко задачу целиком, а то вообще непонятно.
18
этот механизм использовать в качестве ограничения для предметов но при этом задать для КАЖДОГО ПРЕДМЕТА свой предел
Загруженные файлы
30
для КАЖДОГО ПРЕДМЕТА
Для каждого предмета или для каждого типа предмета?
18
для каждого предмета из массива ItemType
ItemType[1] = маска смерти
itemType[2] = Боевые когти
и так далее
мне не нужно для ВСЕХ типов предмета для предмета который указан в массиве ItemType
30
Cамый простой вариант:
  • выделяете для лимитных предметов категорию, например "Артефакты"
  • уровень предмета = максимальное количество
  • при получении предмета проверяете, если он в нужной категории, по уровню получаете максимальное количество
  • ...
  • Профит))
Плюсы такого подхода, что все настройки в РО находятся, правда и минусы есть.

Немного посложнее:
Заводите хэштаблицу, и по ID предмета устанавливаете лимит, при получении также смотрите в таблицу.
18
вот 2 вариант подойдет,
на рисунке показано как она выглядит, мне сложно представить как система будет работать в Хэш Таблице
NazarPunk:
я этого и пытаюсь сделать но в качестве Уровня предмета, Категории, Класса указать Тип Предмета и кол-во которая может носить Герой
PornoMishka:
все верно теперь вот это чудо надо доработать чтобы она получала к переменной ItemType[1] к примеру и вместо 1 указать NumOfItems[1] а в качестве ItemType[1] и NumOfItems[1] указать в качестве индексного номера Integer A
count у меня используется как NumOfItems[]
Загруженные файлы
30
мне сложно представить как система будет работать в Хэш Таблице
Статьи для кого пишут?
Лучше так не делать, но вам можно
Заводите два массива
  • ItemId Тип предмета
  • ItemCount Целлочисленная
Настраиваете
ItemId[1] = Маска Смерти
ItemCount[1] = 1
ItemId[2] = Маска Соби
ItemCount[2] = 3
...
При получении предмета пробегаете по массиву и сравниваете тип предмета. Если найдёте, то получаете количество из
ItemId[ForLoopA] и дальше как у вас в триггере.
А потом скрипт падает по оплимиту)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.