Написал скрипт, который должен вызывать футмена при кликании мышкой на карту (знаю, что можно на 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
карта пример прилагается. дело не программе, а в кривых руках)
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
У вас не работает, потому что вы перезаписали нативки на свои функции. В луа не нужно ничего объявлять. Всё работает и так из коробки.

27
если вы перевели в режим луа карту. то тут ругается либо из-за end - либо тут лишнюю end дописали где-то или не закрыли блок. у меня было очень много блоков в блоков, блоков в цикле. Когда переносил на lua, случайно дописал end. И потом ругался, долго искал. У вас как не знаю)
в режиме луа обычно ругают на всякие jass-вские !=, set, endif, endfunction, loop. А еще типы пример: local real a не пропустит такое, надо local a. Короче невосприимчивы для lua кода синтаксис. Не пропускает. Это хорошо, можно подправить
13
Компилятор же явно указал на место где ошибка... После OnMouseClick не хватает скобок

Bergi_Bear, действительно
33
так же будет баг, если будет открыто 2 карты в редакторе одна в J Другая в Lua, приоритет у Джасса и начнёт карта на луа проверяться как джасс, стоит это тоже помнить
14
Bergi_Bear:
так же будет баг, если будет открыто 2 карты в редакторе одна в J Другая в Lua, приоритет у Джасса и начнёт карта на луа проверяться как джасс, стоит это тоже помнить
Блин, какая-то лажа. Я же выбрал Lua в параметрах карты. Не нужно юзать же никакие проги дополнительные, шоб её перевести в Lua, не так ли?
27
Fly123, тогда все хорошо, никакие программы не нужны. тут у вас ошибка, нужно исправлять ошибки синтаксиса. просто ты в карте выбираешь один язык. Если выбираешь lua, то все пишешь только на lua. Выше скинул учебник примеры. Я примерно в интернете нашел и скомуниздил, что-то сам добавлял. И так далее.
14
МрачныйВорон:
Fly123, тогда все хорошо, никакие программы не нужны.
Я так понимаю, такого быть не должно? Это после того, как я сохранил код в VSCode и карту. Теперь у меня вар не видит мапу, а редактор её не открывает. Есть кака-нибудь статья, где это всё подробно расжёвано (конечно её нет, но я всё-равно спрошу)?
upd: это произошло после того, как я закрыл карту и сохранил скрипт в VSCode,е. Походу VSCode финты выкидывает.
Загруженные файлы
27
Fly123, такое не должно быть. как вы создаете? lua-код куда сохраняете? прямо в карту? я в карту никогда не сохранял. так мне сложно помочь, тк. я не знаю причин.
самый простой вариант это copy-past, т.е. редактируете код в VsCode. Копируете весь код и вставляете в CustomScript. пример В рефорджете можно создать CustomScript, и туда код вставлять. Или кидаете все в шапку, тогда в шапке будет мешанина из разных систем. Запускаете смотрите. А что код в lua в VsCode можете сохранить отдельно.
Второй способ прямо из редактора запускать игру. это надо редактор настроить
на сайте/форуме не содержится объяснения как чего делать (для нубов конечно). я сам догадался из той статьи. До этого меня берги научил пользоваться программой для совместной работы, она запускала игру прямо, просто код вставлял. но она потом перестала работать. И мне уже лень ее снова запускать, настраивать. работаю в VsCode copy-paste
14
МрачныйВорон:
самый простой вариант это copy-past, т.е. редактируете код в VsCode. Копируете весь код и вставляете в CustomScript. Ля, я не знал, что так можно.
27
Fly123, я тоже не знал долгое время)

если вы применяете этот способ, то тебе нужно изучить эту статьи. она хукает, то есть заменяет функцию. я так понял, что вы можете много скриптов наделать и инициировать) я плохо понимаю) но суть я понял
14
МрачныйВорон:
Короче, copy-past не работает. Я копирую весь код, он вставляет кусок. В шапку пробовал копипастить, он всё-равно показывает, что мол карта jASS, хотя я точно ставил Lua и перезапускал обновлял. Не работает ничего.

МрачныйВорон:
Fly123, я тоже не знал долгое время)
у тебя вот такого в VSCode никогда не было? Он пишет что мол версия какая-то "переделанная", и что нужно обновить. Я нажимаю на галочку, он удаляет все, что выделено красным и оставляет эту функцию с созданием юнита, после чего карта перестаёт открыватся в редакторе и варкрафт её больше не видит.
(лишний end я добавил чисто для проверки)
Загруженные файлы
27
Fly123, попробуйте на чистой карте перевести в режим lua, потом написать че-нибудь простенькое на lua. И запустить. Если запустится, значит в у вас в коде.
Сейчас без кода, и карты говорить не о чем. просто не могу понять, что вы делаете. и что у вас работает/не работает. верхние скрины ничего не говорят по сути мне.
были бы пошаговые действия +скрины, код и карта.

вызов функции происходит так:
onMouseClick()

у тебя вот такого в VSCode никогда не было? Он пишет что мол версия какая-то "переделанная", и что нужно обновить. Я нажимаю на галочку, он удаляет все, что выделено красным и оставляет эту функцию с созданием юнита, после чего карта перестаёт открыватся в редакторе и варкрафт её больше не видит.
такого никогда не было. Надо у умельцев спрашивать. Там нужно EmmyLua установить. И тогда встроенные скрипты common blizzard будет работать в файлах типа lua.
14
МрачныйВорон:
Fly123, попробуйте на чистой карте перевести в режим lua, потом написать че-нибудь простенькое на lua. И запустить.
Я так уже четыре раза пробовал. Щас установлю EmmyLua и попробую снова.

вызов функции происходит так:
onMouseClick()
Я её в CS и писал так ранее.
27
Fly123, так нужно в соответствии с этой установкой делать.

  1. устанавливаем VsCode
  2. устанавливаем Java (без нее онлайн поиск не работает. и возможно еще для чего то нужна.)
заметка: чтобы скачать одну из этих программ, пришлось регистрироваться на сайт.
  1. устанавливаем EmmyLua
  1. прописываем путь в соответствии с статьей, закидываем скрипты вроде common blizzard.
  2. перегружаем
  3. эмулятор работает только в файлах формата .lua типа когда вводишь Crea... и тебе сразу выдают CreateUnit и др функции в меню из скриптов
  4. дальше делают так как описывал copy-past. Весь код lua я могу хранить не в карте, а в скрипте. Удобно. Другого применения я не нашел VsCode, типа как запустить или че то такого. Есть еще folder-ы, т.е. архив карты можно перевести в папку, когда у меня ошибка (дебаггер можно закинуть xgm.guru/p/wc3/pcallback в карту - при условии что она у вас запустится), я в редакторе сохраняю в фолдере и открываю и достаю скрипт и нахожу номер строки по дебаггеру
Загруженные файлы
14
МрачныйВорон:
Fly123, так нужно в соответствии с этой установкой делать.
  1. прописываем путь в соответствии с статьей, закидываем скрипты вроде common blizzard.
Где взять эти скрипты? EmmyLua я установил уже давно, и без инсталяции Java и регистрации на Оракле. Теперь главное: понять где взять скрипты blizzard и common lua

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

там common.j.lua убери этот j короче надо common.lua blizzard.lua
Ты написал, что нужно путь указать, но в статье никакого пути, который надо указывать, я не наблюдаю. Там же только путь по которому надо скрипты кидать, так?
24
Там же в той теме в комментах мной расписаны некоторые нюансы настройки EmmyLua в вскоде, в составе другого плагина, правда...
14
prog:
Там же в той теме в комментах мной расписаны некоторые нюансы настройки EmmyLua в вскоде, в составе другого плагина, правда...
Да, я видел. Но мне с этим проще возится уже. Но ты всё-равно молодец.
24
Не, ну дело то ваше, долбитесь как хотите. Я рассказал про более вменяемый способ? Рассказал. Все, моя совесть чиста.
14
МрачныйВорон:
ага
Всё, VSCode заработал как нужно, но при попытке сохранить карту, в которой CS ссылается на код Lua, опять выдаёт ошибку мол "Jass юзаешь, да?!", хотя его там нет: онли Lua, и сами параметры совпадают. А код самой карты мне показывает как и раньше - непонятной и перекомканой писаниной (как на скринах выше). Ты мне сегодня помог намного больше, чем стоило бы (наверное), но не мог бы ты открыть эту карту у себя и посмотреть, что с ней не так? Там тот самый триггер я оставил, только отключил его через меню.
Загруженные файлы
27
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
карта пример прилагается. дело не программе, а в кривых руках)
Загруженные файлы
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.