Jump to content

n3wage

Members
  • Posts

    290
  • Joined

Details

  • Location
    Brazil

Recent Profile Visitors

944 profile views

n3wage's Achievements

Pee-Wee

Pee-Wee (21/54)

2

Reputation

  1. Solução usando diferentes dimensões para cada marker: Boxs = { Positions = { {1368.09497, -1279.76941, 13.54688 + 0.8, 285.67160, -86.19171, 1001.52289 + 0.8, 294.71225, -80.24703, 1001.51563 - 0.8, 4}, {2333.50806, 61.62383, 26.70579 + 0.8, 285.67160, -86.19171, 1001.52289 + 0.8, 294.71225, -80.24703, 1001.51563 - 0.8, 4}, {-2625.85010, 208.34500, 4.81250 + 0.8, 285.67160, -86.19171, 1001.52289 + 0.8, 294.71225, -80.24703, 1001.51563 - 0.8, 4}, {2158.97290, 943.12683, 10.82031 + 0.8, 285.67160, -86.19171, 1001.52289 + 0.8, 294.71225, -80.24703, 1001.51563 - 0.8, 4} }, Data = {} } addEventHandler("onResourceStart", resourceRoot, function () for i = 1, #Boxs.Positions do local enter = createMarker(Boxs.Positions[i][1], Boxs.Positions[i][2], Boxs.Positions[i][3], "arrow", 1, 255, 255, 0, 255); local exit = createMarker(Boxs.Positions[i][4], Boxs.Positions[i][5], Boxs.Positions[i][6], "arrow", 1, 255, 255, 0, 255); local marker = createMarker(Boxs.Positions[i][7], Boxs.Positions[i][8], Boxs.Positions[i][9], "cylinder", 1, 255, 255, 0, 255); createBlipAttachedTo( enter, 6, 2, 0, 255, 0, 0, 0, 7000 ); setElementInterior( exit, Boxs.Positions[i][10] ); setElementInterior( marker, Boxs.Positions[i][10] ); setElementDimension( exit, i ); setElementDimension( marker, i ); Boxs.Data[ enter ] = { type = "enter", id = i }; Boxs.Data[ exit ] = { type = "exit", id = i }; Boxs.Data[ marker ] = { type = "marker", id = i }; end end ) addEventHandler("onMarkerHit", resourceRoot, function (Jog, mathDim) if ( getElementType(Jog) == "player" and mathDim and Boxs.Data[ source ] ) then if ( Boxs.Data[ source ]["type"] == "enter" ) then local x, y, z = getElementPosition(Jog); local id = Boxs.Data[ source ]["id"]; fadeCamera(Jog, false, 1.0); setTimer( function (Jog) fadeCamera(Jog, true, 1.0); setElementDimension ( Jog, id ); setElementInterior(Jog, Boxs.Positions[ id ][10], Boxs.Positions[ id ][4]+1.5, Boxs.Positions[ id ][5]+1.5, Boxs.Positions[ id ][6]); end , 2000, 1, Jog) elseif ( Boxs.Data[ source ]["type"] == "exit" ) then local id = Boxs.Data[ source ]["id"]; fadeCamera(Jog, false, 1.0); setTimer( function (Jog) fadeCamera(Jog, true, 1.0); setElementDimension ( Jog, 0 ); setElementInterior(Jog, 0, Boxs.Positions[ id ][1]+1.5, Boxs.Positions[ id ][2], Boxs.Positions[ id ][3]); end , 2000, 1, Jog) elseif ( Boxs.Data[ source ]["type"] == "marker") then triggerClientEvent(Jog, getResourceName(getThisResource())..": onClientSystem", root, "addRenderScript"); end end end )
  2. Só para complementar, Isso ocorre porque a linguagem pega apenas o primeiro argumento passado de funções executadas dentro de outras funções. Ou seja, Nessa linha: Boxs.Marker.Create[2] = createMarker(unpack(Boxs.Marker.Positions[math.random(1, #Boxs.Marker.Positions)]), "cylinder", 1, 255, 0, 0, 255); A linguagem só vai pegar o primeiro argumento retornado da função unpack, Assim ficando: Boxs.Marker.Create[2] = createMarker(POSICAO_X, "cylinder", 1, 255, 0, 0, 255); Por isso o erro ocorre, A solução é fazer como o DNL fez, criar variáveis com os valores retornados pela função unpack e depois usar essas variáveis na função createMarker.
  3. Tenha certeza que você adicionou uma coluna na gridlist (guiGridListAddColumn). Use guiGridListAddRow em vez de guiGridListGetSelectedItem na linha 11. Ah, Também lembre de fechar o arquivo xml depois de adicionar os itens na gridlist.
  4. Honestly this isn't going to work, If you have basic knowledge of how things work you can break this "protection" with 1 line of code.
  5. @FelipeMallmann Esse seu ultimo código não vai funcionar porque você redefiniu a variavel carro como sendo parâmetro da função do timer, Assim ela vira nil já que você não passou nenhum parâmetro, Para seu "método" ter funcionado você teria que ter feito da seguinte maneira: local carro = source setTimer( function () -- ... Sem usar parâmetros na função, Mas tem uma maneira melhor, Você pode passar os parâmetros que quiser no setTimer que eles serão passados para a função: setTimer ( function( carro ) -- ... end , 5000, 1, source ); Assim você passará a variável source (que é o veiculo que explodiu) para a função do timer. -- btw outra coisa que vocês estão fazendo errado é usar sourcePlayer (Variável não definida) nos outputChatBoxes, Usando essa "variável" (nil) Vocês estarão mandando a mensagem para todos os jogadores.
  6. Tente: local subornos = {}; function subornarpolicial ( thePlayer, _, nick, amount ) if ( nick and amount ) then if ( getPlayerMoney ( thePlayer ) >= ( tonumber ( amount ) or math.huge ) ) then local target = getPlayerFromPartialName ( nick ); if ( target ) then if ( getElementData( thePlayer, "algemado" ) or getElementData( thePlayer, "navtr" ) ) then subornos[ target ] = { thePlayer, tonumber( amount ) }; outputChatBox("#000000[#ff0000POLICIA#000000] #c1c1c1O Jogador algemado lhe ofereceu $" .. amount .. " para você liberar ele, digite /aceitarsuborno para aceitar ou /recusarsuborno para recusar.", target, 255, 255, 255, true ); else outputChatBox( "#000000[#ff0000POLICIA#000000] #c1c1c1Você precisa estar preso ou algemado para executar este comando!", thePlayer, 255, 255, 255, true ); end else outputChatBox( "#000000[#ff0000POLICIA#000000] #c1c1c1Nenhum jogador encontrado com este nome!", thePlayer, 255, 255, 255, true ); end else outputChatBox( "#000000[#ff0000POLICIA#000000] #c1c1c1Você não tem dinheiro suficiente!", thePlayer, 255, 255, 255, true ); end else outputChatBox( "#000000[#ff0000POLICIA#000000] #c1c1c1Comando correto: /suborno nick_do_policial total_de_dinheiro!", thePlayer, 255, 255, 255, true ); end end addCommandHandler ( "suborno", subornarpolicial ); function aceitar_suborno( thePlayer ) if ( subornos[thePlayer] ) then local subornoInfo = subornos[thePlayer]; takePlayerMoney ( subornoInfo[1], subornoInfo[2] ); outputChatBox ( "O policial aceitou seu suborno ! Você perdeu $" .. subornoInfo[2], subornoInfo[1], 0, 255, 0 ); subornos[ thePlayer ] = nil; else -- ninguem esta subornando o jogador. end end addCommandHandler( "aceitarsuborno", aceitar_suborno );
  7. Não tem necessidade nenhuma em usar element data, Você pode fazer da seguinte maneira (Obviamente você vai precisar trocar as variáveis, checar se o jogador que ofereceu o suborno ainda esta online etc): No topo do script: subornos = {}; No comando de oferecer suborno: subornos[ jogador que vai ser subornado ] = { jogador que esta oferecendo o suborno, quantia }; No comando de aceitar o suborno: if subornos[ jogador que vai aceitar o suborno ] then local subornoInfo = subornos[ jogador que vai aceitar o suborno ]; takePlayerMoney ( subornoInfo[1], subornoInfo[2] ); outputChatBox ( "O policial aceitou seu suborno ! Você perdeu $" .. subornoInfo[2], subornoInfo[1], 0, 255, 0 ); subornos[ jogador que vai aceitar o suborno ] = nil; else -- ninguem esta subornando o jogador. end
  8. function PedirReforcos ( thePlayer ) local location = getZoneName ( getElementPosition ( thePlayer ) ); for i, player in pairs ( getElementsByType ( "player" ) ) do if ( isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( player ) ), aclGetGroup ( "ComandosPolicia" ) ) ) then local x, y, z = getElementPosition ( player ); local distancia = getDistanceBetweenPoints3D ( x, y, z, getElementPosition ( thePlayer ) ); outputChatBox ( "#000000[#ff0000POLICIA#000000] #c1c1c1O jogador " .. getPlayerName ( thePlayer ) .. " pediu reforços mais proximo de " .. location .." a ".. math.floor(distancia) .." Km/H.", player, 255, 255, 255, true ) end end end addCommandHandler( "reforcos", PedirReforcos );
  9. Sim, é exatamente assim, Claro que pode ser aprimorado para salvar outros dados também, Mas como uma base funciona. Já que você precisa passar a conta no primeiro argumento da função setAccountData você pode fazer um loop de todas as contas usando a função getAccounts.
  10. Isso fica a sua escolha, Eu usaria as funções db* para poder trabalhar com MySQL támbem (Fora que acho mais organizado cada resource/gamemode ter seu database), Você também pode usar account datas (Que também são salvas na internal.db). Exatamente, Quando o jogador se logar você carrega todos os dados e quando ele sair você obtêm eles usando getElementData ou getAllElementData e salva no database. Você também pode ir salvando de tempos em tempos para ter uma segurança a mais se quiser.
  11. Você "escolhe" a função quando adiciona o evento: addEventHandler ("limparchat", root, abrirchat) Se ao invés de abrirchat tivéssemos outra função ali essa outra função que iria receber os parâmetros (Também podemos fazer duas (ou mais) funções receberem os parâmetros (usando outra vez a função addEventHandler)).
  12. nick_de_quem_limpou vai ser o nick do jogador que limpou o chat, Porem essa variavel só existe na função abrirchat (porque passamos ela via triggerClientEvent) então definimos a variavel global name como sendo igual a variavel nick_de_quem_limpou, Assim teremos o nick fora da função abrirchat, e ai podemos usar ele no dxDrawText. function dxchat() dxDrawRectangle(168, 203, 600, 62, tocolor(0, 0, 0, 109), false) dxDrawBorderedText(""..name.." Limpou o Chat", posone, 215, 197, 383, tocolor(255, 255, 255, textAlpha),1.00, font) end function abrirchat(nick_de_quem_limpou) name = nick_de_quem_limpou; addEventHandler ("onClientRender", root, dxchat) setTimer(function() removeEventHandler ("onClientRender", root, dxchat) end, 4000, 1 ) end addEvent ("limparchat", true) addEventHandler ("limparchat", root, abrirchat)
  13. Basta você passar o nick (ou o jogador) como argumento na função triggerClientEvent, Assim você terá o nick de quem limpou o chat no lado do cliente. -- server triggerClientEvent(root, "limparchat", root, getPlayerName( player ) ) -- client function abrirchat( nick_de_quem_limpou ) name = nick_de_quem_limpou; -- continuação da função Com esse código a variavel global name vai ser equivalente ao nick do jogador que limpou o chat. Outra coisa, vi que você repetiu varias vezes a função outputChatBox para "limpar" o chat, Você pode usar um loop para fazer isso mais facilmente: for _ = 1, 20 do -- 20 = numero de vezes que a função sera executada outputChatBox ( " ", root ); end
  14. function dxchat() dxDrawBorderedText(""..getPlayerName(localPlayer).." Está assaltando a loja", 197, 215, 197, 383, tocolor(255, 255, 255, textAlpha),1.00, font) dxDrawRectangle(168, 203, 468, 62, tocolor(0, 0, 0, 109), false) if fadeIn == false then textAlpha = textAlpha - 7 elseif fadeIn == true then textAlpha = textAlpha + 7 end checkAlpha() end
×
×
  • Create New...