Jump to content

Не понимаю, в чём ошибка. Помогите


Recommended Posts

Доброго времени суток, господа. Я только начал изучать 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 by Guest
Link to comment
Но игрок не спавнится, сообщение не появляется. В чём может быть проблема? Или же как-то иначе поймать событие, когда игрок успешно вошёл в аккаунт?

Я не знаю какую вы там брали панель регистрации и я не знаю как она работает. Но то что вы пытаетесь спавнить игрока на клиенте уже о многом говорит. Дело в том, что функция spawnPlayer исключительно серверная и соответственно использовать ее нужно только на сервере. А вы зачем-то триггерите событие на клиент чтобы там заспавнить игрока в нужном вам месте. Также убедитесь срабатывает ли вообще функция attemptLogin. И если да, то в ней же и прописывайте ваш спавн.

P.S. Для отладки используйте команду /debugscript 3.

Link to comment

Спасибо Вам огромное. По поводу того, что функция SpawnPlayer - это я понял. Выше предоставлены куски серверных скриптов. Просто я не до конца понял, как работают триггеры, но после Вашего поста уже разобрался. Спасибо ещё раз.

Link to comment

Можете подсказать как? Я, например, пишу на шарпе, плюсах и там проще, ибо подключил нэймспэйсы и всё. Здесь я не могу понять, возможно ли как-то подключить файл в виде инклуда или как-то иначе?

Link to comment

Если нужно вызвать функцию в одном и том же ресурсе, то вызывается она аналогично любой другой МТА-шной функции. Если надо вызвать функцию из другого ресурса, то используется специальная функция call.

Link to comment

Я не знаю какой тут может быть пример, это то же самое что и вызывать обыкновенную функцию МТА.

Создание:

function MyFunction(var1,var2,var3) 
outputChatBox(tostring(var1)..", "..tostring(var2)..", "..tostring(var3)) 
end 

Вызов:

MyFunction("Name",353,true) 

Link to comment

Парень не может понять область видимости ресурса и их скриптов.

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
Парень не может понять область видимости ресурса и их скриптов.

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

Так же понятно расписано, за что и Вам огромное спасибо :wink:

Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...