Ir para conteúdo

Alterar wandDamage do player em action


BreisPodeu

Posts Recomendados

Tipo do script: Action
Protocolo (versão do Tibia): 8.6
Servidor utilizado: OTX Server Based in tfs 0.3.7
Nível de experiência: média
Adicionais/Informações:


Bom galera, boa noite...

Dúvida 1: (Alterada)


Explicação:

No vocations.xml existe o wandDamage, que fala o quanto vai multiplicar o atk da wand (que fica em weapons.xml).. Eu gostaria de conseguir mudar esse multiplicador de acordo com a quantidade de vezes que uso um item na minha wand..

Por exemplo:

Sou um sorcerer e tenho como definição o wandDamage 1.0
Quando eu usar o item que eu definir em uma wand, ela irá alterar esse wandDamage quando eu estiver usando essa wand, ou seja, quando eu usar o item, vai ser como se eu tivesse wandDamage = 1.2, se usar o item que defini na wand novamente, mudará pra 1.4 e assim por diante.. E ao desequipar essa wand, o multiplicador volta para 1.0

Dúvida 2: (Sanada)

 


Preciso de algum jeito para o NPC pegar o nome e o armor de algum item de um player..

Por exemplo, eu tenho um script que muda o nome e a armor do item.. Então:

Nome do item: Capacete Louco

Armor: 765

ID: 12345

Eu quero, a partir desse ID, fazer o NPC checar se o player tem algum item com o mesmo id (tanto na bp quanto equipado).
Depois disso, caso houver esse item, pegar o nome e o armor desse item para utilizar dentro do script...
Lembrando que o nome e a armor não são os mesmos que estáo definidos no items.xml, eu alterei com outros scripts...



Alguém? Obrigado

edits: A dúvida 2 foi sanada pelo GstavoLiber, então retirei ela.. Alterei a dúvida 1 para melhor entendimento de quem tentar me ajudar

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

Para sua DÚVIDA 1) Tem vários sistemas de refinar item aqui, com eles você pode almentar o attack da wand e tudo mais.. agora para um script é só usar a msm lógica de qualquer um tipo de sistema de refine.

 

Para sua DÚVIDA 2) Você pode procurar no player pelo slot:

getPlayerSlotItem(cid, slot)

Hand, feet, head,ring,necklance, body

 

Pelo ID:

getPlayerItemById(cid, deepSearch, itemId)

Ou contagem do item em posse do player:

getPlayerItemCount(cid, itemid)

Para pegar os valores, utilize:

getItemAttack(uid)
getItemArmor(uid)
getItemDefense(uid)
getItemExtraDefense(uid)
getItemExtraAttack(uid)

Qualquer outra dúvida posta aqui. Esse tópico é de dúvida. Sem pedidos por aqui.

 

-GstavoLiber

Link para o comentário
Compartilhar em outros sites

Bom, para o primeiro que respondeu, eu não fiz nenhum pedido aqui, nenhum momento eu pedi para me entregarem um script pronto para o que eu queria. Eu só perguntei se havia como fazer o que eu queria e se soubesse qual, me falasse.. Se isso for considerado um pedido, não deveria existir a área de dúvidas.. E obrigado por sanar a dúvida II, em breve vou testar..

 

Já a dúvida I, eu n falei que era exatamente sobre aprimoramento, pode até ser considerado assim, mas quero fazer outras utilizações do script que estou fazendo também... Bom, vou tentar explicar novamente o que eu quero..

 

No vocations.xml existe o wandDamage, que fala o quanto vai multiplicar o atk da wand (que fica em weapons.xml).. Eu gostaria de conseguir mudar esse multiplicador de acordo com a quantidade de vezes que uso um item na minha wand..

 

Por exemplo:

 

Sou um sorcerer e tenho como definição o wandDamage 1.0

Quando eu usar o item que eu definir em uma wand e quando eu estiver usando essa wand, vai ser como se eu tivesse wandDamage = 1.2, se usar novamente, mudará pra 1.4 e assim por diante..

 

