Jump to content

Помогите дописать скрипт регистрации.


Recommended Posts

Есть скрипт, почти всё сделал. Не знаю как пописать регистрацию.

Файл с окошком:

function createLoginWindow() 
    local X = 0.375 
    local Y = 0.375 
    local Width = 0.30 
    local Height = 0.30 
    wdwLogin = guiCreateWindow(X, Y, Width, Height, "Пожалуйста, залогиньтесь", true) 
    tabPanel = guiCreateTabPanel(0, 0.1, 1, 1, true, wdwLogin) 
    tabLog = guiCreateTab("Залогиниться", tabPanel) 
    tabReg = guiCreateTab("Зарегестрироваться", tabPanel) 
    --Логин 
    X = 0.0825 
    Y = 0.2 
    Width = 0.25 
    Heidht = 0.25 
    guiCreateLabel(X, Y, Width, Height, "Имя", true, tabLog) 
    Y = 0.5 
    guiCreateLabel(X, Y, Width, Height, "Пароль", true, tabLog) 
    X = 0.415 
    Y = 0.2 
    Width = 0.5 
    Height = 0.15 
    edtUser = guiCreateEdit(X, Y, Width, Height, "", true, tabLog) 
    Y = 0.5 
    edtPass = guiCreateEdit(X, Y, Width, Height, "", true, tabLog) 
    guiEditSetMaxLength(edtUser, 50) 
    guiEditSetMaxLength(edtPass, 50) 
    X = 0.415 
    Y = 0.750 
    Width = 0.25 
    Height = 0.2 
    btnLogin = guiCreateButton(X, Y, Width, Height, "Логин", true, tabLog) 
    guiSetVisible(wdwLogin, false) 
     
    --Регистрация 
    X = 0.0825 
    Y = 0.2 
    Width = 0.25 
    Heidht = 0.25 
    guiCreateLabel(X, Y, Width, Height, "Имя", true, tabReg) 
    Y = 0.5 
    guiCreateLabel(X, Y, Width, Height, "Пароль", true, tabReg) 
    X = 0.415 
    Y = 0.2 
    Width = 0.5 
    Height = 0.15 
    edtUserR = guiCreateEdit(X, Y, Width, Height, "", true, tabReg) 
    Y = 0.5 
    edtPassR = guiCreateEdit(X, Y, Width, Height, "", true, tabReg) 
    guiEditSetMaxLength(edtUser, 50) 
    guiEditSetMaxLength(edtPass, 50) 
    guiEditSetMaxLength(edtMail, 50) 
    X = 0.415 
    Y = 0.750 
    Width = 0.25 
    Height = 0.2 
    btnReg = guiCreateButton(X, Y, Width, Height, "Войти", true, tabReg) 
    guiSetVisible(wdwLogin, false) 
    addEventHandler("onClientGUIClick", btnLogin, clientSubmitLogin, false) 
end 
addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()), 
    function() 
        createLoginWindow() 
        outputChatBox("Добро пожаловать на мой MTA:SA сервер, пожалуйста зологиньтесь") 
        if(wdwLogin ~=nil) then 
            guiSetVisible(wdwLogin, true) 
        else 
            outputChatBox("Ошибка, GUI не был создан.") 
        end 
        showCursor(true) 
        guiSetInputEnabled(true) 
    end 
) 
function clientSubmitLogin(button,state) 
    if button == "left" and state == "up" then 
        local username = guiGetText(edtUser) 
        local password = guiGetText(edtPass) 
        if username and password then 
            triggerServerEvent("submitLogin", getRootElement(), username, password) 
            guiSetInputEnabled(false) 
            guiSetVisible(wdwLogin, false) 
            showCursor(false) 
        else 
            outputChatBox("Пожалуйста, введите логин и пароль.") 
        end 
    end 
end 
function clientSubmitReg(button,state) 
    if button == "left" and state == "up" then 
        local usernameR = guiGetText(edtUserR) 
        local passwordR = guiGetText(edtPassR) 
        if username and password then 
            triggerServerEvent("submitLoginR", getRootElement(), usernameR, passwordR) 
            guiSetInputEnabled(false) 
            guiSetVisible(wdwLogin, false) 
            showCursor(false) 
        else 
            outputChatBox("Пожалуйста, заполните все поля!") 
        end 
    end 
end 

Файл с функциями спавна:

local spawnX, spawnY, spawnZ = -711, 957, 13 
P_CONNECTION = dbConnect( 'sqlite', 'users.db' ) 
  
