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

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

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

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

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

示例1: CHECK_PACKET_SIZE

void WorldSession::HandleWrapItemOpcode(WorldPacket& recv_data){    CHECK_PACKET_SIZE(recv_data,1+1+1+1);    sLog.outDebug("Received opcode CMSG_WRAP_ITEM");    uint8 gift_bag, gift_slot, item_bag, item_slot;    //recv_data.hexlike();    recv_data >> gift_bag >> gift_slot;                     // paper    recv_data >> item_bag >> item_slot;                     // item    sLog.outDebug("WRAP: receive gift_bag = %u, gift_slot = %u, item_bag = %u, item_slot = %u", gift_bag, gift_slot, item_bag, item_slot);    Item *gift = _player->GetItemByPos( gift_bag, gift_slot );    if(!gift)    {        _player->SendEquipError( EQUIP_ERR_ITEM_NOT_FOUND, gift, NULL );        return;    }    if(!gift->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_WRAPPER))// cheating: non-wrapper wrapper    {        _player->SendEquipError( EQUIP_ERR_ITEM_NOT_FOUND, gift, NULL );        return;    }    Item *item = _player->GetItemByPos( item_bag, item_slot );    if( !item )    {        _player->SendEquipError( EQUIP_ERR_ITEM_NOT_FOUND, item, NULL );        return;    }    if(item==gift)                                          // not possable with pacjket from real client    {        _player->SendEquipError( EQUIP_ERR_WRAPPED_CANT_BE_WRAPPED, item, NULL );        return;    }    if(item->IsEquipped())    {        _player->SendEquipError( EQUIP_ERR_EQUIPPED_CANT_BE_WRAPPED, item, NULL );        return;    }    if(item->GetUInt64Value(ITEM_FIELD_GIFTCREATOR))        // HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_WRAPPED);    {        _player->SendEquipError( EQUIP_ERR_WRAPPED_CANT_BE_WRAPPED, item, NULL );        return;    }    if(item->IsBag())    {        _player->SendEquipError( EQUIP_ERR_BAGS_CANT_BE_WRAPPED, item, NULL );        return;    }    if(item->IsSoulBound())    {        _player->SendEquipError( EQUIP_ERR_BOUND_CANT_BE_WRAPPED, item, NULL );        return;    }    if(item->GetMaxStackCount() != 1)    {        _player->SendEquipError( EQUIP_ERR_STACKABLE_CANT_BE_WRAPPED, item, NULL );        return;    }    // maybe not correct check  (it is better than nothing)    if(item->GetProto()->MaxCount>0)    {        _player->SendEquipError( EQUIP_ERR_UNIQUE_CANT_BE_WRAPPED, item, NULL );        return;    }    CharacterDatabase.BeginTransaction();    CharacterDatabase.PExecute("INSERT INTO character_gifts VALUES ('%u', '%u', '%u', '%u')", GUID_LOPART(item->GetOwnerGUID()), item->GetGUIDLow(), item->GetEntry(), item->GetUInt32Value(ITEM_FIELD_FLAGS));    item->SetEntry(gift->GetEntry());    switch (item->GetEntry())    {        case 5042:  item->SetEntry( 5043); break;        case 5048:  item->SetEntry( 5044); break;        case 17303: item->SetEntry(17302); break;        case 17304: item->SetEntry(17305); break;        case 17307: item->SetEntry(17308); break;        case 21830: item->SetEntry(21831); break;    }    item->SetUInt64Value(ITEM_FIELD_GIFTCREATOR, _player->GetGUID());    item->SetUInt32Value(ITEM_FIELD_FLAGS, ITEM_FLAGS_WRAPPED);    item->SetState(ITEM_CHANGED, _player);    if(item->GetState()==ITEM_NEW)                          // save new item, to have alway for `character_gifts` record in `item_instance`    {        // after save it will be impossible to remove the item from the queue        item->RemoveFromUpdateQueueOf(_player);        item->SaveToDB();                                   // item gave inventory record unchanged and can be save standalone//.........这里部分代码省略.........
开发者ID:Anderss,项目名称:mangos,代码行数:101,


示例2: CHECK_PACKET_SIZE

void WorldSession::HandleAreaTriggerOpcode(WorldPacket & recv_data){    CHECK_PACKET_SIZE(recv_data, 4);    uint32 id = 0;    WorldPacket data(80);    AreaTrigger *pAreaTrigger = NULL;    recv_data >> id;    sLog.outDebug("AreaTrigger: %u", id);    pAreaTrigger = sWorld.GetAreaTrigger(id);    // Search quest log, find any exploration quests    sQuestMgr.OnPlayerExploreArea(GetPlayer(),id);        // if in BG handle is triggers    if(GetPlayer()->m_bgInBattleground && GetPlayer()->GetCurrentBattleground() != NULL)    {        GetPlayer()->GetCurrentBattleground()->HandleBattlegroundAreaTrigger(GetPlayer(), id);        return;    }       if(pAreaTrigger && pAreaTrigger->Type == ATTYPE_BATTLEGROUND)    {        if(pAreaTrigger->Mapid == 489)        // hack fix            pAreaTrigger->Mapid = 2;        else if(pAreaTrigger->Mapid == 529)            pAreaTrigger->Mapid = 3;        else if(pAreaTrigger->Mapid == 30)            pAreaTrigger->Mapid = 1;                    WorldPacket *pkt = sBattlegroundMgr.BuildBattlegroundListPacket(GetPlayer()->GetGUID(), _player,            pAreaTrigger->Mapid);        SendPacket(pkt);        delete pkt;        return;    }    if(pAreaTrigger)    {        bool bFailedPre = false;        std::string failed_reason;        if(pAreaTrigger->required_level)        {            if(GetPlayer()->getLevel() < pAreaTrigger->required_level)            {                bFailedPre = true;                if(failed_reason.size() > 0)                    failed_reason += ", and ";                else                    failed_reason = "You must be ";                // mm hacky                char lvltext[30];                sprintf(lvltext, "at least level %d", pAreaTrigger->required_level);                failed_reason += lvltext;            }        }        if(bFailedPre)        {            failed_reason += " before you're allowed through here.";            WorldPacket msg;            msg.Initialize(SMSG_AREA_TRIGGER_MESSAGE);            msg << uint32(0) << failed_reason << uint8(0);            SendPacket(&msg);            sLog.outDebug("Player %s failed areatrigger prereq - %s", GetPlayer()->GetName(), failed_reason.c_str());            return;        }        switch(pAreaTrigger->Type)        {        case ATTYPE_INSTANCE:            {                if(GetPlayer()->GetPlayerStatus() != TRANSFER_PENDING) //only ports if player is out of pendings                {                    GetPlayer()->SaveEntryPoint();                    //death system check.                    Corpse *pCorpse = NULL;                    CorpseData *pCorpseData = NULL;                    MapInfo *pMapinfo = NULL;                    pMapinfo = sWorld.GetMapInformation(pAreaTrigger->Mapid);                    if(pMapinfo && !pMapinfo->HasFlag(WMI_INSTANCE_ENABLED))                    {                        WorldPacket msg;                        msg.Initialize(SMSG_AREA_TRIGGER_MESSAGE);                        msg << uint32(0) << "This instance is currently unavailable." << uint8(0) << uint8(0);                        SendPacket(&msg);                        return;                    }                    if(pMapinfo && pMapinfo->HasFlag(WMI_INSTANCE_XPACK_01) && !HasFlag(ACCOUNT_FLAG_XPACK_01))                    {                        WorldPacket msg;                        msg.Initialize(SMSG_BROADCAST_MSG);                        msg << uint32(3) << "You must have The Burning Crusade Expansion to access this content." << uint8(0);                        SendPacket(&msg);                        return;                    }                    if(!GetPlayer()->isAlive())//.........这里部分代码省略.........
开发者ID:AwkwardDev,项目名称:WoWD,代码行数:101,


示例3: CHECK_PACKET_SIZE

///////////////////////////////////////////////////////////////// This function handles CMSG_CREATURE_QUERY://////////////////////////////////////////////////////////////void WorldSession::HandleCreatureQueryOpcode(WorldPacket & recv_data){	CHECK_INWORLD_RETURN	CHECK_PACKET_SIZE(recv_data, 12);	WorldPacket data(SMSG_CREATURE_QUERY_RESPONSE, 250); //VLack: thanks Aspire, this was 146 before	uint32 entry;	uint64 guid;	CreatureInfo* ci;	recv_data >> entry;	recv_data >> guid;	if(entry == 300000)	{		data << (uint32)entry;		data << "WayPoint";		data << uint8(0) << uint8(0) << uint8(0);		data << "Level is WayPoint ID";		for(uint32 i = 0; i < 8; i++)		{			data << uint32(0);		}		data << uint8(0);	}	else	{		ci = CreatureNameStorage.LookupEntry(entry);		if(ci == NULL)			return;		LocalizedCreatureName* lcn = (language > 0) ? sLocalizationMgr.GetLocalizedCreatureName(entry, language) : NULL;		if(lcn == NULL)		{			LOG_DETAIL("WORLD: CMSG_CREATURE_QUERY '%s'", ci->Name);			data << (uint32)entry;			data << ci->Name;       // name of the creature			data << uint8(0);       // name2, always seems to be empty			data << uint8(0);       // name3, always seems to be empty			data << uint8(0);       // name4, always seems to be empty			data << ci->SubName;    // this is the title/guild of the creature		}		else		{			LOG_DETAIL("WORLD: CMSG_CREATURE_QUERY '%s' (localized to %s)", ci->Name, lcn->Name);			data << (uint32)entry;			data << lcn->Name;			data << uint8(0);			data << uint8(0);			data << uint8(0);			data << lcn->SubName;		}		data << ci->info_str;     //!!! this is a string in 2.3.0 Example: stormwind guard has : "Direction"		data << ci->Flags1;       // flags like skinnable		data << ci->Type;         // humanoid, beast, etc		data << ci->Family;       // petfamily		data << ci->Rank;         // normal, elite, etc		data << ci->killcredit[0];  // quest kill credit 1		data << ci->killcredit[1];  // quest kill credit 2		data << ci->Male_DisplayID;		data << ci->Female_DisplayID;		data << ci->Male_DisplayID2;		data << ci->Female_DisplayID2;		data << ci->unkfloat1;		data << ci->unkfloat2;		data << ci->Leader;         // faction leader		// these are the 6 seperate quest items a creature can drop		for(uint32 i = 0; i < 6; ++i)		{			data << uint32(ci->QuestItems[i]);		}		data << ci->waypointid;	}	SendPacket(&data);}
开发者ID:DebugProject,项目名称:Lua-Other,代码行数:82,


示例4: CHECK_PACKET_SIZE

void WorldSession::HandleOpenItemOpcode(WorldPacket& recvPacket){    CHECK_PACKET_SIZE(recvPacket,1+1);    sLog.outDetail("WORLD: CMSG_OPEN_ITEM packet, data length = %i",recvPacket.size());    Player* pUser = _player;    uint8 bagIndex, slot;    recvPacket >> bagIndex >> slot;    sLog.outDetail("bagIndex: %u, slot: %u",bagIndex,slot);    Item *pItem = pUser->GetItemByPos(bagIndex, slot);    if(!pItem)    {        pUser->SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, NULL, NULL );        return;    }    ItemPrototype const *proto = pItem->GetProto();    if(!proto)    {        pUser->SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, pItem, NULL );        return;    }    // locked item    uint32 lockId = proto->LockID;    if(lockId)    {        LockEntry const *lockInfo = sLockStore.LookupEntry(lockId);        if (!lockInfo)        {            pUser->SendEquipError(EQUIP_ERR_ITEM_LOCKED, pItem, NULL );            sLog.outError( "WORLD::OpenItem: item [guid = %u] has an unknown lockId: %u!", pItem->GetGUIDLow() , lockId);            return;        }        // required picklocking        if(lockInfo->requiredlockskill || lockInfo->requiredminingskill)        {            pUser->SendEquipError(EQUIP_ERR_ITEM_LOCKED, pItem, NULL );            return;        }    }    if(pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_WRAPPED))// wrapped?    {        QueryResult *result = CharacterDatabase.PQuery("SELECT entry, flags FROM character_gifts WHERE item_guid = '%u'", pItem->GetGUIDLow());        if (result)        {            Field *fields = result->Fetch();            uint32 entry = fields[0].GetUInt32();            uint32 flags = fields[1].GetUInt32();            pItem->SetUInt64Value(ITEM_FIELD_GIFTCREATOR, 0);            pItem->SetEntry(entry);            pItem->SetUInt32Value(ITEM_FIELD_FLAGS, flags);            pItem->SetState(ITEM_CHANGED, pUser);            delete result;        }        else        {            sLog.outError("Wrapped item %u don't have record in character_gifts table and will deleted", pItem->GetGUIDLow());            pUser->DestroyItem(pItem->GetBagSlot(), pItem->GetSlot(), true);            return;        }        CharacterDatabase.PExecute("DELETE FROM character_gifts WHERE item_guid = '%u'", pItem->GetGUIDLow());    }    else        pUser->SendLoot(pItem->GetGUID(),LOOT_CORPSE);}
开发者ID:Canno,项目名称:mangos,代码行数:74,


示例5: CHECK_PACKET_SIZE

void WorldSession::HandleBattleGroundPlayerPortOpcode( WorldPacket &recv_data ){    CHECK_PACKET_SIZE(recv_data, 1+1+4+2+1);    sLog.outDebug( "WORLD: Recvd CMSG_BATTLEFIELD_PORT Message");    uint8 type;                                             // arenatype if arena    uint8 unk2;                                             // unk, can be 0x0 (may be if was invited?) and 0x1    uint32 instanceId;    uint32 bgTypeId_;                                       // type id from dbc    uint16 unk;                                             // 0x1F90 constant?    uint8 action;                                           // enter battle 0x1, leave queue 0x0    recv_data >> type >> unk2 >> bgTypeId_ >> unk >> action;    if(!sBattlemasterListStore.LookupEntry(bgTypeId_))    {        sLog.outError("Battleground: invalid bgtype (%u) received.",bgTypeId_);        // update battleground slots for the player to fix his UI and sent data.        // this is a HACK, I don't know why the client starts sending invalid packets in the first place.        // it usually happens with extremely high latency (if debugging / stepping in the code for example)        if(_player->InBattleGroundQueue())        {            // update all queues, send invitation info if player is invited, queue info if queued            for (uint32 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; i++)            {                BattleGroundQueueTypeId bgQueueTypeId = _player->GetBattleGroundQueueTypeId(i);                if(!bgQueueTypeId)                    continue;                BattleGroundTypeId bgTypeId = BattleGroundMgr::BGTemplateId(bgQueueTypeId);                uint32 queue_id = _player->GetBattleGroundQueueIdFromLevel(bgTypeId);                BattleGroundQueue::QueuedPlayersMap& qpMap = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].m_QueuedPlayers[queue_id];                BattleGroundQueue::QueuedPlayersMap::iterator itrPlayerStatus = qpMap.find(_player->GetGUID());                // if the player is not in queue, continue                if(itrPlayerStatus == qpMap.end())                    continue;                // no group information, this should never happen                if(!itrPlayerStatus->second.GroupInfo)                    continue;                BattleGround * bg = NULL;                // get possibly needed data from groupinfo                uint8 arenatype = itrPlayerStatus->second.GroupInfo->ArenaType;                uint8 israted = itrPlayerStatus->second.GroupInfo->IsRated;                uint8 status = 0;                if(!itrPlayerStatus->second.GroupInfo->IsInvitedToBGInstanceGUID)                {                    // not invited to bg, get template                    bg = sBattleGroundMgr.GetBattleGroundTemplate(bgTypeId);                    status = STATUS_WAIT_QUEUE;                }                else                {                    // get the bg we're invited to                    BattleGround * bg = sBattleGroundMgr.GetBattleGround(itrPlayerStatus->second.GroupInfo->IsInvitedToBGInstanceGUID);                    status = STATUS_WAIT_JOIN;                }                // if bg not found, then continue                if(!bg)                    continue;                // don't invite if already in the instance                if(_player->InBattleGround() && _player->GetBattleGround() && _player->GetBattleGround()->GetInstanceID() == bg->GetInstanceID())                    continue;                // re - invite player with proper data                WorldPacket data;                sBattleGroundMgr.BuildBattleGroundStatusPacket(&data, bg, itrPlayerStatus->second.GroupInfo->Team?itrPlayerStatus->second.GroupInfo->Team:_player->GetTeam(), i, status, INVITE_ACCEPT_WAIT_TIME, 0, arenatype, israted);                SendPacket(&data);            }        }        return;    }    BattleGroundTypeId bgTypeId = BattleGroundTypeId(bgTypeId_);    BattleGroundQueueTypeId bgQueueTypeId = BATTLEGROUND_QUEUE_NONE;    // get the bg what we were invited to    bgQueueTypeId = BattleGroundMgr::BGQueueTypeId(bgTypeId,type);    BattleGroundQueue::QueuedPlayersMap& qpMap = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].m_QueuedPlayers[_player->GetBattleGroundQueueIdFromLevel(bgTypeId)];    BattleGroundQueue::QueuedPlayersMap::iterator itrPlayerStatus = qpMap.find(_player->GetGUID());    if(itrPlayerStatus == qpMap.end())    {        sLog.outError("Battleground: itrplayerstatus not found.");        return;    }    instanceId = itrPlayerStatus->second.GroupInfo->IsInvitedToBGInstanceGUID;    // if action == 1, then instanceId is _required_    if(!instanceId && action == 1)    {        sLog.outError("Battleground: instance not found.");        return;    }//.........这里部分代码省略.........
开发者ID:Diaken,项目名称:mangos,代码行数:101,


示例6: CHECK_PACKET_SIZE

void WorldSession::HandleCharCustomize(WorldPacket& recv_data){    CHECK_PACKET_SIZE(recv_data, 8+1);    uint64 guid;    std::string newname;    recv_data >> guid;    recv_data >> newname;    CHECK_PACKET_SIZE(recv_data, recv_data.rpos()+1+1+1+1+1+1);    uint8 gender, skin, face, hairStyle, hairColor, facialHair;    recv_data >> gender >> skin >> face >> hairStyle >> hairColor >> facialHair;    QueryResult *result = CharacterDatabase.PQuery("SELECT at_login FROM characters WHERE guid ='%u'", GUID_LOPART(guid));    if (!result)    {        WorldPacket data(SMSG_CHAR_CUSTOMIZE, 1);        data << uint8(CHAR_CREATE_ERROR);        SendPacket( &data );        return;    }    Field *fields = result->Fetch();    uint32 at_loginFlags = fields[0].GetUInt32();    delete result;    if (!(at_loginFlags & AT_LOGIN_CUSTOMIZE))    {        WorldPacket data(SMSG_CHAR_CUSTOMIZE, 1);        data << uint8(CHAR_CREATE_ERROR);        SendPacket( &data );        return;    }    // prevent character rename to invalid name    if(!normalizePlayerName(newname))    {        WorldPacket data(SMSG_CHAR_CUSTOMIZE, 1);        data << uint8(CHAR_NAME_NO_NAME);        SendPacket( &data );        return;    }    if(!ObjectMgr::IsValidName(newname,true))    {        WorldPacket data(SMSG_CHAR_CUSTOMIZE, 1);        data << uint8(CHAR_NAME_INVALID_CHARACTER);        SendPacket( &data );        return;    }    // check name limitations    if(GetSecurity() == SEC_PLAYER && objmgr.IsReservedName(newname))    {        WorldPacket data(SMSG_CHAR_CUSTOMIZE, 1);        data << uint8(CHAR_NAME_RESERVED);        SendPacket( &data );        return;    }    if(objmgr.GetPlayerGUIDByName(newname))                 // character with this name already exist    {        WorldPacket data(SMSG_CHAR_CUSTOMIZE, 1);        data << uint8(CHAR_CREATE_NAME_IN_USE);        SendPacket( &data );        return;    }    CharacterDatabase.escape_string(newname);    Player::Customize(guid, gender, skin, face, hairStyle, hairColor, facialHair);    CharacterDatabase.PExecute("UPDATE characters set name = '%s', at_login = at_login & ~ %u WHERE guid ='%u'", newname.c_str(), uint32(AT_LOGIN_CUSTOMIZE), GUID_LOPART(guid));    CharacterDatabase.PExecute("DELETE FROM character_declinedname WHERE guid ='%u'", GUID_LOPART(guid));    std::string IP_str = GetRemoteAddress();    sLog.outChar("Account: %d (IP: %s), Character guid: %u Customized to: %s", GetAccountId(), IP_str.c_str(), GUID_LOPART(guid), newname.c_str());    WorldPacket data(SMSG_CHAR_CUSTOMIZE, 1+8+(newname.size()+1)+6);    data << uint8(RESPONSE_SUCCESS);    data << uint64(guid);    data << newname;    data << uint8(gender);    data << uint8(skin);    data << uint8(face);    data << uint8(hairStyle);    data << uint8(hairColor);    data << uint8(facialHair);    SendPacket(&data);}
开发者ID:kalendaar,项目名称:pandore,代码行数:90,


示例7: CHECK_PACKET_SIZE

//MITvoid WorldSession::HandleCreatureQueryOpcode(WorldPacket& recv_data){    CHECK_INWORLD_RETURN        CHECK_PACKET_SIZE(recv_data, 12);    uint32 entry;    uint64 guid;    recv_data >> entry;    recv_data >> guid;    WorldPacket data(SMSG_CREATURE_QUERY_RESPONSE, 150);    if (entry == 300000)    {        data << entry;        data << "WayPoint";        data << uint8(0);        data << uint8(0);        data << uint8(0);        data << "Level is WayPoint ID";        for (uint8 i = 0; i < 8; i++)        {            data << uint32(0);        }        data << uint8(0);    }    else    {        CreatureProperties const* ci = sMySQLStore.getCreatureProperties(entry);        if (ci == nullptr)        {            return;        }        MySQLStructure::LocalesCreature const* lcn = (language > 0) ? sMySQLStore.getLocalizedCreature(entry, language) : nullptr;        if (lcn == nullptr)        {            data << entry;            data << ci->Name;       // name of the creature            data << uint8(0);       // name2, always seems to be empty            data << uint8(0);       // name3, always seems to be empty            data << uint8(0);       // name4, always seems to be empty            data << ci->SubName;    // this is the title/guild of the creature        }        else        {            data << entry;            data << lcn->name;            data << uint8(0);            data << uint8(0);            data << uint8(0);            data << lcn->subName;        }        data << ci->info_str;       // this is a string in 2.3.0 Example: stormwind guard has : "Direction"        data << ci->typeFlags;      // flags like skinnable        data << ci->Type;           // humanoid, beast, etc        data << ci->Family;         // petfamily        data << ci->Rank;           // normal, elite, etc        data << ci->killcredit[0];  // quest kill credit 1        data << ci->killcredit[1];  // quest kill credit 2        data << ci->Male_DisplayID;        data << ci->Female_DisplayID;        data << ci->Male_DisplayID2;        data << ci->Female_DisplayID2;        data << ci->baseAttackMod;        data << ci->rangeAttackMod;        data << ci->Leader;         // faction leader    }    SendPacket(&data);}
开发者ID:armm77,项目名称:AscEmu,代码行数:76,


示例8: CHECK_PACKET_SIZE

void WorldSession::HandleChangePlayerNameOpcode(WorldPacket& recv_data){    uint64 guid;    std::string newname;    std::string oldname;    CHECK_PACKET_SIZE(recv_data, 8+1);    recv_data >> guid;    recv_data >> newname;    if(!objmgr.GetPlayerNameByGUID(guid, oldname))          // character not exist, because we have no name for this guid    {        WorldPacket data(SMSG_CHAR_RENAME, 1);        data << (uint8)CHAR_LOGIN_NO_CHARACTER;        SendPacket( &data );        return;    }    // prevent character rename to invalid name    if(newname.empty())                                 // checked by client    {        WorldPacket data(SMSG_CHAR_RENAME, 1);        data << (uint8)CHAR_NAME_NO_NAME;        SendPacket( &data );        return;    }    normalizePlayerName(newname);    if(newname.find_first_of(notAllowedChars) != newname.npos)    {        WorldPacket data(SMSG_CHAR_RENAME, 1);        data << (uint8)CHAR_NAME_INVALID_CHARACTER;;        SendPacket( &data );        return;    }    // check name limitations    if(GetSecurity() == SEC_PLAYER && objmgr.IsReservedName(newname))    {        WorldPacket data(SMSG_CHAR_RENAME, 1);        data << (uint8)CHAR_NAME_RESERVED;        SendPacket( &data );        return;    }    if(objmgr.GetPlayerGUIDByName(newname))                 // character with this name already exist    {        WorldPacket data(SMSG_CHAR_RENAME, 1);        data << (uint8)CHAR_CREATE_ERROR;        SendPacket( &data );        return;    }    if(newname == oldname)                                  // checked by client    {        WorldPacket data(SMSG_CHAR_RENAME, 1);        data << (uint8)CHAR_NAME_FAILURE;        SendPacket( &data );        return;    }    CharacterDatabase.escape_string(newname);    CharacterDatabase.PExecute("UPDATE `character` set `name` = '%s', `at_login` = `at_login` & ~ '%u' WHERE `guid` ='%u'", newname.c_str(), uint32(AT_LOGIN_RENAME),GUID_LOPART(guid));    std::string IP_str = _socket ? _socket->GetRemoteAddress().c_str() : "-";    sLog.outChar("Account: %d (IP: %s) Character:[%s] (guid:%u) Changed name to: %p",GetAccountId(),IP_str.c_str(),oldname.c_str(),GUID_LOPART(guid),newname.c_str());    WorldPacket data(SMSG_CHAR_RENAME,1+8+(newname.size()+1));    data << (uint8)RESPONSE_SUCCESS;    data << guid;    data << newname;    SendPacket(&data);}
开发者ID:Artea,项目名称:mangos-svn,代码行数:75,


示例9: CHECK_PACKET_SIZE

//called when player lists his received mailsvoid WorldSession::HandleGetMail(WorldPacket & recv_data ){    CHECK_PACKET_SIZE(recv_data,8);    uint64 mailbox;    recv_data >> mailbox;    //GameObject* obj = ObjectAccessor::GetGameObject(_player, mailbox);    //if(!obj || !obj->IsMailBox())    //    return;    Player* pl = _player;    //load players mails, and mailed items    if(!pl->m_mailsLoaded)        pl ->_LoadMail();    // client can't work with packets > max int16 value    const uint32 maxPacketSize = 32767;    uint32 mails_count = 0;                                 // real send to client mails amount    WorldPacket data(SMSG_MAIL_LIST_RESULT, (200));         // guess size    data << uint8(0);                                       // mail's count    time_t cur_time = time(NULL);    for(PlayerMails::iterator itr = pl->GetmailBegin(); itr != pl->GetmailEnd(); ++itr)    {        // skip deleted or not delivered (deliver delay not expired) mails        if ((*itr)->state == MAIL_STATE_DELETED || cur_time < (*itr)->deliver_time)            continue;        uint8 item_count = (*itr)->items.size();            // max count is MAX_MAIL_ITEMS (12)        size_t next_mail_size = 2+4+1+8+4*8+((*itr)->subject.size()+1)+1+item_count*(1+4+4+6*3*4+4+4+1+4+4+4);        if(data.wpos()+next_mail_size > maxPacketSize)            break;        data << (uint16) 0x0040;                            // unknown 2.3.0, different values        data << (uint32) (*itr)->messageID;                 // Message ID        data << (uint8) (*itr)->messageType;                // Message Type        switch((*itr)->messageType)        {            case MAIL_NORMAL:                               // sender guid                data << uint64(MAKE_NEW_GUID((*itr)->sender, 0, HIGHGUID_PLAYER));                break;            case MAIL_CREATURE:            case MAIL_GAMEOBJECT:            case MAIL_AUCTION:                data << (uint32) (*itr)->sender;            // creature/gameobject entry, auction id                break;            case MAIL_ITEM:                                 // item entry (?) sender = "Unknown", NYI                break;        }        data << (uint32) (*itr)->COD;                       // COD        data << (uint32) (*itr)->itemTextId;                // sure about this        data << (uint32) 0;                                 // unknown        data << (uint32) (*itr)->stationery;                // stationery (Stationery.dbc)        data << (uint32) (*itr)->money;                     // Gold        data << (uint32) 0x04;                              // unknown, 0x4 - auction, 0x10 - normal                                                            // Time        data << (float)  ((*itr)->expire_time-time(NULL))/DAY;        data << (uint32) (*itr)->mailTemplateId;            // mail template (MailTemplate.dbc)        data << (*itr)->subject;                            // Subject string - once 00, when mail type = 3        data << (uint8) item_count;        for(uint8 i = 0; i < item_count; ++i)        {            Item *item = pl->GetMItem((*itr)->items[i].item_guid);            // item index (0-6?)            data << (uint8)  i;            // item guid low?            data << (uint32) (item ? item->GetGUIDLow() : 0);            // entry            data << (uint32) (item ? item->GetEntry() : 0);            for(uint8 j = 0; j < 6; ++j)            {                // unsure                data << (uint32) (item ? item->GetEnchantmentCharges((EnchantmentSlot)j) : 0);                // unsure                data << (uint32) (item ? item->GetEnchantmentDuration((EnchantmentSlot)j) : 0);                // unsure                data << (uint32) (item ? item->GetEnchantmentId((EnchantmentSlot)j) : 0);            }            // can be negative            data << (uint32) (item ? item->GetItemRandomPropertyId() : 0);            // unk            data << (uint32) (item ? item->GetItemSuffixFactor() : 0);            // stack count            data << (uint8)  (item ? item->GetCount() : 0);            // charges            data << (uint32) (item ? item->GetSpellCharges() : 0);            // durability            data << (uint32) (item ? item->GetUInt32Value(ITEM_FIELD_MAXDURABILITY) : 0);            // durability//.........这里部分代码省略.........
开发者ID:Bootz,项目名称:TC-One,代码行数:101,


示例10: CHECK_PACKET_SIZE

///////////////////////////////////////////////////////////////// This function handles CMSG_GROUP_INVITE//////////////////////////////////////////////////////////////void WorldSession::HandleGroupInviteOpcode(WorldPacket & recv_data){	CHECK_INWORLD_RETURN;	CHECK_PACKET_SIZE(recv_data, 1);	WorldPacket data(100);	std::string membername;	Group* group = NULL;	recv_data >> membername;	if(_player->HasBeenInvited())		return;	Player* player = objmgr.GetPlayer(membername.c_str(), false);	if(player == NULL)	{		SendPartyCommandResult(_player, 0, membername, ERR_PARTY_CANNOT_FIND);		return;	}	if(player == _player)	{		return;	}	if (player->GetMapId() == 750 || _player->GetMapId() == 750)		return;	if(_player->InGroup() && !_player->IsGroupLeader())	{		SendPartyCommandResult(_player, 0, "", ERR_PARTY_YOU_ARE_NOT_LEADER);		return;	}	group = _player->GetGroup();	if(group != NULL)	{		if(group->IsFull())		{			SendPartyCommandResult(_player, 0, "", ERR_PARTY_IS_FULL);			return;		}	}	if(player->InGroup())	{		SendPartyCommandResult(_player, player->GetGroup()->GetGroupType(), membername, ERR_PARTY_ALREADY_IN_GROUP);		data.SetOpcode(SMSG_GROUP_INVITE);		data << uint8(0);		data << GetPlayer()->GetName();		player->GetSession()->SendPacket(&data);		return;	}	if(player->GetTeam() != _player->GetTeam() && _player->GetSession()->GetPermissionCount() == 0 && !sWorld.interfaction_group)	{		SendPartyCommandResult(_player, 0, membername, ERR_PARTY_WRONG_FACTION);		return;	}	if(player->HasBeenInvited())	{		SendPartyCommandResult(_player, 0, membername, ERR_PARTY_ALREADY_IN_GROUP);		return;	}	if(player->Social_IsIgnoring(_player->GetLowGUID()))	{		SendPartyCommandResult(_player, 0, membername, ERR_PARTY_IS_IGNORING_YOU);		return;	}	if(player->HasFlag(PLAYER_FLAGS, PLAYER_FLAG_GM) && !_player->GetSession()->HasPermissions())	{		SendPartyCommandResult(_player, 0, membername, ERR_PARTY_CANNOT_FIND);		return;	}	data.SetOpcode(SMSG_GROUP_INVITE);	data << uint8(1);	data << GetPlayer()->GetName();	player->GetSession()->SendPacket(&data);	SendPartyCommandResult(_player, 0, membername, ERR_PARTY_NO_ERROR);	// 16/08/06 - change to guid to prevent very unlikely event of a crash in deny, etc	player->SetInviter(_player->GetLowGUID());}
开发者ID:Desch,项目名称:Edge-of-Chaos,代码行数:92,


示例11: CHECK_PACKET_SIZE

/*this procedure handles clients CMSG_REQUEST_PARTY_MEMBER_STATS request*/void WorldSession::HandleRequestPartyMemberStatsOpcode( WorldPacket &recv_data ){    CHECK_PACKET_SIZE(recv_data, 8);    sLog.outDebug("WORLD: Received CMSG_REQUEST_PARTY_MEMBER_STATS");    uint64 Guid;    recv_data >> Guid;    Player *player = objmgr.GetPlayer(Guid);    if(!player)    {        WorldPacket data(SMSG_PARTY_MEMBER_STATS_FULL, 3+4+2);        data << uint8(0);                                   // only for SMSG_PARTY_MEMBER_STATS_FULL, probably arena/bg related        data.appendPackGUID(Guid);        data << (uint32) GROUP_UPDATE_FLAG_STATUS;        data << (uint16) MEMBER_STATUS_OFFLINE;        SendPacket(&data);        return;    }    Unit *pet = player->GetCharmOrPet();    WorldPacket data(SMSG_PARTY_MEMBER_STATS_FULL, 4+2+2+2+1+2*6+8+1+8);    data << uint8(0);                                       // only for SMSG_PARTY_MEMBER_STATS_FULL, probably arena/bg related    data.append(player->GetPackGUID());    uint32 mask1 = 0x00040BFF;                              // common mask, real flags used 0x000040BFF    if(pet)        mask1 = 0xFFFFFFFF;                                 // for hunters and other classes with pets    Powers powerType = player->getPowerType();    data << (uint32) mask1;                                 // group update mask    data << (uint16) MEMBER_STATUS_ONLINE;                  // member's online status    data << (uint32) player->GetHealth();                   // GROUP_UPDATE_FLAG_CUR_HP    data << (uint32) player->GetMaxHealth();                // GROUP_UPDATE_FLAG_MAX_HP    data << (uint8)  powerType;                             // GROUP_UPDATE_FLAG_POWER_TYPE    data << (uint16) player->GetPower(powerType);           // GROUP_UPDATE_FLAG_CUR_POWER    data << (uint16) player->GetMaxPower(powerType);        // GROUP_UPDATE_FLAG_MAX_POWER    data << (uint16) player->getLevel();                    // GROUP_UPDATE_FLAG_LEVEL    data << (uint16) player->GetZoneId();                   // GROUP_UPDATE_FLAG_ZONE    data << (uint16) player->GetPositionX();                // GROUP_UPDATE_FLAG_POSITION    data << (uint16) player->GetPositionY();                // GROUP_UPDATE_FLAG_POSITION    uint64 auramask = 0;    size_t maskPos = data.wpos();    data << (uint64) auramask;                              // placeholder    for(uint8 i = 0; i < MAX_AURAS; ++i)    {        if(uint32 aura = player->GetVisibleAura(i))        {            auramask |= (uint64(1) << i);            data << (uint32) aura;            data << (uint8)  1;        }    }    data.put<uint64>(maskPos,auramask);                     // GROUP_UPDATE_FLAG_AURAS    if(pet)    {        Powers petpowertype = pet->getPowerType();        data << (uint64) pet->GetGUID();                    // GROUP_UPDATE_FLAG_PET_GUID        data << pet->GetName();                             // GROUP_UPDATE_FLAG_PET_NAME        data << (uint16) pet->GetDisplayId();               // GROUP_UPDATE_FLAG_PET_MODEL_ID        data << (uint32) pet->GetHealth();                  // GROUP_UPDATE_FLAG_PET_CUR_HP        data << (uint32) pet->GetMaxHealth();               // GROUP_UPDATE_FLAG_PET_MAX_HP        data << (uint8)  petpowertype;                      // GROUP_UPDATE_FLAG_PET_POWER_TYPE        data << (uint16) pet->GetPower(petpowertype);       // GROUP_UPDATE_FLAG_PET_CUR_POWER        data << (uint16) pet->GetMaxPower(petpowertype);    // GROUP_UPDATE_FLAG_PET_MAX_POWER        uint64 petauramask = 0;        size_t petMaskPos = data.wpos();        data << (uint64) petauramask;                       // placeholder        for(uint8 i = 0; i < MAX_AURAS; ++i)        {            if(uint32 petaura = pet->GetVisibleAura(i))            {                petauramask |= (uint64(1) << i);                data << (uint32) petaura;                data << (uint8)  1;            }        }        data.put<uint64>(petMaskPos,petauramask);           // GROUP_UPDATE_FLAG_PET_AURAS        data << (uint32) player->m_SeatData.dbc_seat;    }    else    {        data << (uint8)  0;                                 // GROUP_UPDATE_FLAG_PET_NAME        data << (uint64) 0;                                 // GROUP_UPDATE_FLAG_PET_AURAS    }    SendPacket(&data);}
开发者ID:Trizzor,项目名称:uecore,代码行数:93,


示例12: CHECK_PACKET_SIZE

void WorldSession::HandleCharacterCustomization( WorldPacket & recv_data ){	CHECK_PACKET_SIZE(recv_data, 16);	uint64 guid;	recv_data >> guid;	PlayerInfo * pInfo = objmgr.GetPlayerInfo((uint32)guid);	if(pInfo == NULL)		return;	if(pInfo->acct != _accountId)	{		Disconnect();		// Cheater		return;	}	QueryResult * result = CharacterDatabase.Query("SELECT recustomize FROM characters WHERE guid = %u AND acct = %u", (uint32)guid, _accountId);	if(result == 0)	{		delete result;		return;	}	uint32 recustomize = result[0].Fetch()[0].GetUInt32();	if(recustomize == 0 && !CanUseCommand('z'))	{		delete result;		return;	}	delete result;	string name;	recv_data >> name;	if(!VerifyName(name.c_str(), name.length()))	{		uint8 err = CHAR_NAME_INVALID_CHARACTER;		OutPacket(SMSG_CHAR_CUSTOMIZE, 1, &err);		return;	}	if(g_characterNameFilter->Parse(name, false))	{		uint8 err = CHAR_NAME_RESERVED;		OutPacket(SMSG_CHAR_CUSTOMIZE, 1, &err);		return;	}	if(strcmp(pInfo->name, name.c_str()) && objmgr.GetPlayerInfoByName(name.c_str()) != 0)	{		uint8 err = CHAR_CREATE_NAME_IN_USE;		OutPacket(SMSG_CHAR_CUSTOMIZE, 1, &err);		return;	}	result = CharacterDatabase.Query("SELECT COUNT(*) FROM banned_names WHERE name = '%s'", CharacterDatabase.EscapeString(name).c_str());	if(result)	{		if(result->Fetch()[0].GetUInt32() > 0)		{			// That name is banned!			uint8 err = CHAR_CREATE_NAME_IN_USE;			OutPacket(SMSG_CHAR_CUSTOMIZE, 1, &err); // You cannot use that name			delete result;			return;		}		delete result;	}	CapitalizeString(name);		// Correct capitalization	uint8 gender,skin,face,hairStyle,hairColor,facialHair;	recv_data >> gender >> skin >> hairColor >> hairStyle >> facialHair >> face;	result = CharacterDatabase.Query("SELECT bytes2 FROM characters WHERE guid = '%u'", (uint32)guid);	if(result == NULL)		return;	Field * f = result->Fetch();	uint32 bytes2 = f[0].GetUInt32();	bytes2 &= 0xFFFFFF00;		// Delete facial hair	bytes2 |= facialHair;	uint32 bytes = ((skin) | (face << 8) | (hairStyle << 16) | (hairColor << 24));	pInfo->gender = gender;	objmgr.RenamePlayerInfo(pInfo, pInfo->name, name.c_str());	CharacterDatabase.WaitExecute("UPDATE characters SET name = '%s', gender = '%u', bytes = '%u', bytes2 = '%u', recustomize = 0 WHERE guid = '%u'", name.c_str(), gender, bytes, bytes2, (uint32)guid);	WorldPacket data(SMSG_CHAR_CUSTOMIZE, 15+(name.size()+1));	data << uint8(RESPONSE_SUCCESS);	data << uint64(guid);	data << name;	data << uint8(gender);	data << uint8(skin);	data << uint8(face);	data << uint8(hairStyle);//.........这里部分代码省略.........
开发者ID:Refuge89,项目名称:Arc_Mind,代码行数:101,


示例13: CHECK_PACKET_SIZE

///////////////////////////////////////////////////////////////// This function handles CMSG_CREATURE_QUERY://////////////////////////////////////////////////////////////void WorldSession::HandleCreatureQueryOpcode( WorldPacket & recv_data ){	CHECK_PACKET_SIZE(recv_data, 12);	WorldPacket data(SMSG_CREATURE_QUERY_RESPONSE, 150);	uint32 entry;	uint64 guid;	CreatureInfo *ci;	recv_data >> entry;	recv_data >> guid;	if(entry == 300000)	{		data << (uint32)entry;		data << "WayPoint";		data << uint8(0) << uint8(0) << uint8(0);		data << "Level is WayPoint ID";		for(uint32 i = 0; i < 8;i++)		{			data << uint32(0);		}		data << uint8(0);  	}	else	{		ci = CreatureNameStorage.LookupEntry(entry);		if(ci == NULL)			return;		LocalizedCreatureName * lcn = (language>0) ? sLocalizationMgr.GetLocalizedCreatureName(entry, language) : NULL;		if(lcn == NULL)		{			sLog.outDetail("WORLD: CMSG_CREATURE_QUERY '%s'", ci->Name);			data << (uint32)entry;			data << ci->Name;			data << uint8(0) << uint8(0) << uint8(0);			data << ci->SubName;		}		else		{			sLog.outDetail("WORLD: CMSG_CREATURE_QUERY '%s' (localized to %s)", ci->Name, lcn->Name);			data << (uint32)entry;			data << lcn->Name;			data << uint8(0) << uint8(0) << uint8(0);			data << lcn->SubName;		}		data << ci->info_str; //!!! this is a string in 2.3.0 Example: stormwind guard has : "Direction"		data << ci->Flags1;  		data << ci->Type;		data << ci->Family;		data << ci->Rank;		data << ci->Unknown1;		data << ci->SpellDataID;		data << ci->Male_DisplayID;		data << ci->Female_DisplayID;		data << ci->Male_DisplayID2;		data << ci->Female_DisplayID2;		data << ci->unkfloat1;		data << ci->unkfloat2;		data << ci->Leader;	}	SendPacket( &data );}
开发者ID:Chero,项目名称:abcwow,代码行数:68,



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


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