nikitafloy Posted February 4, 2017 Share Posted February 4, 2017 On 18.01.2017 at 23:37, Elengar said: Можно ли как-нибудь обнаружить появление network trouble? Нет, но можно отследить 'timed out' Link to comment
nikitafloy Posted February 6, 2017 Share Posted February 6, 2017 On 17.01.2017 at 13:21, Jonathan.P said: Дайте пару советов, как сделать кустомный GUI. И если есть, порекомендуйте пожалуйста ресурсы на эту тему. guieditor Link to comment
Jonathan.P Posted February 24, 2017 Share Posted February 24, 2017 Привет. Нету возможности проверить, поэтому задаю глупый вопрос здесь. Если я использую triggerEvent на клиенте, то он будет триггериться на всех клиентов(если я в сурсе пропишу рут) или только на текущего(на того, откуда вызывается триггер)? Link to comment
AfterAll14 Posted February 24, 2017 Share Posted February 24, 2017 Только на текущий клиент. Link to comment
RellaX Posted March 17, 2017 Share Posted March 17, 2017 (edited) Решил сделать ворота, которые открываются при подъезде на маркер. Всё работает, только выдаёт warning: Bad argument @ 'getPedOccupiedVehicle' [Expected ped at argument 1, got nil] на маркер и с него. Код въезда(выезд почти такой же): function moveGate ( source, matchingDimension ) local theVehicle = getPedOccupiedVehicle ( source ) if ( theVehicle ) then moveObject(GATESFA, 3500, -1529.3800048828-10.3, 482.67999267578, 8.6999998092651, 0, 0, 0, "InOutQuad") end end addEventHandler("onMarkerHit", SFAMARKER, moveGate) Edited March 17, 2017 by RellaX Link to comment
K1parik Posted March 17, 2017 Share Posted March 17, 2017 if getElementType ( source ) == "vehicle" then 2 Link to comment
RellaX Posted March 17, 2017 Share Posted March 17, 2017 (edited) 26 minutes ago, K1parik said: if getElementType ( source ) == "vehicle" then Спасибо, только если толкнуть туда машину, они открются Edited March 17, 2017 by RellaX Link to comment
Strix Posted March 18, 2017 Share Posted March 18, 2017 23 hours ago, RellaX said: Спасибо, только если толкнуть туда машину, они открются Тут понадобится проверка на то, что в машине есть водитель. Её можно осуществить с помощью функции getVehicleOccupant Получится что-то вроде этого: if getVehicleOccupant(source, 0) then 1 Link to comment
RellaX Posted March 19, 2017 Share Posted March 19, 2017 15 hours ago, Strix said: Тут понадобится проверка на то, что в машине есть водитель. Её можно осуществить с помощью функции getVehicleOccupant Получится что-то вроде этого: if getVehicleOccupant(source, 0) then Спасибо большое, решено 1 Link to comment
MrFeed Posted May 4, 2017 Share Posted May 4, 2017 (edited) Помогите с ошибкой в аргументе function onPlayerCreateAccount(name, password, email) local accounts = dbPoll(dbQuery(connection, "SELECT * FROM `br_accounts`"), -1) > Ошибка в этой строке) local mk = 0 for k,v in ipairs(accounts) do if v["name"] == name:gsub("%s+", "") then exports["br_notifications"]:addNotification(client, "бла бла .", "error") return end Edited May 4, 2017 by MrFeed Link to comment
K1parik Posted May 15, 2017 Share Posted May 15, 2017 подскажите можно ли покрасить текст в guiCreateComboBox ? Link to comment
angryfatboy Posted May 20, 2017 Share Posted May 20, 2017 (edited) On 15.05.2017 at 22:53, K1parik said: подскажите можно ли покрасить текст в guiCreateComboBox ? guiSetProperty()http://web.archive.org/web/20120706081430/http://cegui.org.uk/static/WindowsLookProperties.html#Combobox Добрый вечер. Есть следующая функция и её вызов. Ошибок в дебаге нет, как и результата, значения в бд не меняются. Может я что то упускаю? Spoiler function db_account_data_set(player,data) if not DATA_INDEXES[player] then return end --data = {databasekey = 'databasekey',table = 'tablename',keys = {},values = {},replacement = {},rootkey = 'uid',rootkeyvalue = uid} for i,v in pairs(data.keys) do local current_query local current_prepare if data.replacement[i] and type(data.values[i]) ~= 'table' then current_prepare = dbPrepareString(HANDLERS[data.databasekey].handler,"UPDATE "..data.table.." SET "..v.." = '"..data.values[i].."' WHERE '"..data.rootkey.."' = '"..data.rootkeyvalue.."'") current_query = dbQuery(HANDLERS[data.databasekey].handler,current_prepare) dbFree(current_query) outputDebugString("SQL data UPDATE "..data.table.." SET "..v.." = '"..data.values[i].."' WHERE '"..data.rootkey.."' = '"..data.rootkeyvalue.."'",0,255,255,255) else local pre_query = dbQuery(HANDLERS[data.databasekey].handler, "SELECT * FROM "..data.table.." WHERE '"..data.rootkey.."' = '"..data.rootkeyvalue.."'") local pre_poll = dbPoll(pre_query,-1) dbFree(pre_query) if type(data.values[i]) == 'table' then local tbl_to_insert = toJSON(data.values[i]) current_prepare = dbPrepareString(HANDLERS[data.databasekey].handler,"UPDATE "..data.table.." SET "..v.." = '"..data.values[i].."' WHERE "..data.rootkey.." = '"..data.rootkeyvalue.."'") current_query = dbQuery(HANDLERS[data.databasekey].handler,current_prepare) dbFree(current_query) elseif tonumber(data.values[i]) then if pre_poll and pre_poll[1] then if not tonumber(pre_poll[1][data.keys[i]]) then outputDebugString('WARN: TRYING TO USE NAN VALUE WITH NUMBER// KEY:'..data.keys[i]..' // VALUE'..pre_poll[1][data.keys[i]],0,255,255,255) return end local new_value = tonumber(pre_poll[1][data.keys[i]])+data.values[i] current_prepare = dbPrepareString(HANDLERS[data.databasekey].handler,"UPDATE "..data.table.." SET "..v.." = '"..new_value.."'' WHERE '"..data.rootkey.."'' = '"..data.rootkeyvalue.."'") current_query = dbQuery(HANDLERS[data.databasekey].handler,current_prepare) end end end end end db_account_data_set(playerSource,{databasekey = "accounts",table = "pulse_accounts",keys = {"invitor","email"},values = {"invitor_name_new","email_new"},replacement = {true,true},rootkey = "uid",rootkeyvalue=DATA_INDEXES[playerSource]}) Edited May 20, 2017 by angryfatboy 1 Link to comment
Jonathan.P Posted June 10, 2017 Share Posted June 10, 2017 (edited) Привет. Нужно прикрепить обьект к авто на клиенте. Авто при этом серверное. Проблема в том, что при смене интерьера или измерения машины вместе с игроком, обьект остается в старом интерьере и не виден в новом, а нужно чтобы и обьект менял интерьер вместе с авто. Функция setElementParent, как я понял, не работает для элементов разных сторон(клиент и сервер). Возможно ли решение на клиенте? Edited June 10, 2017 by Jonathan.P Link to comment
Fabervox Posted June 11, 2017 Share Posted June 11, 2017 @Jonathan.P, если меняешь интерьер одному объекту, то и прикрепленным нужно менять. PS: Ездить в интерьерах?! Мсье знает толк... Link to comment
Jonathan.P Posted June 11, 2017 Share Posted June 11, 2017 (edited) @Fabervox, просто машина заезжает в гараж и тпхается в инт. С дименшонами тоже самое. Edited June 11, 2017 by Jonathan.P Link to comment
RellaX Posted June 25, 2017 Share Posted June 25, 2017 (edited) Разбирается кто-то с MySQL?Решил сделать авторизацию через MySQL, все действия работают нормально, но есть одно но:Если я допустим зарегистрировал в БД Логин: adMin / Пароль: sySadmin, то при авторизации я могу ввести admin и sysadmin, и спокойно зайду на аккаунт. То-есть MySQL плевать хотел на регистр.Reg: (exports.MySQL:execute("INSERT INTO accounts (Name, Password, Email, VIP, Reg_Serial, Reg_IP, Reg_Entr) VALUES (?,?,?,?,?,?,?)", Name, Password1, Email, 0, getPlayerSerial(source), getPlayerIP(source), datereg)) Log: exports.MySQL:singleQuery("SELECT * FROM accounts WHERE Name=? AND Password=? LIMIT 1",tostring(Name),tostring(Password)) Edited June 25, 2017 by RellaX Link to comment
Kenix Posted June 25, 2017 Share Posted June 25, 2017 Используйте оператор BINARY. Пример. SELECT * FROM `table` WHERE `column` = BINARY 'value' 1 Link to comment
RellaX Posted June 26, 2017 Share Posted June 26, 2017 (edited) 22 hours ago, Kenix said: Используйте оператор BINARY. Пример. SELECT * FROM `table` WHERE `column` = BINARY 'value' @Kenix, да спасибо, вчера уже сам нашёл. У меня есть ещё один такой вопрос: Я решил создать сервер с 0, чтобы он был связан только с mysql, без участия sql. Никак не могу понять, как получить аккаунт игрока, с которым я хочу начать действие, собственно кикнуть. WARNING: admin\1lvl.lua:12: Bad argument @ 'kickPlayer' [Expected player at argument 1, got string 'guest'] function pKick (source, command, player, ...) local kickuser = getPlayerFromName(player) if (kickuser) then if (...) then local message = table.concat ( { ... }, " " ) outputChatBox ("Администратор " .. getPlayerName(source) .. " кикнул " .. getPlayerName(player) .. ". Причина: " .. message, _root, 255, 100, 70 ) else outputChatBox ("Администратор " .. getPlayerName(source) .. " кикнул " .. getPlayerName(player) .. ".", _root, 255, 100, 70 ) end kickPlayer (kickuser, getPlayerName(source), message) else outputChatBox ("Ошибка! Введите: /pkick <игрок> <причина(можно без)>", source, 255, 100, 70 ) end end addCommandHandler ("pkick", pKick) Edited June 26, 2017 by RellaX Link to comment
K1parik Posted June 27, 2017 Share Posted June 27, 2017 19 hours ago, RellaX said: @Kenix, да спасибо, вчера уже сам нашёл. У меня есть ещё один такой вопрос: Я решил создать сервер с 0, чтобы он был связан только с mysql, без участия sql. Никак не могу понять, как получить аккаунт игрока, с которым я хочу начать действие, собственно кикнуть. WARNING: admin\1lvl.lua:12: Bad argument @ 'kickPlayer' [Expected player at argument 1, got string 'guest'] function pKick (source, command, player, ...) local kickuser = getPlayerFromName(player) if (kickuser) then if (...) then local message = table.concat ( { ... }, " " ) outputChatBox ("Администратор " .. getPlayerName(source) .. " кикнул " .. getPlayerName(player) .. ". Причина: " .. message, _root, 255, 100, 70 ) else outputChatBox ("Администратор " .. getPlayerName(source) .. " кикнул " .. getPlayerName(player) .. ".", _root, 255, 100, 70 ) end kickPlayer (kickuser, getPlayerName(source), message) else outputChatBox ("Ошибка! Введите: /pkick <игрок> <причина(можно без)>", source, 255, 100, 70 ) end end addCommandHandler ("pkick", pKick) получить аккаунт или просто кикнуть? если второе то в команде вводи ник а потом получай игрока getPlayerFromName Link to comment
RellaX Posted June 28, 2017 Share Posted June 28, 2017 (edited) 20 hours ago, K1parik said: получить аккаунт или просто кикнуть? если второе то в команде вводи ник а потом получай игрока getPlayerFromName Видишь ли, у меня регистрация и авторизация на MySQL, и я не добавлял функцию addAccount/LogIn. Я просто не могу получить аккаунт, ведь все игроки у меня гости (guest). Собственно покажу код для регистрации/авторизации: -- Авторизация аккаунта addEvent("onPlayerAttemptLogin",true) addEventHandler("onPlayerAttemptLogin",root, function (Name, Password) if (exports.MySQL:singleQuery("SELECT * FROM accounts WHERE BINARY Name=? LIMIT 1",tostring(Name))) then local accData = exports.MySQL:singleQuery("SELECT * FROM accounts WHERE BINARY Name=? AND BINARY Password=? LIMIT 1",tostring(Name),tostring(Password)) if (accData) then isPlayerLogged = true setPlayerName(source, Name) outputServerLog("LOGGED IN: " .. tostring(Name) .. "(" .. getPlayerSerial(source) .. "/" .. getPlayerIP(source) .. ")") outputChatBox ("• [Успешно] #BEBEBEВы вошли в аккаунт! (" .. Name .. ")", source, 19, 191, 19, true) spawnPlayer(source, 1208.369140, -1749.186889, 13.594351, 40, 230, 0, 0) setElementRotation(source, 0, 0, 40 , "default", true) setElementDimension(source, 0) setCameraTarget(source) setPlayerHudComponentVisible(source, "all", true) setElementFrozen(source, false) setPlayerMoney(source, tonumber(accData.Money)) triggerClientEvent(source,"closeLoginWindow", source) else outputChatBox ("• [Ошибка] #BEBEBEВы ввели неверный Ник и/или Пароль!", source, 230, 11, 11, true) end else outputChatBox ("• [Ошибка] #BEBEBEНик \"" .. Name .. "\" не зарегистрирован в базе данных!", source, 230, 11, 11, true) end end) -- Регистрация аккаунта addEvent("onPlayerAttemptRegister",true) addEventHandler("onPlayerAttemptRegister",root, function (Name, Password1, Password2, Email) if (exports.MySQL:singleQuery("SELECT Name FROM accounts WHERE BINARY Name=? LIMIT 1",Name)) then outputChatBox ("• [Ошибка] #BEBEBEНик \"" .. Name .. "\" уже зарегистрирован в базе данных!", source, 230, 11, 11, true) else local time = getRealTime() local datereg = string.format('%02d/%02d/%04d %02d:%02d', time.monthday, time.month + 1, time.year + 1900, time.hour, time.minute) if (exports.MySQL:execute("INSERT INTO accounts (Name, Password, Email, VIP, Reg_Serial, Reg_IP, Reg_Entr) VALUES (?,?,?,?,?,?,?)", Name, Password1, Email, 0, getPlayerSerial(source), getPlayerIP(source), datereg)) then outputChatBox ("• [Успешно] #BEBEBEВы зарегистрировали новый аккаунт! (" .. Name .. ")", source, 19, 191, 19, true) outputChatBox ("• [Помощь] #BEBEBEНажмите на \"Назад\" и введите данные аккаунта для входа!", source, 230, 153, 0, true) end end end) Edited June 28, 2017 by RellaX Link to comment
CharlySHOMAN Posted July 2, 2017 Share Posted July 2, 2017 Как после SetCameraMatrix дать возможность камере вращаться при движении мышки? Т.е. чтобы она вращалась именно из той точки, которую я задал с помощью SetCameraMatrix. Link to comment
GodOfPenguins Posted July 2, 2017 Share Posted July 2, 2017 Подскажите по поводу loadstring. В функцию передаётся переменная, в которой записан код как строка. Как выполнить этот код? loadstring(action1) не работает и ошибок в дебаг не выводит. В переменной всё на месте, остальные действия выполняются, поэтому проблема именно в loadstring. Link to comment
Kenix Posted July 2, 2017 Share Posted July 2, 2017 (edited) 5 hours ago, Taka said: Подскажите по поводу loadstring. В функцию передаётся переменная, в которой записан код как строка. Как выполнить этот код? loadstring(action1) не работает и ошибок в дебаг не выводит. В переменной всё на месте, остальные действия выполняются, поэтому проблема именно в loadstring. loadstring( "outputDebugString( 1 )" )(); loadstring возвращает функцию и строку ошибки (если есть). Функцию вы должны вызвать сами. На примере показ вызов функции сразу. Edited July 2, 2017 by Kenix 1 Link to comment
CharlySHOMAN Posted July 15, 2017 Share Posted July 15, 2017 (edited) // вопрос уже решён Edited July 15, 2017 by CharlySHOMAN Link to comment
CharlySHOMAN Posted July 20, 2017 Share Posted July 20, 2017 (edited) Столкнулся с такой проблемой.. Нужно выбрать уже существующий объект (кликом мыши, наведением курсора на объект или другими подобными способами). И всё вроде работает, но не для всех объектов. Я конечно не перебирал все объекты, но вот на вскидку попробовал несколько ID - и некоторые объекты не удалось найти (к примеру, ID 1000). Я пробовал 2 способами, но ни одним не нашёл объект ID 1000 Код: function clickFunction(_, _, _, _, worldX, worldY, worldZ, object) -- Способ 1 if object then if getElementType (object) == "object" then outputChatBox("Object") end end -- Способ 2 local camX, camY, camZ = getCameraMatrix() local result = processLineOfSight (camX, camY, camZ, worldX, worldY, worldZ, --[[ Здания ]] true, --[[ ТС ]] false, --[[ Игроки ]] false, --[[ Объекты ]] true, false, --[[ Полупрозрачные ? ]] true, --[[ Динамические ? ]] true, false, nil, false) -- Для объекта ID 1000 'result' выдаёт 'false' -- Для объектов, которые находятся 'result' выдаёт 'true' end addEventHandler ( "onClientClick", getRootElement(), clickFunction ) Edited July 20, 2017 by CharlySHOMAN 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