Jump to content

Sistema de level [ajuda]


Recommended Posts

Posted

oi , eu queria criar um Sistema de Level mas para dar inicio precisava de saber como por uma barra aumentando a cada xp que ganhasse

Bem eu queria usar esta funcao mas nao sei como mete para ele ir aumentando por cada xp que ganhe

function clientResourceStart( ) 
    progressBar = guiCreateProgressBar( 0.8, 0.8, 0.1, 0.1, true, nil ) 
end 
addEventHandler( "onClientResourceStart", getRootElement(), clientResourceStart ) 
  
function clientResourceStop( ) 
    destroyElement( progressBar ) 
end 
addEventHandler( "onClientResourceStop", getRootElement(), clientResourceStop ) 
  

Posted

Para aumentar a barra de progresso, faça isso:

function addExp(exp) 
    guiProgressBarSetProgress(progressBar, guiProgressBarGetProgress(progressBar) + exp) 
end 

E chame a função addExp para adicionar mais xp.

Please do not PM me with scripting related question nor support, use the forums instead.

Posted

Sim, ele pode baixar o exp_system do Castillo, mas acredito que ele queira criar o sistema de nível dele próprio.

Qual é essa funçao addExp como a uso ?

Tem no mta wiki ?

No argumento exp, você deve colocar o valor que irá aumentar o progresso, creio que você deverá antes calcular a porcentagem do valor que irá aumentar o progresso, pois a barra de progresso trabalha com porcentagem (0-100).

E esse valor deve ser um número.

Please do not PM me with scripting related question nor support, use the forums instead.

Posted

Você vai precisar trabalhar um pouco com matemática. Vamos lá:

Qual a experiência máxima que o jogador pode atingir para subir de level?

O progressBar trabalha, como anteriormente dito, com valores de 0 a 100. Logo, você precisa antes calcular: a cada uma unidade do progressBar, quanto será de experiência? Para tal, calculamos:

- Supondo que o exp máximo p/ subir de level seja 200, calculamos: 200/100 = 2. Logo, a cada 2 (dois) de exp, o progressBar vai ganhar 1 (um) de unidade.

-- @fileName: client.lua 
-- @description: esse arquivo necessita ser um client-sided 
  
function clientResourceStart( ) 
    progressBar = guiCreateProgressBar( 0.8, 0.8, 0.1, 0.1, true, nil ) 
end 
addEventHandler( "onClientResourceStart", getRootElement(), clientResourceStart ) 
  
function clientResourceStop( ) 
    destroyElement( progressBar ) 
end 
addEventHandler( "onClientResourceStop", getRootElement(), clientResourceStop ) 
  
addEvent("onGetExp", true) 
function addExp(exp) 
    setElementData(localPlayer, "exp", exp) 
    exp = exp/2 
    guiProgressBarSetProgress(progressBar, guiProgressBarGetProgress(progressBar) + exp) 
end 
addEventHandler("onGetExp", resourceRoot, addExp) 

Bom, esse é seu código geral. Agora, vamos supor que quando um jogador mata um outro jogador, este ganha 15 de experiência. Você vai usar esse código em um arquivo server-sided:

-- @fileName: server.lua 
-- @description: esse arquivo necessita ser um server-sided 
  
addEventHandler("onGetExp", resourceRoot, function(attacker, weapon, bodypart, loss) 
    -- source da funcao eh o jogador assassinado 
    killPed(source, attacker, weapon, bodypart) 
    triggerClientEvent("onGetExp", attacker, 15) -- 15 significa a exp ganha ao matar o jogador 
end) 
  

-----------------------------------------------

Isso é um código MUITO básico. Inúmeros detalhes precisariam ser adicionados como, por exemplo, a necessidade de se salvar a experiência do usuário usando setAccountData() toda vez que ele sair (uma vez que os dados salvos com setElementData() são perdidos quando o elemento sai ou é destruído).

Outra necessidade é definir (usando guiProgressBarSetProgress()) o exp toda vez que o usuário entrar no jogo. Enfim, são muitas coisas que precisariam ser adicionadas.

Outra: eu não sei se o código está 100% certo pois não testei. Escrevi um esboço. Se não entender de scripting você ficará um pouco perdido, é necessário se dedicar.

