您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ CheckMailBox函数代码示例

51自学网 2021-06-01 20:10:30
  C++
这篇教程C++ CheckMailBox函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中CheckMailBox函数的典型用法代码示例。如果您正苦于以下问题:C++ CheckMailBox函数的具体用法?C++ CheckMailBox怎么用?C++ CheckMailBox使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了CheckMailBox函数的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: CHECK_PACKET_SIZE

void WorldSession::HandleReturnToSender(WorldPacket & recv_data){    CHECK_PACKET_SIZE(recv_data,8+4);    ObjectGuid mailboxGuid;    uint32 mailId;    recv_data >> mailboxGuid;    recv_data >> mailId;    recv_data.read_skip<uint64>();                          // original sender GUID for return to, not used    if (!CheckMailBox(mailboxGuid))        return;    Player *pl = _player;    Mail *m = pl->GetMail(mailId);    if (!m || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL))    {        pl->SendMailResult(mailId, MAIL_RETURNED_TO_SENDER, MAIL_ERR_INTERNAL_ERROR);        return;    }    //we can return mail now    //so firstly delete the old one    RealmDataDatabase.BeginTransaction();    RealmDataDatabase.PExecute("DELETE FROM mail WHERE id = '%u'", mailId);                                                            // needed?    RealmDataDatabase.PExecute("DELETE FROM mail_items WHERE mail_id = '%u'", mailId);    RealmDataDatabase.CommitTransaction();    pl->RemoveMail(mailId);    // send back only to existing players and simple drop for other cases    if (m->messageType == MAIL_NORMAL && m->sender)    {        MailDraft draft;        if (m->mailTemplateId)            draft.SetMailTemplate(m->mailTemplateId, false);// items already included        else            draft.SetSubjectAndBodyId(m->subject, m->itemTextId);        if(m->HasItems())        {            for(MailItemInfoVec::iterator itr = m->items.begin(); itr != m->items.end(); ++itr)            {                if(Item *item = pl->GetMItem(itr->item_guid))                    draft.AddItem(item);                else                {                    //WTF?                }                pl->RemoveMItem(itr->item_guid);            }        }        draft.SetMoney(m->money).SendReturnToSender(GetAccountId(), m->receiverGuid, ObjectGuid(HIGHGUID_PLAYER, m->sender));    }    delete m;                                               //we can deallocate old mail    pl->SendMailResult(mailId, MAIL_RETURNED_TO_SENDER, MAIL_OK);}
开发者ID:Xadras,项目名称:looking4group-core,代码行数:60,


示例2: HandleMailMarkAsRead

/** * Handles the Packet sent by the client when reading a mail. * * This method is called when a client reads a mail that was previously unread. * It will add the MAIL_CHECK_MASK_READ flag to the mail being read. * * @see MailCheckMask * * @param recv_data the packet containing information about the mail the player read. * */void WorldSession::HandleMailMarkAsRead(WorldPacket & recv_data){    ObjectGuid mailboxGuid;    uint32 mailId;    recv_data >> mailboxGuid;    recv_data >> mailId;    if (!CheckMailBox(mailboxGuid))        return;    MasterPlayer *pl = GetMasterPlayer();    ASSERT(pl);    if (Mail *m = pl->GetMail(mailId))    {        if (m->state == MAIL_STATE_DELETED)        {            ProcessAnticheatAction("MailCheck", "Attempt to mark deleted mail as read", CHEAT_ACTION_LOG);            return;        }        pl->DecreaseUnreadMailsCount();        m->checked = m->checked | MAIL_CHECK_MASK_READ;        pl->MarkMailsUpdated();        m->state = MAIL_STATE_CHANGED;    }}
开发者ID:Maduse,项目名称:server,代码行数:37,


示例3: HandleMailCreateTextItem

/** * Handles the packet sent by the client when he copies the body a mail to his inventory. * * When a player copies the body of a mail to his inventory this method is called. It will create * a new item with the text of the mail and store it in the players inventory (if possible). * */void WorldSession::HandleMailCreateTextItem(WorldPacket & recv_data){    ObjectGuid mailboxGuid;    uint32 mailId;    recv_data >> mailboxGuid;    recv_data >> mailId;    recv_data.read_skip<uint32>();                          // mailTemplateId, non need, Mail store own 100% correct value anyway    if (!CheckMailBox(mailboxGuid))        return;    ForwardPacketToMaster();    MasterPlayer* pl = GetMasterPlayer();    ASSERT(pl);    Player* loadedPlayer = _player;    Mail* m = pl->GetMail(mailId);    if (!m || (!m->itemTextId && !m->mailTemplateId) || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL) || m->checked & MAIL_CHECK_MASK_COPIED)    {        pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_INTERNAL_ERROR);        return;    }    uint32 itemTextId = m->itemTextId;    Item *bodyItem = new Item;                              // This is not bag and then can be used new Item.    if (!bodyItem->Create(sObjectMgr.GenerateItemLowGuid(), MAIL_BODY_ITEM_TEMPLATE, pl->GetObjectGuid()))    {        delete bodyItem;        return;    }    bodyItem->SetUInt32Value(ITEM_FIELD_ITEM_TEXT_ID, itemTextId);    bodyItem->SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid(HIGHGUID_PLAYER, m->sender));    DETAIL_LOG("HandleMailCreateTextItem mailid=%u", mailId);    ItemPosCountVec dest;    uint8 msg = _player->CanStoreItem(NULL_BAG, NULL_SLOT, dest, bodyItem, false);    if (msg == EQUIP_ERR_OK)    {        m->checked = m->checked | MAIL_CHECK_MASK_COPIED;        m->state = MAIL_STATE_CHANGED;        pl->MarkMailsUpdated();        loadedPlayer->StoreItem(dest, bodyItem, true);        pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_OK);    }    else    {        pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_EQUIP_ERROR, msg);        delete bodyItem;    }}
开发者ID:Maduse,项目名称:server,代码行数:62,


示例4: HandleMailMarkAsRead

/** * Handles the Packet sent by the client when reading a mail. * * This method is called when a client reads a mail that was previously unread. * It will add the MAIL_CHECK_MASK_READ flag to the mail being read. * * @see MailCheckMask * * @param recv_data the packet containing information about the mail the player read. * */void WorldSession::HandleMailMarkAsRead(WorldPacket& recv_data){    ObjectGuid mailboxGuid;    uint32 mailId;    recv_data >> mailboxGuid;    recv_data >> mailId;    if (!CheckMailBox(mailboxGuid))        return;    Player* pl = _player;    if (Mail* m = pl->GetMail(mailId))    {        if (pl->unReadMails)            --pl->unReadMails;        m->checked = m->checked | MAIL_CHECK_MASK_READ;        pl->m_mailsUpdated = true;        m->state = MAIL_STATE_CHANGED;    }}
开发者ID:Lillecarl,项目名称:mangos-classic,代码行数:32,


示例5: HandleMailTakeMoney

/** * Handles the packet sent by the client when taking money from the mail. */void WorldSession::HandleMailTakeMoney(WorldPacket & recv_data){    ObjectGuid mailboxGuid;    uint32 mailId;    recv_data >> mailboxGuid;    recv_data >> mailId;    if (!CheckMailBox(mailboxGuid))        return;    ForwardPacketToMaster();    MasterPlayer* pl = GetMasterPlayer();    Player* loadedPlayer = GetPlayer();    ASSERT(pl);    Mail* m = pl->GetMail(mailId);    if (!m || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL))    {        pl->SendMailResult(mailId, MAIL_MONEY_TAKEN, MAIL_ERR_INTERNAL_ERROR);        return;    }    pl->SendMailResult(mailId, MAIL_MONEY_TAKEN, MAIL_OK);    loadedPlayer->LogModifyMoney(m->money, "Mail", ObjectGuid(HIGHGUID_PLAYER, m->sender));    m->money = 0;    m->state = MAIL_STATE_CHANGED;    pl->MarkMailsUpdated();    // save money and mail to prevent cheating    CharacterDatabase.BeginTransaction();    loadedPlayer->SaveGoldToDB();    pl->SaveMails();    CharacterDatabase.CommitTransaction();}
开发者ID:Maduse,项目名称:server,代码行数:39,


示例6: HandleMailTakeItem

/** * Handles the packet sent by the client when taking an item from the mail. */void WorldSession::HandleMailTakeItem(WorldPacket& recv_data){    ObjectGuid mailboxGuid;    uint32 mailId;    recv_data >> mailboxGuid;    recv_data >> mailId;    if (!CheckMailBox(mailboxGuid))        return;    Player* pl = _player;    Mail* m = pl->GetMail(mailId);    if (!m || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL))    {        pl->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_INTERNAL_ERROR);        return;    }    // prevent cheating with skip client money check    if (pl->GetMoney() < m->COD)    {        pl->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_NOT_ENOUGH_MONEY);        return;    }    uint32 itemId = m->items[0].item_template;    uint32 itemGuid = m->items[0].item_guid;    Item* it = pl->GetMItem(itemGuid);    ItemPosCountVec dest;    InventoryResult msg = _player->CanStoreItem(NULL_BAG, NULL_SLOT, dest, it, false);    if (msg == EQUIP_ERR_OK)    {        m->RemoveItem(itemGuid);        m->removedItems.push_back(itemGuid);        if (m->COD > 0)                                     // if there is COD, take COD money from player and send them to sender by mail        {            ObjectGuid sender_guid = ObjectGuid(HIGHGUID_PLAYER, m->sender);            Player* sender = sObjectMgr.GetPlayer(sender_guid);            uint32 sender_accId = 0;            if (GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_BOOL_GM_LOG_TRADE))            {                std::string sender_name;                if (sender)                {                    sender_accId = sender->GetSession()->GetAccountId();                    sender_name = sender->GetName();                }                else if (sender_guid)                {                    // can be calculated early                    sender_accId = sObjectMgr.GetPlayerAccountIdByGUID(sender_guid);                    if (!sObjectMgr.GetPlayerNameByGUID(sender_guid, sender_name))                        sender_name = sObjectMgr.GetMangosStringForDBCLocale(LANG_UNKNOWN);                }                sLog.outCommand(GetAccountId(), "GM %s (Account: %u) receive mail item: %s (Entry: %u Count: %u) and send COD money: %u to player: %s (Account: %u)",                                GetPlayerName(), GetAccountId(), it->GetProto()->Name1, it->GetEntry(), it->GetCount(), m->COD, sender_name.c_str(), sender_accId);            }            else if (!sender)                sender_accId = sObjectMgr.GetPlayerAccountIdByGUID(sender_guid);            // check player existence            if (sender || sender_accId)            {                MailDraft(m->subject)                .SetMoney(m->COD)                .SendMailTo(MailReceiver(sender, sender_guid), _player, MAIL_CHECK_MASK_COD_PAYMENT);            }            // pl->ModifyMoney(-int32(m->COD));        }        m->COD = 0;        m->state = MAIL_STATE_CHANGED;        pl->m_mailsUpdated = true;        pl->RemoveMItem(it->GetGUIDLow());        uint32 count = it->GetCount();                      // save counts before store and possible merge with deleting        pl->MoveItemToInventory(dest, it, true);        CharacterDatabase.BeginTransaction();        pl->SaveInventoryAndGoldToDB();        pl->_SaveMail();        CharacterDatabase.CommitTransaction();        pl->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_OK, 0, itemId, count);    }    else        pl->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_EQUIP_ERROR, msg);}
开发者ID:Lillecarl,项目名称:mangos-classic,代码行数:98,


示例7: HandleMailCreateTextItem

/** * Handles the packet sent by the client when he copies the body a mail to his inventory. * * When a player copies the body of a mail to his inventory this method is called. It will create * a new item with the text of the mail and store it in the players inventory (if possible). * */void WorldSession::HandleMailCreateTextItem(WorldPacket& recv_data){    ObjectGuid mailboxGuid;    uint32 mailId;    recv_data >> mailboxGuid;    recv_data >> mailId;    if (!CheckMailBox(mailboxGuid))        return;    Player* pl = _player;    Mail* m = pl->GetMail(mailId);    if (!m || (m->body.empty() && !m->mailTemplateId) || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL))    {        pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_INTERNAL_ERROR);        return;    }    Item* bodyItem = new Item;                              // This is not bag and then can be used new Item.    if (!bodyItem->Create(sObjectMgr.GenerateItemLowGuid(), MAIL_BODY_ITEM_TEMPLATE, pl))    {        delete bodyItem;        return;    }    // in mail template case we need create new item text    if (m->mailTemplateId)    {        MailTemplateEntry const* mailTemplateEntry = sMailTemplateStore.LookupEntry(m->mailTemplateId);        if (!mailTemplateEntry)        {            pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_INTERNAL_ERROR);            return;        }        bodyItem->SetText(mailTemplateEntry->content[GetSessionDbcLocale()]);    }    else        bodyItem->SetText(m->body);    bodyItem->SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid(HIGHGUID_PLAYER, m->sender));    bodyItem->SetFlag(ITEM_FIELD_FLAGS, ITEM_DYNFLAG_READABLE | ITEM_DYNFLAG_UNK15 | ITEM_DYNFLAG_UNK16);    DETAIL_LOG("HandleMailCreateTextItem mailid=%u", mailId);    ItemPosCountVec dest;    InventoryResult msg = _player->CanStoreItem(NULL_BAG, NULL_SLOT, dest, bodyItem, false);    if (msg == EQUIP_ERR_OK)    {        m->checked = m->checked | MAIL_CHECK_MASK_COPIED;        m->state = MAIL_STATE_CHANGED;        pl->m_mailsUpdated = true;        pl->StoreItem(dest, bodyItem, true);        pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_OK);    }    else    {        pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_EQUIP_ERROR, msg);        delete bodyItem;    }}
开发者ID:Sar777,项目名称:mangos3,代码行数:72,


