@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?
info
Grupo: Conde
Registrado: 07/04/15
Posts: 926
Reputação: +335
Gênero: Masculino

@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?
Editado Maio 6 por 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
info
Grupo: Conde
Registrado: 07/04/15
Posts: 926
Reputação: +335
Gênero: Masculino

@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... ![]()
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...
Editado Maio 6 por danihcv
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 Maio 6 por TerSaid
info
Grupo: Marquês
Registrado: 25/09/10
Posts: 1.3k
Reputação: +446
Gênero: Masculino

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..
info
Grupo: Conde
Registrado: 07/04/15
Posts: 926
Reputação: +335
Gênero: Masculino

18 horas atrás, TerSaid disse:1.5 = 105% = 105/100
Que matemática é essa?
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.... ![]()
Editado Maio 6 por danihcv
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

Você usa Tfs 0.4 sem edição ou é uma variante dele?
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

6 horas atrás, danihcv disse:Que matemática é essa?
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.
Editado Maio 6 por danihcv
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 Maio 6 por milbradt
info
Grupo: Conde
Registrado: 07/04/15
Posts: 926
Reputação: +335
Gênero: Masculino

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.
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

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).
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 Maio 7 por milbradt
info
Grupo: Campones
Registrado: 08/03/16
Posts: 51
Reputação: +2
@danihcv
Funcionou hahaha, mas não como eu queria
eu coloquei "local extraRate = 0.5" , no caso seria 50% né? mas o monstro ta dando metade da sua exp e não 50% a mais /:
edit:
e ainda ta dando esse erro
o ot inteiro cai, e bugo tudo o char ta recendo mais exp do que devia tb! parece que acrescentou esses 50% permanente!
enfim ta tudo bugado uahauhauha
Editado Maio 5 por edukf