Software Engineer & Entrepreneur Running Lustrel and VilarikA • Highly engaged on open source community

Posted

Lembre-se sempre de colocar resourceRoot como elemento anexado ao evento onClientResourceStart/Stop, a menos que queira que o evento seja chamado quando qualquer resource for iniciado.

E acredito que o Stanley quis colocar o evento onPlayerWasted no lado server, onde está onGetExp. O evento também está com os argumentos diferentes do evento onPlayerWasted.

Os argumentos corretos são: totalAmmo, killer, killerWeapon, bodypart, stealth (parece que está com os argumentos do evento onPlayerDamage). Obs: use root, em vez de resourceRoot nesse caso (o mesmo serve para o evento onGetExp no lado client).

E também, a função clientResourceStop, que destrói o elemento gui-progressBar será inútil, pois quando o resource for parado, automaticamente o elemento será destruído.

Corrigi apenas para evitar que você tivesse erros posteriores com relação a isso, e como Stanley disse, o código não foi testado.

Voltando ao foco do tópico, você pode usar um método de porcentagem para calcular o valor que será adicionado ao progressBar. Exemplo:

Se a exp máxima for um valor de 450, e a exp que será acrescentada for 12, você deve fazer o seguinte para calcular a porcentagem que será acrescentada na barra de progresso:

12*100 /450 --> 2.66

Será um calculo mais exato e infalível. Eu uso o método de porcentagem para calcular diversas coisas.

Please do not PM me with scripting related question nor support, use the forums instead.

  • 5 years later...
Posted (edited)

Aproveitando que a discussão era Sistem de Level, Queria saber se tem como colocar algum comando nesse script, que deixe o level "Setável"

Como por exemplo

 

----------------------

/setlevel [JOGADOR] {QUANTIDADE]

--[[



 ################################################
 #                                              #
 #              Script Criado Por               #
 #           FACEBOOK.COM/AIRNEWSCR             #
 #                                              #
 #                                              #
 ################################################



--]]

--------------------------------------------------------------------------------------------

exports [ "scoreboardTOP" ]:addScoreboardColumn ( "Level") 

--------------------------------------------------------------------------------------------

function convertS(s)
	if type(tonumber(s)) == "number" then
		milisegundo = s
		local horas_seg=3600
		local hora = math.floor(milisegundo/horas_seg)
		local minuto = math.floor((milisegundo-(horas_seg*hora))/60)
		local segundo = math.floor((milisegundo-(horas_seg*hora)-(minuto*60)))	
		local tudo = string.format("%02d:%02d:%02d",hora,minuto,segundo)	
		local dia = math.floor(s/86400)

		return hora,minuto,segundo,tudo,dia
	else
		return 0,0,0,0,0		
	end
end

--------------------------------------------------------------------------------------------

function saveData(conta)
	if conta then
			local source = getAccountPlayer(conta)
			local level = getElementData(source,"Level") or 0
			local exp = getElementData(source,"LSys:EXP") or 0
			local onlinetime = getElementData(source,"LSys:Online") or 0
			local mins = getElementData(source,"LSys:Mins") or 0
			setAccountData (conta, "Level",level)
			setAccountData (conta, "LSys:EXP",exp)
			setAccountData (conta, "LSys:Online",onlinetime)
			setAccountData (conta, "LSys:Mins",mins)
	end	
end

--------------------------------------------------------------------------------------------

function loaddata(conta)
	if not (isGuestAccount (conta)) then
		if (conta) then	
			local source = getAccountPlayer(conta)	
			local level = getAccountData(conta,"Level")
			if type(level) == "boolean" or level == nil then
				level = 0
			end
			setElementData (source, "Level", tonumber(level))
			setElementData (source, "LSys:EXP",tonumber(getAccountData(conta,"LSys:EXP")) or 0)
			setElementData (source, "LSys:Online",tonumber(getAccountData(conta,"LSys:Online")) or 0)
			setElementData (source, "LSys:Mins",tonumber(getAccountData(conta,"LSys:Mins")) or 0)
		end
	end	
end

--------------------------------------------------------------------------------------------

