Стандартно в варкрафте если кликать под допустим мостом, то клик пройдет по мосту, хотя мышка направлена в точку под ним. И если даже отправить юнита идти в другую точку, то он обязательно станет обходить мост. Как сделать так, чтобы можно было ходить и под декорацией и на ней (если юнит сверху)?

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

Steal nerves:
Lotus101, это не то. карты старые. там фаталы происходят из-за старого ретург бага (короче раньше, в варе ниже 1.24 код немного по-другому писали, там не было хэш-таблицы, использовали кэш. И сохраняли в качестве ключа не с помощью целого числа, а с помощью строки).
короче там ошибки из-за функции, внутри они могут возвращать два значения (либо одно значение, либо пустующее, есть хитрость к примеру возвращает значение целое число (id-хэндл), а в функциях в аргументах написан юнит, значит возвращает юнита, или наоборот из юнита в id-хэндл. Типа конвертация из объекта в число или из числа в объект). но сегодняшний вар будет считать это за ошибку, так как нельзя вернуть целое число, если указано в функции, что надо вернуть юнита. я конечно не застал то время, начал изучать jass с 1.24.
раскрыть
например
constant function H2I takes handle h returns integer
    return h
    return 0
endfunction

constant function I2U takes integer i returns unit
    return i
    return null
endfunction

constant function I2Li takes integer i returns lightning
    return i
    return null
endfunction
могу как-то первую переделать
function H2I takes handle h returns integer
    return GetHandleId(h)
endfunction
А вот остальные не работают, так как требуют чтобы как-то хэндлом управлять. Хэндл - все объекты, id хэндла - номер ячейки. Короче мы знаем номер объекта, а вот как достать из хэндла юнита или молнию не можем. раньше это делали так, как привел выше (см. первые три функции). то теперь близзарды в качестве защиты переделали это.
Нельзя сохранить в кэше юнита, молнию и прочих объектов. Но можно сохранять в кэше номера, и строки, логические значения. Короче сохраняли id-хэндл юнита или молнию. А когда нужно было достать юнита или молнию, то конвертировали из id-хэндла юнита в хэндла с помощью ретурна.
Теперь нам дали теперь на каждый тип объекта функцию
старая:
local unit Unit1 = I2U(GetStoredInteger (udg_cache, I2S(H2I(Timer)), "Unit1"))
новая, сейчас можно использовать хэш-таблицу
native LoadUnitHandle takes hashtable table, integer parentKey, integer childKey returns unit
вот
local unit Unit1 =  LoadUnitHandle(udg_Hash, IGetHandleId(Timer), 0)
Спасибо что объяснил, раз там надо другие версии варкрафта качать то и фиг с ними тогда, другие карты работают и норм)
В принципе то что вы скинули все равно не решит главную проблему - невозможность кликать по декорации и под ней. В общем нашел только единственное решение сделать декорацию даммика, и при прохождении рядом с ней юнитов изменять им высоту в зависимости от той, которая была до этого, а по бокам ставить барьеры, и такое получится только при управлении клавишами, иначе не удобно.

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
10
7 лет назад
0
biridius:
делать декорацию как юнита со способностью москитов, и менять высоту других юнитов в зависимости от того как они пришли в место над/под декорацией (например хранить координаты и высоту для каждого юнита и узнавать какая высота была 0,05 сек. назад)
Нужна именно декорация, иначе клик будет по зоне под москитным юнитом и не оч тогда будет.
Steal nerves:
мб столкновение отключить у юнита? а вообще надо поискать на форуме и на сайте. помню кто-то задавал
Проверил, столкновение ничего не дало
0
13
7 лет назад
Отредактирован ENAleksey
0
0
21
7 лет назад
Отредактирован biridius
0
Нужна именно декорация, иначе клик будет по зоне под москитным юнитом и не оч тогда будет.
Убрать стандартное отображение клика и делать спецэффект/даммика там где надо, триггерно
0
27
7 лет назад
Отредактирован MpW
0
ищи на тему как ходить под мостом, но Toadcop сделал так чтобы можно было ходить под мостом и по мосту
0
10
7 лет назад
0
ENAleksey:
Lotus101, посмотри, как делал Toadcop:
Steal nerves:
ищи на тему как ходить под мостом, но Toadcop сделал так чтобы можно было ходить под мостом и по мосту
При проверке карты вылетает, если карту вставить в варик то там слотов не будет и начать нельзя
0
13
7 лет назад
0
Lotus101, попробуй запустить на какой-то из версии патча 1.24.
0
27
7 лет назад
0
Lotus101, это надо переписать код короче
0
10
7 лет назад
0
ENAleksey:
Lotus101, попробуй запустить на какой-то из версии патча 1.24.
Это мне ради этого еще один варкрафт устанавливать, и смысл если на 1.26 все равно запустить не получится?
Steal nerves:
Lotus101, это надо переписать код короче
Других вариантов нет?
Переместил карту в папку в пути которого нет кириллицы, теперь при сохранении появляется такое окно, а затем фатал
Загруженные файлы
0
27
7 лет назад
Отредактирован MpW
0
Lotus101, это не то. карты старые. там фаталы происходят из-за старого ретург бага (короче раньше, в варе ниже 1.24 код немного по-другому писали, там не было хэш-таблицы, использовали кэш. И сохраняли в качестве ключа не с помощью целого числа, а с помощью строки).
короче там ошибки из-за функции, внутри они могут возвращать два значения (либо одно значение, либо пустующее, есть хитрость к примеру возвращает значение целое число (id-хэндл), а в функциях в аргументах написан юнит, значит возвращает юнита, или наоборот из юнита в id-хэндл. Типа конвертация из объекта в число или из числа в объект). но сегодняшний вар будет считать это за ошибку, так как нельзя вернуть целое число, если указано в функции, что надо вернуть юнита. я конечно не застал то время, начал изучать jass с 1.24.
раскрыть
например
constant function H2I takes handle h returns integer
    return h
    return 0
