ON
poketibia

Pet System OOP

Por Oneshot, 25 de jan. de 2013 em Mods, funções e outros

tibia
script
otserv
5.0 (3)
58
15.6k
bankayoB
26 de janeiro de 2013 às 01:44

Descobri o que houve era o arquivo pet trainer.lua que eu tinha escrito de maneira errada.

Consegui colocar ele no mapa, porém ele não vende o pet, o que devo fazer?

 

Eu escrevo "sell", mas não acontece nada. Agora se eu escrever Revive ele diz "You don't have a pet".

DoGoZD
26 de janeiro de 2013 às 01:49

Instalou as libs?

Alías, qual servidor está utilzando?

bankayoB
26 de janeiro de 2013 às 01:52

Instalei sim, creio que tudo.

Sobre a questão de colocar:

 

 

<script>

<event name="PetDeath"/>

</script>

 

eu posso colocar em qualquer parte do monstro?

e o monstro continua no lugar de sempre? (data\monster) ?

 

 

SERVIDOR: Real Server 3.1

DoGoZD
26 de janeiro de 2013 às 01:58

Sim em qualquer parte do XML do monstro e sim dentro da pasta data\monster.

Não pode esquecer de verificar se está assim também :

 

 

<flag convinceable="1"/>

bankayoB
26 de janeiro de 2013 às 02:11

Sim, eu deixei os rats pra fazer o teste e adicionei o script em cada monstro e os <flag convinceable="1"/> já estavam em 1.

Ainda não consigo comprar o pet.

26 de janeiro de 2013 às 06:33

E incrível o sistema

Você manipula a criatura de um jeito espetacular salvando a criatura com o pet:setit

A única coisa chata seria as storages.

 

 

Mais ta incrível

Parabéns.

 

Então, cara, eu até fiz enquanto na fase de desenvolvimento por querys na database. O problema é que se toda hora eu tenho que salvar o pet na database e obter dados dela, acabei notando o pequeno lag que se criava na execução dos comandos, aí fiz por storage.

 

Obrigado a todos.

 

Eu não li o código (muito extenso), apenas tenho uma ideia de como ele funciona, então posso estar falando uma grande besteira, mas vamos lá...

 

Storages são armazenadas no banco de dados da mesma forma que seria se você criasse uma tabela especifica para os pets, então teoricamente (e provavelmente também na prática) o custo de salvar as informações é exatamente o mesmo. A diferença é quando salvar essas informações.

 

Se toda vez que você alterasse a storage de um player alterasse diretamente no banco de dados, o custo seria bem mais alto. Da mesma forma aconteceria se você alterasse a tabela de pets diretamente.

 

O motivo das storages serem mais rápidas é porque quando você altera uma storage, o banco de dados não é alterado imediatamente. A informação só é trocada na memória do servidor, de uma forma crua e rápida, e só é transmitida definitivamente ao banco de dados quando o player é salvo (quando é executado um save automático, quando o player sai do jogo, ou quando o servidor é fechado).

 

Agora que já está tudo feito por storages, não compensa alterar só por esse detalhe, mas uma coisa interessante de se fazer seria sobrecarregar (no sentido Lua) a função de save do open tibia:

 

__doPlayerSave__ = doPlayerSave
function doPlayerSave(cid, shallow)
   get_pet(cid):save(shallow)
   return __doPlayerSave__(cid, shallow)
end

 

Uma coisa interessante seria fazer proveito do "shallow", indicando à sua função de save se ela deve salvar todas as informações ou apenas as mais cruciais (para evitar, por exemplo, clonamento de itens ou algo assim).

 

O único problema de sobrecarregar a função Lua é que talvez ela não seja executada em todos os saves. Provavelmente quando o player sai do jogo ou o servidor desliga, uma função interna do open tibia é executada pra salvar o player, e não a função em Lua, então você teria que alterar diretamente no código fonte ou então criar um script que execute quando o player saia do jogo e quando o servidor feche, para que salvem o player.

 

Ou então usar storages, já que o open tibia vai cuidar de tudo direitinho pra você. É, tudo isso que eu escrevi não serviu pra nada mesmo.

SexyboyyS
26 de janeiro de 2013 às 12:02

Testei aqui, muito bom o sistema Oneshot, Rep+

Me deu varias ideias, inclusive de uma vocation nova para meu projeto hahaha..

Sou leigo nesse assunto, mas será q n teria como modificar para tipo:

o pet avança lvl e ganha atributos, no caso nao só HP e MP mas tbm defesa e ataque.

Outra coisa que melhoraria o script seria o sistema de spells do pet ter como base

algum comando para soltar tal spell, exemplo: /pet cast m1 ou /pet cast Dark Bite, /pet cast Rock throw

algo assim para diferenciar os ataques do pet. É apenas uma sugestao, mais acho q ficaria mto bom :p

OneshotO
26 de janeiro de 2013 às 12:16

Testei aqui, muito bom o sistema Oneshot, Rep+

Me deu varias ideias, inclusive de uma vocation nova para meu projeto hahaha..

Sou leigo nesse assunto, mas será q n teria como modificar para tipo:

o pet avança lvl e ganha atributos, no caso nao só HP e MP mas tbm defesa e ataque.

Outra coisa que melhoraria o script seria o sistema de spells do pet ter como base

algum comando para soltar tal spell, exemplo: /pet cast m1 ou /pet cast Dark Bite, /pet cast Rock throw

algo assim para diferenciar os ataques do pet. É apenas uma sugestao, mais acho q ficaria mto bom :p

 

Eu planejo para um próximo update um sistema de atributos para pet. E sobre o comando /pet cast, irei aperfeiçoar-lo também.

 

Abraços.

dalvorsnD
26 de janeiro de 2013 às 12:53

E incrível o sistema

Você manipula a criatura de um jeito espetacular salvando a criatura com o pet:setit

A única coisa chata seria as storages.

 

 

Mais ta incrível

Parabéns.

 

Então, cara, eu até fiz enquanto na fase de desenvolvimento por querys na database. O problema é que se toda hora eu tenho que salvar o pet na database e obter dados dela, acabei notando o pequeno lag que se criava na execução dos comandos, aí fiz por storage.

 

Obrigado a todos.

 

Não use querys, vai acabar crashando de tantas consultas a db, a não ser que use cache com luasql, nesse caso é otimo, do contrario continue da forma que está pois está excelente. Storages não executam as querys quando são modificadas, elas salvam na memoria e só executam no logout e login.

 

No geral o sistema está muito bom, só a parte de spells que acho que poderia ser algo mais livre. Uma sugestão seria usar uma lib externa com todas as spells, e buscá-las apenas pelo seu nome, dai teria mais liberdade na criação das mesmas.

 

Meus parabéns, otimo sistema.

 

#Edit

 

Vi que as spells já são pelo nome, porem ela só da a configuração, se quiser uma spell diferente com varias areas, efeitos, conditions, creio que será mais complicado, a spell inteira criada num arquivo ou ate mesmo em uma função seria mais interessante.

 

ex.:

function do_pet_cast_spell(spell_name)
     if spell_name "dark bite" then
           -- executa a spell
     elseif spell_name "furios bite" then -- sem criatividade kk
           -- executa ,,,
     else
           -- ..
     end
end

Dai ficaria algo mais livre pra criação. Isso é uma opnião minha apenas, e não sei se fica mais facil para os que detem pouco conhecimento de scripting.

Editado Janeiro 26 por dalvorsn

UchihaNearU
26 de janeiro de 2013 às 13:08

Vou testar no meu server 9.81 nao tenhu ctz que vai funcionar mas vo testar se funcionar eu dou rep+ xD

Mas pelo que vi o sistema parace muito bom e facil de configurar continua assim lek :)

OneshotO
26 de janeiro de 2013 às 14:07

Bom, como eu disse, é um sistema em fase de aprimoramento, então eu ainda quero sim mudar algumas coisas no sistema de magias e nos atributos do pet.

Editado Janeiro 26 por Oneshot

KausenK
26 de janeiro de 2013 às 17:36

Cara muito legal

Ótimo pra ser usado em otservs próprios

XyFilX
27 de janeiro de 2013 às 11:51

Hmm. Otimo sistem obrigado aê me ajudou =)

murilo103M
27 de janeiro de 2013 às 23:00

Meus parabéns minha meta neste ano é ficar muito melhor em programação, sei apenas linguagem C++, C#, tenho preguiças de aprender Lua solo, muito bom, quem sabe não façamos umas turmas de estudo. Muito Bom Oneshot, logo logo você jpa lança a 2.0!!

FelipeGorreriF
28 de janeiro de 2013 às 10:26

Cara, na boa!

Eu acho que é o primeiro sistema de Pet que funciona, já vi vários antigamente aqui e nunca funcionava.

Excelente, nota 1000.