Делаю регистрацию с дублированием данных в БД для игры Multi Theft Auto.
inputs[1] и inputs[2] - логин и пароль (только буквы и цифры)
После регистрации пользователя записывает в БД. В БД выставляются остальные значения по умолчанию.
Если запись в БД успешна, то скрипт снова обращается к БД и ищет данные игрока по нику и получает остальные данные, за тем спавнит пользователя, выдает ему деньги и т.п.
ПРОБЛЕМА:
local sNewUser = query("SELECT * FROM `userinfo` WHERE `nickname` = '"..tostring(inputs[1]).."'")
Данный запрос возвращает пустой стол
local sNewUser = query("SELECT * FROM `userinfo` WHERE `nickname` = 'test'")
Если делать такой запрос, то все возвращает.
Немного документации:
https://wiki.multitheftauto.com/wiki/DbQuery
Скрин структуры БД:
https://yapx.ru/v/ETIP1
Сам код:
local dbHost = 'localhost'
local dbName = 'test'
local dbUsername = 'root'
local dbPassword = ''
function query(...)
local queryHandle = dbQuery(dbConnect('mysql','host='..dbHost..';dbname='..dbName, dbUsername, dbPassword), ...)
if (not queryHandle) then
return nil
end
local rows = dbPoll(queryHandle, -1)
return rows
end
local nA = addAccount(inputs[1], inputs[2]) -- добавляем юзера в игру
local addA = query("INSERT INTO `userinfo` ('serial', 'nickname', 'password', 'team') VALUES ('"..tostring(getPlayerSerial(client)).."', '"..tostring(inputs[1]).."', '"..tostring(inputs[2]).."')") -- добавляем игрока в базу
if (nA and addA) then -- если удачно добавился
local sNewUser = query("SELECT * FROM `userinfo` WHERE `nickname` = '"..tostring(inputs[1]).."'") -- ищем игрока в базе по имени
if (sNewUser) then
for _, row in ipairs(sNewUser) do -- перебираем данные из базы
posX = row['posX'] -- позиция X
posY = row['posY'] -- позиция Y
posZ = row['posZ'] -- позиция Z
usrHealth = row['health'] -- здоровье
w11 = row['w11'] -- 11 слот оружия
usrTeam = row['team'] -- команда
usrSkinID = row['skin'] -- скин
usrMoney = row['money'] -- деньги
usrArmor = row['armor'] -- броня
outputDebugString('posX: '..posX)
outputDebugString('posY: '..posY)
outputDebugString('posZ: '..posZ)
outputDebugString('usrHealth: '..usrHealth)
outputDebugString('w11: '..w11)
outputDebugString('usrTeam: '..usrTeam)
outputDebugString('usrSkinID: '..usrSkinID)
outputDebugString('usrMoney: '..usrMoney)
outputDebugString('usrArmor: '..usrArmor)
end
logIn(client, nA, inputs[2]) -- логиним юзера
spawnPlayer(client, posX, posY, posZ, 0, usrSkinID, 0, 0) -- спавн (игрок, позиция x, y, z, положение, скин, интерьер, измерение)
setPlayerMoney (client, usrMoney) -- выдаем деньги
setTimer (setElementHealth, 50, 1, client, usrHealth) -- выдаем здоровье
setTimer (setPedArmor, 50, 1, client, usrArmor) -- выдаем армор
triggerClientEvent(client, "onClientSuccess", client) -- передаем юзеру, что все ок
--setPlayerTeam(client, getTeamFromName("User"))
--setAccountData(nA, "cash", 250000)
--triggerClientEvent(client, "onClientSuccess", client)
else
triggerClientEvent(client, "showErrorMessage", client, "Ошибка")
end
else
triggerClientEvent(client, "showErrorMessage", client, "Ошибка при создании аккаунта.")
end