У меня есть N-е количество зданий и вокруг них стоит N-е количество юнитов. Все юниты вокруг зданий объеденены в группы и записанных в хеш-таблицу по ключу, которым является ID здания, вокруг которого стоят юниты. Предположим, что N-е количество юнитов около N-го количества зданий погибло, как мне узнать, сколько юнитов умерло и к какой группе они относились? И как мне потом, через определённый промежуток времени, создать такое же количество таких же юнитов, сколько погибло, добавив их в теже группы?
Я понимаю, что вопрос очень обширный и не самый простой в даче ответа, но именно поэтому я и спрашиваю, есть ли возможность сделать это через хеш-таблицу или нужно искать альтернативу?

Принятый ответ

Стас Орлов, ну ты же как-то прикрепил группу к строению? Тут тоже самое, только строение к юниту.
call SaveUnitHandle(твой_хеш, GetHandleId(твой_юнит), твоё_число, твоё_строение)
При смерти узнавай строение.
set Host = LoadUnitHandle(твой_хеш, GetHandleId(умерший_юнит), твоё_число)
set Dead = LoadInteger(твой_хеш, GetHandleId(Host), другое_твоё_число)
call SaveInteger(твой_хеш, GetHandleId(Host), другое_твоё_число, Dead + 1)
// Не забываем чистить хеш.
call FlushChildHashtable(твой_хеш, GetHandleId(умерший_юнит))
Через некоторое время создавай новых юнитов.
set Group = LoadGroupHandle(твой_хеш, GetHandleId(твоё_строение), твоё_число_2)
set Dead = LoadInteger(твой_хеш, GetHandleId(твоё_строение), другое_твоё_число)
if Dead > 0 then
    call SaveInteger(твой_хеш, GetHandleId(твоё_строение), другое_твоё_число, 0)
    loop
        set Dead = Dead - 1
        set Unit = CreateUnit(...)
        call GroupAddUnit(Group, Unit)
        call SaveUnitHandle(твой_хеш, GetHandleId(Unit), твоё_число, твоё_строение)
        exitwhen Dead == 0
    endloop
endif
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
28
5 лет назад
0
Для каждого юнита прикрепляй в хеш строение (по id юнита). При смерти узнавай строение, по нему группу, создавай нового юнита и добавляй его в эту группу (или для каждого строения заведи счётчик мёртвых юнитов и потом создавай нужное количество).
0
12
5 лет назад
0
PT153:
Для каждого юнита прикрепляй в хеш строение (по id юнита). При смерти узнавай строение, по нему группу, создавай нового юнита и добавляй его в эту группу (или для каждого строения заведи счётчик мёртвых юнитов и потом создавай нужное количество).
Не совсем понял, что значит прикрепляй в хеш строение? То есть, когда я тригерно создаю вокруг сдания юнитов, нижно по отдельности добавить каждого из них в хеш таблицу или имеется ввиду добавить три несколько раз одно и тоже здание по нескольким ключам? А можно примерный код показать? Я не до конца понимаю, как это должно выглядеть(
0
26
5 лет назад
0
сохрани как то ссылку на здание к которому принадлежат юниты, когда юнит умрет, по этой ссылке нужно проверять здание на котором они висят, это то о чем тебе написали выше
здание знает какие юниты на нем висят, а юниты должны знать к какому зданию они привязаны
0
12
5 лет назад
0
Hate:
сохрани как то ссылку на здание к которому принадлежат юниты, когда юнит умрет, по этой ссылке нужно проверять здание на котором они висят, это то о чем тебе написали выше
здание знает какие юниты на нем висят, а юниты должны знать к какому зданию они привязаны
В том-то и проблема, я не пойму, как
0
28
5 лет назад
Отредактирован PT153
0
Стас Орлов, ну ты же как-то прикрепил группу к строению? Тут тоже самое, только строение к юниту.
call SaveUnitHandle(твой_хеш, GetHandleId(твой_юнит), твоё_число, твоё_строение)
При смерти узнавай строение.
set Host = LoadUnitHandle(твой_хеш, GetHandleId(умерший_юнит), твоё_число)
set Dead = LoadInteger(твой_хеш, GetHandleId(Host), другое_твоё_число)
call SaveInteger(твой_хеш, GetHandleId(Host), другое_твоё_число, Dead + 1)
// Не забываем чистить хеш.
call FlushChildHashtable(твой_хеш, GetHandleId(умерший_юнит))
Через некоторое время создавай новых юнитов.
set Group = LoadGroupHandle(твой_хеш, GetHandleId(твоё_строение), твоё_число_2)
set Dead = LoadInteger(твой_хеш, GetHandleId(твоё_строение), другое_твоё_число)
if Dead > 0 then
    call SaveInteger(твой_хеш, GetHandleId(твоё_строение), другое_твоё_число, 0)
    loop
        set Dead = Dead - 1
        set Unit = CreateUnit(...)
        call GroupAddUnit(Group, Unit)
        call SaveUnitHandle(твой_хеш, GetHandleId(Unit), твоё_число, твоё_строение)
        exitwhen Dead == 0
    endloop
endif
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.