Запутался с массивом переменной.
Переменная _udg[t] t = 0 и увеличивается на +1 циклично у меня в триггере
В следующий раз она уже равно 1 и записалось для первого юнита как 1
В следующий раз равна 2 и записалось для второго юнита как 2 НО! Теперь она же и для первого юнита уже записала значение как 2 потому что теперь t циклично изменила значение.
А когда появится третий юнит то первые два уже будут иметь значение 3
Так и что же мне делать? Если у меня в карте сто юнитов я же не могу пердугадать и прочичать каждого, чтобы он не наследовал цикличность после присвоения своего значения, особенно если я и не знаю, кому из юнитов точно будет присвоено. В чем у меня ошибка?
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
19
2 недели назад
0
Похожие вопросы:

ответ
что именно в циклах тебе непонятно?
ответ
Ты не обнуляешь переменную, а удаляешь юнита из игры. Запись верная.
Обнуление будет таким.
set udg_EfectRudnik[bj_forLoopAIndex] = null
Но нет смысла обнулять глобалки.

Группы - это тоже объект, как и юнит, вот только юнит имеет визуальную составляющую (его видно глазами), а группа нет.
Изначально массив групп создаёт группу (новая группа всегда пустая) для ячеек 0, ..., размер_массива (указывается в настройках переменной). Во всех остальных ячейках групп просто нет, там нули.
Если группа больше не нужна, её нужно уничтожить (call DestroyGroup(g)), в GUI такого действия нет. После этого группы не существует. Если попытаться что-то добавить в эту группу через переменную, что всё ещё на неё ссылается, ничего не произойдёт.
GUI действия типа "Выбрать юнитов в области" создают новую группу каждый раз, что может вызывать утечки. Потому такие вызовы лучше всего записывать в переменную, делать необходимые действия, а потом уничтожать (не очищать!).
ответ
Extremator:
А что мешает отслеживать изменение содержимого инвентаря? Т.е. получение предмета, который подходит для манипуляций, после чего поочерёдно проверять только те списки, в которых этот предмет участвует... ну и делать что надо
Так ведь я так и делаю. Юнит получает предмет, содержимое его инвентаря записывается в таблицу. И вот, я не могу придумать по какой схеме мне сравнить эту таблицу со списками рецептов. Вот есть TransfigurationData.List[ID] в нём списки TransfigurationData.List[ID][ID1,2,3,4,5....]
Нужно как-то сделать проверку есть ли в списке TransfigurationData.List[0][1](как пример) то что в инвентаре героя, если да то убрать их и выдать TransfigurationData.Result[Тот же ID что и у List] :)

О ес, оно заработало я сам всё решил. Спасибо за внимание :)
ответ
чтож


оказывается допустил ошибку при высчитывании

Нельзя
if SubString(ChatString, 0, CommandsListSubstringEnd[CommandsListMaxCounter]) == CommandsList[CommandsListMaxCounter] then //-cam, -Cam
// высчитывать Значение Цикла CommandsListMaxCounter внутри переменной CommandsListSubstringEnd
endif
он подберет Индекс CommandsListMaxCounter и будет проверять CommandsListSubstringEnd на наличие Меньшего Значения начиная с 1 до
CommandsListMax
его сразу надо высчитывать чтобы значения цикла не высчитывались

if SubString(ChatString, 0, CommandsListSubstringEnd[CommandsListMax]) == CommandsList[CommandsListMaxCounter] then
так должно выглядеть

отработает 1 раз для CommandsList с привязкой к СommandsListSubstringEnd

Centyrion, если удалить комментарии, то у тебя пустое условие.
Спасибо! воспользуюсь ссылкой
ответ
циклом медленнее

0
23
2 недели назад
0
Опиши в чем изначальная задача, зачем ты это делаешь. + скрин триггера было бы неплохо увидеть, это более точные данные нежели слова.

Но как вариант (не зная что и зачем тебе надо), если хочешь хранить какой-то счетчик для юнитов - можно просто записывать в его обычное значение самого юнита. Если ты хочешь контролировать отдельно в триггерах - как вариант можно использовать массив Юнитов А[t]=юнит, куда ты сохраняешь нового юнита, и значение в массив значение, B[t]=счетчик
Если надо повысить счетчик - проходимся по массиву юнитов, если не нашли нашего юнита, тогда добавляем его. Если же нашли юнита, значит используем текущий индекс t для второго массива чтобы увеличить его счетчик B[t] = B[t] + 1

