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

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

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

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

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

示例1: OnChat

	virtual void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg)	{		uint64 current_time = sWorld->GetGameTime();		uint32 guid = player->GetGUID();			if (!Chat[guid].chat) {Chat[guid].chat = 0;};			if (!Chat[guid].time)			{ 				Chat[guid].time = current_time - delay;				Chat[guid].last_msg = ""; 			};			if (player->IsGameMaster()) // here we will set the gm's stored values so they clear the checks.			{				Chat[guid].time = current_time - delay;				Chat[guid].last_msg = "";			}			if ((msg != "") && (lang != LANG_ADDON) && (msg != "Away") && (player->CanSpeak() == true) && (Chat[guid].chat == 1))			{				if ((current_time < (Chat[guid].time + delay)) || (Chat[guid].last_msg == msg))				{					ChatHandler(player->GetSession()).PSendSysMessage("%sSpam detect triggered.", wc_red);				}				else				{					// here you can apply different colors					std::string wc_channelcolor = wc_grey;					std::string wc_gm_rankcolor = wc_blue;					std::string wc_msgcolor = wc_green;					Chat[guid].last_msg = msg;					Chat[guid].time = current_time;					auto gm_rank = player->GetSession()->GetSecurity();					std::string pName = player->GetName();					std::string name = "|Hplayer:" + pName + "|h" + pName;					std::string WCMSG = "";					WCMSG += "[" + wc_channelcolor + wc_channel_name + "|r]";					WCMSG += "[" + wc_TeamIcon[player->GetTeamId()] + "]";						if (player->IsGameMaster())						{								WCMSG += "[" + wc_GM_ICON + "]";							WCMSG += "[" + wc_gm_rankcolor + wc_GM_RANK[gm_rank] + "|r]";						}					WCMSG += "[" + wc_ClassIcon[player->getClass() - 1] + "]";					WCMSG += "[" + wc_TeamColor[player->GetTeamId()] + name + "|r]";					WCMSG += ":" + wc_msgcolor + msg;					sWorld->SendGlobalText(WCMSG.c_str(), NULL);					msg = -1; // this was a WILD Guess and it worked. it completely negates the msg and wont even respond with "bad message" or chat-back.				}			}	}
开发者ID:BlackWolfsDen,项目名称:World_Chat,代码行数:63,


示例2: TC_LOG_ERROR

//.........这里部分代码省略.........        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:            recvData >> msg;            break;        case CHAT_MSG_WHISPER:            recvData >> to;            recvData >> msg;            break;        case CHAT_MSG_CHANNEL:            recvData >> channel;            recvData >> msg;            break;        case CHAT_MSG_AFK:        case CHAT_MSG_DND:            recvData >> msg;            ignoreChecks = true;            break;    }    if (!ignoreChecks)    {        if (msg.empty())            return;        if (ChatHandler(this).ParseCommands(msg.c_str()))            return;        if (lang != LANG_ADDON)        {            // Strip invisible characters for non-addon messages            if (sWorld->getBoolConfig(CONFIG_CHAT_FAKE_MESSAGE_PREVENTING))                stripLineInvisibleChars(msg);            if (sWorld->getIntConfig(CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY) && !ChatHandler(this).isValidChatMessage(msg.c_str()))            {                TC_LOG_ERROR("network", "Player %s (GUID: %u) sent a chatmessage with an invalid link: %s", GetPlayer()->GetName().c_str(),                    GetPlayer()->GetGUIDLow(), msg.c_str());                if (sWorld->getIntConfig(CONFIG_CHAT_STRICT_LINK_CHECKING_KICK))                    KickPlayer();                return;            }        }    }    switch (type)    {        case CHAT_MSG_SAY:        case CHAT_MSG_EMOTE:        case CHAT_MSG_YELL:        {            // Prevent cheating            if (!sender->IsAlive())                return;            if (sender->getLevel() < sWorld->getIntConfig(CONFIG_CHAT_SAY_LEVEL_REQ))
开发者ID:WowDevs,项目名称:DignitaryWoW-Core,代码行数:67,


示例3: extractOptFirstArg

//mute player for some timesbool ChatHandler::HandleMuteCommand(const char* args){    char* nameStr;    char* delayStr;    extractOptFirstArg((char*)args, &nameStr, &delayStr);    if (!delayStr)        return false;    char *mutereason = strtok(NULL, "/r");    std::string mutereasonstr = "No reason";    if (mutereason != NULL)         mutereasonstr = mutereason;    Player* target;    uint64 target_guid;    std::string target_name;    if (!extractPlayerTarget(nameStr, &target, &target_guid, &target_name))        return false;    uint32 accountId = target ? target->GetSession()->GetAccountId() : sObjectMgr->GetPlayerAccountIdByGUID(target_guid);    // find only player from same account if any    if (!target)        if (WorldSession* session = sWorld->FindSession(accountId))            target = session->GetPlayer();    uint32 notspeaktime = (uint32) atoi(delayStr);    // must have strong lesser security level    if (HasLowerSecurity (target, target_guid, true))        return false;    PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_MUTE_TIME);    if (target)    {        // Target is online, mute will be in effect right away.        int64 muteTime = time(NULL) + notspeaktime * MINUTE;        target->GetSession()->m_muteTime = muteTime;        stmt->setInt64(0, muteTime);        ChatHandler(target).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, notspeaktime, mutereasonstr.c_str());    }    else    {        // Target is offline, mute will be in effect starting from the next login.        int32 muteTime = -int32(notspeaktime * MINUTE);        stmt->setInt64(0, muteTime);    }    stmt->setUInt32(1, accountId);    LoginDatabase.Execute(stmt);    std::string nameLink = playerLink(target_name);    PSendSysMessage(target ? LANG_YOU_DISABLE_CHAT : LANG_COMMAND_DISABLE_CHAT_DELAYED, nameLink.c_str(), notspeaktime, mutereasonstr.c_str());    return true;}
开发者ID:Ikizami,项目名称:SilverCore,代码行数:63,


示例4: HandleTeleNameCommand

    // teleport player to given game_tele.entry    static bool HandleTeleNameCommand(ChatHandler* handler, const char* args)    {        char* nameStr;        char* teleStr;        handler->extractOptFirstArg((char*)args, &nameStr, &teleStr);        if (!teleStr)            return false;        Player* target;        uint64 target_guid;        std::string target_name;        if (!handler->extractPlayerTarget(nameStr, &target, &target_guid, &target_name))            return false;        if (strcmp(teleStr, "$home") == 0)    // References target's homebind        {            if (target)                target->TeleportTo(target->m_homebindMapId, target->m_homebindX, target->m_homebindY, target->m_homebindZ, target->GetOrientation());            else            {                PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_HOMEBIND);                stmt->setUInt32(0, target_guid);                PreparedQueryResult resultDB = CharacterDatabase.Query(stmt);                if (resultDB)                {                    Field* fieldsDB = resultDB->Fetch();                    uint32 mapId = fieldsDB[0].GetUInt16();                    uint32 zoneId = fieldsDB[1].GetUInt16();                    float posX = fieldsDB[2].GetFloat();                    float posY = fieldsDB[3].GetFloat();                    float posZ = fieldsDB[4].GetFloat();                    Player::SavePositionInDB(mapId, posX, posY, posZ, 0, zoneId, target_guid);                }            }            return true;        }        // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r        GameTele const* tele = handler->extractGameTeleFromLink(teleStr);        if (!tele)        {            handler->SendSysMessage(LANG_COMMAND_TELE_NOTFOUND);            handler->SetSentErrorMessage(true);            return false;        }        if (target)        {            // check online security            if (handler->HasLowerSecurity(target, 0))                return false;            std::string chrNameLink = handler->playerLink(target_name);            if (target->IsBeingTeleported() == true)            {                handler->PSendSysMessage(LANG_IS_TELEPORTED, chrNameLink.c_str());                handler->SetSentErrorMessage(true);                return false;            }            handler->PSendSysMessage(LANG_TELEPORTING_TO, chrNameLink.c_str(), "", tele->name.c_str());            if (handler->needReportToTarget(target))                ChatHandler(target->GetSession()).PSendSysMessage(LANG_TELEPORTED_TO_BY, handler->GetNameLink().c_str());            // stop flight if need            if (target->isInFlight())            {                target->GetMotionMaster()->MovementExpired();                target->CleanupAfterTaxiFlight();            }            // save only in non-flight case            else                target->SaveRecallPosition();            target->TeleportTo(tele->mapId, tele->position_x, tele->position_y, tele->position_z, tele->orientation);        }        else        {            // check offline security            if (handler->HasLowerSecurity(NULL, target_guid))                return false;            std::string nameLink = handler->playerLink(target_name);            handler->PSendSysMessage(LANG_TELEPORTING_TO, nameLink.c_str(), handler->GetTrinityString(LANG_OFFLINE), tele->name.c_str());            Player::SavePositionInDB(tele->mapId, tele->position_x, tele->position_y, tele->position_z, tele->orientation,                sMapMgr->GetZoneId(tele->mapId, tele->position_x, tele->position_y, tele->position_z), target_guid);        }        return true;    }
开发者ID:Exodius,项目名称:chuspi,代码行数:96,


示例5: TC_LOG_DEBUG

void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData){    TC_LOG_DEBUG("network", "WORLD: CMSG_BATTLEMASTER_JOIN_ARENA");    uint64 guid;                                            // arena Battlemaster guid    uint8 arenaslot;                                        // 2v2, 3v3 or 5v5    uint8 asGroup;                                          // asGroup    uint8 isRated;                                          // isRated    Group* grp = NULL;    recvData >> guid >> arenaslot >> asGroup >> isRated;    // ignore if we already in BG or BG queue    if (_player->InBattleground())        return;    Creature* unit = GetPlayer()->GetMap()->GetCreature(guid);    if (!unit)        return;    if (!unit->IsBattleMaster())                             // it's not battle master        return;    uint8 arenatype = 0;    uint32 arenaRating = 0;    uint32 matchmakerRating = 0;    switch (arenaslot)    {        case 0:            arenatype = ARENA_TYPE_2v2;            break;        case 1:            arenatype = ARENA_TYPE_3v3;            break;        case 2:            arenatype = ARENA_TYPE_1v1;            break;        default:            TC_LOG_ERROR("network", "Unknown arena slot %u at HandleBattlemasterJoinArena()", arenaslot);            return;    }    //check existance    Battleground* bg = sBattlegroundMgr->GetBattlegroundTemplate(BATTLEGROUND_AA);    if (!bg)    {        TC_LOG_ERROR("network", "Battleground: template bg (all arenas) not found");        return;    }    if (DisableMgr::IsDisabledFor(DISABLE_TYPE_BATTLEGROUND, BATTLEGROUND_AA, NULL))    {        ChatHandler(this).PSendSysMessage(LANG_ARENA_DISABLED);        return;    }    BattlegroundTypeId bgTypeId = bg->GetTypeID();    BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(bgTypeId, arenatype);    PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketByLevel(bg->GetMapId(), _player->getLevel());    if (!bracketEntry)        return;    GroupJoinBattlegroundResult err = ERR_GROUP_JOIN_BATTLEGROUND_FAIL;    if (!asGroup)    {        // check if already in queue        if (_player->GetBattlegroundQueueIndex(bgQueueTypeId) < PLAYER_MAX_BATTLEGROUND_QUEUES)            //player is already in this queue            return;        // check if has free queue slots        if (!_player->HasFreeBattlegroundQueueId())            return;    }    else    {        grp = _player->GetGroup();        // no group found, error        if (!grp)            return;        if (grp->GetLeaderGUID() != _player->GetGUID())            return;        err = grp->CanJoinBattlegroundQueue(bg, bgQueueTypeId, arenatype, arenatype, (bool)isRated, arenaslot);    }    uint32 ateamId = 0;    if (isRated)    {        ateamId = _player->GetArenaTeamId(arenaslot);        // check real arenateam existence only here (if it was moved to group->CanJoin .. () then we would ahve to get it twice)        ArenaTeam* at = sArenaTeamMgr->GetArenaTeamById(ateamId);        if (!at)        {            _player->GetSession()->SendNotInArenaTeamPacket(arenatype);            return;        }        // get the team rating for queueing        arenaRating = at->GetRating();//.........这里部分代码省略.........
开发者ID:WarlordCore,项目名称:TrinityCore-SymboCore,代码行数:101,


示例6: CHECK_PACKET_SIZE

//.........这里部分代码省略.........                        break;                }            }            // but overwrite it by SPELL_AURA_MOD_LANGUAGE auras (only single case used)            Unit::AuraList const& ModLangAuras = _player->GetAurasByType(SPELL_AURA_MOD_LANGUAGE);            if(!ModLangAuras.empty())                lang = ModLangAuras.front()->GetModifier()->m_miscvalue;        }        if (!_player->CanSpeak())        {            std::string timeStr = secsToTimeString(m_muteTime - time(NULL));            SendNotification(GetMangosString(LANG_WAIT_BEFORE_SPEAKING),timeStr.c_str());            return;        }        if (type != CHAT_MSG_AFK && type != CHAT_MSG_DND)            GetPlayer()->UpdateSpeakTime();    }    switch(type)    {        case CHAT_MSG_SAY:        case CHAT_MSG_EMOTE:        case CHAT_MSG_YELL:        {            std::string msg = "";            recv_data >> msg;            if(msg.empty())                break;            if (ChatHandler(this).ParseCommands(msg.c_str()) > 0)                break;            // 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(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))
开发者ID:Baumi,项目名称:mangos,代码行数:67,


示例7: OnGossipSelect

    bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)    {        player->PlayerTalkClass->ClearMenus();        switch (uiAction)        {        case ARENA_GOODBYE:        {                              player->PlayerTalkClass->SendCloseGossip();                              break;        }        case ARENA_HELP:        {                           ChatHandler(player->GetSession()).PSendSysMessage("|cffff6060[Information]:|r This npc show server gladiators (Top 10).Simple click on team name and see team details");                           break;        }        case ARENA_2V2_LADDER:        case ARENA_5V5_LADDER:        case ARENA_3V3_LADDER:        {                                 uint32 teamType = optionToTeamType(uiAction);                                 QueryResult result = CharacterDatabase.PQuery("SELECT arenaTeamId, name, rating FROM arena_team WHERE type = '%u' ORDER BY rating DESC LIMIT %u;", teamType, ARENA_MAX_RESULTS);                                 if (!result)                                 {                                     player->ADD_GOSSIP_ITEM(7, "Nevermind", GOSSIP_SENDER_MAIN, ARENA_GOODBYE);                                     player->SEND_GOSSIP_MENU(1, creature->GetGUID());                                 }                                 else                                 {                                     std::string name;                                     uint32 teamId, rating, rank = 1;                                     player->ADD_GOSSIP_ITEM(0, "Top Arena List - Gladiators:", GOSSIP_SENDER_MAIN, ARENA_GOODBYE);                                     do                                     {                                         Field *fields = result->Fetch();                                         teamId = fields[0].GetUInt32();                                         name = fields[1].GetString();                                         rating = fields[2].GetUInt32();                                         std::stringstream buffer;                                         buffer << rank << ". " << name;                                         buffer << ": " << "|cFF1E90FF" << rating << "|r" << " rating!";                                         player->ADD_GOSSIP_ITEM(4, buffer.str(), GOSSIP_SENDER_MAIN, ARENA_START_TEAM_LOOKUP + teamId);                                         rank++;                                     } while (result->NextRow());                                     player->ADD_GOSSIP_ITEM(7, "Nevermind", GOSSIP_SENDER_MAIN, ARENA_GOODBYE);                                     player->SEND_GOSSIP_MENU(90086, creature->GetGUID());                                 }                                 break;        }        default:        {                   if (uiAction > ARENA_START_TEAM_LOOKUP)                   {                       uint32 teamId = uiAction - ARENA_START_TEAM_LOOKUP;                       QueryResult result = CharacterDatabase.PQuery("SELECT name, rating, seasonWins, seasonGames - seasonWins, weekWins, weekGames - weekWins, rank, captainGuid , type FROM arena_team WHERE arenaTeamId = '%u'", teamId);                       if (!result)                       {                           player->GetSession()->SendNotification("Arena team not found...");                           player->PlayerTalkClass->SendCloseGossip();                           return true;                       }                       Field *fields = result->Fetch();                       std::string name = fields[0].GetString();                       uint32 rating = fields[1].GetUInt32();                       uint32 seasonWins = fields[2].GetUInt32();                       uint32 seasonLosses = fields[3].GetUInt32();                       uint32 weekWins = fields[4].GetUInt32();                       uint32 weekLosses = fields[5].GetUInt32();                       uint32 rank = fields[6].GetUInt32();                       uint32 captainGuid = fields[7].GetUInt32();                       uint32 type = fields[8].GetUInt32();                       uint32 parentOption = teamTypeToOption(type);                       std::string seasonWinPercentage = getWinPercent(seasonWins, seasonLosses);                       std::string weekWinPercentage = getWinPercent(weekWins, weekLosses);                       std::stringstream buf;                       buf << "Team Name: " << "|cFF1E90FF" << name << "|r";                       player->ADD_GOSSIP_ITEM(7, buf.str(), GOSSIP_SENDER_MAIN, parentOption);                       buf.str("");                       buf << "Rating: " << "|cFF1E90FF" << rating << "|r" << " (Rank: " << "|cFF1E90FF" << rank << "|r" << ", Type: " << "|cFF1E90FF" << type << "v" << type << "|r"")";                       player->ADD_GOSSIP_ITEM(4, buf.str(), GOSSIP_SENDER_MAIN, parentOption);                       buf.str("");                       buf << "Total Week: " << "|cFF1E90FF" << weekWins << "-" << weekLosses << "|r"" (" << "|cFF1E90FF" << weekWinPercentage << "|r" << "win)";                       player->ADD_GOSSIP_ITEM(4, buf.str(), GOSSIP_SENDER_MAIN, parentOption);                       buf.str("");                       buf << "Total Season: " << "|cFF1E90FF" << seasonWins << "-" << seasonLosses << "|r" << " (" << "|cFF1E90FF" << seasonWinPercentage << "|r" << " win)";                       player->ADD_GOSSIP_ITEM(4, buf.str(), GOSSIP_SENDER_MAIN, parentOption);                       QueryResult members = CharacterDatabase.PQuery("SELECT  a.guid, a.personalRating, a.weekWins, a.weekGames - a.weekWins, a.seasonWins, a.seasonGames - a.seasonWins, c.name, c.race, c.class, c.level FROM arena_team_member a LEFT JOIN characters c ON c.guid = a.guid WHERE arenaTeamId = '%u' ORDER BY a.guid = '%u' DESC, a.seasonGames DESC, c.name ASC", teamId, captainGuid);//.........这里部分代码省略.........
开发者ID:GetPlay,项目名称:TC,代码行数:101,


示例8: HandleModifyMoneyCommand

    //Edit Player money    static bool HandleModifyMoneyCommand(ChatHandler* handler, const char* args)    {        if (!*args)            return false;        Player* target = handler->getSelectedPlayer();        if (!target)        {            handler->SendSysMessage(LANG_NO_CHAR_SELECTED);            handler->SetSentErrorMessage(true);            return false;        }        // check online security        if (handler->HasLowerSecurity(target, 0))            return false;        int32 addmoney = atoi((char*)args);        uint32 moneyuser = target->GetMoney();        if (addmoney < 0)        {            int32 newmoney = int32(moneyuser) + addmoney;            sLog->outDetail(handler->GetTrinityString(LANG_CURRENT_MONEY), moneyuser, addmoney, newmoney);            if (newmoney <= 0)            {                handler->PSendSysMessage(LANG_YOU_TAKE_ALL_MONEY, handler->GetNameLink(target).c_str());                if (handler->needReportToTarget(target))                    (ChatHandler(target)).PSendSysMessage(LANG_YOURS_ALL_MONEY_GONE, handler->GetNameLink().c_str());                target->SetMoney(0);            }            else            {                if (newmoney > MAX_MONEY_AMOUNT)                    newmoney = MAX_MONEY_AMOUNT;                handler->PSendSysMessage(LANG_YOU_TAKE_MONEY, abs(addmoney), handler->GetNameLink(target).c_str());                if (handler->needReportToTarget(target))                    (ChatHandler(target)).PSendSysMessage(LANG_YOURS_MONEY_TAKEN, handler->GetNameLink().c_str(), abs(addmoney));                target->SetMoney(newmoney);            }        }        else        {            handler->PSendSysMessage(LANG_YOU_GIVE_MONEY, addmoney, handler->GetNameLink(target).c_str());            if (handler->needReportToTarget(target))                (ChatHandler(target)).PSendSysMessage(LANG_YOURS_MONEY_GIVEN, handler->GetNameLink().c_str(), addmoney);            if (addmoney >=MAX_MONEY_AMOUNT)                target->SetMoney(MAX_MONEY_AMOUNT);            else                target->ModifyMoney(addmoney);        }        sLog->outDetail(handler->GetTrinityString(LANG_NEW_MONEY), moneyuser, addmoney, target->GetMoney());        return true;    }
开发者ID:Adrya,项目名称:CrystalShard,代码行数:62,


示例9: id

//.........这里部分代码省略.........            return;        }        // check if already in queue        if (_player->GetBattleGroundQueueIndex(bgQueueTypeId) < PLAYER_MAX_BATTLEGROUND_QUEUES)            // player is already in this queue            return;        // check if has free queue slots        if (!_player->HasFreeBattleGroundQueueId())        {            WorldPacket data;            sBattleGroundMgr.BuildGroupJoinedBattlegroundPacket(&data, ERR_BATTLEGROUND_TOO_MANY_QUEUES);            _player->GetSession()->SendPacket(&data);            return;        }    }    else    {        grp = _player->GetGroup();        // no group found, error        if (!grp)            return;        if (grp->GetLeaderGuid() != _player->GetObjectGuid())            return;        bool have_bots = false;        for (GroupReference* itr = grp->GetFirstMember(); itr != NULL; itr = itr->next())        {            Player* member = itr->getSource();            if (!member)                continue;                                   // this should never happen            if (member->GetPlayerbotAI())            {                ChatHandler(_player).PSendSysMessage("|cffff0000You cannot get in battleground queue as premade because you have bots in your group. Adding you in queue as single player.");                have_bots = true;                joinAsGroup = false;                break;            }        }        if (!have_bots)        {            err = grp->CanJoinBattleGroundQueue(bg, bgQueueTypeId, 0, bg->GetMaxPlayersPerTeam(), false, 0);            isPremade = sWorld.getConfig(CONFIG_UINT32_BATTLEGROUND_PREMADE_GROUP_WAIT_FOR_MATCH) &&                    (grp->GetMembersCount() >= bg->GetMinPlayersPerTeam());        }    }    // if we're here, then the conditions to join a bg are met. We can proceed in joining.    // _player->GetGroup() was already checked, grp is already initialized    BattleGroundQueue& bgQueue = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId];    if (joinAsGroup)    {        GroupQueueInfo* ginfo = NULL;        uint32 avgTime = 0;        if (err > 0)        {            DEBUG_LOG("Battleground: the following players are joining as group:");            ginfo = bgQueue.AddGroup(_player, grp, bgTypeId, bracketEntry, ARENA_TYPE_NONE, false, isPremade, 0);            avgTime = bgQueue.GetAverageQueueWaitTime(ginfo, bracketEntry->GetBracketId());        }        for (GroupReference* itr = grp->GetFirstMember(); itr != NULL; itr = itr->next())        {            Player* member = itr->getSource();            if (!member)
开发者ID:TestWoW,项目名称:Pruebas,代码行数:67,


示例10: GetMasterPlayer

// $req will be deleted by the caller.void WorldSession::HandleSendMailCallback(WorldSession::AsyncMailSendRequest* req){    MasterPlayer* pl = GetMasterPlayer();    Player* loadedPlayer = GetPlayer();    ASSERT(pl);    uint32 reqmoney = req->money + 30;    // Check for overflow    if (reqmoney < req->money)    {        ProcessAnticheatAction("MailCheck", "Attempt to send free mails with money overflow", CHEAT_ACTION_LOG);        pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_ENOUGH_MONEY);        return;    }    if (reqmoney && (!loadedPlayer || loadedPlayer->GetMoney() < reqmoney))    {        pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_ENOUGH_MONEY);        return;    }    // do not allow to have more than 100 mails in mailbox.. mails count is in opcode uint8!!! - so max can be 255..    if (req->mailsCount > 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() != req->rcTeam && GetSecurity() == SEC_PLAYER)    {        pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_YOUR_TEAM);        return;    }    uint32 rc_account = sObjectMgr.GetPlayerAccountIdByGUID(req->receiver);    Item* item = NULL;    if (req->itemGuid)    {        item = loadedPlayer->GetItemByGuid(req->itemGuid);        // prevent sending bag with items (cheat: can be placed in bag after adding equipped empty bag to mail)        if (!item || !item->IsInWorld())        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);            return;        }        if (!item->CanBeTraded())        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);            return;        }        if ((item->GetProto()->Flags & ITEM_FLAG_CONJURED) || item->GetUInt32Value(ITEM_FIELD_DURATION))        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);            return;        }        if (req->COD && item->HasFlag(ITEM_FIELD_FLAGS, ITEM_DYNFLAG_WRAPPED))        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD);            return;        }    }    // Antispam checks    if (loadedPlayer->getLevel() < sWorld.getConfig(CONFIG_UINT32_MAILSPAM_LEVEL) &&        req->money < sWorld.getConfig(CONFIG_UINT32_MAILSPAM_MONEY) &&        (sWorld.getConfig(CONFIG_BOOL_MAILSPAM_ITEM) && !req->itemGuid))    {        pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_INTERNAL_ERROR);        return;    }    AccountPersistentData& data = sAccountMgr.GetAccountPersistentData(GetAccountId());    if (!data.CanMail(rc_account))    {        std::stringstream details;        std::string from = ChatHandler(this).playerLink(GetMasterPlayer()->GetName());        std::string to = ChatHandler(this).playerLink(req->receiverName);        details << from << " -> " << to << "/n";        details << req->subject << "/n";        details << req->body << "/n";        if (req->COD)            details << "COD: " << req->COD << " coppers/n";        uint32 logId = sWorld.InsertLog(details.str(), SEC_GAMEMASTER);        std::stringstream oss;        oss << "Mail limit reached (/"" << req->body.substr(0, 30) << ".../") [log #" << logId << "]";        ProcessAnticheatAction("ChatSpam", oss.str().c_str(), CHEAT_ACTION_LOG | CHEAT_ACTION_REPORT_GMS);        pl->SendMailResult(0, MAIL_SEND, MAIL_OK);        return;    }    data.JustMailed(rc_account);//.........这里部分代码省略.........
开发者ID:Maduse,项目名称:server,代码行数:101,


示例11: DEBUG_LOG

// add group or player (grp == nullptr) to bg queue with the given leader and bg specificationsGroupQueueInfo* BattleGroundQueue::AddGroup(Player* leader, Group* grp, BattleGroundTypeId BgTypeId, BattleGroundBracketId bracketId, ArenaType arenaType, bool isRated, bool isPremade, uint32 arenaRating, uint32 arenateamid){    // create new ginfo    GroupQueueInfo* ginfo = new GroupQueueInfo;    ginfo->BgTypeId = BgTypeId;    ginfo->arenaType = arenaType;    ginfo->ArenaTeamId = arenateamid;    ginfo->IsRated = isRated;    ginfo->IsInvitedToBGInstanceGUID = 0;    ginfo->JoinTime = WorldTimer::getMSTime();    ginfo->RemoveInviteTime = 0;    ginfo->GroupTeam = leader->GetTeam();    ginfo->ArenaTeamRating = arenaRating;    ginfo->OpponentsTeamRating = 0;    ginfo->Players.clear();    // compute index (if group is premade or joined a rated match) to queues    uint32 index = 0;    if (!isRated && !isPremade)        index += PVP_TEAM_COUNT;                            // BG_QUEUE_PREMADE_* -> BG_QUEUE_NORMAL_*    if (ginfo->GroupTeam == HORDE)        ++index;                                            // BG_QUEUE_*_ALLIANCE -> BG_QUEUE_*_HORDE    DEBUG_LOG("Adding Group to BattleGroundQueue bgTypeId : %u, bracket_id : %u, index : %u", BgTypeId, bracketId, index);    uint32 lastOnlineTime = WorldTimer::getMSTime();    // announce world (this don't need mutex)    if (isRated && sWorld.getConfig(CONFIG_BOOL_ARENA_QUEUE_ANNOUNCER_JOIN))    {        sWorld.SendWorldText(LANG_ARENA_QUEUE_ANNOUNCE_WORLD_JOIN, ginfo->arenaType, ginfo->arenaType, ginfo->ArenaTeamRating);    }    // add players from group to ginfo    if (grp)    {        for (GroupReference* itr = grp->GetFirstMember(); itr != nullptr; itr = itr->next())        {            Player* member = itr->getSource();            if (!member)                continue;   // this should never happen            PlayerQueueInfo& pl_info = m_QueuedPlayers[member->GetObjectGuid()];            pl_info.LastOnlineTime = lastOnlineTime;            pl_info.GroupInfo = ginfo;            // add the pinfo to ginfo's list            ginfo->Players[member->GetObjectGuid()] = &pl_info;        }    }    else    {        PlayerQueueInfo& pl_info = m_QueuedPlayers[leader->GetObjectGuid()];        pl_info.LastOnlineTime = lastOnlineTime;        pl_info.GroupInfo = ginfo;        ginfo->Players[leader->GetObjectGuid()] = &pl_info;    }    // add GroupInfo to m_QueuedGroups    {        m_QueuedGroups[bracketId][index].push_back(ginfo);        // announce to world, this code needs mutex        if (arenaType == ARENA_TYPE_NONE && !isRated && !isPremade && sWorld.getConfig(CONFIG_UINT32_BATTLEGROUND_QUEUE_ANNOUNCER_JOIN))        {            if (BattleGround* bg = sBattleGroundMgr.GetBattleGroundTemplate(ginfo->BgTypeId))            {                char const* bgName = bg->GetName();                uint32 MinPlayers = bg->GetMinPlayersPerTeam();                uint32 qHorde = 0;                uint32 qAlliance = 0;                uint32 q_min_level = leader->GetMinLevelForBattleGroundBracketId(bracketId, BgTypeId);                GroupsQueueType::const_iterator itr;                for (itr = m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_ALLIANCE].begin(); itr != m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_ALLIANCE].end(); ++itr)                    if (!(*itr)->IsInvitedToBGInstanceGUID)                        qAlliance += (*itr)->Players.size();                for (itr = m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_HORDE].begin(); itr != m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_HORDE].end(); ++itr)                    if (!(*itr)->IsInvitedToBGInstanceGUID)                        qHorde += (*itr)->Players.size();                // Show queue status to player only (when joining queue)                if (sWorld.getConfig(CONFIG_UINT32_BATTLEGROUND_QUEUE_ANNOUNCER_JOIN) == 1)                {                    ChatHandler(leader).PSendSysMessage(LANG_BG_QUEUE_ANNOUNCE_SELF, bgName, q_min_level, q_min_level + 10,                        qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : (uint32)0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : (uint32)0);                }                // System message                else                {                    sWorld.SendWorldText(LANG_BG_QUEUE_ANNOUNCE_WORLD, bgName, q_min_level, q_min_level + 10,                        qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : (uint32)0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : (uint32)0);                }            }        }        // release mutex    }    return ginfo;}
开发者ID:AtVirus,项目名称:Core,代码行数:99,


示例12: DETAIL_LOG

//.........这里部分代码省略.........    {        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;    }    // PvP.Chars?    if (receive) {        if ((receive->isPvPCharacter() && !pl->isPvPCharacter())                || (!receive->isPvPCharacter() && pl->isPvPCharacter())) {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_YOUR_TEAM);            ChatHandler(pl).PSendSysMessage(                    "PvP.Characters and PvE.Characters cannot interchange mail.");            return;        }    } else {        if (pl->isPvPCharacter()) {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_YOUR_TEAM);            ChatHandler(pl).PSendSysMessage(                    "The recipient is offline - cannot find out if it is also a PvP.Character.");            return;        }    }    uint32 rc_account = receive        ? receive->GetSession()->GetAccountId()        : sObjectMgr.GetPlayerAccountIdByGUID(rc);    Item* item = NULL;    if (itemGuid)    {        item = pl->GetItemByGuid(itemGuid);        // prevent sending bag with items (cheat: can be placed in bag after adding equipped empty bag to mail)        if(!item)        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);            return;        }        if (!item->CanBeTraded())        {            pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);
开发者ID:Xemp,项目名称:server,代码行数:67,


示例13: OnGossipSelect

	bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 Sender, uint32 Action)        {				if (Sender != GOSSIP_SENDER_MAIN)					return false;						pPlayer->PlayerTalkClass->ClearMenus();								if (Action == 1)									{                        	   // QueryResult pResult = LoginDatabase.PQuery("select last_ip from account where id = %u", pPlayer->GetSession()->GetAccountId()); 																								//Field * pFields = pResult->Fetch();								//pFields[0].GetString();								QueryResult Result = LoginDatabase.PQuery("select count(*) from account where last_ip = %u", pPlayer->GetSession()->GetRemoteAddress()); 									Field * rFields = Result->Fetch();								int64 ip2 = rFields[0].GetInt64();								if (ip2 > 1)								{										ChatHandler(pPlayer->GetSession()).PSendSysMessage("Para obtener la promoción debe ser tu primera cuenta, no puedes tener dos o mas cuentas");										pPlayer->PlayerTalkClass->SendCloseGossip();										return true;								}										QueryResult result = CharacterDatabase.PQuery("SELECT COUNT(*) FROM characters WHERE account = %u AND LEVEL = 85",pPlayer->GetSession()->GetAccountId());										Field* field = result->Fetch();										int8 chars = field[0].GetInt8();									 if (chars > 0 && pPlayer->getLevel() != 85 )										{										ChatHandler(pPlayer->GetSession()).PSendSysMessage("Ya tienes un pj 85 en esta cuenta no abuses de la promocion.");										pPlayer->PlayerTalkClass->SendCloseGossip();										return true;										}																																																					else if (pPlayer->getLevel() == 85)									{							 ChatHandler(pPlayer->GetSession()).PSendSysMessage("Ya eres Nivel 85");                                   pPlayer->PlayerTalkClass->SendCloseGossip();								   return true;								   								   }								   }								   //else if(Sender == GOSSIP_SENDER_MAIN)								   																			switch(Action)												{														case 1:                														pPlayer->SetMoney(150000000);														pPlayer->GiveLevel(85);														pPlayer->UpdateSkillsToMaxSkillsForLevel();																		if(pPlayer->GetTeam() == ALLIANCE){ //ID DEL SPELL QUE LLEVE A SHOP ALIANZA															pPlayer->TeleportTo(37, 49.945271f, -412.212799f, 410.581818f, 1.106602f);														//pPlayer->CastSpell(pPlayer,61420,true,NULL,NULL,pPlayer->GetGUID());																							}														else { //ID DEL SPELL QUE LLEVE A SHOP HORDA															pPlayer->TeleportTo(37, 49.945271f, -412.212799f, 410.581818f, 1.106602f);														//pPlayer->CastSpell(pPlayer,34673,true,NULL,NULL,pPlayer->GetGUID());																}														pPlayer->PlayerTalkClass->SendCloseGossip();														pPlayer->SaveToDB();														break;														case 2:														pPlayer->PlayerTalkClass->SendCloseGossip();														break;												}																				return true;				}
开发者ID:beyourself,项目名称:Wow-4.3.4,代码行数:73,


示例14: getMSTime

// add group or player (grp == NULL) to bg queue with the given leader and bg specificationsGroupQueueInfo* BattlegroundQueue::AddGroup(Player* leader, Group* grp, BattlegroundTypeId BgTypeId, PvPDifficultyEntry const*  bracketEntry, uint8 ArenaType, bool isRated, bool isPremade, uint32 ArenaRating, uint32 MatchmakerRating, uint32 arenateamid){    BattlegroundBracketId bracketId = bracketEntry->GetBracketId();    // create new ginfo    GroupQueueInfo* ginfo            = new GroupQueueInfo;    ginfo->BgTypeId                  = BgTypeId;    ginfo->ArenaType                 = ArenaType;    ginfo->ArenaTeamId               = arenateamid;    ginfo->IsRated                   = isRated;    ginfo->IsInvitedToBGInstanceGUID = 0;    ginfo->JoinTime                  = getMSTime();    ginfo->RemoveInviteTime          = 0;    ginfo->Team                      = leader->GetTeam();    ginfo->ArenaTeamRating           = ArenaRating;    ginfo->ArenaMatchmakerRating     = MatchmakerRating;    ginfo->OpponentsTeamRating       = 0;    ginfo->OpponentsMatchmakerRating = 0;    ginfo->Players.clear();    //compute index (if group is premade or joined a rated match) to queues    uint32 index = 0;    if (!isRated && !isPremade)        index += BG_TEAMS_COUNT;    if (ginfo->Team == HORDE)        index++;    TC_LOG_DEBUG("bg.battleground", "Adding Group to BattlegroundQueue bgTypeId : %u, bracket_id : %u, index : %u", BgTypeId, bracketId, index);    uint32 lastOnlineTime = getMSTime();    //announce world (this don't need mutex)    if (isRated && sWorld->getBoolConfig(CONFIG_ARENA_QUEUE_ANNOUNCER_ENABLE))    {        ArenaTeam* Team = sArenaTeamMgr->GetArenaTeamById(arenateamid);        if (Team)            sWorld->SendWorldText(LANG_ARENA_QUEUE_ANNOUNCE_WORLD_JOIN, Team->GetName().c_str(), ginfo->ArenaType, ginfo->ArenaType, ginfo->ArenaTeamRating);    }    //add players from group to ginfo    if (grp)    {        for (GroupReference* itr = grp->GetFirstMember(); itr != NULL; itr = itr->next())        {            Player* member = itr->GetSource();            if (!member)                continue;   // this should never happen            PlayerQueueInfo& pl_info = m_QueuedPlayers[member->GetGUID()];            pl_info.LastOnlineTime   = lastOnlineTime;            pl_info.GroupInfo        = ginfo;            // add the pinfo to ginfo's list            ginfo->Players[member->GetGUID()]  = &pl_info;        }    }    else    {        PlayerQueueInfo& pl_info = m_QueuedPlayers[leader->GetGUID()];        pl_info.LastOnlineTime   = lastOnlineTime;        pl_info.GroupInfo        = ginfo;        ginfo->Players[leader->GetGUID()]  = &pl_info;    }    //add GroupInfo to m_QueuedGroups    {        //ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_Lock);        m_QueuedGroups[bracketId][index].push_back(ginfo);        //announce to world, this code needs mutex        if (!isRated && !isPremade && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE))        {            if (Battleground* bg = sBattlegroundMgr->GetBattlegroundTemplate(ginfo->BgTypeId))            {                uint32 MinPlayers = bg->GetMinPlayersPerTeam();                uint32 qHorde = 0;                uint32 qAlliance = 0;                uint32 q_min_level = bracketEntry->minLevel;                uint32 q_max_level = bracketEntry->maxLevel;                GroupsQueueType::const_iterator itr;                for (itr = m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_ALLIANCE].begin(); itr != m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_ALLIANCE].end(); ++itr)                    if (!(*itr)->IsInvitedToBGInstanceGUID)                        qAlliance += (*itr)->Players.size();                for (itr = m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_HORDE].begin(); itr != m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_HORDE].end(); ++itr)                    if (!(*itr)->IsInvitedToBGInstanceGUID)                        qHorde += (*itr)->Players.size();                // Show queue status to player only (when joining queue)                if (sWorld->getBoolConfig(CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY))                {                    ChatHandler(leader->GetSession()).PSendSysMessage(LANG_BG_QUEUE_ANNOUNCE_SELF, bg->GetName().c_str(), q_min_level, q_max_level,                        qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : (uint32)0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : (uint32)0);                }                // System message                else                {                    sWorld->SendWorldText(LANG_BG_QUEUE_ANNOUNCE_WORLD, bg->GetName().c_str(), q_min_level, q_max_level,                        qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : (uint32)0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : (uint32)0);                }            }        }//.........这里部分代码省略.........
开发者ID:Ergar,项目名称:TrinityCore,代码行数:101,


示例15: id

void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData){    uint64 guid;    uint32 bgTypeId_;    uint32 instanceId;    uint8 joinAsGroup;    bool isPremade = false;    Group* grp = NULL;    recvData >> guid;                                      // battlemaster guid    recvData >> bgTypeId_;                                 // battleground type id (DBC id)    recvData >> instanceId;                                // instance id, 0 if First Available selected    recvData >> joinAsGroup;                               // join as group    if (!sBattlemasterListStore.LookupEntry(bgTypeId_))    {        TC_LOG_ERROR("network", "Battleground: invalid bgtype (%u) received. possible cheater? player guid %u", bgTypeId_, _player->GetGUIDLow());        return;    }    if (DisableMgr::IsDisabledFor(DISABLE_TYPE_BATTLEGROUND, bgTypeId_, NULL))    {        ChatHandler(this).PSendSysMessage(LANG_BG_DISABLED);        return;    }    BattlegroundTypeId bgTypeId = BattlegroundTypeId(bgTypeId_);    TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_BATTLEMASTER_JOIN Message from (GUID: %u TypeId:%u)", GUID_LOPART(guid), GuidHigh2TypeId(GUID_HIPART(guid)));    // can do this, since it's battleground, not arena    BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(bgTypeId, 0);    BattlegroundQueueTypeId bgQueueTypeIdRandom = BattlegroundMgr::BGQueueTypeId(BATTLEGROUND_RB, 0);    // ignore if player is already in BG    if (_player->InBattleground())        return;    // get bg instance or bg template if instance not found    Battleground* bg = NULL;    if (instanceId)        bg = sBattlegroundMgr->GetBattlegroundThroughClientInstance(instanceId, bgTypeId);    if (!bg)        bg = sBattlegroundMgr->GetBattlegroundTemplate(bgTypeId);    if (!bg)        return;    // expected bracket entry    PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketByLevel(bg->GetMapId(), _player->getLevel());    if (!bracketEntry)        return;    GroupJoinBattlegroundResult err;    // check queue conditions    if (!joinAsGroup)    {        if (GetPlayer()->isUsingLfg())        {            // player is using dungeon finder or raid finder            WorldPacket data;            sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_LFG_CANT_USE_BATTLEGROUND);            GetPlayer()->GetSession()->SendPacket(&data);            return;        }        // check Deserter debuff        if (!_player->CanJoinToBattleground(bg))        {            WorldPacket data;            sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS);            _player->GetSession()->SendPacket(&data);            return;        }        if (_player->GetBattlegroundQueueIndex(bgQueueTypeIdRandom) < PLAYER_MAX_BATTLEGROUND_QUEUES)        {            // player is already in random queue            WorldPacket data;            sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_IN_RANDOM_BG);            _player->GetSession()->SendPacket(&data);            return;        }        if (_player->InBattlegroundQueue() && bgTypeId == BATTLEGROUND_RB)        {            // player is already in queue, can't start random queue            WorldPacket data;            sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_IN_NON_RANDOM_BG);            _player->GetSession()->SendPacket(&data);            return;        }        // check if already in queue        if (_player->GetBattlegroundQueueIndex(bgQueueTypeId) < PLAYER_MAX_BATTLEGROUND_QUEUES)            // player is already in this queue            return;        // check if has free queue slots//.........这里部分代码省略.........
开发者ID:WarlordCore,项目名称:TrinityCore-SymboCore,代码行数:101,


示例16: Player

void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder){    ObjectGuid playerGuid = holder->GetGuid();    Player* pCurrChar = new Player(this);    pCurrChar->GetMotionMaster()->Initialize();    // "GetAccountId()==db stored account id" checked in LoadFromDB (prevent login not own character using cheating tools)    if (!pCurrChar->LoadFromDB(playerGuid, holder))    {        KickPlayer();                                       // disconnect client, player no set to session and it will not deleted or saved at kick        delete pCurrChar;                                   // delete it manually        delete holder;                                      // delete all unprocessed queries        m_playerLoading = false;        return;    }    SetPlayer(pCurrChar);    WorldPacket data(SMSG_LOGIN_VERIFY_WORLD, 20);    data << pCurrChar->GetMapId();    data << pCurrChar->GetPositionX();    data << pCurrChar->GetPositionY();    data << pCurrChar->GetPositionZ();    data << pCurrChar->GetOrientation();    SendPacket(&data);    data.Initialize(SMSG_ACCOUNT_DATA_TIMES, 128);    for (int i = 0; i < 32; ++i)        data << uint32(0);    SendPacket(&data);    // Send MOTD (1.12.1 not have SMSG_MOTD, so do it in another way)    {        uint32 linecount = 0;        std::string str_motd = sWorld.GetMotd();        std::string::size_type pos, nextpos;        std::string motd;        pos = 0;        while ((nextpos = str_motd.find('@', pos)) != std::string::npos)        {            if (nextpos != pos)            {                ChatHandler(pCurrChar).PSendSysMessage(str_motd.substr(pos, nextpos - pos).c_str());                ++linecount;            }            pos = nextpos + 1;        }        if (pos < str_motd.length())        {            ChatHandler(pCurrChar).PSendSysMessage(str_motd.substr(pos).c_str());            ++linecount;        }        DEBUG_LOG("WORLD: Sent motd (SMSG_MOTD)");    }    // QueryResult *result = CharacterDatabase.PQuery("SELECT guildid,rank FROM guild_member WHERE guid = '%u'",pCurrChar->GetGUIDLow());    QueryResult* resultGuild = holder->GetResult(PLAYER_LOGIN_QUERY_LOADGUILD);    if (resultGuild)    {        Field* fields = resultGuild->Fetch();        pCurrChar->SetInGuild(fields[0].GetUInt32());        pCurrChar->SetRank(fields[1].GetUInt32());        delete resultGuild;    }    else if (pCurrChar->GetGuildId())                       // clear guild related fields in case wrong data about nonexistent membership    {        pCurrChar->SetInGuild(0);        pCurrChar->SetRank(0);    }    if (pCurrChar->GetGuildId() != 0)    {        Guild* guild = sGuildMgr.GetGuildById(pCurrChar->GetGuildId());        if (guild)        {            data.Initialize(SMSG_GUILD_EVENT, (2 + guild->GetMOTD().size() + 1));            data << uint8(GE_MOTD);            data << uint8(1);            data << guild->GetMOTD();            SendPacket(&data);            DEBUG_LOG("WORLD: Sent guild-motd (SMSG_GUILD_EVENT)");            guild->BroadcastEvent(GE_SIGNED_ON, pCurrChar->GetObjectGuid(), pCurrChar->GetName());        }        else        {            // remove wrong guild data            sLog.outError("Player %s (GUID: %u) marked as member of nonexistent guild (id: %u), removing guild membership for player.", pCurrChar->GetName(), pCurrChar->GetGUIDLow(), pCurrChar->GetGuildId());            pCurrChar->SetInGuild(0);        }    }    if (!pCurrChar->isAlive())        pCurrChar->SendCorpseReclaimDelay(true);//.........这里部分代码省略.........
开发者ID:mynew4,项目名称:MaNGOSZero,代码行数:101,


示例17: CheckMessage

void CheckMessage(Player* player, std::string& msg, uint32 lang, Player* /*receiver*/, Group* /*group*/, Guild* /*guild*/, Channel* channel){    //if (player->isGameMaster() || lang == LANG_ADDON)            //return;     // transform to lowercase (for simpler checking)    std::string lower = msg;    std::transform(lower.begin(), lower.end(), lower.begin(), ::tolower);     uint8 cheksSize = 83;    std::string checks[83];    checks[0] ="http://";    checks[1] =".com";    checks[2] =".www";    checks[3] =".net";    checks[4] =".org";    checks[5] =".ru";    checks[6] ="www.";    checks[7] ="wow-";    checks[8] ="-wow";    checks[9] ="eu";    checks[10] ="no-ip";    checks[11] =".zapto";    checks[12] ="wow-cool";    checks[13] ="elgracia";    checks[14] ="spzone";    checks[15] ="fakewow";    checks[16] ="deathside";    checks[17] ="warsong";    checks[18] ="RiverRise";    checks[19] ="air-world";    checks[20] =".lt";    checks[21] ="sirus";    checks[22] ="backkor";    checks[23] ="isengard";    checks[24] ="wowcircle";    checks[25] ="izbooshka";    checks[26] ="magic";	checks[27] ="PEDERAS";	checks[28] ="pedal";    checks[29] ="gei";    checks[30] ="shibanqk";    checks[31] ="kopele";    checks[32] ="kopelence";    checks[33] ="gei";    checks[34] ="lainar";    checks[35] ="guz";    checks[36] ="kurva";    checks[37] ="blackdevilbg";    checks[38] ="battlearenas";    checks[39] ="molten";    checks[40] ="molten-wow";    checks[41] ="zhyper";    checks[42] ="zhyper-wow";    checks[43] ="frostfire-wow";    checks[44] ="neverendless-wow";    checks[45] ="pomia";    checks[46] ="azis";    checks[47] ="negur";    checks[48] ="negar";    checks[49] ="ciganin";    checks[50] ="mangal";    checks[51] ="cingo";    checks[52] ="chernio";    checks[53] ="chernilko";    checks[54] ="bokluk";	checks[55] ="idiot";    checks[56] ="lainar";    checks[57] ="malumnik";    checks[58] ="pomak";    checks[59] ="arbain";    checks[60] ="svirka";    checks[61] ="svirkajia";    checks[62] ="kurvoletina";    checks[63] ="kuchka";    checks[64] ="shiban";    checks[65] ="travestit";    checks[66] ="kaput";    checks[67] ="hetero";	checks[68] ="putka";    checks[69] ="eban";    checks[70] ="ebah";    checks[71] ="sfirka";    checks[72] ="anal";    checks[73] ="analen";    checks[74] ="uralen";    checks[75] ="maika ti";    checks[76] ="ti eba";    checks[77] ="eba";    checks[78] ="deba";    checks[79] ="kur";	checks[80] ="pederast";	checks[81] ="pederas";	checks[82] ="maikati";    for (int i = 0; i < 83; ++i)        if (lower.find(checks[i]) != std::string::npos)        {            msg = "";            ChatHandler(player->GetSession()).PSendSysMessage("");                     return;//.........这里部分代码省略.........
开发者ID:brolaf,项目名称:TrinityCore,代码行数:101,


示例18: MakePlayerAlreadyMember

void Channel::JoinChannel(Player* player, std::string const& pass){    uint64 guid = player->GetGUID();    if (IsOn(guid))    {        // Do not send error message for built-in channels        if (!IsConstant())        {            WorldPacket data;            MakePlayerAlreadyMember(&data, guid);            SendToOne(&data, guid);        }        return;    }    if (IsBanned(guid))    {        WorldPacket data;        MakeBanned(&data);        SendToOne(&data, guid);        return;    }    if (!_password.empty() && pass != _password)    {        WorldPacket data;        MakeWrongPassword(&data);        SendToOne(&data, guid);        return;    }    if (HasFlag(CHANNEL_FLAG_LFG) &&        sWorld->getBoolConfig(CONFIG_RESTRICTED_LFG_CHANNEL) &&        AccountMgr::IsPlayerAccount(player->GetSession()->GetSecurity()) &&        player->GetGroup())    {        WorldPacket data;        MakeNotInLfg(&data);        SendToOne(&data, guid);        return;    }    player->JoinedChannel(this);    if (_announce && (!AccountMgr::IsGMAccount(player->GetSession()->GetSecurity()) ||                       !sWorld->getBoolConfig(CONFIG_SILENTLY_GM_JOIN_TO_CHANNEL)))    {        WorldPacket data;        MakeJoined(&data, guid);        SendToAll(&data);    }    PlayerInfo pinfo;    pinfo.player = guid;    pinfo.flags = MEMBER_FLAG_NONE;    pinfo.lastSpeakTime = 0;    pinfo.plrPtr = player;    playersStore[guid] = pinfo;    if (_channelRights.joinMessage.length())        ChatHandler(player->GetSession()).PSendSysMessage("%s", _channelRights.joinMessage.c_str());    WorldPacket data;    MakeYouJoined(&data);    SendToOne(&data, guid);    JoinNotify(player);    // Custom channel handling    if (!IsConstant())    {        // Update last_used timestamp in db        if (!playersStore.empty())            UpdateChannelUseageInDB();        if (_channelRights.moderators.find(player->GetSession()->GetAccountId()) != _channelRights.moderators.end())        {            playersStore[guid].SetModerator(true);            FlagsNotify(player);        }        // If the channel has no owner yet and ownership is allowed, set the new owner.        if (!_ownerGUID && _ownership)            SetOwner(guid, false);        if (_channelRights.flags & CHANNEL_RIGHT_CANT_SPEAK)            playersStore[guid].SetMuted(true);    }}
开发者ID:Keader,项目名称:Sunwell,代码行数:90,


示例19: HandleTeleGroupCommand

    //Teleport group to given game_tele.entry    static bool HandleTeleGroupCommand(ChatHandler* handler, const char* args)    {        if (!*args)            return false;        Player* target = handler->getSelectedPlayer();        if (!target)        {            handler->SendSysMessage(LANG_NO_CHAR_SELECTED);            handler->SetSentErrorMessage(true);            return false;        }        // check online security        if (handler->HasLowerSecurity(target, 0))            return false;        // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r        GameTele const* tele = handler->extractGameTeleFromLink((char*)args);        if (!tele)        {            handler->SendSysMessage(LANG_COMMAND_TELE_NOTFOUND);            handler->SetSentErrorMessage(true);            return false;        }        MapEntry const* map = sMapStore.LookupEntry(tele->mapId);        if (!map || map->IsBattlegroundOrArena())        {            handler->SendSysMessage(LANG_CANNOT_TELE_TO_BG);            handler->SetSentErrorMessage(true);            return false;        }        std::string nameLink = handler->GetNameLink(target);        Group* grp = target->GetGroup();        if (!grp)        {            handler->PSendSysMessage(LANG_NOT_IN_GROUP, nameLink.c_str());            handler->SetSentErrorMessage(true);            return false;        }        for (GroupReference* itr = grp->GetFirstMember(); itr != NULL; itr = itr->next())        {            Player* player = itr->GetSource();            if (!player || !player->GetSession())                continue;            // check online security            if (handler->HasLowerSecurity(player, 0))                return false;            std::string plNameLink = handler->GetNameLink(player);            if (player->IsBeingTeleported())            {                handler->PSendSysMessage(LANG_IS_TELEPORTED, plNameLink.c_str());                continue;            }            handler->PSendSysMessage(LANG_TELEPORTING_TO, plNameLink.c_str(), "", tele->name.c_str());            if (handler->needReportToTarget(player))                ChatHandler(player->GetSession()).PSendSysMessage(LANG_TELEPORTED_TO_BY, nameLink.c_str());            // stop flight if need            if (player->isInFlight())            {                player->GetMotionMaster()->MovementExpired();                player->CleanupAfterTaxiFlight();            }            // save only in non-flight case            else                player->SaveRecallPosition();            player->TeleportTo(tele->mapId, tele->position_x, tele->position_y, tele->position_z, tele->orientation);        }        return true;    }
开发者ID:Exodius,项目名称:chuspi,代码行数:83,


示例20: MakeNotMember

void Channel::KickOrBan(Player const* player, std::string const& badname, bool ban){    AccountTypes sec = player->GetSession()->GetSecurity();    uint64 good = player->GetGUID();    if (!IsOn(good))    {        WorldPacket data;        MakeNotMember(&data);        SendToOne(&data, good);        return;    }    if (!playersStore[good].IsModerator() && !AccountMgr::IsGMAccount(sec))    {        WorldPacket data;        MakeNotModerator(&data);        SendToOne(&data, good);        return;    }    bool banOffline = false; // pussywizard    bool isGoodConstantModerator = _channelRights.moderators.find(player->GetSession()->GetAccountId()) != _channelRights.moderators.end();    uint64 victim = 0;    uint32 badAccId = 0;    uint32 badSecurity = 0;    Player* bad = ObjectAccessor::FindPlayerByName(badname, false);    if (bad)    {        victim = bad->GetGUID();        badAccId = bad->GetSession()->GetAccountId();        badSecurity = bad->GetSession()->GetSecurity();    }    bool isOnChannel = victim && IsOn(victim);    if (!isOnChannel)    {        if (ban && (AccountMgr::IsGMAccount(sec) || isGoodConstantModerator))        {            if (uint32 lowGuid = sWorld->GetGlobalPlayerGUID(badname))                if (const GlobalPlayerData* gpd = sWorld->GetGlobalPlayerData(lowGuid))                {                    if (Player::TeamIdForRace(gpd->race) == Player::TeamIdForRace(player->getRace()))                    {                        banOffline = true;                        victim = MAKE_NEW_GUID(lowGuid, 0, HIGHGUID_PLAYER);                        badAccId = gpd->accountId;                    }                    else                    {                        ChatHandler(player->GetSession()).PSendSysMessage("Character %s has other faction!", badname.c_str());                        return;                    }                }            if (!banOffline)            {                WorldPacket data;                MakePlayerNotFound(&data, badname);                SendToOne(&data, good);                return;            }        }        else        {            WorldPacket data;            MakePlayerNotFound(&data, badname);            SendToOne(&data, good);            return;        }    }    bool changeowner = _ownerGUID == victim;    bool isBadConstantModerator = _channelRights.moderators.find(badAccId) != _channelRights.moderators.end();    if (!AccountMgr::IsGMAccount(sec) && !isGoodConstantModerator)    {        if (changeowner && good != _ownerGUID)        {            WorldPacket data;            MakeNotOwner(&data);            SendToOne(&data, good);            return;        }        if (ban && (_channelRights.flags & CHANNEL_RIGHT_CANT_BAN) || !ban && (_channelRights.flags & CHANNEL_RIGHT_CANT_KICK))        {            WorldPacket data;            MakeNotModerator(&data);            SendToOne(&data, good);            return;        }        if (isBadConstantModerator || AccountMgr::IsGMAccount(badSecurity))        {            WorldPacket data;            MakeNotModerator(&data);            SendToOne(&data, good);            return;//.........这里部分代码省略.........
开发者ID:Keader,项目名称:Sunwell,代码行数:101,


示例21: OnGossipSelect

		bool OnGossipSelect(Player * pPlayer, Creature * /*pCreature*/, uint32 /*uiSender*/, uint32 uiAction)		{			switch (uiAction)			{				case 0:				{										pPlayer->GetGUID();					ChatHandler(pPlayer->GetSession()).PSendSysMessage("Ja, es gibt eine Erstaustattung. In jedem Startgebiet steht der entsprechende NPC. Es darf und kann nur der erste Charakter ausgestattet werden.", pPlayer->GetName());					pPlayer->PlayerTalkClass->SendCloseGossip();					pPlayer->GetSession()->SendAreaTriggerMessage("Ja in den Startgebieten. Naehere Informationen auf der HP oder im Chatfenster.");					return true;                }break;				case 1:				{					pPlayer->GetGUID();					ChatHandler(pPlayer->GetSession()).PSendSysMessage("Einen GM erreicht ihr ueber das Ticketsystem. Jedoch koennt ihr auch den MMOwning Launcher benutzen, sowie eine PN an einen GM auf der Homepage schreiben.", pPlayer->GetName());					pPlayer->PlayerTalkClass->SendCloseGossip();					pPlayer->GetSession()->SendAreaTriggerMessage("Per Ticket, auf der Homepage, ueber den Launcher, oder ueber ein PN");					return true;                }break;				case 2:				{					pPlayer->GetGUID();					ChatHandler(pPlayer->GetSession()).PSendSysMessage("Das ist uns bekannt. Der Questcompleter verschickt nicht immer alle Questitems. Ist die Quest normal abschliessbar wird es hier keine Erstattung geben. Ein Zuruecktreten vom Completen kann auch nicht erfolgen. Weitere Informationen gibt es auf der Homepage.", pPlayer->GetName());					pPlayer->PlayerTalkClass->SendCloseGossip();					pPlayer->GetSession()->SendAreaTriggerMessage("Das ist bekannt und wird nicht erstattet. Genauere Informationen auf der Homepage.");					return true;                }break;				case 3:				{					pPlayer->GetGUID();					ChatHandler(pPlayer->GetSession()).PSendSysMessage("Hast du einen Fehler gefunden, melde dich bitte ueber den Bugtracker. Da Entwickler nicht auf dem Liveserver spielen, lesen sie keine Tickets. Im Bugtracker koennt ihr den Bearbeitungszustand eurer Tickets jederzeit nachverfolgen.", pPlayer->GetName());					pPlayer->PlayerTalkClass->SendCloseGossip();					pPlayer->GetSession()->SendAreaTriggerMessage("Melde dich am besten ueber den Bugtracker. Entwickler werden keine Tickets lesen, da sie nicht auf dem Liveserver spielen.");					return true;                }break;				case 4:				{					pPlayer->GetGUID();					ChatHandler(pPlayer->GetSession()).PSendSysMessage("Crossfaction spielen ist auf MMOwning nicht moeglich. Wir haben uns bewusst dagegen entschieden. Da wir einen pvp-orientierten Server stellen ist Crossfaction nicht moeglich.", pPlayer->GetName());					pPlayer->PlayerTalkClass->SendCloseGossip();					pPlayer->GetSession()->SendAreaTriggerMessage("Crossfaction spielen ist auf MMOwning nicht moeglich. Wir haben uns bewusst dagegen entschieden.");					return true;                }break;				case 5:				{					pPlayer->GetGUID();					ChatHandler(pPlayer->GetSession()).PSendSysMessage("Oeffne dein Chatfenster und schreibe /join Horde bzw. /join Allianz um dem Fraktionschat beizutreten.", pPlayer->GetName());					pPlayer->PlayerTalkClass->SendCloseGossip();					pPlayer->GetSession()->SendAreaTriggerMessage("Oeffne dein Chatfenster und gib /join Horde bzw. /join Allianz ein.");					return true;                }break;				case 6:				{					pPlayer->GetGUID();					ChatHandler(pPlayer->GetSession()).PSendSysMessage("Die komplette Rampoquestreihe ist per Questcompleter abschliessbar. Bitte nutze diesen auch bevor du ein Ticket eroeffnest.", pPlayer->GetName());					pPlayer->PlayerTalkClass->SendCloseGossip();					pPlayer->GetSession()->SendAreaTriggerMessage("Die Rampoquestreihe ist komplett per Questcompleter abschliessbar.");					return true;                }break;                                                    case 7:                {                    pPlayer->GetGUID();                    ChatHandler(pPlayer->GetSession()).PSendSysMessage("Einen 1:1 Gildentransfer gibt es nicht. Eine Aufwertung fuer neue Gilden ab 25 Spieler mit 251er Gear ist jedoch moeglich.", pPlayer->GetName());                    pPlayer->PlayerTalkClass->SendCloseGossip();                    pPlayer->GetSession()->SendAreaTriggerMessage("Einen 1:1 Transfer gibt es nicht. Aber eine Aufwertung fuer Gilden. Naehere Informationen gibt es auf der Homepage.");                    return true;                }break; 								return true;			};			return true;		}
开发者ID:mynew3,项目名称:Testrealm-Core,代码行数:85,


示例22: GetTrinityString

void BattleGround::EndBattleGround(uint32 winner){    this->RemoveFromBGFreeSlotQueue();    uint32 almost_winning_team = HORDE;    uint32 loser_rating = 0;    uint32 winner_rating = 0;    WorldPacket data;    Player *Source = NULL;    const char *winmsg = "";    if(winner == ALLIANCE)    {        winmsg = GetTrinityString(LANG_BG_A_WINS);        PlaySoundToAll(SOUND_ALLIANCE_WINS);                // alliance wins sound        SetWinner(WINNER_ALLIANCE);    }    else if(winner == HORDE)    {        winmsg = GetTrinityString(LANG_BG_H_WINS);        PlaySoundToAll(SOUND_HORDE_WINS);                   // horde wins sound        SetWinner(WINNER_HORDE);    }    else    {        SetWinner(3);    }    SetStatus(STATUS_WAIT_LEAVE);    m_EndTime = 0;    for(std::map<uint64, BattleGroundPlayer>::iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)    {        Player *plr = objmgr.GetPlayer(itr->first);        if(!plr)        {            sLog.outError("BattleGround: Player " I64FMTD " not found!", itr->first);            continue;        }        // should remove spirit of redemption        if(plr->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION))            plr->RemoveSpellsCausingAura(SPELL_AURA_MOD_SHAPESHIFT);        if(!plr->isAlive())        {            plr->ResurrectPlayer(1.0f);            plr->SpawnCorpseBones();        }        uint32 team = itr->second.Team;        if(!team) team = plr->GetTeam();        if(team == winner)        {            if(!Source)                Source = plr;            RewardMark(plr,ITEM_WINNER_COUNT);            UpdatePlayerScore(plr, SCORE_BONUS_HONOR, 20);            RewardQuest(plr);        }        else if(winner !=0)        {        RewardMark(plr,ITEM_LOSER_COUNT);        }    else if(winner == 0)    {        if(sWorld.getConfig(CONFIG_PREMATURE_BG_REWARD))    // We're feeling generous, giving rewards to people who not earned them ;)        {    //nested ifs for the win! its boring writing that, forgive me my unfunniness                        if(almost_winning_team == team)                    //player's team had more points                RewardMark(plr,ITEM_WINNER_COUNT);            else                RewardMark(plr,ITEM_LOSER_COUNT);            // if scores were the same, each team gets 1 mark.        }    }        plr->CombatStopWithPets(true);        BlockMovement(plr);        sBattleGroundMgr.BuildPvpLogDataPacket(&data, this);        plr->GetSession()->SendPacket(&data);        uint32 bgQueueTypeId = sBattleGroundMgr.BGQueueTypeId(GetTypeID());        sBattleGroundMgr.BuildBattleGroundStatusPacket(&data, this, plr->GetTeam(), plr->GetBattleGroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, TIME_TO_AUTOREMOVE, GetStartTime());        plr->GetSession()->SendPacket(&data);    }    // inform invited players about the removal    sBattleGroundMgr.m_BattleGroundQueues[sBattleGroundMgr.BGQueueTypeId(GetTypeID())].BGEndedRemoveInvites(this);    if(Source)    {        ChatHandler(Source).FillMessageData(&data, CHAT_MSG_BG_SYSTEM_NEUTRAL, LANG_UNIVERSAL, Source->GetGUID(), winmsg);        SendPacketToAll(&data);//.........这里部分代码省略.........
开发者ID:mynew,项目名称:TrinityCore-1,代码行数:101,


示例23: GetPlayer

void WorldSession::HandleChatMessage(ChatMsg type, uint32 lang, std::string msg, std::string target /*= ""*/){    Player* sender = GetPlayer();    if (lang == LANG_UNIVERSAL && type != CHAT_MSG_EMOTE)    {        TC_LOG_ERROR("network", "CMSG_MESSAGECHAT: Possible hacking-attempt: %s tried to send a message in universal language", GetPlayerInfo().c_str());        SendNotification(LANG_UNKNOWN_LANGUAGE);        return;    }    // prevent talking at unknown language (cheating)    LanguageDesc const* langDesc = GetLanguageDescByID(lang);    if (!langDesc)    {        SendNotification(LANG_UNKNOWN_LANGUAGE);        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);            return;        }    }    // send in universal language if player in .gm on mode (ignore spell effects)    if (sender->IsGameMaster())        lang = LANG_UNIVERSAL;    else    {        // send in universal language in two side iteration allowed mode        if (HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHAT))            lang = LANG_UNIVERSAL;        else        {            switch (type)            {                case CHAT_MSG_PARTY:                case CHAT_MSG_RAID:                case CHAT_MSG_RAID_WARNING:                    // allow two side chat at group channel if two side group allowed                    if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP))                        lang = LANG_UNIVERSAL;                    break;                case CHAT_MSG_GUILD:                case CHAT_MSG_OFFICER:                    // allow two side chat at guild channel if two side guild allowed                    if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD))                        lang = LANG_UNIVERSAL;                    break;                default:                    break;            }        }        // but overwrite it by SPELL_AURA_MOD_LANGUAGE auras (only single case used)        Unit::AuraEffectList const& ModLangAuras = sender->GetAuraEffectsByType(SPELL_AURA_MOD_LANGUAGE);        if (!ModLangAuras.empty())            lang = ModLangAuras.front()->GetMiscValue();    }    if (!sender->CanSpeak())    {        std::string timeStr = secsToTimeString(m_muteTime - time(NULL));        SendNotification(GetTrinityString(LANG_WAIT_BEFORE_SPEAKING), timeStr.c_str());        return;    }    if (sender->HasAura(GM_SILENCE_AURA) && type != CHAT_MSG_WHISPER)    {        SendNotification(GetTrinityString(LANG_GM_SILENCE), sender->GetName().c_str());        return;    }    if (msg.empty())        return;    if (ChatHandler(this).ParseCommands(msg.c_str()))        return;    // Strip invisible characters for non-addon messages    if (sWorld->getBoolConfig(CONFIG_CHAT_FAKE_MESSAGE_PREVENTING))        stripLineInvisibleChars(msg);    if (sWorld->getIntConfig(CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY) && !ChatHandler(this).isValidChatMessage(msg.c_str()))    {//.........这里部分代码省略.........
开发者ID:Jildor,项目名称:TrinityCore,代码行数:101,



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


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