function Login( sLogin, sPassword ) 
    local pQuery = dbQuery( P_CONNECTION, "SELECT * FROM `users` WHERE `login` = '" .. sLogin .. "'" ) 
    local aQuery = dbPoll( pQuery, - 1 ) 
    
    if type( aQuery ) == 'table' and #aQuery > 0 then 
            --Аккаунт найден 
        if sPassword == aQuery[ 1 ][ 'password' ] then 
            spawnPlayer(client, spawnX, spawnY, spawnZ) 
            fadeCamera(client, true) 
            setCameraTarget(client, client) 
            outputChatBox("Добро пожаловать на мой сервер.", client) 
        end 
    else 
       outputChatBox("Неправильный логин или пароль!") 
    end 
end 
function Register( sLoginR, sPasswordR ) 
    local pExec = dbExec( P_CONNECTION, "INSERT INTO `users` VALUES(login, password, mail)", "sLoginR", "sPasswordR" ) 
end 
function ifUserDead() 
    spawnPlayer(source, spawnX, spawnY, spawnZ) 
    fadeCamera(source, true) 
    setCameraTarget(source, source) 
end 
function playerDied(totalAmmo, killer, killerWeapon, bodypart) 
    outputChatBox(getPlayerName(source).." Умер!") 
end 
addEvent("submitLogin",true) 
addEventHandler("submitLogin", root, Login) 
addEvent("submitLoginR",true) 
addEventHandler("submitLoginR", root, Register) 
addEventHandler("onPlayerWasted", getRootElement(), ifUserDead) 
addEventHandler("onPlayerWasted", getRootElement(), playerDied) 

Link to comment

Что конкретно не получается?

Если алгоритм не знаешь какой, то:

1) После нажатия кнопки зарегестрироваться, получаешь данные (E-Mail, Login, Pass) из эдитбоксов.

2) Проверяешь данные на валидность.

3) Если все верно, добавляешь данные в базу данных, и пишешь игроку, что он зареган, если данные наверны, то показываешь ошибку.

Link to comment
Что конкретно не получается?

Если алгоритм не знаешь какой, то:

1) После нажатия кнопки зарегестрироваться, получаешь данные (E-Mail, Login, Pass) из эдитбоксов.

2) Проверяешь данные на валидность.

3) Если все верно, добавляешь данные в базу данных, и пишешь игроку, что он зареган, если данные наверны, то показываешь ошибку.

2.1) Проверяешь существует ли пользователь с такими данными :)

Link to comment
Что конкретно не получается?

Если алгоритм не знаешь какой, то:

1) После нажатия кнопки зарегестрироваться, получаешь данные (E-Mail, Login, Pass) из эдитбоксов.

2) Проверяешь данные на валидность.

3) Если все верно, добавляешь данные в базу данных, и пишешь игроку, что он зареган, если данные наверны, то показываешь ошибку.

2.1) Проверяешь существует ли пользователь с такими данными :)

Именно так)

Link to comment
Вот еще вопрос:
local pExec = dbExec( P_CONNECTION, "INSERT INTO `users` VALUES(login, password)", "WHERE `login` = '" .. LoginR .. "', WHERE `password` = '" .. PasswordR .. "'" ) 

Можете поправить?

Не боишься SQL-инъекций? :)

Link to comment
Ну тогда как защитить? Скрипт не готов. Ломаю голову, как в login и password врезать значения LoginR PasswordR

http://ru.wikipedia.org/wiki/Внедрение_SQL-кода

Вам нужно контролировать всё что вводит игрок перед тем как отправлять данные на сервер.

  
local sLogin = guiGetText( ГУИ_Элемент_Едит ) 
local sPassword = guiGetText( ГУИ_Элемент_Едит ) 
  
if sLogin:match '[a-zA-Z0-9_.-]+$' then 
 -- Всё гуд 
else 
 -- Есть запрещенные символы 
end 
  
if sPassword:match '[a-zA-Z0-9]+$' then 
 -- Всё гуд 
else 
 -- Есть запрещенные символы 
end 
  

Как вы видите это можно сделать через луа шаблоны.

Link to comment
local sLogin = guiGetText( ГУИ_Элемент_Едит ) 
local sPassword = guiGetText( ГУИ_Элемент_Едит ) 
  
if sLogin:match '[a-zA-Z0-9_.-]+$' then 
    if sPassword:match '[a-zA-Z0-9]+$' then 
        --База данных(осталось запилить только ее) 
    else 
        outputChatBox("Логин содержит запрещенные символы") 
    else 
        outputChatBox("Пароль содержит запрещенные символы") 
    end 
