Jump to content

Sistema de level [ajuda]


Recommended Posts

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 ) 
  

Link to comment
  • Moderators

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.

Link to comment

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.

Link to comment
  • Moderators

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.

Link to comment
  • 5 years later...

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
Link to comment

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...