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

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

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

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

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

示例1: GetPlayer

//.........这里部分代码省略.........            return;        }        if (COD && item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD);            return;        }        if (item->IsNotEmptyBag())        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_DESTROY_NONEMPTY_BAG);            return;        }        items[i] = item;    }    // Check for spamming    if (!UpdateAntispamCount())    {        player->SendMailResult(0, MAIL_SEND, MAIL_ERR_INTERNAL_ERROR);        SendNotification(GetTrinityString(LANG_ANTISPAM_ERROR));        return;    }    // Check for special symbols    if (!checkMailText(subject) ||  !checkMailText(body))    {        player->SendMailResult(0, MAIL_SEND, MAIL_ERR_INTERNAL_ERROR);        return;    }    player->SendMailResult(0, MAIL_SEND, MAIL_OK);    player->ModifyMoney(-int64(reqmoney));    player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL, cost);    bool needItemDelay = false;    MailDraft draft(subject, body);    SQLTransaction trans = CharacterDatabase.BeginTransaction();	if (itemCount > 0 || money > 0)    {		if (itemCount > 0)        {			for (uint8 i = 0; i < itemCount; ++i)            {                Item* item = items[i];                if (!AccountMgr::IsPlayerAccount(GetSecurity()) && sWorld->getBoolConfig(CONFIG_GM_LOG_TRADE))                {                    sLog->outCommand(GetAccountId(), "", GetPlayer()->GetGUIDLow(), GetPlayer()->GetName(),                                    rc_account, "", 0, receiver.c_str(),                                    "GM %s (Account: %u) mail item: %s (Entry: %u Count: %u) to player: %s (Account: %u)",                                    GetPlayerName().c_str(), GetAccountId(), item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetCount(), receiver.c_str(), rc_account);                }                item->SetNotRefundable(GetPlayer()); // makes the item no longer refundable                player->MoveItemFromInventory(items[i]->GetBagSlot(), item->GetSlot(), true);                item->DeleteFromInventoryDB(trans);     // deletes item from character's inventory                item->SetOwnerGUID(rc);                item->SaveToDB(trans);                  // recursive and not have transaction guard into self, item not in inventory and can be save standalone                draft.AddItem(item);            }            // if item send to character at another account, then apply item delivery delay            needItemDelay = player->GetSession()->GetAccountId() != rc_account;        }        if (money > 0 && !AccountMgr::IsPlayerAccount(GetSecurity()) && sWorld->getBoolConfig(CONFIG_GM_LOG_TRADE))        {            //TODO: character guid            sLog->outCommand(GetAccountId(), "", GetPlayer()->GetGUIDLow(), GetPlayer()->GetName(),                            rc_account, "", 0, receiver.c_str(),                            "GM %s (Account: %u) mail money: %u to player: %s (Account: %u)",                            GetPlayerName().c_str(), GetAccountId(), money, receiver.c_str(), rc_account);        }    }    // Guild Mail    if (receive && receive->GetGuildId() && player->GetGuildId())        if (player->HasAura(83951) && (player->GetGuildId() == receive->GetGuildId()))            needItemDelay = false;    // If theres is an item, there is a one hour delivery delay if sent to another account's character.    uint32 deliver_delay = needItemDelay ? sWorld->getIntConfig(CONFIG_MAIL_DELIVERY_DELAY) : 0;    // will delete item or place to receiver mail list    draft        .AddMoney(money)        .AddCOD(COD)        .SendMailTo(trans, MailReceiver(receive, GUID_LOPART(rc)), MailSender(player), body.empty() ? MAIL_CHECK_MASK_COPIED : MAIL_CHECK_MASK_HAS_BODY, deliver_delay);    player->SaveInventoryAndGoldToDB(trans);    CharacterDatabase.CommitTransaction(trans);}
开发者ID:CATACLYSMDEV,项目名称:JadeCore-5.4.8-18291--dev-,代码行数:101,


示例2: GetPlayer

//.........这里部分代码省略.........        Item* item = player->GetItemByGuid(itemGUIDs[i]);        // prevent sending bag with items (cheat: can be placed in bag after adding equipped empty bag to mail)        if (!item)        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);            return;        }        if (!item->CanBeTraded(true))        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM);            return;        }        if (item->IsBoundAccountWide() && item->IsSoulBound() && player->GetSession()->GetAccountId() != rc_account)        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_ARTEFACTS_ONLY_FOR_OWN_CHARACTERS);            return;        }        if (item->GetTemplate()->Flags & ITEM_PROTO_FLAG_CONJURED || item->GetUInt32Value(ITEM_FIELD_DURATION))        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM);            return;        }        if (COD && item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD);            return;        }        if (item->IsNotEmptyBag())        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_CAN_ONLY_DO_WITH_EMPTY_BAGS);            return;        }        items[i] = item;    }    player->SendMailResult(0, MAIL_SEND, MAIL_OK);    player->ModifyMoney(-int32(reqmoney));    player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL, cost);    bool needItemDelay = false;    MailDraft draft(subject, body);    SQLTransaction trans = CharacterDatabase.BeginTransaction();    if (items_count > 0 || money > 0)    {        if (items_count > 0)        {            for (uint8 i = 0; i < items_count; ++i)            {                Item* item = items[i];                if (!AccountMgr::IsPlayerAccount(GetSecurity()) && sWorld->getBoolConfig(CONFIG_GM_LOG_TRADE))                {                    sLog->outCommand(GetAccountId(), "GM %s (Account: %u) mail item: %s (Entry: %u Count: %u) to player: %s (Account: %u)",                        GetPlayerName(), GetAccountId(), item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetCount(), receiver.c_str(), rc_account);                }                item->SetNotRefundable(GetPlayer()); // makes the item no longer refundable                player->MoveItemFromInventory(items[i]->GetBagSlot(), item->GetSlot(), true);                item->DeleteFromInventoryDB(trans);     // deletes item from character's inventory                item->SetOwnerGUID(rc);                item->SaveToDB(trans);                  // recursive and not have transaction guard into self, item not in inventory and can be save standalone                draft.AddItem(item);            }            // if item send to character at another account, then apply item delivery delay            needItemDelay = player->GetSession()->GetAccountId() != rc_account;        }        if (money > 0 && !AccountMgr::IsPlayerAccount(GetSecurity()) && sWorld->getBoolConfig(CONFIG_GM_LOG_TRADE))        {            sLog->outCommand(GetAccountId(), "GM %s (Account: %u) mail money: %u to player: %s (Account: %u)",                GetPlayerName(), GetAccountId(), money, receiver.c_str(), rc_account);        }    }    // If theres is an item, there is a one hour delivery delay if sent to another account's character.    uint32 deliver_delay = needItemDelay ? sWorld->getIntConfig(CONFIG_MAIL_DELIVERY_DELAY) : 0;    // will delete item or place to receiver mail list    draft        .AddMoney(money)        .AddCOD(COD)        .SendMailTo(trans, MailReceiver(receive, GUID_LOPART(rc)), MailSender(player), body.empty() ? MAIL_CHECK_MASK_COPIED : MAIL_CHECK_MASK_HAS_BODY, deliver_delay);    player->SaveInventoryAndGoldToDB(trans);    CharacterDatabase.CommitTransaction(trans);}
开发者ID:Neecro,项目名称:SkyFireEMU_rebase,代码行数:101,


示例3: DEBUG_LOG