function timecount()
	for i, player in ipairs(getElementsByType("player")) do
		local acc = getPlayerAccount(player)
		if acc then
			if not isGuestAccount(acc) then
				local level = getElementData(player,"Level") or 0 if tonumber(level) == nil then level = 0 end
				local exp = getElementData(player,"LSys:EXP") or 0 if tonumber(exp) == nil then exp = 0 end
				local onlinetime = getElementData(player,"LSys:Online") or 0 if tonumber(onlinetime) == nil then onlinetime = 0 end
				local mins = getElementData(player,"LSys:Mins") or 0 if tonumber(mins) == nil then mins = 0 end
				if not getElementData(player,"afkdate",true) then				
				if tonumber(mins) == 600 then
					setElementData(player,"LSys:Mins",1)
					if tonumber(exp) == 5 then
						setElementData(player,"LSys:EXP",0)
						setElementData(player,"Level",tonumber(level)+1)
						outputChatBox ( "#ffffff[ #82FA58UP #ffffff] - Você Ganhou +1 de Experiência. (".. tonumber(exp)+1 .."/6)", player, 255, 255, 255, true )
						outputChatBox ( "#ffffff[ #82FA58UP #ffffff] - Você Juntou 6 de Experiência e Ganhou +1 Level ("..tonumber(level)+1 ..")", player, 255, 255, 255, true )
						playSoundFrontEnd ( player, 45 )
						DarSalario (player) -- Efetua os Pagamentos dos Jogadores
					else
					    outputChatBox ( "#ffffff[ #82FA58UP #ffffff] - Você Ganhou +1 de Experiência. (".. tonumber(exp)+1 .."/6)", player, 255, 255, 255, true )
						setElementData(player,"LSys:EXP",tonumber(exp)+1)
						playSoundFrontEnd ( player, 44 )
					end
				elseif tonumber(mins) < 600 then
					setElementData(player,"LSys:Mins",tonumber(mins)+1)
				end
				setElementData(player,"LSys:Online",tonumber(onlinetime)+1)
				
			end
		end
	end
end
end
setTimer(timecount,1000,0)	

function DarSalario (player)

local account = getPlayerAccount (player)
local accname = getAccountName (account)
local Jogador = getPlayerName (player)

EmpregoAtual = getElementData ( player, "Emprego" )

sDesempregado = 300
sEntregadorDeJornal = 500
sPizzaBoy = 600
sMotoristaDeUber = 700
sMecanico = 800
sPetroleiro = 900
sMotoristaDeOnibus = 1000
sPilotoDeAviao = 1100
sEntregadorDeMalote = 2000
sEmpresarioDeFabricas = 10000
sPetroleiro = 1200
sEntregadorDeMaconha = 2500
sPilotoDeHelicoptero = 1500
sEntregadorDeEtanol = 1500
sPilotoDeCorrida = 1000
sEntregadorDePescador = 2000

SeguroDeVida = getElementData ( player, "Hospital:SeguroDeVida" )
MensalidadeSeguroDeVida = 150

outputChatBox ( "#F9A631~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #F96031Salário #F9A631~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", player, 255, 255, 255, true )

outputChatBox ( "#F96031» #BEE09ALogin da Conta #ffffff: #9ABDE0"..accname.." / #BEE09ANick #ffffff: #9ABDE0"..Jogador.."", player, 255, 255, 255, true )

if EmpregoAtual == "Entregador de Jornal" then
givePlayerMoney ( player, sEntregadorDeJornal )
outputChatBox ( "#F96031» #BEE09AProfissão Atual #ffffff: #9ABDE0"..EmpregoAtual.."", player, 255, 255, 255, true )
outputChatBox ( "#F96031» #BEE09ASalário da Profissão #ffffff: #9ABDE0$"..sEntregadorDeJornal.."", player, 255, 255, 255, true )

elseif EmpregoAtual == "Entregador De Pescador" then
givePlayerMoney ( player, sEntregadorDePescador )
outputChatBox ( "#F96031» #BEE09AProfissão Atual #ffffff: #9ABDE0"..EmpregoAtual.."", player, 255, 255, 255, true )
outputChatBox ( "#F96031» #BEE09ASalário da Profissão #ffffff: #9ABDE0$"..sEntregadorDePescador.."", player, 255, 255, 255, true )

