这篇教程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_SIZEvoid 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_SIZEvoid 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_SIZEvoid 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_SIZEvoid 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_SIZEvoid 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_SIZEvoid 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_SIZEvoid 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函数代码示例 |