Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    4,008
  • Joined

  • Last visited

  • Days Won

    184

Everything posted by Lord Henry

  1. Salva a skin com um setAccountData e getElementModel, depois que ele logar no server, pega de volta com getAccountData e setElementModel. Vai precisar dos eventos onPlayerQuit, onPlayerLogout e onPlayerLogin.
  2. Se refere ao entrar no server ou se refere depois de morrer?
  3. Só chamar um amigo com notebook pra jogar na sua LAN.
  4. Tutorial de lógica de programação: Curso de Algoritmos #02 - YouTube
  5. Bom, dai teria que saber como está seu GM para ver onde está o evento e onde está faltando adicionar o lado server. Sobre o scr-Lib, não sei se ele é obrigatório para o correto funcionamento do resource, eu deixaria como comentário todas as linhas que chamam ele pra ver se continua funcionando.
  6. No onPlayerLogin. Quando o jogador logar, ele vai verificar se ele tem o status salvo na conta usando getAccountData. Se tiver, seta esses status no jogador com setPedStat.
  7. Sua lógica de criação do plantas e colP está errada. Você precisa colocá-los em uma table vazia antes de criá-los. Senão a variável sempre será substituída a cada execução do loop. Isso significa que ao final do loop, você criou vários plantas e vários colP, mas somente o último pode ser acessado pelo script, pois são os únicos que estão nas variáveis plantas e colP, os outros ficaram sem variável para serem chamados. Dessa forma, somente 1 planta e 1 colP funcionam. dff = engineLoadDFF("grassplant01.dff") engineReplaceModel(dff, 3409) addCommandHandler("devmode", function() setDevelopmentMode(true) end ) plantas = { {-1014, -1609.2, 75.36}, {-1010, -1609.242, 75.367}, {-1006, -1609.19, 75.36}, {-1002, -1609.104, 75.36}, {-998, -1609.082, 75.36}, {-994, -1609.037, 75.36}, {-990, -1609.037, 75.36}, {-1014, -1613, 75.36}, {-1010, -1613, 75.367}, {-1006, -1613, 75.36}, {-1002, -1613, 75.36}, {-998, -1613, 75.36}, {-994, -1613, 75.36}, {-990, -1613, 75.36}, {-1014, -1617, 75.36}, {-1010, -1617, 75.367}, {-1006, -1617, 75.36}, {-1002, -1617, 75.36}, {-998, -1617, 75.36}, {-994, -1617, 75.36}, {-990, -1617, 75.36}, {-1014, -1621, 75.36}, {-1010, -1621, 75.367}, {-1006, -1621, 75.36}, {-1002, -1621, 75.36}, {-998, -1621, 75.36}, {-994, -1621, 75.36}, {-990, -1621, 75.36}, } plant = {} colP = {} for i, v in ipairs (plantas) do plant[i] = createObject(3409, v[1],v[2],v[3]) colP[i] = createMarker(v[1],v[2],v[3],"cylinder",2.5,0,0,0,0) end function fcm1 () for i, col in ipairs (colP) do if isElementWithinMarker (localPlayer, col) then setPedAnimation (localPlayer, "INT_HOUSE", "wash_up", 10000, true, false, true, false, 10) setTimer(function () setPedAnimation (localPlayer) givePlayerMoney (math.random (500, 1000)) destroyElement (plant[i]) plant[i] = nil destroyElement (colP[i]) colP[i] = nil end, 10000, 1) break end end end addCommandHandler ("colher", fcm1) Outro problema que percebi, é que você estava criando as plantas na mesma variável da table plantas.
  8. Já tentou deixar essa linha 5 fora da função? Solta no script.
  9. No seu lugar eu evitaria de mexer no painel admin para não correr risco de ficar sem o painel Admin e destruir o servidor. Em vez disso você pode simplesmente desativar as funções de dar armas e veículos para todos os Staffs por meio da ACL Group e pegar somente com o Freeroam. Dai nas settings do Freeroam você pode bloquear os veículos e armas que não podem ser usados por ID. Se você não estiver usando o Freeroam, crie outro painel específico apenas para dar veículos e armas. Pode ser um painel bem simples onde o usuário digita o ID da arma ou veículo em um editbox e clica em um botão. Dai ao clicar o botão, verifica se o ID está numa table personalizada que você criou (table de armas/veículos permitidos), se não estiver, nada acontece. Se estiver, dá a arma ou veículo pro usuário. Mas caso você realmente queira arriscar, saiba que o painel admin coloca as armas e veículos no painel preenchendo de maneira automática com loop passando pelos IDs. Ele não preenche por meio de arquivo XML como os interiores. Ele faz isso no arquivo client/gui/admin_main.Lua. Mais ou menos na linha 122 (naquele for) e mais ou menos na linha 142 (também um loop for).
  10. Este erro está dizendo que não foi possível chamar uma função pois o resource no qual ele pertence (scr-Lib) não está ativado no seu servidor. Ative o resource scr-Lib para corrigir este problema. E o problema de cima é do seu Gamemode. O client está tentando ativar o evento "WarpMyVehicle" do servidor mas ele não foi adicionado lá. Acontece por exemplo quando você usa triggerServerEvent no client.Lua com um evento que não existe no server.Lua.
  11. Normalmente se coloca no onPlayerLogin e no onPlayerLogout.
  12. Neste caso, para otimizar daria pra fazer ele simplesmente cancelar tudo antes da parte que interessa, dessa forma: function onWasted (totalAmmo, killer, killerWeapon, bodypart, stealth) local ContaDoPlayer = getPlayerAccount (source) if (isGuestAccount (ContaDoPlayer)) then return end -- Se for guest, cancela a função e não passa daqui. local theWeapon = getPedWeapon (source) local weaponAmmo = getPedTotalAmmo (source) takeAllWeapons (source) setPlayerWantedLevel (source, 0) setTimer (spawnPlayer, 1000, 1, source, 1158.344, -1293.679, 16.445, 0, getElementModel (source), 0, 0, getPlayerTeam(source)) fadeCamera (source, false, 0, 0, 0, 0) setTimer (fadeCamera, 2000, 1, source , true, 0.5) setTimer (setCameraTarget, 1250, 1, source) end addEventHandler ("onPlayerWasted", root, onWasted)
  13. @kevincouto6 Vc interpretou errado. Você deve ter ouvido "evite condição de negação no if" isto é, evitar quando possível. Neste caso isolado, a diferença de processamento é irrelevante. Você deve manter do jeito que estava. Por exemplo: function isEvenNumber (thePlayer, cmd, number) local number = tonumber (number) local par = number/2 if (math.floor (par) == par) then outputChatBox ("Número par.", thePlayer) elseif not (math.floor (par) == par) then -- Poderia ser somente else, ou então usar ~= (diferente de) no lugar do == (igual a) outputChatBox ("Número ímpar.", thePlayer) end end addCommandHandler ("par", isEvenNumber)
  14. Linhas 9 e 10 estão erradas. Vc está pulando os parâmetros do setTimer. Você fez certo nas linhas 6, 7 e 8. Faça como fez nelas.
  15. Não nesse caso, pois o onClientRender já é chamado a cada frame, e portanto se atualiza sozinho. Não precisa de outro evento para chamá-lo.
  16. Verifica o level do jogador com getElementData.
  17. addCommandHandler - Ativa uma função por comando. setPedArmor - Seta um colete no jogador. Coloque isso dentro da função que será ativada pelo comando acima.
  18. Obs: Ative as legendas em português.
  19. Você precisará substituir um objeto original do jogo pelo objeto editado. use engineLoadTXD, engineImportTXD, engineLoadDFF e engineReplaceModel.
  20. Comece fazendo testes com dxDrawText e getPedWeapon. Veja os exemplos da Wiki.
  21. N. Vou dar um exemplo: function pegarGrana (thePlayer, cmd) if isGuestAccount (getPlayerAccount (thePlayer)) then return end -- Se o jogador está deslogado, então cancela essa função e nada acontece. local account = getPlayerAccount (thePlayer) -- 'account' recebe a conta que o jogador que executou o comando está logado. local agora = getRealTime().timestamp -- 'agora' recebe um número bem grande, que é a quantidade de segundos que se passaram desde 01/01/1970 local antes = getAccountData (account, "ultimaGrana") -- 'antes' recebe o que estava salvo na conta do jogador, se não existir essa data, recebe false. (sempre será uma string caso exista, mesmo se você salvar um número) if (antes) then -- Se existe uma data na conta, então: if ((agora - tonumber(antes)) > 86400) then -- Se a diferença de 'agora' e de 'antes' for maior que 86400 segundos (1 dia), então: setAccountData (account, "ultimaGrana", agora) -- Salva o 'agora' na conta do jogador. outputChatBox ("Você pegou o dinheiro. Poderá pegar novamente daqui a 24 horas.", thePlayer) givePlayerMoney (thePlayer, 10000) -- Dá o dinheiro pro jogador. else -- Se a diferença de 'agora' e de 'antes' não for maior que 86400 segundos, significa que não faz 24 horas que o dinheiro foi pego. Então: outputChatBox ("Você precisa esperar mais tempo para poder pegar o dinheiro.", thePlayer) end else -- Se não existe essa data na conta do jogador (ele nunca pegou a grana antes), então: setAccountData (account, "ultimaGrana", agora) -- Salva o 'agora' na conta do jogador. outputChatBox ("Você pegou o dinheiro. Poderá pegar novamente daqui a 24 horas.", thePlayer) givePlayerMoney (thePlayer, 10000) -- Dá o dinheiro pro jogador. end end addCommandHandler ("pegar", pegarGrana) -- Comando pra ativar essa função: /pegar
×
×
  • Create New...