Jump to content
Sign in to follow this  
Guest Rappa Carnaúba

Hotkeys <RevBattle>

Recommended Posts

Guest Rappa Carnaúba   
Guest Rappa Carnaúba

Olá galerinha decidi liberar a hotkeys, não fui eu que a desenvolvi completamente mais sim o 'Black Demon' eu fiz modificações para que ela funcionasse na mais nova cvs que é a revbattle sys(revisão do sistema de batalha)

 

Vamos começar a colocar o code.

 

em game.cpp

 

 

Troque a funcão:

 

 

bool Game::playerUseItemEx(Player* player, const Position& fromPos, uint8_t fromStackPos, uint16_t fromSpriteId,    const Position& toPos, uint8_t toStackPos, uint16_t toSpriteId){    OTSYS_THREAD_LOCK_CLASS lockClass(gameLock, "Game::playerUseItemEx()");    if(player->isRemoved())  return false;    ReturnValue ret = RET_NOERROR;    if((ret = Actions::canUse(player, fromPos)) != RET_NOERROR){  player->sendCancelMessage(ret);  return false;    }        Thing* thing = internalGetThing(player, fromPos, fromStackPos);    if(!thing){  player->sendCancelMessage(RET_NOTPOSSIBLE);  return false;    }        Item* item = thing->getItem();    if(!item || item->getClientID() != fromSpriteId || !item->isUseable()){  player->sendCancelMessage(RET_CANNOTUSETHISOBJECT);  return false;    }    return internalUseItemEx(player, fromPos, item, toPos, toStackPos, toSpriteId);}

 

Por esta funcão:

 

bool Game::playerUseItemEx(Player* player, const Position& fromPos, uint8_t fromStackPos, uint16_t fromSpriteId,    const Position& toPos, uint8_t toStackPos, uint16_t toSpriteId){    OTSYS_THREAD_LOCK_CLASS lockClass(gameLock, "Game::playerUseItemEx()");    if(player->isRemoved())  return false;      ReturnValue ret = RET_NOERROR;    if((ret = Actions::canUse(player, fromPos)) != RET_NOERROR){  player->sendCancelMessage(ret);  return false;    }            Item* item = dynamic_cast<Item*>(internalGetThing(player, fromPos, fromStackPos));    player->usedHotkey = false;    if(!item && fromPos == Position(0xFFFF, 0, 0)){       item = player->getHotkeyItem(fromSpriteId, fromStackPos);       if(!item){       player->sendCancelMessage(RET_NOERROR);    return false;    }    Cylinder* cylinder = item->getParent();       if(cylinder == NULL){       return false;    }    fromStackPos = cylinder->__getIndexOfThing(item);    player->usedHotkey = true;    }    if(!item || item->getClientID() != fromSpriteId || !item->isUseable()){  player->sendCancelMessage(RET_CANNOTUSETHISOBJECT);  return false;    }        return internalUseItemEx(player, fromPos, item, toPos, toStackPos, toSpriteId);}

 

Agora troque essa funcão

 

bool Game::playerUseBattleWindow(Player* player, const Position& fromPos, uint8_t fromStackPos,    uint32_t creatureId, uint16_t spriteId){    OTSYS_THREAD_LOCK_CLASS lockClass(gameLock, "Game::playerUseBattleWindow");    if(player->isRemoved())  return false;    Creature* creature = getCreatureByID(creatureId);    if(!creature){      return false;    }        if(!Position::areInRange<7,5,0>(creature->getPosition(), player->getPosition())){  return false;    }        if(creature->getPlayer()){  player->sendCancelMessage(RET_DIRECTPLAYERSHOOT);  return false;    }    ReturnValue ret = RET_NOERROR;    if((ret = Actions::canUse(player, fromPos)) != RET_NOERROR){  player->sendCancelMessage(ret);  return false;    }    Thing* thing = internalGetThing(player, fromPos, STACKPOS_USE);    if(!thing){  return false;    }    Item* item = thing->getItem();    if(!item){  player->sendCancelMessage(RET_CANNOTUSETHISOBJECT);  return false;    }        return internalUseItemEx(player, fromPos, item, creature->getPosition(), 0, 0);}

Por esta funcão:

 

bool Game::playerUseBattleWindow(Player* player, const Position& fromPos, uint8_t fromStackPos,    uint32_t creatureId, uint16_t spriteId){    OTSYS_THREAD_LOCK_CLASS lockClass(gameLock, "Game::playerUseBattleWindow");    if(player->isRemoved())  return false;    Creature* creature = getCreatureByID(creatureId);    if(!creature){      return false;    }        if(!Position::areInRange<7,5,0>(creature->getPosition(), player->getPosition())){  return false;    }        if(creature->getPlayer()){  player->sendCancelMessage(RET_DIRECTPLAYERSHOOT);  return false;    }    ReturnValue ret = RET_NOERROR;    if((ret = Actions::canUse(player, fromPos)) != RET_NOERROR){  player->sendCancelMessage(ret);  return false;    }    Item* item = dynamic_cast<Item*>(internalGetThing(player, fromPos, STACKPOS_USE));        player->usedHotkey = false;       if(!item && fromPos == Position(0xFFFF, 0, 0)){       item = player->getHotkeyItem(spriteId, fromStackPos);       if(!item){       player->sendCancelMessage(RET_NOERROR);    return false;    }    Cylinder* cylinder = item->getParent();       if(cylinder == NULL){       return false;    }       fromStackPos = cylinder->__getIndexOfThing(item);       player->usedHotkey = true;    }      if(!item){  player->sendCancelMessage(RET_CANNOTUSETHISOBJECT);  return false;    }        return internalUseItemEx(player, fromPos, item, creature->getPosition(), 0, 0);}

 

Agora em spells.cpp

 

Troque

 

bool RuneSpell::executeUse(Player* player, Item* item, const PositionEx& posFrom, const PositionEx& posTo, bool extendedUse){    if(!playerRuneSpellCheck(player, posTo)){  return false;    }    bool result = false;    if(m_scripted){  LuaVariant var;  var.type = VARIANT_POSITION;  var.pos = posTo;  result = internalCastSpell(player, var);    }    else{  if(function){      result = function(this, player, item, posFrom, posTo);  }    }    if(result){  Spell::postCastSpell(player);    if(hasCharges && item){      int32_t newCharge = std::max(0, item->getItemCharge() - 1);      g_game.transformItem(item, item->getID(), newCharge);  }    }    return result;}

 

Por este code:

 

bool RuneSpell::executeUse(Player* player, Item* item, const PositionEx& posFrom, const PositionEx& posTo, bool extendedUse){    if(!playerRuneSpellCheck(player, posTo)){  return false;    }    bool result = false;    if(m_scripted){  LuaVariant var;  var.type = VARIANT_POSITION;  var.pos = posTo;  result = internalCastSpell(player, var);    }    else{  if(function){      result = function(this, player, item, posFrom, posTo);  }    }    if(result){  Spell::postCastSpell(player);    if(hasCharges && item){      int32_t newCharge = std::max(0, item->getItemCharge() - 1);        bool usedHotkey = player->usedHotkey;      g_game.transformItem(item, item->getID(), newCharge);      if(usedHotkey){              uint16_t totalCharges = player->getTotalCharges(item->getID());              if(totalCharges == 0){                  player->sendTextMessage(MSG_INFO_DESCR, "That was your last rune!");               }               else{                  std::stringstream chargeStream;                  chargeStream << totalCharges << " charges left...";                  player->sendTextMessage(MSG_INFO_DESCR, chargeStream.str().c_str());               }             }           }  }          return result;}

 

agora em player.cpp

 

embaixo de:

 

chaseMode = CHASEMODE_STANDSTILL;

adicione

usedHotkey = false;
no final adicione:

 

