Ir para conteúdo
  • Cadastre-se

Pedido Script (nao equipar 2 items ao mesmo tempo)


Posts Recomendados

2 horas atrás, Doidodepeda disse:

No meu ot tem a funçao q da usar 2 armas. mas queria impedir de usar a mesma arma.

o script impediria de equipar as duas igual.

Alguém pode ajudar pf ! *----*

 

 

TFS 0.4

 

vai no seu items.xml

e procura por algo desse tipo

 

<attribute key="dualWield" value="1" />

 

caso tenha isso no item, e so remover essa linha

Link para o post
Compartilhar em outros sites
41 minutos atrás, Kenshiin disse:

vai no seu items.xml

e procura por algo desse tipo

 

<attribute key="dualWield" value="1" />

 

caso tenha isso no item, e so remover essa linha

Nao e isso nao man. Meu ot da pra usar duas armas ao mesmo tempo ( o sistema e feito pela src )

O que eu quero, é que não de pra usar duas armas iguais

queria um script que impedisse de usar duas armas iguais !!!

EX: Quando uma tivesse equipada... nao dava pra equipar outra da mesma !

Editado por Doidodepeda (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
Em 16/09/2021 em 02:05, Doidodepeda disse:

Nao e isso nao man. Meu ot da pra usar duas armas ao mesmo tempo ( o sistema e feito pela src )

O que eu quero, é que não de pra usar duas armas iguais

queria um script que impedisse de usar duas armas iguais !!!

EX: Quando uma tivesse equipada... nao dava pra equipar outra da mesma !

 

2 horas atrás, Kyle Bellini disse:

posta o código, para que possam ajudar

Codigo que vai na scr

 

Citar

Vá em player.ccp e procure por:

 


ret = RET_CANONLYUSEONEWEAPON;
 

 

 

Você ira encontrar dois "ret = RET_CANONLYUSEONEWEAPON;", substitua por:

 


ret = RET_NOERROR;
 

 

 

 

 

Após, localize weapons.h e procure por:

 


const Weapon* getWeapon(const Item* item) const;
 

 

 

Embaixo você coloca:

 


            static int32_t getAttackLeft;
    static int32_t getAttackRigth;
    static int32_t getLeftExtraAttack;
    static int32_t getRigthExtraAttack;
 

 

 

 

 

Depois, localize weapons.ccp e procure por:

 


int32_t WeaponMelee::getWeaponDamage(const Player* player, const Creature* target, const Item* item, bool maxDamage /*= false*/) const
{
int32_t attackSkill = player->getWeaponSkill(item);
int32_t attackValue = std::max((int32_t)0, (int32_t(item->getAttack() + item->getExtraAttack()) - elementDamage));
float attackFactor = player->getAttackFactor();
 

 

 

Substitua por:

 


int32_t WeaponMelee::getWeaponDamage(const Player* player, const Creature* target, const Item* item, bool maxDamage /*= false*/) const
{

   int32_t getAttackLeft;
   int32_t getAttackRigth;
   int32_t getLeftExtraAttack;
int32_t getRigthExtraAttack;

   getAttackLeft = 0;
   getAttackRigth = 0;
   getLeftExtraAttack = 0;
getRigthExtraAttack = 0;

   if (getAttackLeft == 0)
   { 
       if (player->getInventoryItem(SLOT_LEFT) != NULL)
       {
       getAttackLeft = player->getInventoryItem(SLOT_LEFT)->getAttack();
       getLeftExtraAttack = player->getInventoryItem(SLOT_LEFT)->getExtraAttack();
       }
       else if (player->getInventoryItem(SLOT_LEFT) == NULL)
       {
       getAttackLeft = 0;
       getLeftExtraAttack = 0;  
       }
   }  

   if (getAttackRigth == 0)
   { 
       if (player->getInventoryItem(SLOT_RIGHT) != NULL)
       {
       getAttackRigth = player->getInventoryItem(SLOT_RIGHT)->getAttack();
       getRigthExtraAttack = player->getInventoryItem(SLOT_RIGHT)->getExtraAttack();
       }
       else if (player->getInventoryItem(SLOT_RIGHT) == NULL)
       {
       getAttackRigth = 0;
       getRigthExtraAttack = 0;  
       }
   }                                                 


   int32_t attackValue = std::max((int32_t)0, (int32_t)((getAttackLeft + getLeftExtraAttack + getAttackRigth + getRigthExtraAttack) - elementDamage));                                               

   int32_t attackSkill = player->getWeaponSkill(item);
   float attackFactor = player->getAttackFactor();

 

Pode ser implimentado nesse codigo, ou xml.... tanto faz !

Link para o post
Compartilhar em outros sites

Vá até o arquivo thing.h, e busque por:

RET_TILEISFULL = 64

Adicione uma vírgula após o 64, e logo abaixo adicione:

RET_CANNOTUSESAMEWEAPON = 65

 

 

 

Agora vá até o arquivo player.cpp, e busque por:

case RET_TILEISFULL:
  sendCancel("You cannot add more items on this tile.");
  break;

Pule uma linha, e na seguinte adicione:

case RET_CANNOTUSESAMEWEAPON:
  sendCancel("You cannot use the same weapon.");
  break;

 

 

Ainda no arquivo player.cpp, busque por:

else if(!leftItem->isWeapon() || !item->isWeapon() ||
  leftType == WEAPON_SHIELD || leftType == WEAPON_AMMO
  || type == WEAPON_SHIELD || type == WEAPON_AMMO)
  ret = RET_NOERROR;

Logo abaixo, adicione:

else if(item->isWeapon() && leftItem->isWeapon())
{
  if(item->getID() == leftItem->getID())
    ret = RET_CANNOTUSESAMEWEAPON;
}

 

Busque por:

else if(!rightItem->isWeapon() || !item->isWeapon() ||
  rightType == WEAPON_SHIELD || rightType == WEAPON_AMMO
  || type == WEAPON_SHIELD || type == WEAPON_AMMO)
  ret = RET_NOERROR;

Logo abaixo, adicione:

else if(item->isWeapon() && rightItem->isWeapon())
{
  if(item->getID() == rightItem->getID())
    ret = RET_CANNOTUSESAMEWEAPON;
}

 

Link para o post
Compartilhar em outros sites
12 horas atrás, Kyle Bellini disse:

Vá até o arquivo thing.h, e busque por:


RET_TILEISFULL = 64

Adicione uma vírgula após o 64, e logo abaixo adicione:


RET_CANNOTUSESAMEWEAPON = 65

 

 

 

Agora vá até o arquivo player.cpp, e busque por:


case RET_TILEISFULL:
  sendCancel("You cannot add more items on this tile.");
  break;

Pule uma linha, e na seguinte adicione:


case RET_CANNOTUSESAMEWEAPON:
  sendCancel("You cannot use the same weapon.");
  break;

 

 

Ainda no arquivo player.cpp, busque por:


else if(!leftItem->isWeapon() || !item->isWeapon() ||
  leftType == WEAPON_SHIELD || leftType == WEAPON_AMMO
  || type == WEAPON_SHIELD || type == WEAPON_AMMO)
  ret = RET_NOERROR;

Logo abaixo, adicione:


else if(item->isWeapon() && leftItem->isWeapon())
{
  if(item->getID() == leftItem->getID())
    ret = RET_CANNOTUSESAMEWEAPON;
}

 

Busque por:


else if(!rightItem->isWeapon() || !item->isWeapon() ||
  rightType == WEAPON_SHIELD || rightType == WEAPON_AMMO
  || type == WEAPON_SHIELD || type == WEAPON_AMMO)
  ret = RET_NOERROR;

Logo abaixo, adicione:


else if(item->isWeapon() && rightItem->isWeapon())
{
  if(item->getID() == rightItem->getID())
    ret = RET_CANNOTUSESAMEWEAPON;
}

 

Coloquei o código com toda atenção e certinho. Porem não esta dando pra equipar as duas armas. da a seguinte msg: put this object  in your hand (coloque este objeto em sua mão)

Link para o post
Compartilhar em outros sites

Não sei se é a melhor forma, mas depois testo com calma, e vejo se dá pra fazer algo melhorzinho

 

Comenta essa linha:

else if((item->getSlotPosition() & SLOTP_RIGHT) || (item->getSlotPosition() & SLOTP_LEFT))
  ret = RET_PUTTHISOBJECTINYOURHAND;

Ficando assim:

/*else if((item->getSlotPosition() & SLOTP_RIGHT) || (item->getSlotPosition() & SLOTP_LEFT))
 ret = RET_PUTTHISOBJECTINYOURHAND;*/

 

Link para o post
Compartilhar em outros sites
51 minutos atrás, Kyle Bellini disse:

Não sei se é a melhor forma, mas depois testo com calma, e vejo se dá pra fazer algo melhorzinho

 

Comenta essa linha:



else if((item->getSlotPosition() & SLOTP_RIGHT) || (item->getSlotPosition() & SLOTP_LEFT))
  ret = RET_PUTTHISOBJECTINYOURHAND;

Ficando assim:



/*else if((item->getSlotPosition() & SLOTP_RIGHT) || (item->getSlotPosition() & SLOTP_LEFT))
 ret = RET_PUTTHISOBJECTINYOURHAND;*/

 

Funcionou, Muitooooooo Obrigado.

Mas caso voce faça outra versao ''melhorada'' me avisa pf !

Muitoo Grato !

Editado por Doidodepeda (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
Em 22/09/2021 em 16:23, Kyle Bellini disse:

Não sei se é a melhor forma, mas depois testo com calma, e vejo se dá pra fazer algo melhorzinho

 

Comenta essa linha:



else if((item->getSlotPosition() & SLOTP_RIGHT) || (item->getSlotPosition() & SLOTP_LEFT))
  ret = RET_PUTTHISOBJECTINYOURHAND;

Ficando assim:



/*else if((item->getSlotPosition() & SLOTP_RIGHT) || (item->getSlotPosition() & SLOTP_LEFT))
 ret = RET_PUTTHISOBJECTINYOURHAND;*/

 

Irmão, Fiquei muito grato por vc ter me ajudado. Pois eu estava a tempos atrás de um código q fizesse isso.

Seu código e funcional e tals. Porem dentro do game ficou zuado man !

Mage pode usar, bow.. pode sword... paladin pode usar staff, sword e assim vai... fora q em qlq parte do corpo pode encaixar qualquer item. Que no normal não e assim.

Se você puder da uma reformulada no código na namoralzinha fico muito grato man !

Foto:

Sem título.png

Editado por Doidodepeda (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

A linha comentada que falei ali acima, é de permitir colocar as armas nos outros slots (por isso falei que talvez n seja a melhor forma, visualmente é feio kkk)

Quanto a poder colocar armas de outras vocações ali, não foi alterado nada disso, salvo engano é permitido por padrão, no entanto, elas não deveriam funcionar se for de outra vocação (remove as alterações que citei, e faz o teste)

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por LasseXeterno
      Então, estou tentando adicionar uma nova "race" no meu Ot de base Cyan, tentei seguir 3 tutoriais aqui do tibiaking, um sobre race, porém nos códigos do meu servidor não tem o constant.h e nem o monster.cpp. E o outro tutorial, eu fiz tudo que ele pediu e quando entrei no game para testar, funcionava os golpes e as imunidades, porém não aparecia o número do dano e nem a cor.  Usei esse tutorial como base: 
      Pois ele é derivado. E o outro tutorial que usei foi: 
      Porém nesse, não consegui achar a const.h, e quando fui nos arquivos do creaturescript e adicionei uma cor nova a "COLOR_FAIRY", quando abro o jogo, os pokemons que seriam teoricamente "fada", o que eu usei de teste foi a Clefable. A Clefable tomava IK e dava IK no seu atk do tipo fada. 
      Além de que, o meu erro principal é esse: Warning - Monsters::loadMonster] Unknown race type fairy. (data/monster/pokes/geracao 1/Clefable.xml)
       Pois como eu já disse, não consigo achar onde adicionar uma nova race.

    • Por yuriowns
      Salve rapazes, tranquilo? Preciso de ajuda pra colocar para os npc's que vendem pots verificarem quantos itens possuem no tile em que o player está e se tiver com +80 itens no sqm, o npc avisa e não vende nada até o player ir em um sqm com menos de 80 itens no chão.
       
    • Por A.Mokk
      .Qual servidor ou website você utiliza como base? 
      TFS 0.4
      Qual o motivo deste tópico? 
      Bom pessoal, a algumas semanas atras eu joguei um servidor que havia sistema de imbuimento sendo 8.60, no servidor se utilizava a spellwand para encantar as armas, os comandos eram dado no canal Imbuiment... Gostaria de saber se alguém teria como disponibilizar algum sistema de imbuimento, já procurei pra caramba aqui no fórum mas tudo que encontro é pra versões acima da que eu uso.
       
    • Por Mateus Robeerto
      Não sei se aqui é a área ou algum local para solicitar a alteração do email antigo... Não lembro mais a senha dele, nem a resposta secreta para acessar. Peço a algum administrador ou moderador para, por favor, alterar o email para o novo.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo