Jump to content

DNL291

Retired Staff
  • Posts

    3,875
  • Joined

  • Days Won

    67

Everything posted by DNL291

  1. Você pode usar uma variável pra verificar se o "onClientRender" está ativo. Quando ativar o "onClientRender" passa true para a variável.
  2. Qualquer pessoa que quiser contribuir pode ajudar na atualização, correções de bugs, etc, já que o MTA é open source. É claro que pode depender dos desenvolvedores pra isso. Mas quem têm o direito pra manter as atualizações só a Equipe do MTA, depende da aprovação deles, logicamente.
  3. Always use givePlayerMoney server-side, because the player's money will not be synchronized with the server and the money will not 'change' when you call getPlayerMoney server-side. Try this: addEventHandler( "onClientResourceStart", resourceRoot, function() local money2 = createMarker(-282.60000610352, 405.79998779297, 69.300003051758, 'corona', 7, 255, 0, 0, 255) setElementDimension (money2, 336) addEventHandler ( "onClientMarkerHit", money2, MarkerHit ) end ) function MarkerHit( p, md ) if p == localPlayer and md then triggerServerEvent( "doGiveMoneyOnMarkerHit", p, 35000 ) destroyElement( source ) end end Server addEvent( "doGiveMoneyOnMarkerHit", true ) addEventHandler( "doGiveMoneyOnMarkerHit", root, function( v ) if v then givePlayerMoney( client, tonumber(v) ) end end )
  4. Então seu freeroam ou está modificado ou é antigo. De qualquer forma, na linha 135 fica a função joinHandler e a quitHandler na linha 599 neste fr_server do freeroam: https://github.com/multitheftauto/mtasa-resources/blob/master/[gameplay]/freeroam/fr_server.lua
  5. Nas funções da linha 134 e 559 (usei ctrl + f pra localizar).
  6. No freeroam parece ter um trecho que cria os blips no script fr_server.lua.
  7. Try this: function isPlayerAiming() if getControlState(source, "aim_weapon") then if not (isControlEnabled(source, "fire")) then toggleControl( source, "fire", true ) end else if isControlEnabled(source, "fire") then toggleControl(source, "fire", false) end end end addEventHandler("onPlayerWeaponFire", getRootElement(), isPlayerAiming)
  8. I don't know if you have already tested it, but this code will leave your health bar inverted, compared to this one: You can try to fix it using this way (with @pa3ck's code): dxDrawImageSection( hudS.fX, hudS.fY + (hudS.fH - currHeight), hudS.fW, currHeight, 0, hudS.fH - currHeight, hudS.fW, currHeight, "heart_fill.png" ) Also, keep in mind that the health bar should get bugged if player's health is above 100%, so I recommend you to use this function: https://wiki.multitheftauto.com/wiki/GetPedMaxHealth You can do it for the oxygen as well (use getPedMaxOxygenLevel).
  9. 'start' é um comando usado pelo resource admin, tente usando outro nome: addCommandHandler( "iniciar", function (thePlayer, commandName, cmd) if not (cmd) then return end; if cmd == "teste" then triggerClientEvent ( thePlayer, "onClientStart", thePlayer ) else outputChatBox("Erro") end end )
  10. É, eu percebi testando aqui que não funciona... Tenta isto: string.gsub(text, "%p", "")
  11. Você pode armazenar a senha numa tabela ou element-data com sincronização desativada (server side) é só proteger os dados do client usando a variável predefinida 'client' em vez de 'source' sempre que usar triggerServerEvent. Se precisar salvar a senha, usa o evento onPlayerQuit/Logout + setAccountData.
  12. Pelo que vejo no código, você escreveu isObejectInACLGroup - um erro que você mesmo poderia ter percebido usando /debugscript 3. De resto, você pode ver a diferença com o código do @Pedro861 Use a seguinte condição dentro de onColShapeHit/Leave também: if getElementType(thePlayer) == "player" then
  13. Se ainda não conseguiu fazer essa parte dos checkpoints, mostre seu código aqui (se não for problema torná-lo público). Será mais fácil criar diretamente no seu código do que escrever um exemplo.
  14. DNL291

    [ help ]

    Try using this function: function gridListHasRowText( text ) for i=1, #guiGridListGetRowCount(gridList) do if guiGridListGetItemText( gridList, i, 1 ) == tostring(text) then return true end end return false end
  15. DNL291

    spawn system

    What's the point of freezing a not spawned player? He'll become unfreezed when spawned.
  16. That code will not work if you warp on a vehicle. Just use getPedOccupiedVehicle(localPlayer) inside the function 'ahudd': local screenW, screenH = guiGetScreenSize() function ahudd() if getPedOccupiedVehicle ( localPlayer ) then dxDrawImage(screenW * 0.8424, screenH * 0.6289, screenW * 0.1194, screenH * 0.0256, "nbgg.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(screenW * 0.8444, screenH * 0.6322, screenW * 0.1153, screenH * 0.0189, "nn.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawText("Jármű épség:", (screenW * 0.8424) + 1, (screenH * 0.6289) + 1, (screenW * 0.9618) + 1, (screenH * 0.6544) + 1, tocolor(0, 0, 0, 255), 1.00, "default-bold", "center", "center", false, false, false, false, false) dxDrawText("Jármű épség:", screenW * 0.8424, screenH * 0.6289, screenW * 0.9618, screenH * 0.6544, tocolor(255, 255, 255, 255), 1.00, "default-bold", "center", "center", false, false, false, false, false) end end addEventHandler( "onClientResourceStart", resourceRoot, function() addEventHandler("onClientRender", root, ahudd) end ) if fileExists("client.lua") then fileDelete("client.lua") end
  17. Na verdade não está 100% e eu só não terminei pela falta de teste com outro jogador. Então essa msg no chat é de teste mas você pode remover nas linhas 105 e 109.
  18. Você precisa editar o race neste caso e deixar tudo pra funcionar de acordo com o seu sistema de eventos. Acho que é só modificar o gamemode mesmo (nunca usei o gamemode race, então não te dou certeza que só fazer isso). Deixar o gamemode como script é claro. E usar eventos, funções exportadas caso seja preciso. Se você já tiver algum conhecimento de como tudo funciona no race, vai ter mais facilidade . Edit: Se mapa do evento for o mesmo que do GM race acho que é só converter pra código Lua.
  19. Leia isto por favor: https://wiki.multitheftauto.com/wiki/PT-BR/Introdução_ao_Scripting Como mostra na página, só abrir um editor de texto (como o notepad), colar o código e salvar com a extensão .lua (nome_do_script.lua). O meta.xml precisa ser salvo exatamente com esse nome e extensão: https://wiki.multitheftauto.com/wiki/PT-BR/Introdução_ao_Scripting#Identificando_seu_recurso Dentro do meta, em script src coloque o nome do script (.lua). Aqui está o meta.xml: <meta> <script src="nome_do_script.lua" type="server" /> </meta> Salva esses dois dentro duma pasta zipada ou numa pasta padrão (como qualquer resource que você encontra).
  20. Acontece em todos servidores? Você tem esse problema com o mouse fazendo outras coisas? Se for só no MTA, tenta reinstalar o seu GTA:SA e MTA.
  21. Eu tinha feito uma parte do código e acabei esquecendo desse tópico, desculpe a demora na resposta. Fiz o resto hoje, e fiz um teste básico - o ideal é entre dois jogadores, mas tá aqui o código: local towingVehs = {} local TOWKEY = "arrow_u" local disabledControls = { "vehicle_left", "vehicle_right", "accelerate", "brake_reverse", "handbrake"--[[, "enter_exit"]] } -- veículo de teste --local vbanshee = createVehicle(429, -2000.75354, 1063.79028, 54.97813, 0,0,88.0069543) addEventHandler( "onResourceStart", resourceRoot, function() setTimer( monitoringTowingVehicles, 100, 0 ) end ) addCommandHandler( "guinchar", function (sp, cmd, pName) if pName and isElement(getPlayerFromPartialName( pName )) then local targetPlayer = getPlayerFromPartialName( pName ) if not (getPedOccupiedVehicle(targetPlayer)) then return end; local myveh = getPedOccupiedVehicle(sp) --local towVeh = getNearestVehicle(veh) if not (myveh) then return end; setPlayerVehicleTowing( targetPlayer, myveh, true ) end end ) function setPlayerVehicleTowing(p, v, bool) -- p: o jogador que vai guinchar o veículo -- v: o veículo que vai guinchar o outro -- bool: ativar/desat. o guinchamento vinculado à tecla if p and getElementType(p) == "player" and v and getElementType(v) == "vehicle" and type(bool) == "boolean" then towingVehs[ v ] = bool and p or nil for i, control in pairs(disabledControls) do toggleControl(p, control, bool) end setVehicleBeingTowed( getPedOccupiedVehicle(p), v, bool ) local driver = getVehicleController( v ) if bool and driver and not isKeyBound( driver, TOWKEY, "both", funcInput ) then bindKey( driver, TOWKEY, "both", funcInput ) elseif bool == false and driver and isKeyBound( driver, TOWKEY, "both", funcInput ) then unbindKey( driver, TOWKEY, "both", funcInput ) end return true end return false end function setVehicleBeingTowed(v, towingVeh, bool) if v and isElement(v) and towingVeh and isElement(towingVeh) and type(bool) == "boolean" then if bool then setElementData( towingVeh, "towSys:VehicleBeingTowed", v, false ) else if getElementData( towingVeh, "towSys:VehicleBeingTowed" ) then removeElementData( towingVeh, "towSys:VehicleBeingTowed" ) end end end end function getVehicleBeingTowed( towingVeh ) if towingVeh and isElement(towingVeh) then return getElementData( towingVeh, "towSys:VehicleBeingTowed" ) end end function funcInput ( player, key, keyState ) if not (getPedOccupiedVehicle(player)) then return end; local tPlayer = towingVehs[ getPedOccupiedVehicle(player) ] if tPlayer and getPedOccupiedVehicle(tPlayer) then local towedVeh = getPedOccupiedVehicle(tPlayer) end if key == TOWKEY and keyState == "down" and towedVeh then --outputChatBox("down") doAcellerateVehicle( towedVeh, true ) elseif key == TOWKEY and keyState == "up" and towedVeh then --outputChatBox("up") doAcellerateVehicle( towedVeh, false ) end end function monitoringTowingVehicles(player, v) for v, player in pairs(towingVehs) do local moveTo = "" local _,_,myvehRZ = getElementRotation(v) local _,_,towedVRZ = getElementRotation( getPedOccupiedVehicle(player) )--getElementRotation(vbanshee) myvehRZ, towedVRZ = math.floor(myvehRZ), math.floor(towedVRZ) local rotDiff = ( math.max(myvehRZ, towedVRZ) - math.min(myvehRZ, towedVRZ) ) --outputChatBox("@rotDiff: "..tostring(rotDiff)) if ( towedVRZ > myvehRZ ) and ( towedVRZ - myvehRZ ) <= 180 then moveTo = "left" elseif ( towedVRZ > myvehRZ ) and ( towedVRZ - myvehRZ ) > 180 then moveTo = "right" elseif ( myvehRZ > towedVRZ ) and ( myvehRZ - towedVRZ ) <= 180 then moveTo = "right" elseif ( myvehRZ > towedVRZ ) and ( myvehRZ - towedVRZ ) > 180 then moveTo = "left" end if rotDiff <= 8 then if getControlState( player, "vehicle_right" ) then setControlState( player, "vehicle_right", false ) outputChatBox("right false") end if getControlState( player, "vehicle_left" ) then setControlState( player, "vehicle_left", false ) outputChatBox("left false") end elseif moveTo == "left" or moveTo == "right" then setControlState( player, "vehicle_" .. moveTo, true ) end --outputChatBox("Mover para: "..moveTo, me, 225, 225, 225) end end addEventHandler( "onElementDestroy", root, function() if getElementType(source) == "vehicle" and towingVehs[ source ] then local driver = getVehicleController( source ) if driver then setPlayerVehicleTowing( getVehicleController( getVehicleBeingTowed(source) ), source, false ) end end end ) addEventHandler( "onVehicleExplode", root, function() if towingVehs[ source ] then local driver = getVehicleController( source ) if driver then setPlayerVehicleTowing( getVehicleController( getVehicleBeingTowed(source) ), source, false ) end end end ) local SetControlState = setControlState function setControlState(p, control, state) if p and getElementType(p) == "player" and type(control) == "string" and type(state) == "boolean" then if getControlState( p, control ) ~= state then SetControlState( p, control, state ) end end end function doAcellerateVehicle(v, bool) local driver = getVehicleController(v) if driver then if bool and getControlState( driver, "accelerate" ) ~= true then setControlState( driver, "accelerate", true ) elseif bool == false and getControlState( driver, "accelerate" ) ~= false then setControlState( driver, "accelerate", false ) end end end function getPlayerFromPartialName(name) 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 getNearestVehicle(veh) if not (isElement(veh)) then return false end; local myVehX, myVehY = getElementPosition(veh) local smallestD = 999999 local nearestVeh for i, v in pairs(getElementsByType"vehicle") do local vx,vy = getElementPosition(v) local _dist = getDistanceBetweenPoints2D(vx,vy,myVehX,myVehY) if _dist < smallestD and v ~= veh then smallestD = _dist nearestVeh = v end end return nearestVeh or false end ]] O guinchamento funciona da seguinte forma: Você digita o comando guinchar e especifica um nome do jogador no comando (o dono do veículo a ser guinchado). E o outro jogador deve estar num veículo; esse veículo será guinchado segurando a seta p/ cima. É provável que não esteja da forma que deve funcionar. A parte de clicar num ponto para o veículo ser puxado eu não fiz, se for necessário só falar. Não testei muita coisa além disso porque só um jogador não dá pra fazer tudo e saber se funciona. Outra coisa, a corda anexada aos veículos eu não fiz (se conseguir encontrar uma textura, ótimo, eu posso adicionar).
  22. Use these functions Server side: getAccountName getPlayerAccount isObjectInACLGroup aclGetGroup triggerClientEvent And trigger a Client custom event to open the panel. That will not work. You're mixing server-side functions with client side.
  23. Try using the second parameter: pressOrRelease. So the updated code should look like this: addEventHandler( "onClientKey", root, function ( button, press ) if button == "mouse1" and press and getPedOccupiedVehicle(localPlayer) then if getElementModel( getPedOccupiedVehicle(localPlayer) ) == 476 and isControlEnabled( "vehicle_secondary_fire" ) then toggleControl ( "vehicle_secondary_fire", false ) outputChatBox ("Guns activated") else if not isControlEnabled( "vehicle_secondary_fire" ) then toggleControl ( "vehicle_secondary_fire", true ) outputChatBox ("No rustler guns") end end end end )
  24. Try this: addEventHandler( "onClientKey", root, function ( button ) if button == "mouse1" and getPedOccupiedVehicle(localPlayer) then if getElementModel( getPedOccupiedVehicle(localPlayer) ) == 476 and isControlEnabled( "vehicle_secondary_fire" ) then toggleControl ( "vehicle_secondary_fire", false ) else if not isControlEnabled( "vehicle_secondary_fire" ) then toggleControl ( "vehicle_secondary_fire", true ) end end end end ) If it doesn't work, try using cancelEvent.
×
×
  • Create New...