Ir para conteúdo
  • 0

[pedido] exp ring por %


edukf

Pergunta

Posts Recomendados

  • 0

@edukf, pra receber os 50% a mais, vc tem que deixar o extraRate = 1.5

Quanto a esse erro aí de logar e deslogar (?) explica mais um pouco sobre ele. Tipo, em q momento ele acontece?

 

Link para o comentário
Compartilhar em outros sites

  • 0

@danihcv

 

Testa o anel ai, por exemplo antes do anel eu ganho 1800 de exp, depois que eu coloco o anel ta ganhando 2700000! quando tira a exp nao volta tb, ta dando bem mais que 50%, ta tudo bugado, faz o test

Link para o comentário
Compartilhar em outros sites

  • 0

@edukf, eu fiz o teste, bro. kkkk

Tá tudo certo aqui...
Muito estranho isso... Porém, não sei o q pode estar ocasionando isso... :thinking:

 

edit:

Eu acredito que seja algum sistema, ou algum script que esteja bugando o seu ot e algo no script do ring seja apenas um gatilho para isso...
Porém, ñ tenho ctz...

Link para o comentário
Compartilhar em outros sites

  • 0

 


local idAnelDesequipado = ID-DO-ANEL-DESEQUIPADO

local idAnelEquipado = ID-DO-ANEL-EQUIPADO

local extraRate = 15.0/100.0 --- 15%

 

function onEquip(cid, item, slot)

doTransformItem(item.uid, idAnelEquipado)

doDecayItem(item.uid)

doPlayerSetRate(cid, SKILL__LEVEL, extraRate*getExperienceStage(getPlayerLevel(cid)))

return true

end

 

function onDeEquip(cid, item, slot)

if item.uid ~= 0 then

doTransformItem(item.uid, idAnelDesequipado)

end

level = tonumber(getPlayerLevel(cid))

doPlayerSetRate(cid, SKILL__LEVEL, getExperienceStage(level))

return true

end

 


Se você quer extrarate por % nao se esqueça da divisão. a

o cara estava ganhando um xp absurdo pq está 105% de porcentagem extra de xp.

 

1.5 = 105% = 105/100

 

15% = 0.15 = 15/100

 

E para a xp dele voltar ao normal depois que remover o anel, acho que uma storage resolveria isso.

 

Editado por TerSaid
Link para o comentário
Compartilhar em outros sites

  • 0

Tanta tirar essa parada de Transformitem, pode estar bugando o onDeequip, caso o transform não ocorra direito pode bugar o script. Eu retiraria o transform e deixaria só com um único id, isso pode evitar 10000 bugs decorrentes a isso..

Link para o comentário
Compartilhar em outros sites

  • 0
18 horas atrás, TerSaid disse:

1.5 = 105% = 105/100

Que matemática é essa? o.O sauhsahusa

0.5 = 50%

1.0 = 100%

1.5 = 150%

1.15 = 115%

 

 

10 horas atrás, Caronte disse:

Tanta tirar essa parada de Transformitem, pode estar bugando o onDeequip, caso o transform não ocorra direito pode bugar o script. Eu retiraria o transform e deixaria só com um único id, isso pode evitar 10000 bugs decorrentes a isso..

Eu tb ñ qria usar o TransformItem, mas sem ele, o anel ñ sofre o transformOnEquip (e nem o transformOnDeEquip) configurado no items.xml.... :/

Link para o comentário
Compartilhar em outros sites

  • 0
6 horas atrás, danihcv disse:

Que matemática é essa? o.O sauhsahusa

0.5 = 50%

1.0 = 100%

1.5 = 150%

1.15 = 115%

 

 

Eu tb ñ qria usar o TransformItem, mas sem ele, o anel ñ sofre o transformOnEquip (e nem o transformOnDeEquip) configurado no items.xml.... :/

 

À matemática dele está errada, mas entendi o que ele quiz passar.

 

Se você pegar a rate e dividila por 100 e depois multiplica-la pela valor da porcentagem, ela vai retorna o valor da porcentagem adicional para ser somada a rate.

 

Possivelmente o distro dele não muda a rate da forma clássica (1.5,1.7 etc.) Sendo portanto necessário declarar o valor da xp ao player.

Link para o comentário
Compartilhar em outros sites

  • 0

movements.xml:

<movevent type="Equip" itemid="ID DO ITEM" slot="ring" event="script" value="nameScript.lua"/><movevent type="DeEquip" itemid="ID DO ITEM" slot="ring" event="script" value="nameScript.lua"/>	

 

nameScript.lua:

local idAnelDesequipado = ID DO ITEMlocal idAnelEquipado = ID DO ITEMlocal extraRate = 1.5function onEquip(cid, item, slot)	local value = getItemAttribute(item.uid, "duration")	doTransformItem(item.uid, idAnelEquipado)	if value ~= nil then		doItemSetAttribute(item.uid, "duration", value)	end	doDecayItem(item.uid)	doPlayerSetExperienceRate(cid, extraRate)	return trueendfunction onDeEquip(cid, item, slot)	if item.uid ~= 0 then		local value = getItemAttribute(item.uid, "duration")		doTransformItem(item.uid, idAnelDesequipado)		if value ~= nil then			doItemSetAttribute(item.uid, "duration", value)		end	end		doPlayerSetExperienceRate(cid, 1.0)	return trueend

 

