-
Posts
3,875 -
Joined
-
Days Won
67
Everything posted by DNL291
-
O seu código está subtraindo a hp do jogador mesmo com zero de vida. Use a função killPed quando a vida tiver zerada.
-
Ok
-
Acabei de testar o código, e funcionou. O problema só pode ser outro, porque você mesmo disse que nenhuma mensagem saiu no chat.
-
Mostre o meta.xml.
-
Esse código é do lado client então não tem a ver com o outro. Você colocou o script no meta.xml? Se fosse os grupos bugados, Ex: o grupo Hab faltando ou com o nome incorreto; ou a ACL não funcionando, ainda assim seria executado os outputChatBox's e se não tivesse mostrando nada no chat, com certeza teria erro no debug.
-
Então o script não está executando. Pode ser que tenha erro no meta.xml, o script não está iniciado ou você não ativou o debug (/debugscript 3) e algo está errado no código.
-
function enterVehicle ( player, seat, jacked ) local nomeacc = getAccountName(getPlayerAccount(player)) outputChatBox("Executando função: enterVehicle", player) outputChatBox("@nomeacc: "..tostring(nomeacc), player) outputChatBox("@seat: "..tostring(seat), player) if seat ~= 0 then outputChatBox("Você está entrando como passageiro", player) elseif seat == 0 then outputChatBox("entrando como Motorista", player) end; if isObjectInACLGroup("user."..nomeacc, aclGetGroup("Hab")) then outputChatBox("#000000[#ff0000VDE#000000]Vai tomar no cu fdp", player, 255, 255, 255, true) else cancelEvent() setPlayerWantedLevel ( player, 6 ) outputChatBox("#000000[#ff0000VDE#000000]#ffffffVocê não tem carteira de habilitação, com isso foi acrescentado 6 estrelas de procurado em você", player, 255, 255, 255, true) end end addEventHandler( "onVehicleStartEnter", getRootElement(), enterVehicle ) Mostre aqui as msgs que aparecerem no chat.
-
E no chat, mostra esta mensagem: "Você não tem carteira de habilitação, com isso foi acrescentado 6 estrelas de procurado em você" ?
-
Mostra algum erro no debug? Qual msg que sai no chat do outputChatBox?
-
Try this: -- Some stats local isPumping = false local fuelPrice = 5 local currentMarker local doEventHandlers local disabledVehs = { [510] = true, [509] = true, [481] = true } -- When the player enters a vehicle addEventHandler ( "onClientVehicleEnter", root, function ( thePlayer, seat ) if ( thePlayer == localPlayer ) and ( seat == 0 ) and disabledVehs[getElementModel(source)] ~= true then if ( fuelTimer ) and ( isTimer( fuelTimer ) ) then killTimer( fuelTimer ) end if not ( getElementData ( source, "vehicleFuel" ) ) then setElementData ( source, "vehicleFuel", 100 ) elseif ( getElementData ( source, "vehicleFuel" ) <= 0 ) then disableVehicleFunctions( source ) else enableVehicleFunctions( source ) end if ( doEventHandlers ) then addEventHandler ( "onClientVehicleExit", source, onVehicleExitDestroy, false ) addEventHandler ( "onClientElementDestroy", source, onVehicleExitDestroy, false ) doEventHandlers = false end fuelTimer = setTimer ( onDecreaseFuel, 7000, 0 ) end end ) -- Disable all vehicle functions whenever the vehicle has no fuel left function disableVehicleFunctions ( theVehicle ) if ( fuelTimer ) and ( isTimer( fuelTimer ) ) then killTimer( fuelTimer ) end setVehicleEngineState( theVehicle, false ) toggleControl ( "accelerate", false ) toggleControl ( "brake_reverse", false ) outputChatBox( "This vehicle has stopped fuel, call a mechanic to refuel!", 0, 225, 0 ) end -- Enable the vehicle functions again function enableVehicleFunctions( theVehicle ) setVehicleEngineState( theVehicle, true ) toggleControl ( "accelerate", true ) toggleControl ( "brake_reverse", true ) end -- When the resource starts addEventHandler ( "onClientResourceStart", resourceRoot, function () local vehicle = getPedOccupiedVehicle ( localPlayer ) if ( vehicle ) and ( getVehicleOccupant ( vehicle, 0 ) == localPlayer ) and disabledVehs[getElementModel(vehicle)] ~= true then doEventHandlers = true if not ( getElementData ( vehicle, "vehicleFuel" ) ) then setElementData ( vehicle, "vehicleFuel", 100 ) elseif ( getElementData ( vehicle, "vehicleFuel" ) <= 0 ) then disableVehicleFunctions( vehicle ) end if ( doEventHandlers ) then addEventHandler ( "onClientVehicleExit", root, onVehicleExitDestroy, false ) addEventHandler ( "onClientElementDestroy", root, onVehicleExitDestroy, false ) doEventHandlers = false end fuelTimer = setTimer ( onDecreaseFuel, 5000, 0 ) end end ) -- Function when a vehicle gets destroyed or when a player exit the vehicle function onVehicleExitDestroy ( theVehicle ) local theVehicle = theVehicle or source if ( fuelTimer ) and ( isTimer( fuelTimer ) ) then killTimer( fuelTimer ) end if ( getElementData ( theVehicle, "vehicleFuel" ) ) then setElementData ( theVehicle, "vehicleFuel", getElementData ( theVehicle, "vehicleFuel" ) ) end unbindKey ( "K", "down", onRefuelVehicle ) unbindKey ( "K", "up", onStopRefuelVehicle ) isPumping = false if ( theVehicle ) then removeEventHandler ( "onClientVehicleExit", theVehicle, onVehicleExitDestroy, false ) removeEventHandler ( "onClientElementDestroy", theVehicle, onVehicleExitDestroy, false ) doEventHandlers = true end end -- When the resource gets stopped addEventHandler ( "onClientResourceStop", resourceRoot, function () local vehicle = getPedOccupiedVehicle ( localPlayer ) if ( vehicle ) and ( getVehicleOccupant ( vehicle, 0 ) == localPlayer ) and disabledVehs[getElementModel(vehicle)] ~= true then onVehicleExitDestroy ( vehicle ) end end ) -- Function that decreases the fuel function onDecreaseFuel () local theVehicle = getPedOccupiedVehicle ( localPlayer ) if ( theVehicle ) then local theFuel = getElementData ( theVehicle, "vehicleFuel" ) if ( theFuel ) and not ( isPumping ) and ( getVehicleEngineState ( theVehicle ) ) and ( theFuel > 0 ) and ( getVehicleOccupant ( getPedOccupiedVehicle ( localPlayer ), 0 ) == localPlayer ) then setElementData ( theVehicle, "vehicleFuel", theFuel - 1 ) if ( getElementData ( theVehicle, "vehicleFuel" ) <= 0 ) then disableVehicleFunctions( theVehicle ) end end end end -- Get the vehicle speed function getVehicleSpeed ( theVehicle, unit ) if ( unit == nil ) then unit = 0 end if ( isElement( theVehicle ) ) then local x,y,z = getElementVelocity( theVehicle ) if ( unit=="mph" or unit==1 or unit =='1' ) then return ( x^2 + y^2 + z^2 ) ^ 0.5 * 100 else return ( x^2 + y^2 + z^2 ) ^ 0.5 * 1.61 * 100 end else return false end end -- When the player hits a fuel marker function onFuelPumpMarkerHit ( hitElement, matchingDimension, theMarker ) if hitElement == localPlayer and isPedInVehicle(localPlayer) then local veh = getPedOccupiedVehicle( localPlayer ) if veh and disabledVehs[getElementModel(veh)] then return end end local theMarker = theMarker or source if ( hitElement ) and ( getElementType ( hitElement ) == "player" ) and ( matchingDimension ) and ( getPedOccupiedVehicle( hitElement ) ) and ( isFuelMarker ( theMarker ) ) and ( getVehicleController( getPedOccupiedVehicle( hitElement ) ) == localPlayer ) then local theVehicle = getPedOccupiedVehicle( hitElement ) if ( getElementData( theVehicle, "vehicleFuel" ) >= 100 ) then outputChatBox ( "Your vehicle has enough fuel!", 225, 0, 0 ) else currentMarker = theMarker bindKey ( "K", "down", onRefuelVehicle ) outputChatBox ( "Press 'K' if you want to refuel.", 0, 255, 0 ) end end end -- When the player hits a fuel marker function onFuelPumpMarkerLeave ( hitElement, matchingDimension ) if hitElement == localPlayer and isPedInVehicle(localPlayer) then local veh = getPedOccupiedVehicle( localPlayer ) if veh and disabledVehs[getElementModel(veh)] then return end end if ( hitElement == localPlayer ) and theVehicle and not isPedInVehicle(localPlayer) then unbindKey ( "K", "down", onRefuelVehicle ) unbindKey ( "K", "up", onStopRefuelVehicle ) isPumping = false end end -- When the player press the space button to refuell function onRefuelVehicle () local veh = getPedOccupiedVehicle( localPlayer ) if ( veh ) and disabledVehs[getElementModel(veh)] ~= true then local theVehicle = getPedOccupiedVehicle( localPlayer ) setElementFrozen ( theVehicle, true ) if ( getVehicleSpeed ( theVehicle, "kmh" ) >= 1 ) then outputChatBox ( "Please bring the vehicle to a complete stop!", 225, 0, 0 ) elseif ( getPlayerMoney() < fuelPrice ) then outputChatBox ( "You do not have enough money, the price is $" .. fuelPrice .." per litre!", 255, 0, 0 ) else local oldFuel = math.floor( getElementData ( theVehicle, "vehicleFuel" ) ) setTimer ( onRefillVehicle, 250, 1, theVehicle, oldFuel ) outputChatBox ( "Your vehicle is being filled, please wait...", 0, 255, 0 ) isPumping = true unbindKey ( "K", "down", onRefuelVehicle ) bindKey ( "K", "up", onStopRefuelVehicle ) end else onStopRefuelVehicle () end end -- Actualy refill the vehicle function onRefillVehicle( theVehicle, oldFuel, price ) if ( theVehicle ) and ( oldFuel ) then local theFuel = tonumber( oldFuel ) local thePrice = tonumber( price ) or 0 if not ( getKeyState ( "K" ) ) then onStopRefuelVehicle ( theFuel, thePrice, theVehicle ) elseif ( getPlayerMoney() < fuelPrice ) and not ( getElementData( theVehicle, "vehicleOccupation" ) ) then outputChatBox ( "You do not have enough money to continue, the price is $" .. fuelPrice .." per litre!", 255, 0, 0 ) onStopRefuelVehicle ( theFuel, thePrice, theVehicle ) elseif ( oldFuel >= 100 ) then onStopRefuelVehicle ( theFuel, thePrice, theVehicle ) else theFuel = math.floor( theFuel + 1 ) thePrice = math.floor( thePrice + 5 ) setTimer ( onRefillVehicle, 250, 1, theVehicle, theFuel, thePrice ) setElementData ( theVehicle, "vehicleFuel", theFuel ) end end end -- When the player stops pressing space or stop fuel function onStopRefuelVehicle ( theFuel, thePrice, theVehicle ) unbindKey ( "K", "up", onStopRefuelVehicle ) isPumping = false local theVehicle = getPedOccupiedVehicle( localPlayer ) local newFreezeStatus = not currentFreezeStatus setElementFrozen ( theVehicle, false ) if ( theFuel ) and ( thePrice ) and not ( tostring( theFuel ) == "space" ) then if ( tonumber( theFuel ) < 100 ) then bindKey ( "K", "down", onRefuelVehicle ) outputChatBox ( "Press 'K' if you want to refuel more.", 225, 0, 0 ) end if ( theVehicle ) and ( getElementData( theVehicle, "vehicleOccupation" ) ) then outputChatBox ( "The company, he works for pays its fuel, lucky bastard.", 0, 255, 0 ) else triggerServerEvent ( "onPlayerPaymentFuel", localPlayer, thePrice ) if ( thePrice ) then outputChatBox ( "You paid $" .. thePrice .. " for recharging!", 0, 255, 0 ) end end end end
-
Dando warp no veículo não vai funcionar, pra isso você vai ter que editar o resource 'admin'. Obs: Editei o código e adicionei cancelEvent().
-
function enterVehicle ( player, seat, jacked ) local nomeacc = getAccountName(getPlayerAccount(player)) if seat ~= 0 then return end; if isObjectInACLGroup("user."..nomeacc, aclGetGroup("Hab")) then outputChatBox("#000000[#ff0000VDE#000000]Vai tomar no cu fdp", player, 255, 255, 255, true) else cancelEvent() setPlayerWantedLevel ( player, 6 ) outputChatBox("#000000[#ff0000VDE#000000]#ffffffVocê não tem carteira de habilitação, com isso foi acrescentado 6 estrelas de procurado em você", player, 255, 255, 255, true) end end addEventHandler( "onVehicleStartEnter", getRootElement(), enterVehicle ) Tenta isso.
-
Remova o nome da função. Assim deve funcionar: addEventHandler("onPlayerVehicleEnter", veh, function() local nomeacc = getAccountName(getPlayerAccount(player)) if isObjectInACLGroup("user."..nomeacc, aclGetGroup("Hab")) then else removePedFromVehicle ( source ) end end) Edit: Troque 'player' por source
-
local disabledVehs = { [510] = true, [509] = true, [481] = true } if disabledVehs[getElementModel(vehicle)] then return end
-
Provavelmente tem algum código pra fazer abrir quando loga, talvez o evento onPlayerLogin, você pode dar uma olhada no próprio resource e ver o que está fazendo o painel abrir.
-
E também, se a pessoa for criar uma verificação simples, tipo um if getServerName() == "lasmdlk" then, vai ser muito vulnerável. Vai bastar apenas reescrever a função do MTA pra burlar: function getServerName() return "nome do server" end
-
1 - Por onde começar, te recomendo começar aprendendo o básico do básico se seu conhecimento de Lua é zero. Se você já teve experiência com outras linguagens, você já pode ir um pouco além e aprender aquilo que sentir a necessidade, pois terá um progresso mais rápido do que alguém que está conhecendo programação/scripting pela primeira vez. O básico de Lua, pelo que eu posso te dizer é: boolean, strings, tabelas, funções, condições, loop; Introdução à linguagem: funções gerais e seus usos; funções do MTA - que é o que vai te dar toda a noção da aplicação da linguagem no MTA. Fora isso algumas coisas que naturalmente você também pode acrescentar ao seu conhecimento como, Edição de mapas, shaders, Banco de dados e o funcionamento interno do MTA que vai te ajudar entender muitas coisas com mais precisão e se aprofundar. 2 - Você vai precisar do conhecimento básico de Lua, isso é indispensável. Primeiro busque se aprofundar mais nisso, depois vem o resto 3 - setTimer | getControlState (Você pode fazer usando onClientRender no lado client) 4 - É possível impedir um script de rodar verificando o nome do servidor, mas você tem outras opções pra proteger o seu script de uma forma eficiente.
-
getGroundPosition getElementPosition
-
Try this: local sx,sy = guiGetScreenSize() local px,py = 1280,720 local x,y = (sx/px), (sy/py) local width = 235 local healthBarW = ( health / getPedMaxHealth() ) * width dxDrawLine(x*447 - 1, y*615 - 1, x*447 - 1, y*636, tocolor(0, 0, 0, 255), 1, false) dxDrawLine(x*682, y*615 - 1, x*447 - 1, y*615 - 1, tocolor(0, 0, 0, 255), 1, false) dxDrawLine(x*447 - 1, y*636, x*682, y*636, tocolor(0, 0, 0, 255), 1, false) dxDrawLine(x*682, y*636, x*682, y*615 - 1, tocolor(0, 0, 0, 255), 1, false) dxDrawRectangle(x*447, y*615, healthBarW, y*21, tocolor(255, 0, 0, 255), false) --health function getPedMaxHealth() assert(isElement(localPlayer) and (getElementType(localPlayer) == "ped" or getElementType(localPlayer) == "player"), "Bad argument @ 'getPedMaxHealth' [Expected ped/player at argument 1, got " .. tostring(localPlayer) .. "]") local stat = getPedStat(localPlayer, 24) local maxhealth = 100 + (stat - 569) / 4.31 return math.max(1, maxhealth) end
-
E isso não se resume só a você, há um tempinho atrás, quem era novo no MTA só encontrava server freeroam (na comunidade brasileira do MTA principalmente). Comigo foi assim também; e depois vim conhecer mais outros servidores como Role Play e RPG. Essa é a pura verdade sobre RPG no MTA. Os novos jogadores/desenvolvedores que conhecem o Mod têm muita dificuldade pra encontrar resources do gênero, e se quiser realmente criar um, vai precisar aprender Lua e montar praticamente do zero (até tem GMs gringos, tipo Nerd Gaming que na minha opinião é uma boa base pra iniciar um). Com certeza falta isso pro MTA - investir nesse modo de jogo. Na verdade tem até uma lista de gamemodes que já vem junto com o MTA, mas são ultrapassados e fracos. Isso pelo menos mudaria as coisas, mesmo que a longo prazo, porque aqueles que conhecerem o Mod, terão tudo mais fácil e não vão quebrar a cabeça tanto pra conseguirem algo novo. E oque acaba surgindo enquanto isso, são falsos RPGs, que consistem apenas em empregos e alguns e pequenos scripts junto com mods e muitas vezes, simplesmente jogam tudo no freeroam e modificam, o que acaba arruinando a qualidade dos servers e com o Mod em si (sem dizer que quem tiver procurando por um bom servidor RPG/RP vão preferir o SAMP).
-
Alan, Lamento o ocorrido mas nenhum Admin do MTA vai poder resolver esse problema, até por que, pelo que entendi se trata de uma situação em que pessoas com acesso geral ao servidor se aproveitaram dos privilégios que ainda tinham. Nesse caso, fica por conta dos donos do servidor ter cuidado com a segurança e resolver os problemas posteriores.
-
É que eu não fiz nenhum teste pra te falar como obter a rotação dele, ainda assim, tenho certeza que você pode facilmente puxar a rotação do guindasteTop pra tentar fazer o cálculo da offSet do guindasteSupport. Tentou usar getElementRotation? Talvez a correção seja atualizar a posição de acordo com a do objeto-base com a função setElementAttachedOffsets. Não sei se já testou isso também, qualquer coisa só falar aqui. Se não conseguir corrigir essa parte, considere criar um objeto duplicado e invisível pra simular o objeto original, já que a origem do problema pode estar no guindasteTop estando também anexado a outro objeto.
-
Tenta usar esta função: function getPointFromDistanceRotation(x, y, dist, angle) local a = math.rad(90 - angle); local dx = math.cos(a) * dist; local dy = math.sin(a) * dist; return x+dx, y+dy; end A distância deve cair no mesmo ponto que o objeto guindasteSupport está anexado, no argumento angle, você precisa passar a mesma rotação (360 graus) que a do objeto guindasteTop.
-
Na verdade esse ##ff000000ff00 funciona como um hack pra fazer só o primeiro código ser checado, você pode até usar esse código no mta que a maioria dos scripts não vão remover o código corretamente, então pra ser efetivo em todos casos, só usar o código do @Banex.
-
Do you want to disable it for the button "Create vehicle" too? Try this: function createSelectedVehicle(leaf) if (getElementDimension(localPlayer) ~= 0) then return outputChatBox("You cannot create vehicle as you are not in the Freeroam arena!", 255, 0, 0) end if not leaf then leaf = getSelectedGridListLeaf(wndCreateVehicle, 'vehicles') if not leaf then return end end server.giveMeVehicles(leaf.id) end That function is at line 944 (fr_client.lua), you can just put the if statement at the beginning of the function. For the command: function createVehicleCommand(cmd, ...) if (getElementDimension(localPlayer) ~= 0) then return outputChatBox("You cannot create vehicle as you are not in the Freeroam arena!", 255, 0, 0) end local vehID local vehiclesToCreate = {} local args = { ... } for i,v in ipairs(args) do vehID = tonumber(v) if not vehID then vehID = getVehicleModelFromName(v) end if vehID then table.insert(vehiclesToCreate, math.floor(vehID)) end end server.giveMeVehicles(vehiclesToCreate) end addCommandHandler('createvehicle', createVehicleCommand) addCommandHandler('cv', createVehicleCommand)