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

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

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

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

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

示例1: GetPlayer

void ClientSession::HandleMessagechatOpcode(WorldPacket & recv_data){    uint32 type;    uint32 lang;    recv_data >> type;    recv_data >> lang;    if (type >= MAX_CHAT_MSG_TYPE)    {        sLog->outError("CHAT: Wrong message type received: %u", type);        recv_data.rfinish();        return;    }    Player* sender = GetPlayer();    // prevent talking at unknown language (cheating)    LanguageDesc const* langDesc = GetLanguageDescByID(lang);    if (!langDesc)    {        SendNotification(LANG_UNKNOWN_LANGUAGE);        recv_data.rfinish();        return;    }    bool ignoreChecks = false;    if (lang == LANG_ADDON)    {        // LANG_ADDON is only valid for the following message types        switch (type)        {            case CHAT_MSG_PARTY:            case CHAT_MSG_RAID:            case CHAT_MSG_GUILD:            case CHAT_MSG_BATTLEGROUND:            case CHAT_MSG_WHISPER:                ignoreChecks = true;                break;            default:                sLog->outError("Player %s (GUID: %u) sent a chatmessage with an invalid language/message type combination",                    GetPlayer()->GetName(), GetPlayer()->GetGUIDLow());                recv_data.rfinish();                return;        }    }    std::string to, channel, msg, temp;    switch (type)    {        case CHAT_MSG_SAY:        case CHAT_MSG_EMOTE:        case CHAT_MSG_YELL:        case CHAT_MSG_PARTY:        case CHAT_MSG_PARTY_LEADER:        case CHAT_MSG_GUILD:        case CHAT_MSG_OFFICER:        case CHAT_MSG_RAID:        case CHAT_MSG_RAID_LEADER:        case CHAT_MSG_RAID_WARNING:        case CHAT_MSG_BATTLEGROUND:        case CHAT_MSG_BATTLEGROUND_LEADER:            recv_data >> msg;            break;        case CHAT_MSG_WHISPER:            recv_data >> to;            recv_data >> msg;            break;        case CHAT_MSG_CHANNEL:            recv_data >> channel;            recv_data >> msg;            break;        case CHAT_MSG_AFK:        case CHAT_MSG_DND:            recv_data >> msg;            if (checkMsgForCommand(msg, recv_data) || checkMsgForMute(sender, recv_data))                return;            ignoreChecks = true;            break;    }    if (!ignoreChecks)    {        if (msg.empty())            return;        if (checkMsgForCommand(msg, recv_data) || checkMsgForMute(sender, recv_data))        {            if (!AccountMgr::IsVIPorPlayer(GetSecurity()))            {                /*if (Player* pPlayer = sender->GetSelectedPlayer())                    sGMQualityManager->OnGMChat(CHAT_MSG_SYSTEM, sender, msg, pPlayer->GetName());                else*/                    sGMQualityManager->OnGMChat(CHAT_MSG_SYSTEM, sender, msg);            }            return;        }        StripLineInvisibleChars(msg);//.........这里部分代码省略.........
开发者ID:Allowed,项目名称:Strawberry335,代码行数:101,


示例2: MAKE_NEW_GUID

/** * Handles the packet sent by the client when taking an item from the mail. */void 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* 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 = sObjectMgr.GetPlayer(sender_guid);            uint32 sender_accId = 0;            if( GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_BOOL_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.GetStringForDBCLocale(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 = sObjectMgr.GetPlayerAccountIdByGUID(sender_guid);            // check player existence            if(receive || sender_accId)            {                MailDraft(m->subject, "")                    .AddMoney(m->COD)                    .SendMailTo(MailReceiver(receive, m->sender), MailSender(MAIL_NORMAL, m->receiver), 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:Bootz,项目名称:diamondcore,代码行数:97,


示例3: DEBUG_LOG

//.........这里部分代码省略.........            if (msg.empty())                break;            if (type == CHAT_MSG_SAY)                GetPlayer()->Say(msg, lang);            else if (type == CHAT_MSG_EMOTE)                GetPlayer()->TextEmote(msg);            else if (type == CHAT_MSG_YELL)                GetPlayer()->Yell(msg, lang);        } break;        case CHAT_MSG_WHISPER:        {            std::string to, msg;            recv_data >> to;            recv_data >> msg;            if (msg.empty())                break;            if (ChatHandler(this).ParseCommands(msg.c_str()))                break;            if (!processChatmessageFurtherAfterSecurityChecks(msg, lang))                return;            if (!normalizePlayerName(to))            {                SendPlayerNotFoundNotice(to);                break;            }            Player* player = sObjectMgr.GetPlayer(to.c_str());            uint32 tSecurity = GetSecurity();            uint32 pSecurity = player ? player->GetSession()->GetSecurity() : SEC_PLAYER;            if (!player || (tSecurity == SEC_PLAYER && pSecurity > SEC_PLAYER && !player->isAcceptWhispers()))            {                SendPlayerNotFoundNotice(to);                return;            }            if (!sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_INTERACTION_CHAT) && tSecurity == SEC_PLAYER && pSecurity == SEC_PLAYER)            {                if (GetPlayer()->GetTeam() != player->GetTeam())                {                    SendWrongFactionNotice();                    return;                }            }            GetPlayer()->Whisper(msg, lang, player->GetObjectGuid());        } break;        case CHAT_MSG_PARTY:        {            std::string msg;            recv_data >> msg;            if (msg.empty())                break;            if (ChatHandler(this).ParseCommands(msg.c_str()))                break;            if (!processChatmessageFurtherAfterSecurityChecks(msg, lang))                return;
开发者ID:Ccaz,项目名称:mangos-tbc,代码行数:67,


示例4: CHECK_PACKET_SIZE

void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data ){    CHECK_PACKET_SIZE(recv_data,1+1+1+1+1+1+1+1+1+1);    std::string name;    uint8 race_,class_;    recv_data >> name;    // recheck with known string size    CHECK_PACKET_SIZE(recv_data,(name.size()+1)+1+1+1+1+1+1+1+1+1);    recv_data >> race_;    recv_data >> class_;    WorldPacket data(SMSG_CHAR_CREATE, 1);                  // returned with diff.values in all cases    if(GetSecurity() == SEC_PLAYER)    {        if(uint32 mask = sWorld.getConfig(CONFIG_CHARACTERS_CREATING_DISABLED))        {            bool disabled = false;            uint32 team = Player::TeamForRace(race_);            switch(team)            {                case ALLIANCE: disabled = mask & (1<<0); break;                case HORDE:    disabled = mask & (1<<1); break;            }            if(disabled)            {                data << (uint8)CHAR_CREATE_DISABLED;                SendPacket( &data );                return;            }        }    }    ChrClassesEntry const* classEntry = sChrClassesStore.LookupEntry(class_);    ChrRacesEntry const* raceEntry = sChrRacesStore.LookupEntry(race_);    if( !classEntry || !raceEntry )    {        data << (uint8)CHAR_CREATE_FAILED;        SendPacket( &data );        sLog.outError("Class: %u or Race %u not found in DBC (Wrong DBC files?) or Cheater?", class_, race_);        return;    }    // prevent character creating Expansion race without Expansion account    if (raceEntry->addon > Expansion())    {        data << (uint8)CHAR_CREATE_EXPANSION;        sLog.outError("Expansion %u account:[%d] tried to Create character with expansion %u race (%u)",Expansion(),GetAccountId(),raceEntry->addon,race_);        SendPacket( &data );        return;    }    // prevent character creating Expansion class without Expansion account    if (classEntry->addon > Expansion())    {        data << (uint8)CHAR_CREATE_EXPANSION_CLASS;        sLog.outError("Expansion %u account:[%d] tried to Create character with expansion %u class (%u)",Expansion(),GetAccountId(),classEntry->addon,class_);        SendPacket( &data );        return;    }    // prevent character creating with invalid name    if(!normalizePlayerName(name))    {        data << (uint8)CHAR_NAME_INVALID_CHARACTER;        SendPacket( &data );        sLog.outError("Account:[%d] but tried to Create character with empty [name] ",GetAccountId());        return;    }    // check name limitations    if(!ObjectMgr::IsValidName(name,true))    {        data << (uint8)CHAR_NAME_INVALID_CHARACTER;        SendPacket( &data );        return;    }    if(GetSecurity() == SEC_PLAYER && objmgr.IsReservedName(name))    {        data << (uint8)CHAR_NAME_RESERVED;        SendPacket( &data );        return;    }    if(objmgr.GetPlayerGUIDByName(name))    {        data << (uint8)CHAR_CREATE_NAME_IN_USE;        SendPacket( &data );        return;    }    QueryResult *resultacct = loginDatabase.PQuery("SELECT SUM(numchars) FROM realmcharacters WHERE acctid = '%d'", GetAccountId());//.........这里部分代码省略.........
开发者ID:Naicisum,项目名称:mangos,代码行数:101,


示例5: 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:mfooo,项目名称:Core,代码行数:101,


示例6: data

void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data ){    std::string name;    uint8 race_, class_;    recv_data >> name;    recv_data >> race_;    recv_data >> class_;    // extract other data required for player creating    uint8 gender, skin, face, hairStyle, hairColor, facialHair, outfitId;    recv_data >> gender >> skin >> face;    recv_data >> hairStyle >> hairColor >> facialHair >> outfitId;    WorldPacket data(SMSG_CHAR_CREATE, 1);                  // returned with diff.values in all cases    if(GetSecurity() == SEC_PLAYER)    {        if(uint32 mask = sWorld.getConfig(CONFIG_UINT32_CHARACTERS_CREATING_DISABLED))        {            bool disabled = false;            Team team = Player::TeamForRace(race_);            switch(team)            {                case ALLIANCE: disabled = mask & (1 << 0); break;                case HORDE:    disabled = mask & (1 << 1); break;            }            if(disabled)            {                data << (uint8)CHAR_CREATE_DISABLED;                SendPacket( &data );                return;            }        }    }    ChrClassesEntry const* classEntry = sChrClassesStore.LookupEntry(class_);    ChrRacesEntry const* raceEntry = sChrRacesStore.LookupEntry(race_);    if( !classEntry || !raceEntry )    {        data << (uint8)CHAR_CREATE_FAILED;        SendPacket( &data );        sLog.outError("Class: %u or Race %u not found in DBC (Wrong DBC files?) or Cheater?", class_, race_);        return;    }    // prevent character creating with invalid name    if (!normalizePlayerName(name))    {        data << (uint8)CHAR_NAME_NO_NAME;        SendPacket( &data );        sLog.outError("Account:[%d] but tried to Create character with empty [name]", GetAccountId());        return;    }    // check name limitations    uint8 res = ObjectMgr::CheckPlayerName(name, true);    if (res != CHAR_NAME_SUCCESS)    {        data << uint8(res);        SendPacket( &data );        return;    }    if (GetSecurity() == SEC_PLAYER && sObjectMgr.IsReservedName(name))    {        data << (uint8)CHAR_NAME_RESERVED;        SendPacket( &data );        return;    }    if (sObjectMgr.GetPlayerGuidByName(name))    {        data << (uint8)CHAR_CREATE_NAME_IN_USE;        SendPacket( &data );        return;    }    QueryResult *resultacct = LoginDatabase.PQuery("SELECT SUM(numchars) FROM realmcharacters WHERE acctid = '%u'", GetAccountId());    if (resultacct)    {        Field *fields=resultacct->Fetch();        uint32 acctcharcount = fields[0].GetUInt32();        delete resultacct;        if (acctcharcount >= sWorld.getConfig(CONFIG_UINT32_CHARACTERS_PER_ACCOUNT))        {            data << (uint8)CHAR_CREATE_ACCOUNT_LIMIT;            SendPacket( &data );            return;        }    }    QueryResult *result = CharacterDatabase.PQuery("SELECT COUNT(guid) FROM characters WHERE account = '%u'", GetAccountId());    uint8 charcount = 0;    if ( result )//.........这里部分代码省略.........
开发者ID:Swockale,项目名称:portalzero,代码行数:101,


示例7: 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 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);    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_CANNOT_TRADE_THAT);        return;    }    if ((it->GetProto()->Flags & ITEM_FLAG_CONJURED) || it->GetUInt32Value(ITEM_FIELD_DURATION))    {        SendAuctionCommandResult(NULL, AUCTION_STARTED, AUCTION_ERR_INVENTORY, EQUIP_ERR_CANNOT_TRADE_THAT);        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:Calixa,项目名称:mangos-tbc,代码行数:101,


示例8: GetPlayer

//this void creates new auction and adds auction to some auctionhousevoid WorldSession::HandleAuctionSellItem(WorldPacket & recv_data){    sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_AUCTION_SELL_ITEM");    uint64 auctioneer, item;    uint64 bid, buyout;    uint32 etime, count;    uint32 unk = 1;    recv_data >> auctioneer;                                // uint64    recv_data >> unk;                                       // 1    recv_data >> item;                                      // uint64    recv_data >> count;                                     // 3.2.2, number of items being auctioned    recv_data >> bid;                                       // uint64, 4.0.6    recv_data >> buyout;                                    // uint64, 4.0.6    recv_data >> etime;                                     // uint32    Player* player = GetPlayer();    if (!item || !bid || !etime)        return;                                             //check for cheaters    Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(auctioneer, UNIT_NPC_FLAG_AUCTIONEER);    if (!creature)    {        sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: HandleAuctionSellItem - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(auctioneer)));        return;    }    AuctionHouseEntry const* auctionHouseEntry = AuctionHouseMgr::GetAuctionHouseEntry(creature->getFaction());    if (!auctionHouseEntry)    {        sLog->outDebug(LOG_FILTER_NETWORKIO, "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_STATE_DIED))        GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);    Item* it = player->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", player->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 equiped empty bag to auction)    if (!it)    {        SendAuctionCommandResult(0, AUCTION_SELL_ITEM, ERR_ITEM_NOT_FOUND);        return;    }    if (!it->CanBeTraded())    {        SendAuctionCommandResult(0, AUCTION_SELL_ITEM, AUCTION_INTERNAL_ERROR);        return;    }    if (it->GetTemplate()->Flags & ITEM_PROTO_FLAG_CONJURED || it->GetUInt32Value(ITEM_FIELD_DURATION))    {        SendAuctionCommandResult(0, AUCTION_SELL_ITEM, AUCTION_INTERNAL_ERROR);        return;    }    if (it->IsNotEmptyBag())    {        SendAuctionCommandResult(0, AUCTION_SELL_ITEM, AUCTION_INTERNAL_ERROR);        return;    }    AuctionHouseObject* auctionHouse = sAuctionMgr->GetAuctionsMap(creature->getFaction());    //we have to take deposit :    uint64 deposit = sAuctionMgr->GetAuctionDeposit(auctionHouseEntry, etime, it, count);    if (!player->HasEnoughMoney(deposit))    {        SendAuctionCommandResult(0, AUCTION_SELL_ITEM, ERR_NOT_ENOUGH_MONEY);        return;    }    if (AccountMgr::IsGMAccount(GetSecurity()) && sWorld->getBoolConfig(CONFIG_GM_LOG_TRADE))    {        sLog->outCommand(GetAccountId(), "GM %s (Account: %u) create auction: %s (Entry: %u Count: %u)",//.........这里部分代码省略.........
开发者ID:OneB1t,项目名称:SkyfireBG,代码行数:101,


示例9: CHECK_PACKET_SIZE

//this void creates new auction and adds auction to some auctionhousevoid WorldSession::HandleAuctionSellItem( WorldPacket & recv_data ){    CHECK_PACKET_SIZE(recv_data,8+8+4+4+4);    uint64 auctioneer, item;    uint32 etime, bid, buyout;    recv_data >> auctioneer >> item;    recv_data >> bid >> buyout >> etime;    Player *pl = GetPlayer();    if (!item || !bid || !etime)        return;                                             //check for cheaters    Creature *pCreature = ObjectAccessor::GetNPCIfCanInteractWith(*_player, 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;    }    // 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(objmgr.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 equiped 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;    }    uint32 location = AuctioneerFactionToLocation(pCreature->getFaction());    AuctionHouseObject * mAuctions;    mAuctions = objmgr.GetAuctionsMap( location );    //we have to take deposit :    uint32 deposit = objmgr.GetAuctionDeposit( location, etime, it );    if ( pl->GetMoney() < deposit )    {        SendAuctionCommandResult(0, AUCTION_SELL_ITEM, AUCTION_NOT_ENOUGHT_MONEY);        return;    }    if( GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_GM_LOG_TRADE) )    {        sLog.outCommand("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.getRate(RATE_AUCTION_TIME));    AuctionEntry *AH = new AuctionEntry;    AH->Id = objmgr.GenerateAuctionID();    AH->auctioneer = GUID_LOPART(auctioneer);    AH->item_guidlow = GUID_LOPART(item);    AH->item_template = it->GetEntry();    AH->owner = pl->GetGUIDLow();    AH->startbid = bid;    AH->bidder = 0;    AH->bid = 0;    AH->buyout = buyout;    AH->time = time(NULL) + auction_time;    AH->deposit = deposit;//.........这里部分代码省略.........
开发者ID:Artea,项目名称:mangos-svn,代码行数:101,


示例10: GetLanguageDescByID

//.........这里部分代码省略.........            if(msg.empty())                break;            if(type == CHAT_MSG_SAY)                GetPlayer()->Say(msg, lang);            else if(type == CHAT_MSG_EMOTE)                GetPlayer()->TextEmote(msg);            else if(type == CHAT_MSG_YELL)                GetPlayer()->Yell(msg, lang);        } break;        case CHAT_MSG_WHISPER:        {            std::string to, msg;            recv_data >> to;            recv_data >> msg;            if (!processChatmessageFurtherAfterSecurityChecks(msg, lang))                return;            if(msg.empty())                break;            if(!normalizePlayerName(to))            {                WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1));                data<<to;                SendPacket(&data);                break;            }            Player *player = sObjectMgr.GetPlayer(to.c_str());            uint32 tSecurity = GetSecurity();            uint32 pSecurity = player ? player->GetSession()->GetSecurity() : SEC_PLAYER;            if (!player || (tSecurity == SEC_PLAYER && pSecurity > SEC_PLAYER && !player->isAcceptWhispers()))            {                WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1));                data<<to;                SendPacket(&data);                return;            }            if (!sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHAT) && tSecurity == SEC_PLAYER && pSecurity == SEC_PLAYER )            {                uint32 sidea = GetPlayer()->GetTeam();                uint32 sideb = player->GetTeam();                if( sidea != sideb )                {                    WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1));                    data<<to;                    SendPacket(&data);                    return;                }            }            // Playerbot mod: handle whispered command to bot            if (player->GetPlayerbotAI())            {                player->GetPlayerbotAI()->HandleCommand(msg, *GetPlayer());                GetPlayer()->m_speakTime = 0;                GetPlayer()->m_speakCount = 0;            }            else                // END Playerbot mod            GetPlayer()->Whisper(msg, lang,player->GetGUID());
开发者ID:Chrissuit33,项目名称:mangos,代码行数:67,


示例11: DEBUG_LOG

//.........这里部分代码省略.........        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);    for (uint32 i = 0; i < itemCount; ++i)    {        ObjectGuid itemGuid = guids[i];        if (!itemGuid)            continue;        uint32 stackSize = stackSizes[i];        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);            continue;        }        // 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);            continue;        }        if (!it->CanBeTraded())        {            SendAuctionCommandResult(NULL, AUCTION_STARTED, AUCTION_ERR_INVENTORY, EQUIP_ERR_CANNOT_TRADE_THAT);            continue;        }        if ((it->GetProto()->Flags & ITEM_FLAG_CONJURED) || it->GetUInt32Value(ITEM_FIELD_DURATION))        {            SendAuctionCommandResult(NULL, AUCTION_STARTED, AUCTION_ERR_INVENTORY, EQUIP_ERR_CANNOT_TRADE_THAT);            continue;        }        // check money for deposit        uint32 deposit = AuctionHouseMgr::GetAuctionDeposit(auctionHouseEntry, etime, it);        if (pl->GetMoney() < deposit)        {            SendAuctionCommandResult(NULL, AUCTION_STARTED, AUCTION_ERR_NOT_ENOUGH_MONEY);            continue;        }        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());        }        if (stackSize == 0)            stackSize = 1;        if (stackSize > it->GetMaxStackCount())             // too big stack size            stackSize = it->GetMaxStackCount();        if (!pl->HasItemCount(it->GetEntry(), stackSize))   // not enough items            continue;        Item *newItem = it->CloneItem(stackSize);        pl->DestroyItemCount(it, stackSize, true);        pl->ModifyMoney(-int32(deposit));        AuctionEntry* AH = auctionHouse->AddAuction(auctionHouseEntry, newItem, 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);        GetPlayer()->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CREATE_AUCTION, 1);    }}
开发者ID:Tasssadar,项目名称:mangos-arm,代码行数:101,


示例12: GetPlayer

//.........这里部分代码省略.........    {        pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_ENOUGH_MONEY);        return;    }    Player *receive = objmgr.GetPlayer(rc);    uint32 rc_team = 0;    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 = objmgr.GetPlayerTeamByGUID(rc);        QueryResult* result = CharacterDatabase.PQuery("SELECT COUNT(*) FROM mail WHERE receiver = '%u'", GUID_LOPART(rc));        if(result)        {            Field *fields = result->Fetch();            mails_count = fields[0].GetUInt32();            delete result;        }    }    //do not allow to have more than 100 mails in mailbox.. mails count is in opcode uint8!!! - so max can be 255..    if (mails_count > 100)    {        pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_RECIPIENT_CAP_REACHED);        return;    }    // test the receiver's Faction...    if (!sWorld.getConfig(CONFIG_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 = 0;    if(receive)        rc_account = receive->GetSession()->GetAccountId();    else        rc_account = objmgr.GetPlayerAccountIdByGUID(rc);    if (items_count)    {        for(MailItemMap::iterator mailItemIter = mi.begin(); mailItemIter != mi.end(); ++mailItemIter)        {            MailItem& mailItem = mailItemIter->second;            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))
开发者ID:Attractivee,项目名称:dfteam,代码行数:67,


示例13: CHECK_PACKET_SIZE

//.........这里部分代码省略.........        SendPacket( &data );        return;    }    // prevent character creating with invalid name    if(name.size() == 0)    {        data << (uint8)CHAR_NAME_INVALID_CHARACTER;        SendPacket( &data );        sLog.outError("Account:[%d] but tried to Create character with empty [name] ",GetAccountId());        return;    }    normalizePlayerName(name);    if(name.find_first_of(notAllowedChars)!=name.npos)    {        data << (uint8)CHAR_NAME_INVALID_CHARACTER;        SendPacket( &data );        sLog.outError("Account:[%d] tried to Create character whit empty name ",GetAccountId());        return;    }    if(objmgr.GetPlayerGUIDByName(name))    {        data << (uint8)CHAR_CREATE_NAME_IN_USE;        SendPacket( &data );        return;    }    QueryResult *result = sDatabase.PQuery("SELECT COUNT(guid) FROM `character` WHERE `account` = '%d'", GetAccountId());    uint8 charcount = 0;    if ( result )    {        Field *fields=result->Fetch();        charcount = fields[0].GetUInt8();        if (charcount >= 10)        {            data << (uint8)CHAR_CREATE_ACCOUNT_LIMIT;            SendPacket( &data );            delete result;            return;        }        delete result;    }    bool AllowTwoSideAccounts = sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_ACCOUNTS);    if(sWorld.IsPvPRealm()&&!AllowTwoSideAccounts)    {        QueryResult *result2 = sDatabase.PQuery("SELECT `race` FROM `character` WHERE `account` = '%u' LIMIT 1", GetAccountId());        if(result2)        {            Field * field = result2->Fetch();            uint8 race = field[0].GetUInt32();            delete result2;            uint32 team=0;            if(race > 0)                team = Player::TeamForRace(race);            uint32 team_=0;            //if(race_ > 0)            team_ = Player::TeamForRace(race_);            if(team != team_ && GetSecurity() < SEC_GAMEMASTER)            {                data << (uint8)CHAR_CREATE_PVP_TEAMS_VIOLATION;                SendPacket( &data );                return;            }        }    }    Player * pNewChar = new Player(this);    recv_data.rpos(0);    if(pNewChar->Create( objmgr.GenerateLowGuid(HIGHGUID_PLAYER), recv_data ))    {        // Player create        pNewChar->SaveToDB();        charcount+=1;        loginDatabase.PExecute("INSERT INTO `realmcharacters` (`numchars`, `acctid`, `realmid`) VALUES (%d, %d, %d) ON DUPLICATE KEY UPDATE `numchars` = '%d'", charcount, GetAccountId(), realmID, charcount);        delete pNewChar;    }    else    {        // Player not create (race/class problem?)        delete pNewChar;        data << (uint8)CHAR_CREATE_ERROR;        SendPacket( &data );        return;    }    data << (uint8)CHAR_CREATE_SUCCESS;    SendPacket( &data );    sLog.outBasic("Account: %d Create New Character:[%s]",GetAccountId(),name.c_str());}
开发者ID:Artea,项目名称:mangos-svn,代码行数:101,


示例14: GetPlayer

void WorldSession::HandleMessagechatOpcode(WorldPacket & recvData){    uint32 type;    uint32 lang;    recvData >> type;    recvData >> lang;    if (type >= MAX_CHAT_MSG_TYPE)    {        sLog->outError("CHAT: Wrong message type received: %u", type);        recvData.rfinish();        return;    }    Player* sender = GetPlayer();    //sLog->outDebug("CHAT: packet received. type %u, lang %u", type, lang);    // pussywizard: chatting on most chat types requires 2 hours played to prevent spam/abuse    if (AccountMgr::IsPlayerAccount(GetSecurity()))        switch (type)        {            case CHAT_MSG_ADDON:            case CHAT_MSG_PARTY:            case CHAT_MSG_RAID:            case CHAT_MSG_GUILD:            case CHAT_MSG_OFFICER:            case CHAT_MSG_AFK:            case CHAT_MSG_DND:            case CHAT_MSG_RAID_LEADER:            case CHAT_MSG_RAID_WARNING:            case CHAT_MSG_BATTLEGROUND:            case CHAT_MSG_BATTLEGROUND_LEADER:            case CHAT_MSG_PARTY_LEADER:                break;            default:                if (sender->GetTotalPlayedTime() < 2*HOUR)                {                    SendNotification("Speaking is allowed after playing for at least 2 hours. You may use party and guild chat.");                    recvData.rfinish();                    return;                }        }    // pussywizard:    switch (type)    {        case CHAT_MSG_SAY:        case CHAT_MSG_YELL:        case CHAT_MSG_EMOTE:        case CHAT_MSG_TEXT_EMOTE:        case CHAT_MSG_AFK:        case CHAT_MSG_DND:            if (sender->IsSpectator())            {                recvData.rfinish();                return;            }    }    // prevent talking at unknown language (cheating)    LanguageDesc const* langDesc = GetLanguageDescByID(lang);    if (!langDesc)    {        SendNotification(LANG_UNKNOWN_LANGUAGE);        recvData.rfinish();        return;    }    if (langDesc->skill_id != 0 && !sender->HasSkill(langDesc->skill_id))    {        // also check SPELL_AURA_COMPREHEND_LANGUAGE (client offers option to speak in that language)        Unit::AuraEffectList const& langAuras = sender->GetAuraEffectsByType(SPELL_AURA_COMPREHEND_LANGUAGE);        bool foundAura = false;        for (Unit::AuraEffectList::const_iterator i = langAuras.begin(); i != langAuras.end(); ++i)        {            if ((*i)->GetMiscValue() == int32(lang))            {                foundAura = true;                break;            }        }        if (!foundAura)        {            SendNotification(LANG_NOT_LEARNED_LANGUAGE);            recvData.rfinish();            return;        }    }    if (lang == LANG_ADDON)    {        // LANG_ADDON is only valid for the following message types        switch (type)        {            case CHAT_MSG_PARTY:            case CHAT_MSG_RAID:            case CHAT_MSG_GUILD:            case CHAT_MSG_BATTLEGROUND:            case CHAT_MSG_WHISPER://.........这里部分代码省略.........
开发者ID:AzerothShard-Dev,项目名称:azerothcore,代码行数:101,


示例15: CHECK_PACKET_SIZE

//.........这里部分代码省略.........                break;            if(type == CHAT_MSG_SAY)                GetPlayer()->Say(msg, lang);            else if(type == CHAT_MSG_EMOTE)                GetPlayer()->TextEmote(msg);            else if(type == CHAT_MSG_YELL)                GetPlayer()->Yell(msg, lang);        } break;        case CHAT_MSG_WHISPER:        {            std::string to, msg;            recv_data >> to;            CHECK_PACKET_SIZE(recv_data,4+4+(to.size()+1)+1);            recv_data >> msg;            // strip invisible characters for non-addon messages            if (lang != LANG_ADDON && sWorld.getConfig(CONFIG_CHAT_FAKE_MESSAGE_PREVENTING))                stripLineInvisibleChars(msg);            if(msg.empty())                break;            if(!normalizePlayerName(to))            {                WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1));                data<<to;                SendPacket(&data);                break;            }            Player *player = objmgr.GetPlayer(to.c_str());            uint32 tSecurity = GetSecurity();            uint32 pSecurity = player ? player->GetSession()->GetSecurity() : 0;            if(!player || tSecurity == SEC_PLAYER && pSecurity > SEC_PLAYER && !player->isAcceptWhispers())            {                WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1));                data<<to;                SendPacket(&data);                return;            }            if (!sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHAT) && tSecurity == SEC_PLAYER && pSecurity == SEC_PLAYER )            {                uint32 sidea = GetPlayer()->GetTeam();                uint32 sideb = player->GetTeam();                if( sidea != sideb )                {                    WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1));                    data<<to;                    SendPacket(&data);                    return;                }            }            GetPlayer()->Whisper(msg, lang,player->GetGUID());        } break;        case CHAT_MSG_PARTY:        {            std::string msg = "";            recv_data >> msg;            if(msg.empty())                break;
开发者ID:megamage,项目名称:mangos,代码行数:67,


示例16: DEBUG_LOG

void WorldSession::HandleCastSpellOpcode(WorldPacket& recvPacket){    uint32 spellId;    uint8  cast_count;    recvPacket >> spellId;    recvPacket >> cast_count;    // ignore for remote control state (for player case)    Unit* mover = _player->GetMover();    if (mover != _player && mover->GetTypeId()==TYPEID_PLAYER)    {        recvPacket.rpos(recvPacket.wpos());                 // prevent spam at ignore packet        return;    }    DEBUG_LOG("WORLD: got cast spell packet, spellId - %u, cast_count: %u data length = %i",        spellId, cast_count, (uint32)recvPacket.size());    SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId );    if(!spellInfo)    {        sLog.outError("WORLD: unknown spell id %u", spellId);        recvPacket.rpos(recvPacket.wpos());                 // prevent spam at ignore packet        return;    }    if (mover->GetTypeId()==TYPEID_PLAYER)    {        // not have spell in spellbook or spell passive and not casted by client        if (!((Player*)mover)->HasActiveSpell (spellId) || IsPassiveSpell(spellInfo))        {            sLog.outError("World: Player %u casts spell %u which he shouldn't have", mover->GetGUIDLow(), spellId);            //cheater? kick? ban?            recvPacket.rpos(recvPacket.wpos());                 // prevent spam at ignore packet            return;        }        // Anti WPE Honorless Target        if(GetSecurity() < SECURITY_MODERATOR && spellId == 2479)        {            sLog.outError("WPE PROTECTION: Player '%s' wants to cast Honorless Target", GetPlayerName());            sLog.outInterest("WPE PROTECTION: Player '%s' chce castit Honorless Target", GetPlayerName());            sWorld.BanAccount(BAN_CHARACTER, GetPlayerName(), 0, "WPE Honorless Target Hack", "Casso's WPE Protection");            return;        }    }    else    {        // not have spell in spellbook or spell passive and not casted by client        if (!((Creature*)mover)->HasSpell(spellId) || IsPassiveSpell(spellInfo))        {            //cheater? kick? ban?            recvPacket.rpos(recvPacket.wpos());                 // prevent spam at ignore packet            return;        }    }    // client provided targets    SpellCastTargets targets;    recvPacket >> targets.ReadForCaster(_player);    // auto-selection buff level base at target level (in spellInfo)    if (Unit* target = targets.getUnitTarget())    {        // if rank not found then function return NULL but in explicit cast case original spell can be casted and later failed with appropriate error message        if (SpellEntry const *actualSpellInfo = sSpellMgr.SelectAuraRankForLevel(spellInfo, target->getLevel()))            spellInfo = actualSpellInfo;    }    Spell *spell = new Spell(_player, spellInfo, false);    spell->m_cast_count = cast_count;                       // set count of casts    spell->prepare(&targets);}
开发者ID:Nedj,项目名称:Mysteria4,代码行数:75,


示例17: SendAuctionCommandResult

//.........这里部分代码省略.........        {            SendAuctionCommandResult(0, AUCTION_SELL_ITEM, ERR_AUCTION_DATABASE_ERROR);            return;        }    }    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(deposit))        {            SendAuctionCommandResult(0, 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 = 23442;        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[i])        {            if (GetSecurity() > SEC_PLAYER && sWorld->getBoolConfig(CONFIG_GM_LOG_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->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().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->Id, AUCTION_SELL_ITEM, ERR_AUCTION_OK);
开发者ID:LORDofDOOM,项目名称:MMOCore,代码行数:66,


示例18: data

void WorldSession::HandleCharCreateOpcode(WorldPacket & recv_data ){    std::string name;    uint8 race_,class_;    recv_data >> name;    recv_data >> race_;    recv_data >> class_;    WorldPacket data(SMSG_CHAR_CREATE, 1);                  // returned with diff.values in all cases    if (GetSecurity() == SEC_PLAYER)    {        if (uint32 mask = sWorld.getConfig(CONFIG_CHARACTERS_CREATING_DISABLED))        {            bool disabled = false;            uint32 team = Player::TeamForRace(race_);            switch(team)            {                case ALLIANCE: disabled = mask & (1<<0); break;                case HORDE:    disabled = mask & (1<<1); break;            }            if (disabled)            {                data << (uint8)CHAR_CREATE_DISABLED;                SendPacket(&data);                return;            }        }    }    ChrClassesEntry const* classEntry = sChrClassesStore.LookupEntry(class_);    ChrRacesEntry const* raceEntry = sChrRacesStore.LookupEntry(race_);    if (!classEntry || !raceEntry )    {        data << (uint8)CHAR_CREATE_FAILED;        SendPacket(&data);        sLog.outError("Class: %u or Race %u not found in DBC (Wrong DBC files?) or Cheater?", class_, race_);        return;    }    // prevent character creating Expansion race without Expansion account    if (raceEntry->addon > Expansion())    {        data << (uint8)CHAR_CREATE_EXPANSION;        sLog.outError("Not Expansion 1 account:[%d] but tried to Create character with expansion 1 race (%u)",GetAccountId(),race_);        SendPacket(&data);        return;    }    // prevent character creating Expansion class without Expansion account    // TODO: use possible addon field in ChrClassesEntry in next dbc version    if (Expansion() < 2 && class_ == CLASS_DEATH_KNIGHT)    {        data << (uint8)CHAR_CREATE_EXPANSION;        sLog.outError("Not Expansion 2 account:[%d] but tried to Create character with expansion 2 class (%u)",GetAccountId(),class_);        SendPacket(&data);        return;    }    // prevent character creating with invalid name    if (!normalizePlayerName(name))    {        data << (uint8)CHAR_NAME_INVALID_CHARACTER;        SendPacket(&data);        sLog.outError("Account:[%d] but tried to Create character with empty [name] ",GetAccountId());        return;    }    // check name limitations    if (!ObjectMgr::IsValidName(name,true))    {        data << (uint8)CHAR_NAME_INVALID_CHARACTER;        SendPacket(&data);        return;    }    if (GetSecurity() == SEC_PLAYER && objmgr.IsReservedName(name))    {        data << (uint8)CHAR_NAME_RESERVED;        SendPacket(&data);        return;    }    if (objmgr.GetPlayerGUIDByName(name))    {        data << (uint8)CHAR_CREATE_NAME_IN_USE;        SendPacket(&data);        return;    }    QueryResult_AutoPtr resultacct = LoginDatabase.PQuery("SELECT SUM(numchars) FROM realmcharacters WHERE acctid = '%d'", GetAccountId());    if (resultacct )    {        Field *fields=resultacct->Fetch();        uint32 acctcharcount = fields[0].GetUInt32();//.........这里部分代码省略.........
开发者ID:Zekom,项目名称:NeoCore,代码行数:101,


示例19: GetPlayer

//.........这里部分代码省略.........        stmt->setUInt32(0, GUID_LOPART(rc));        result = CharacterDatabase.Query(stmt);        if (result)        {            Field* fields = result->Fetch();            receiveLevel = fields[0].GetUInt8();        }    }    //do not allow to have more than 100 mails in mailbox.. mails count is in opcode uint8!!! - so max can be 255..    if (mails_count > 100)    {        player->SendMailResult(0, MAIL_SEND, MAIL_ERR_RECIPIENT_CAP_REACHED);        return;    }    // test the receiver's Faction... or all items are account bound    bool accountBound = items_count ? true : false;    for (uint8 i = 0; i < items_count; ++i)    {        Item* item = player->GetItemByGuid(itemGUIDs[i]);        if (item)        {            ItemTemplate const* itemProto = item->GetTemplate();            if (!itemProto || !(itemProto->Flags & ITEM_PROTO_FLAG_BIND_TO_ACCOUNT))            {                accountBound = false;                break;            }        }    }    if (!accountBound && !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_MAIL) && player->GetTeam() != rc_team && AccountMgr::IsPlayerAccount(GetSecurity()))    {        player->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_YOUR_TEAM);        return;    }    if (receiveLevel < sWorld->getIntConfig(CONFIG_MAIL_LEVEL_REQ))    {        SendNotification(GetTrinityString(LANG_MAIL_RECEIVER_REQ), sWorld->getIntConfig(CONFIG_MAIL_LEVEL_REQ));        return;    }    uint32 rc_account = receive        ? receive->GetSession()->GetAccountId()        : sObjectMgr->GetPlayerAccountIdByGUID(rc);    Item* items[MAX_MAIL_ITEMS];    for (uint8 i = 0; i < items_count; ++i)    {        if (!itemGUIDs[i])        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);            return;        }        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;
开发者ID:FirstCore,项目名称:GaryMoveOut_4.3.4,代码行数:67,


示例20: while

//.........这里部分代码省略.........                    stmt->setUInt8(1, BG_DESERTION_TYPE_INVITE_LOGOUT);                    CharacterDatabase.Execute(stmt);                }            }        ///- If the player is in a guild, update the guild roster and broadcast a logout message to other guild members        if (Guild* guild = sGuildMgr->GetGuildById(_player->GetGuildId()))            guild->HandleMemberLogout(this);        ///- Remove pet        _player->RemovePet(NULL, PET_SAVE_AS_CURRENT);        // pussywizard: on logout remove auras that are removed at map change (before saving to db)        // there are some positive auras from boss encounters that can be kept by logging out and logging in after boss is dead, and may be used on next bosses        _player->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_CHANGE_MAP);        ///- If the player is in a group (or invited), remove him. If the group if then only 1 person, disband the group.        _player->UninviteFromGroup();        // remove player from the group if he is:        // a) in group; b) not in raid group; c) logging out normally (not being kicked or disconnected)        if (_player->GetGroup() && !_player->GetGroup()->isRaidGroup() && !_player->GetGroup()->isLFGGroup() && m_Socket)            _player->RemoveFromGroup();        // pussywizard: checked second time after being removed from a group        if (!_player->IsBeingTeleportedFar() && !_player->m_InstanceValid && !_player->IsGameMaster())            _player->RepopAtGraveyard();        // Repop at GraveYard or other player far teleport will prevent saving player because of not present map        // Teleport player immediately for correct player save        while (_player && _player->IsBeingTeleportedFar())            HandleMoveWorldportAckOpcode();        ///- empty buyback items and save the player in the database        // some save parts only correctly work in case player present in map/player_lists (pets, etc)        SavingSystemMgr::InsertToSavingSkipListIfNeeded(_player->GetNextSave()); // pussywizard        if (save)        {            uint32 eslot;            for (int j = BUYBACK_SLOT_START; j < BUYBACK_SLOT_END; ++j)            {                eslot = j - BUYBACK_SLOT_START;                _player->SetUInt64Value(PLAYER_FIELD_VENDORBUYBACK_SLOT_1 + (eslot * 2), 0);                _player->SetUInt32Value(PLAYER_FIELD_BUYBACK_PRICE_1 + eslot, 0);                _player->SetUInt32Value(PLAYER_FIELD_BUYBACK_TIMESTAMP_1 + eslot, 0);            }            _player->SaveToDB(false, true);        }        ///- Leave all channels before player delete...        _player->CleanupChannels();        //! Send update to group and reset stored max enchanting level        if (_player->GetGroup())        {            _player->GetGroup()->SendUpdate();            _player->GetGroup()->ResetMaxEnchantingLevel();        }        //! Broadcast a logout message to the player's friends        if (AccountMgr::IsGMAccount(GetSecurity())) // pussywizard: only for non-gms            sSocialMgr->SendFriendStatus(_player, FRIEND_OFFLINE, _player->GetGUIDLow(), true);        sSocialMgr->RemovePlayerSocial(_player->GetGUIDLow());        //! Call script hook before deletion        sScriptMgr->OnPlayerLogout(_player);        sLog->outChar("Account: %d (IP: %s) Logout Character:[%s] (GUID: %u) Level: %d", GetAccountId(), GetRemoteAddress().c_str(), _player->GetName().c_str(), _player->GetGUIDLow(), _player->getLevel());        //! Remove the player from the world        // the player may not be in the world when logging out        // e.g if he got disconnected during a transfer to another map        // calls to GetMap in this case may cause crashes        _player->CleanupsBeforeDelete();        if (Map* _map = _player->FindMap())        {            _map->RemovePlayerFromMap(_player, true);            _map->AfterPlayerUnlinkFromMap();        }        SetPlayer(NULL); // pointer already deleted        //! Send the 'logout complete' packet to the client        //! Client will respond by sending 3x CMSG_CANCEL_TRADE, which we currently dont handle        WorldPacket data(SMSG_LOGOUT_COMPLETE, 0);        SendPacket(&data);#if defined(ENABLE_EXTRAS) && defined(ENABLE_EXTRA_LOGS)        sLog->outDebug(LOG_FILTER_NETWORKIO, "SESSION: Sent SMSG_LOGOUT_COMPLETE Message");#endif        //! Since each account can only have one online character at any given time, ensure all characters for active account are marked as offline        PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ACCOUNT_ONLINE);        stmt->setUInt32(0, GetAccountId());        CharacterDatabase.Execute(stmt);    }    m_playerLogout = false;    m_playerSave = false;    LogoutRequest(0);}
开发者ID:lineagedr,项目名称:azerothcore-wotlk,代码行数:101,


示例21: CHECK_PACKET_SIZE

void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data ){    // in Player::Create:    //uint8 race,class_,gender,skin,face,hairStyle,hairColor,facialHair,outfitId;    //data >> name    //data >> race >> class_ >> gender >> skin >> face;    //data >> hairStyle >> hairColor >> facialHair >> outfitId;    CHECK_PACKET_SIZE(recv_data,1+1+1+1+1+1+1+1+1+1);    std::string name;    uint8 race_,class_;    bool pTbc = this->IsTBC() && sWorld.getConfig(CONFIG_EXPANSION) > 0;    recv_data >> name;    // recheck with known string size    CHECK_PACKET_SIZE(recv_data,(name.size()+1)+1+1+1+1+1+1+1+1+1);    recv_data >> race_;    recv_data >> class_;    WorldPacket data(SMSG_CHAR_CREATE, 1);                  // returned with diff.values in all cases    if (!sChrClassesStore.LookupEntry(class_)||        !sChrRacesStore.LookupEntry(race_))    {        data << (uint8)CHAR_CREATE_FAILED;        SendPacket( &data );        sLog.outError("Class: %u or Race %u not found in DBC (Wrong DBC files?) or Cheater?", class_, race_);        return;    }    // prevent character creating Expansion race without Expansion account    if (!pTbc&&(race_>RACE_TROLL))    {        data << (uint8)CHAR_CREATE_EXPANSION;        sLog.outError("No Expansion Account:[%d] but tried to Create TBC character",GetAccountId());        SendPacket( &data );        return;    }    // prevent character creating with invalid name    if(name.empty())    {        data << (uint8)CHAR_NAME_INVALID_CHARACTER;        SendPacket( &data );        sLog.outError("Account:[%d] but tried to Create character with empty [name] ",GetAccountId());        return;    }    normalizePlayerName(name);    // check name limitations    if(!ObjectMgr::IsValidName(name))    {        data << (uint8)CHAR_NAME_INVALID_CHARACTER;        SendPacket( &data );        return;    }    if(GetSecurity() == SEC_PLAYER && objmgr.IsReservedName(name))    {        data << (uint8)CHAR_NAME_RESERVED;        SendPacket( &data );        return;    }    if(objmgr.GetPlayerGUIDByName(name))    {        data << (uint8)CHAR_CREATE_NAME_IN_USE;        SendPacket( &data );        return;    }    QueryResult *result = CharacterDatabase.PQuery("SELECT COUNT(guid) FROM characters WHERE account = '%d'", GetAccountId());    uint8 charcount = 0;    if ( result )    {        Field *fields=result->Fetch();        charcount = fields[0].GetUInt8();        delete result;        if (charcount >= 10)        {            data << (uint8)CHAR_CREATE_ACCOUNT_LIMIT;            SendPacket( &data );            return;        }    }    bool AllowTwoSideAccounts = !sWorld.IsPvPRealm() || sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_ACCOUNTS) || GetSecurity() > SEC_PLAYER;    uint32 skipCinematics = sWorld.getConfig(CONFIG_SKIP_CINEMATICS);    bool have_same_race = false;    if(!AllowTwoSideAccounts || skipCinematics == 1)    {        QueryResult *result2 = CharacterDatabase.PQuery("SELECT DISTINCT race FROM characters WHERE account = '%u' %s", GetAccountId(),skipCinematics == 1 ? "" : "LIMIT 1");        if(result2)        {            uint32 team_= Player::TeamForRace(race_);//.........这里部分代码省略.........
开发者ID:Artea,项目名称:mangos-svn,代码行数:101,


示例22: GetPlayer

//.........这里部分代码省略.........        if (GlobalPlayerData const* playerData = sWorld->GetGlobalPlayerData(GUID_LOPART(rc)))        {            rc_teamId = Player::TeamIdForRace(playerData->race);            mails_count = playerData->mailCount;        }    }    //do not allow to have more than 100 mails in mailbox.. mails count is in opcode uint8!!! - so max can be 255..    if (mails_count > 100)    {        player->SendMailResult(0, MAIL_SEND, MAIL_ERR_RECIPIENT_CAP_REACHED);        return;    }    // test the receiver's Faction... or all items are account bound    // Xinef: check for boa items, not used currently    /*bool accountBound = items_count && !money && !COD ? true : false;    for (uint8 i = 0; i < items_count; ++i)    {        Item* item = player->GetItemByGuid(itemGUIDs[i]);        if (item)        {            ItemTemplate const* itemProto = item->GetTemplate();            if (!itemProto || !(itemProto->Flags & ITEM_PROTO_FLAG_BIND_TO_ACCOUNT))            {                accountBound = false;                break;            }        }    }*/    uint32 rc_account = receive        ? receive->GetSession()->GetAccountId()        : sObjectMgr->GetPlayerAccountIdByGUID(rc);    if (/*!accountBound*/ GetAccountId() != rc_account && !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_MAIL) && player->GetTeamId() != rc_teamId && AccountMgr::IsPlayerAccount(GetSecurity()))    {        player->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_YOUR_TEAM);        return;    }    Item* items[MAX_MAIL_ITEMS];    for (uint8 i = 0; i < items_count; ++i)    {        if (!itemGUIDs[i])        {            player->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);            return;        }        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() && GetAccountId() != rc_account)        {
开发者ID:AzerothShard-Dev,项目名称:azerothcore,代码行数:67,


示例23: stripLineInvisibleChars

bool WorldSession::processChatmessageFurtherAfterSecurityChecks(std::string& msg, uint32 lang){    if (lang != LANG_ADDON)    {        // strip invisible characters for non-addon messages        if (sWorld->getBoolConfig(CONFIG_CHAT_FAKE_MESSAGE_PREVENTING))            stripLineInvisibleChars(msg);        if (!ConfigMgr::GetBoolDefault("Log.Chat.Enable", true) &&     // To prevent double checking (if chat log is used, message is automatically validated)            sWorld->getIntConfig(CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY) && AccountMgr::IsPlayerAccount(GetSecurity()) &&            !ChatHandler(this).isValidChatMessage(msg.c_str()))        {            sLog->outError("Player %s (GUID: %u) sent a chat message with an invalid link: %s", GetPlayer()->GetName(),                    GetPlayer()->GetGUIDLow(), msg.c_str());            if (sWorld->getIntConfig(CONFIG_CHAT_STRICT_LINK_CHECKING_KICK))                KickPlayer();            return false;        }    }    return true;}
开发者ID:AwkwardDev,项目名称:TrilliumEMU,代码行数:22,


示例24: GetPlayer

//.........这里部分代码省略.........        pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_ENOUGH_MONEY);        return;    }    Player *receive = sObjectMgr.GetPlayer(rc);    uint32 rc_team = 0;    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'", GUID_LOPART(rc)))        {            Field *fields = result->Fetch();            mails_count = fields[0].GetUInt32();            delete result;        }    }    // do not allow to have more than 100 mails in mailbox.. mails count is in opcode uint8!!! - so max can be 255..    if (mails_count > 100)    {        pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_RECIPIENT_CAP_REACHED);        return;    }    // check the receiver's Faction...    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* items[MAX_MAIL_ITEMS];    for(uint8 i = 0; i < items_count; ++i)    {        if (!itemGUIDs[i])        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);            return;        }        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(true))        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM);            return;
开发者ID:Bootz,项目名称:diamondcore,代码行数:67,


示例25: MAKE_NEW_GUID

//called when player takes item attached in mailvoid WorldSession::HandleMailTakeItem(WorldPacket& recvData){    ObjectGuid mailbox;    uint32 mailId;    uint32 itemId;	recvData >> mailId;	recvData >> itemId;	mailbox[6] = recvData.ReadBit();	mailbox[5] = recvData.ReadBit();	mailbox[2] = recvData.ReadBit();	mailbox[3] = recvData.ReadBit();	mailbox[0] = recvData.ReadBit();	mailbox[1] = recvData.ReadBit();	mailbox[4] = recvData.ReadBit();	mailbox[7] = recvData.ReadBit();	recvData.ReadByteSeq(mailbox[0]);	recvData.ReadByteSeq(mailbox[1]);	recvData.ReadByteSeq(mailbox[4]);	recvData.ReadByteSeq(mailbox[2]);	recvData.ReadByteSeq(mailbox[5]);	recvData.ReadByteSeq(mailbox[6]);	recvData.ReadByteSeq(mailbox[3]);	recvData.ReadByteSeq(mailbox[7]);    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(uint64(m->COD)))    {        player->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_NOT_ENOUGH_MONEY);        return;    }    Item* item = player->GetMItem(itemId);    ItemPosCountVec dest;    uint8 msg = _player->CanStoreItem(NULL_BAG, NULL_SLOT, dest, item, 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(), "", GetPlayer()->GetGUIDLow(), GetPlayer()->GetName(),                                sender_accId, "", sender_guid, sender_name.c_str(),                                "GM %s (Account: %u) receive mail item: %s (Entry: %u Count: %u) and send COD money: %u to player: %s (Account: %u)",                                GetPlayerName().c_str(), GetAccountId(), item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->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;//.........这里部分代码省略.........
开发者ID:CATACLYSMDEV,项目名称:JadeCore-5.4.8-18291--dev-,代码行数:101,


示例26: 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>();                          // unk 3.2.2, const 1?    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 equiped 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_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.getRate(RATE_AUCTION_TIME));    AuctionEntry *AH = new AuctionEntry;    AH->Id = sObjectMgr.GenerateAuctionID();    if(sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION))//.........这里部分代码省略.........
开发者ID:klunk,项目名称:mangos,代码行数:101,


示例27: DETAIL_LOG

//.........这里部分代码省略.........        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;        }    }    // do not allow to have more than 100 mails in mailbox.. mails count is in opcode uint8!!! - so max can be 255..    if (mails_count > 100)    {        pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_RECIPIENT_CAP_REACHED);        return;    }    // check the receiver's Faction...    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 = nullptr;    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;
开发者ID:520lly,项目名称:mangos-classic,代码行数:67,



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


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