Editado por milbradt
Link para o comentário
Compartilhar em outros sites

  • 0
2 horas atrás, milbradt disse:

doPlayerSetExperienceRate(cid, 1.0)

Acho que isso não funcionará caso ele use stages... :s

 

2 horas atrás, milbradt disse:

<movevent type="Equip" itemid="ID DO ITEM" slot="ring" event="script" value="nameScript.lua"/>

<movevent type="DeEquip" itemid="ID DO ITEM" slot="ring" event="script" value="nameScript.lua"/>

É preciso fazer movements para 2 itens com id's diferentes, pois o membro quer que o anel se transforme em outro (id) quando for equipado e volte ao normal ao ser desequipado.

 

 

 

3 horas atrás, Poccnn disse:

Se você pegar a rate e dividila por 100 e depois multiplica-la pela valor da porcentagem, ela vai retorna o valor da porcentagem adicional para ser somada a rate.

Se eu entendi direito o que vc quis explicar, o meu script já faz isso, observe:

doPlayerSetRate(cid, SKILL__LEVEL, extraRate*getExperienceStage(getPlayerLevel(cid)))

*getExperienceStage retornará o valor do rate normal. Ao multiplicar este valor por 1.5, o resultado será a rate normal + metade da rate normal.

Link para o comentário
Compartilhar em outros sites

  • 0
10 horas atrás, danihcv disse:

Acho que isso não funcionará caso ele use stages... :s

 

É preciso fazer movements para 2 itens com id's diferentes, pois o membro quer que o anel se transforme em outro (id) quando for equipado e volte ao normal ao ser desequipado.

 

 

 

Se eu entendi direito o que vc quis explicar, o meu script já faz isso, observe:

doPlayerSetRate(cid, SKILL__LEVEL, extraRate*getExperienceStage(getPlayerLevel(cid)))

*getExperienceStage retornará o valor do rate normal. Ao multiplicar este valor por 1.5, o resultado será a rate normal + metade da rate normal.

 

Não tinha prestado atenção a forma como tu fizeste. Está certo.

 

Na questão do xml, o que o milbradt postou é certo pois, se você prestar atenção vera que:

 

O item desequipado ao ser equipado muda de id (equip).

Como ele já mudou de id, ele não será desequipado - pois já não é o mesmo item, foi transformado em outro item - quem será desequipado é o item que está equipado - que no caso é o item transformado. 

 

Agora voltando ao assunto do tópico, o autor do mesmo tem que fazer o teste da função rate para saber se ela existe e está funcionando normalmente ou como ela funciona (parâmetros).

Link para o comentário
Compartilhar em outros sites

  • 0
14 horas atrás, danihcv disse:

Acho que isso não funcionará caso ele use stages... :s

 

É preciso fazer movements para 2 itens com id's diferentes, pois o membro quer que o anel se transforme em outro (id) quando for equipado e volte ao normal ao ser desequipado.

 

 

 

Se eu entendi direito o que vc quis explicar, o meu script já faz isso, observe:

doPlayerSetRate(cid, SKILL__LEVEL, extraRate*getExperienceStage(getPlayerLevel(cid)))

*getExperienceStage retornará o valor do rate normal. Ao multiplicar este valor por 1.5, o resultado será a rate normal + metade da rate normal.

 

A função doPlayerSetExperienceRate(cid, value) fica na lib em 050-function.lua.

Ela retorna a função doPlayerSetRate(cid, SKILL__LEVEL, value)

Ou seja, se preferir pode ser usado doPlayerSetRate(cid, SKILL__LEVEL, 1.5), mas como é do meu costume usar "doPlayerSetExperienceRate" eu coloquei ela.

Essa função(doPlayerSetRate) já checa o rate atual do jogador, não precisando fazer qualquer outra checagem para definir o valor a ser dado, eu testei na prática também, usando exp por stages e fixa.

 

Sobre o movements.xml não é necessário colocar mais do que coloquei, tendo em vista que no próprio script ele transforma o itemId para o outro.

 

3 horas atrás, Poccnn disse:

 

Não tinha prestado atenção a forma como tu fizeste. Está certo.

 

Na questão do xml, o que o milbradt postou é certo pois, se você prestar atenção vera que:

 

O item desequipado ao ser equipado muda de id (equip).

Como ele já mudou de id, ele não será desequipado - pois já não é o mesmo item, foi transformado em outro item - quem será desequipado é o item que está equipado - que no caso é o item transformado. 

 

Agora voltando ao assunto do tópico, o autor do mesmo tem que fazer o teste da função rate para saber se ela existe e está funcionando normalmente ou como ela funciona (parâmetros).

 

A função existe tendo em vista que o autor do topico disse que a exp aumentou, porem como o danihcv usou, ele ta multiplicando a atual exp rate pelo stage atual.

Que é 1.5(que é o extraExp declarado) * Numero checado do stage(podendo ser 50,100,300,1000, depende da stage atual). Por isso que a exp esta aumentando drasticamente, o que o danihcv fez no seu calculo foi dar 50% a mais de exp bonus em cima do stage, ficando uma extraExp bem "valorizada".

 

--Topico--

Enfim, eu testei em uma rev3777, funcionou perfeitamente o script podendo usar com anel de duração ou sem duração.

Editado por milbradt
Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...