Dimosha Posted December 15, 2015 Share Posted December 15, 2015 (edited) Доброго времени суток, господа. Я только начал изучать Lua и его применением в MTA, но уже столкнулся с проблемой, над которой долго бьюсь. Возможно, Вы сможете помочь. Происходит следующее: игрок логинится и не спавнится (координаты нулевые). Взял за основу панель регистрации и логина и переделал её на MySQL. Серверная часть панели (авторизация. После нажатия игрок должен заспавниться): function attemptLogin ( user, pass ) if ( user and pass and type ( user ) == 'string' and type ( pass ) == 'string' ) then if(checkAccount(user,pass)) then setCameraTarget ( source, source ) triggerClientEvent ( source, "onClientPlayerLogin", source, user, pass) else message(source, "Неверный логин и(или) пароль!") end end return false end addEvent ( "Login:onClientAttemptLogin", true ) addEventHandler ( "Login:onClientAttemptLogin", root, attemptLogin ) function triggerLogin ( source, user, pass ) triggerClientEvent ( source, "onClientPlayerLogin", source, user, pass) end Затем пытаюсь поймать событие в другом скрипте: local spawnX, spawnY, spawnZ = 1959.55, -1714.46, 10 function joinHandler() spawnPlayer(source, spawnX, spawnY, spawnZ) fadeCamera(source, true) setCameraTarget(source, source) outputChatBox("Welcome to My Server", source) end addEventHandler("onClientPlayerLogin", getRootElement(), joinHandler) Но игрок не спавнится, сообщение не появляется. В чём может быть проблема? Или же как-то иначе поймать событие, когда игрок успешно вошёл в аккаунт? Edited December 16, 2015 by Guest Link to comment
AMARANT Posted December 16, 2015 Share Posted December 16, 2015 Но игрок не спавнится, сообщение не появляется. В чём может быть проблема? Или же как-то иначе поймать событие, когда игрок успешно вошёл в аккаунт? Я не знаю какую вы там брали панель регистрации и я не знаю как она работает. Но то что вы пытаетесь спавнить игрока на клиенте уже о многом говорит. Дело в том, что функция spawnPlayer исключительно серверная и соответственно использовать ее нужно только на сервере. А вы зачем-то триггерите событие на клиент чтобы там заспавнить игрока в нужном вам месте. Также убедитесь срабатывает ли вообще функция attemptLogin. И если да, то в ней же и прописывайте ваш спавн. P.S. Для отладки используйте команду /debugscript 3. Link to comment
Dimosha Posted December 16, 2015 Author Share Posted December 16, 2015 Спасибо Вам огромное. По поводу того, что функция SpawnPlayer - это я понял. Выше предоставлены куски серверных скриптов. Просто я не до конца понял, как работают триггеры, но после Вашего поста уже разобрался. Спасибо ещё раз. Link to comment
Dimosha Posted December 16, 2015 Author Share Posted December 16, 2015 И ещё вопрос.. Могу ли я как-то из первого серверного скрипта сделать выполнение функции другого серверного скрипта? Link to comment
AMARANT Posted December 16, 2015 Share Posted December 16, 2015 И ещё вопрос.. Могу ли я как-то из первого серверного скрипта сделать выполнение функции другого серверного скрипта? Конечно можете. Link to comment
Dimosha Posted December 16, 2015 Author Share Posted December 16, 2015 Можете подсказать как? Я, например, пишу на шарпе, плюсах и там проще, ибо подключил нэймспэйсы и всё. Здесь я не могу понять, возможно ли как-то подключить файл в виде инклуда или как-то иначе? Link to comment
AMARANT Posted December 16, 2015 Share Posted December 16, 2015 Если нужно вызвать функцию в одном и том же ресурсе, то вызывается она аналогично любой другой МТА-шной функции. Если надо вызвать функцию из другого ресурса, то используется специальная функция call. Link to comment
Dimosha Posted December 16, 2015 Author Share Posted December 16, 2015 Можете показать наипростейший пример? Вызывать буду в пределах одного ресурса (gamemode) Link to comment
AMARANT Posted December 16, 2015 Share Posted December 16, 2015 Я не знаю какой тут может быть пример, это то же самое что и вызывать обыкновенную функцию МТА. Создание: function MyFunction(var1,var2,var3) outputChatBox(tostring(var1)..", "..tostring(var2)..", "..tostring(var3)) end Вызов: MyFunction("Name",353,true) Link to comment
Dimosha Posted December 16, 2015 Author Share Posted December 16, 2015 Затупил, не о том подумал) Спасибо огромное! Link to comment
Kenix Posted December 16, 2015 Share Posted December 16, 2015 Парень не может понять область видимости ресурса и их скриптов. 1. Функции, переменные, можно определять глобально и вызывать их. Если они на одной стороне (сервер/клиент). server/script1.lua g_sStr = "Строка" server/script2.lua outputChatBox( g_sStr ); -- Строка meta.xml <meta> <script src="server/script1.lua" type="server" /> <script src="server/script2.lua" type="server" /> </meta> 2. Если ты определишь локальную переменную, то она будет доступна только внутри блока do ... end 3. Если тебе нужно вызывать из клиента на сервер, либо наборот. Из клиента на сервер. https://wiki.multitheftauto.com/index.ph ... erverEvent Из сервера на клиент. https://wiki.multitheftauto.com/index.ph ... lientEvent Link to comment
Dimosha Posted December 16, 2015 Author Share Posted December 16, 2015 Парень не может понять область видимости ресурса и их скриптов.1. Функции, переменные, можно определять глобально и вызывать их. Если они на одной стороне (сервер/клиент). server/script1.lua g_sStr = "Строка" server/script2.lua outputChatBox( g_sStr ); -- Строка meta.xml <meta> <script src="server/script1.lua" type="server" /> <script src="server/script2.lua" type="server" /> </meta> 2. Если ты определишь локальную переменную, то она будет доступна только внутри блока do ... end 3. Если тебе нужно вызывать из клиента на сервер, либо наборот. Из клиента на сервер. https://wiki.multitheftauto.com/index.ph ... erverEvent Из сервера на клиент. https://wiki.multitheftauto.com/index.ph ... lientEvent Так же понятно расписано, за что и Вам огромное спасибо Link to comment
Kenix Posted December 16, 2015 Share Posted December 16, 2015 Советую почитать учебники по Lua, чтобы получше понять область видимости. https://forum.multitheftauto.com/viewtopic.php?f=141&t=32458 Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now