Веду хеш таблицы, чтобы проверять доступность героя. Тип юнита unavailable равно да/нет. На скрине показано как я проверяю доступность. Ессно, есть триггер, который записывает данные в хэш таблицы, чтобы сделать героя недоступным.
Но вопрос в том, если данные не были прописаны в таблицу, какой результат они возвращают? Мне кажется, что они вообще не выдают никакой результат. Либо всегда отрицательный результат. Короче, не работают корректно таблицы, если они не заполнены. А мне бы хотелось чтобы если таблица не заполнена, она возвращала False.

Итак, у тебя как минимум 2 ошибки в понимании происходящего:
  1. Конвертация типа юнита в строку и в число потом будет равно 0. Потести на разных вариантах. Выведи в чат результат. Поэтому даже используя разные типы юнитов ты всегда сохраняешь в одну ячейку все данные перезаписывая старые данные других юнитов.
  2. Предположим первую проблему ты решил. Тебе надо проверить, существует ли вообще значение, сохранял ли, прежде чем его загрузить? Ну так используй действие на проверку, а потом уже загружай и проверяй, true там или false. Вот тебе быстрый пример такой проверки:
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
9
Так это легко проверить:
call InitHashtableBJ()
if LoadBoolean(bj_lastCreatedHashtable,0, 0) then
        call DisplayTextToForce( GetPlayersAll(), "true" )
    else
        call DisplayTextToForce( GetPlayersAll(), "false" )
    endif
В результате вывело "false"
Ответы (4)
9
IzobretatelBoom, почему-то у меня данные выдаются как true. Хотя я не записывал их так.
Видимо где-то в моих триггерах есть баги.
9
WilliamBz, ну так ты сравниваешь (пустое значение из хеша) == фолс, естественно это будет выдавать тру.
9
IzobretatelBoom, непонятно вообще.
Допустим герой доступен (его ещё не купили). Получается:
Hero unavailable = false
И вот как выглядит триггер:
If Hero unavailable = false
Then приказать алтарю покупать героя
Else do nothing
Тоесть следуя этой логике, мой герой доступен. А раз он доступен то алтарь должен его нанять. Но происходит ничего.
Функция покупки героя работает, проверено. Проблема в проверке условия. Оно выдает противоположный результат.
9
IzobretatelBoom, а может быть у меня неверно указан ключ?
До этого я пробовал использовать ключ unit type напрямую, но всегда возвращалось false. Тогда я заместо ключа стал использовать integer, который получаю из строки, которую получаю от unit type.
Я это тестанул и это работало. Но в другом триггере это уже не работает.
Непонятно все. Непредсказуемо с этим варкрафтом ничего.
26
Итак, у тебя как минимум 2 ошибки в понимании происходящего:
  1. Конвертация типа юнита в строку и в число потом будет равно 0. Потести на разных вариантах. Выведи в чат результат. Поэтому даже используя разные типы юнитов ты всегда сохраняешь в одну ячейку все данные перезаписывая старые данные других юнитов.
  2. Предположим первую проблему ты решил. Тебе надо проверить, существует ли вообще значение, сохранял ли, прежде чем его загрузить? Ну так используй действие на проверку, а потом уже загружай и проверяй, true там или false. Вот тебе быстрый пример такой проверки:
Загруженные файлы
Принятый ответ
Ответы (4)
9
konvan5, а как мне тогда использовать unit type как ключ?
Есть ли способ через гуи легко конвертировать unit type в integer?
Спасибо большое за ответ!
9
WilliamBz, хотя, кажется я нашёл ответ.
    Set UnitType = Medivh
    Custom script: set udg_TempInteger = udg_UnitType
    Hashtable - Save 100 as 0 of TempInteger in YourHashtable
Чтобы оставить комментарий, пожалуйста, войдите на сайт.