end 

Вот переделал, надеюсь будет работать. И вот последний вопрос: Как в insert засунуть логин и пароль игрока? если прямо дать LoginR и PasswordR то я думаю запишутся эти надписи а не их содержимое

Link to comment
Эм. Мне в таблицу в поля нужно добавить значения. Как я знаю для этого нужен insert.

У тебя тогда синтаксис не правильный...

INSERT INTO `tableName` (`login`, `pass`) VALUES ('LOGIN', 'PASS') 

Вот примерный синтаксис

Ну вместо LOGIN и PASS вставляешь свои значения, вот так:

local query = "INSERT INTO `tableName` (`login`, `pass`) VALUES ('"..loginName.."', '"..passWord.."')" 

Link to comment
function Register( LoginR, PasswordR ) 
    local aQuery = dbPoll(pQuery, - 1) 
    local addUser = dbExec( P_CONNECTION, "INSERT INTO `users` (`login`, `password`) VALUES('"..LoginR.."', '"..PasswordR.."')") 
    local LoginR = guiGetText( edtUserR ) 
    local PasswordR = guiGetText( edtPassR ) 
    if type(aQuery) == 'table' and #aQuery > 0 then 
        outputChatBox("Аккаунт уже зарегистрирован!") 
        if type(aQuery) == 'table' and #aQuery < 1 then 
            if sLogin:match '[a-zA-Z0-9_.-]+$' then 
                if sPassword:match '[a-zA-Z0-9]+$' then 
                    addUser 
                    outputChatBox("Регистрация завершена! Можете залогиниться!") 
                else 
                    outputChatBox("Пароль содержит запрещенные символы") 
                end 
            else 
                outputChatBox("Логин содержит запрещенные символы") 
            end 
        end 
    end 
end 

Выдает ошибку:

[15:58:47] SCRIPT ERROR: mymod/spawn.lua:31: '=' expected near 'outputChatBox' 
[15:58:47] WARNING: Loading script failed: mymod/spawn.lua:31: '=' expected near 
 'outputChatBox' 
  

Link to comment
function Register( LoginR, PasswordR ) 
    local aQuery = dbPoll(pQuery, - 1) 
    local addUser = dbExec( P_CONNECTION, "INSERT INTO `users` (`login`, `password`) VALUES('"..LoginR.."', '"..PasswordR.."')") 
    local LoginR = guiGetText( edtUserR ) 
    local PasswordR = guiGetText( edtPassR ) 
    if type(aQuery) == 'table' and #aQuery > 0 then 
        outputChatBox("Аккаунт уже зарегистрирован!") 
        if type(aQuery) == 'table' and #aQuery < 1 then 
            if sLogin:match '[a-zA-Z0-9_.-]+$' then 
                if sPassword:match '[a-zA-Z0-9]+$' then 
                    addUser 
                    outputChatBox("Регистрация завершена! Можете залогиниться!") 
                else 
                    outputChatBox("Пароль содержит запрещенные символы") 
                end 
            else 
                outputChatBox("Логин содержит запрещенные символы") 
            end 
        end 
    end 
end 

Выдает ошибку:

[15:58:47] SCRIPT ERROR: mymod/spawn.lua:31: '=' expected near 'outputChatBox' 
[15:58:47] WARNING: Loading script failed: mymod/spawn.lua:31: '=' expected near 
 'outputChatBox' 
  

Во первых: строчку 3 перенеси на 11 строку

А во вторых, строчки не совпадают у тебя из дебага и в выложеном коде! Когда выкладываешь пиши на какой строчке в выложенном коде ошибка.

Link to comment
function Register( LoginR, PasswordR ) 
    local aQuery = dbPoll(pQuery, - 1) 
    local addUser = dbExec( P_CONNECTION, "INSERT INTO `users` (`login`, `password`) VALUES('"..LoginR.."', '"..PasswordR.."')") 
    local LoginR = guiGetText( edtUserR ) 
    local PasswordR = guiGetText( edtPassR ) 
    if type(aQuery) == 'table' and #aQuery > 0 then 
        outputChatBox("Аккаунт уже зарегистрирован!") 
        if type(aQuery) == 'table' and #aQuery < 1 then 
            if sLogin:match '[a-zA-Z0-9_.-]+$' then 
                if sPassword:match '[a-zA-Z0-9]+$' then 
                    addUser 
                    outputChatBox("Регистрация завершена! Можете залогиниться!") 
                else 
                    outputChatBox("Пароль содержит запрещенные символы") 
                end 
            else 
                outputChatBox("Логин содержит запрещенные символы") 
            end 
        end 
    end 
