Zuher Laith Posted November 5, 2017 Share Posted November 5, 2017 (edited) Hello everyone, I'm working on a resource that sends a dx message to the player on both server/client side and gets called from other resources . this is the full code: Reveal hidden contents server.lua function dxOutputMessage(message, player, r, g, b) -- this works for server side trigger from another resource triggerClientEvent(player, "dxMessage.dxOutputMessage", player, message, r, g, b); end function outputMessage(message, player, r, g, b) dxOutputMessage(message, player, r, g, b); end function Player:outputMessage(message, r, g, b) -- error here dxOutputMessage(message, self, r, g, b); end addEvent("dxMessage.outputMessage", true); addEventHandler("dxMessage.outputMessage", root, function(message, r, g, b) source:outputMessage(message, r, g, b); -- and here end); client.lua: function outputMessage(message, r, g, b) triggerServerEvent("dxMessage.outputMessage", localPlayer, message, r, g, b); end dxoutput.client.lua; local screen_width, screen_height = guiGetScreenSize(); local relative_width, relative_height = screen_width / 1440, screen_height / 900 local static_left = relative_width * 983; local cur_left = static_left; local move_offet = relative_width * 20; local cur_message = ""; local cur_color = {255, 255, 255}; local message_moving = false; local message_moving_back = false; local message_moving_back_timer; addEventHandler("onClientRender", root, function() dxDrawFramedText(cur_message, cur_left, relative_height * 618.0, cur_left + (relative_width * 456), relative_height * 645.0, tocolor(cur_color[1], cur_color[2], cur_color[3], 255), 1.0, "default-bold", "center", "center", false, true, true); end); function dxOutputMessage(message, r, g, b) if (message_moving) then removeEventHandler("onClientRender", root, moveMessage); end if (message_moving_back) then removeEventHandler("onClientRender", root, moveMessageBack); end if (message_moving_back_timer and message_moving_back_timer:isValid()) then message_moving_back_timer:destroy(); end cur_left, cur_message, cur_color = relative_width * 1440, message or "", {r or 255, g or 255, b or 255}; message_moving_back_timer = setTimer(hideMessage, 5000, 1); addEventHandler("onClientRender", root, moveMessage); message_moving = true; end function moveMessage() cur_left = cur_left - move_offet; if (cur_left <= static_left) then removeEventHandler("onClientRender", root, moveMessage); cur_left = relative_width * 983; message_moving = false; end end function hideMessage() message_moving_back = true; addEventHandler("onClientRender", root, moveMessageBack); end function moveMessageBack() cur_left = cur_left + move_offet; if (cur_left >= relative_width * 1440) then removeEventHandler("onClientRender", root, moveMessageBack); cur_left = relative_width * 1440; message_moving_back = false; end end function dxDrawFramedText(message, left, top, width, height, color, scale, font, alignX, alignY, clip, wordBreak, postGUI) dxDrawText(message, left + 1, top + 1, width + 1, height + 1, tocolor(0, 0, 0, 255), scale, font, alignX, alignY, clip, wordBreak, postGUI); dxDrawText(message, left + 1, top - 1, width + 1, height - 1, tocolor(0, 0, 0, 255), scale, font, alignX, alignY, clip, wordBreak, postGUI); dxDrawText(message, left - 1, top + 1, width - 1, height + 1, tocolor(0, 0, 0, 255), scale, font, alignX, alignY, clip, wordBreak, postGUI); dxDrawText(message, left - 1, top - 1, width - 1, height - 1, tocolor(0, 0, 0, 255), scale, font, alignX, alignY, clip, wordBreak, postGUI); dxDrawText(message, left, top, width, height, color, scale, font, alignX, alignY, clip, wordBreak, postGUI); end addEvent("dxMessage.dxOutputMessage", true) addEventHandler("dxMessage.dxOutputMessage", root, function(message, r, g, b) dxOutputMessage(message, r, g, b); end); meta: <meta> <info name = "Dx Message Output" version = "1.0" type = "script" /> <script src = "server.lua" type = "server" /> <script src = "client.lua" type = "client" /> <script src = "dxoutput.client.lua" type = "client" /> <export function="outputMessage" type="client"/> <export function="outputMessage" type="server"/> <export function="dxOutputMessage" type="server"/> <export function="Player:outputMessage" type="server"/> </meta> So in case I want to call and pass a message on server side from another resource, I use this: Quote triggerClientEvent(thePlayer, "dxMessage.dxOutputMessage", thePlayer, "Message passed ! !", 0, 255, 0) Expand and If I wanted to pass it on client side, I use "call" function: Quote call(getResourceFromName("[add]DxMessage"), "outputMessage", "Message passed !", 0, 255, 0) Expand this is the first error I got after debugging: Quote ERROR: [add]DxMessage\server.lua:9: attempt to index global 'Player' (a nil value) Expand I know its a bit messy, Any help is appreciated . Edited November 5, 2017 by Zuher Laith Link to comment
Moderators IIYAMA Posted November 5, 2017 Moderators Share Posted November 5, 2017 function dxOutputMessage(message, player, r, g, b) -- this works for server side trigger from another resource triggerClientEvent(player, "dxMessage.dxOutputMessage", player, message, r, g, b); end function outputMessage(message, player, r, g, b) dxOutputMessage(message, player, r, g, b); end addEvent("dxMessage.outputMessage", true); addEventHandler("dxMessage.outputMessage", root, function(message, r, g, b) outputMessage(message, client, r, g, b); -- and here end); It is not recommended to mix oop syntax in your code, unless you want to learn that, Link to comment
Zuher Laith Posted November 5, 2017 Author Share Posted November 5, 2017 On 05/11/2017 at 14:32, IIYAMA said: It is not recommended to mix oop syntax in your code, unless you want to learn that, Expand I guess yeah, it worked but after triggering again, an error pop out on dxoutput.client.lua on this at line 5: local message_moving_back_timer; function dxOutputMessage(message, r, g, b) if (message_moving) then removeEventHandler("onClientRender", root, moveMessage); end if (message_moving_back) then removeEventHandler("onClientRender", root, moveMessageBack); end if (message_moving_back_timer and message_moving_back_timer:isValid()) then message_moving_back_timer:destroy(); end -- message_moving_back_timer cur_left, cur_message, cur_color = relative_width * 1440, message or "", {r or 255, g or 255, b or 255}; message_moving_back_timer = setTimer(hideMessage, 5000, 1); addEventHandler("onClientRender", root, moveMessage); message_moving = true; end the error I got: Quote ERROR: Attempt to index upvalue 'message_moving_back_timer' (a userdata value) Expand Link to comment
Moderators IIYAMA Posted November 5, 2017 Moderators Share Posted November 5, 2017 Put this in your meta.xml <oop>true</oop> As I said before, do not mix oop in your script, unless you know what you are doing. 1 Link to comment
Zuher Laith Posted November 5, 2017 Author Share Posted November 5, 2017 On 05/11/2017 at 16:20, IIYAMA said: As I said before, do not mix oop in your script, unless you know what you are doing. Expand Well, let me be honest with you, I wasn't the one who wrote this code, that's how it became difficult to me to understand it. I've just read about OOP and getting rid of it might requires re-writing the whole resource, correct ? Link to comment
Moderators IIYAMA Posted November 5, 2017 Moderators Share Posted November 5, 2017 Re-writting it in your own style is a good way of learning how the code works. 1 Link to comment
Zuher Laith Posted November 5, 2017 Author Share Posted November 5, 2017 On 05/11/2017 at 18:34, IIYAMA said: Re-writting it in your own style is a good way of learning how the code works. Expand Good Advice I'll work with it, Thanks . 1 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