-
Posts
3,875 -
Joined
-
Days Won
67
Everything posted by DNL291
-
@OverKILL Como esse assunto já é outro, você deveria criar outro tópico, mas vou relevar dessa vez. Então, acho que você deve adicionar a função no lado client e não no server. Esse erro das casas decimais aumentarem vai acontecer quando o valor for passado ao client.
-
Remove "onClientRender" event from the code, edit the event "mute:mutePlayer" and add there addEventHandler (" onClientRender ", root, drawMuteTime) at the end of the function. Also, use removeEventHandler to remove the text when the time runs out.
-
local screenW, screenH = guiGetScreenSize() function drawMuteTime( ) if not timerMute then return end local getMuteTimerDetails = math.floor(getTimerDetails( timerMute )) -- here if getMuteTimerDetails > 0 and mute == true then -----------162 LINE-------- dxDrawText("Muted time: "..tostring(getMuteTimerDetails), screenW * 0.0078, screenH * 0.6094, screenW * 0.2727, screenH * 0.6484, tocolor(255, 0, 0, 255), 1.00, "bankgothic", "left", "top", false, false, false, false, false) end end addEventHandler( "onClientRender", root, drawMuteTime )
-
Não sei como tá o seu código, mas vou dar um exemplo de como ocorre esse erro: -- server triggerClientEvent( root, "onServerSend", root ) -- -- client addEvent( "onServerSend", true ) addEventHandler( "onServerSend", root, function() outputChatBox("@onServerSend") end ) Nesse exemplo o lado server tem apenas a função triggerClientEvent fora de qualquer função, e ela vai executar ao mesmo tempo que carregar o script. Enquanto que o lado client, que sempre é baixado e executado não estará carregado no mesmo momento da chamada do server. No seu caso, não sei se é isso que ocorre, essa é uma possibilidade, enfim, só vendo o script pra saber o que é exatamente.
-
Quando o evento é chamado pelo server ele é tido como inexistente. Motivo: ou o outro script tem algum erro ou o lado server está chamando ele antes que o script do client é carregado.
-
Try something like this: local maxDist = 500 local cinemax, cinemay, cinemaz = 0, 0, 0 local x, y, z = getElementPosition(localPlayer) local dis = getDistanceBetweenPoints3D(x, y, z, cinemax, cinemay, cinemaz) local volume = ( dis / maxDist ) volume = dis >= maxDist and 1 or volume setBrowserVolume( Screen, 1-volume )
-
Your script won't work since it's actually client side.
-
You don't have to hide each GUI element, just use the parent element. The parent elements, in this case, are the window and the gridList. guiSetVisible( GUIEditor.window[1], bool ) guiSetVisible(GUIEditor.gridlist[1], bool) That is enough. Edit: Hide only the window, gridList is the window's child. But the problem was the window's variable 'name' that wasn't being used on the other elements, instead it was 'GUIEditor.window [1]'. And in your last code, replace 'name' with GUIEditor.window[1] in guiWindowSetSizable.
- 7 replies
-
- 1
-
- walking_style
- gui
-
(and 1 more)
Tagged with:
-
GUIEditor = { gridlist = {}, window = {}, button = {}, label = {} } addEventHandler("onClientResourceStart", resourceRoot, function () name = guiCreateWindow(856, 143, 264, 388, "Walking Style", false) guiWindowSetSizable(name, false) label = guiCreateLabel(6, 1, 254, 15, "", false, GUIEditor.window[1]) GUIEditor.gridlist[1] = guiCreateGridList(28, 44, 209, 308, false, GUIEditor.window[1]) Default = guiCreateButton(10, 14, 189, 30, "Default", false, GUIEditor.gridlist[1]) Drunk = guiCreateButton(10, 54, 189, 30, "Drunk Man", false, GUIEditor.gridlist[1]) Sneak = guiCreateButton(10, 94, 189, 30, "Sneaking", false, GUIEditor.gridlist[1]) Blind = guiCreateButton(10, 134, 189, 30, "Blind Man", false, GUIEditor.gridlist[1]) Gangstar = guiCreateButton(10, 174, 189, 30, "Gangstar", false, GUIEditor.gridlist[1]) Sexy = guiCreateButton(10, 214, 189, 30, "Sexy", false, GUIEditor.gridlist[1]) fat = guiCreateButton(10, 254, 189, 30, "Fat man", false, GUIEditor.gridlist[1]) Close = guiCreateButton(104, 357, 58, 17, "Done", false, GUIEditor.window[1]) guiSetVisible(name, false) addEventHandler ( "onClientGUIClick", guiRoot, setWalkingStyle ) end ) addCommandHandler("ws", function() guiSetVisible( name, true ) showCursor( true ) end) function setWalkingStyle() if source == Default then setPedWalkingStyle ( localPlayer, 0 ) elseif source == Drunk then setPedWalkingStyle ( localPlayer, 126 ) elseif source == Sneak then setPedWalkingStyle ( localPlayer, 69 ) elseif source == Blind then setPedWalkingStyle ( localPlayer, 127 ) elseif source == Gangstar then setPedWalkingStyle ( localPlayer, 121 ) elseif source == Sexy then setPedWalkingStyle ( localPlayer, 132 ) elseif source == fat then setPedWalkingStyle ( localPlayer, 124 ) elseif source == Close then guiSetVisible( name, false ) showCursor( false ) end end Try it.
- 7 replies
-
- walking_style
- gui
-
(and 1 more)
Tagged with:
-
Try checking the attacker parameter first: function MakePlayerHeadshot( attacker, weapon, bodypart, loss ) if attacker and getElementType ( attacker ) == "ped" then if bodypart == 9 then triggerEvent( "onPlayerHeadshot", source, attacker, weapon, loss ) setPedHeadless ( source, true ) killPed( source, attacker, weapon, bodypart ) setTimer( BackUp, 900, 1, source ) end end end
-
Atualmente não é possível usar anim customizada no MTA, essa função foi desativada já tem um bom tempo por problemas de funcionalidade. Mas você pode encontrar um tópico aqui no fórum a respeito disso: Tem uma pessoa trabalhando nisso e pelo visto já é possível substituir animações, isso está em fase de testes ainda.
-
A função tá dentro do loop function chatadminbyjonas ( thePlayer, _, ... ) local message = table.concat ( { ... }, " " ) if ( isPlayerOnGroup ( thePlayer ) ) then for _, player in ipairs ( getElementsByType ( "player" ) ) do outputChatBox ( "#FF0000[ADM] #FFFFFF".. getPlayerName ( thePlayer ) .." : #FF0000".. message, player, 255, 255, 255, true ) end outputServerLog("ADMCHAT: " .. getPlayerName(thePlayer) .. " : " .. message) -- ENVIA LOG'S PARA O CONSOLE E NOS ARQUIVOS DE TEXTO ! else outputChatBox ( "#FF0000[ERRO] - #FFFFFFVocê não é um administrador !", thePlayer, 255, 255, 255, true ) end end addCommandHandler("adminchat", chatadminbyjonas)
-
Você não vai conseguir usar um elemento aonde deve ser string. outputServerLog("ADMCHAT: " .. getPlayerName(thePlayer) .. " : " .. message)
-
Você está chamando ZedMissionCheckKill() sem passar o argumento da missão. O correto seria assim (fiz pra você a lógica que o script vai funcionar): local currentMission,zombiesKilled = 0, 0 local missionZeds local zedsTable = { { 198, 158, 107, 108 }, {48, 18, 79, 23 } } function ZedMissionOnKill( killer ) -- Faz a checagem para saber se quem matou é um jogador e a vitíma um ped if ( killer and getElementType(killer) == "player" and getElementType(source) == "ped" ) then zombiesKilled = zombiesKilled+1 if zombiesKilled == missionZeds then -- Você vai precisar armazenar numa variável a quantidade de zumbis da missão atual ZedMissionWin () -- Nessa função você já vai poder criar a outra missão end end end function startZedMission() if currentMission ~= 0 then return end currentMission = 1 spawnZeds( currentMission ) outputChatBox ( "Your Get Mission" ) addEventHandler ( "onClientPedWasted", root, ZedMissionOnKill ) end addCommandHandler ( "mission", startZedMission ) function ZedMissionWin () outputChatBox( "Good job, mission completed!" ) givePlayerMoney ( thePlayer, 30000 ) -- Use isso no lado server! -- Vamos criar a outra missão spawnZeds( currentMission + 1 ) end function spawnZeds( mission ) if tonumber(mission) and tonumber(mission) > #zedsTable then currentMission = 0 return outputChatBox( "Parabéns, você completou todas as missões", 0, 240, 0 ) end missionZeds = #zedsTable[ tonumber(mission) ] for _, id in pairs( zedsTable[tonumber(mission)] ) do -- criar os zumbis end currentMission = tonumber(mission) end
-
Qual erro deu? Porque o código está correto. Pode ser que você tenha usado no lado client, nesse caso, você receberia um erro: Atempt to call global...
-
O MTA usa um tipo de Programação orientada a eventos (veja o link) (no caso scripting - que aplica-se ao próprio Mod). Tudo será difícil pra você se ainda é novato em programação. Seria melhor você buscar o conhecimento básico da programação O básico seria: Variáveis, funções, if - elseif - else, (loop) for - while, tabelas Para usar uma função, você precisa entender a sua sintaxe. Eventos como já foi explicado, faz a função ligada a ele ser chamada quando a ação do evento for feita. E existem eventos que envia parâmetros pra função ligada a ele (você pode ver esses exemplos do Lord Henry com os eventos onPlayerWasted e onVehicleEnter). Na vida real, esse "evento" seria como seu despertador que seria configurado para te chamar num horário que você programou, a diferença é que na aplicação no MTA ele serve para fazer a chamada em tudo que é necessário - em veículos, jogadores, elementos do jogo, interface e criações do MTA, mundo do GTA, etc. Você também pode adicionar o seu próprio evento usando addEvent. Enfim, esse vídeo será útil pra você ter um bom começo em programação: https://www.youtube.com/watch?v=Ds1n6aHchRU
-
Remova a linha: if ( isPlayerOnGroup ( player ) ) then Essa função verifica se o jogador é um Staff.
-
Desbuga ele, ué. Ou você espera que alguém te dê de presente um novo?
-
O que você quer dizer com output? Seria quando alguém fala no chat? O evento pra isso é onPlayerChat e já tem essa função do resource freeroam. Se você tá usando outro gamemode, você vai precisar fazer algo similar, se eu entendi bem, o que você quer é permitir o uso de códigos hex no chat sem que o nick do jogador mude a cor da mensagem? Tente algo assim: local hexstr = string.format("#%.2X%.2X%.2X", r, g, b) outputChatBox(getPlayerName(source) .. ': ' .. hexstr .. msg, g_Root, r, g, b, true)
-
Um erro óbvio aí. Tire o loop que está no código e em setPlayerWantedLevel troque por source. Edit: O jogador vai receber dinheiro no lado client, pra sincronizar o dinheiro com os outros jogadores você precisa definir no lado server.
-
Lembrando que esse false no final é redundante, pois, se você simplesmente não usar, é como se você já tivesse definido false. Então o uso dessa boolean para o outputChatBox só é usado na prática para ativar os códigos hexadecimais. Assim como os argumentos R, G e B que por padrão, caso não especificados, serão 231, 217 e 176 respectivamente.
-
Isso mesmo. A função setElementInterior já tem os argumentos do teleporte então é desnecessária a função setElementPosition. Também é melhor usar apenas um evento pra isso, tipo assim: --client addEventHandler( "onClientMarkerHit", root, function ( Marker1 ) if Marker1 == localPlayer then if source == Entrar_Loja1 and assalta == true and ativo == true and passivo == false then triggerServerEvent ("doSetPlayerLocation", localPlayer) exports["notices"]:addNotification("Digite /roubar dentro do marker para assaltar a loja",'info') elseif source == Sair_Loja1 then triggerServerEvent ("doSetPlayerLocation", localPlayer, true) end end end ) -- server function setPlayerLocation( exit ) if exit ~= true then setElementInterior(source, 9, 364.90844726563,-11.365772247314+2,1001.8515625) setElementDimension(source, 4) return end setElementInterior (source, 0, 2420.4567871094,-1508.8905029297+3,24) setElementDimension(source, 0) end addEvent("doSetPlayerLocation", true) addEventHandler("doSetPlayerLocation", root, setPlayerLocation)
-
Porque a dimensão/Interior são setados no lado client. Use o código no lado server que irá funcionar.
-
Por que pedir outro resource que você mesmo já tem? Seria mais fácil terminar o seu próprio e mostrar o que você está tentando fazer até porque você já tem um: rank system mostrando kill/deaths/ratio e o nick de cada jogador