• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

TFS 1.3 Get sender parcel

Code:
bool Mailbox::sendItem(Item* item) const
{
    std::string sender;
    std::string receiver;
    if (!getReceiver(item, receiver, sender)) {
        return false;
    }

    /**No need to continue if its still empty**/
    if (receiver.empty()) {
        return false;
    }

    Player* player = g_game.getPlayerByName(receiver);
    if (player) {
        if (g_game.internalMoveItem(item->getParent(), player->getInbox(), INDEX_WHEREEVER,
                                   item, item->getItemCount(), nullptr, FLAG_NOLIMIT) == RETURNVALUE_NOERROR) {
            g_game.transformItem(item, item->getID() + 1);
            player->onReceiveMail();
            return true;
        }
    } else {
        Player tmpPlayer(nullptr);
        if (!IOLoginData::loadPlayerByName(&tmpPlayer, receiver)) {
            return false;
        }

        if (g_game.internalMoveItem(item->getParent(), tmpPlayer.getInbox(), INDEX_WHEREEVER,
                                   item, item->getItemCount(), nullptr, FLAG_NOLIMIT) == RETURNVALUE_NOERROR) {
            g_game.transformItem(item, item->getID() + 1);
            IOLoginData::savePlayer(&tmpPlayer);
            return true;
        }
    }
    return false;
}

bool Mailbox::getReceiver(Item* item, std::string& receiver, std::string& sender) const
{
    const Container* container = item->getContainer();
    if (container) {
        for (Item* containerItem : container->getItemList()) {
            if (containerItem->getID() == ITEM_LABEL && getReceiver(containerItem, receiver, sender)) {
                return true;
            }
        }
        return false;
    }

    const std::string& text = item->getText();
    if (text.empty()) {
        return false;
    }

    sender = item->getWriter();
    receiver = getFirstLine(text);
    trimString(receiver);
    return true;
}
 
Back
Top