end 

Выдает ошибку:

[15:58:47] SCRIPT ERROR: mymod/spawn.lua:31: '=' expected near 'outputChatBox' 
[15:58:47] WARNING: Loading script failed: mymod/spawn.lua:31: '=' expected near 
 'outputChatBox' 
  

addUser 

Что это?( строка 11 )

У тебя вообще всё не верно, серверные функции вызываются только на сервере, а ты их на клиенте вызываешь :/

Link to comment
function Register( LoginR, PasswordR ) 
    local aQuery = dbPoll(pQuery, - 1) 
    local addUser = dbExec( P_CONNECTION, "INSERT INTO `users` (`login`, `password`) VALUES('"..LoginR.."', '"..PasswordR.."')") 
    local LoginR = guiGetText( edtUserR ) 
    local PasswordR = guiGetText( edtPassR ) 
    if type(aQuery) == 'table' and #aQuery > 0 then 
        outputChatBox("Аккаунт уже зарегистрирован!") 
        if type(aQuery) == 'table' and #aQuery < 1 then 
            if sLogin:match '[a-zA-Z0-9_.-]+$' then 
                if sPassword:match '[a-zA-Z0-9]+$' then 
                    addUser 
                    outputChatBox("Регистрация завершена! Можете залогиниться!") 
                else 
                    outputChatBox("Пароль содержит запрещенные символы") 
                end 
            else 
                outputChatBox("Логин содержит запрещенные символы") 
            end 
        end 
    end 
end 

Выдает ошибку:

[15:58:47] SCRIPT ERROR: mymod/spawn.lua:31: '=' expected near 'outputChatBox' 
[15:58:47] WARNING: Loading script failed: mymod/spawn.lua:31: '=' expected near 
 'outputChatBox' 
  

addUser 

Что это?( строка 11 )

У тебя вообще всё не верно, серверные функции вызываются только на сервере, а ты их на клиенте вызываешь :/

Эм, где тут клиентские функции?

Link to comment

Из моего далекого поста:

Вы можете невооруженным глазом увидеть, что цвета функций в BB коде определяет где она может выполняться ( красный - на клиенте, оранжевый - на сервере, синий - на клиенте и на сервере )
Link to comment
Из моего далекого поста:
Вы можете невооруженным глазом увидеть, что цвета функций в BB коде определяет где она может выполняться ( красный - на клиенте, оранжевый - на сервере, синий - на клиенте и на сервере )

Не так уж и далекий)

Да, кстати вся работа с базами данных проходит на серверной части!

Link to comment

:oops:

Еще ошибка:

[16:51:23] ERROR: mymod/spawn.lua:27: attempt to index local 'PasswordR' (a nil 
value) 

function Register( sLoginR, usernameR, PasswordR ) 
    local pQuery = dbQuery( P_CONNECTION, "SELECT * FROM `users` WHERE `login` = '" .. sLoginR .. "'" ) 
    local aQuery = dbPoll( pQuery, - 1 ) 
    if type(aQuery) == 'table' and #aQuery > 0 then 
        outputChatBox("Аккаунт уже зарегистрирован!") 
    end 
        if usernameR:match '[a-zA-Z0-9_.-]+$' then 
            if PasswordR:match '[a-zA-Z0-9]+$' then 
                outputChatBox("Регистрация завершена! Можете залогиниться!") 
                addUser = dbExec( P_CONNECTION, "INSERT INTO `users` (`login`, `password`) VALUES('"..usernameR.."', '"..PasswordR.."')") 
            else 
                outputChatBox("Пароль содержит запрещенные символы") 
            end 
        else 
            outputChatBox("Логин содержит запрещенные символы") 
        end 
    end 

function clientSubmitReg(button,state) 
    if button == "left" and state == "up" then 
        local usernameR = guiGetText(edtUserR) 
        local PasswordR = guiGetText(edtPassR) 
        if usernameR and PasswordR then 
            triggerServerEvent("submitReg", getRootElement(), usernameR, PasswordR) 
            guiSetInputEnabled(false) 
            guiSetVisible(wdwLogin, false) 
            showCursor(false) 
        else 
            outputChatBox("Пожалуйста, заполните все поля!") 
        end 
    end 
end 

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...