Jump to content

n3wage

Members
  • Posts

    290
  • Joined

Everything posted by n3wage

  1. getElementMatrix function getPositionFromElementOffset(element,offX,offY,offZ) local m = getElementMatrix ( element ) -- Get the matrix local x = offX * m[1][1] + offY * m[2][1] + offZ * m[3][1] + m[4][1] -- Apply transform local y = offX * m[1][2] + offY * m[2][2] + offZ * m[3][2] + m[4][2] local z = offX * m[1][3] + offY * m[2][3] + offZ * m[3][3] + m[4][3] return x, y, z -- Return the transformed point end function createVeh(player, commandName, model) local x, y, z = getPositionFromElementOffset( player, 3, 0, 0 ) local rx, ry, rz = getElementRotation(player) local createdVehicle = createVehicle(model, x, y, z, rx, ry, rz) if (createdVehicle == false) then outputChatBox("Error") end end addCommandHandler("veh", createVeh)
  2. Isso seria uma operação ternária, Basicamente: pontoAtual = pontoAtual +1 > #markers and 1 or pontoAtual +1 Seria o mesmo que: if pontoAtual +1 > #markers then pontoAtual = 1 else pontoAtual = pontoAtual +1 end É uma forma simplificada de fazer comparações básicas, o valor depois do and é oque ficara se a comparação retornar true, caso contrario fica o valor depois de or.
  3. Os únicos problemas que vi foi que você esqueceu de checar se o jogador que saiu do veiculo era igual ao jogador local (linha 32 a 39, client side) e você ter usado tostring nos primeiros parâmetros de createMarker (que devem ser números, não strings). Se você quiser todo o script no lado do client: -----------------------------------------------<< -- MTA : Multi Theft Auto : Emanuel's Server -- Date: 21 July 2015 -- Resource: [MTA][Jobs]/[MTA]BusDriver/server.lua -- Type: Client Side -- Author: Emanuel Camacho -----------------------------------------------<< local busses = { [431] = true, [437] = true } local marker, blip local pontoAtual = false local markers = { [1] = { -1798.63940, 83.94303, 15.10938 }, [2] = { -1800.16284, 102.19742, 15.10938 }, [3] = { -1800.60095, 126.91389, 15.10938 } } function getNewBusLocation( ID ) marker = createMarker( markers[ID][1], markers[ID][2], ( markers[ID][3] -1 ), "cylinder", 3.5, 255, 255, 0, 170) blip = createBlipAttachedTo( marker, 0, 2, 255, 255, 0, 255 ) end function onEnter ( player ) if player == localPlayer then if busses[ getElementModel( source ) ] then if getPlayerTeam ( player ) then if getTeamName( getPlayerTeam ( player ) ) == "Bus Driver" then getNewBusLocation ( 1 ) pontoAtual = 1 --[[ aqui optei por usar uma variavel para 'salvar' o checkpoint atual do jogador se você precisar sincronizar isto em algum lugar deve usar element data: setElementData( player, "busData", 1 ) --]] end end end end end addEventHandler ( "onClientVehicleEnter", root, onEnter ) function onLeave(player) if player == localPlayer then if marker and isElement(marker) then destroyElement ( marker ) end if blip and isElement(blip) then destroyElement ( blip ) end blip = nil marker = nil pontoAtual = false end end addEventHandler ( "onClientVehicleExit", root, onLeave ) function onHit( hitPlayer ) if hitPlayer == localPlayer then if pontoAtual ~= false then if marker and isElement ( marker ) and marker == source then if isElement(blip) then destroyElement(blip) end if isElement(marker) then destroyElement(marker) getNewBusLocation ( pontoAtual +1 > #markers and 1 or pontoAtual +1 ) pontoAtual = pontoAtual +1 > #markers and 1 or pontoAtual +1 --setElementData ( hitPlayer, "busData", pontoAtual +1 > #markers and 1 or pontoAtual +1 ) --[[ aqui você tera que usar triggerServerEvent para dar dinheiro ao jogador (givePlayerMoney no lado do cliente não é sincronizado) --]] end end end end addEventHandler ( "onClientMarkerHit", root, onHit ) não testei mas deve estar funcionando Sobre as variáveis predefinidas; root = Uma variável que 'guarda' todos os elementos do servidor (veiculos, players, objetos etc). resourceRoot = similar a root (↑), porem só 'guarda' os elementos criados no resource 'atual'. getElementRoot não existe, talvez você quis dizer getRootElement (que é a mesma coisa que root). (existem outras variaveis desse tipo (chamadas de predefinidas) você pode ver todas aqui).
  4. É isso que o seu script faz .-. obs: ele só vai funcionar se você matar com uma faca (por causa do evento onClientPlayerStealthKill)
  5. Você quer aumentar o tempo que o retângulo permanece na tela, é isso? se for é só você aumentar o numero no segundo parâmetro de setTimer (lembrando que ele deve ser em milisegundos, se não souber calcular este site deve ajudar).
  6. Sim Você usou setTimer e addEventHandler dentro de um evento render; Você não forneceu o primeiro parâmetro da função setTimer (que é a função a ser executada, veja na wiki); No seu addEventHandler(linha 7) no terceiro parâmetro você passou a variável/tabela res (que, como definida na linha 1 é a resolução do jogador) quando era necessário passar uma função;
  7. Não é 'muito recomendável' usar setTimernum evento onClientRender(porque esse evento é acionado umas ~10 vezes por segundo), Você vai ter que fazer uma função (que vai ser acionada no evento onClientPlayerWasted) que: Adicione o evento onClientRender a outra função (que vai 'desenhar' o retângulo) Crie um timer para parar de renderizar a função acima (↑) (removeEventHandler) Mais ou menos assim: local res = { guiGetScreenSize() } function quandoMorrer ( ) addEventHandler ( "onClientRender", root, renderizar ) setTimer ( removeEventHandler, 5000, 1, "onClientRender", root, renderizar ) end addEventHandler ( "onClientPlayerWasted", getLocalPlayer(), quandoMorrer) function renderizar( ) dxDrawRectangle ( 0, 0, res[1], res[2], tocolor ( 121, 121, 121, 100 ) ) end Espero que tenhas entendido
  8. Use a função toggleControl ou cancele o evento onClientKey (fazendo checagens).
  9. Algo assim deve funcionar: Weapons = { [0] = { 0, 1 }, -- Punho [1] = { 2, 3, 4, 5, 6, 7, 8, 9 }, -- Melee [2] = { 22, 23, 24 }, -- Pistolas [3] = { 25, 26, 27 }, -- Shotguns [4] = { 28, 29, 32 }, -- SMGs [5] = { 30, 31 }, -- Fuzis [6] = { 33, 34 }, -- Rifles [7] = { 35, 36, 37, 38 }, -- Pesadas [8] = { 16, 17, 18, 39 }, -- Projeteis [9] = { 41, 42, 43 }, -- Especiais 1 [10] = { 10, 11, 12, 14, 15 }, -- Dildos etc [11] = { 44, 45, 46 }, -- Oculos e paraquedas [12] = { 40 } -- Detonador } function scrollUp ( thePlayer ) local slot = getSlotFromWeapon ( getPedWeapon ( thePlayer ) ); local pos = getWeaponPositionInSlot ( getPedWeapon ( thePlayer ), slot ); local id if ( pos == 1 ) then local p_slot = slot == 0 and #Weapons or slot -1 id = Weapons[p_slot][#Weapons[p_slot]]; else id = Weapons[slot][pos -1]; end giveWeapon ( thePlayer, id, 999, true ); end function scrollDown ( thePlayer ) local slot = getSlotFromWeapon ( getPedWeapon ( thePlayer ) ); local pos = getWeaponPositionInSlot ( getPedWeapon ( thePlayer ), slot ); local id if ( pos == #Weapons[slot] ) then local n_slot = slot == #Weapons and 0 or slot +1 id = Weapons[n_slot][1]; else id = Weapons[slot][pos +1]; end giveWeapon ( thePlayer, id, 999, true ); end --------------------------------------------¬ Util function getWeaponPositionInSlot ( id, slot ) for i, v in ipairs ( Weapons[slot] ) do if ( v == id ) then return i end end return false end --------------------------------------------¬ Bind addEventHandler ( "onResourceStart", resourceRoot, function() for _,v in ipairs ( getElementsByType ( "player" ) ) do bindKey ( v, "mouse_wheel_down", "down", scrollDown ); bindKey ( v, "mouse_wheel_up", "down", scrollUp ); bindKey ( v, "e", "down", scrollDown ); bindKey ( v, "q", "down", scrollUp ); end end ) addEventHandler ( "onPlayerJoin", root, function ( ) bindKey ( source, "mouse_wheel_down", "down", scrollDown ); bindKey ( source, "mouse_wheel_up", "down", scrollUp ); bindKey ( source, "e", "down", scrollDown ); bindKey ( source, "q", "down", scrollUp ); end ) Tente entender o código, qualquer duvida poste aqui
  10. Você vai ter que pensar em uma gambiarra já que isso não é possível nativamente. Talvez checar quando o jogador trocar de arma (OnPlayerWeaponSwitch) e dar a próxima arma do slot (tabelas + giveWeapon) ?
  11. Remove this part: if ( hours >= 24 ) then hours = hours - 23 days = days + 1 if ( days >= 30 ) then days = days - 29 months = months + 1 end end From convertMinsToActualTime function.
  12. 1 - Markers = { -- x, y, z { 0, 0, 0 }, { 10, 10, 10 } } for i, v in ipairs ( Markers ) do createMarker ( v[1], v[2], v[3] ); end 2 - count = 0; function makemarker ( thePlayer ) count = count +1; local pos = { getElementPosition ( thePlayer ) }; _G["Marker" .. count] = createMarker ( pos[1], pos[2], pos[3] ); end addCommandHandler ( "makemarker", makemarker )
  13. Explique melhor qual é o problema. Se for o debug na linha 14 retornando apenas false: Verifique se os dois getElementDataretornam o valor que você deseja e se eles foram definidos antes (setElementData).
  14. hummm, não é suposto acontecer isso mais ok tente assim entao: -- Remova essa parte do fr_server.lua: addEventHandler('onPlayerWasted', g_Root, function() if not getOption('spawnmapondeath') then return end local player = source setTimer( function() if isPedDead(player) then clientCall(player, 'showMap') end end, 2000, 1 ) end )
  15. É só você mudar (no meta.xml) esta linha: "*spawnmapondeath" value="true" /> Para: "*spawnmapondeath" value="false" />
  16. 1 - Isso pode ser corrigido retirando setElementHealth da função setMySkin (fr_server.lua) 2 - Existe uma configuração para isso (chamada spawnmapondeath) que pode ser alterada pelo painel de admin ou pelo meta.xml. obs: esses seus "problemas" devem ser postados na area de Programação em Lua !
  17. n3wage

    fix

    this is not working because you don't have defined index, Use a loop like this: local markers = { {1368.45532, -1279.79651, 13.54688}, {777.17426, 1871.52454, 4.90737}, } function markerscreate () for index, value in ipairs ( markers ) do local mx,my,mz = unpack( markers[index] ) createMarker (mx, my, mz, "arrow", 2, 230, 0, 0, 180) end end addEventHandler( "onClientResourceStart", resourceRoot, markerscreate )
  18. Provavelmente o hud que você baixou não contem a função setPlayerHudComponentVisible, Olhe os exemplos na wiki que facilmente você consegue remover o hud padrão
  19. Quanta ignorância, ainda mandou para o cara errado , vou ter que lhe adicionar a lista de ignorados, again
  20. table.sort(table, function(a,b) return a[2] > b[2] end) I'm still not sure how to use this though. Does this override the original table.sort? Something like this?: table.sort(table, function(a,b) return a[2] > b[2] end) function asdf(theTable) for i, tableValue in ipairs(theTable) do local row = guiGridListAddRow(theList) table.sort(tableValue) guiGridListSetItemText ( theList, row, Column2, tableValue[2], false, true ) end end No, you have to use table.sort in the table (in your example called theTable) before using for loop, see: function asdf(theTable) table.sort(theTable, function(a,b) return a[2] > b[2] end) for i, tableValue in ipairs(theTable) do local row = guiGridListAddRow(theList) table.sort(tableValue) guiGridListSetItemText ( theList, row, Column2, tableValue[2], false, true ) end end
  21. Ele quer o sistema de 'top', não de level.
  22. table.sort(table, function(a,b) return a[2] > b[2] end)
  23. Defina uma tabela; Insira nela todos os jogadores e seus respectivos level's (por exemplo) use table.sort Tente fazer, Se não conseguir poste o código aqui que resolvemos
  24. Algum script esta usando cancelEvent no evento onResourceStart. Você terá que checar seus scripts procurando essa função...
×
×
  • Create New...