elseif EmpregoAtual == "Piloto De Corrida" then
givePlayerMoney ( player, sPilotoDeCorrida )
outputChatBox ( "#F96031» #BEE09AProfissão Atual #ffffff: #9ABDE0"..EmpregoAtual.."", player, 255, 255, 255, true )
outputChatBox ( "#F96031» #BEE09ASalário da Profissão #ffffff: #9ABDE0$"..sPilotoDeCorrida.."", player, 255, 255, 255, true )

elseif EmpregoAtual == "Entregador De Etanol" then
givePlayerMoney ( player, sEntregadorDeEtanol )
outputChatBox ( "#F96031» #BEE09AProfissão Atual #ffffff: #9ABDE0"..EmpregoAtual.."", player, 255, 255, 255, true )
outputChatBox ( "#F96031» #BEE09ASalário da Profissão #ffffff: #9ABDE0$"..sEntregadorDeEtanol.."", player, 255, 255, 255, true )

elseif EmpregoAtual == "Piloto De Helicoptero" then
givePlayerMoney ( player, sPilotoDeHelicoptero )
outputChatBox ( "#F96031» #BEE09AProfissão Atual #ffffff: #9ABDE0"..EmpregoAtual.."", player, 255, 255, 255, true )
outputChatBox ( "#F96031» #BEE09ASalário da Profissão #ffffff: #9ABDE0$"..sPilotoDeHelicoptero.."", player, 255, 255, 255, true )

elseif EmpregoAtual == "PizzaBoy" then
givePlayerMoney ( player, sPizzaBoy )
outputChatBox ( "#F96031» #BEE09AProfissão Atual #ffffff: #9ABDE0"..EmpregoAtual.."", player, 255, 255, 255, true )
outputChatBox ( "#F96031» #BEE09ASalário da Profissão #ffffff: #9ABDE0$"..sPizzaBoy.."", player, 255, 255, 255, true )

elseif EmpregoAtual == "Entregador De Maconha" then
givePlayerMoney ( player, sEntregadorDeMaconha )
outputChatBox ( "#F96031» #BEE09AProfissão Atual #ffffff: #9ABDE0"..EmpregoAtual.."", player, 255, 255, 255, true )
outputChatBox ( "#F96031» #BEE09ASalário da Profissão #ffffff: #9ABDE0$"..sEntregadorDeMaconha.."", player, 255, 255, 255, true )

elseif EmpregoAtual == "Petroleiro" then
givePlayerMoney ( player, sPetroleiro )
outputChatBox ( "#F96031» #BEE09AProfissão Atual #ffffff: #9ABDE0"..EmpregoAtual.."", player, 255, 255, 255, true )
outputChatBox ( "#F96031» #BEE09ASalário da Profissão #ffffff: #9ABDE0$"..sPetroleiro.."", player, 255, 255, 255, true )

elseif EmpregoAtual == "Empresario De Fabricas" then
givePlayerMoney ( player, sEmpresarioDeFabricas )
outputChatBox ( "#F96031» #BEE09AProfissão Atual #ffffff: #9ABDE0"..EmpregoAtual.."", player, 255, 255, 255, true )
outputChatBox ( "#F96031» #BEE09ASalário da Profissão #ffffff: #9ABDE0$"..sEmpresarioDeFabricas.."", player, 255, 255, 255, true )

elseif EmpregoAtual == "Motorista de Uber" then
givePlayerMoney ( player, sMotoristaDeUber )
outputChatBox ( "#F96031» #BEE09AProfissão Atual #ffffff: #9ABDE0"..EmpregoAtual.."", player, 255, 255, 255, true )
outputChatBox ( "#F96031» #BEE09ASalário da Profissão #ffffff: #9ABDE0$"..sMotoristaDeUber.."", player, 255, 255, 255, true )

elseif EmpregoAtual == "Mecanico" then
givePlayerMoney ( player, sMecanico )
outputChatBox ( "#F96031» #BEE09AProfissão Atual #ffffff: #9ABDE0"..EmpregoAtual.."", player, 255, 255, 255, true )
outputChatBox ( "#F96031» #BEE09ASalário da Profissão #ffffff: #9ABDE0$"..sMecanico.."", player, 255, 255, 255, true )