Item* Player::getHotkeyItem(uint16_t itemId, uint8_t itemType){     const long fluidMap[] = {FLUID_EMPTY_1, FLUID_BLUE_1, FLUID_RED_1, FLUID_BROWN_1, FLUID_GREEN_1, FLUID_YELLOW_1, FLUID_WHITE_1, FLUID_PURPLE_1, FLUID_RED_2, FLUID_BROWN_2, FLUID_PURPLE_2};     std::list<const Container*> listContainer;    ItemList::const_iterator cit;    Container* tmpContainer = NULL;     Item* item = NULL;    for(int i = SLOT_FIRST; i < SLOT_LAST; i++){        if(item = inventory[i]){           if(item->getClientID() == itemId){              if(item->isFluidContainer() && fluidMap[item->getFluidType()] == itemType){                    return item;              }               else if(!item->isFluidContainer()){                    return item;              }            }          if(tmpContainer = item->getContainer()){             listContainer.push_back(tmpContainer);            }         }      }    while(listContainer.size() > 0){      const Container* container = listContainer.front();      listContainer.pop_front();        for(cit = container->getItems(); cit != container->getEnd(); ++ cit){        if((*cit)->getClientID() == itemId){           if((*cit)->isFluidContainer() && fluidMap[(*cit)->getFluidType()] == itemType){              return (*cit);              }           else if(!(*cit)->isFluidContainer()){              return (*cit);              }           }       if(tmpContainer = (*cit)->getContainer()){          listContainer.push_back(tmpContainer);        }      }    }    return NULL;  }            uint32_t Player::getTotalCharges(Cylinder* cylinder) const{     if(cylinder == NULL)        return 0;          std::list<Container*> listContainer;     ItemList::const_iterator it;    Container* tmpContainer = NULL;       Thing* thing = NULL;    Item* item = NULL;    uint32_t charges = 0;        for(int i = cylinder->__getFirstIndex(); i < cylinder->__getLastIndex(); ++i){      if(!(thing = cylinder->__getThing(i)))         continue;      if(!(item = thing->getItem()))         continue;         if(tmpContainer = item->getContainer()){         listContainer.push_back(tmpContainer);      }      else{         if(item->isRune()){            charges += item->getItemCharge();         }      }   }   while(listContainer.size() > 0)   {       Container* container = listContainer.front();       listContainer.pop_front();    for(it = container->getItem(); it != container->getEnd(); ++it)    {       Item* item = (*it);              if(listContainer = item->getContainer()){          listContainer.push_back(tmpContainer);       }       else{          if(item->isRune()){             charges += item->getItemCharges();          }      }   }   return charges;}

agora em player.h

nos includes

adicione

 

#include "networkmessage.h"

para terminarmos de adicionar o codigo em public adicione:

 

    Item* getHotkeyItem(uint16_t itemId, uint8_t itemType);    uint32_t Player::getTotalCharges(uint16_t itemId) const;    bool usedHotkey;

 

Pronto, codigo terminado agora deem rebuild all.

 

Rappa Carnaúba™

BlackDemon™

 

Todos direitos reservados®

Share this post


Link to post
Guest Staype   
Guest Staype

Testado e aprovado!Funcionando mesmo!Valeu RAPPA!

Share this post


Link to post
Jovial    2
Jovial

Gostei cara mando bem

Share this post


Link to post
Jordan    0
Jordan

Muito bom Rappa!

Share this post


Link to post
684761    0
684761

rappa 100pre mandando bem xd

Share this post


Link to post
Hero    0
Hero

funciona com fluids tambem ?se funcionar, óótimo!!e rappa, se puder, libera o code de exori 4/5 da mana ;][]'s

Share this post


Link to post
GOD Azura    0
GOD Azura

n funfo aki... na hora de compila falo q essa linha do q vc pediu pra por no player.cpp:if(item->isFluidContainer() && fluidMap[item->getFluidType()] == itemType){ ta erradaaki o q q deu: "fluidMap" undeclared (first use this function)será q vcs poderiam me ajuda (uso CVS 0.6.0)

Share this post


Link to post
honux    0
honux

@upRapha, não fale o que não deve.O que você me diz caso o arquivo não contém o player como include, e somente o network message?Além disto poder trazer mais erros ao programa, dependendo do compilador pode criar um 'loop' na hora de compilar, assim adicionando o mesmo arquivo milhares de vezes, e nunca terminando de unificar o exe.Além do mais, porque diabos você vai tirar aglo que é global e adicionar em uma classe ( Player ) ?Po rapha, pelo amor de deus, vai ler um tutorial de C++ :/

Share this post


Link to post
GOD Azura    0
GOD Azura

aí gente, continuou dando o mesmo erro oOq q eu faço pelo amorrr de deusss...precisava disso...vlws

Share this post


Link to post
Guest Trakinaz   
Guest Trakinaz

da pra comprimir isso

Share this post


Link to post
joga    0
joga

usa MF por hotkey?

Share this post


Link to post
Guest Rappa Carnaúba   
Guest Rappa Carnaúba

Joga, funciona sim a mana fluid com hotkeys.

Share this post


Link to post
Hell Raiser    0
Hell Raiser

axei bem manero rappa...de volta pro forum ne ..v se dessa vea tu nao faz bestera em lek...cod bom e aprovado/hb

Share this post


Link to post
Guest alaorribeiro   
Guest alaorribeiro

meu ot é evolution 0.6.3

e eu procurei nao tem nenhum arquivo com nome "game.cpp"

 

o que eu faço??

minhas hotkey nao funciona!!!

Share this post


Link to post
Guest slanbr   
Guest slanbr

no meu da o mesmo erro do god azura... alguem ai pode ajudar nois?

Share this post


Link to post
Guest Rappa Carnaúba   
Guest Rappa Carnaúba

#Edit first post

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
  • Recently Browsing   0 members

    No registered users viewing this page.

×