Pelo que vi no script que você me mandou Mateusoo, poderia até ser uma solução, mas o dano da wand é modificado a cada ataque do player.. Agora imagine 200 players utilizando uma wand e todos caçando.. Esse script rodando a cada ataque de cada player.. Vai causar um lag absurdo no servidor... Queria uma outra opção à isso, tentando modificar o wandDamage por action.. Será que é possível?

Link para o comentário
Compartilhar em outros sites

Infelizmente não conheço nenhum outro comando para modificar o vocations.xml dentro do game, mas uma idéia te dou: Você poderia criar vocations, com o mesmo nome, tudo igual, so muda a wandDamage, afinal, os players não tem essa informação. O único problema, é que teria que criar a nova vocação e portanto um id diferente da mesma poderia estragar algum outro sistema que usa em base a vocação padrao. Mas de certa maneira é uma idéia, assim, cada vez que usasse alguma coisa no seu item, mudava da vocação por exemplo: Druid, para Druid, mas de certo modo, Druid com wandDamage 1.0 para Druid com WandDamage 2.0, porém, outro problema, é que não da pra fazer um número infinito né, entao teria apenas algumas variações.

 

Se possível da +REP ali onde te ajudei =)

 

-GstavoLiber

Link para o comentário
Compartilhar em outros sites

Mano, foi exatamente isso que eu pensei.. O problema é que existe vários sistemas no meu servidor com base nas vocações, então eu optei por procurar outro modo... Mas tá muito dificil em pensar em alguma solução pro que eu quero...

 

Mas imagina só eu criar, sei lá, 10 novas vocações para druid e sorcerer? Viraria uma bagunça e seria muita gambiarra no servidor.. Vou ver se encontro um jeito de fazer isso nas sources, que um dia vou pegar pra entender (preguiça, é muito grande)

 

Fora que pretendo usar o mesmo script pra outras coisas, entao teria diversas combinações com wandDamage, magicDamage, etc etc.. Impossivel de fazer assim kkkk

 

Vlw pela tentativa de ajudar, enquanto isso vou esperar alguem com mais criatividade que consiga uma gambiarra menos "gambiarrenta" kkkkk

 

REP.

Link para o comentário
Compartilhar em outros sites

Beleza, BreisPodeu?

 

Seguinte, cara, vou te explicar mais ou menos como funciona seu servidor, ele tem sources programadas em C++, uma linguagem orientada a objetos. Daí, o atributo wandDamage que você configura no seu arquivo vocations.xml é interpretado por funções do arquivo vocations.cpp (posteriormente compilado no seu servidor).

 

Como a linguagem é orientada a objetos, cara, o atributo wandDamage é exclusivo da classe Vocations e não da classe Player e não tem funções em Lua para alterar esse atributo dinamicamente. Uma maneira perfeita de fazer isso, é criar um atributo wandDamage na classe Item, alterar a fórmula que retorna o dano de wands no weapons.cpp, incluindo esse atributo, aí se pá você vai poder alterar o atributo pelo doItemSetAttribute e se pá até no items.xml

Boa sorte \Õ/

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

Amigo, eu sei sobre as source e talz, mas nunca cheguei a alterar uma.. Eu tava pensando em criar um multiplicador dentro da classe player e aí na parte que pega o dano da wand, dar um get nesse multiplicador e alterar a formula.. Essa solução de criar um atributo na classe items foi bem interessante, que daí não vou ter que fazer um movement para cada rod/wand... Mas como assim "se pá" vai poder pegar no doItemSetAttribute? Tem chances de eu não poder fazer isso?

Tipo cara, como funciona a utilização do lua com o C++? O lua já consegue ter acesso aos atributos classe items por meio de um objeto do item? (que no caso é representado por uma meta-tabela, pq lua n é orientada objetos) e daí eu já conseguiria só de adicoinar na classe players dar um get e um set nesse atributo? Ou eu preciso fazer alguma função que consiga me retornar esse atributos? Estou meio perdido aí, na utilização do lua com o C++...

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

×
×
  • Criar Novo...