elseif EmpregoAtual == "Petroleiro" then
givePlayerMoney ( player, sPetroleiro )
outputChatBox ( "#F96031» #BEE09AProfissão Atual #ffffff: #9ABDE0"..EmpregoAtual.."", player, 255, 255, 255, true )
outputChatBox ( "#F96031» #BEE09ASalário da Profissão #ffffff: #9ABDE0$"..sPetroleiro.."", player, 255, 255, 255, true )

elseif EmpregoAtual == "Motorista de Onibus" then
givePlayerMoney ( player, sMotoristaDeOnibus )
outputChatBox ( "#F96031» #BEE09AProfissão Atual #ffffff: #9ABDE0"..EmpregoAtual.."", player, 255, 255, 255, true )
outputChatBox ( "#F96031» #BEE09ASalário da Profissão #ffffff: #9ABDE0$"..sMotoristaDeOnibus.."", player, 255, 255, 255, true )

elseif EmpregoAtual == "Piloto de Aviao" then
givePlayerMoney ( player, sPilotoDeAviao )
outputChatBox ( "#F96031» #BEE09AProfissão Atual #ffffff: #9ABDE0"..EmpregoAtual.."", player, 255, 255, 255, true )
outputChatBox ( "#F96031» #BEE09ASalário da Profissão #ffffff: #9ABDE0$"..sPilotoDeAviao.."", player, 255, 255, 255, true )

elseif EmpregoAtual == "Entregador de Malote" then
givePlayerMoney ( player, sEntregadorDeMalote )
outputChatBox ( "#F96031» #BEE09AProfissão Atual #ffffff: #9ABDE0"..EmpregoAtual.."", player, 255, 255, 255, true )
outputChatBox ( "#F96031» #BEE09ASalário da Profissão #ffffff: #9ABDE0$"..sEntregadorDeMalote.."", player, 255, 255, 255, true )

elseif EmpregoAtual == false then
givePlayerMoney ( player, sDesempregado )
outputChatBox ( "#F96031» #BEE09AProfissão Atual #ffffff: #9ABDE0Desempregado", player, 255, 255, 255, true )
outputChatBox ( "#F96031» #BEE09ASalário da Profissão #ffffff: #9ABDE0$"..sDesempregado.."", player, 255, 255, 255, true )

end

if SeguroDeVida == true then
takePlayerMoney ( player, MensalidadeSeguroDeVida )
outputChatBox ( "#F96031» #BEE09AMensalidade do Seguro de Vida #ffffff: #FA5858-$"..MensalidadeSeguroDeVida.."", player, 255, 255, 255, true )
end


outputChatBox ( "#F9A631~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #F96031Salário #F9A631~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", player, 255, 255, 255, true )

end



--------------------------------------------------------------------------------------------

function meulevel(source)
	triggerClientEvent(source,"SHOW.WINDOW.LEVELSYS",source,true)
end
addCommandHandler("meulevel",meulevel)

--------------------------------------------------------------------------------------------


addEventHandler("onPlayerLogin", root,
  function( _, acc )
	setTimer(loaddata,1000,1,acc)
  end
)

--------------------------------------------------------------------------------------------

function startScript ( res )
	if res == getThisResource() then
		for i, player in ipairs(getElementsByType("player")) do
			local acc = getPlayerAccount(player)
			if not isGuestAccount(acc) then
				loaddata(acc)			
			end
		end
	end
end
addEventHandler ( "onResourceStart", getRootElement(), startScript )

--------------------------------------------------------------------------------------------

function stopScript( res )
    if res == getThisResource() then
		for i, player in ipairs(getElementsByType("player")) do
			local acc = getPlayerAccount(player)
			if not isGuestAccount(acc) then
				saveData(acc)	
			end
		end
	end
end 
addEventHandler ( "onResourceStop", getRootElement(), stopScript )

--------------------------------------------------------------------------------------------

function deslogar(acc)
	cancelEvent ()
end
addEventHandler("onPlayerLogout",getRootElement(),deslogar)

--------------------------------------------------------------------------------------------

function sair ( quitType )
	local acc = getPlayerAccount(source)
	if not (isGuestAccount (acc)) then
		if acc then
			saveData(acc)
		end
	end
end
addEventHandler ( "onPlayerQuit", getRootElement(), sair )

--------------------------------------------------------------------------------------------

 

Edited by Rangel

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...