n3wage
Members-
Posts
290 -
Joined
Everything posted by n3wage
-
Nunca reparei isso, enfim, tente esse script (server side): addEventHandler ( "onResourceStart", resourceRoot, function ( ) for _,v in ipairs ( getElementsByType ( "vehicle" ) ) do if getVehicleOccupants ( v ) and #getVehicleOccupants ( v ) > 0 then setVehicleDamageProof ( v, true ) end end end ) addEventHandler ( "onVehicleEnter", root, function ( ) setVehicleDamageProof ( source, false ) end ) addEventHandler ( "onVehicleExit", root, function ( ) if #getVehicleOccupants ( source ) > 0 then -- talvez seja necessário trocar o 0 pelo 1, não testei.. setVehicleDamageProof ( source, true ) end end )
-
Não, mas se for pra fazer uma imagem que mostre o fundo (do jogo) e que seja cinza porquê não usar um retângulo ? Claro que com imagens dá pra fazer uma personalização melhor, mas se for pra fazer simples um retângulo já resolve
-
local sw, sh = guiGetScreenSize() local g_dx = {} local offset = 0 -- Se não quiser encostado no canto direito só aumentar g_dx.width, g_dx.height = 250, 300 -- Largura e altura do retângulo-dx g_dx.from = { sw - (g_dx.width + offset), 0 } g_dx.to = { (sw - g_dx.width)/2, (sh - g_dx.height)/2 } -- mover para o centro da tela -- g_dx.left, g_dx.top = g_dx.from[1], g_dx.from[2] addCommandHandler( "moverdx", function() if g_dx.startTime then return end; g_dx.startTime = getTickCount() g_dx.endTime = g_dx.startTime + 1000 -- Aqui você define o tempo pra animação addEventHandler("onClientRender", root, renderAnimation) end ) function renderAnimation() local now = getTickCount() local elapsedTime = now - g_dx.startTime local duration = g_dx.endTime - g_dx.startTime local progress = elapsedTime / duration g_dx.left, g_dx.top = interpolateBetween(g_dx.from[1],g_dx.from[2],0, g_dx.to[1],g_dx.to[2],0, progress, "InQuad") -- Quando o tempo para a animação acabar, -- não será mais executada essa função if (now > g_dx.endTime) then removeEventHandler("onClientRender", root, renderAnimation) g_dx.startTime = nil end end function drawDX() dxDrawRectangle( g_dx.left, g_dx.top, g_dx.width, g_dx.height, tocolor(0,0,0, 180) ) dxDrawText( "Texto para animação DX", g_dx.left, g_dx.top, g_dx.left + g_dx.width, g_dx.top + dxGetFontHeight(2,"default-bold"), tocolor(230, 230, 230), 2, "default-bold", "center", "center" ) end -- Mostrar o retângulo e o texto a cada frame addEventHandler("onClientRender", root, drawDX) @DNL Sim eu sei disto, por isso falei que ele poderia usar números decimais, pois enquanto o numero inteiro não mudar, o alpha continuará sendo igual, deixando assim a animação mais lenta.
-
local res = { guiGetScreenSize() } addEventHandler ( "onClientRender", root, function ( ) dxDrawRectangle ( 0, 0, res[1], res[2], tocolor ( 121, 121, 121, 100 ) ) end ) Algo assim
-
Você pode fazer o efeito com shaders ou da maneira fácil, com um retângulo cinza na tela (claro que o efeito fica pior assim...)
-
Não precisa usar interpolateBetween, da pra fazer com variaveis, igual falei ali acima ↑ alpha = 0 -- Variavel que ira ser o alpha function sua_funcao_de_renderizar ( ) if alpha < 255 then -- se a variavel alpha for menor que 255 (o maximo) alpha = alpha + 1 -- aumentar alpha, vc pode usar 0.5, 0.2 etc se quiser uma animação mais lenta end local cor = tocolor ( 255, 255, 255, alpha ) -- cor branca com o alpha (exemplo) end addEventHandler ( "onClientRender", root, sua_funcao_de_renderizar )
-
Defina uma variável global (com o valor 0) que irá salvar o alpha e a cada frame (onClientRender) aumente o valor dela, Você tambem pode usar a função interpolateBetween para isso.
-
Como descrito na pagina da wiki do evento onClientVehicleDamage o veiculo que recebeu o dano é representado pela variável source. Outra coisa é que você deve usar isVehicleOccupied como uma função, Não como variavel, ela tambem deve estar inclusa no código por não ser uma função nativa. function isVehicleOccupied(vehicle) assert(isElement(vehicle) and getElementType(vehicle) == "vehicle", "Bad argument @ isVehicleOccupied [expected vehicle, got " .. tostring(vehicle) .. "]") local _, occupant = next(getVehicleOccupants(vehicle)) return occupant and true, occupant end function teste() if not isVehicleOccupied ( source ) then -- o not é necessario para dizer que 'se o veiculo não (not) estiver ocupado fazer'.. cancelEvent() end end addEventHandler("onClientVehicleDamage", getRootElement(), teste) Se não for do seu gosto cancelar o evento onClientVehicleDamagevocê pode usar a função setVehicleDamageProof com algumas checagens
-
onClientVehicleDamage, isVehicleOccupied, cancelEvent
-
Sim, Lembre-se que o código que eu passei é pra ser posto no lado do cliente .
-
Esse script vai causar lags se o servidor estiver com muitos jogadores, nunca é bom usar setTimer com um pouco intervalo de tempo no lado do servidor
-
Faça uma tabela com as cores e use um timer para mudar a cor do veiculo
-
getPlayerMoney no lado do cliente não tem parâmetros (você só pode pegar o dinheiro do jogador local), Você pode usar element data, dessa forma: setTimer ( function() setElementData ( localPlayer, "dinheiro", getPlayerMoney() ); end , 3 * 1000, 0 ) -- A cada 3 segundos atualizar a element data..
-
Problema com o servidor
n3wage replied to _Vodka_'s topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Isso é problema na ACL, provavelmente você abriu um < e esqueceu de fechar com /> ou algo assim, Esse site ajuda a encontrar o problema -
De nada
-
Você quer calcular quanto tempo o player ainda tem de VIP ? se for isso você pode usar a função secondsToTimeDesc
-
Veja meu tutorial sobre timestamp, Deve ajudar
-
Introdução: Tenho certeza que muitos não sabem o quão útil timestamp é, Por isso resolvi fazer esse tutorial (e tambem por uma duvida postada pelo usuário BeYourself). Conteúdos deste tutorial 1. Introdução 2. Conteúdos deste tutorial (aqui ) 3. Oque é. 4. Como e onde usa-los 5. Alguns cálculos uteis 6. Exemplos Práticos 7. Finalização Oque é Timestamp é, basicamente, Os segundos que se passaram desde 1 de Janeiro de 1970, é muito mais pratico usar timestamp em vez de calcular que dia sera daqui 2597 horas, por exemplo. Exemplos de timestamp's: 1434667957 // Data de criação deste tutorial 1 //1 de Janeiro de 1970 Como e onde usa-los Você pode usá-los em sistemas que envolvam cálculos com tempos ( VIP Temporario, Admin temporario etc ), Você poderia calcular manualmente a data do 'vencimento' dos 'produtos' do seu script, ou usar timestamp Pegar o timestamp atual é muito simples, Basta usar a função getRealTime: getRealTime().timestamp -- Pronto, você já tem o timestamp atual Dica: você pode usar o primeiro parâmetro da função getRealTime junto com um timestamp para saber o dia, mes, hora etc exatos(as) do timestamp fornecido, veja os exemplos (↓). Alguns cálculos uteis 1 Minuto (60 segundos) é 60 * 1 = 60 2 Minutos (120 segundos) is 60 * 2 = 120 1 Hora (60 minutos) é 60 * 60 = 3600 2 Horas (120 minutos) é 60 * 120 = 7200 1 Dia (24 horas) é 60 * 60 * 24 = 86400 2 Dias (48 horas) é 60 * 60 * 48 = 172800 1 Semana (7 dias) é 60 * 60 * 24 * 7 = 604800 2 Semana (14 dias) é 60 * 60 * 24 * 14 = 1209600 1 Mês (30 dias) é 60 * 60 * 24 * 30 = 2592000 2 Meses (60 dias) é 60 * 60 * 24 * 60 = 5184000 1 Ano (365 dias) é 60 * 60 * 24 * 365 = 31536000 2 Anos (730 dias) é 60 * 60 * 24 * 730 = 63072000 Exemplos Práticos --Calcular o timestamp daqui x dias function calcularDias ( thePlayer, cmd, dias ) if dias then local dias = tonumber ( dias ) local calculo = getRealTime().timestamp + ( dias * 86400 ) outputChatBox ( "Timestamp daqui "..dias.." dias: "..calculo, thePlayer, 0, 255, 0 ) --[[ calculo = getRealTime().timestamp + ( dias * 86400 ) getRealTime().timestamp = pegamos o timestamp atual + = somamos com um valor fornecido ao lado → dias = variavel que guarda o parâmetro fornecido pelo jogador ( /dias [DIAS] ) * 86400 = dividimos por 86400, que é um dia (24 horas) --]] else outputChatBox ( "Forneça os dias !", thePlayer, 255, 0, 0 ) end end addCommandHandler ( "dias", calcularDias ) -- Descobrir data exata de um timestamp function data ( thePlayer, cmd, timestamp ) if timestamp then local timestamp = tonumber ( timestamp ) local realTime = getRealTime(timestamp) local data = string.format ( "%02d/%02d/%d - %02d:%02d", realTime.monthday, realTime.month +1, realTime.year +1900, realTime.hour, realTime.minute ) outputChatBox ( "Data do timestamp "..timestamp..": "..data, thePlayer, 0, 255, 0 ) else outputChatBox ( "Forneça um timestamp !", thePlayer, 255, 0, 0 ) end end addCommandHandler ( "data", data, false, false ) Finalização Este é meu primeiro tutorial, Então ainda não sei bem como explicar de uma maneira clara, Lembrando que as explicações são bem lineares, feitas exatamente para quem não entende do assunto (todos eu presumo), Os códigos não foram testados então qualquer problema com ele, com escrita, ou qualquer parte deste tópico comente que vou arrumar o mais rápido possivel , Também falem oque acharam do tópico e dicas para melhorar.
- 1 reply
-
- 2
-
-
[ RESOLVIDO ]Sobre MB do Servidor
n3wage replied to Stronger's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Como ja dito pelo XeoN- é muito melhor ter um downloader personalizado do que usar o 'padrão', Se tiver conhecimento suficiente você pode fazer um usando a função downloadFile caso contrario os links fornecidos pelo XeoN vão ajudar -
Não, Na função que prende o jogador você coloca setPlayerWantedLevel ( player, 0 )
-
setPlayerWantedLevel
-
Impossível, Todos os códigos aqui postados funcionam perfeitamente, tem certeza que é esse o nome da element data que você quer setar e que o código esta no lado do servidor?
-
serials = { {"SERIAL AQUI",2} } function banotrotipo ( ) for _, v in ipairs ( serials ) do if ( getPlayerSerial ( source ) == v[1] ) do setElementData( source, "MAX_Slots", -1 ) outputChatBox( tostring(source) ) end end end addEventHandler( "onPlayerLogin",getRootElement(),banotrotipo) Ou: serials = { ["SERIAL AQUI"] = true } function banotrotipo ( ) if serials[getPlayerSerial ( source )] then setElementData( source, "MAX_Slots", -1 ) outputChatBox( tostring(source) ) end end addEventHandler( "onPlayerLogin",getRootElement(),banotrotipo)
-
Era só um exemplo, como eu já disse anteriormente: Você já não tem um script de ammunation pronto? na função de dar a arma faça as checagens. Isso não vai funcionar tambem: local level = getPlayerLevel Você vai ter que ver como o teu sistema de level funciona para assim pegar o nivel do jogador.