示例8: HandleGetMailList

/** * Handles the packet sent by the client when requesting the current mail list. * It will send a list of all available mails in the players mailbox to the client. */void WorldSession::HandleGetMailList(WorldPacket& recv_data){    ObjectGuid mailboxGuid;    recv_data >> mailboxGuid;    if (!CheckMailBox(mailboxGuid))        return;    // client can't work with packets > max int16 value    const uint32 maxPacketSize = 32767;    uint32 mailsCount = 0;                                  // send to client mails amount    uint32 realCount = 0;                                   // real mails amount    WorldPacket data(SMSG_MAIL_LIST_RESULT, 200);           // guess size    data << uint32(0);                                      // real mail's count    data << uint8(0);                                       // mail's count    time_t cur_time = time(NULL);    for (PlayerMails::iterator itr = _player->GetMailBegin(); itr != _player->GetMailEnd(); ++itr)    {        // packet send mail count as uint8, prevent overflow        if (mailsCount >= 254)        {            realCount += 1;            continue;        }        // skip deleted or not delivered (deliver delay not expired) mails        if ((*itr)->state == MAIL_STATE_DELETED || cur_time < (*itr)->deliver_time)            continue;        uint8 item_count = (*itr)->items.size();            // max count is MAX_MAIL_ITEMS (12)        size_t next_mail_size = 2 + 4 + 1 + ((*itr)->messageType == MAIL_NORMAL ? 8 : 4) + 4 * 8 + ((*itr)->subject.size() + 1) + ((*itr)->body.size() + 1) + 1 + item_count * (1 + 4 + 4 + 7 * 3 * 4 + 4 + 4 + 4 + 4 + 4 + 4 + 1);        if (data.wpos() + next_mail_size > maxPacketSize)        {            realCount += 1;            continue;        }        data << uint16(next_mail_size);                     // Message size        data << uint32((*itr)->messageID);                  // Message ID        data << uint8((*itr)->messageType);                 // Message Type        switch ((*itr)->messageType)        {            case MAIL_NORMAL:                               // sender guid                data << ObjectGuid(HIGHGUID_PLAYER, (*itr)->sender);                break;            case MAIL_CREATURE:            case MAIL_GAMEOBJECT:            case MAIL_AUCTION:                data << uint32((*itr)->sender);             // creature/gameobject entry, auction id                break;            case MAIL_ITEM:                                 // item entry (?) sender = "Unknown", NYI                data << uint32(0);                          // item entry                break;        }        data << uint64((*itr)->COD);                        // COD        data << uint32(0);                                  // unknown, probably changed in 3.3.3        data << uint32((*itr)->stationery);                 // stationery (Stationery.dbc)        data << uint64((*itr)->money);                      // copper        data << uint32((*itr)->checked);                    // flags        data << float(float((*itr)->expire_time - time(NULL)) / float(DAY));// Time        data << uint32((*itr)->mailTemplateId);             // mail template (MailTemplate.dbc)        data << (*itr)->subject;                            // Subject string - once 00, when mail type = 3, max 256        data << (*itr)->body;                               // message? max 8000        data << uint8(item_count);                          // client limit is 0x10        for (uint8 i = 0; i < item_count; ++i)        {            Item* item = _player->GetMItem((*itr)->items[i].item_guid);            // item index (0-6?)            data << uint8(i);            // item guid low?            data << uint32(item ? item->GetGUIDLow() : 0);            // entry            data << uint32(item ? item->GetEntry() : 0);            for (uint8 j = 0; j < MAX_INSPECTED_ENCHANTMENT_SLOT; ++j)            {                // unsure                data << uint32(item ? item->GetEnchantmentCharges((EnchantmentSlot)j) : 0);                // unsure                data << uint32(item ? item->GetEnchantmentDuration((EnchantmentSlot)j) : 0);                // unsure                data << uint32(item ? item->GetEnchantmentId((EnchantmentSlot)j) : 0);            }            // can be negative            data << uint32(item ? item->GetItemRandomPropertyId() : 0);            // unk            data << uint32(item ? item->GetItemSuffixFactor() : 0);            // stack count//.........这里部分代码省略.........
开发者ID:Sar777,项目名称:mangos3,代码行数:101,


示例9: GetPlayer

/** * Handles the Packet sent by the client when sending a mail. * * This methods takes the packet sent by the client and performs the following actions: * - Checks whether the mail is valid: i.e. can he send the selected items, *   does he have enough money, etc. * - Creates a MailDraft and adds the needed items, money, cost data. * - Sends the mail. * * Depending on the outcome of the checks performed the player will recieve a different * MailResponseResult. * * @see MailResponseResult * @see SendMailResult() * * @param recv_data the WorldPacket containing the data sent by the client. */void WorldSession::HandleSendMail(WorldPacket& recv_data){    sLog.outError("WORLD: CMSG_SEND_MAIL");    ObjectGuid mailboxGuid;    uint64 money, COD;    std::string receiver, subject, body;    uint8 receiverLen, subjectLen, bodyLen;    uint32 unk1, unk2;    recv_data >> unk1;                                      // stationery?    recv_data >> unk2;                                      // 0x00000000    recv_data >> money >> COD;                              // money and cod    bodyLen = recv_data.ReadBits(12);    subjectLen = recv_data.ReadBits(9);    uint8 items_count = recv_data.ReadBits(5);              // attached items count    if (items_count > MAX_MAIL_ITEMS)                       // client limit    {        GetPlayer()->SendMailResult(0, MAIL_SEND, MAIL_ERR_TOO_MANY_ATTACHMENTS);        recv_data.rfinish();                                // set to end to avoid warnings spam        return;    }    recv_data.ReadGuidMask<0>(mailboxGuid);    ObjectGuid itemGuids[MAX_MAIL_ITEMS];    for (uint8 i = 0; i < items_count; ++i)        recv_data.ReadGuidMask<2, 6, 3, 7, 1, 0, 4, 5>(itemGuids[i]);    recv_data.ReadGuidMask<3, 4>(mailboxGuid);    receiverLen = recv_data.ReadBits(7);    recv_data.ReadGuidMask<2, 6, 1, 7, 5>(mailboxGuid);    recv_data.ReadGuidBytes<4>(mailboxGuid);    for (uint8 i = 0; i < items_count; ++i)    {        recv_data.ReadGuidBytes<6, 1, 7, 2>(itemGuids[i]);        recv_data.read_skip<uint8>();                       // item slot in mail, not used        recv_data.ReadGuidBytes<3, 0, 4, 5>(itemGuids[i]);    }    recv_data.ReadGuidBytes<7, 3, 6, 5>(mailboxGuid);    subject = recv_data.ReadString(subjectLen);    receiver = recv_data.ReadString(receiverLen);    recv_data.ReadGuidBytes<2, 0>(mailboxGuid);    body = recv_data.ReadString(bodyLen);    recv_data.ReadGuidBytes<1>(mailboxGuid);    DEBUG_LOG("WORLD: CMSG_SEND_MAIL receiver '%s' subject '%s' body '%s' mailbox " UI64FMTD " money " UI64FMTD " COD " UI64FMTD " unkt1 %u unk2 %u",        receiver.c_str(), subject.c_str(), body.c_str(), mailboxGuid.GetRawValue(), money, COD, unk1, unk2);    // packet read complete, now do check    if (!CheckMailBox(mailboxGuid))        return;    if (receiver.empty())        return;    Player* pl = _player;    ObjectGuid rc;    if (normalizePlayerName(receiver))        rc = sAccountMgr.GetPlayerGuidByName(receiver);    if (!rc)    {        DEBUG_LOG("%s is sending mail to %s (GUID: nonexistent!) with subject %s and body %s includes %u items, " UI64FMTD " copper and " UI64FMTD " COD copper with unk1 = %u, unk2 = %u",                   pl->GetGuidStr().c_str(), receiver.c_str(), subject.c_str(), body.c_str(), items_count, money, COD, unk1, unk2);        pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_RECIPIENT_NOT_FOUND);        return;    }    DEBUG_LOG("%s is sending mail to %s with subject %s and body %s includes %u items, %u copper and %u COD copper with unk1 = %u, unk2 = %u",               pl->GetGuidStr().c_str(), rc.GetString().c_str(), subject.c_str(), body.c_str(), items_count, money, COD, unk1, unk2);//.........这里部分代码省略.........
开发者ID:Sar777,项目名称:mangos3,代码行数:101,


示例10: CHECK_PACKET_SIZE

void WorldSession::HandleMailCreateTextItem(WorldPacket & recv_data){    CHECK_PACKET_SIZE(recv_data,8+4);    ObjectGuid mailboxGuid;    uint32 mailId;    recv_data >> mailboxGuid;    recv_data >> mailId;    recv_data.read_skip<uint32>();                          // mailTemplateId, non need, Mail store own 100% correct value anyway    if (!CheckMailBox(mailboxGuid))        return;    Player *pl = _player;    Mail* m = pl->GetMail(mailId);    if (!m || (!m->itemTextId && !m->mailTemplateId) || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL))    {        pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_INTERNAL_ERROR);        return;    }    uint32 itemTextId = m->itemTextId;    // in mail template case we need create new item text    if(!itemTextId)    {        MailTemplateEntry const* mailTemplateEntry = sMailTemplateStore.LookupEntry(m->mailTemplateId);        if (!mailTemplateEntry)        {            pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_INTERNAL_ERROR);            return;        }        itemTextId = sObjectMgr.CreateItemText(mailTemplateEntry->content[GetSessionDbcLocale()]);    }    Item *bodyItem = new Item;                              // This is not bag and then can be used new Item.    if (!bodyItem->Create(sObjectMgr.GenerateLowGuid(HIGHGUID_ITEM), MAIL_BODY_ITEM_TEMPLATE, pl))    {        delete bodyItem;        return;    }    bodyItem->SetUInt32Value(ITEM_FIELD_ITEM_TEXT_ID , itemTextId);    bodyItem->SetUInt32Value(ITEM_FIELD_CREATOR, m->sender);    sLog.outDetail("HandleMailCreateTextItem mailid=%u",mailId);    ItemPosCountVec dest;    uint8 msg = _player->CanStoreItem(NULL_BAG, NULL_SLOT, dest, bodyItem, false);    if (msg == EQUIP_ERR_OK)    {        m->checked = m->checked | MAIL_CHECK_MASK_COPIED;        m->state = MAIL_STATE_CHANGED;        pl->m_mailsUpdated = true;        pl->StoreItem(dest, bodyItem, true);        pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_OK);    }    else    {        pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_EQUIP_ERROR, msg);        delete bodyItem;    }}
开发者ID:Blumfield,项目名称:ptc2,代码行数:67,


示例11: HandleSendMail

/** * Handles the Packet sent by the client when sending a mail. * * This methods takes the packet sent by the client and performs the following actions: * - Checks whether the mail is valid: i.e. can he send the selected items, *   does he have enough money, etc. * - Creates a MailDraft and adds the needed items, money, cost data. * - Sends the mail. * * Depending on the outcome of the checks performed the player will recieve a different * MailResponseResult. * * @see MailResponseResult * @see SendMailResult() * * @param recv_data the WorldPacket containing the data sent by the client. */void WorldSession::HandleSendMail(WorldPacket & recv_data){    ObjectGuid mailboxGuid;    uint64 unk3;    uint32 unk1, unk2;    uint8 unk4;    recv_data >> mailboxGuid;    if (!CheckMailBox(mailboxGuid))        return;    ForwardPacketToMaster();    WorldSession::AsyncMailSendRequest* req = new WorldSession::AsyncMailSendRequest();    req->accountId = GetAccountId();    req->senderGuid = GetMasterPlayer()->GetObjectGuid();    recv_data >> req->receiverName;    recv_data >> req->subject;    recv_data >> req->body;    recv_data >> unk1;                                      // stationery?    recv_data >> unk2;                                      // 0x00000000    recv_data >> req->itemGuid;    recv_data >> req->money >> req->COD;                              // money and cod    recv_data >> unk3;                                      // const 0    recv_data >> unk4;                                      // const 0    // packet read complete, now do check    if (req->subject.size() > 64)    {        delete req;        return;    }    if (req->body.size() > 500)    {        delete req;        return;    }    if (req->COD && sWorld.getConfig(CONFIG_UINT32_COD_FORCE_TAG_MAX_LEVEL) &&        sWorld.getConfig(CONFIG_UINT32_COD_FORCE_TAG_MAX_LEVEL) > GetAccountMaxLevel())        req->subject = "(COD) " + req->subject;    // Do not allow GMs to send money / items    if (!sWorld.getConfig(CONFIG_BOOL_GM_ALLOW_TRADES) && GetSecurity() > SEC_PLAYER)    {        if (!req->itemGuid.IsEmpty() || req->money)        {            delete req;            return;        }    }    if (req->receiverName.empty())    {        delete req;        return;    }    MasterPlayer* pl = GetMasterPlayer();    if (normalizePlayerName(req->receiverName))        req->receiver = sObjectMgr.GetPlayerGuidByName(req->receiverName);    if (!req->receiver)    {        DETAIL_LOG("%s is sending mail to %s (GUID: nonexistent!) with subject %s and body %s includes %u items, %u copper and %u COD copper with unk1 = %u, unk2 = %u",                   pl->GetGuidStr().c_str(), req->receiverName.c_str(), req->subject.c_str(), req->body.c_str(), req->itemGuid ? 1 : 0, req->money, req->COD, unk1, unk2);        pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_RECIPIENT_NOT_FOUND);        delete req;        return;    }    DETAIL_LOG("%s is sending mail to %s with subject %s and body %s includes %u items, %u copper and %u COD copper with unk1 = %u, unk2 = %u",               pl->GetGuidStr().c_str(), req->receiverName.c_str(), req->subject.c_str(), req->body.c_str(), req->itemGuid ? 1 : 0, req->money, req->COD, unk1, unk2);    if (pl->GetObjectGuid() == req->receiver)    {        pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANNOT_SEND_TO_SELF);//.........这里部分代码省略.........
开发者ID:Maduse,项目名称:server,代码行数:101,


示例12: HandleGetMailList

/** * Handles the packet sent by the client when requesting the current mail list. * It will send a list of all available mails in the players mailbox to the client. */void WorldSession::HandleGetMailList(WorldPacket& recv_data){    ObjectGuid mailboxGuid;    recv_data >> mailboxGuid;    if (!CheckMailBox(mailboxGuid))        return;    // client can't work with packets > max int16 value    const uint32 maxPacketSize = 32767;    uint32 mailsCount = 0;                                  // send to client mails amount    WorldPacket data(SMSG_MAIL_LIST_RESULT, (200));         // guess size    data << uint8(0);                                       // mail's count    time_t cur_time = time(NULL);    for (PlayerMails::iterator itr = _player->GetMailBegin(); itr != _player->GetMailEnd(); ++itr)    {        // packet send mail count as uint8, prevent overflow        if (mailsCount >= 254)            break;        // skip deleted or not delivered (deliver delay not expired) mails        if ((*itr)->state == MAIL_STATE_DELETED || cur_time < (*itr)->deliver_time)            continue;        /*[-ZERO] TODO recheck this        size_t next_mail_size = 4+1+8+((*itr)->subject.size()+1)+4*7+1+item_count*(1+4+4+6*3*4+4+4+1+4+4+4);        if(data.wpos()+next_mail_size > maxPacketSize)            break;        */        data << uint32((*itr)->messageID);                  // Message ID        data << uint8((*itr)->messageType);                 // Message Type        switch ((*itr)->messageType)        {            case MAIL_NORMAL:                               // sender guid                data << ObjectGuid(HIGHGUID_PLAYER, (*itr)->sender);                break;            case MAIL_CREATURE:            case MAIL_GAMEOBJECT:            case MAIL_AUCTION:                data << (uint32)(*itr)->sender;             // creature/gameobject entry, auction id                break;            case MAIL_ITEM:                                 // item entry (?) sender = "Unknown", NYI                break;        }        data << (*itr)->subject;                            // Subject string - once 00, when mail type = 3        data << uint32((*itr)->itemTextId);                 // sure about this        data << uint32(0);                                  // unknown        data << uint32((*itr)->stationery);                 // stationery (Stationery.dbc)        // 1.12.1 can have only single item        Item* item = (*itr)->items.size() > 0 ? _player->GetMItem((*itr)->items[0].item_guid) : NULL;        data << uint32(item ? item->GetEntry() : 0);        // entry        // permanent enchantment        data << uint32(item ? item->GetEnchantmentId((EnchantmentSlot)PERM_ENCHANTMENT_SLOT) : 0);        // can be negative        data << uint32(item ? item->GetItemRandomPropertyId() : 0);        // unk        data << uint32(item ? item->GetItemSuffixFactor() : 0);        data << uint8(item ? item->GetCount() : 0);         // stack count        data << uint32(item ? item->GetSpellCharges() : 0); // charges        // durability        data << uint32(item ? item->GetUInt32Value(ITEM_FIELD_MAXDURABILITY) : 0);        // durability        data << uint32(item ? item->GetUInt32Value(ITEM_FIELD_DURABILITY) : 0);        data << uint32((*itr)->money);                      // copper        data << uint32((*itr)->COD);                        // Cash on delivery        data << uint32((*itr)->checked);                    // flags        data << float(float((*itr)->expire_time - time(NULL)) / float(DAY));// Time        data << uint32((*itr)->mailTemplateId);             // mail template (MailTemplate.dbc)        mailsCount += 1;    }    data.put<uint8>(0, mailsCount);                         // set real send mails to client    SendPacket(&data);    // recalculate m_nextMailDelivereTime and unReadMails    _player->UpdateNextMailTimeAndUnreads();}
开发者ID:Lillecarl,项目名称:mangos-classic,代码行数:90,


示例13: HandleSendMail

/** * Handles the Packet sent by the client when sending a mail. * * This methods takes the packet sent by the client and performs the following actions: * - Checks whether the mail is valid: i.e. can he send the selected items, *   does he have enough money, etc. * - Creates a MailDraft and adds the needed items, money, cost data. * - Sends the mail. * * Depending on the outcome of the checks performed the player will recieve a different * MailResponseResult. * * @see MailResponseResult * @see SendMailResult() * * @param recv_data the WorldPacket containing the data sent by the client. */void WorldSession::HandleSendMail(WorldPacket& recv_data){    ObjectGuid mailboxGuid;    ObjectGuid itemGuid;    uint64 unk3;    std::string receiver, subject, body;    uint32 unk1, unk2, money, COD;    uint8 unk4;    recv_data >> mailboxGuid;    recv_data >> receiver;    recv_data >> subject;    recv_data >> body;    recv_data >> unk1;                                      // stationery?    recv_data >> unk2;                                      // 0x00000000    recv_data >> itemGuid;    recv_data >> money >> COD;                              // money and cod    recv_data >> unk3;                                      // const 0    recv_data >> unk4;                                      // const 0    // packet read complete, now do check    if (!CheckMailBox(mailboxGuid))        return;    if (receiver.empty())        return;    Player* pl = _player;    ObjectGuid rc;    if (normalizePlayerName(receiver))        rc = sObjectMgr.GetPlayerGuidByName(receiver);    if (!rc)    {        DETAIL_LOG("%s is sending mail to %s (GUID: nonexistent!) with subject %s and body %s includes %u items, %u copper and %u COD copper with unk1 = %u, unk2 = %u",                   pl->GetGuidStr().c_str(), receiver.c_str(), subject.c_str(), body.c_str(), itemGuid ? 1 : 0, money, COD, unk1, unk2);        pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_RECIPIENT_NOT_FOUND);        return;    }    DETAIL_LOG("%s is sending mail to %s with subject %s and body %s includes %u items, %u copper and %u COD copper with unk1 = %u, unk2 = %u",               pl->GetGuidStr().c_str(), rc.GetString().c_str(), subject.c_str(), body.c_str(), itemGuid ? 1 : 0, money, COD, unk1, unk2);    if (pl->GetObjectGuid() == rc)    {        pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANNOT_SEND_TO_SELF);        return;    }    uint32 reqmoney = money + 30;    if (pl->GetMoney() < reqmoney)    {        pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_ENOUGH_MONEY);        return;    }    Player* receive = sObjectMgr.GetPlayer(rc);    Team rc_team;    uint8 mails_count = 0;                                  // do not allow to send to one player more than 100 mails    if (receive)    {        rc_team = receive->GetTeam();        mails_count = receive->GetMailSize();    }    else    {        rc_team = sObjectMgr.GetPlayerTeamByGUID(rc);        if (QueryResult* result = CharacterDatabase.PQuery("SELECT COUNT(*) FROM mail WHERE receiver = '%u'", rc.GetCounter()))        {            Field* fields = result->Fetch();            mails_count = fields[0].GetUInt32();            delete result;        }    }//.........这里部分代码省略.........
开发者ID:Lillecarl,项目名称:mangos-classic,代码行数:101,



注:本文中的CheckMailBox函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ CheckMenuItem函数代码示例
C++ CheckLhs函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。