Charan Posted June 25, 2017 Share Posted June 25, 2017 So i play on my server and i put some heavy mods of about 140 mb and my some people who join have bad internet connection and sometimes my upload rate slows down , so the login panel keeps annoying the hell out of people is there any way i can like to bypass login panel and then open it after player has downloaded? Link to comment
WorthlessCynomys Posted June 25, 2017 Share Posted June 25, 2017 Maybe this can help you. Link to comment
Charan Posted June 25, 2017 Author Share Posted June 25, 2017 (edited) 6 minutes ago, StormFighter said: Maybe this can help you. i did something like that ill give you the code 6 minutes ago, StormFighter said: Maybe this can help you. Client.LUA ------------------------------------------ -- Dx Login Panel -- ------------------------------------------ -- Developer: Braydon Davis (xXMADEXx) -- -- File: client.lua -- -- Copyright 2013 (C) Braydon Davis -- -- All rights reserved. -- ------------------------------------------ local enableGuest = true; local sx, sy = guiGetScreenSize ( ) local pX, pY = ( sx / 2 - 485 / 2 ), ( sy / 2 - 231 / 2 ) local username = guiCreateEdit(pX+156, pY+61, 288, 33, "", false) guiSetVisible ( username, false ) local password = guiCreateEdit(pX+156, pY+121, 288, 33, "", false) guiSetVisible ( password, false ) guiEditSetMasked(password, true) local window = guiCreateWindow( ( sx / 2 - 266 / 2 ), ( sy / 2 - 208 / 2 ), 266, 208, "Login Panel Message", false) guiWindowSetMovable(window, false) guiWindowSetSizable(window, false) guiSetVisible ( window, false ) guiSetAlpha ( window, 1 ) local exitBtn = guiCreateButton(155, 162, 101, 36, "Exit", false, window) local infoLbl = guiCreateLabel(18, 26, 228, 130, "Message", false, window) local isOpen = false; local isLoggedin = false; local data = { login = { hovering = false, alphaMode = false, loginTextAlpha = 235, colors = { 255, 255, 255 } }, reg = { hovering = false, alphaMode = false, loginTextAlpha = 235, colors = { 255, 255, 255 } }, guest = { hovering = false, alphaMode = false, loginTextAlpha = 235, colors = { 255, 255, 255 } } } function dxDrawLoginPanel( ) -- default: 350, 266 if ( isOpen ) then dxDrawRectangle(pX, pY, 485, 231, tocolor(0, 0, 0, 180), false) dxDrawText("Login", pX, pY, 870, 314, tocolor(255, 255, 255, 255), 1.50, "bankgothic", "center", "top", false, false, false, false, false) dxDrawLine(pX, pY+48, pX+485, pY+48, tocolor(255, 255, 255, 255), 1, false) dxDrawText("Username:", pX+10, pY+69, 506, 368, tocolor(255, 255, 255, 255), 0.80, "bankgothic", "left", "top", false, false, false, false, false) dxDrawText("Password:", pX+10, pY+129, 506, 428, tocolor(255, 255, 255, 255), 0.80, "bankgothic", "left", "top", false, false, false, false, false) dxDrawLine(pX+281, pY+168, pX+281, pY+168+34, tocolor(255, 255, 255, 255), 1, false) local r, g, b = unpack ( data.login.colors ) dxDrawText("Login", pX+166, pY+167, 600, 468, tocolor( r, g, b, data.login.loginTextAlpha), 1.00, "bankgothic", "left", "top", false, false, false, false, false) local r, g, b = unpack ( data.reg.colors ) dxDrawText("Register", pX+305, pY+167, 794, 468, tocolor(r, g, b, data.reg.loginTextAlpha), 1.00, "bankgothic", "left", "top", false, false, false, false, false) if ( enableGuest ) then local r, g, b = unpack ( data.guest.colors ) dxDrawText("Guest", pX+40, pY+167, 600, 468, tocolor( r, g, b, data.guest.loginTextAlpha), 1.00, "bankgothic", "left", "top", false, false, false, false, false) dxDrawLine(pX+155, pY+168, pX+155, pY+168+34, tocolor(255, 255, 255, 255), 1, false) end -- give fade effect if ( data.login.hovering ) then data.login.colors = { 255, 140, 0 } local alpha = data.login.loginTextAlpha if ( not data.login.alphaMode ) then data.login.loginTextAlpha = alpha - 5 if ( data.login.loginTextAlpha <= 50 ) then data.login.alphaMode = true end else data.login.loginTextAlpha = alpha + 5 if ( data.login.loginTextAlpha >= 235 ) then data.login.alphaMode = false end end elseif ( data.reg.hovering ) then data.reg.colors = { 255, 140, 0 } local alpha = data.reg.loginTextAlpha if ( not data.reg.alphaMode ) then data.reg.loginTextAlpha = alpha - 5 if ( data.reg.loginTextAlpha <= 50 ) then data.reg.alphaMode = true end else data.reg.loginTextAlpha = alpha + 5 if ( data.reg.loginTextAlpha >= 235 ) then data.reg.alphaMode = false end end elseif ( data.guest.hovering ) then data.guest.colors = { 255, 140, 0 } local alpha = data.guest.loginTextAlpha if ( not data.guest.alphaMode ) then data.guest.loginTextAlpha = alpha - 5 if ( data.guest.loginTextAlpha <= 50 ) then data.guest.alphaMode = true end else data.guest.loginTextAlpha = alpha + 5 if ( data.guest.loginTextAlpha >= 235 ) then data.guest.alphaMode = false end end else data.login.loginTextAlpha = 235 data.guest.loginTextAlpha = 235 data.reg.loginTextAlpha = 235 data.login.colors = { 255, 255, 255 } data.guest.colors = { 255, 255, 255 } data.reg.colors = { 255, 255, 255 } end end end function cursorMove ( _, _, x, y ) if ( isCursorShowing ( ) and not guiGetVisible ( window ) and isOpen) then if ( y >= pY+170 and y <= pY+200 ) then if ( x >= pX+161 and x <= pX+251 ) then data.login.hovering = true return elseif ( x >= pX+305 and x <= pX+445 ) then data.reg.hovering = true return elseif ( x >= pX+40 and x <= pX+135 ) then data.guest.hovering = true return end end end data.login.hovering = false data.reg.hovering = false data.guest.hovering = false end function openLogin ( ) addEventHandler ( "onClientPreRender", root, dxDrawLoginPanel ) addEventHandler ( 'onClientCursorMove', root, cursorMove ) addEventHandler ( "onClientClick", root, clientClicking ) guiSetInputMode ( "no_binds_when_editing" ) guiSetVisible ( password, true ) guiSetVisible ( username, true ) showCursor ( true ) addEventHandler ( 'onClientGUIClick', root, clientClosingErrorWindowEvent ) isOpen = true showChat(false) end addEvent ( "onClientPlayerLogout", true ) addEventHandler ( 'onClientPlayerLogout', root, openLogin ) addEvent ( "onClientFileDownloadComplete", true ) addEventHandler ( "onClientFileDownloadComplete", root, openLogin ) function closeLogin ( ) removeEventHandler ( "onClientPreRender", root, dxDrawLoginPanel ) removeEventHandler ( 'onClientCursorMove', root, cursorMove ) removeEventHandler ( "onClientClick", root, clientClicking ) guiSetVisible ( password, false ) guiSetVisible ( username, false ) showCursor ( false ) removeEventHandler ( 'onClientGUIClick', root, clientClosingErrorWindowEvent ) guiSetVisible ( window, false ) isOpen = false isLoggedin = true showChat(true) end addEvent ( "onClientPlayerLogin", true ) addEventHandler ( "onClientPlayerLogin", root, closeLogin ) addEvent ( "onClientFileDownloadComplete", false ) addEventHandler ( "onClientFileDownloadComplete", root, closeLogin ) function sendError ( msg ) if ( not guiGetVisible ( window ) ) then guiSetVisible ( window, true ) guiSetText ( infoLbl, msg ) guiBringToFront ( window ) end end addEvent ( "onPlayerLoginPanelError", true ) addEventHandler ( "onPlayerLoginPanelError", root, sendError ) function clientClicking ( btn, state, x, y ) if ( btn == 'left' and not guiGetVisible ( window ) and state == 'down' and isOpen ) then if ( y >= pY+170 and y <= pY+200 ) then local user, pass = guiGetText ( username ), guiGetText ( password ) -- Login Button -- if ( x >= pX+156 and x <= pX+246 ) then if ( string.gsub ( user, ' ', '' ) ~= '' and string.gsub ( pass, ' ', '' ) ~= '' ) then if ( string.find ( user, '%s' ) ) then return sendError ( "Spaces (' ') are not allowed\nin the username." ) end if ( string.find ( pass, '%s' ) ) then return sendError ( "Spaces (' ') are not allowed\nin the password." ) end triggerServerEvent ( "Login:onClientAttemptLogin", localPlayer, user, pass ) else sendError ( "A username and password are\nrequired to access the server." ) end -- register button elseif ( x >= pX+300 and x <= pX+440 ) then if ( string.gsub ( user, ' ', '' ) ~= '' and string.gsub ( pass, ' ', '' ) ~= '' ) then if ( string.find ( user, '%s' ) ) then return sendError ( "Spaces are not allowed\nin the username." ) end if ( string.find ( pass, '%s' ) ) then return sendError ( "Spaces are not allowed\nin the password." ) end if ( string.len ( user ) < 5 ) then return sendError ( "You're username must be at\nleast 5 characters long." ) end if ( string.len ( pass ) < 6 ) then return sendError ( "You're password must be at\nleast 6 characters long." ) end triggerServerEvent ( "Login:onClientAttemptRegistration", localPlayer, user, pass ) else sendError ( "A username and password are\nrequired to access the server." ) end -- play as guest elseif ( x >= pX+40 and x <= pX+135 ) then closeLogin ( ) triggerServerEvent ( "Login:doClientGuestLogin", localPlayer ) end end end end function clientClosingErrorWindowEvent( ) if ( source == exitBtn ) then guiSetVisible ( window, false ) end end function isClientLoggedin ( ) return isLoggedin end setTimer ( function ( ) openLogin ( ) end, 700, 1 ) SERVER.LUA ------------------------------------------ -- Dx Login Panel -- ------------------------------------------ -- Developer: Braydon Davis (xXMADEXx) -- -- File: server.lua -- -- Copyright 2013 (C) Braydon Davis -- -- All rights reserved. -- ------------------------------------------ local cameras = { { 329.10980224609, -2117.2749023438, 50.161201477051, 329.65179443359, -2116.4926757813, 49.853763580322 }, { 1266.0053710938, -1965.7087402344, 114.59829711914, 1265.1549072266, -1966.1115722656, 114.25980377197 }, { 1514.0283203125, -1716.5743408203, 39.910701751709, 1514.5087890625, -1715.865234375, 39.394691467285 }, { 1338.7514648438, -875.66558837891, 99.84880065918, 1339.4935302734, -875.07824707031, 99.52579498291 }, { 1426.5421142578, -725.40289306641, 120.97090148926, 1427.3695068359, -725.00805664063, 120.571434021 }, { 1357.5914306641, -592.23327636719, 125.15190124512, 1357.1751708984, -593.02673339844, 124.70780944824 }, { 988.01123046875, -341.88409423828, 74.752601623535, 988.70251464844, -342.45135498047, 75.200187683105 }, { -224.32290649414, -153.71020507813, 35.085899353027, -223.61195373535, -153.04695129395, 34.852146148682 } } function openView( plr ) local theplr = nil if ( source and getElementType ( source ) == 'player' ) then theplr = source elseif ( plr and getElementType ( plr ) == 'player' ) then theplr = plr end setTimer ( function ( p ) local ind = math.random ( #cameras ) setCameraMatrix ( p, unpack ( cameras[ind] ) ) end, 700, 1, theplr ) end addEventHandler ( "onPlayerJoin", root, openView ) addEventHandler ( "onPlayerLogout", root, openView ) --addCommandHandler ( 'view', openView ) function attemptLogin ( user, pass ) if ( user and pass and type ( user ) == 'string' and type ( pass ) == 'string' ) then --local user = string.lower ( user ) --local pass = string.lower ( pass ) local account = getAccount ( user ) if ( account ) then if ( not logIn ( source, account, pass ) ) then message ( source, "Incorrect password." ) return false end setCameraTarget ( source, source ) triggerLogin ( source, user, pass ) else message ( source, "Unknown account." ) return false end end return false end addEvent ( "Login:onClientAttemptLogin", true ) addEventHandler ( "Login:onClientAttemptLogin", root, attemptLogin ) function attemptRegister ( user, pass ) if ( user and pass and type ( user ) == 'string' and type ( pass ) == 'string' ) then --local user = string.lower ( user ) --local pass = string.lower ( pass ) local account = getAccount ( user ) if ( not account ) then local account = addAccount ( user, pass ) if ( account ) then if ( not logIn ( source, account, pass ) ) then return message ( source, "Logging in has failed." ) end setCameraTarget ( source, source ) triggerLogin ( source, user, pass ) else message ( source, "Adding account failed.\nPlease report to an admin." ) end else message ( source, "This account already exists." ) end end return false end addEvent ( "Login:onClientAttemptRegistration", true ) addEventHandler ( "Login:onClientAttemptRegistration", root, attemptRegister ) function message ( source, msg ) triggerClientEvent ( source, "onPlayerLoginPanelError", source, msg ) end function triggerLogin ( source, user, pass ) triggerClientEvent ( source, "onClientPlayerLogin", source, user, pass ) end addEventHandler ( 'onPlayerLogout', root, function ( ) triggerClientEvent ( source, 'onClientPlayerLogout', source ) end ) addEvent ( 'Login:doClientGuestLogin', true ) addEventHandler ( 'Login:doClientGuestLogin', root, function ( ) setCameraTarget ( source ) end ) LINE 157 FOR QUICK LOOK Edited June 25, 2017 by Charan Link to comment
WorthlessCynomys Posted June 25, 2017 Share Posted June 25, 2017 Well... you don't have to add the basic events of MTA. I'll look at your code from PC. I'm on mobile, so it's hard to read such a long code. Link to comment
WorthlessCynomys Posted June 25, 2017 Share Posted June 25, 2017 I'd make a table on client side, which contains all your resources and a state, and when a resource has downloaded, I'd set it in the table, then run a check to see if every resource is downloaded, and if that comes back true, I'd show the login panel. So I imagine it like this (of course there could be a better solution): resources = { firstResource = false secondResource = false } addEventHandler("onClientFileDownloadComplete", root, function() local resourceName = getResourceName(source) for i, v in pairs(resources) do if (i == resourceName) then resources[i] = true end end for i, v in pairs(resources) do if (v == false) then ready = false break else ready = true end end if (ready == true) then -- Make your login visible end end ) NOT TESTED 1 Link to comment
Ayush Rathore Posted June 25, 2017 Share Posted June 25, 2017 4 hours ago, Charan said: So i play on my server and i put some heavy mods of about 140 mb and my some people who join have bad internet connection and sometimes my upload rate slows down , so the login panel keeps annoying the hell out of people is there any way i can like to bypass login panel and then open it after player has downloaded? use this tag in meta file its the easiest way --in meta.xml of every resource you want to download earlier than login panel <download_priority_group>1</download_priority_group> --increse the value in every resource by one <download_priority_group>2</download_priority_group> <download_priority_group>3</download_priority_group> <download_priority_group>4</download_priority_group> --...... all resources you want to be downloaded before login --and lastly add the below line in meta.xml of login <download_priority_group>0</download_priority_group> Link to comment
Storm-Hanma Posted June 25, 2017 Share Posted June 25, 2017 (edited) Try to upload other login panel or upload a modloader so that player can login first then they can download files later if they want !!and I suggest u first post thread on Hindi group then come here because our Hindi group need more Indian members !! Edited June 25, 2017 by Khadeer143 Link to comment
pa3ck Posted June 27, 2017 Share Posted June 27, 2017 I don't think that's the right event for you, if you look at the wiki: onClientFileDownloadComplete - Clientside event - This event is triggered when a file has been downloaded after downloadFile has been successfully called. Since you are not using downloadFile, you would need to manually check if the user is still downloading. local loginTimer = setTimer(function() if not isTransferBoxActive() then addEventHandler("onClientRender", root, "myLoginPanel") killTimer(loginTimer) end end, 2000, 0) Link to comment
Charan Posted June 29, 2017 Author Share Posted June 29, 2017 On 6/26/2017 at 00:44, Khadeer143 said: Try to upload other login panel or upload a modloader so that player can login first then they can download files later if they want !!and I suggest u first post thread on Hindi group then come here because our Hindi group need more Indian members !! sorry for late reply i dont speak hindi im tamil On 6/27/2017 at 16:03, pa3ck said: I don't think that's the right event for you, if you look at the wiki: onClientFileDownloadComplete - Clientside event - This event is triggered when a file has been downloaded after downloadFile has been successfully called. Since you are not using downloadFile, you would need to manually check if the user is still downloading. local loginTimer = setTimer(function() if not isTransferBoxActive() then addEventHandler("onClientRender", root, "myLoginPanel") killTimer(loginTimer) end end, 2000, 0) actually after i did the login panel the onclientdownloadfinish thing it came back after the user downloaded On 6/27/2017 at 16:03, pa3ck said: I don't think that's the right event for you, if you look at the wiki: onClientFileDownloadComplete - Clientside event - This event is triggered when a file has been downloaded after downloadFile has been successfully called. Since you are not using downloadFile, you would need to manually check if the user is still downloading. local loginTimer = setTimer(function() if not isTransferBoxActive() then addEventHandler("onClientRender", root, "myLoginPanel") killTimer(loginTimer) end end, 2000, 0) i dont understand... Link to comment
koragg Posted June 29, 2017 Share Posted June 29, 2017 (edited) @Charan what @pa3ck gave you is a pretty neat way to do what you wanna do. Here goes: local loginTimer = setTimer(function() if not isTransferBoxActive() then addEventHandler("onClientRender", root, "myLoginPanel") killTimer(loginTimer) end end, 2000, 0) A timer is set which checks if the player sees the download box at the bottom center of their screen (that means that they're downloading something). And if the download box is visible nothing happens. But the moment when the player has downloaded everything needed the download box will go away, right? Well the next time this timer runs (which is 2 seconds after the last time it checked things) it will see that the download box is not there. And since there is a specific condition if not isTransferBoxActive() then when the download box is gone the code inside the timer function will execute. And all it does is to make your login panel visible to the player and to stop checking if the download is complete because there's no point anymore: if the code executes it means that the player has already downloaded the required stuff. You should put this resource first in the mtaserver.conf to make it load before all other resources (yes, that works too - easier than setting priority in every resource's meta.xml in my opinion). Also obviously you'll need to make it into a client-side script since it's going to affect each player's download box independently. Edited June 29, 2017 by koragg 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