Jump to content

algunas funciones y eventos para esto


iFoReX

Recommended Posts

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 ? :P

Link to comment

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

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

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

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

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

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

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
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
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...