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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
27
3 года назад
Отредактирован MpW
1
Fly123, такое не должно быть. как вы создаете? lua-код куда сохраняете? прямо в карту? я в карту никогда не сохранял. так мне сложно помочь, тк. я не знаю причин.
самый простой вариант это copy-past, т.е. редактируете код в VsCode. Копируете весь код и вставляете в CustomScript. пример В рефорджете можно создать CustomScript, и туда код вставлять. Или кидаете все в шапку, тогда в шапке будет мешанина из разных систем. Запускаете смотрите. А что код в lua в VsCode можете сохранить отдельно.
Второй способ прямо из редактора запускать игру. это надо редактор настроить
на сайте/форуме не содержится объяснения как чего делать (для нубов конечно). я сам догадался из той статьи. До этого меня берги научил пользоваться программой для совместной работы, она запускала игру прямо, просто код вставлял. но она потом перестала работать. И мне уже лень ее снова запускать, настраивать. работаю в VsCode copy-paste
0
14
3 года назад
0
МрачныйВорон:
самый простой вариант это copy-past, т.е. редактируете код в VsCode. Копируете весь код и вставляете в CustomScript. Ля, я не знал, что так можно.
1
27
3 года назад
Отредактирован MpW
1
Fly123, я тоже не знал долгое время)

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

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

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

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

вызов функции происходит так:
onMouseClick()
Я её в CS и писал так ранее.
1
27
3 года назад
Отредактирован MpW
1
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 в карту - при условии что она у вас запустится), я в редакторе сохраняю в фолдере и открываю и достаю скрипт и нахожу номер строки по дебаггеру
Загруженные файлы
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
ага
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.