iFoReX Posted May 11, 2012 Share Posted May 11, 2012 Buee hace tiempo , yo creo que ustedes recordaran, estaba haciendo un PM GUI, pero lo que me faltaban eran las funciones y los eventos me podrian decir que eventos usar ademas de estos (LOS ELEMENTOS GUI) guiSetText onClientGUIClick guiGetText Cuales mas ? Link to comment
Castillo Posted May 11, 2012 Share Posted May 11, 2012 Para hacer un PM GUI podes usar varias cosas: Una grid list ( para los jugadores online ): guiCreateGridList guiGridListAddRow guiGridListSetItemText guiGridListGetSelectedItem guiGridListGetItemText Un edit ( para el texto ): guiCreateEdit guiGetText Un boton ( para enviar el mensaje ): guiCreateButton Y te queda para luego enviarlo de verdad: triggerServerEvent addEvent addEventHandler outputChatBox Link to comment
iFoReX Posted May 11, 2012 Author Share Posted May 11, 2012 Si Gracias Solid pero siempre e tenido este problema : cuando el player aprieta el boton se obtiene el texto del edito y se transfiere al memo Pero si el player escribe nuevamente no se crea otra linea :c, como podria arreglar eso ? Link to comment
Castillo Posted May 11, 2012 Share Posted May 11, 2012 Lo que yo hice en el chat de los clanes en SAUR fue crear una tabla con los mensajes, luego usas un for-loop y los vas añadiendo al memo, asi: local messages = { "Hola", "Mundo!" } for index, msg in ipairs ( messages ) do guiSetText ( elMemo, guiGetText ( elMemo ) .."".. tostring ( msg ) ) guiSetProperty ( elMemo, "CaratIndex", tostring ( elMemo ):len ( ) ) ) end Link to comment
iFoReX Posted May 11, 2012 Author Share Posted May 11, 2012 ok ok gracias , le saco lo de messages verdad ? 'local messages = { "Hola", "Mundo!" }' ? Link to comment
Castillo Posted May 11, 2012 Share Posted May 11, 2012 Si, eso es solo para mostrate como funciona. Link to comment
iFoReX Posted May 11, 2012 Author Share Posted May 11, 2012 y como podria yo definir la variable del for-loop esta ? ( messages ) for index, msg in ipairs ( messages ) do ---( messages ) Link to comment
Castillo Posted May 11, 2012 Share Posted May 11, 2012 Pues tendrias que crear la tabla server side, luego al enviar el mensaje, buscas con quien estas chateando y lo añadis a esa tabla y lo envias para ambos jugadores. Seria algo asi: local mensajes = { } function prueba ( jugadorAlQueEnvias, mensaje ) if ( not mensajes [ source ] ) then mensajes [ source ] = { } end if ( not mensajes [ source ] [ jugadorAlQueEnvias ] ) then mensajes [ source ] [ jugadorAlQueEnvias ] = { } end table.insert ( mensajes [ source ] [ jugadorAlQueEnvias ], mensaje ) end Luego envias la tabla: mensajes [ source ] [ jugadorAlQueEnvias ] a ambos, source y jugadorAlQueEnvias. Link to comment
iFoReX Posted May 11, 2012 Author Share Posted May 11, 2012 mensajes [ source ] [ getPlayerFromName( elPlayer ) ] esto se pondria en cl-side o en sv-side ? en sv side creo pero es para estar seguro Link to comment
Castillo Posted May 11, 2012 Share Posted May 11, 2012 Esa funcion que te di es server side. Link to comment
iFoReX Posted May 11, 2012 Author Share Posted May 11, 2012 y hago un trigger verdad ? Link to comment
Castillo Posted May 11, 2012 Share Posted May 11, 2012 Yo te di todas las funciones necesarias, ahora empeza a pensar en como usarlas. Link to comment
iFoReX Posted May 11, 2012 Author Share Posted May 11, 2012 mmm... solo se me ocurrio esto GUIEditor_Window = {} GUIEditor_Button = {} GUIEditor_Memo = {} GUIEditor_Label = {} GUIEditor_Edit = {} GUIEditor_Grid = {} GUIEditor_Window[1] = guiCreateWindow(0.3375,0.1983,0.5013,0.655,"GUI PM",true) guiWindowSetSizable(GUIEditor_Window[1],false) guiWindowSetMovable(GUIEditor_Window[1],false) GUIEditor_Label[1] = guiCreateLabel(11,46,96,28,"",false,GUIEditor_Window[1]) GUIEditor_Memo[1] = guiCreateMemo(9,57,383,281,"",false,GUIEditor_Window[1]) guiMemoSetReadOnly(GUIEditor_Memo[1],true) GUIEditor_Edit[1] = guiCreateEdit(10,344,288,36,"",false,GUIEditor_Window[1]) GUIEditor_Button[1] = guiCreateButton(302,346,85,37,"Enviar",false,GUIEditor_Window[1]) GUIEditor_Label[2] = guiCreateLabel(36,27,335,32,"PM A : ",false,GUIEditor_Window[1]) guiSetFont(GUIEditor_Label[2],"clear-normal") GUIEditor_Window[2] = guiCreateWindow(0.1663,0.1983,0.1737,0.6533,"GUI Players",true) GUIEditor_Grid[1] = guiCreateGridList(10,28,122,375,false,GUIEditor_Window[2]) guiGridListSetSelectionMode(GUIEditor_Grid[1],2) column = guiGridListAddColumn(GUIEditor_Grid[1],"Players",0.6) guiSetVisible(GUIEditor_Window[1],false) guiSetVisible(GUIEditor_Window[2],false) bindKey ( "F7", "down", function ( ) guiSetVisible ( GUIEditor_Window[1], not guiGetVisible ( GUIEditor_Window[1] ) ) guiSetVisible ( GUIEditor_Window[2], not guiGetVisible ( GUIEditor_Window[2] ) ) showCursor ( guiGetVisible ( GUIEditor_Window[1] ) ) end ) function clientsideResourceStart () guiGridListClear(GUIEditor_Grid[1]) if (guiGridListClear) then for id, playeritem in ipairs(getElementsByType("player")) do local row = guiGridListAddRow ( GUIEditor_Grid[1] ) guiGridListSetItemText ( GUIEditor_Grid[1], row, column, getPlayerName ( playeritem ), false, false ) end end end addEventHandler ( "onClientResourceStart", getResourceRootElement(getThisResource()), clientsideResourceStart ) addEventHandler ( "onClientPlayerJoin", getRootElement(), clientsideResourceStart ) addEventHandler ( "onClientPlayerQuit", getRootElement(), clientsideResourceStart ) addEventHandler ( "onClientPlayerChangeNick", getRootElement(), clientsideResourceStart ) addEventHandler("onClientGUIDoubleClick", root, function() if ( source == GUIEditor_Grid[1] ) then row, col = guiGridListGetSelectedItem ( source ) if ( row and col and row ~= -1 and col ~= -1 ) then local playername = guiGridListGetItemText ( source, row, col ) guiSetText(GUIEditor_Label[2], "PM a : "..playername) local thePlayer = getPlayerFromName ( playername ) end end end ) function send() if source == GUIEditor_Button[1] then local getText = guiGetText(GUIEditor_Edit[1]) local getName = getPlayerName( localPlayer ) guiSetText(GUIEditor_Memo[1], ""..getName.." : "..getText.."") guiSetText(GUIEditor_Edit[1], "") triggerServerEvent("enviar", localPlayer, playerName) end end addEventHandler("onClientGUIClick", root, send) local mensajes = { } function enviar ( playerName, mensaje ) if ( not mensajes [ source ] ) then mensajes [ source ] = { } end if ( not mensajes [ source ] [ getPlayerFromName ( playerName ) ] ) then mensajes [ source ] [ getPlayerFromName ( playerName ) ] = { } end table.insert ( mensajes [ source ] [ getPlayerFromName ( playerName ) ], mensaje ) end addEvent("enviar", true) addEventHandler("enviar", getRootElement(), enviar) Link to comment
Castillo Posted May 11, 2012 Share Posted May 11, 2012 Ambos codigos tienen muchos errores, en este momento no te puedo ayudar. Link to comment
Edikosh998 Posted May 11, 2012 Share Posted May 11, 2012 Tengo una confunsion con lo que explicaste Solid local mensajes = { } function enviar ( playerName, mensaje ) if ( not mensajes [ source ] ) then mensajes [ source ] = { } end if ( not mensajes [ source ] [ getPlayerFromName ( playerName ) ] ) then mensajes [ source ] [ getPlayerFromName ( playerName ) ] = { } end table.insert ( mensajes [ source ] [ getPlayerFromName ( playerName ) ], mensaje ) end addEvent("enviar", true) addEventHandler("enviar", getRootElement(), enviar) Vos insertas una tabla que guarde los mensajes, luego tendrias que hacer un triggerClientEvent para que actualize el mensaje. Uno de los parametro de ese evento que vas a triggear tiene que ser la tabla. Ahora que se debe hacer despues?...Osea, chequeo si tiene la ventana del PM. Si lo tiene que por ultimo hagas un guiSetText(Memo,elText.."n"..v) v = el contenido de la tabla mensajes elText = guiGetText(Memo) Capaz fui confuso , pero quisiera saber si es lo que se debe usar para hacer el PM Link to comment
Castillo Posted May 12, 2012 Share Posted May 12, 2012 En el client side usa esto: for index, msg in ipairs ( messages ) do -- ( messages seria la tabla que envio desde el server side ). guiSetText ( elMemo, guiGetText ( elMemo ) .."".. tostring ( msg ) ) guiSetProperty ( elMemo, "CaratIndex", tostring ( elMemo ):len ( ) ) ) end Link to comment
iFoReX Posted May 12, 2012 Author Share Posted May 12, 2012 hey solid ese me serviria o no ? Link to comment
Castillo Posted May 12, 2012 Share Posted May 12, 2012 Ambos codigos tienen muchos errores. Link to comment
iFoReX Posted May 12, 2012 Author Share Posted May 12, 2012 ok es que tu me habias dicho que pusiera al jugador que se iba a enviar ese mensaje y hay lo puse Link to comment
Edikosh998 Posted May 12, 2012 Share Posted May 12, 2012 En el client side usa esto: for index, msg in ipairs ( messages ) do -- ( messages seria la tabla que envio desde el server side ). guiSetText ( elMemo, guiGetText ( elMemo ) .."".. tostring ( msg ) ) guiSetProperty ( elMemo, "CaratIndex", tostring ( elMemo ):len ( ) ) ) end Y que realiza la propiedad CaratIndex? Y era maso menos lo que pensaba (que despues vi que lo habias postiado ) Voy a ver si puedo hacerlo funcionar...Y si anda, lo publico Link to comment
iFoReX Posted May 12, 2012 Author Share Posted May 12, 2012 Yo no entendi como hacerle en el server-side :c Link to comment
Edikosh998 Posted May 12, 2012 Share Posted May 12, 2012 Es que tenes errores con el client side tambien, y entonces se hace mas dificil explicar. Por otro lado, no estoy muy seguro de como hacerlo , por eso..si tengo ahora un poco de tiempo , lo pruebo Link to comment
iFoReX Posted May 12, 2012 Author Share Posted May 12, 2012 Ok y despues lo pones aqui asi lo puedo investigar Link to comment
Recommended Posts