joao2235 Posted July 5, 2019 Share Posted July 5, 2019 SERVER: MarkerGuardar = createMarker (359.159, 207.26, 1007.383, "cylinder", 1.5, 255,255,255,50) setElementInterior(MarkerGuardar, 3) setElementDimension(MarkerGuardar, 1) function AbrirPainelGUI(player) triggerClientEvent(player,"showHide", root) end addEventHandler("onMarkerHit", MarkerGuardar, AbrirPainelGUI) CLIENT: GUIEditor = { gridlist = {}, window = {}, button = {} } addEventHandler("onClientResourceStart", resourceRoot, function() GUIEditor.window[1] = guiCreateWindow(773, 341, 369, 442, "Guardar Armas", false) guiWindowSetSizable(GUIEditor.window[1], false) guiSetVisible(GUIEditor.window[1], false) centerGUI(GUIEditor.window[1]) GUIEditor.button[1] = guiCreateButton(785, 740, 134, 33, "Guardar", false, GUIEditor.window[1]) GUIEditor.button[2] = guiCreateButton(998, 740, 134, 33, "Fechar", false, GUIEditor.window[1]) GUIEditor.gridlist[1] = guiCreateGridList(781, 370, 351, 362, false, GUIEditor.window[1]) guiGridListAddColumn(GUIEditor.gridlist[1], "Armas", 0.5) guiGridListAddColumn(GUIEditor.gridlist[1], "Munição", 0.5) end ) function Abrir() if guiGetVisible(GUIEditor.window[1]) == true then guiSetVisible(GUIEditor.window[1],false) showCursor(false) guiGridListClear(GUIEditor.gridlist[1]) elseif guiGetVisible(GUIEditor.window[1]) == false then guiSetVisible(GUIEditor.window[1],true) showCursor(true) guiGridListClear(GUIEditor.gridlist[1]) triggerServerEvent("getDataFromServer",getLocalPlayer(),getLocalPlayer()) end end addEvent("showHide", true) addEventHandler("showHide", root , Abrir) Link to comment
Other Languages Moderators Lord Henry Posted July 5, 2019 Other Languages Moderators Share Posted July 5, 2019 (edited) Da próxima vez poste na seção de Programação em Lua. Você está tentando usar a função útil centerWindow (que vc trocou pro nome centerGUI) mas ela não existe no seu código. Funções úteis precisam ter seu código declarado para funcionarem, pois não são funções nativas do MTA. No seu client tem um triggerServerEvent de um evento que não existe no server. Você teria descoberto isso se usasse o comando /debugscript 3 Edited July 5, 2019 by Lord Henry 1 Link to comment
Jonas^ Posted July 5, 2019 Share Posted July 5, 2019 Não é necessário passar pra server-side pra abrir o painel já que não necessita de permissão, você pode usar apenas onClientMarkerHit. Correção: local sX, sY = guiGetScreenSize () local markerGuardar = createMarker (-2407.54, -598.33, 132.64, "cylinder", 1.5, 255, 255, 255, 50) addEventHandler ("onClientResourceStart", resourceRoot, function () defaultWindow = guiCreateWindow (sX/2 - 185, sY/2 - 220, 370, 440, "Guardar Armas", false) guiWindowSetSizable (defaultWindow, false) guiSetVisible (defaultWindow, false) btnGuardar = guiCreateButton (10, 396, 112, 34, "Guardar", false, defaultWindow) btnFechar = guiCreateButton (247, 396, 112, 34, "Fechar", false, defaultWindow) defaultGrid = guiCreateGridList (9, 26, 350, 360, false, defaultWindow) guiGridListAddColumn (defaultGrid, "Arma", 0.7) guiGridListAddColumn (defaultGrid, "Munição", 0.20) end) addEventHandler ("onClientGUIClick", root, function (btn) if btn ~= "left" then return end if source == btnGuardar then outputChatBox ("Btn: "..btn, 0, 255, 0) elseif source == btnFechar then Abrir () end end) addEventHandler ("onClientMarkerHit", getRootElement(), function (hitPlayer, matchingDimension) if hitPlayer and getElementType (hitPlayer) == "player" and matchingDimension then Abrir () end end) function Abrir () if guiGetVisible (defaultWindow) == true then guiSetVisible (defaultWindow, false) showCursor (false) -- guiGridListClear (defaultGrid) elseif guiGetVisible (defaultWindow) == false then guiSetVisible (defaultWindow,true) showCursor (true) -- guiGridListClear (defaultGrid) end end OBS: Não entendi o motivo de você usar centerWindow sendo que você pode calcular a posição do centro manual. (Fiz isso por você se tiver dúvidas sobre GUI pode dar uma olhada no tópico do @Lord Henry.) Tópico: Aqui 1 1 Link to comment
joao2235 Posted July 6, 2019 Author Share Posted July 6, 2019 Primeiramente muito obrigado pelo apoio. Tenham certeza de que vocês são decisivos e responsáveis pelo crescimento gigantesco desse game incrível. Dessa forma no script do Jonas^ todos os Markers abrem o painel. Mas corrigi da seguinte forma: CLIENT: local sX, sY = guiGetScreenSize () addEventHandler ("onClientResourceStart", resourceRoot, function () defaultWindow = guiCreateWindow (sX/2 - 185, sY/2 - 220, 370, 440, "Guardar Armas", false) guiWindowSetSizable (defaultWindow, false) guiSetVisible (defaultWindow, false) btnGuardar = guiCreateButton (10, 396, 112, 34, "Guardar", false, defaultWindow) btnFechar = guiCreateButton (247, 396, 112, 34, "Fechar", false, defaultWindow) defaultGrid = guiCreateGridList (9, 26, 350, 360, false, defaultWindow) guiGridListAddColumn (defaultGrid, "Arma", 0.7) guiGridListAddColumn (defaultGrid, "Munição", 0.20) end) addEventHandler ("onClientGUIClick", root, function (btn) if btn ~= "left" then return end if source == btnGuardar then outputChatBox ("Btn: "..btn, 0, 255, 0) elseif source == btnFechar then Abrir () end end) --[[addEventHandler ("onClientMarkerHit", getRootElement(), function (hitPlayer, matchingDimension) if hitPlayer and getElementType (hitPlayer) == "player" and matchingDimension then Abrir () end end)]]-- function Abrir () if guiGetVisible (defaultWindow) == true then guiSetVisible (defaultWindow, false) showCursor (false) -- guiGridListClear (defaultGrid) elseif guiGetVisible (defaultWindow) == false then guiSetVisible (defaultWindow,true) showCursor (true) -- guiGridListClear (defaultGrid) end end addEvent("painelguiopen", true) addEventHandler("painelguiopen", root , Abrir) SERVER: MarkerGuardar = createMarker (359.159, 207.26, 1007.383, "cylinder", 1.5, 255,255,255,50) setElementInterior(MarkerGuardar, 3) setElementDimension(MarkerGuardar, 1) function AbrirPainelGuardar (source) triggerClientEvent (source, "painelguiopen", root) end addEventHandler("onMarkerHit", MarkerGuardar, AbrirPainelGuardar) Estou iniciando como scripter, mas estou cada dia mais buscando me desenvolver. Agradeço novamente o apoio de vocês! Como faria para conseguir colocar nessa gridlist as armas e o número de munições que o player carrega junto à cada arma ? Link to comment
joao2235 Posted July 6, 2019 Author Share Posted July 6, 2019 Tentei algo assim: (Sem sucesso) function updateGridList() local rw, cl = guiGridListGetSelectedItem(defaultGrid) guiGridListClear(defaultGrid) for slot=0, 12 do if ( getPedWeapon(localPlayer, slot) ) then guiGridListAddRow(defaultGrid) end guiGridListSetSelectedItem(defaultGrid, rw, cl) end end Link to comment
Other Languages Moderators Lord Henry Posted July 6, 2019 Other Languages Moderators Share Posted July 6, 2019 Na sua linha 6 vc está adicionando uma linha vazia na gridList. E sua linha 5 não faz sentido, pois a função getPedWeapon sempre retorna um valor inteiro, mesmo que o jogador não tenha a arma. Substitua as linhas 5, 6 e 7 por isso: if (getPedWeapon (localPlayer, slot) ~= 0) then -- Se o jogador tem uma arma nesse slot, então: guiGridListAddRow (defaultGrid, getWeaponNameFromID (getPedWeapon (localPlayer, slot)), getPedTotalAmmo (localPlayer, slot)) end Link to comment
joao2235 Posted July 6, 2019 Author Share Posted July 6, 2019 Substituí, porém sem sucesso... function updateGridList() local rw, cl = guiGridListGetSelectedItem(defaultGrid) guiGridListClear(defaultGrid) for slot=0, 12 do if (getPedWeapon (localPlayer, slot) ~= 0) then -- Se o jogador tem uma arma nesse slot, então: guiGridListAddRow (defaultGrid, getWeaponNameFromID (getPedWeapon (localPlayer, slot)), getPedTotalAmmo (localPlayer, slot)) end guiGridListSetSelectedItem(defaultGrid, rw, cl) end end Print:https://imgur.com/a/Yj89Dko Link to comment
Jonas^ Posted July 6, 2019 Share Posted July 6, 2019 Era só você ter verificado com: IsElementWithinMarker se o jogador estava no marker x e se sim abriria o painel, não entendi porque passar pra server-side, bom se você realmente deseja fazer uma conexão desnecessária, ai é com você... Link to comment
joao2235 Posted July 6, 2019 Author Share Posted July 6, 2019 2 minutes ago, Jonas^ said: Era só você ter verificado com: IsElementWithinMarker se o jogador estava no marker x e se sim abriria o painel, não entendi porque passar pra server-side, bom se você realmente deseja fazer uma conexão desnecessária, ai é com você... Mesmo que estivesse apenas no client-side, ele não me mostra as armas que carrego. Link to comment
Other Languages Moderators Lord Henry Posted July 6, 2019 Other Languages Moderators Share Posted July 6, 2019 Parece que vc não está chamando a função updateGridList ( ). Link to comment
joao2235 Posted July 6, 2019 Author Share Posted July 6, 2019 2 minutes ago, Lord Henry said: Parece que vc não está chamando a função updateGridList ( ). Exatamente, percebi isso agora. Como faria para resolver isso ? Link to comment
Other Languages Moderators Lord Henry Posted July 6, 2019 Other Languages Moderators Share Posted July 6, 2019 (edited) Lol, vc não sabe chamar uma função? Dentro daquela sua função Abrir na linha 91 substitua aquele comentário por updateGridList () Edited July 6, 2019 by Lord Henry Link to comment
joao2235 Posted July 6, 2019 Author Share Posted July 6, 2019 Ainda não estudei o client-side, parece que existem algumas diferenças. Sei bastante quanto ao server-side, peço desculpas por não saber ainda. Link to comment
Other Languages Moderators Lord Henry Posted July 6, 2019 Other Languages Moderators Share Posted July 6, 2019 A propósito, essa é sua imagem. Use links diretos. Link to comment
joao2235 Posted July 6, 2019 Author Share Posted July 6, 2019 1 minute ago, Lord Henry said: A propósito, essa é sua imagem. Use links diretos. Exato, essa é minha imagem. Link to comment
Other Languages Moderators Lord Henry Posted July 6, 2019 Other Languages Moderators Share Posted July 6, 2019 6 minutes ago, Lord Henry said: Dentro daquela sua função Abrir na linha 91 substitua aquele comentário por updateGridList () Caso não tenha visto meu comentário. Link to comment
joao2235 Posted July 6, 2019 Author Share Posted July 6, 2019 Top mestre, deu certo! Você me recomendaria algum curso ou vídeo-aula para estudar sobre script MTA avançado ? Link to comment
Other Languages Moderators Lord Henry Posted July 6, 2019 Other Languages Moderators Share Posted July 6, 2019 Pelo que estou vendo, acho mais válido vc estudar lógica de programação. 1 Link to comment
joao2235 Posted July 6, 2019 Author Share Posted July 6, 2019 Quais os princípios que precisaria usar para conseguir fazer tipo um cofre de armas junto à esse script ? Link to comment
Other Languages Moderators Lord Henry Posted July 6, 2019 Other Languages Moderators Share Posted July 6, 2019 Que diferença faria um cofre se esse esquema das armas é feito client-side? Link to comment
joao2235 Posted July 6, 2019 Author Share Posted July 6, 2019 2 hours ago, Lord Henry said: Que diferença faria um cofre se esse esquema das armas é feito client-side? Mestre, o que quero fazer é que o player tenha a opção de pagar para guardar as armas dele e mesmo que ele morra, pode voltar lá depois e pegar essas armas. No caso é no marker e no painel acima que vocês me ajudaram à corrigi-lo. Queria saber mais ou menos por cima o que teria que utilizar. Se puder me ajudar, agradeço! Link to comment
Other Languages Moderators Lord Henry Posted July 6, 2019 Other Languages Moderators Share Posted July 6, 2019 (edited) setAccountData - Pra salvar as armas guardadas na conta do jogador. Também pode ser usada para salvar a senha do cofre. getAccountData - Para carregar as armas guardadas quando o jogador logar. giveWeapon - Para dar a arma pro jogador. takeWeapon - Para retirar uma arma do jogador. Edited July 6, 2019 by Lord Henry 1 Link to comment
joao2235 Posted July 7, 2019 Author Share Posted July 7, 2019 (edited) 23 hours ago, Lord Henry said: Pelo que estou vendo, acho mais válido vc estudar lógica de programação. Mestre, estou estudando esses vídeos que por sinal são bons demais! Sinceramente, não sei como começar, porque nunca mexi com Client-Side, me entende ? Não sei se crio um evento no server-side e puxo no client-side, se puder me dar esse norte me ajuda demais! Edited July 7, 2019 by joao2235 Link to comment
DNL291 Posted July 7, 2019 Share Posted July 7, 2019 Para chamar os lados cliente/server você usa triggerClientEvent/triggerServerEvent, além de chamar você também pode passar vários tipos de valores. Uma dica é você começar pelo que você começou fazer, e não pensar lá na frente. Se não entende como fazer trigger, tire um tempo para testar as funções que que mostrei. Faça o mesmo para a marker, armas, GUI. Os links deste tópico serão de muita ajuda pra você: https://forum.multitheftauto.com/topic/116681-informações-úteis-scriptingconfiguraçõestutoriais-para-o-mta/ Link to comment
joao2235 Posted July 8, 2019 Author Share Posted July 8, 2019 7 hours ago, DNL291 said: Para chamar os lados cliente/server você usa triggerClientEvent/triggerServerEvent, além de chamar você também pode passar vários tipos de valores. Uma dica é você começar pelo que você começou fazer, e não pensar lá na frente. Se não entende como fazer trigger, tire um tempo para testar as funções que que mostrei. Faça o mesmo para a marker, armas, GUI. Os links deste tópico serão de muita ajuda pra você: https://forum.multitheftauto.com/topic/116681-informações-úteis-scriptingconfiguraçõestutoriais-para-o-mta/ Sei como fazer um trigger, mas o que gostaria de saber é como faria para conseguir setar a data das armas que o Player tem e conseguir deixar salva até que ele retorne. Sei sobre a função setElementData e getElementData, só não sei como usaria dentro de uma função no client. Por isso perguntei se precisaria criar no server-side e então puxar com o trigger server para uma função no client. Espero que me entenda, peço desculpas por não saber muito, estou buscando aprender. Ficaria grato demais se pudesse me ajudar. 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