Есть еще вариант через хэш-таблицы сохранять счетчика, не придется делать 2 параллельных массива.
Ответы (18)
0
20
2 недели назад
0
konvan5, Там очень много значений, просто я не могу понять, как мне вытаскивать конктретное значение или юниту после присвоения числа выпиливаться?
Для каждого юнита писать свою отдельную целочисленную A B C D и присваивать ей число от моего массива?
0
23
2 недели назад
Отредактирован konvan5
0
SсRealm, еще раз, опиши задачу, а то непонятно что тебе нужно в конкретном вопросе если нет условий :D
Ты говоришь о решении, а что решаешь непонятно :D
0
23
2 недели назад
Отредактирован konvan5
0
SсRealm, тебе надо сохранять какие-то значения для юнитов, потом изменять их? или добавлять новые? а старые удаляются со временем? А если юнит умрет то и значения поудалять? Это одно значение для одного юнита или их несколько?
0
20
2 недели назад
0
konvan5, Для каждого нового юнита будет свое значение из массива. При этом у них должны быть уникальные значения ( только 1, только 2, только 3) А у меня при изменении массива они все равны его значению как одно и тоже число
0
23
2 недели назад
Отредактирован konvan5
0
SсRealm, ааа, воот.
  1. Значение для юнита одно
  2. Значение уникально
  3. А потом эти значения надо удалять или менять?
  4. Если юнит умрет его значение станет свободным?
  5. И как добавляются у тебя новые юниты, в плане может ли юнит получивший значение получить его заново новое?
  6. А сохранить в обычное значение тебе можно или хочешь в триггерный массив по какой-то причине?
  7. Из какого массива? В каком-то массиве эти значения ограничены? (о котором ты написал)
  8. Что значит после присвоения значения выпиливаться?
0
23
2 недели назад
Отредактирован konvan5
0
SсRealm,
Вот тебе простейшее решение, где каждый юнит получит свое уникальное значение 1 2 или 3 и тд в кастомное значение, при этом одноразово.
Загруженные файлы
0
20
2 недели назад
0
konvan5, Хорошо, я никогда не пользовался custom value
Возможно это и есть то, что мне нужно
0
23
2 недели назад
0
SсRealm, по сути это личная целочисленная переменная юнита. Она всего одна такая, так что используй только для одной системы в карте)
Чтобы не пересекалась с другими системами.
0
20
2 недели назад
0
konvan5, блин, хренова, я уже обрадовался!
0
23
2 недели назад
0
SсRealm, можно хитро расширить возможные значения для юнитов (чтобы их было больше). Не сказать что оптимизировано, но способ рабочий...
0
20
2 недели назад
0
konvan5, какой?
0
23
2 недели назад
Отредактирован konvan5
0
SсRealm, сохранять в кастом значение этот уникальный номер как ИНДЕКС. А потом по этому индексу получать/хранить/изменять значения в массивах. При этом сами массивым могут быть любогого типа, хоть целочисленные хоть строки хоть реальные, но значение будет принадлежать конкретному юниту с конкретным индексом :)
Загруженные файлы
0
20
2 недели назад
0
konvan5, ладно, буду пробовать
0
20
2 недели назад
0
konvan5, Спасибо
0
23
2 недели назад
0
SсRealm, и заметь, этот индекс сам по себе является уникальным для юнита и ты можешь его использовать для своих задач (кроме как для хранение иных данных о юните).
0
29
2 недели назад
0
konvan5, это называется Unit Indexer, наработок полно на хайве.
0
23
2 недели назад
0
nazarpunk, по факту, лень искать :)
0
29
2 недели назад
0
konvan5, кому надо, тот найдёт.
0
27
2 недели назад
0
Хочешь сказать ты допустил банальную ошибку в логике при построении цикла следующего образа?
local integer i = 0

loop
    set i = i + 1
    set udg_Int[i] = i

    exitwhen i >= 8192
endloop
В каком месте тут можно ошибиться?
Чтобы оставить комментарий, пожалуйста, войдите на сайт.