Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Adaptação do Script do membro: @Apocalypse.

Tópico Oficial com instruções de instalação: CLIQUE AQUI.

 

 

-- CONFIGURAÇÕES DE EXPERIENCIA --

useStages = false -- Usar sistema de Stages , true/false
premiumMultipliqueExp = 2 -- Players Premiums terão exp multiplicada, caso não querer deixe 1.
rateExp = 300 -- Exp caso não for usar stages.


local stages = { -- ["DELEVEL-ATELEVEL"] = EXP, (OBS: NUNCA  REPETIR O MSM NUMERO, SEMPRE COLOCAR UM A MAIS.)
	["1-50"] = 300,
	["51-100"] = 250,
	["101-150"] = 200,
	["151-200"] = 150,
	["201-250"] = 100,
	["251-300"] = 50,
	["351-400"] = 25,
}
ultimateExp = 15 -- exp que vai usar caso o level do player não tiver mais na tabela .

-- CONFIGURAÇÕES DA PARTY

partyPorcent = 40 -- Quantos Porcento da exp vai para os membros da party
levelBlockParty = 1000 -- Diferença Maxima de Level permitida para membro da party ganhar exp.
expShareRadiusX = 30 -- Distancia maxima permitida no eixo X para membro da party ganhar exp.
expShareRadiusY = 30 -- Distancia maxima permitida no eixo Y para membro da party ganhar exp.
expShareRadiusZ = 1 -- Distancia maxima permitida no eixo Z para membro da party ganhar exp.

-- CONFIGURAÇÕES DE RINGS --

local rings = { -- [ID DO ANEL] = EXP MULTIPLICADA POR X EXP.
	[3048] = 2,
	[3049] = 4,
	[3050] = 6,
}

-- FIM DAS CONFIGURAÇÕES --


function CalculeExp(monsterhp, exptotal, hit)
	hit = hit <= monsterhp and math.ceil(exptotal * hit / monsterhp) or 0
	return hit < 0 and 0 or hit
end

function isSummon(cid)
return getCreatureMaster(cid)
end

function onStatsChange(cid, attacker, type, combat, value)
	if isPlayer(attacker) and isMonster(cid) then
		if getCreatureStorage(cid, 50001) ~= 1 then
			doCreatureSetStorage(cid, 50002, getMonsterInfo(getCreatureName(cid)).experience * rateExp)
			doCreatureSetStorage(cid, 50001, 1)
		end
	end
	if type == STATSCHANGE_HEALTHLOSS then
		if isMonster(cid) then
			if isCreature(attacker) then
				local _cid = isSummon(attacker) and getCreatureMaster(attacker) or attacker
				if isPlayer(_cid) then
					if useStages then
						for strstage, experience in pairs(stages) do
							tabstage = string.explode(strstage, "-")
							if getPlayerLevel(_cid) >= tonumber(tabstage[1]) and getPlayerLevel(_cid) <= tonumber(tabstage[2]) then
								ultimateExp = experience
							end
						end
						experienceRate = ultimateExp
					else
						experienceRate = rateExp
					end
					local expgain = CalculeExp(getCreatureMaxHealth(cid), getMonsterInfo(getCreatureName(cid)).experience * experienceRate, value)
					if getCreatureStorage(cid, 50002) > 0 then
						if getCreatureStorage(cid, 50002) - expgain < 0 then
							expgain = getCreatureStorage(cid, 50002)
						end
						doCreatureSetStorage(cid, 50002, getCreatureStorage(cid, 50002) - expgain)
						local ringexp = 1
						for idring, expring in pairs(rings) do
							if getPlayerSlotItem(_cid, 9).itemid == idring then
								ringexp = expring
								break
							end
						end
						local premiumMultipliqueExp = isPremium(_cid) and premiumMultipliqueExp or 1
						expgain = expgain * ringexp * premiumMultipliqueExp
						local party = false
						if isInParty(_cid) then
							local partyMembers, expParty = getPartyMembers(getPartyLeader(_cid)), expgain / 100 * partyPorcent
							for indice, partyMember in pairs(partyMembers) do
								attackerLevel, partyLevel = getPlayerLevel(_cid), getPlayerLevel(partyMember)
								attackerPos, partyPos = getThingPos(_cid), getThingPos(partyMember)
								x = false
								if math.abs(attackerLevel - partyLevel) > levelBlockParty then
									x = true
								elseif math.abs(attackerPos.x - partyPos.x) > expShareRadiusX then
									x = true
								elseif math.abs(attackerPos.y - partyPos.y) > expShareRadiusY then
									x = true
								elseif attackerPos.z ~= partyPos.z then
									x = true
								elseif _cid == partyMember then
									x = true
								end
								if x then
									partyMembers[indice] = nil
								end
							end
							if #partyMembers ~= 0 then
								expParty = math.ceil(expgain / 100 * partyPorcent)
								expmember = math.ceil(expParty / #partyMembers)
								for _, member in pairs(partyMembers) do
									if member ~= _cid then
										doPlayerSendTextMessage(member, 12, "You received "..expmember.." party exp.")
										doPlayerAddExp(member, expmember)
									end
								end
								doPlayerSendTextMessage(_cid, 12, "You gain "..expgain.." exp. (" ..partyPorcent.."% send to party)")
								doPlayerAddExp(_cid, expgain - expParty)
								party = true
							else
								party = false
							end
						end
						if not party then
							doPlayerAddExp(_cid, expgain)
							doSendAnimatedText(getThingPos(_cid), expgain, 215)
						end
					end
				end
			end
		end
	end
	return true
end

function onCombat(cid, target)
	if isMonster(target) and not isSummon(target) and not isPlayer(target) then
		registerCreatureEvent(target, "ExpGain")
	end
	return true
end

 

Créditos:


@Frenesy

@Apocalypse

 

 

Editado por Frenesy (veja o histórico de edições)

  • Respostas 13
  • Visualizações 3k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Adaptação do Script do membro: @Apocalypse. Tópico Oficial com instruções de instalação: CLIQUE AQUI.     -- CONFIGURAÇÕES DE EXPERIENCIA -- useStages = false -- Usar sistema de St

Postado
  • Autor

Boa noite @Snowsz. O Script do nosso amigo @Apocalypse está funcionando bem em TFS anteriores ao 0.4. Se notar os devidos comentários no tópico dele, verá todos reclamarem de não funcionar adequadamente em TFS 0.4. Como gosto muito do script, eu pesquisei e modifiquei o script para funcionar nessa nova versão do 8.6. - A diferença é apenas na função "isSummon", que não era reconhecida e dentro da função "onStarChange" que precisava de algumas coisas. Apenas isso. Caso queira testar, fique a vontade. Estou a utilizar ele aqui. :wink:

 

Se quiser eu ponho o tutorial de instalação no próprio tópico. Só não o fiz porque achei melhor todos conhecerem o tópico do Apocalypse, já que ele merece o maior crédito por ter compartilhado.

 

Abraços!

Postado

Parabéns, seu tópico de conteúdo foi aprovado!
Muito obrigado pela sua contribuição, nós do Tibia King agradecemos.
Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.

Spoiler

Congratulations, your content has been approved!
Thank you for your contribution, we of Tibia King we are grateful.
Your content will help many other users, you received +1 REP.

 

  • 5 months later...

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo