Turbe$Z Posted November 13, 2016 Share Posted November 13, 2016 -- client -- local displayWidth, displayHeight = guiGetScreenSize(); local notificationData = {}; local notificationFont = dxCreateFont('files/fonts/roboto.ttf', 12 * 2, false); local iconsFont = dxCreateFont('files/fonts/icons.ttf', 12 * 2, false); addEventHandler('onClientRender', root, function() for k, v in pairs(notificationData) do if (v.State == 'fadeIn') then local alphaProgress = (getTickCount() - v.AlphaTick) / 650; local alphaAnimation = interpolateBetween(0, 0, 0, 255, 0, 0, alphaProgress, 'Linear'); if (alphaAnimation) then v.Alpha = alphaAnimation; else v.Alpha = 255; end if (alphaProgress > 1) then v.Tick = getTickCount(); v.State = 'openTile'; end elseif (v.State == 'fadeOut') then local alphaProgress = (getTickCount() - v.AlphaTick) / 650; local alphaAnimation = interpolateBetween(255, 0, 0, 0, 0, 0, alphaProgress, 'Linear'); if (alphaAnimation) then v.Alpha = alphaAnimation; else v.Alpha = 0; end if (alphaProgress > 1) then notificationData = {}; end elseif (v.State == 'openTile') then local tileProgress = (getTickCount() - v.Tick) / 350; local tilePosition = interpolateBetween(v.StartX, 0, 0, v.EndX, 0, 0, tileProgress, 'Linear'); local tileWidth = interpolateBetween(0, 0, 0, v.Width, 0, 0, tileProgress, 'Linear'); if (tilePosition and tileWidth) then v.CurrentX = tilePosition; v.CurrentWidth = tileWidth; else v.CurrentX = v.EndX; v.CurrentWidth = v.Width; end if (tileProgress > 1) then v.State = 'fixTile'; setTimer(function() v.Tick = getTickCount(); v.State = 'closeTile'; end, string.len(v.Text) * 45 + 5000, 1); end elseif (v.State == 'closeTile') then local tileProgress = (getTickCount() - v.Tick) / 350; local tilePosition = interpolateBetween(v.EndX, 0, 0, v.StartX, 0, 0, tileProgress, 'Linear'); local tileWidth = interpolateBetween(v.Width, 0, 0, 0, 0, 0, tileProgress, 'Linear'); if (tilePosition and tileWidth) then v.CurrentX = tilePosition; v.CurrentWidth = tileWidth; else v.CurrentX = v.StartX; v.CurrentWidth = 0; end if (tileProgress > 1) then v.AlphaTick = getTickCount(); v.State = 'fadeOut'; end elseif (v.State == 'fixTile') then v.Alpha = 255; v.CurrentX = v.EndX; v.CurrentWidth = v.Width; end roundedRectangle(v.CurrentX, 20, 25 + v.CurrentWidth, 25, tocolor(0, 0, 0, 150 * v.Alpha / 255), _, true); dxDrawRectangle(v.CurrentX, 20, 25, 25, tocolor(0, 0, 0, 255 * v.Alpha / 255), true); if (v.Alpha == 255) then dxDrawText(v.Text, v.CurrentX + 25 + 10, 20, v.CurrentX + 25 + 10 + v.CurrentWidth - 20, 20 + 25, tocolor(255, 255, 255, 255), 0.40, notificationFont, 'center', 'center', true, false, true); end if (v.Type == 'error') then dxDrawText('', v.CurrentX + 5, 20, v.CurrentX + 5 + 25 - 10, 20 + 25, tocolor(215, 90, 90, v.Alpha), 0.50, iconsFont, 'center', 'center', false, false, true); elseif (v.Type == 'warning') then dxDrawText('', v.CurrentX + 5, 20, v.CurrentX + 5 + 25 - 10, 20 + 25, tocolor(220, 180, 80, v.Alpha), 0.50, iconsFont, 'center', 'center', false, false, true); elseif (v.Type == 'info') then dxDrawText('', v.CurrentX + 5, 20, v.CurrentX + 5 + 25 - 10, 20 + 25, tocolor(85, 180, 245, v.Alpha), 0.50, iconsFont, 'center', 'center', false, false, true); elseif (v.Type == 'success') then dxDrawText('', v.CurrentX + 5, 20, v.CurrentX + 5 + 25 - 10, 20 + 25, tocolor(80, 205, 105, v.Alpha), 0.50, iconsFont, 'center', 'center', false, false, true); end end end ) addEvent('addNotification', true); function addNotification(text, type) if (text and type) then if (notificationData ~= nil) then table.remove(notificationData, #notificationData); end table.insert(notificationData, { StartX = (displayWidth / 2) - (25 / 2), EndX = (displayWidth / 2) - ((dxGetTextWidth(text, 0.40, notificationFont) + 20 + 25) / 2), Text = text, Width = dxGetTextWidth(text, 0.40, notificationFont) + 20, Alpha = 0, State = 'fadeIn', Tick = 0, AlphaTick = getTickCount(), CurrentX = (displayWidth / 2) - (25 / 2), CurrentWidth = 0, Type = type or 'info' } ); playSoundFrontEnd(11); end end addEventHandler('addNotification', root, addNotification); function roundedRectangle(x, y, w, h, borderColor, bgColor, postGUI) if (x and y and w and h) then if (not borderColor) then borderColor = tocolor(0, 0, 0, 200); end if (not bgColor) then bgColor = borderColor; end --> Background dxDrawRectangle(x, y, w, h, bgColor, postGUI); --> Border dxDrawRectangle(x + 2, y - 1, w - 4, 1, borderColor, postGUI); -- top dxDrawRectangle(x + 2, y + h, w - 4, 1, borderColor, postGUI); -- bottom dxDrawRectangle(x - 1, y + 2, 1, h - 4, borderColor, postGUI); -- left dxDrawRectangle(x + w, y + 2, 1, h - 4, borderColor, postGUI); -- right end end -- server -- function addNotification(player, text, type) if (player and text and type) then exports["notices"]:addNotification("Test","success"); triggerClientEvent(player, 'addNotification', player, text, type); end end addEventHandler("onResourceStart", addNotification, player, text, type) Link to comment
Dimos7 Posted November 13, 2016 Share Posted November 13, 2016 any error or warning in /debugscript 3? Link to comment
Addlibs Posted November 13, 2016 Share Posted November 13, 2016 (edited) Line 9, you're not using the valid syntax for addEventHandler. It should be something like addEventHandler("onResourceStart", resourceRoot, addNotification) but the parameters of the event onResourceStart don't match up with the parameters addNotification is expecting. It also seems like the event is completely unnecessary. I've also got a question - is the resource named "notices"? If so, you're entering an infinite loop by calling addNotification inside addNotification. I have a feeling that client side might have been stolen off somewhere since you definitely didn't write it up considering your server-side Lua skill. Edited November 13, 2016 by MrTasty 1 Link to comment
Turbe$Z Posted November 13, 2016 Author Share Posted November 13, 2016 48 minutes ago, MrTasty said: Line 9, you're not using the valid syntax for addEventHandler. It should be something like addEventHandler("onResourceStart", resourceRoot, addNotification) but the parameters of the event onResourceStart don't match up with the parameters addNotification is expecting. It also seems like the event is completely unnecessary. I've also got a question - is the resource named "notices"? If so, you're entering an infinite loop by calling addNotification inside addNotification. I have a feeling that client side might have been stolen off somewhere since you definitely didn't write it up considering your server-side Lua skill. Yes, notices Link to comment
LoPollo Posted November 13, 2016 Share Posted November 13, 2016 (edited) Is something like this what you want (not tested)? I don't know exactly what you want to achieve function addNotification(thePlayer, theText, theType)--i dunno if you can declare it as "type" since it's a lua func if (thePlayer and theText and theType) then triggerClientEvent(thePlayer, 'addNotification', thePlayer == root and resourceRoot or thePlayer, theText, theType)--do not set to root the sourceElement if you are sending to all players end end function onResourceStartHandler(theRes) exports[getResourceName(resource)]:addNotification(root, "Test", "success") end addEventHandler("onResourceStart", resourceRoot, onResourceStartHandler) Edited November 13, 2016 by LoPollo Link to comment
Turbe$Z Posted November 13, 2016 Author Share Posted November 13, 2016 5 minutes ago, LoPollo said: Is something like this what you want (not tested)? I don't know exactly what you want to achieve function addNotification(player, text, _type)--i dunno if you can declare it as "type" since it's a lua func if (player and text and _type) then triggerClientEvent(player, 'addNotification', player == root and resourceRoot or player, text, _type)--do not set to root the sourceElement if you are sending to all players end end function onResourceStartHandler(theRes) exports["notices"]:addNotification(root, "Test", "success") end addEventHandler("onResourceStart", resourceRoot, onResourceStartHandler) server triggered clientside event 'addNotification' but event is not added clientside what? why? Link to comment
iPrestege Posted November 13, 2016 Share Posted November 13, 2016 You have to fix everything by yourself you already got the errors so search for that and fix it. Link to comment
LoPollo Posted November 13, 2016 Share Posted November 13, 2016 (edited) What @iPrestege said is true, but i was already testing: In the cliend you can't declare a variable called "type" since it's already a predefined lua function. Rename them. Also i made some errors at line 3 serverside: i didn't want to set root as sourceelement and setting resourceRoot will cause the resource to not work Also do not trigger events during res start since the clientside may not be already started, use a timer to call triggerClientEvent to ensure the client is ready to accept the trigger function addNotification(thePlayer, theText, theType)--i dunno if you can declare it as "type" since it's a lua func if (thePlayer and theText and theType) then for k, playerElement in pairs(getElementsByType("player")) do --use a timer to let the client side start and then accept the event setTimer( triggerClientEvent, 200, 1, playerElement, "addNotification", thePlayer ~= root and thePlayer or playerElement, theText, theType )--make sure client restart before calling end end end function onResourceStartHandler(theRes) exports[getResourceName(resource)]:addNotification(root, "Test", "success") end addEventHandler("onResourceStart", resourceRoot, onResourceStartHandler) Edited November 13, 2016 by LoPollo Link to comment
Turbe$Z Posted November 13, 2016 Author Share Posted November 13, 2016 3 hours ago, LoPollo said: What @iPrestege said is true, but i was already testing: In the cliend you can't declare a variable called "type" since it's already a predefined lua function. Rename them. Also i made some errors at line 3 serverside: i didn't want to set root as sourceelement and setting resourceRoot will cause the resource to not work Also do not trigger events during res start since the clientside may not be already started, use a timer to call triggerClientEvent to ensure the client is ready to accept the trigger function addNotification(thePlayer, theText, theType)--i dunno if you can declare it as "type" since it's a lua func if (thePlayer and theText and theType) then for k, playerElement in pairs(getElementsByType("player")) do --use a timer to let the client side start and then accept the event setTimer( triggerClientEvent, 200, 1, playerElement, "addNotification", thePlayer ~= root and thePlayer or playerElement, theText, theType )--make sure client restart before calling end end end function onResourceStartHandler(theRes) exports[getResourceName(resource)]:addNotification(root, "Test", "success") end addEventHandler("onResourceStart", resourceRoot, onResourceStartHandler) thanks 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