• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    [Problema] cobrar renta de casas

    Compartir:

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    1Thắc mắc [Problema] cobrar renta de casas el Dom Ago 18, 2019 1:32 pm

    darksenki

    darksenki
    Miembro
    Miembro
    hola buenas aver si alguien me da un indicio, de arreglar este problema... cuando se cobran la renta de la casa no me descuenta el dinero del depot o banco..

    pero si no tengo dinero ya sea en el banco o depot me quita la casa..

    este alguien por hay que sepa donde estaria el problema en source fts 0.4 y tfs 1.0..

    Ver perfil de usuario

    2Thắc mắc Re: [Problema] cobrar renta de casas el Dom Ago 18, 2019 3:58 pm

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    configmanager.cpp

    house.h

    Código:
    m_confNumber[HOUSE_PRICE] = getGlobalNumber("housePriceEachSquare", 1000);



    [Problema] cobrar renta de casas YNU5B25
    Ver perfil de usuario https://www.tibiaface.com

    3Thắc mắc Re: [Problema] cobrar renta de casas el Dom Ago 18, 2019 5:49 pm

    darksenki

    darksenki
    Miembro
    Miembro
    creo que erre en el mensaje anterior , lo tengo igual compilare de nuevo . si funciona lo cierro el tema

    Ver perfil de usuario

    4Thắc mắc problema continua maya el Mar Ago 20, 2019 1:13 pm

    darksenki

    darksenki
    Miembro
    Miembro
    no descuenta el dinero

    mi config.lua

    buyableAndSellableHouses = true
    houseNeedPremium = false
    bedsRequirePremium = false
    levelToBuyHouse = 50
    housesPerAccount = 4
    houseRentAsPrice = false
    housePriceAsRent = true
    housePriceEachSquare = 800
    houseSkipInitialRent = false
    houseRentPeriod = "weekly"
    houseCleanOld = 1 * 24 * 60 * 60
    guildHalls = true

    Ver perfil de usuario

    5Thắc mắc Re: [Problema] cobrar renta de casas el Mar Ago 20, 2019 4:25 pm

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    tendras que revisar house.cpp

    y ver si estaliena la tienes igual o si es aun ams antiguo


    Código:


    bool Houses::payHouses()
    {
       if(rentPeriod == RENTPERIOD_NEVER)
          return true;

       uint32_t currentTime = time(NULL);
       for(HouseMap::iterator it = houseMap.begin(); it != houseMap.end(); ++it)
       {
          House* house = it->second;
          if(house->getHouseOwner() != 0)
          {
             uint32_t ownerid = house->getHouseOwner();
             Town* town = Towns::getInstance().getTown(house->getTownId());
             if(!town)
             {
                #ifdef __DEBUG_HOUSES__
                std::cout << "Warning: [Houses::payHouses] town = NULL, townid = " <<
                   house->getTownId() << ", houseid = " << house->getHouseId() << std::endl;
                #endif
                continue;
             }

             std::string name;
             if(!IOLoginData::getInstance()->getNameByGuid(ownerid, name))
             {
                //player doesnt exist, remove it as house owner?
                house->setHouseOwner(0);
                continue;
             }

             Player* player = g_game.getPlayerByName(name);
             if(!player)
             {
                player = new Player(name, NULL);
                if(!IOLoginData::getInstance()->loadPlayer(player, name))
                {
                   #ifdef __DEBUG__
                   std::cout << "Failure: [Houses::payHouses], can not load player: " << name << std::endl;
                   #endif
                   delete player;
                   continue;
                }
             }

             int32_t housePrice = 0;
             for(HouseTileList::iterator it = house->getHouseTileBegin(), end = house->getHouseTileEnd(); it != end; ++it)
                housePrice += g_config.getNumber(ConfigManager::HOUSE_PRICE);

             bool paid = false;
             if(player->getBankBalance() >= house->getRent())
             {
                player->setBankBalance(player->getBankBalance() - house->getRent());
                paid = true;
             }

             if(paid)
             {
                time_t paidUntil = currentTime;
                switch(rentPeriod)
                {
                   case RENTPERIOD_DAILY:
                      paidUntil += 24 * 60 * 60;
                      break;
                   case RENTPERIOD_WEEKLY:
                      paidUntil += 24 * 60 * 60 * 7;
                      break;
                   case RENTPERIOD_MONTHLY:
                      paidUntil += 24 * 60 * 60 * 30;
                      break;
                   case RENTPERIOD_YEARLY:
                      paidUntil += 24 * 60 * 60 * 365;
                      break;
                   default:
                      break;
                }
                house->setPaidUntil(paidUntil);
             }
             else
             {
                if(house->getPayRentWarnings() < 7)
                {
                   int32_t daysLeft = 7 - house->getPayRentWarnings();

                   Item* letter = Item::CreateItem(ITEM_LETTER_STAMPED);
                   std::string period = "";

                   switch(rentPeriod)
                   {
                      case RENTPERIOD_DAILY:
                         period = "daily";
                         break;

                      case RENTPERIOD_WEEKLY:
                         period = "weekly";
                         break;

                      case RENTPERIOD_MONTHLY:
                         period = "monthly";
                         break;

                      case RENTPERIOD_YEARLY:
                         period = "annual";
                         break;

                      default:
                         break;
                   }

                   std::ostringstream ss;
                   ss << "Warning! \nThe " << period << " rent of " << house->getRent() << " gold for your house \"" << house->getName() << "\" is payable. Have it within " << daysLeft << " days or you will lose this house.";
                   letter->setText(ss.str());
                   g_game.internalAddItem(player->getInbox(), letter, INDEX_WHEREEVER, FLAG_NOLIMIT);
                   house->setPayRentWarnings(house->getPayRentWarnings() + 1);
                }
                else
                   house->setHouseOwner(0);
             }

             if(player->isOffline())
             {
                IOLoginData::getInstance()->savePlayer(player);
                delete player;
             }
          }
       }
       return true;
    }



    [Problema] cobrar renta de casas YNU5B25
    Ver perfil de usuario https://www.tibiaface.com

    6Thắc mắc a maya el Mar Ago 20, 2019 6:05 pm

    darksenki

    darksenki
    Miembro
    Miembro
    consulta eso que version es 4.0 o 1.0--

    Ver perfil de usuario

    7Thắc mắc Re: [Problema] cobrar renta de casas el Mar Ago 20, 2019 6:14 pm

    darksenki

    darksenki
    Miembro
    Miembro
    este es de la version tfs 0.4 --- 8.6

    Código:

    void Houses::payHouses()
    {
       uint64_t start = OTSYS_TIME();
       std::clog << "> Checking houses..." << std::endl;

       time_t currentTime = time(NULL);
       for(HouseMap::iterator it = houseMap.begin(); it != houseMap.end(); ++it)
          payHouse(it->second, currentTime, 0);

       std::clog << "Houses checked in " << (OTSYS_TIME() - start) / (1000.) << " seconds." << std::endl;
    }

    bool Houses::payRent(Player* player, House* house, uint32_t bid, time_t _time/* = 0*/)
    {
       if(rentPeriod == RENTPERIOD_NEVER || !house->getOwner() ||
          house->getPaidUntil() > _time || !house->getRent() ||
          player->hasCustomFlag(PlayerCustomFlag_IgnoreHouseRent))
          return true;

       Town* town = Towns::getInstance()->getTown(house->getTownId());
       if(!town)
          return false;

       bool paid = false;
       uint32_t amount = house->getRent() + bid;
       if(g_config.getBool(ConfigManager::BANK_SYSTEM) && player->balance >= amount)
       {
          player->balance -= amount;
          paid = true;
       }

       if(!paid)
          return false;

       if(!_time)
          _time = time(NULL);

       uint32_t paidUntil = _time;
       switch(rentPeriod)
       {
          case RENTPERIOD_DAILY:
             paidUntil += 86400;
             break;
          case RENTPERIOD_WEEKLY:
             paidUntil += 7 * 86400;
             break;
          case RENTPERIOD_MONTHLY:
             paidUntil += 30 * 86400;
             break;
          case RENTPERIOD_YEARLY:
             paidUntil += 365 * 86400;
             break;
          default:
             break;
       }

       house->setLastWarning(0);
       house->setRentWarnings(0);

       house->setPaidUntil(paidUntil);
       return true;
    }

    bool Houses::payHouse(House* house, time_t _time, uint32_t bid)
    {
       if(rentPeriod == RENTPERIOD_NEVER || !house->getOwner() ||
          house->getPaidUntil() > _time || !house->getRent())
          return true;

       Town* town = Towns::getInstance()->getTown(house->getTownId());
       if(!town)
          return false;

       uint32_t owner = house->getOwner();
       if(house->isGuild() && !IOGuild::getInstance()->swapGuildIdToOwner(owner))
       {
          house->setOwnerEx(0, true);
          return false;
       }

       std::string name;
       if(!IOLoginData::getInstance()->getNameByGuid(owner, name))
       {
          house->setOwnerEx(0, true);
          return false;
       }

       Player* player = g_game.getPlayerByNameEx(name);
       if(!player)
          return false;

       if(!player->isPremium() && g_config.getBool(ConfigManager::HOUSE_NEED_PREMIUM))
       {
          house->setOwnerEx(0, true);
          return false;
       }

       int32_t loginClean = g_config.getNumber(ConfigManager::HOUSE_CLEAN_OLD);
       if(loginClean && _time >= (player->getLastLogin() + loginClean))
       {
          house->setOwnerEx(0, true);
          return false;
       }

       bool paid = payRent(player, house, bid, _time), savePlayer = false;
       if(!paid && _time >= (house->getLastWarning() + 86400))
       {
          uint32_t warningsLimit = 7;
          switch(rentPeriod)
          {
             case RENTPERIOD_DAILY:
                warningsLimit = 1;
                break;
             case RENTPERIOD_WEEKLY:
                warningsLimit = 3;
                break;
             case RENTPERIOD_MONTHLY:
                warningsLimit = 7;
                break;
             case RENTPERIOD_YEARLY:
                warningsLimit = 14;
                break;
             default:
                break;
          }

          uint32_t warnings = house->getRentWarnings();
          if(warnings < warningsLimit)
          {
             Depot* depot = player->getDepot(town->getID(), true);
             Item* letter = Item::CreateItem(ITEM_LETTER_STAMPED);
             if(depot && letter)
             {
                std::string period;
                switch(rentPeriod)
                {
                   case RENTPERIOD_DAILY:
                      period = "diaria";
                      break;
                   case RENTPERIOD_WEEKLY:
                      period = "semanal";
                      break;
                   case RENTPERIOD_MONTHLY:
                      period = "mensual";
                      break;
                   case RENTPERIOD_YEARLY:
                      period = "anual";
                      break;
                   default:
                      break;
                }

                std::stringstream s;
                s << "Advertencia!\nLa renta " << period << " es de " << house->getRent() << " golds . por tu "
                << (house->isGuild() ? "casa" : "casa") << " "" << house->getName()
                << "" tiene que ser pagada dentro de " << (warningsLimit - warnings)
                << " dia o perderas tu " << (house->isGuild() ? "casa" : "casa") << ". \nPuede Tener dinero en el banco o depot de la ciudad donde esta ubicada su casa.";

                letter->setText(s.str().c_str());
                if(g_game.internalAddItem(NULL, depot, letter, INDEX_WHEREEVER, FLAG_NOLIMIT) != RET_NOERROR)
                   g_game.freeThing(letter);
                else
                   savePlayer = true;
             }

             house->setRentWarnings(++warnings);
             house->setLastWarning(_time);
          }
          else
             house->setOwnerEx(0, true);
       }

       if(player->isVirtual())
       {
          if(savePlayer)
             IOLoginData::getInstance()->savePlayer(player);

          delete player;
       }

       return paid;
    }

    Ver perfil de usuario

    8Thắc mắc Re: [Problema] cobrar renta de casas el Miér Ago 21, 2019 7:47 am

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    ya verifico que linea de house.xml contenga el precio de renta

    x escribió:
    house name="Rhyves Flats 14" houseid="1" entryx="167" entryy="361" entryz="6" rent="15000" townid="2" size="15"/>



    [Problema] cobrar renta de casas YNU5B25
    Ver perfil de usuario https://www.tibiaface.com

    Contenido patrocinado


    Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje (Página 1 de 1.)

    Permisos de este foro:
    No puedes responder a temas en este foro.

    Temas Recomendados×+

       

      BienvenidosTibiaFace es una comunidad de Open Tibia. Para participar debes estar registrado (click para Regístrate).