mój problem polega na tym, że jak jest postać wylogowana i w przypadku gdy jest usuwany jej domek bo nie płaciła czynszu to przedmioty nie dochodzą do depo (natomiast listy z ostrzeżeniami jak najbardziej dochodzą). Wszystko ładnie działa gdy postać jest zalogowana...
Sprawdziłem czy funkcja do przenoszenia przedmiotów jest czemuś winna, okazuje się, że działa poprawnie, gdy postać jest wylogowana i godem usunę jej domek /owner none to przedmioty dochodzą. Wydaje mi się, żę problem polega we funkcji, która jest odpowiedzialna za czynsz.
Czy może ktoś to poprawić? Z góry dziękuje.
Kod:
bool Houses::payHouses(bool mail)
{
uint32_t currentTime = std::time(NULL);
for(HouseMap::iterator it = houseMap.begin(); it != houseMap.end(); ++it){
House* house = it->second;
if(house->getHouseOwner() != "" && house->getPaidUntil() < currentTime &&
house->getRent() != 0){
std::string owner = house->getHouseOwner();
Town* town = Towns::getInstance().getTown(house->getTownId());
if(!town){
continue;
}
if(!IOPlayer::instance()->playerExists(owner)){
//player doesnt exist, remove it as house owner?
house->setHouseOwner("");
continue;
}
Player* player = g_game.getPlayerByName(owner);
if(!player){
player = new Player(owner, NULL);
if(!IOPlayer::instance()->loadPlayer(player, owner)){
delete player;
continue;
}
}
Depot* depot = player->getDepot(town->getTownID(), true);
if(depot){
//get money from depot
if(g_game.removeMoney(depot, house->getRent(), FLAG_NOLIMIT)){
uint32_t paidUntil = currentTime;
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;
}
house->setPaidUntil(paidUntil);
}
else{
if(house->getPayRentWarnings() >= 7){
house->setHouseOwner("");
}
else{
int 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 = "yearly";
break;
}
std::stringstream warningText;
warningText << "Warning! \n" <<
"The " << period << " rent of " << house->getRent() << " gold for your house \""
<< house->getName() << "\" is payable. Have it available within " << daysLeft <<
" days, or you will lose this house.";
if(mail == true){
letter->setText(warningText.str());
g_game.internalAddItem(depot, letter, INDEX_WHEREEVER, FLAG_NOLIMIT);
house->setPayRentWarnings(house->getPayRentWarnings() + 1);
}
else{
delete letter;
}
}
}
}
if(!player->isOnline()){
player->lastlogin = player->lastLoginSaved;
IOPlayer::instance()->savePlayer(player);
delete player;
}
}
}
return true;
}
Zakładki