Jump to content

Gaimo

Members
  • Posts

    209
  • Joined

  • Last visited

Everything posted by Gaimo

  1. Estou desenvolvendo uma concessionaria com banco de dados tudo certinho, o sistema de comprar está funcionando perfeitamente. Porém estou pensando como vai ser o sistema de spawnar os veículos e a verificação de quem pode entrar, qual seria a melhor opção? : 1) Adicionar um setElementData no veículo com as informações que eu vou usar, exemplo {dono, placa, veh_id} e as verificações serão com getElementData ou 2) Criar uma tabela e adicionar os veículos e os dados Na segunda opção vou ter mais trabalho, e sempre que precisar verificar um veiculo vou precisar rodar um FOR pra procurar se o carro pertence a tabela. Qual seria o mais recomendado?
  2. function RandomWeather () -- Função do clima aleatorio local WeatherID = math.random(20) -- Numero aleatorio de ids setWeather (WeatherID) -- Id dos climas outputChatBox ("[Alerta Meteorológico] Aconteceu uma mudança no clima do servidor.", getRootElement(), 255, 255, 255, true) -- Texto que aparece no chat end setTimer(RandomWeather, math.random(60*1000*10, 60*1000*30), 0) No script acima, onde tem um math.random vai ser rodado uma única vez o math.random ou sempre que o tempo do timer acabar e ele for reniciado ele vai gerar um novo tempo? Minha ideia é que seja aleatório entre 10 e 30 minutos.
  3. Outra dúvida relacionada a tabelas, se eu quiser criar algo assim: markers["nome"] = createMarker..... Como eu crio direto na tabela? Assim? Markers={ ["nome"] = CreateMarker... , ["outroNome"] = 77, }
  4. players = {} function startWork (source) print(getPlayerName(source)) -- Retorna o nick ou seja o source existe if not players[source] then players[source]["rubble"] = 0 players[source]["rubbleRemoved"] = false players[source]["atWork"] = false end end Quando eu tento players[source]["rubble"] = 0, Não era pra adicionar na tablela o source? tipo assim: players{ source = {"rubble" = 0}, } Erro no debugscript: attempt to index field "?" (a nil value)
  5. Funcionou, mas fiquei com uma dúvida, não sei se foi porque inverti a ordem de uma linha ou porque usei sua verificação: if tempTimers[thePlayer] and isTimer(tempTimers[thePlayer]) then Inclusive MUITO BOA!! Mas tenho quase certeza que é a verificação.... Mesmo deletando o pedido de venda antes do timer o seller ainda ta na variavel Saca só: addCommandHandler("aceitar", function(buyer, commandName) if buyer then seller = sellOrders[returnPOS(sellOrders, buyer, 2)][2] -- EXISTE UM PEDIDO DE VENDA PARA O COMPRADOR? if #sellOrders == 0 then return end if returnPOS(sellOrders, buyer, 2) ~= false then -------- AQUI EU PEGO O SELLER ------------ seller = sellOrders[returnPOS(sellOrders, buyer, 2)][2] ----------------------------------------------------- weapon = sellOrders[returnPOS(sellOrders, buyer, 2)][3] takeWeapon(seller, weapon) giveWeapon(buyer, weapon, 1) outputChatBox("Nome do vendedor: "..getPlayerName(seller), buyer) ----------------COMO EU TAVA DELETANDO ------------------ table.remove(sellOrders, returnPOS(sellOrders, buyer, 2)) killTimer(tempTimers[seller]) --------------------------------------------------------- ---------- COM SUA VERIFICACAO---------------------------- if tempTimers[seller] and isTimer(tempTimers[seller]) then killTimer(tempTimers[seller]) -- ????????? tempTimers[seller] = nil end table.remove(sellOrders, returnPOS(sellOrders, buyer, 2)) ---------------------------------------------------------- outputChatBox("Troca realizada com sucesso.", seller and buyer) end outputChatBox("=========FIM DO SCRIPT=========", seller) end end, false, false) Bom agora está funcionando, OBRIGADO!
  6. Eu sei que a função que deve ser usada é o killTimer mas não consigo utilizar. Segue o script: tempTimers = {} -- Tabela que armazena os timers -- COMO O TIMER É SETADO tempTimers[seller] = setTimer ( function(seller) if table.remove(sellOrders, returnPOS(sellOrders, seller, 2)) then return outputChatBox("Sua proposta de venda expirou.", seller) end end, 1000*120, 1, seller) -- COMO EU TENTEI MATA O TIMER killTimer(tempTimers[seller]) killTimer(tempTimers[seller][1]) -- Ambos dão erro de index Como eles estão sendo colocados na table? Achei que estária assim: tempTimers = { [userdata] = {timer}, [userdata] = {timer} } userdata sei que é o player, porém achei que pra acessar o timer bastava colocar o [1] -> tempTimers[seller][1] Como realmente está a table?
  7. Não estou conseguindo exibir um GUI, quero que quando um jogador envie uma proposta de venda para outro, exiba um GUI na tela com as informações da venda. Exemplo: O jogador (nome-do-jogador), está oferecendo uma (nome-da-arma) por R$ (valor). [ACEITAR] - [RECUSAR] Não está sendo exibido o GUI quando é feito a proposta de venda. GUI Esse é o evento que está no servidor: e é assim que estou chamando o evento: triggerServerEvent("sellWeapon",localPlayer,player,WeaponID,Ammo,900) -- 900 é o price. Código todo do client: Estou adaptando um script da net.
  8. Essas vars só poderão ser usadas nesse resource né?
  9. meta.xml vars.Lua s.Lua ERRO: INFO: nil INFO: nil attempt to index global 'tabletest' (a nil value) O que eu fiz de errado?
  10. Estou com um problema, depois de fazer a primeira rota, quando os jogadores vão repetir dobra, provavelmente o evento esta sendo criado duas vezes, como posso resolver? Exemplo: 1 vez fazendo a rota envia uma única mensagem, na segunda vai enviar duas mensagens, e assim vai indo.... Server-side teams = {} routes = { -- A ROTA 1 { {119.0534,-1600.7428,11.0364, {113.26455, -1603.06458, 10.01185}}, }, -- A ROTA 2 { {-49.013, -1518.564, 1.82, {-52.439, -1522.7, 2.164}}, }, } veh = {} -- Cria os veiculos e coloca na table veh for i=1,6 do veh[createVehicle(408, -101.64936 + (5 * i), -1624.50, 4, 0,0,0, "ElitZone")] = true end -- Congela os veiculos da table veh for i, _ in pairs(veh) do setElementFrozen(i, true) setVehicleDamageProof(i, true) end addEventHandler ( "onVehicleStartEnter", getRootElement(), function(player, seat) if veh[source] then -- Verifica se o veiculo pertence ao trabalho -- Verificar se o jogador atende os requisitos se nao cancelevent end end) addCommandHandler ("startlixo", function(thePlayer, cmd) local vehicle = getPedOccupiedVehicle(thePlayer) if veh[vehicle] then if getDuo(thePlayer) then if getDuo(thePlayer) == getVehicleOccupant(vehicle, 1) or getDuo(thePlayer) == getVehicleOccupant(vehicle, 0) then local temp = getDuoTable(thePlayer) if not teams[temp][3] then teams[temp][3] = true startJob(getVehicleOccupant(vehicle, 0), getVehicleOccupant(vehicle, 1), vehicle, temp) end else outputChatBox("O ocupante do seu veiculo nao eh seu duo.") end else outputChatBox("Voce precisa de uma dupla para este trabalho, digite: /duo NICKDOPLAYER") end else outputChatBox("Voce precisa estar dentro do veiculo de trabalho.") end end) function startJob(driver, collector, vehicle, duo) setElementFrozen(vehicle, false) setVehicleDamageProof(vehicle, false) outputChatBox("Siga até o marker para começar sua ROTA.", driver) -- Marker inicial start = createMarker(-45.42224, -1590.39478, 3.54895, "cylinder", 2, math.random(0, 255), math.random(0, 255), math.random(0, 255), 100, driver) startBlip = createBlipAttachedTo(start, 0, 2, 255,255,255,255, 0,_,driver) addEventHandler( "onPlayerMarkerHit", root, function(marker) -- Source do evento eh o Player if marker == start then if driver and collector then outputChatBox("Selecionando uma rota para voces.", driver) outputChatBox("Selecionando uma rota para voces.", collector) destroy(start) destroy(startBlip) randRot = routes[math.random(1, #routes)] driverMarker = createMarker(randRot[teams[duo][4]][1], randRot[teams[duo][4]][2], randRot[teams[duo][4]][3] -0.9, "cylinder", 5, 255, 255, 255, 255, driver) driverBlip = createBlipAttachedTo(driverMarker, 0, 2, 255,255,255,255, 0,_,driver) else outputChatBox("Seu companheiro nao esta no veiculo.") end elseif marker == driverMarker then -- Marker do motorista if driver and collector then --setElementFrozen(vehicle, true) destroy(driverMarker) destroy(driverBlip) collectorMarker = createMarker(randRot[teams[duo][4]][4][1], randRot[teams[duo][4]][4][2], randRot[teams[duo][4]][4][3] -0.9, "cylinder", 2, 255, 255, 255, 255, collector) end elseif marker == collectorMarker then -- Marker do coletor - QUANDO ELE VAI PEGAR O LIXO destroy(collectorMarker) -- ACOES do coletor setPedAnimation(collector, "CARRY", "liftup", -1, false, false, false, false) setTimer(function() teams[duo][5] = createObject(1264, 0, 0, 0) setPedAnimation(collector,"CARRY","crry_prtial", 0, false, true, false) exports.bone_attach:attachElementToBone(teams[duo][5], collector, 11,-0.15,0.00,0.10,-92.00,-5.00,5.00) end, 1000, 1) outputChatBox("Leve o lixo até o caminhão", collector) vehMarker = createMarkerAttachedTo(vehicle, "cylinder", 2, 255,255,255,255, collector,_,-3.5,-1) elseif marker == vehMarker then -- Marker que fica atras do caminhao destroy(vehMarker) setPedAnimation( collector, "CARRY", "putdwn", -1, false, false, false, false ) destroy(teams[duo][5]) if teams[duo][4] == #randRot then -- FIM DO TRABALHO -- MANDE RETORNAR UM LUGAR outputChatBox('A rota acabou retorne para tal lugar', driver) endMarker = createMarker(-66.08349, -1587.34961, 3.11077, "cylinder", 2, 255,255,255,255,driver) endBlip = createBlipAttachedTo(endMarker, 0, 2, 255,255,255,255, 0,_,driver) else teams[duo][4] = teams[duo][4] + 1 driverMarker = createMarker(randRot[teams[duo][4]][1], randRot[teams[duo][4]][2], randRot[teams[duo][4]][3] -0.9, "cylinder", 5, 255, 255, 255, 255, driver) end elseif marker == endMarker then if driver and collector then destroy(endMarker) destroy(endBlip) --paga o jogador teams[duo][3] = false teams[duo][4] = 1 removePedFromVehicle(driver) removePedFromVehicle(collector) respawnVehicle(vehicle) setElementFrozen(vehicle, true) setVehicleEngineState(vehicle, false) setVehicleOverrideLights(vehicle, 1) setVehicleDamageProof(vehicle, false) outputChatBox('Trabalho escravo, voces nao vao receber nada.') end end end) end function createDuo (thePlayer, cmd, theDuoName) -- Cria a table de cada duo. if getPlayerFromPartialName (theDuoName) == thePlayer then return outputChatBox("Você não pode ser sua dupla.", thePlayer) end if getPlayerFromPartialName (theDuoName) then -- Se existe um jogador com o nick informado e esse jogador informado não é o mesmo que o jogador que executou o comando (evita fazer duo com si mesmo), então: if getDuo (getPlayerFromPartialName (theDuoName)) then -- Se o jogador que foi informado no comando já tem uma duo, então: outputChatBox ("O jogador '"..theDuoName.."' já está em uma duo de lixeiros.", thePlayer, 255, 150, 0) -- Manda este aviso ao jogador que executou o comando. else -- Se o jogador informado não está em uma duo de lixeiros ainda, então: local theDuo = {thePlayer, getPlayerFromPartialName (theDuoName), false, 1, "obj"} -- Cria a table da duo, inserindo o jogador que executou o comando e o jogador que ele informou na mesma table duo. table.insert (teams, theDuo) -- Insere a table theDuo na table teams. outputChatBox ("Você colocou '"..theDuoName.."' como sua duo de lixeiro.", thePlayer) -- Manda este output ao cara que executou o comando. end else outputChatBox("O jogador não foi encontrado.", thePlayer) end end addCommandHandler ("duo", createDuo) -- Uso do comando: /duo NickDoSeuAmigo function getDuo (player) -- Função que retorna a duo do jogador informado. for i, duo in ipairs (teams) do -- Para cada duo da table teams, faça: if duo[1] == player then -- Se o jogador informado está como primeiro elemento desta duo, então: return duo[2] -- Retorna o segundo elemento desta duo. elseif duo[2] == player then -- Se o jogador informado está como segundo elemento desta duo, então: return duo[1] -- Retorna o primeiro elemento desta duo. end end end function exitDuo (thePlayer, cmd) -- Função que remove a si mesmo da duo. Desfazendo-a. for i, duo in ipairs (teams) do -- Para cada duo da table teams, faça: if duo[1] == thePlayer or duo[2] == thePlayer then -- Se o jogador informado está nesta duo, então: outputChatBox ("Sua dupla foi desfeita.", duo[1]) -- Manda esse aviso pro primeiro cara da duo. outputChatBox ("Sua supla foi desfeita.", duo[2]) -- Manda esse aviso pro segundo cara da duo. table.remove (teams, i) -- Remove a duo que estiver na posição i da teams, no caso a duo que está sendo verificada agora. break -- Sai do loop, pois não precisa verificar o resto das duos. end end end addCommandHandler ("exitduo", exitDuo) function getDuoTable(thePlayer) for i, duo in ipairs (teams) do -- Para cada duo da table teams, faça: if duo[1] == thePlayer or duo[2] == thePlayer then -- Se o jogador informado está nesta duo, então: return i end end end function getPlayerFromPartialName(name) -- Função útil que pelo nome já sabe pra que serve. local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil if name then for _, player in ipairs(getElementsByType("player")) do local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower() if name_:find(name, 1, true) then return player end end end end function destroy(element) if isElement(element) then destroyElement(element) element = nil end end function createMarkerAttachedTo(element, mType, size, r, g, b, a, visibleTo, xOffset, yOffset, zOffset) mType, size, r, g, b, a, visibleTo, xOffset, yOffset, zOffset = mType or "checkpoint", size or 4, r or 0, g or 0, b or 255, a or 255, visibleTo or getRootElement(), xOffset or 0, yOffset or 0, zOffset or 0 assert(isElement(element), "Bad argument @ 'createMarkerAttachedTo' [Expected element at argument 1, got " .. type(element) .. "]") assert(type(mType) == "string", "Bad argument @ 'createMarkerAttachedTo' [Expected string at argument 2, got " .. type(mType) .. "]") assert(type(size) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 3, got " .. type(size) .. "]") assert(type(r) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 4, got " .. type(r) .. "]") assert(type(g) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 5, got " .. type(g) .. "]") assert(type(b) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 6, got " .. type(b) .. "]") assert(type(a) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 7, got " .. type(a) .. "]") assert(isElement(visibleTo), "Bad argument @ 'createMarkerAttachedTo' [Expected element at argument 8, got " .. type(visibleTo) .. "]") assert(type(xOffset) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 9, got " .. type(xOffset) .. "]") assert(type(yOffset) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 10, got " .. type(yOffset) .. "]") assert(type(zOffset) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 11, got " .. type(zOffset) .. "]") local m = createMarker(0, 0, 0, mType, size, r, g, b, a, visibleTo) if m then if attachElements(m, element, xOffset, yOffset, zOffset) then return m end end return false end
  11. Como deixar um arquivo só para useful functions, outro arquivo para variáveis e usar em um script main? usefulfunctions.Lua vars.Lua main.Lua
  12. Estou criando um trabalho em dupla, onde só vai iniciar quando os dois jogadores estiverem prontos, mas estou com algumas dúvidas. Como eu envio um outputChatBox para mais de um jogador? Só funcionou quando eu usei 2 outputChatBox. -- Function function startJob(seat, vehicle) driver = getVehicleOccupant(vehicle, 0) collector = getVehicleOccupant(vehicle, 1) if driver and collector then --outputChatBox("Digite /ready para começar a trabalhar.", (collector and driver)) Nao aparece para os dois. outputChatBox("Digite /ready para começar a trabalhar.", driver) outputChatBox("Digite /ready para começar a trabalhar.", collector) end end Como eu faço para colocar um frozen nesses veículos? for i=1,6 do veh[createVehicle(408, -101.64936 + (5 * i), -1624.34583, 3.37500, 0,0,0)] = true --setElementFrozen(???, true) (???) O que eu coloco ali? end Esse for cria os veículos que eu uso para o trabalho.
  13. Estou tentando criar uma loja de carros, mas estou com dificuldades com sqlite, criei uma table chamada veh_shop, quero adicionar nela o modelo, quantidade e valor dos carros. Quando o jogador comprar diminuir a quantidade. A tabela já está criada, mas provavelmente o melhor era criar ela por script, mas depois eu arrumo isso, por enquanto gostaria de saber como eu crio uma única vez a linha que vai conter os dados do primeiro veículo e atualizo esses valores. -- veh1 model 402, amount = 10, price, 25000 local veh1 = createVehicle(402, 1939.30078, -1774.96899, 19.52501,0,0,90, "12345678") local mveh1 = createMarker(0,0,0,"cylinder", 1, 255,100,100,100) attachElements(mveh1, veh1, 0, 3.2, -0.5) -- Informações para o jogador -- Quantidade total e disponivel -- Preço db = dbConnect( "sqlite", "vehicle_shop.db" ) -- table_name = veh_shop model, amount, price -- Como eu adiciono uma unica vez cada veiculo que eu quero? --dbQuery( db, "INSERT INTO veh_shop IF NOT EXIST VALUES (?,?,?)", 402, 10, 25000) <-- Nao funciona, se os dados forem atualizados ela vai criar uma nova. --- if buy car then amount = amount - 1 end addCommandHandler("buy", function(player, command) if isElementWithinMarker(player, mveh1) and command == "buy" then -- Como eu atualizo essa linha na tabela? if executeSQLQuery("UPDATE veh_shop SET model=?, amount=? price=? WHERE", 402, 9, 25000) then -- Quero atualizar o valor da quantidade de veiculos local x, y, z = getElementPosition(player) createVehicle(402, x, y+3, z) end end end) Esse script está bem simples porque eu queria testar se consigo fazer algo com sqlite porém já vi que ainda não.
  14. Eu preciso remover um evento se não for mais usar ele? Ele consome muito recurso? Exemplo: Um evento que detecta se o player clicou em um determinado botão e executa alguma ação, depois que o player fecha esse GUI teoricamente não precisa mais desse evento a menos que ele abra o GUI novamente, eu preciso remove-lo? Tipo quando o player abrir o GUI criar esse evento e quando fechar remover esse evento. Eu normalmente faço meus eventos assim: addEventHandler ( "onDgsMouseClickDown", acceptButton, function(button) if button == "left" and source == acceptButton then destroyElement(mainWindow) startJob () triggerServerEvent("setSkin", root) score = "up" end end) Como eu faria para colocar um removeEvent Ali ? addEventHandler ( "onDgsMouseClickDown", acceptButton, function(button) if button == "left" and source == acceptButton then destroyElement(mainWindow) startJob () triggerServerEvent("setSkin", root) score = "up" --removeEventHandler("onDgsMouseClickDown", ?????, ?????) end end)
  15. Acho que está retornando false, você usou setElementData em algum lugar? Tente isso: function mySQL() local getPedCamisas = getElementData(source, "getPedCamisas") local getPedCalcas = getElementData(source, "getPedCalcas") local getPedSapatos = getElementData(source, "getPedSapatos") local getPedBones = getElementData(source, "getPedBones") local getPedOculos = getElementData(source, "getPedOculos") exports.DBConnection:execute("insert into roupasID(CAMISA, BERMUDA, SAPATO, BONE, OCULOS) values(?,?,?,?,?)", getPedCamisas, getPedCalcas, getPedSapatos, getPedBones, getPedOculos) outputChatBox(tostring(getPedCamisas)) outputChatBox(tostring(getPedCalcas)) outputChatBox(tostring(getPedSapatos)) outputChatBox(tostring(getPedBones)) outputChatBox(tostring(getPedOculos)) outputDebugString("CORRECT?") end addEventHandler("onPlayerLogout",getRootElement(),mySQL)
  16. Comecei um trabalho de pizzaboy mas estou com algumas dúvidas, a parte inicial está criada. Vamos ao que eu tenho pronto: O jogador consegue entrar e sair da pizzaria e falar com um PED para aceitar o trabalho ou pedir demissão, até aqui tudo funcionando. O que estou pensando em fazer, após aceitar o trabalho o jogador vai poder ver um marker no qual pode trocar de skin (colocar o uniforme), eu sei que no lado do servidor tem como criar um marker com visibleTo mas o que eu realmente queria era criar meio que um marker que pudesse ser visto só por "pizzaboys" mas não sei se tem como fazer isso. Então por enquanto vou testando com visibleTo. Como eu penso que vai ser o resource: O player pega a skin ( uniforme ), faz algumas animações (fazendo as pizzas), pega elas e leva até a moto, e sai entregar. O que eu penso que vou usar: Marker, blip, animações, objetos ( pizza e caixa de pizza) , veiculo (moto), setAccountData ( pagar o jogador ) timer e mais algumas outras A parte prática do trabalho, no caso ele "fazer as pizzas, levar até a moto, aparecer os markers e blips e etc no caso todo o funcionamento do resource é melhor eu deixar em qual lado? Sei que algumas coisas precisam ser server-side e outras client-side mas acho que com o que eu vou usar da pra ser tudo server-side, quais seriam as diferenças em fazer client-side e server-side? O que me recomendam?
  17. Coloquei para salvar em um xml no lado do client. Não sei se foi a melhor opção mas funcionou.
  18. Quero testar meus scripts e estou forever alone, testei com o sandboxie mas sem sucesso. Tem como eu abrir dois clientes?
  19. O que eu posso fazer? Identificar o serial e setar o login e senha nos input?
  20. Descobri que por padrão se não for definido o RespawnPosition, ele é definido onde o veículo foi criado. Logo não precisa setar o respawnPosition.
  21. Assim? function showPanel() if panel == false then showCursor(not isCursorShowing()) addEventHandler("onClientRender", localPlayer, GUI) panel = true return elseif panel == true then removeEventHandler("onClientRender", localPlayer, GUI) panel = false end end
  22. Ta uma bagunça, pra ser sincero nem sem o que está acontecendo, o painel abre pra geral, ou não abre pra mim abre pra outro. Qual a diferença entre root, getElementRoot() e localPlayer ? Server-side sW, sH = guiGetScreenSize() aBoxes = 0 panel = false function GUI() panel = true dxDrawImage(sW/2 - 320, sH/2 - 320, 640, 640, "files/img/painel.png") --dxDrawImage(sW/2 + 170, sH/2 - 150, 30, 30, "files/img/bAccept.png") end function showPanel(source) if panel == false then showCursor(not isCursorShowing(source)) addEventHandler("onClientRender", source, GUI) panel = true return elseif panel == true then removeEventHandler("onClientRender", source, GUI) panel = false end end function isCursorOnElement( posX, posY, width, height ) if isCursorShowing( ) then local mouseX, mouseY = getCursorPosition( ) local clientW, clientH = guiGetScreenSize( ) local mouseX, mouseY = mouseX * clientW, mouseY * clientH if ( mouseX > posX and mouseX < ( posX + width ) and mouseY > posY and mouseY < ( posY + height ) ) then return true end end return false end function click(_,state) if state == "down" and panel then -- Accept if isCursorOnElement(sW/2 - 75, sH/2 + 100, 150, 40) then showCursor(false) showPanel() triggerServerEvent ( "setJob", resourceRoot, localPlayer) -- Close elseif isCursorOnElement(sW/2 + 170, sH/2 - 150, 30, 30) then showCursor(false) showPanel() end end end addEventHandler ( "onClientClick", getRootElement(), click) routes = { --[1] = {1567.93457, -1893.43579, 12.96944}, --[2] = {1405.94702, -1880.95251, 12.95655}, [1] = {1688.91943, -1829.25281, 13.48962}, [2] = {1689.58313, -1797.27710, 13.48806}, } ped = createPed(0, 1683.96326, -1815.92603, 13.54688) setElementFrozen(ped, true) getJob = createMarker(1683.96326, -1815.92603, 13.54688-0.8, "cylinder", 2, 0, 0, 0, 10) -- usefull function function randomDiff (start, finish) if start >= finish or not start or not finish then return false end if (math.floor(start) ~= start) or (math.floor(finish) ~= finish) then return false end local rand = math.random(start, finish) while (rand == lastRand) do rand = math.random(start, finish) end lastRand = rand return rand end -- Gera uma rota para o player function rota() local RR = routes[randomDiff(1, #routes)] target = createMarker(RR[1], RR[2], RR[3], "cylinder", 2, 255, 0, 0, 255) blip = createBlipAttachedTo(target, 41, 1) end function startJob() aBoxes = 0 startMarker = createMarker(1683.57776, -1811.70239, 13.54688 - 0.8, "cylinder", 2, 255, 0, 0, 255) createBlipAttachedTo(startMarker, 41, 1) end addEvent( "startJob", true ) addEventHandler( "startJob", localPlayer, startJob ) function frozen(thePlayer, time) setTimer(function() setElementFrozen(getPedOccupiedVehicle(thePlayer), true) end, 300, 1) setTimer(function() setElementFrozen(getPedOccupiedVehicle(thePlayer), false) end, time, 1) end function del() destroyElement(blip) destroyElement(target) end addEvent( "del", true ) addEventHandler( "del", localPlayer, del) -- Main addEventHandler( "onClientMarkerHit", getRootElement(), function (thePlayer, dim) -- Source = Marker que o player hitou if dim then if source == getJob and not isPedInVehicle(thePlayer) then showPanel(thePlayer) end if source == startMarker then -- Avisar se o jogador já tem as caixas e não pode pegar mais if aBoxes >= 10 then outputChatBox("Aviso, player ja tem as caixas") return end -- Roda alguma animacao frozen(thePlayer, 3000) -- Seta a quantidade de caixas pra 10 aBoxes = 3 -- Gera uma rota aleatoria setTimer(function() rota() end, 3000, 1) end -- Se o marker existe e eh o destino do player if target ~= nil and source == target then del() frozen(thePlayer, 3000) -- Paga o player setElementData(localPlayer, "dinheiro", math.random(100, 200)) -- Faz alguma animacao e para o carro -- Diminui uma caixa aBoxes = aBoxes - 1 -- Informa a quantidade de caixas outputChatBox("Caixas restantes: "..aBoxes) if aBoxes > 0 then -- Gera uma rota aleatoria setTimer(function() rota() end, 3000, 1) elseif aBoxes == 0 then outputChatBox("Retorne ao estoque para pegar mais caixas.") end end end end)
  23. Desculpa reviver o tópico mas preciso de uma ajuda, como eu seto o respawn? veh = {} -- Cria os veiculos e coloca na table veh for i=1,6 do veh[createVehicle(459, 1700.75781 + 3*i, -1806.09680, 13.54688, 0,0,0)] = true end Tentei colocar setVehicleRespawnPosition em todo o lugar mas n foi n
  24. Tive que refazer o mod completamente, passei para o client, eu tenho uma tara por fazer server-side, eh um trabalho, esta funcionando parcialmente, sim teria mais de um marker
  25. addEventHandler( "onVehicleEnter", getRootElement(), function (thePlayer, seat) -- Se o veiculo que o player entrou pertence ao trabalho entao if getAccountData(thePlayer, "job") == "transportador" then if veh[getPedOccupiedVehicle(thePlayer)] then triggerClientEvent ( thePlayer, "startJob", thePlayer) end else cancelEvent() outputChatBox("Você não é um transportador!") end end) O cancelEvent nao esta funcionando. Nao diz nenhum erro.
×
×
  • Create New...