Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.
Script: Exp por Hit v3.0

Autor: xOtServx também conhecido como miillerdomingues.

Testado: TFS 0.3.6 ( 8.54 ) (Creio que funcione em outra versão)

Resumo: Em vez de ganhar a exp final, vc ganha por cada hit.

Instalação

Primeiramente abra a pasta de seu ot, e procure pelo arquivo config.lua e procure por essas 2 linhas :

experienceStages = false

rateExperience = 50

se o experienceStages tiver ativado mude para false, pois o sistema ainda não tem suporte á Stages. e é muito importante o rateExperience tiver como 0, pois ela sera configurada, em outro local agora. exemplo:
experienceStages = false

rateExperience = 0

agora entre na pasta creaturescripts/scripts e crie um arquivo lua, chamado exphit.lua e cole o seguinte código:
-- CONFIGURAÇÕES DE EXPERIENCIA --


useStages = true -- Usar sistema de Stages , true/false

premiumMultipliqueExp = 2 -- Players Premiums terão exp multiplicada, caso não querer deixe 1.

rateExp = 50 -- 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"] = 50,

["51-100"] = 45,

["101-150"] = 40,

["151-200"] = 35,

["201-250"] = 30,

["251-300"] = 25,

["351-400"] = 20,

}

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(uid)

return uid ~= getCreatureMaster(uid) or false

end


function onStatsChange(cid, attacker, type, combat, value)

if getCreatureStorage(cid, 50001) ~= 1 then

doCreatureSetStorage(cid, 50002, getMonsterInfo(getCreatureName(cid)).experience * rateExp)

doCreatureSetStorage(cid, 50001, 1)

end

if type == STATSCHANGE_HEALTHLOSS then

if isMonster(cid) then

			if isSummon(cid) then

					return true

			end

			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) >= tabstage[1] and getPlayerLevel(_cid) <= tabstage[2] then

ultimateExp = experience

end

end

experienceRate = ultimateExp

else

experienceRate = rateExp

end

				 local expgain = CalculeExp(getCreatureMaxHealth(cid), getMonsterInfo(getCreatureName(cid)).experience * experienceRate, value)

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

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

doPlayerSendTextMessage(_cid, 12, "You gain "..expgain.." exp.")

doPlayerAddExp(_cid, expgain)

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

na mesma pasta procure pelo arquivo login.lua, e em cima de return true, adc a seguinte linha:
registerCreatureEvent(cid, "ExpHit")
volte na pasta anterior creaturescripts, e procure pelo arquivo creaturescritps.xml e cole as 2 tags:
<event type="statschange" name="ExpGain" event="script" value="exphit.lua"/>

<event type="combat" name="ExpHit" event="script" value="exphit.lua"/>
para configurar a exp, que era configurada no config.lua está no começo do arquivo exphit.lua , e as configurações da party tbem, dos anéis, e até pode ser usado stages agora, segue abaixo o exemplo:
-- CONFIGURAÇÕES DE EXPERIENCIA --


useStages = true -- Usar sistema de Stages , true/false

premiumMultipliqueExp = 2 -- Players Premiums terão exp multiplicada, caso não querer deixe 1.

rateExp = 50 -- 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"] = 50,

["51-100"] = 45,

["101-150"] = 40,

["151-200"] = 35,

["201-250"] = 30,

["251-300"] = 25,

["351-400"] = 20,

}

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

Log V2.0 :

- Monstros dão somente a exp usada no monster.xml vezes a rate do server, ele pode healar toda sua vida, porém se ele ja tiver dado a exp, ele não vai dar mais.

- Parte da exp que você ganha vai para os membros da party.

Log V3.0 ( 03/02/2013 ) :

- Sistema de stages, pode ser totalmente configurado no script .

- Anéis podem multiplicar a experiencia agora

- Premium podem ter beneficios tambem na experiencia

- Monstros sumonados por outros monstros, não vão dar mais experiencia.

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

.

Atenciosamente, Miiller Dominguês .


e-mail/skype: [email protected]

  • Respostas 28
  • Visualizações 6.6k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Monstros dão somente a exp usada no monster.xml vezes a rate do server, ele pode healar toda sua vida, porém se ele ja tiver dado a exp, ele não vai dar mais. ta no log

  • Aqui nao dá erro nenhum, mas nao os monster nao dao experience

Postado

Eu uso um parecido, este eu ainda não testei...

Mas ao julgar pela descrição e lida rápida pelo Script, creio que vale REP+.

Irei testar mais tarde e breve edito o post.

Abraços & Obrigado por compartilhar'

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

  • 8 months later...
Postado

Mano e no ,eu caso!!! aqui o Ferumbras Sumonna uns Demons e o summons estão Dando EXP...Tem como resolver isso?

Assinatura retirada pela direção!

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

Informação Importante

Confirmação de Termo