Написал скрипт, который должен вызывать футмена при кликании мышкой на карту (знаю, что можно на GUI, но не суть). При попытке сохранить карту выдаёт ошибку (на скрине). Скрины кода и ошибки прилагаю. Сам код также прилагаю. Хочу узнать, почему WE быкует на меня в данной ситуации и не принимает завершение функции.
код
function onMouseClick()
CreateUnitByName(
GetLocalPlayer(),
'Footman',
BlzGetTriggerPlayerMouseX(),
BlzGetTriggerPlayerMouseY(),
120
)
end
Скрины -
Только прошу не кричать "У нас за такой код *подставить_способ_экзекуции* устраивали!"

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

Fly123, эх ладно. вы все не правильно делаете.
  1. вы мне скинули абсолютно пустую карту с отключенным триггером. А где код? Она у меня норм без проблем запустилась.
  2. вам для работы с lua лучше отказаться от гуи. Вы лишаетесь большого инструмента.
  3. Пример Назарова смотрите с движением снарядов ссылка. там показывают. Ну он же есть. Берете пример prog с хуком, и вставляете триггеры
  4. неправильное событие у вас стоит, тк координаты мыши не получить
это какой то простой код, видимо вы пытаетесь понять как запустить. два показательных примера покажу:
первый - вставляете код
do -- создаём область видимости, чтоб не конфликтовать с другим кодом

    local InitGlobalsOrigin = InitGlobals -- хукаем функцию InitGlobals
	function InitGlobals()
		InitGlobalsOrigin()
            -- в этом моменте прошла инициализация карты и можно смело работать
                FogEnableOff()
                FogMaskEnableOff()
                --создаем триггеры
                local MouseMove = CreateTrigger(  )
                TriggerRegisterPlayerMouseEventBJ( MouseMove, Player(0), bj_MOUSEEVENTTYPE_MOVE )
                TriggerAddAction( MouseMove, function()
                    --CreateUnitByName(GetLocalPlayer(),'footman',BlzGetTriggerPlayerMouseX(),BlzGetTriggerPlayerMouseY())
                    print("координаты: "..BlzGetTriggerPlayerMouseX()..","..BlzGetTriggerPlayerMouseY())
                    CreateUnit(Player(0),FourCC('hfoo'),BlzGetTriggerPlayerMouseX(),BlzGetTriggerPlayerMouseY(),0)
                    
                end)
            
        --end
	end
end
второй - с использованием гуи
    function onMouseClick()
        --CreateUnitByName(GetLocalPlayer(),'footman',BlzGetTriggerPlayerMouseX(),BlzGetTriggerPlayerMouseY())
        print("координаты: "..BlzGetTriggerPlayerMouseX()..","..BlzGetTriggerPlayerMouseY())
        CreateUnit(Player(0),FourCC('hfoo'),BlzGetTriggerPlayerMouseX(),BlzGetTriggerPlayerMouseY(),0)
                    
    end
карта пример прилагается. дело не программе, а в кривых руках)
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
14
3 года назад
0
МрачныйВорон:
Fly123, так нужно в соответствии с этой установкой делать.
  1. прописываем путь в соответствии с статьей, закидываем скрипты вроде common blizzard.
Где взять эти скрипты? EmmyLua я установил уже давно, и без инсталяции Java и регистрации на Оракле. Теперь главное: понять где взять скрипты blizzard и common lua

Fly123:
МрачныйВорон:
Fly123, так нужно в соответствии с этой установкой делать.
  1. прописываем путь в соответствии с статьей, закидываем скрипты вроде common blizzard.
Где взять эти скрипты? EmmyLua я установил уже давно, и без инсталяции Java и регистрации на Оракле. Теперь главное: понять где взять скрипты blizzard и common lua
upd: всё, понял, нашёл скрипты. Щас буду пытаться сделать всё по инструкции.
1
27
3 года назад
1

там common.j.lua убери этот j короче надо common.lua blizzard.lua
0
14
3 года назад
0
МрачныйВорон:

там common.j.lua убери этот j короче надо common.lua blizzard.lua
Ты написал, что нужно путь указать, но в статье никакого пути, который надо указывать, я не наблюдаю. Там же только путь по которому надо скрипты кидать, так?
1
27
3 года назад
1
ага
0
24
3 года назад
Отредактирован prog
0
Там же в той теме в комментах мной расписаны некоторые нюансы настройки EmmyLua в вскоде, в составе другого плагина, правда...
0
14
3 года назад
0
prog:
Там же в той теме в комментах мной расписаны некоторые нюансы настройки EmmyLua в вскоде, в составе другого плагина, правда...
Да, я видел. Но мне с этим проще возится уже. Но ты всё-равно молодец.
0
24
3 года назад
0
Не, ну дело то ваше, долбитесь как хотите. Я рассказал про более вменяемый способ? Рассказал. Все, моя совесть чиста.
0
14
3 года назад
Отредактирован Fly123
0
МрачныйВорон:
ага
Всё, VSCode заработал как нужно, но при попытке сохранить карту, в которой CS ссылается на код Lua, опять выдаёт ошибку мол "Jass юзаешь, да?!", хотя его там нет: онли Lua, и сами параметры совпадают. А код самой карты мне показывает как и раньше - непонятной и перекомканой писаниной (как на скринах выше). Ты мне сегодня помог намного больше, чем стоило бы (наверное), но не мог бы ты открыть эту карту у себя и посмотреть, что с ней не так? Там тот самый триггер я оставил, только отключил его через меню.
Загруженные файлы
3
27
3 года назад
Отредактирован MpW
3
Fly123, эх ладно. вы все не правильно делаете.
  1. вы мне скинули абсолютно пустую карту с отключенным триггером. А где код? Она у меня норм без проблем запустилась.
  2. вам для работы с lua лучше отказаться от гуи. Вы лишаетесь большого инструмента.
  3. Пример Назарова смотрите с движением снарядов ссылка. там показывают. Ну он же есть. Берете пример prog с хуком, и вставляете триггеры
  4. неправильное событие у вас стоит, тк координаты мыши не получить
это какой то простой код, видимо вы пытаетесь понять как запустить. два показательных примера покажу:
первый - вставляете код
do -- создаём область видимости, чтоб не конфликтовать с другим кодом

    local InitGlobalsOrigin = InitGlobals -- хукаем функцию InitGlobals
	function InitGlobals()
		InitGlobalsOrigin()
            -- в этом моменте прошла инициализация карты и можно смело работать
                FogEnableOff()
                FogMaskEnableOff()
                --создаем триггеры
                local MouseMove = CreateTrigger(  )
                TriggerRegisterPlayerMouseEventBJ( MouseMove, Player(0), bj_MOUSEEVENTTYPE_MOVE )
                TriggerAddAction( MouseMove, function()
                    --CreateUnitByName(GetLocalPlayer(),'footman',BlzGetTriggerPlayerMouseX(),BlzGetTriggerPlayerMouseY())
                    print("координаты: "..BlzGetTriggerPlayerMouseX()..","..BlzGetTriggerPlayerMouseY())
                    CreateUnit(Player(0),FourCC('hfoo'),BlzGetTriggerPlayerMouseX(),BlzGetTriggerPlayerMouseY(),0)
                    
                end)
            
        --end
	end
end
второй - с использованием гуи
    function onMouseClick()
        --CreateUnitByName(GetLocalPlayer(),'footman',BlzGetTriggerPlayerMouseX(),BlzGetTriggerPlayerMouseY())
        print("координаты: "..BlzGetTriggerPlayerMouseX()..","..BlzGetTriggerPlayerMouseY())
        CreateUnit(Player(0),FourCC('hfoo'),BlzGetTriggerPlayerMouseX(),BlzGetTriggerPlayerMouseY(),0)
                    
    end
карта пример прилагается. дело не программе, а в кривых руках)
Загруженные файлы
Принятый ответ
0
14
3 года назад
Отредактирован Fly123
0
МрачныйВорон:
карта пример прилагается. --дело не программе, а в кривых руках)
Так, я проверил твой код (и гуи-триггер), потом создал свой скрипт, который вначале собирался - работает. Остался лишь один вопрос - если писать кастомный скрипт (оказывается там нужно было копировать его в "Новую функцию", а не "Личный сценарий", как я думал), с ссылкой на GUI (я имею введу как у ты сделал: событие и CS на ГУИ, а сам код на Lua, на скриншоте), это сильные проблемы вызовет? Например, если я в Events в ГУИ напишу "Времени прошло: 2 сек" и через Actions и "Новой функции (Lua)" создам, например мультиборд, то это будет считаться за ГУИшный мультиборд, или за Lua (это я к тому, что пишут "Пиши на Lua/JASS, тогда не будет утекать всё". Или нужно такие скрипты только-только на Lua писать (всё умещать в "Новая функция"), чтобы не утекало? прошу не бить меня палками по пяткам, если мои вопросы кажутся глупыми и раздражающими
1
27
3 года назад
Отредактирован MpW
1
Fly123, я думаю в режиме луа все гуишные функции пишутся на луа. Весь код конвертируется в lua, можно открыть war3map.lua после сохранялки. war3map.lua заменил наш war3map.j. Можете писать хоть на гуи, хоть возится с lua-кодом. Все переведется в lua. Когда вы lua-режим подключали, вы выбирали в чем сохранится.
Тут с lua кодом сложнее, надо внимательным быть. Бывает одна ошибка вызывает дохера времени на ее поиск/устранение. Долго нужно разбираться. А на гуи наверн попроще вам будет. Можно так и так, как вам удобнее.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.