void WorldSession::HandleLearnPreviewTalents(WorldPacket& recvPacket){    DEBUG_LOG("CMSG_LEARN_PREVIEW_TALENTS");    int32 tabPage;    uint32 talentsCount;    recvPacket >> tabPage;    // talent tree    // prevent cheating (selecting new tree with points already in another)    if (tabPage >= 0)   // -1 if player already has specialization    {        if (TalentTabEntry const* talentTabEntry = sTalentTabStore.LookupEntry(_player->GetPrimaryTalentTree(_player->GetActiveSpec())))        {            if (talentTabEntry->tabpage != tabPage)            {                recvPacket.rfinish();                sLog.outError("WorldSession::HandleLearnPreviewTalents: tabPage != talent tabPage for %s (account %u)", GetPlayerName(), GetAccountId());                return;            }        }    }    recvPacket >> talentsCount;    uint32 talentId, talentRank;    for(uint32 i = 0; i < talentsCount; ++i)    {        recvPacket >> talentId >> talentRank;        if (!_player->LearnTalent(talentId, talentRank))        {            recvPacket.rfinish();            sLog.outError("WorldSession::HandleLearnPreviewTalents: learn talent %u rank %u tab %u failed for %s (account %u)", talentId, talentRank, tabPage, GetPlayerName(), GetAccountId());            break;        }    }    _player->SendTalentsInfoData(false);}
开发者ID:Calixa,项目名称:murlocs_434,代码行数:40,


示例4: GetPlayer

//.........这里部分代码省略.........        }        if (item->IsBoundAccountWide() && item->IsSoulBound() && player->GetSession()->GetAccountId() != receiverAccountId)        {            if (!item->IsBattlenetAccountBound() || !player->GetSession()->GetBattlenetAccountId() || player->GetSession()->GetBattlenetAccountId() != receiverBnetAccountId)            {                player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_NOT_SAME_ACCOUNT);                return;            }        }        if (item->GetTemplate()->GetFlags() & ITEM_FLAG_CONJURED || item->GetUInt32Value(ITEM_FIELD_DURATION))        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM);            return;        }        if (packet.Info.Cod && item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED))        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD);            return;        }        if (item->IsNotEmptyBag())        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_DESTROY_NONEMPTY_BAG);            return;        }        items.push_back(item);    }    player->SendMailResult(0, MAIL_SEND, MAIL_OK);    player->ModifyMoney(-reqmoney);    player->UpdateCriteria(CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL, cost);    bool needItemDelay = false;    MailDraft draft(packet.Info.Subject, packet.Info.Body);    SQLTransaction trans = CharacterDatabase.BeginTransaction();    if (!packet.Info.Attachments.empty() || packet.Info.SendMoney > 0)    {        bool log = HasPermission(rbac::RBAC_PERM_LOG_GM_TRADE);        if (!packet.Info.Attachments.empty())        {            for (auto const& item : items)            {                if (log)                {                    sLog->outCommand(GetAccountId(), "GM %s (%s) (Account: %u) mail item: %s (Entry: %u Count: %u) "                        "to: %s (%s) (Account: %u)", GetPlayerName().c_str(), _player->GetGUID().ToString().c_str(), GetAccountId(),                        item->GetTemplate()->GetDefaultLocaleName(), item->GetEntry(), item->GetCount(),                        packet.Info.Target.c_str(), receiverGuid.ToString().c_str(), receiverAccountId);                }                item->SetNotRefundable(GetPlayer()); // makes the item no longer refundable                player->MoveItemFromInventory(item->GetBagSlot(), item->GetSlot(), true);                item->DeleteFromInventoryDB(trans);     // deletes item from character's inventory                item->SetOwnerGUID(receiverGuid);                item->SaveToDB(trans);                  // recursive and not have transaction guard into self, item not in inventory and can be save standalone                draft.AddItem(item);            }            // if item send to character at another account, then apply item delivery delay            needItemDelay = player->GetSession()->GetAccountId() != receiverAccountId;        }        if (log && packet.Info.SendMoney > 0)        {            sLog->outCommand(GetAccountId(), "GM %s (%s) (Account: %u) mail money: " SI64FMTD " to: %s (%s) (Account: %u)",                GetPlayerName().c_str(), _player->GetGUID().ToString().c_str(), GetAccountId(), packet.Info.SendMoney, packet.Info.Target.c_str(), receiverGuid.ToString().c_str(), receiverAccountId);        }    }    // If theres is an item, there is a one hour delivery delay if sent to another account's character.    uint32 deliver_delay = needItemDelay ? sWorld->getIntConfig(CONFIG_MAIL_DELIVERY_DELAY) : 0;    // Mail sent between guild members arrives instantly    if (Guild* guild = sGuildMgr->GetGuildById(player->GetGuildId()))        if (guild->IsMember(receiverGuid))            deliver_delay = 0;    // don't ask for COD if there are no items    if (packet.Info.Attachments.empty())        packet.Info.Cod = 0;    // will delete item or place to receiver mail list    draft        .AddMoney(packet.Info.SendMoney)        .AddCOD(packet.Info.Cod)        .SendMailTo(trans, MailReceiver(receiver, receiverGuid.GetCounter()), MailSender(player), packet.Info.Body.empty() ? MAIL_CHECK_MASK_COPIED : MAIL_CHECK_MASK_HAS_BODY, deliver_delay);    player->SaveInventoryAndGoldToDB(trans);    CharacterDatabase.CommitTransaction(trans);}
开发者ID:Regigicas,项目名称:TrinityCore,代码行数:101,


示例5: GetPlayer

//.........这里部分代码省略.........        Item* item = pl->GetItemByGuid(itemGUIDs[i]);        // prevent sending bag with items (cheat: can be placed in bag after adding equipped empty bag to mail)        if (!item)        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);            return;        }        if (!item->CanBeTraded())        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM);            return;        }        if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_CONJURED) || item->GetUInt32Value(ITEM_FIELD_DURATION))        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM);            return;        }        if (COD && item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_WRAPPED))        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD);            return;        }        if (item->IsBag() && !((Bag*)item)->IsEmpty())        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_CAN_ONLY_DO_WITH_EMPTY_BAGS);            return;        }        items[i] = item;    }    pl->SendMailResult(0, MAIL_SEND, MAIL_OK);    uint32 itemTextId = !body.empty() ? sObjectMgr->CreateItemText( body ) : 0;    pl->ModifyMoney(-int32(reqmoney));    bool needItemDelay = false;    MailDraft draft(subject, itemTextId);    if (items_count > 0 || money > 0)    {        uint32 rc_account = 0;        if (receive)            rc_account = receive->GetSession()->GetAccountId();        else            rc_account = sObjectMgr->GetPlayerAccountIdByGUID(rc);        if (items_count > 0)        {            for (uint8 i = 0; i < items_count; ++i)            {                Item* item = items[i];                if (GetSecurity() > SEC_PLAYER && sWorld->getConfig(CONFIG_GM_LOG_TRADE))                {                    sLog->outCommand(GetAccountId(), "GM %s (Account: %u) mail item: %s (Entry: %u Count: %u) to player: %s (Account: %u)",                        GetPlayerName(), GetAccountId(), item->GetProto()->Name1, item->GetEntry(), item->GetCount(), receiver.c_str(), rc_account);                }                pl->MoveItemFromInventory(items[i]->GetBagSlot(), item->GetSlot(), true);                CharacterDatabase.BeginTransaction();                item->DeleteFromInventoryDB();     // deletes item from character's inventory                item->SaveToDB();                  // recursive and not have transaction guard into self, item not in inventory and can be save standalone                // owner in data will set at mail receive and item extracting                CharacterDatabase.PExecute("UPDATE item_instance SET owner_guid = '%u' WHERE guid='%u'", GUID_LOPART(rc), item->GetGUIDLow());                CharacterDatabase.CommitTransaction();                draft.AddItem(item);            }            // if item send to character at another account, then apply item delivery delay            needItemDelay = pl->GetSession()->GetAccountId() != rc_account;        }        if (money > 0 &&  GetSecurity() > SEC_PLAYER && sWorld->getConfig(CONFIG_GM_LOG_TRADE))        {            sLog->outCommand(GetAccountId(), "GM %s (Account: %u) mail money: %u to player: %s (Account: %u)",                GetPlayerName(), GetAccountId(), money, receiver.c_str(), rc_account);        }    }    // If theres is an item, there is a one hour delivery delay if sent to another account's character.    uint32 deliver_delay = needItemDelay ? sWorld->getConfig(CONFIG_MAIL_DELIVERY_DELAY) : 0;    // will delete item or place to receiver mail list    draft        .AddMoney(money)        .AddCOD(COD)        .SendMailTo(MailReceiver(receive, GUID_LOPART(rc)), pl, body.empty() ? MAIL_CHECK_MASK_COPIED : MAIL_CHECK_MASK_HAS_BODY, deliver_delay);    CharacterDatabase.BeginTransaction();    pl->SaveInventoryAndGoldToDB();    CharacterDatabase.CommitTransaction();}
开发者ID:TheGhostGroup,项目名称:SkyFire_one,代码行数:101,


示例6: DEBUG_LOG

// this void creates new auction and adds auction to some auctionhousevoid WorldSession::HandleAuctionSellItem( WorldPacket & recv_data ){    DEBUG_LOG("WORLD: HandleAuctionSellItem");    ObjectGuid auctioneerGuid;    ObjectGuid itemGuid;    uint32 etime, bid, buyout;    recv_data >> auctioneerGuid;    recv_data.read_skip<uint32>();                          // const 1?    recv_data >> itemGuid;    recv_data.read_skip<uint32>();                          // stack size    recv_data >> bid;    recv_data >> buyout;    recv_data >> etime;    if (itemGuid.IsEmpty() || !bid || !etime)        return;                                             // check for cheaters    Player *pl = GetPlayer();    AuctionHouseEntry const* auctionHouseEntry = GetCheckedAuctionHouseForAuctioneer(auctioneerGuid);    if (!auctionHouseEntry)        return;    // always return pointer    AuctionHouseObject* auctionHouse = sAuctionMgr.GetAuctionsMap(auctionHouseEntry);    // client send time in minutes, convert to common used sec time    etime *= MINUTE;    // client understand only 3 auction time    switch(etime)    {    case 1*MIN_AUCTION_TIME:    case 2*MIN_AUCTION_TIME:    case 4*MIN_AUCTION_TIME:        break;    default:        return;    }    // remove fake death    if(GetPlayer()->hasUnitState(UNIT_STAT_DIED))        GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH);    Item *it = pl->GetItemByGuid(itemGuid);    // do not allow to sell already auctioned items    if (sAuctionMgr.GetAItem(itemGuid.GetCounter()))    {        sLog.outError("AuctionError, %s is sending %s, but item is already in another auction", pl->GetGuidStr().c_str(), itemGuid.GetString().c_str());        SendAuctionCommandResult(0, AUCTION_SELL_ITEM, AUCTION_INTERNAL_ERROR);        return;    }    // prevent sending bag with items (cheat: can be placed in bag after adding equipped empty bag to auction)    if(!it)    {        SendAuctionCommandResult(0, AUCTION_SELL_ITEM, AUCTION_ITEM_NOT_FOUND);        return;    }    if(!it->CanBeTraded())    {        SendAuctionCommandResult(0, AUCTION_SELL_ITEM, AUCTION_INTERNAL_ERROR);        return;    }    if ((it->GetProto()->Flags & ITEM_FLAG_CONJURED) || it->GetUInt32Value(ITEM_FIELD_DURATION))    {        SendAuctionCommandResult(0, AUCTION_SELL_ITEM, AUCTION_INTERNAL_ERROR);        return;    }    //we have to take deposit :    uint32 deposit = AuctionHouseMgr::GetAuctionDeposit( auctionHouseEntry, etime, it );    if ( pl->GetMoney() < deposit )    {        SendAuctionCommandResult(0, AUCTION_SELL_ITEM, AUCTION_NOT_ENOUGHT_MONEY);        return;    }    if( GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_BOOL_GM_LOG_TRADE) )    {        sLog.outCommand(GetAccountId(),"GM %s (Account: %u) create auction: %s (Entry: %u Count: %u)",                        GetPlayerName(), GetAccountId(), it->GetProto()->Name1, it->GetEntry(), it->GetCount());    }    pl->ModifyMoney( -int32(deposit) );    uint32 auction_time = uint32(etime * sWorld.getConfig(CONFIG_FLOAT_RATE_AUCTION_TIME));    AuctionEntry *AH = new AuctionEntry;    AH->Id = sObjectMgr.GenerateAuctionID();    AH->item_guidlow = itemGuid.GetCounter();    AH->item_template = it->GetEntry();    AH->owner = pl->GetGUIDLow();    AH->startbid = bid;    AH->bidder = 0;    AH->bid = 0;    AH->buyout = buyout;//.........这里部分代码省略.........
开发者ID:Warlord123,项目名称:mangos-current,代码行数:101,


示例7: getMSTime

//.........这里部分代码省略.........                case STATUS_TRANSFER:                    if (!_player)                        LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player has not logged in yet");                    else if (_player->IsInWorld())                        LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player is still in world");                    else                    {                        sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                        (this->*opHandle->handler)(*packet);                        if (sLog->ShouldLog(LOG_FILTER_NETWORKIO, LOG_LEVEL_TRACE) && packet->rpos() < packet->wpos())                            LogUnprocessedTail(packet);                    }                    break;                case STATUS_AUTHED:                    // prevent cheating with skip queue wait                    if (m_inQueue)                    {                        LogUnexpectedOpcode(packet, "STATUS_AUTHED", "the player not pass queue yet");                        break;                    }                    // some auth opcodes can be recieved before STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT opcodes                    // however when we recieve CMSG_CHAR_ENUM we are surely no longer during the logout process.                    if (packet->GetOpcode() == CMSG_CHAR_ENUM)                        m_playerRecentlyLogout = false;                    sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                    (this->*opHandle->handler)(*packet);                    if (sLog->ShouldLog(LOG_FILTER_NETWORKIO, LOG_LEVEL_TRACE) && packet->rpos() < packet->wpos())                        LogUnprocessedTail(packet);                    break;                case STATUS_NEVER:                        sLog->outError(LOG_FILTER_OPCODES, "Received not allowed opcode %s from %s", GetOpcodeNameForLogging(packet->GetOpcode()).c_str()                            , GetPlayerName(false).c_str());                    break;                case STATUS_UNHANDLED:                        sLog->outError(LOG_FILTER_OPCODES, "Received not handled opcode %s from %s", GetOpcodeNameForLogging(packet->GetOpcode()).c_str()                            , GetPlayerName(false).c_str());                    break;            }        }        catch(ByteBufferException &)        {            sLog->outError(LOG_FILTER_NETWORKIO, "WorldSession::Update ByteBufferException occured while parsing a packet (opcode: %u) from client %s, accountid=%i. Skipped packet.",                    packet->GetOpcode(), GetRemoteAddress().c_str(), GetAccountId());            packet->hexlike();        }        nbPacket++;        std::map<uint32, OpcodeInfo>::iterator itr = pktHandle.find(packet->GetOpcode());        if (itr == pktHandle.end())            pktHandle.insert(std::make_pair(packet->GetOpcode(), OpcodeInfo(1, getMSTime() - pktTime)));        else        {            OpcodeInfo& data = (*itr).second;            data.nbPkt += 1;            data.totalTime += getMSTime() - pktTime;        }        if (deletePacket)            delete packet;#define MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE 500        processedPackets++;
开发者ID:SlDracon,项目名称:5.4.0-17399,代码行数:67,


示例8: GetOpcodeNameForLogging

void WorldSession::Handle_EarlyProccess(WorldPacket& recvPacket){    sLog->outError(LOG_FILTER_OPCODES, "Received opcode %s that must be processed in WorldSocket::OnRead from %s"        , GetOpcodeNameForLogging(recvPacket.GetOpcode()).c_str(), GetPlayerName(false).c_str());}
开发者ID:SlDracon,项目名称:5.4.0-17399,代码行数:5,


示例9: data

/// Logging helper for unexpected opcodesvoid WorldSession::LogUnprocessedTail(WorldPacket* packet){    sLog->outError(LOG_FILTER_OPCODES, "Unprocessed tail data (read stop at %u from %u) Opcode %s from %s",        uint32(packet->rpos()), uint32(packet->wpos()), GetOpcodeNameForLogging(packet->GetOpcode()).c_str(), GetPlayerName(false).c_str());    packet->print_storage();}
开发者ID:SlDracon,项目名称:5.4.0-17399,代码行数:7,


示例10: GetPlayerName

/// Send a packet to the clientvoid WorldSession::SendPacket(WorldPacket const* packet, bool forced /*= false*/){    if (!m_Socket)        return;    if (packet->GetOpcode() == NULL_OPCODE)    {        sLog->outError(LOG_FILTER_OPCODES, "Prevented sending of NULL_OPCODE to %s", GetPlayerName(false).c_str());        return;    }    else if (packet->GetOpcode() == UNKNOWN_OPCODE)    {        sLog->outError(LOG_FILTER_OPCODES, "Prevented sending of UNKNOWN_OPCODE to %s", GetPlayerName(false).c_str());        return;    }    if (!forced)    {        OpcodeHandler* handler = opcodeTable[packet->GetOpcode()];        if (!handler || handler->status == STATUS_UNHANDLED)        {            sLog->outError(LOG_FILTER_OPCODES, "Prevented sending disabled opcode %s to %s", GetOpcodeNameForLogging(packet->GetOpcode()).c_str(), GetPlayerName(false).c_str());            return;        }    }#ifdef TRINITY_DEBUG    // Code for network use statistic    static uint64 sendPacketCount = 0;    static uint64 sendPacketBytes = 0;    static time_t firstTime = time(NULL);    static time_t lastTime = firstTime;                     // next 60 secs start time    static uint64 sendLastPacketCount = 0;    static uint64 sendLastPacketBytes = 0;    time_t cur_time = time(NULL);    if ((cur_time - lastTime) < 60)    {        sendPacketCount+=1;        sendPacketBytes+=packet->size();        sendLastPacketCount+=1;        sendLastPacketBytes+=packet->size();    }    else    {        uint64 minTime = uint64(cur_time - lastTime);        uint64 fullTime = uint64(lastTime - firstTime);        sLog->outInfo(LOG_FILTER_GENERAL, "Send all time packets count: " UI64FMTD " bytes: " UI64FMTD " avr.count/sec: %f avr.bytes/sec: %f time: %u", sendPacketCount, sendPacketBytes, float(sendPacketCount)/fullTime, float(sendPacketBytes)/fullTime, uint32(fullTime));        sLog->outInfo(LOG_FILTER_GENERAL, "Send last min packets count: " UI64FMTD " bytes: " UI64FMTD " avr.count/sec: %f avr.bytes/sec: %f", sendLastPacketCount, sendLastPacketBytes, float(sendLastPacketCount)/minTime, float(sendLastPacketBytes)/minTime);        lastTime = cur_time;        sendLastPacketCount = 1;        sendLastPacketBytes = packet->wpos();               // wpos is real written size    }#endif                                                      // !TRINITY_DEBUG    if (m_Socket->SendPacket(*packet) == -1)        m_Socket->CloseSocket();}
开发者ID:SlDracon,项目名称:5.4.0-17399,代码行数:64,


示例11: GetPlayer

//.........这里部分代码省略.........        }        if (item->IsBoundAccountWide() && item->IsSoulBound() && player->GetSession()->GetAccountId() != receiverAccountId)        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_ARTEFACTS_ONLY_FOR_OWN_CHARACTERS);            return;        }        if (item->GetTemplate()->Flags & ITEM_PROTO_FLAG_CONJURED || item->GetUInt32Value(ITEM_FIELD_DURATION))        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM);            return;        }        if (COD && item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD);            return;        }        if (item->IsNotEmptyBag())        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_CAN_ONLY_DO_WITH_EMPTY_BAGS);            return;        }        items[i] = item;    }    // Check for spamming    if (!UpdateAntispamCount())    {        player->SendMailResult(0, MAIL_SEND, MAIL_ERR_INTERNAL_ERROR);        SendNotification(GetTrinityString(LANG_ANTISPAM_ERROR));        return;    }	    player->SendMailResult(0, MAIL_SEND, MAIL_OK);    player->ModifyMoney(-int32(reqmoney));    player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL, cost);    bool needItemDelay = false;    MailDraft draft(subject, body);    SQLTransaction trans = CharacterDatabase.BeginTransaction();    if (items_count > 0 || money > 0)    {        bool log = HasPermission(rbac::RBAC_PERM_LOG_GM_TRADE);        if (items_count > 0)        {            for (uint8 i = 0; i < items_count; ++i)            {                Item* item = items[i];                if (log)                {                    sLog->outCommand(GetAccountId(), "GM %s (GUID: %u) (Account: %u) mail item: %s (Entry: %u Count: %u) "                        "to: %s (%s) (Account: %u)", GetPlayerName().c_str(), GetGuidLow(), GetAccountId(),                        item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetCount(),                        receiverName.c_str(), receiverGuid.ToString().c_str(), receiverAccountId);                }                item->SetNotRefundable(GetPlayer()); // makes the item no longer refundable                player->MoveItemFromInventory(items[i]->GetBagSlot(), item->GetSlot(), true);                item->DeleteFromInventoryDB(trans);     // deletes item from character's inventory                item->SetOwnerGUID(receiverGuid);                item->SaveToDB(trans);                  // recursive and not have transaction guard into self, item not in inventory and can be save standalone                draft.AddItem(item);            }            // if item send to character at another account, then apply item delivery delay            needItemDelay = player->GetSession()->GetAccountId() != receiverAccountId;        }        if (log && money > 0)        {            sLog->outCommand(GetAccountId(), "GM %s (GUID: %u) (Account: %u) mail money: %u to: %s (%s) (Account: %u)",                GetPlayerName().c_str(), GetGuidLow(), GetAccountId(), money, receiverName.c_str(), receiverGuid.ToString().c_str(), receiverAccountId);        }    }    // If theres is an item, there is a one hour delivery delay if sent to another account's character.    uint32 deliver_delay = needItemDelay ? sWorld->getIntConfig(CONFIG_MAIL_DELIVERY_DELAY) : 0;    // don't ask for COD if there are no items    if (items_count == 0)        COD = 0;    // will delete item or place to receiver mail list    draft        .AddMoney(money)        .AddCOD(COD)        .SendMailTo(trans, MailReceiver(receiver, receiverGuid.GetCounter()), MailSender(player), body.empty() ? MAIL_CHECK_MASK_COPIED : MAIL_CHECK_MASK_HAS_BODY, deliver_delay);    player->SaveInventoryAndGoldToDB(trans);    CharacterDatabase.CommitTransaction(trans);}
开发者ID:GlassFace,项目名称:MyCore,代码行数:101,


示例12: u32

CMainMenu::CMainMenu	(){	m_Flags.zero					();	m_startDialog					= NULL;	m_screenshotFrame				= u32(-1);	g_pGamePersistent->m_pMainMenu	= this;	if (Device.b_is_Ready)			OnDeviceCreate();  		ReadTextureInfo					();	CUIXmlInit::InitColorDefs		();	g_btnHint						= NULL;	g_statHint						= NULL;	m_deactivated_frame				= 0;			m_sPatchURL						= "";	m_pGameSpyFull					= NULL;	m_account_mngr					= NULL;	m_login_mngr					= NULL;	m_profile_store					= NULL;	m_stats_submitter				= NULL;	m_atlas_submit_queue			= NULL;	m_sPDProgress.IsInProgress		= false;	m_downloaded_mp_map_url._set	("");	//-------------------------------------------	m_NeedErrDialog					= ErrNoError;	m_start_time					= 0;	GetPlayerName					();	GetCDKeyFromRegistry			();	m_demo_info_loader				= NULL;	if(!g_dedicated_server)	{		g_btnHint						= xr_new<CUIButtonHint>();		g_statHint						= xr_new<CUIButtonHint>();		m_pGameSpyFull					= xr_new<CGameSpy_Full>();				for (u32 i=0; i<u32(ErrMax); i++)		{			CUIMessageBoxEx*			pNewErrDlg;			INIT_MSGBOX					(pNewErrDlg, ErrMsgBoxTemplate[i]);			m_pMB_ErrDlgs.push_back		(pNewErrDlg);		}		m_pMB_ErrDlgs[PatchDownloadSuccess]->AddCallbackStr("button_yes", MESSAGE_BOX_YES_CLICKED, CUIWndCallback::void_function(this, &CMainMenu::OnRunDownloadedPatch));		m_pMB_ErrDlgs[PatchDownloadSuccess]->AddCallbackStr("button_yes", MESSAGE_BOX_OK_CLICKED, CUIWndCallback::void_function(this, &CMainMenu::OnConnectToMasterServerOkClicked));		m_pMB_ErrDlgs[DownloadMPMap]->AddCallbackStr("button_copy", MESSAGE_BOX_COPY_CLICKED, CUIWndCallback::void_function(this, &CMainMenu::OnDownloadMPMap_CopyURL));		m_pMB_ErrDlgs[DownloadMPMap]->AddCallbackStr("button_yes", MESSAGE_BOX_YES_CLICKED, CUIWndCallback::void_function(this, &CMainMenu::OnDownloadMPMap));		m_account_mngr			= xr_new<gamespy_gp::account_manager>		(m_pGameSpyFull->GetGameSpyGP());		m_login_mngr			= xr_new<gamespy_gp::login_manager>			(m_pGameSpyFull);		m_profile_store			= xr_new<gamespy_profile::profile_store>	(m_pGameSpyFull);		m_stats_submitter		= xr_new<gamespy_profile::stats_submitter>	(m_pGameSpyFull);		m_atlas_submit_queue	= xr_new<atlas_submit_queue>				(m_stats_submitter);	}		Device.seqFrame.Add		(this,REG_PRIORITY_LOW-1000);}
开发者ID:AntonioModer,项目名称:xray-16,代码行数:61,


示例13: ObjectGuid

/** * 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:lucasdnd,项目名称:mangoszero-bots-test,代码行数:98,


示例14: DETAIL_LOG

//.........这里部分代码省略.........    if (!sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_INTERACTION_MAIL) && pl->GetTeam() != rc_team && GetSecurity() == SEC_PLAYER)    {        pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_YOUR_TEAM);        return;    }    uint32 rc_account = receive                        ? receive->GetSession()->GetAccountId()                        : sObjectMgr.GetPlayerAccountIdByGUID(rc);    Item* item = NULL;    if (itemGuid)    {        item = pl->GetItemByGuid(itemGuid);        // prevent sending bag with items (cheat: can be placed in bag after adding equipped empty bag to mail)        if (!item)        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);            return;        }        if (!item->CanBeTraded())        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);            return;        }        if ((item->GetProto()->Flags & ITEM_FLAG_CONJURED) || item->GetUInt32Value(ITEM_FIELD_DURATION))        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);            return;        }        if (COD && item->HasFlag(ITEM_FIELD_FLAGS, ITEM_DYNFLAG_WRAPPED))        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD);            return;        }    }    pl->SendMailResult(0, MAIL_SEND, MAIL_OK);    pl->ModifyMoney(-int32(reqmoney));    bool needItemDelay = false;    MailDraft draft(subject, body);    if (itemGuid || money > 0)    {        uint32 rc_account = 0;        if (receive)            { rc_account = receive->GetSession()->GetAccountId(); }        else            { rc_account = sObjectMgr.GetPlayerAccountIdByGUID(rc); }        if (item)        {            if (GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_BOOL_GM_LOG_TRADE))            {                sLog.outCommand(GetAccountId(), "GM %s (Account: %u) mail item: %s (Entry: %u Count: %u) to player: %s (Account: %u)",                                GetPlayerName(), GetAccountId(), item->GetProto()->Name1, item->GetEntry(), item->GetCount(), receiver.c_str(), rc_account);            }            pl->MoveItemFromInventory(item->GetBagSlot(), item->GetSlot(), true);            CharacterDatabase.BeginTransaction();            item->DeleteFromInventoryDB();                  // deletes item from character's inventory            item->SaveToDB();                               // recursive and not have transaction guard into self, item not in inventory and can be save standalone            // owner in data will set at mail receive and item extracting            CharacterDatabase.PExecute("UPDATE item_instance SET owner_guid = '%u' WHERE guid='%u'", rc.GetCounter(), item->GetGUIDLow());            CharacterDatabase.CommitTransaction();            draft.AddItem(item);            // if item send to character at another account, then apply item delivery delay            needItemDelay = pl->GetSession()->GetAccountId() != rc_account;        }        if (money > 0 &&  GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_BOOL_GM_LOG_TRADE))        {            sLog.outCommand(GetAccountId(), "GM %s (Account: %u) mail money: %u to player: %s (Account: %u)",                            GetPlayerName(), GetAccountId(), money, receiver.c_str(), rc_account);        }    }    // If theres is an item, there is a one hour delivery delay if sent to another account's character.    uint32 deliver_delay = needItemDelay ? sWorld.getConfig(CONFIG_UINT32_MAIL_DELIVERY_DELAY) : 0;    // will delete item or place to receiver mail list    draft    .SetMoney(money)    .SetCOD(COD)    .SendMailTo(MailReceiver(receive, rc), pl, body.empty() ? MAIL_CHECK_MASK_COPIED : MAIL_CHECK_MASK_HAS_BODY, deliver_delay);    CharacterDatabase.BeginTransaction();    pl->SaveInventoryAndGoldToDB();    CharacterDatabase.CommitTransaction();}
开发者ID:lucasdnd,项目名称:mangoszero-bots-test,代码行数:101,


示例15: GetPlayerName

void plNetClientMgr::IShowRelevanceRegions(){    plDebugText& txt = plDebugText::Instance();    const int yOff = 12, xOff = 20, startY=70, startX=10;    int x = startX, y = startY;    const char* title = "Name / In / Care";    txt.DrawString(x, y - yOff, title, 255, 255, 255, 255, plDebugText::kStyleBold);    plNetTransportMember** members = nil;    fTransport.GetMemberListDistSorted(members);    //    // Print out the player names in the first column    //    uint32_t maxPlayerName = 0;    txt.DrawString(x, y, GetPlayerName().c_str());    maxPlayerName = hsMaximum(maxPlayerName, txt.CalcStringWidth(GetPlayerName().c_str()));    y += yOff;    int i;    for (i = 0; i < fTransport.GetNumMembers(); i++)    {        plNetTransportMember* mbr = members[i];        hsAssert(mbr, "ShowLists: nil member?");        if (mbr->IsServer())            continue;        const plString& name = mbr->GetPlayerName();        txt.DrawString(x, y, name.c_str());        maxPlayerName = hsMaximum(maxPlayerName, txt.CalcStringWidth(name.c_str()));        y += yOff;    }    x = startX + maxPlayerName + xOff;    y = startY;    //    // Print out the regions    //    const hsBitVector* ourCare = nil;    const hsBitVector* ourIn = nil;    plSceneObject* player = plSceneObject::ConvertNoRef(GetLocalPlayer());    if (player)    {        const plArmatureMod *avMod = plArmatureMod::ConvertNoRef(player->GetModifierByType(plArmatureMod::Index()));        if (avMod)        {            ourIn = &avMod->GetRelRegionImIn();            uint32_t width = IPrintRelRegion(*ourIn, x, y, nil);            ourCare = &avMod->GetRelRegionCareAbout();            IPrintRelRegion(*ourCare, x + width + xOff, y, nil);            y += yOff;        }    }    for (i = 0; i < fTransport.GetNumMembers(); i++)    {        plNetTransportMember* mbr = members[i];        if (mbr->IsServer())            continue;        player = (mbr->GetAvatarKey() ? plSceneObject::ConvertNoRef(mbr->GetAvatarKey()->ObjectIsLoaded()) : nil);        if (player)        {            const plArmatureMod* avMod = plArmatureMod::ConvertNoRef(player->GetModifierByType(plArmatureMod::Index()));            if (avMod)            {                const hsBitVector& in = avMod->GetRelRegionImIn();                uint32_t width = IPrintRelRegion(in, x, y, ourCare);                const hsBitVector& care = avMod->GetRelRegionCareAbout();                IPrintRelRegion(care, x + width + xOff, y, ourIn);                y += yOff;            }        }    }    delete [] members;  }
开发者ID:branan,项目名称:Plasma-nobink,代码行数:86,


示例16: GetPlayer

//.........这里部分代码省略.........        }        if (!item->CanBeTraded(true))        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM);            return;        }        if (item->IsBoundAccountWide() && item->IsSoulBound() && player->GetSession()->GetAccountId() != receiverAccountId)        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_NOT_SAME_ACCOUNT);            return;        }        if (item->GetTemplate()->Flags & ITEM_PROTO_FLAG_CONJURED || item->GetUInt32Value(ITEM_FIELD_EXPIRATION))        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM);            return;        }        if (COD && item->HasFlag(ITEM_FIELD_DYNAMIC_FLAGS, ITEM_FLAG_WRAPPED))        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD);            return;        }        if (item->IsNotEmptyBag())        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_DESTROY_NONEMPTY_BAG);            return;        }        items[i] = item;    }    player->SendMailResult(0, MAIL_SEND, MAIL_OK);    player->ModifyMoney(-int64(reqmoney));    player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL, cost);    bool needItemDelay = false;    MailDraft draft(subject, body);    SQLTransaction trans = CharacterDatabase.BeginTransaction();    if (itemCount > 0 || money > 0)    {        bool log = HasPermission(rbac::RBAC_PERM_LOG_GM_TRADE);        if (itemCount > 0)        {            for (uint8 i = 0; i < itemCount; ++i)            {                Item* item = items[i];                if (log)                {                    sLog->outCommand(GetAccountId(), "GM %s (GUID: %u) (Account: %u) mail item: %s (Entry: %u Count: %u) "                        "to player: %s (GUID: %u) (Account: %u)", GetPlayerName().c_str(), GetGuidLow(), GetAccountId(),                        item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetCount(),                        receiverName.c_str(), GUID_LOPART(receiverGuid), receiverAccountId);                }                item->SetNotRefundable(GetPlayer()); // makes the item no longer refundable                player->MoveItemFromInventory(items[i]->GetBagSlot(), item->GetSlot(), true);                item->DeleteFromInventoryDB(trans);     // deletes item from character's inventory                item->SetOwnerGUID(receiverGuid);                item->SaveToDB(trans);                  // recursive and not have transaction guard into self, item not in inventory and can be save standalone                draft.AddItem(item);            }            // if item send to character at another account, then apply item delivery delay            needItemDelay = player->GetSession()->GetAccountId() != receiverAccountId;        }        if (log && money > 0)        {            sLog->outCommand(GetAccountId(), "GM %s (GUID: %u) (Account: %u) mail money: " UI64FMTD " to player: %s (GUID: %u) (Account: %u)",                GetPlayerName().c_str(), GetGuidLow(), GetAccountId(), money, receiverName.c_str(), GUID_LOPART(receiverGuid), receiverAccountId);        }    }    // If theres is an item, there is a one hour delivery delay if sent to another account's character.    uint32 deliver_delay = needItemDelay ? sWorld->getIntConfig(CONFIG_MAIL_DELIVERY_DELAY) : 0;    // Mail sent between guild members arrives instantly if they have the guild perk "Guild Mail"    if (Guild* guild = sGuildMgr->GetGuildById(player->GetGuildId()))        if (guild->GetLevel() >= 17 && guild->IsMember(receiverGuid))            deliver_delay = 0;    // will delete item or place to receiver mail list    draft        .AddMoney(money)        .AddCOD(COD)        .SendMailTo(trans, MailReceiver(receiver, GUID_LOPART(receiverGuid)), MailSender(player), body.empty() ? MAIL_CHECK_MASK_COPIED : MAIL_CHECK_MASK_HAS_BODY, deliver_delay);    player->SaveInventoryAndGoldToDB(trans);    CharacterDatabase.CommitTransaction(trans);}
开发者ID:Ginfred,项目名称:SkyFire.548,代码行数:101,


示例17: hsPoint3

void plNetClientMgr::IShowAvatars(){    plDebugText     &txt = plDebugText::Instance();    txt.SetFont( "Courier New", 6 );    int y,x,i;    const int yOff=10, xOff=285, startY=100, startX=10;    char str[256];    // Me    x=startX;    y=startY-yOff*3;    plSceneObject *player = plSceneObject::ConvertNoRef(GetLocalPlayer());    hsPoint3 pos = (player ? player->GetLocalToWorld() * hsPoint3(0, 0, 0) : hsPoint3(0, 0, 0));    hsVector3 ori = (player ? player->GetLocalToWorld() * hsVector3(0, -1, 0) : hsVector3(0, 0, 0));    sprintf(str, "%s: pos(%.2f, %.2f, %.2f) ori(%.2f, %.2f, %.2f)",            GetPlayerName().c_str(), pos.fX, pos.fY, pos.fZ, ori.fX, ori.fY, ori.fZ);    txt.DrawString(x,y,str,255,255,255,255);    if (player)    {        const plArmatureMod *avMod = plArmatureMod::ConvertNoRef(player->GetModifierByType(plArmatureMod::Index()));        if (avMod)        {            plArmatureMod* pNonConstArm = const_cast<plArmatureMod*>(avMod);            plSceneObject* pObj = pNonConstArm->GetFollowerParticleSystemSO();            if (pObj)            {                y+=yOff;                y+=yOff;                hsPoint3 pos = (pObj ? pObj->GetLocalToWorld() * hsPoint3(0, 0, 0) : hsPoint3(0, 0, 0));                hsVector3 ori = (pObj ? pObj->GetLocalToWorld() * hsVector3(0, -1, 0) : hsVector3(0, 0, 0));                sprintf(str, "%s: pos(%.2f, %.2f, %.2f) ori(%.2f, %.2f, %.2f)",                        pObj->GetKeyName().c_str(), pos.fX, pos.fY, pos.fZ, ori.fX, ori.fY, ori.fZ);                txt.DrawString(x,y,str,255,255,255,255);            }        }    }    // Others    y=startY;    x=startX;    plNetTransportMember** members=nil;    fTransport.GetMemberListDistSorted(members);    for(i=0;i<fTransport.GetNumMembers();i++)    {        plNetTransportMember* mbr=members[i];        hsAssert(mbr, "ShowLists: nil member?");        if (mbr->IsServer())            continue;        player = (mbr->GetAvatarKey() ? plSceneObject::ConvertNoRef(mbr->GetAvatarKey()->ObjectIsLoaded()) : nil);        pos = (player ? player->GetLocalToWorld() * hsPoint3(0, 0, 0) : hsPoint3(0, 0, 0));        ori = (player ? player->GetLocalToWorld() * hsVector3(0, -1, 0) : hsVector3(0, 0, 0));        sprintf(str, "%s: pos(%.2f, %.2f, %.2f) ori(%.2f, %.2f, %.2f)",                mbr->AsString().c_str(), pos.fX, pos.fY, pos.fZ, ori.fX, ori.fY, ori.fZ);        txt.DrawString(x,y,str);        y+=yOff;        if (player)        {            const plArmatureMod *avMod = plArmatureMod::ConvertNoRef(player->GetModifierByType(plArmatureMod::Index()));            if (avMod)            {                plArmatureMod* pNonConstArm = const_cast<plArmatureMod*>(avMod);                plSceneObject* pObj = pNonConstArm->GetFollowerParticleSystemSO();                if (pObj)                {                    y+=yOff;                    y+=yOff;                    hsPoint3 pos = (pObj ? pObj->GetLocalToWorld() * hsPoint3(0, 0, 0) : hsPoint3(0, 0, 0));                    hsVector3 ori = (pObj ? pObj->GetLocalToWorld() * hsVector3(0, -1, 0) : hsVector3(0, 0, 0));                    sprintf(str, "%s: pos(%.2f, %.2f, %.2f) ori(%.2f, %.2f, %.2f)",                            pObj->GetKeyName().c_str(), pos.fX, pos.fY, pos.fZ, ori.fX, ori.fY, ori.fZ);                    txt.DrawString(x,y,str,255,255,255,255);                }            }        }    }    delete [] members;    txt.SetFont( "Courier New", 8 );}
开发者ID:branan,项目名称:Plasma-nobink,代码行数:89,


示例18: GetPlayerName

//called when player takes item attached in mailvoid WorldSession::HandleMailTakeItem(WorldPackets::Mail::MailTakeItem& packet){    uint32 AttachID = packet.AttachID;    if (!CanOpenMailBox(packet.Mailbox))        return;    Player* player = _player;    Mail* m = player->GetMail(packet.MailID);    if (!m || m->state == MAIL_STATE_DELETED || m->deliver_time > time(nullptr))    {        player->SendMailResult(packet.MailID, MAIL_ITEM_TAKEN, MAIL_ERR_INTERNAL_ERROR);        return;    }    // verify that the mail has the item to avoid cheaters taking COD items without paying    if (std::find_if(m->items.begin(), m->items.end(), [AttachID](MailItemInfo info){ return info.item_guid == AttachID; }) == m->items.end())    {        player->SendMailResult(packet.MailID, MAIL_ITEM_TAKEN, MAIL_ERR_INTERNAL_ERROR);        return;    }    // prevent cheating with skip client money check    if (!player->HasEnoughMoney(uint64(m->COD)))    {        player->SendMailResult(packet.MailID, MAIL_ITEM_TAKEN, MAIL_ERR_NOT_ENOUGH_MONEY);        return;    }    Item* it = player->GetMItem(packet.AttachID);    ItemPosCountVec dest;    uint8 msg = _player->CanStoreItem(NULL_BAG, NULL_SLOT, dest, it, false);    if (msg == EQUIP_ERR_OK)    {        SQLTransaction trans = CharacterDatabase.BeginTransaction();        m->RemoveItem(packet.AttachID);        m->removedItems.push_back(packet.AttachID);        if (m->COD > 0)                                     //if there is COD, take COD money from player and send them to sender by mail        {            ObjectGuid sender_guid = ObjectGuid::Create<HighGuid::Player>(m->sender);            Player* receiver = ObjectAccessor::FindConnectedPlayer(sender_guid);            uint32 sender_accId = 0;            if (HasPermission(rbac::RBAC_PERM_LOG_GM_TRADE))            {                std::string sender_name;                if (receiver)                {                    sender_accId = receiver->GetSession()->GetAccountId();                    sender_name = receiver->GetName();                }                else                {                    // can be calculated early                    sender_accId = ObjectMgr::GetPlayerAccountIdByGUID(sender_guid);                    if (!ObjectMgr::GetPlayerNameByGUID(sender_guid, sender_name))                        sender_name = sObjectMgr->GetTrinityStringForDBCLocale(LANG_UNKNOWN);                }                sLog->outCommand(GetAccountId(), "GM %s (Account: %u) receiver mail item: %s (Entry: %u Count: %u) and send COD money: " UI64FMTD " to player: %s (Account: %u)",                    GetPlayerName().c_str(), GetAccountId(), it->GetTemplate()->GetDefaultLocaleName(), it->GetEntry(), it->GetCount(), m->COD, sender_name.c_str(), sender_accId);            }            else if (!receiver)                sender_accId = ObjectMgr::GetPlayerAccountIdByGUID(sender_guid);            // check player existence            if (receiver || sender_accId)            {                MailDraft(m->subject, "")                    .AddMoney(m->COD)                    .SendMailTo(trans, MailReceiver(receiver, m->sender), MailSender(MAIL_NORMAL, m->receiver), MAIL_CHECK_MASK_COD_PAYMENT);            }            player->ModifyMoney(-int32(m->COD));        }        m->COD = 0;        m->state = MAIL_STATE_CHANGED;        player->m_mailsUpdated = true;        player->RemoveMItem(it->GetGUID().GetCounter());        uint32 count = it->GetCount();                      // save counts before store and possible merge with deleting        it->SetState(ITEM_UNCHANGED);                       // need to set this state, otherwise item cannot be removed later, if neccessary        player->MoveItemToInventory(dest, it, true);        player->SaveInventoryAndGoldToDB(trans);        player->_SaveMail(trans);        CharacterDatabase.CommitTransaction(trans);        player->SendMailResult(packet.MailID, MAIL_ITEM_TAKEN, MAIL_OK, 0, packet.AttachID, count);    }    else        player->SendMailResult(packet.MailID, MAIL_ITEM_TAKEN, MAIL_ERR_EQUIP_ERROR, msg);}
开发者ID:Regigicas,项目名称:TrinityCore,代码行数:98,


示例19: SendAuctionCommandResult

//.........这里部分代码省略.........        if (item->GetMaxStackCount() < finalCount)        {            SendAuctionCommandResult(NULL, AUCTION_SELL_ITEM, ERR_AUCTION_DATABASE_ERROR);            return;        }    }    Item* item = items[0];    uint32 auctionTime = uint32(etime * sWorld->getRate(RATE_AUCTION_TIME));    AuctionHouseObject* auctionHouse = sAuctionMgr->GetAuctionsMap(creature->getFaction());    uint32 deposit = sAuctionMgr->GetAuctionDeposit(auctionHouseEntry, etime, item, finalCount);    if (!_player->HasEnoughMoney((uint64)deposit))    {        SendAuctionCommandResult(NULL, AUCTION_SELL_ITEM, ERR_AUCTION_NOT_ENOUGHT_MONEY);        return;    }    AuctionEntry* AH = new AuctionEntry();    if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION))        AH->auctioneer = 23442;     ///@TODO - HARDCODED DB GUID, BAD BAD BAD    else        AH->auctioneer = GUID_LOPART(auctioneer);    // Required stack size of auction matches to current item stack size, just move item to auctionhouse    if (itemsCount == 1 && item->GetCount() == count[0])    {        if (HasPermission(rbac::RBAC_PERM_LOG_GM_TRADE))        {            sLog->outCommand(GetAccountId(), "GM %s (Account: %u) create auction: %s (Entry: %u Count: %u)",                GetPlayerName().c_str(), GetAccountId(), item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetCount());        }        AH->Id = sObjectMgr->GenerateAuctionID();        AH->itemGUIDLow = item->GetGUIDLow();        AH->itemEntry = item->GetEntry();        AH->itemCount = item->GetCount();        AH->owner = _player->GetGUIDLow();        AH->startbid = bid;        AH->bidder = 0;        AH->bid = 0;        AH->buyout = buyout;        AH->expire_time = time(NULL) + auctionTime;        AH->deposit = deposit;        AH->auctionHouseEntry = auctionHouseEntry;        TC_LOG_INFO("network", "CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) "            "to auctioneer %u with count %u with initial bid " UI64FMTD " with buyout " UI64FMTD " and with time %u (in sec) in auctionhouse %u",            _player->GetName().c_str(), _player->GetGUIDLow(), item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetGUIDLow(),            AH->auctioneer, item->GetCount(), bid, buyout, auctionTime, AH->GetHouseId());        sAuctionMgr->AddAItem(item);        auctionHouse->AddAuction(AH);        _player->MoveItemFromInventory(item->GetBagSlot(), item->GetSlot(), true);        SQLTransaction trans = CharacterDatabase.BeginTransaction();        item->DeleteFromInventoryDB(trans);        item->SaveToDB(trans);        AH->SaveToDB(trans);        _player->SaveInventoryAndGoldToDB(trans);        CharacterDatabase.CommitTransaction(trans);        SendAuctionCommandResult(AH, AUCTION_SELL_ITEM, ERR_AUCTION_OK);
开发者ID:Trust123,项目名称:ElunaTrinityCata,代码行数:67,


示例20: GetPlayer

// this void creates new auction and adds auction to some auctionhousevoid WorldSession::HandleAuctionSellItem( WorldPacket & recv_data ){    uint64 auctioneer, item;    uint32 etime, bid, buyout;    recv_data >> auctioneer;    recv_data.read_skip<uint32>();                          // const 1?    recv_data >> item;    recv_data.read_skip<uint32>();                          // stack size    recv_data >> bid;    recv_data >> buyout;    recv_data >> etime;    Player *pl = GetPlayer();    if (!item || !bid || !etime)        return;                                             // check for cheaters    Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(auctioneer, UNIT_NPC_FLAG_AUCTIONEER);    if (!pCreature)    {        sLog.outDebug( "WORLD: HandleAuctionSellItem - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(auctioneer)) );        return;    }    AuctionHouseEntry const* auctionHouseEntry = AuctionHouseMgr::GetAuctionHouseEntry(pCreature->getFaction());    if(!auctionHouseEntry)    {        sLog.outDebug( "WORLD: HandleAuctionSellItem - Unit (GUID: %u) has wrong faction.", uint32(GUID_LOPART(auctioneer)) );        return;    }    // client send time in minutes, convert to common used sec time    etime *= MINUTE;    // client understand only 3 auction time    switch(etime)    {        case 1*MIN_AUCTION_TIME:        case 2*MIN_AUCTION_TIME:        case 4*MIN_AUCTION_TIME:            break;        default:            return;    }    // remove fake death    if(GetPlayer()->hasUnitState(UNIT_STAT_DIED))        GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH);    Item *it = pl->GetItemByGuid( item );    // do not allow to sell already auctioned items    if(sAuctionMgr.GetAItem(GUID_LOPART(item)))    {        sLog.outError("AuctionError, player %s is sending item id: %u, but item is already in another auction", pl->GetName(), GUID_LOPART(item));        SendAuctionCommandResult(0, AUCTION_SELL_ITEM, AUCTION_INTERNAL_ERROR);        return;    }    // prevent sending bag with items (cheat: can be placed in bag after adding equipped empty bag to auction)    if(!it)    {        SendAuctionCommandResult(0, AUCTION_SELL_ITEM, AUCTION_ITEM_NOT_FOUND);        return;    }    if(!it->CanBeTraded())    {        SendAuctionCommandResult(0, AUCTION_SELL_ITEM, AUCTION_INTERNAL_ERROR);        return;    }    if (it->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_CONJURED) || it->GetUInt32Value(ITEM_FIELD_DURATION))    {        SendAuctionCommandResult(0, AUCTION_SELL_ITEM, AUCTION_INTERNAL_ERROR);        return;    }    AuctionHouseObject* auctionHouse = sAuctionMgr.GetAuctionsMap( pCreature->getFaction() );    //we have to take deposit :    uint32 deposit = AuctionHouseMgr::GetAuctionDeposit( auctionHouseEntry, etime, it );    if ( pl->GetMoney() < deposit )    {        SendAuctionCommandResult(0, AUCTION_SELL_ITEM, AUCTION_NOT_ENOUGHT_MONEY);        return;    }    if( GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_BOOL_GM_LOG_TRADE) )    {        sLog.outCommand(GetAccountId(),"GM %s (Account: %u) create auction: %s (Entry: %u Count: %u)",            GetPlayerName(), GetAccountId(), it->GetProto()->Name1, it->GetEntry(), it->GetCount());    }    pl->ModifyMoney( -int32(deposit) );    uint32 auction_time = uint32(etime * sWorld.getConfig(CONFIG_FLOAT_RATE_AUCTION_TIME));    AuctionEntry *AH = new AuctionEntry;    AH->Id = sObjectMgr.GenerateAuctionID();//.........这里部分代码省略.........
开发者ID:BACKUPLIB,项目名称:Core,代码行数:101,


示例21: DEBUG_LOG

// this void creates new auction and adds auction to some auctionhousevoid WorldSession::HandleAuctionSellItem(WorldPacket& recv_data){    DEBUG_LOG("WORLD: HandleAuctionSellItem");    ObjectGuid auctioneerGuid;    ObjectGuid itemGuid;    uint32 etime, bid, buyout;    recv_data >> auctioneerGuid;    recv_data >> itemGuid;    recv_data >> bid;    recv_data >> buyout;    recv_data >> etime;    if (!bid || !etime)        { return; }                                             // check for cheaters    Player* pl = GetPlayer();    AuctionHouseEntry const* auctionHouseEntry = GetCheckedAuctionHouseForAuctioneer(auctioneerGuid);    if (!auctionHouseEntry)        { return; }    // always return pointer    AuctionHouseObject* auctionHouse = sAuctionMgr.GetAuctionsMap(auctionHouseEntry);    // client send time in minutes, convert to common used sec time    etime *= MINUTE;    // client understand only 3 auction time    switch (etime)    {        case 1*MIN_AUCTION_TIME:        case 4*MIN_AUCTION_TIME:        case 12*MIN_AUCTION_TIME:            break;        default:            return;    }    // remove fake death    if (GetPlayer()->hasUnitState(UNIT_STAT_DIED))        { GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH); }    if (!itemGuid)        { return; }    Item* it = pl->GetItemByGuid(itemGuid);    // do not allow to sell already auctioned items    if (sAuctionMgr.GetAItem(itemGuid.GetCounter()))    {        sLog.outError("AuctionError, %s is sending %s, but item is already in another auction", pl->GetGuidStr().c_str(), itemGuid.GetString().c_str());        SendAuctionCommandResult(NULL, AUCTION_STARTED, AUCTION_ERR_INVENTORY, EQUIP_ERR_ITEM_NOT_FOUND);        return;    }    // prevent sending bag with items (cheat: can be placed in bag after adding equipped empty bag to auction)    if (!it)    {        SendAuctionCommandResult(NULL, AUCTION_STARTED, AUCTION_ERR_INVENTORY, EQUIP_ERR_ITEM_NOT_FOUND);        return;    }    if (!it->CanBeTraded())    {        SendAuctionCommandResult(NULL, AUCTION_STARTED, AUCTION_ERR_INVENTORY, EQUIP_ERR_ITEM_NOT_FOUND);        return;    }    if ((it->GetProto()->Flags & ITEM_FLAG_CONJURED) || it->GetUInt32Value(ITEM_FIELD_DURATION))    {        SendAuctionCommandResult(NULL, AUCTION_STARTED, AUCTION_ERR_INVENTORY, EQUIP_ERR_ITEM_NOT_FOUND);        return;    }    // check money for deposit    uint32 deposit = AuctionHouseMgr::GetAuctionDeposit(auctionHouseEntry, etime, it);    if (pl->GetMoney() < deposit)    {        SendAuctionCommandResult(NULL, AUCTION_STARTED, AUCTION_ERR_NOT_ENOUGH_MONEY);        return;    }    if (GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_BOOL_GM_LOG_TRADE))    {        sLog.outCommand(GetAccountId(), "GM %s (Account: %u) create auction: %s (Entry: %u Count: %u)",                        GetPlayerName(), GetAccountId(), it->GetProto()->Name1, it->GetEntry(), it->GetCount());    }    pl->ModifyMoney(-int32(deposit));    AuctionEntry* AH = auctionHouse->AddAuction(auctionHouseEntry, it, etime, bid, buyout, deposit, pl);    DETAIL_LOG("selling %s to auctioneer %s with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u",               itemGuid.GetString().c_str(), auctioneerGuid.GetString().c_str(), bid, buyout, etime, auctionHouseEntry->houseId);    SendAuctionCommandResult(AH, AUCTION_STARTED, AUCTION_OK);//.........这里部分代码省略.........
开发者ID:lucasdnd,项目名称:mangoszero-bots-test,代码行数:101,


示例22: CHECK_PACKET_SIZE

//.........这里部分代码省略.........            if(!mailItem.item_guidlow)            {                pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);                return;            }            mailItem.item = pl->GetItemByGuid(MAKE_NEW_GUID(mailItem.item_guidlow, 0, HIGHGUID_ITEM));            // prevent sending bag with items (cheat: can be placed in bag after adding equipped empty bag to mail)            if(!mailItem.item)            {                pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);                return;            }            if(!mailItem.item->CanBeTraded(true))            {                pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM);                return;            }            if(mailItem.item->IsBoundAccountWide() && mailItem.item->IsSoulBound() && pl->GetSession()->GetAccountId() != rc_account)            {                pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_ARTEFACTS_ONLY_FOR_OWN_CHARACTERS);                return;            }            if (mailItem.item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_CONJURED) || mailItem.item->GetUInt32Value(ITEM_FIELD_DURATION))            {                pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM);                return;            }            if(COD && mailItem.item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_WRAPPED))            {                pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD);                return;            }        }    }    pl->SendMailResult(0, MAIL_SEND, MAIL_OK);    uint32 itemTextId = 0;    if (!body.empty())    {        itemTextId = objmgr.CreateItemText( body );    }    pl->ModifyMoney( -int32(reqmoney) );    pl->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL, cost);    bool needItemDelay = false;    if(items_count > 0 || money > 0)    {        if (items_count > 0)        {            for(MailItemMap::iterator mailItemIter = mi.begin(); mailItemIter != mi.end(); ++mailItemIter)            {                MailItem& mailItem = mailItemIter->second;                if(!mailItem.item)                    continue;                mailItem.item_template = mailItem.item ? mailItem.item->GetEntry() : 0;                if( GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_GM_LOG_TRADE) )                {                    sLog.outCommand(GetAccountId(), "GM %s (Account: %u) mail item: %s (Entry: %u Count: %u) to player: %s (Account: %u)",                        GetPlayerName(), GetAccountId(), mailItem.item->GetProto()->Name1, mailItem.item->GetEntry(), mailItem.item->GetCount(), receiver.c_str(), rc_account);                }                pl->MoveItemFromInventory(mailItem.item->GetBagSlot(), mailItem.item->GetSlot(), true);                CharacterDatabase.BeginTransaction();                mailItem.item->DeleteFromInventoryDB();     //deletes item from character's inventory                mailItem.item->SaveToDB();                  // recursive and not have transaction guard into self, item not in inventory and can be save standalone                // owner in data will set at mail receive and item extracting                CharacterDatabase.PExecute("UPDATE item_instance SET owner_guid = '%u' WHERE guid='%u'", GUID_LOPART(rc), mailItem.item->GetGUIDLow());                CharacterDatabase.CommitTransaction();            }            // if item send to character at another account, then apply item delivery delay            needItemDelay = pl->GetSession()->GetAccountId() != rc_account;        }        if(money > 0 &&  GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_GM_LOG_TRADE))        {            sLog.outCommand(GetAccountId(),"GM %s (Account: %u) mail money: %u to player: %s (Account: %u)",                GetPlayerName(), GetAccountId(), money, receiver.c_str(), rc_account);        }    }    // If theres is an item, there is a one hour delivery delay if sent to another account's character.    uint32 deliver_delay = needItemDelay ? sWorld.getConfig(CONFIG_MAIL_DELIVERY_DELAY) : 0;    // will delete item or place to receiver mail list    WorldSession::SendMailTo(receive, MAIL_NORMAL, MAIL_STATIONERY_NORMAL, pl->GetGUIDLow(), GUID_LOPART(rc), subject, itemTextId, &mi, money, COD, MAIL_CHECK_MASK_NONE, deliver_delay);    CharacterDatabase.BeginTransaction();    pl->SaveInventoryAndGoldToDB();    CharacterDatabase.CommitTransaction();}
开发者ID:madzkull,项目名称:mangos,代码行数:101,


示例23: CHECK_PACKET_SIZE

//called when player takes item attached in mailvoid WorldSession::HandleTakeItem(WorldPacket & recv_data ){    CHECK_PACKET_SIZE(recv_data,8+4+4);    uint64 mailbox;    uint32 mailId;    uint32 itemId;    recv_data >> mailbox;    recv_data >> mailId;    recv_data >> itemId;                                    // item guid low?    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;    }    Item *it = pl->GetMItem(itemId);    ItemPosCountVec dest;    uint8 msg = _player->CanStoreItem( NULL_BAG, NULL_SLOT, dest, it, false );    if( msg == EQUIP_ERR_OK )    {        m->RemoveItem(itemId);        m->removedItems.push_back(itemId);        if (m->COD > 0)                                     //if there is COD, take COD money from player and send them to sender by mail        {            uint64 sender_guid = MAKE_NEW_GUID(m->sender, 0, HIGHGUID_PLAYER);            Player *receive = objmgr.GetPlayer(sender_guid);            uint32 sender_accId = 0;            if( GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_GM_LOG_TRADE) )            {                std::string sender_name;                if(receive)                {                    sender_accId = receive->GetSession()->GetAccountId();                    sender_name = receive->GetName();                }                else                {                    // can be calculated early                    sender_accId = objmgr.GetPlayerAccountIdByGUID(sender_guid);                    if(!objmgr.GetPlayerNameByGUID(sender_guid,sender_name))                        sender_name = objmgr.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(!receive)                sender_accId = objmgr.GetPlayerAccountIdByGUID(sender_guid);            // check player existence            if(receive || sender_accId)            {                WorldSession::SendMailTo(receive, MAIL_NORMAL, MAIL_STATIONERY_NORMAL, m->receiver, m->sender, m->subject, 0, NULL, m->COD, 0, 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_BAG_FULL, msg);}
开发者ID:Crashuncle,项目名称:mangos,代码行数:91,


示例24: MAKE_NEW_GUID

//called when player takes item attached in mailvoid WorldSession::HandleMailTakeItem(WorldPacket & recv_data){    uint64 mailbox;    uint32 mailId;    uint32 itemId;    recv_data >> mailbox;    recv_data >> mailId;    recv_data >> itemId;                                    // item guid low    if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX))        return;    Player* player = _player;    Mail* m = player->GetMail(mailId);    if (!m || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL))    {        player->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_INTERNAL_ERROR);        return;    }    // prevent cheating with skip client money check    if (!player->HasEnoughMoney(m->COD))    {        player->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_NOT_ENOUGH_MONEY);        return;    }    Item* it = player->GetMItem(itemId);    ItemPosCountVec dest;    uint8 msg = _player->CanStoreItem(NULL_BAG, NULL_SLOT, dest, it, false);    if (msg == EQUIP_ERR_OK)    {        SQLTransaction trans = CharacterDatabase.BeginTransaction();        m->RemoveItem(itemId);        m->removedItems.push_back(itemId);        if (m->COD > 0)                                     //if there is COD, take COD money from player and send them to sender by mail        {            uint64 sender_guid = MAKE_NEW_GUID(m->sender, 0, HIGHGUID_PLAYER);            Player* receive = ObjectAccessor::FindPlayer(sender_guid);            uint32 sender_accId = 0;            if (!AccountMgr::IsPlayerAccount(GetSecurity()) && sWorld->getBoolConfig(CONFIG_GM_LOG_TRADE))            {                std::string sender_name;                if (receive)                {                    sender_accId = receive->GetSession()->GetAccountId();                    sender_name = receive->GetName();                }                else                {                    // can be calculated early                    sender_accId = sObjectMgr->GetPlayerAccountIdByGUID(sender_guid);                    if (!sObjectMgr->GetPlayerNameByGUID(sender_guid, sender_name))                        sender_name = sObjectMgr->GetTrinityStringForDBCLocale(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->GetTemplate()->Name1.c_str(), it->GetEntry(), it->GetCount(), m->COD, sender_name.c_str(), sender_accId);            }            else if (!receive)                sender_accId = sObjectMgr->GetPlayerAccountIdByGUID(sender_guid);            // check player existence            if (receive || sender_accId)            {                MailDraft(m->subject, "")                    .AddMoney(m->COD)                    .SendMailTo(trans, MailReceiver(receive, m->sender), MailSender(MAIL_NORMAL, m->receiver), MAIL_CHECK_MASK_COD_PAYMENT);            }            player->ModifyMoney(-int32(m->COD));        }        m->COD = 0;        m->state = MAIL_STATE_CHANGED;        player->m_mailsUpdated = true;        player->RemoveMItem(it->GetGUIDLow());        uint32 count = it->GetCount();                      // save counts before store and possible merge with deleting        player->MoveItemToInventory(dest, it, true);        player->SaveInventoryAndGoldToDB(trans);        player->_SaveMail(trans);        CharacterDatabase.CommitTransaction(trans);        player->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_OK, 0, itemId, count);    }    else        player->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_EQUIP_ERROR, msg);}
开发者ID:Neecro,项目名称:SkyFireEMU_rebase,代码行数:95,


示例25: memset

//.........这里部分代码省略.........    for (uint32 i = 0; i < itemsCount; ++i)    {        Item* item = items[i];        uint32 auctionTime = uint32(etime * sWorld->getRate(RATE_AUCTION_TIME));        AuctionHouseObject* auctionHouse = sAuctionMgr->GetAuctionsMap(creature->getFaction());        uint32 deposit = sAuctionMgr->GetAuctionDeposit(auctionHouseEntry, etime, item, finalCount);        if (!_player->HasEnoughMoney((uint64)deposit))        {            SendAuctionCommandResult(NULL, AUCTION_SELL_ITEM, ERR_AUCTION_NOT_ENOUGHT_MONEY);            return;        }        _player->ModifyMoney(-int32(deposit));        AuctionEntry* AH = new AuctionEntry;        AH->Id = sObjectMgr->GenerateAuctionID();        if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION))            AH->auctioneer = 174444;        else            AH->auctioneer = GUID_LOPART(auctioneer);        ASSERT(sObjectMgr->GetCreatureData(AH->auctioneer)); // Tentative de vendre un item a un pnj qui n'existe pas, mieux vaut crash ici sinon l'item en question risque de disparaitre tout simplement        // Required stack size of auction matches to current item stack size, just move item to auctionhouse        if (itemsCount == 1 && item->GetCount() == count[i])        {            if (GetSecurity() > SEC_PLAYER && sWorld->getBoolConfig(CONFIG_GM_LOG_TRADE))            {                sLog->outCommand(GetAccountId(), "", GetPlayer()->GetGUIDLow(), GetPlayer()->GetName(), 0, "", 0, "",                                 "GM %s (Account: %u) create auction: %s (Entry: %u Count: %u)",                                 GetPlayerName().c_str(), GetAccountId(), item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetCount());            }            AH->itemGUIDLow = item->GetGUIDLow();            AH->itemEntry = item->GetEntry();            AH->itemCount = item->GetCount();            AH->owner = _player->GetGUIDLow();            AH->startbid = bid;            AH->bidder = 0;            AH->bid = 0;            AH->buyout = buyout;            AH->expire_time = time(NULL) + auctionTime;            AH->deposit = deposit;            AH->auctionHouseEntry = auctionHouseEntry;            sLog->outInfo(LOG_FILTER_NETWORKIO, "CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) to auctioneer %u with count %u with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u", _player->GetName(), _player->GetGUIDLow(), item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetGUIDLow(), AH->auctioneer, item->GetCount(), bid, buyout, auctionTime, AH->GetHouseId());            sAuctionMgr->AddAItem(item);            auctionHouse->AddAuction(AH);            _player->MoveItemFromInventory(item->GetBagSlot(), item->GetSlot(), true);            SQLTransaction trans = CharacterDatabase.BeginTransaction();            item->DeleteFromInventoryDB(trans);            item->SaveToDB(trans);            AH->SaveToDB(trans);            _player->SaveInventoryAndGoldToDB(trans);            CharacterDatabase.CommitTransaction(trans);            SendAuctionCommandResult(AH, AUCTION_SELL_ITEM, ERR_AUCTION_OK);            GetPlayer()->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CREATE_AUCTION, 1);            return;        }
开发者ID:Odiis,项目名称:MistCore,代码行数:67,



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


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