Jump to content

What wrong in server side?


Turbe$Z

Recommended Posts

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

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 by MrTasty
  • Like 1
Link to comment
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

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 by LoPollo
Link to comment
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

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 by LoPollo
Link to comment
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 :D

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