всем привет.
прочитал функцию которая проверяет есть ли в хэш таблице значение или нет
function HaveSavedValue takes integer key, integer valueType, integer missionKey, hashtable table returns boolean
    if (valueType == bj_HASHTABLE_BOOLEAN) then
        return HaveSavedBoolean(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_INTEGER) then
        return HaveSavedInteger(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_REAL) then
        return HaveSavedReal(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_STRING) then
        return HaveSavedString(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_STRING) then
        return HaveSavedHandle(table, missionKey, key)
    else
                return false
    endif
endfunction
подумал что это какой-то баг
глянул в Blizzard.j
function HaveSavedValue takes integer key, integer valueType, integer missionKey, hashtable table returns boolean
    if (valueType == bj_HASHTABLE_BOOLEAN) then
        return HaveSavedBoolean(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_INTEGER) then
        return HaveSavedInteger(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_REAL) then
        return HaveSavedReal(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_STRING) then
        return HaveSavedString(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_HANDLE) then
        return HaveSavedHandle(table, missionKey, key)
    else
        // Unrecognized value type - ignore the request.
        return false
    endif
endfunction
кому верить?
дело в том что хочу сохранить идентификатор игрока как хэндл и потом проверить его где мне нужно, потом почищу его
пример
call SavePlayerHandleBJ(GetOwningPlayer(GetEnteringUnit()),15,1,udg_H)
и непосредственно загрузка значения
HaveSavedValue(15, bj_HASHTABLE_HANDLE, 1, udg_H) == true
кому верить?

Centyrion, если исправно работает, то и смущаться лишний раз незачем.
ну все-же предупрежден значит вооружен.
оказывается я все это время сохранял Имя Игрока вместо идентификатора, т.е 0 1 2 3 4 в зависимости от айди игрока, так даже лучше...но не каждый зайдет в Function List и глянет что там происходит, все-же это дело оптимизации. как напишешь так и сработает.

Centyrion, если исправно работает, то и смущаться лишний раз незачем.
спасибо за ответ.
`
ОЖИДАНИЕ РЕКЛАМЫ...
18
или все-же целочисленную переменную сохранить вместо хэндла?
valueType == bj_HASHTABLE_INTEGER

особой роли не играет что буду сохранять но смущает Function List из JNJP

	// Hashtable value types
	constant integer   bj_HASHTABLE_BOOLEAN                 = 0
	constant integer   bj_HASHTABLE_INTEGER                 = 1
	constant integer   bj_HASHTABLE_REAL                    = 2
	constant integer   bj_HASHTABLE_STRING                  = 3
	constant integer   bj_HASHTABLE_HANDLE                  = 4
8
Почему бы не использовать напрямую HaveSavedHandle?
30
Почему бы не использовать напрямую HaveSavedHandle?
Потому что так неинтересно и невозможно из гуя.
18
Почему бы не использовать напрямую HaveSavedHandle?
Потому что так неинтересно и невозможно из гуя.
верно подметил 🙂я о том почему JNJP написал в Function List подобное
30
я о том почему JNJP написал в Function List подобное
Потому что такая функция имеется в игре наверное.
18
тут выбор не велик
  1. использовать другие значения для сохранения хэндла в хэш таблице кроме HaveSavedHandle но при этом использовать BJ функции
  2. можно без BJ но использовать HaveSavedHandle
  3. записать в некую переменную значение которое должно проверятся и проверить ее перед определенным действием
  4. ну или использовать обычный редактор не JNJP
  5. запилить свою функцию на подобие этой и туда прописать что мне нужно сохранять с последующим очищением
5 )наиболее подходящий вариант

я о том почему JNJP написал в Function List подобное
Потому что такая функция имеется в игре наверное.
она есть но сохраняет false вместо хэндла

воспользуюсь конструкции типа bj_HASHTABLE_INTEGER
все равно игрока можно записать как Player(index)
а индекс и будет целочисленной

или зависит от того что буду делать можно и bj_HASHTABLE_BOOLEAN чтобы не использовать BJ функции

тем более они занимают намного меньше места в памяти нежели хэндлы
8
Откуда вообще был взят первый вариант, где два раза _STRING? Всё там должно быть нормально.
30
Centyrion, ещё раз, зачем использовать обёртку вместо нативки?
18
Откуда вообще был взят первый вариант, где два раза _STRING? Всё там должно быть нормально.
не сомневаюсь
вот пример, пояснения в конце
call SavePlayerHandleBJ(GetOwningPlayer((Hero[GetPlayerId(GetTriggerPlayer())])),15,1,udg_H)
call SaveLocationHandle(udg_H, 3, StringHash("GV"+I2S(GetPlayerId(GetTriggerPlayer()))), GetUnitLoc(Hero[GetPlayerId(GetTriggerPlayer())]))
if HaveSavedValue(15, bj_HASHTABLE_HANDLE, 1, udg_H) == true then
do action
здесь и наткнулся на  HaveSavedValue
call SetUnitPositionLoc(Hero[GetPlayerId(GetOwningPlayer(GetManipulatingUnit()))],LoadLocationHandle(udg_H, 3, StringHash("GV"+I2S(GetPlayerId(GetOwningPlayer(GetManipulatingUnit()))))))
else
endif
HaveSavedValue работает исправно но смущает
    elseif (valueType == bj_HASHTABLE_STRING) then
        return HaveSavedHandle(table, missionKey, key)
    else
                return false

Centyrion, ещё раз, зачем использовать обёртку вместо нативки?
как вариант, хоть и незачем

Откуда вообще был взят первый вариант, где два раза _STRING? Всё там должно быть нормально.
это прописано в Function List Jass New Gen Pack

ссылка на сайте
8
Centyrion, если исправно работает, то и смущаться лишний раз незачем.
18
Centyrion, если исправно работает, то и смущаться лишний раз незачем.
ну все-же предупрежден значит вооружен.
оказывается я все это время сохранял Имя Игрока вместо идентификатора, т.е 0 1 2 3 4 в зависимости от айди игрока, так даже лучше...но не каждый зайдет в Function List и глянет что там происходит, все-же это дело оптимизации. как напишешь так и сработает.

Centyrion, если исправно работает, то и смущаться лишний раз незачем.
спасибо за ответ.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.