Ir para conteúdo
  • 0

[Pedido] Tempo do item vip fica bugado.


jefersonzc

Pergunta

Se essa for a seção errada, desculpa.

Bom, criei uns itens vips que dão atributo para os players, mas esses itens possuem tempo, e somem quando o tempo acaba. (decayTo O).

Até aí blz... não usei as funções onEquipe e onDeEquipe por duas razões:

1. Não tenho IDs com sprites repetidos para esses itens e não quero mexer no meu OTB pq já deu ruim outras vezes.

2. A intenção era que o tempo continuasse contando mesmo com o item dentro da mochila, ou seja, não adianta desequipar o item que O Tempo Não Para (já dizia Cazuza, rsrs).

 

Até aí tudo bem. Mas acabei descobrindo um bug... se o player guardar o item no depot e depois deslogar, quando ele relogar e pegar o item do depot outra vez, o tempo buga e fica parado. E só volta a ser contato caso ele relogue com o item no char outra vez. Ou seja, se o cara for malando, ele fica com o item pra sempre, pq basta ficar guardando ele no dp sempre que for deslogar.

 

Preciso resolver isso de alguma forma, aceito sugestões. Alguém poderia me ajudar?

 

PS.: Uso TFS 1.3

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

1 resposta a esta questão

Posts Recomendados

  • 0

Depois de muito bater cabeça eu consegui achar uma solução quase perfeita para o problema. Então vou compartilhar aqui, vai que ajuda outros...

 

Bom, primeiramente em items.xml precisamos configurar as skills do item, o tempo, etc. Como a ideia é que o item desapareça depois de algum tempo, vou por um decayTo 0.

<item id="25971" article="a" name="Chopper of Corruptedheart">
	<attribute key="weight" value="5000" />
	<attribute key="defense" value="35" />
	<attribute key="attack" value="56" />
	<attribute key="skillAxe" value="3" />
	<attribute key="weaponType" value="axe" />
	<attribute key="decayTo" value="0" /> <!--faz o item sumir depois que seu tempo expira-->
	<attribute key="duration" value="360000" />
	<attribute key="showduration" value="1" />
	<attribute key="slotType" value="two-handed" />
</item>

Reparem que não configurei o transformEquipTo e o transformDeEquipTo, pois meu item não tem duas sprites (como no caso dos rings e da soft)

Agora em movements.xml eu preciso configurar quem pode ou não usar o item.

<movevent event="Equip" itemid="25971" slot="hand" level="0" function="onEquipItem">
	<vocation name="Knight" />
	<vocation name="Elite Knight" showInDescription="0" />
	</movevent>
<movevent event="DeEquip" itemid="25971" slot="hand" function="onDeEquipItem" /><

Por se tratar de uma arma, vou precisar configurar tbm o weapons.xml (se fosse um helmet, um ring ou algo do gênero, eu poderia pular essa etapa).

<melee id="25971" unproperly="1">
	<vocation name="Knight" />
	<vocation name="Elite Knight" showInDescription="0" />
</melee>

 Blz, até aqui nada de novo, tudo isso a gente já precisa fazer quando vai criar qualquer item novo, certo?

Mas é agora que vem o pulo do gato (o gato que no caso sou eu ?, rsrs). Em data/events/scripts/events.xml vamos habilitar o onMoveItem.

<event class="Player" method="onMoveItem" enabled="1" />

E em data/events/scripts/player.lua, vamos configurar a função onMoveItens.

function Player:onMoveItem(item, count, fromPosition, toPosition, fromCylinder, toCylinder)
	local itensVIP = {25187,25175,25185,25429,25946,25915,25971} --todos os itens que eu preciso configurar 
	for i = 1, #itensVIP do
		if item.itemid == itensVIP[i] then
			item:decay() --toda vez que um item for movido, ele checa se faz parte dos itensVIP e starta o decay.
		end
	end
	return true
end

 

Resumidamente o resultado vai ser:

1. O tempo do item não para de decair, independente dele estar no slot, na bp, na casa, no dp, etc. Ok

2. Com o char deslogado, o tempo para de contar. Ok

3. Se o player deixar o item no DP e relogar o char, o tempo do item fica pausa, mas volta cair quando ele der move no item. Ok

4. O meu site possui um sistema de compra de itens que adiciona tal item no char. Quando o player compra o item que configuramos, o tempo dele vem pausado e se tal item cair dentro do seu respectivo slot (exemplo: o char compra uma sword e ele nao tem nenhuma sword na mão, logo, o a sword vai cair direto no slot dela), o tempo permanecerá pausado até que o char mova essa sword para a bp ou relogue. Bom, não era exatamente isso que eu queria, mas acho que posso considerar esse um bug pequeno e que não trará nenhum efeito colateral negativo, posto que cedo ou tarde esse char terá que relogar, no máximo ele irá conseguir umas horas há mais com o item, então, acho que ok.

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

×
×
  • Criar Novo...