endfunction

constant function I2U takes integer i returns unit
    return i
    return null
endfunction

constant function I2Li takes integer i returns lightning
    return i
    return null
endfunction
могу как-то первую переделать
function H2I takes handle h returns integer
    return GetHandleId(h)
endfunction
А вот остальные не работают, так как требуют чтобы как-то хэндлом управлять. Хэндл - все объекты, id хэндла - номер ячейки. Короче мы знаем номер объекта, а вот как достать из хэндла юнита или молнию не можем. раньше это делали так, как привел выше (см. первые три функции). то теперь близзарды в качестве защиты переделали это.
Нельзя сохранить в кэше юнита, молнию и прочих объектов. Но можно сохранять в кэше номера, и строки, логические значения. Короче сохраняли id-хэндл юнита или молнию. А когда нужно было достать юнита или молнию, то конвертировали из id-хэндла юнита в хэндла с помощью ретурна.
Теперь нам дали теперь на каждый тип объекта функцию
старая:
local unit Unit1 = I2U(GetStoredInteger (udg_cache, I2S(H2I(Timer)), "Unit1"))
новая, сейчас можно использовать хэш-таблицу
native LoadUnitHandle takes hashtable table, integer parentKey, integer childKey returns unit
вот
local unit Unit1 =  LoadUnitHandle(udg_Hash, IGetHandleId(Timer), 0)
0
10
7 лет назад
0
Steal nerves:
Lotus101, это не то. карты старые. там фаталы происходят из-за старого ретург бага (короче раньше, в варе ниже 1.24 код немного по-другому писали, там не было хэш-таблицы, использовали кэш. И сохраняли в качестве ключа не с помощью целого числа, а с помощью строки).
короче там ошибки из-за функции, внутри они могут возвращать два значения (либо одно значение, либо пустующее, есть хитрость к примеру возвращает значение целое число (id-хэндл), а в функциях в аргументах написан юнит, значит возвращает юнита, или наоборот из юнита в id-хэндл. Типа конвертация из объекта в число или из числа в объект). но сегодняшний вар будет считать это за ошибку, так как нельзя вернуть целое число, если указано в функции, что надо вернуть юнита. я конечно не застал то время, начал изучать jass с 1.24.
раскрыть
например
constant function H2I takes handle h returns integer
    return h
    return 0
endfunction

constant function I2U takes integer i returns unit
    return i
    return null
endfunction

constant function I2Li takes integer i returns lightning
    return i
    return null
endfunction
могу как-то первую переделать
function H2I takes handle h returns integer
    return GetHandleId(h)
endfunction
А вот остальные не работают, так как требуют чтобы как-то хэндлом управлять. Хэндл - все объекты, id хэндла - номер ячейки. Короче мы знаем номер объекта, а вот как достать из хэндла юнита или молнию не можем. раньше это делали так, как привел выше (см. первые три функции). то теперь близзарды в качестве защиты переделали это.
Нельзя сохранить в кэше юнита, молнию и прочих объектов. Но можно сохранять в кэше номера, и строки, логические значения. Короче сохраняли id-хэндл юнита или молнию. А когда нужно было достать юнита или молнию, то конвертировали из id-хэндла юнита в хэндла с помощью ретурна.
Теперь нам дали теперь на каждый тип объекта функцию
старая:
local unit Unit1 = I2U(GetStoredInteger (udg_cache, I2S(H2I(Timer)), "Unit1"))
новая, сейчас можно использовать хэш-таблицу
native LoadUnitHandle takes hashtable table, integer parentKey, integer childKey returns unit
вот
local unit Unit1 =  LoadUnitHandle(udg_Hash, IGetHandleId(Timer), 0)
Спасибо что объяснил, раз там надо другие версии варкрафта качать то и фиг с ними тогда, другие карты работают и норм)
В принципе то что вы скинули все равно не решит главную проблему - невозможность кликать по декорации и под ней. В общем нашел только единственное решение сделать декорацию даммика, и при прохождении рядом с ней юнитов изменять им высоту в зависимости от той, которая была до этого, а по бокам ставить барьеры, и такое получится только при управлении клавишами, иначе не удобно.
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.