Хеш-таблица
Смотрите, такое дело, мне нужно, чтобы когда достраивается здание рядом с ним возникали 3 юнита. Я сделал, что бы они возникали, но теперь мне нужно добавить их в группу и после этого в сдании, рядом с котторым они появились есть абилка, которая позволяет передвигать этих юнитов в определённом радиусе, я решил, что нужна хеш-таблица, т.к. если будет несколько таких зданий стоять рядом, то нужно обращаться к юнитам привязанным к конкретному зданию. Понимаю, что это не просто вот и спрашиваю как лучше это сделать?

Без ответа.


Просмотров: 262

XGM Bot #1 - 3 месяца назад 2
Похожие вопросы:

» ответ
~16GB:
вот спелл пак там реализация спелов гуи хэш
» ответ
vexorian optimiser
» ответ
Steal nerves:
В хеш-таблице изначально возвращает null (это если ничего не записано). Помню делал похожую систему только с итемами, при проверке через Load... проверял не пуста ли ячейка (!=null). По какой-то причине, уже не помню, не всегда так работает, неизвестно от чего система не работает, щас лень браться и искать ошибку.
В вашем понимании null на jass:
 null = Нет боевая единица.
Ответ: чтобы записать null, ничего не надо записывать. Чтобы записать ноль у целого (0) или вещественного (0.00) числа, тоже ничего не надо перезаписывать. Если ничего не записано, вернет null или ноль. Пользуемся дебагами и проверяем.
Еще не попутал ли ты ключи местами? Там на гуи 1, 2 на jass перевернуть надо типа 2, 1. Смотрим
» смотрим
есть BJ тоже гуи-команды. конвентируем в код и видим есть SaveUnitHandleBJ и SaveUnitHandle. Нужно представить ключи в таком порядке в каком изложены в нативке SaveUnitHandle а не в SaveUnitHandleBJ (ибо потом вас гуи путает):
parentKey - родительский ключ
childKey - младший ключ
представить хэш-таблицу можно как таблицу Excel, parentKey как строку, а childKey как столбик. И по этим вы находите ячейку. Еще в плюсе хэндлы юзать, по хэндлам будете строки находить. Стираете инфу тоже по хэндлу, по родительскому ключу. А если нужно стереть строку используйте FlushChildHashtable
function SaveUnitHandleBJ takes unit whichUnit, integer key, integer missionKey, hashtable table returns boolean
    return SaveUnitHandle(table, missionKey, key, whichUnit)
endfunction

native SaveUnitHandle takes hashtable table, integer parentKey, integer childKey, unit whichUnit returns boolean
проверка
native HaveSavedHandle takes hashtable table, integer parentKey, integer childKey returns boolean
удаление
native RemoveSavedHandle takes hashtable table, integer parentKey, integer childKey returns nothing
и правильно иницировал хэш-таблицу?
» ответ
Скачаю чистый варкрафт 1.26 попробую.
Рекомендую эти торренты.
Русская версия.
Английская версия.

quq_CCCP #2 - 3 месяца назад 0
Я бы реализаовал это на структурах вжасса, реализация была бы удобной, просто описываем структуру в которой есть само здание, группа, можно даже триггер если вам нужно следить за абилкой и юнитами.
NazarPunk #3 - 3 месяца назад 2
Сохраняете на хэндл здания группу юнитов и дело в шляпе.
PT153 #4 - 3 месяца назад 0
После постройки создаём в группу, в неё добавляем всех юнитов, что появляются после постройки, группу сохраняем в хеш-тадлицу по ключам (GetHandleId(твоё_строение), любое_число). После каста абилки узнаём кастера, по ключам (GetHandleId(кастер), то_любое_число) их хеш-таблицы узнаём сохранённую группу, всем юнитам в группе отдаём приказ.
После уничтожения строения нужно почистить хеш и уничтожить группу.
ArhiMEN #5 - 3 месяца назад 0
PT153:
После постройки создаём в группу, в неё добавляем всех юнитов, что появляются после постройки, группу сохраняем в хеш-тадлицу по ключам (GetHandleId(твоё_строение), любое_число). После каста абилки узнаём кастера, по ключам (GetHandleId(кастер), то_любое_число) их хеш-таблицы узнаём сохранённую группу, всем юнитам в группе отдаём приказ.
После уничтожения строения нужно почистить хеш и уничтожить группу.
А как это будет реализованно, если таких зданий будет не одно, а например 10-20?
Black Soul #6 - 3 месяца назад (отредактировано ) 0
Сделал наработку:
Когда здание построено, вокруг него создаются пехотинцы и тут же записываются в хеш-таблицу по хэндлу здания.
Способность "Двигать" перемещает пехотинцев в указанную точку.
Способность "Вернуть" возвращает пехотинцев к зданию.
Если здание уничтожено, то пехотинцы возвращаются к зданию и умирают вместе с ним.
прикреплены файлы
NazarPunk #7 - 3 месяца назад 0
Black Soul, выше два человека написали, что нужно создавать группу. Если здание будет создавать юнитов, то человек задолбётся ключи указывать.
Black Soul #8 - 3 месяца назад 0
NazarPunk, в его вопросе указано, что возникают только 3 юнита. Я сделал так же в своей наработке. Здесь нет смысла создавать группу.
NazarPunk #9 - 3 месяца назад 0
в его вопросе указано, что возникают только 3 юнита.
Возникают три, а затем ещё могут создаваться, добавляться и удаляться. Группа более эластичное решение и поэтому лучше создать её, чем заставлять автора париться с ключами, потом создавать новый вопрос и переделывать всё заново.
Black Soul #10 - 3 месяца назад 0
NazarPunk, он не писал о том, что у него будут создаваться новые юниты. Если же он хочет расположить юнитов в определенных местах вокруг здания, то ему в любом случае придется обращаться к каждому из них.
А что касается нового вопроса, то у него в нем описана своя система, так что я сомневаюсь, что он вообще смотрел мою наработку.
NazarPunk #11 - 3 месяца назад (отредактировано ) 0
он не писал о том, что у него будут создаваться новые юниты
Зато о группе он писал
Я сделал, что бы они возникали, но теперь мне нужно добавить их в группу

Да и в вопросах как-то уместней давать более гибкие решения, чтоб люди не парились.
PT153 #12 - 3 месяца назад (отредактировано ) 0
А как это будет реализованно, если таких зданий будет не одно, а например 10-20?
Так способ, что предложил я и NazarPunk, учитывает, что таких строений будет больше 1.
NazarPunk:
Да и в вопросах как-то уместней давать более гибкие решения, чтоб люди не парились.
Да ладно, кому как удобней. Я бы вместо группы использовал массив. Но с другой стороны, так как юнитов меньше 12, то есть нативка, что отдаст сразу всем юнитам один приказ.