首页
新闻资讯
魔兽7.0:《军团再临》
魔兽6.0:《德拉诺之王》
魔兽蓝贴汇总
魔兽暴雪嘉年华
职业攻略
战士
牧师
潜行者
圣骑士
术士
猎人
武僧
法师
萨满
德鲁伊
死亡骑士
恶魔猎手
资源下载
客户端下载
图片展示
漫画
壁纸
绘画
Cosplay
视频展示
文章资料
小说文集
玩家展示
怀旧魔兽
站内搜索
魔兽单机
当前位置:
首页
>>
魔兽单机
>>
正文
聊天(世界喊话等)文字过滤函数
2013-06-04 16:45:22
作者:网络 来源: 浏览次数:
0
中,你是否遇见很多玩家互相说脏话什么的,批评GM什么的。
当然,你也希望能过滤掉这些说话的内容。下面的这个函数就是过滤用的
std::string swearingReplacement(std::string str, std::string oldStr, const std::string newStr)
需要过滤的词语 过滤前的语句 过滤后的语句
这个就是
诅咒,咒骂过滤系统
看看完整的函数。
std::string swearingReplacement(std::string str, std::string oldStr, const std::string newStr)
{
typedef UNORDERED_MAP<char, size_t> FillerCharContainer;
FillerCharContainer m_FillerCharContainer;
size_t pos = 0;
// This sting will keep original case (capitals etc..)
std::string filteredString = str;
// the str string will be lowercase. To make matching easier from database
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
// Oldstr must search for lower case only, as that is what the string we are searching trough is.
std::transform(oldStr.begin(), oldStr.end(), oldStr.begin(), ::tolower);
for (std::string::iterator itr = str.begin(); itr != str.end(); ++itr)
{
if (ispunct(*itr) || isspace(*itr))
m_FillerCharContainer.REPLACE(std::make_pair<char, size_t>(*itr, pos));
++pos;
}
for (FillerCharContainer::const_iterator itr1 = m_FillerCharContainer.begin(); itr1 != m_FillerCharContainer.end(); ++itr1)
{
str.replace(itr1->second, 1, "");
filteredString.replace(itr1->second, 1, "");
}
pos = 0;
// We loop the lowercase string.
while((pos = str.find(oldStr, pos)) != std::string::npos)
{
size_t oldPos = pos;
// We replace equally in both strings, so they keep in sync on next iteration (if any next iteration).
str.replace(pos, oldStr.length(), newStr);
filteredString.replace(pos, oldStr.length(), newStr);
pos += newStr.length();
for (FillerCharContainer::iterator itr2 = m_FillerCharContainer.begin(); itr2 != m_FillerCharContainer.end();)
{
if (itr2->second >= oldPos + oldStr.length())
itr2->second += newStr.length() - oldStr.length();
size_t punctPos = itr2->second;
if (punctPos > oldPos && punctPos < oldPos + oldStr.length())
itr2 = m_FillerCharContainer.erase(itr2);
else
++itr2;
}
}
for (FillerCharContainer::const_iterator itr3 = m_FillerCharContainer.begin(); itr3 != m_FillerCharContainer.end(); ++itr3)
filteredString.REPLACE(filteredString.begin() + itr3->second, itr1->first);
return filteredString;
}
这个就是一个独立的函数,你得需要基本的C++知识。然后把函数加到你的代码中,就可以使用了!!
具体怎么使用,自己就多考虑考虑了
下面是完整代码下载
Chat filter function 代码完整下载
关键词:
魔兽世界单机
魔兽单机版
魔兽模拟器
相关报道:
Arcemu端所有脚本集合
魔兽世界单机基本的任务制作方法(Trinity端)...
[教程]如何修改魔兽单机中怪物(BOSS)的攻击力,血量...
如何使用navicat来制作单机装备
单机管理网页:角色管理页面带3D模型查看_PHP源码...
防外挂之防止增加WPE按键
魔兽模拟器-灾变系统-自定义设计代码...
[关闭]
[返回顶部]
返回首页
|
最新资讯
|
资源下载
|
魔兽图片
|
单机文档
|
技术攻略
|
玩家视频
备案号:蜀ICP备2024062380号-1
免责声明:本网站为热爱怀旧WOW的玩家们建立的魔兽世界资料网站,仅供交流和学习使用,非盈利和商用.如有侵权之处,请联系我们,我们会在24小时内确认删除侵权内容,谢谢合作。
Copyright © 2024 - 2024 WOWAII.COM Corporation, All Rights Reserved
机器人国度