887 lines
25 KiB
C++
887 lines
25 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "ChatSystem.h"
|
|||
|
|
|
|||
|
|
#define NEXTSUBMITTIME 30 //提交建议的时间间隔限制
|
|||
|
|
#define CHAT_BUFF_SIZE 256 //聊天读取buff大小
|
|||
|
|
bool CChatSystem::CheckChannelCD(tagChannelID cid)
|
|||
|
|
{
|
|||
|
|
if ((cid < 0) || (cid >= ciChannelMax)) return false;
|
|||
|
|
TICKCOUNT nCurrentTime = GetLogicCurrTickCount();
|
|||
|
|
if (nCurrentTime >= m_nNextHitTime[cid])
|
|||
|
|
{
|
|||
|
|
int nChatCD = 0;
|
|||
|
|
CLogicDataProvider *pDataProvider = GetLogicServer()->GetDataProvider();
|
|||
|
|
/*
|
|||
|
|
if (cid == ciChannelZhenying)
|
|||
|
|
{
|
|||
|
|
int nCampTitle = m_pEntity->GetProperty<int>(PROP_ACTOR_CAMP_TITLE);
|
|||
|
|
if (nCampTitle != INVALID_CAMP_TITLE_ID)
|
|||
|
|
{
|
|||
|
|
const CampTitleNode* pNode = pDataProvider->GetCampConfig().m_CampTitleTree.GetTitleNode(nCampTitle);
|
|||
|
|
if (pNode)
|
|||
|
|
{
|
|||
|
|
nChatCD = pNode->m_self.m_nChatCD;
|
|||
|
|
m_nNextHitTime[cid] = nCurrentTime + nChatCD;
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
*/
|
|||
|
|
//GLOBALCONFIG &gc = GetLogicServer()->GetDataProvider()->GetGlobalConfig();
|
|||
|
|
CHATSYSTEMCONFIG &gc = GetLogicServer()->GetDataProvider()->GetChatSystemConfig();
|
|||
|
|
int nChannelCD = gc.nChatChannelCD[cid];
|
|||
|
|
m_nNextHitTime[cid] = nCurrentTime + nChannelCD;
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CChatSystem::OnEnterGame()
|
|||
|
|
{
|
|||
|
|
if(m_pEntity) {
|
|||
|
|
((CActor*)m_pEntity)->SetProperty<unsigned int>(PROP_ACTOR_BANCHAT, m_nFreePostTime);
|
|||
|
|
GetGlobalLogicEngine()->GetChatMgr().sendHistoryChatMsg(((CActor*)m_pEntity));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CChatSystem::CheckLimit(tagChannelID cid)
|
|||
|
|
{
|
|||
|
|
if ((cid < 0) || (cid >= ciChannelMax)) return false;
|
|||
|
|
//GLOBALCONFIG &gc = GetLogicServer()->GetDataProvider()->GetGlobalConfig();
|
|||
|
|
CHATSYSTEMCONFIG &gc = GetLogicServer()->GetDataProvider()->GetChatSystemConfig();
|
|||
|
|
if(((CActor*)m_pEntity)->GetRechargeNum() > 0 && gc.nRechargeopen[cid] >= 1)
|
|||
|
|
return true;
|
|||
|
|
if( !( ((CActor*)m_pEntity)->CheckLevel((int)gc.ChatLimit[cid].wLevel, 0) && ((CActor*)m_pEntity)->CheckRecharge(gc.ChatLimit[cid].nRechargeAmount) ) )
|
|||
|
|
{
|
|||
|
|
m_pEntity->SendTipmsgFormatWithId(tmchatLevelLimit, tstFigthing, gc.ChatLimit[cid].wLevel, gc.ChatLimit[cid].nRechargeAmount);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CChatSystem::SetGambleFlag(bool isClose)
|
|||
|
|
{
|
|||
|
|
//开启赌博
|
|||
|
|
CDataPacket& dataPacket =GetLogicServer()->GetDbClient()->allocProtoPacket(jxInterSrvComm::DbServerProto::dcSetGambleFlag);
|
|||
|
|
dataPacket <<(unsigned int ) (isClose ?1:0); //玩家ID
|
|||
|
|
GetLogicServer()->GetDbClient()->flushProtoPacket(dataPacket);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CChatSystem::IsDigit(char * str)
|
|||
|
|
{
|
|||
|
|
if(str ==NULL) return false;
|
|||
|
|
for (INT_PTR i=0; i < (INT_PTR)strlen(str); i++)
|
|||
|
|
{
|
|||
|
|
if( i==0 && str[i] == '-') continue;
|
|||
|
|
if( str[i] < '0' || str[i] > '9' )
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//网络数据处理
|
|||
|
|
void CChatSystem::ProcessNetData(INT_PTR nCmd,CDataPacketReader &inPack )
|
|||
|
|
{
|
|||
|
|
bool result = false;
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
if (m_pEntity ==NULL) break;
|
|||
|
|
|
|||
|
|
unsigned int nSex = m_pEntity->GetProperty<unsigned int>(PROP_ACTOR_SEX); //获取玩家的性别
|
|||
|
|
unsigned int nCircle = m_pEntity->GetProperty<unsigned int>(PROP_ACTOR_CIRCLE); //获取玩家的转数
|
|||
|
|
|
|||
|
|
if (nCmd == cSendReqCsChat)
|
|||
|
|
{
|
|||
|
|
OnCustomReqCsChat(inPack);
|
|||
|
|
// BYTE nChannleID = 0;
|
|||
|
|
// int nSvID = 0;
|
|||
|
|
// unsigned int nMsgTime = 0;
|
|||
|
|
// inPack >> nChannleID;
|
|||
|
|
// inPack >> nSvID;
|
|||
|
|
// inPack >> nMsgTime;
|
|||
|
|
|
|||
|
|
// char strBuff[10240];
|
|||
|
|
// memset(strBuff, 0, sizeof(strBuff));
|
|||
|
|
// CActorPacket ap;
|
|||
|
|
// CDataPacket& outPack = m_pEntity->AllocPacket(ap);
|
|||
|
|
// //CDataPacket outPack(strBuff, sizeof(strBuff));
|
|||
|
|
// outPack << (BYTE) enChatSystemID << (BYTE)sSendReqCsChat <<(BYTE)ciChannelTipmsg;
|
|||
|
|
// int ccount = 0;
|
|||
|
|
// INT_PTR nOffer = outPack.getPosition();
|
|||
|
|
// outPack << ccount;
|
|||
|
|
// std::vector<CChatManager::CHATRECORD> & pCsRecord = GetGlobalLogicEngine()->GetChatMgr().GetChatCsRecord();
|
|||
|
|
// for (size_t i = 0; i < pCsRecord.size(); i++)
|
|||
|
|
// {
|
|||
|
|
// if(nMsgTime != 0 && pCsRecord[i].msgTime <= nMsgTime)
|
|||
|
|
// {
|
|||
|
|
// continue;
|
|||
|
|
// }
|
|||
|
|
// outPack << (unsigned int) pCsRecord[i].msgTime;
|
|||
|
|
// std::string sstr = pCsRecord[i].msg;
|
|||
|
|
// outPack.writeString(sstr.c_str());
|
|||
|
|
// ccount++;
|
|||
|
|
// }
|
|||
|
|
// INT_PTR nOffer2 = outPack.getPosition();
|
|||
|
|
// outPack.setPosition(nOffer);
|
|||
|
|
// outPack << ccount;
|
|||
|
|
// outPack.setPosition(nOffer2);
|
|||
|
|
// ap.flush();
|
|||
|
|
}
|
|||
|
|
else if (nCmd == cSendClearMsgRefresh)
|
|||
|
|
{
|
|||
|
|
OnEnterGame();
|
|||
|
|
}
|
|||
|
|
else if (nCmd == cSendChat)
|
|||
|
|
{
|
|||
|
|
BYTE nChannleID =0;
|
|||
|
|
inPack >> nChannleID;
|
|||
|
|
char msg[CHAT_BUFF_SIZE];
|
|||
|
|
size_t nReadSize= inPack.readString( msg,sizeof(msg) );
|
|||
|
|
if (!CheckChatLen(msg))
|
|||
|
|
{
|
|||
|
|
m_pEntity->SendTipmsgFormatWithId(tmchaToLength, tstFigthing);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if (HaveCutChar(msg))
|
|||
|
|
{
|
|||
|
|
m_pEntity->SendTipmsgFormatWithId(tmchatillegal, tstFigthing);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if('@' == msg[0]) //GM命令来了
|
|||
|
|
{
|
|||
|
|
if (m_pEntity->GetGmLevel() >= 0)
|
|||
|
|
{
|
|||
|
|
ProcessGmCommand(msg);
|
|||
|
|
}
|
|||
|
|
break; // 不是GM,直接忽略该聊天
|
|||
|
|
}
|
|||
|
|
if (!CheckLimit((tagChannelID)nChannleID))
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (IsForbit(nChannleID))
|
|||
|
|
{
|
|||
|
|
m_pEntity->SendTipmsgFormatWithId(tmThisChanalForbit, tstUI);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!CheckChannelCD((tagChannelID)nChannleID) && !m_bIsTalkFree )
|
|||
|
|
{
|
|||
|
|
m_pEntity->SendTipmsgFormatWithId(tmchatCDLimit, tstFigthing);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if (IsShutup())
|
|||
|
|
{
|
|||
|
|
m_pEntity->SendTipmsgFormatWithId(tmBanChat, tstChatSystem);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
byte nParam = 0;
|
|||
|
|
std::string sendName = "";
|
|||
|
|
ACTORNAME name;
|
|||
|
|
inPack.readString(name,sizeof(name)); // 读取名字
|
|||
|
|
sendName = name;
|
|||
|
|
if(nChannleID == ciChannelSecret) //私聊
|
|||
|
|
{
|
|||
|
|
CActor * pActor = GetGlobalLogicEngine()->GetEntityMgr()->GetActorPtrByName(sendName.c_str()); //对方玩家
|
|||
|
|
if(pActor ==NULL)
|
|||
|
|
{
|
|||
|
|
m_pEntity->SendTipmsgFormatWithId(tmpChatTargetOffLine, tstFigthing);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if(pActor && pActor->GetId() == m_pEntity->GetId())
|
|||
|
|
{
|
|||
|
|
m_pEntity->SendTipmsgFormatWithId(tmChatnotaddSelf, tstFigthing);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
BYTE isItem = 0;
|
|||
|
|
CUserItem::ItemSeries itemGuid;
|
|||
|
|
inPack >>isItem;
|
|||
|
|
if(isItem == 1)
|
|||
|
|
{
|
|||
|
|
inPack >> itemGuid.llId;
|
|||
|
|
CUserItem* pUserIem= m_pEntity->GetBagSystem().FindItemByGuid(itemGuid);
|
|||
|
|
if(pUserIem) {
|
|||
|
|
GetGlobalLogicEngine()->GetChatMgr().addShowItem(pUserIem);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//发送消息
|
|||
|
|
result = SendChat(nChannleID, msg, true, nParam, sendName, itemGuid.llId);
|
|||
|
|
//发送聊天信息到日志
|
|||
|
|
if (!IsShutup() && GetLogicServer()->GetLogClient())
|
|||
|
|
{
|
|||
|
|
LPCSTR sIp = ((CActor *)m_pEntity)->GetIp();
|
|||
|
|
char sBuff[500];
|
|||
|
|
sprintf_s(sBuff, ArrayCount(sBuff), "%s\b%s\b%s", sIp,m_pEntity->GetAccount(), msg);
|
|||
|
|
GetLogicServer()->GetLogClient()->SendChatLog(nChannleID, (char*)m_pEntity->GetEntityName(),m_pEntity->GetId(), sBuff);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if( nCmd == cGmBroadCast) //GM发公告
|
|||
|
|
{
|
|||
|
|
if(m_pEntity->GetGmLevel() <=0 ) break; //不是gm不能发
|
|||
|
|
int nMask =0;
|
|||
|
|
char buff[512];
|
|||
|
|
inPack.readString(buff,sizeof(buff)); //读取消息
|
|||
|
|
if (HaveCutChar(buff))
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
inPack >> nMask; //需要显示的位置
|
|||
|
|
GetGlobalLogicEngine()->GetEntityMgr()->BroadcastTipmsg(buff,nMask);
|
|||
|
|
}
|
|||
|
|
else if(nCmd == cSendHelp) //求救
|
|||
|
|
{
|
|||
|
|
BroadcastSendHelp(inPack);
|
|||
|
|
}
|
|||
|
|
else if(nCmd == cGetChatShowItem)
|
|||
|
|
{
|
|||
|
|
CUserItem::ItemSeries itemGuid;
|
|||
|
|
inPack >> itemGuid.llId;
|
|||
|
|
CActorPacket ap;
|
|||
|
|
CDataPacket& data = m_pEntity->AllocPacket(ap);
|
|||
|
|
data << (BYTE)enChatSystemID << (BYTE)sGetChatShowItem;
|
|||
|
|
CUserItem userItem;
|
|||
|
|
GetGlobalLogicEngine()->GetChatMgr().GetShowItem(userItem, itemGuid.llId);
|
|||
|
|
if(userItem.series.llId > 0)
|
|||
|
|
{
|
|||
|
|
data << (BYTE)1;
|
|||
|
|
userItem >>data;
|
|||
|
|
}else
|
|||
|
|
{
|
|||
|
|
data <<(BYTE)0;
|
|||
|
|
}
|
|||
|
|
ap.flush();
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}while (false);
|
|||
|
|
|
|||
|
|
CActorPacket pack;
|
|||
|
|
CDataPacket & data = m_pEntity->AllocPacket(pack);
|
|||
|
|
data << (BYTE) enChatSystemID << (BYTE) sChatResult;
|
|||
|
|
data<<(BYTE)result;
|
|||
|
|
pack.flush();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//求救
|
|||
|
|
void CChatSystem::BroadcastSendHelp(CDataPacketReader &inPack)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CChatSystem::SendChat(int nChannleID, char *msg, bool boSave, byte nParam, std::string sendName, LONG64 itemId)
|
|||
|
|
{
|
|||
|
|
if (m_pEntity ==NULL) return false;
|
|||
|
|
|
|||
|
|
char buff[1024];
|
|||
|
|
CDataPacket outPack(buff, sizeof(buff)); //下发的数据包
|
|||
|
|
|
|||
|
|
unsigned int nSex =m_pEntity->GetProperty<unsigned int>(PROP_ACTOR_SEX); //获取玩家的性别
|
|||
|
|
unsigned int nCircle = m_pEntity->GetProperty<unsigned int>(PROP_ACTOR_CIRCLE); //获取玩家的转数
|
|||
|
|
|
|||
|
|
/// 禁言
|
|||
|
|
CheckAutoSilencing(msg);
|
|||
|
|
|
|||
|
|
GetGlobalLogicEngine()->GetChatMgr().Filter(msg) ;
|
|||
|
|
outPack << (BYTE) enChatSystemID << (BYTE)sSendChat <<(BYTE)nChannleID;
|
|||
|
|
|
|||
|
|
outPack.writeString(m_pEntity->GetEntityName()); //把自己的名字写上去
|
|||
|
|
outPack.writeString(msg);
|
|||
|
|
|
|||
|
|
outPack << m_pEntity->GetLevel();
|
|||
|
|
Uint64 actorid = Uint64(m_pEntity->GetHandle());
|
|||
|
|
outPack <<actorid;
|
|||
|
|
outPack<<(unsigned int)(m_pEntity->GetProperty<unsigned int>(PROP_ACTOR_SUPPER_PLAY_LVL));
|
|||
|
|
outPack << (BYTE)(itemId != 0? 1:0);
|
|||
|
|
if(itemId != 0)
|
|||
|
|
{
|
|||
|
|
outPack << itemId;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool boCanSendToLog = true;
|
|||
|
|
if (IsShutup())
|
|||
|
|
{
|
|||
|
|
((CActor *)m_pEntity)->SendData(outPack.getMemoryPtr(), outPack.getPosition());
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
switch(nChannleID)
|
|||
|
|
{
|
|||
|
|
case ciChannelSecret: //私聊
|
|||
|
|
{
|
|||
|
|
CActor * pActor = GetGlobalLogicEngine()->GetEntityMgr()->GetActorPtrByName(sendName.c_str()); //对方玩家
|
|||
|
|
if(pActor ==NULL)
|
|||
|
|
{
|
|||
|
|
m_pEntity->SendTipmsgFormatWithId(tmpChatTargetOffLine, tstFigthing);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
if(pActor->GetFriendSystem().GetSocialFlag(m_pEntity->GetId(),SOCIAL_BLACK))
|
|||
|
|
{
|
|||
|
|
m_pEntity->SendTipmsgFormatWithId(tmpChatTargetOffLine, tstFigthing);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!pActor->OnGetIsSimulator()
|
|||
|
|
&& !pActor->OnGetIsTestSimulator())
|
|||
|
|
{
|
|||
|
|
CActorPacket pack;
|
|||
|
|
CDataPacket & data = pActor->AllocPacket(pack);
|
|||
|
|
data.writeBuf(outPack.getMemoryPtr(),outPack.getPosition());
|
|||
|
|
pack.flush();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ((CActor*)m_pEntity)->GetFriendSystem().AddLinkManLately(pActor); //本人的“私聊”添加对方
|
|||
|
|
// pActor->GetFriendSystem().AddLinkManLately((CActor*)m_pEntity); //对方的“私聊”添加本人
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case ciChannelNear: //附近
|
|||
|
|
{
|
|||
|
|
m_pEntity->GetObserverSystem()->BroadCast(outPack.getMemoryPtr(), outPack.getPosition(),true); //附近广播
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
case ciChannelGuild: //工会
|
|||
|
|
m_pEntity->GetGuildSystem()->BroadCast(outPack.getMemoryPtr(), outPack.getPosition());
|
|||
|
|
break;
|
|||
|
|
case ciChannelTeam: //队伍聊天
|
|||
|
|
m_pEntity->GetTeamSystem().BroadCast(outPack.getMemoryPtr(), outPack.getPosition());
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case ciChannelWorld: //世界频道
|
|||
|
|
{
|
|||
|
|
// CUserItemContainer::ItemOPParam param;
|
|||
|
|
// param.wItemId = (WORD) (GetLogicServer()->GetDataProvider()->GetChatSystemConfig().nWorldChatItemItem); //世界喊话的物品的ID
|
|||
|
|
// param.btBindFlag = -1;
|
|||
|
|
// CUserBag& bag = m_pEntity->GetBagSystem();
|
|||
|
|
// param.wCount = 1;
|
|||
|
|
// if (param.wCount <= bag.GetItemCount(param.wItemId))
|
|||
|
|
// {
|
|||
|
|
// //ms.SendLackItem(param.wItemId, param.wCount);
|
|||
|
|
// if(bag.DeleteItem(param,"laba",GameLog::clWorldTalkItem/*, -1, m_pEntity*/) < 1)
|
|||
|
|
// return false;
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// int boratNum = m_pEntity->GetProperty<int>(PROP_ACTOR_BROATNUM);
|
|||
|
|
// if(boratNum ==0)
|
|||
|
|
// {
|
|||
|
|
// m_pEntity->SendTipmsgFormatWithId(tmBoratNotEnough, tstFigthing);
|
|||
|
|
// return false;
|
|||
|
|
// }
|
|||
|
|
// m_pEntity->RemoveConsume(qatBroat, 0, 1, -1, -1,-1,0, GameLog::Log_WorldChat);
|
|||
|
|
//全服聊天限制
|
|||
|
|
int nVip = ((CActor*)m_pEntity)->GetMiscSystem().GetMaxColorCardLevel();
|
|||
|
|
CHATSYSTEMCONFIG &gc = GetLogicServer()->GetDataProvider()->GetChatSystemConfig();
|
|||
|
|
if(nVip >= gc.nVipChats.size()) {
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
int nMaxTimes = gc.nVipChats[nVip];
|
|||
|
|
int nUseTimes = ((CActor*)m_pEntity)->GetStaticCountSystem().GetStaticCount(gc.nCounter);
|
|||
|
|
if((nMaxTimes != -1) && (nUseTimes >= nMaxTimes)) {
|
|||
|
|
m_pEntity->SendTipmsgFormatWithId(tmChatVipLimit, tstUI);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
((CActor*)m_pEntity)->GetStaticCountSystem().AddStaticCount(gc.nCounter,1);
|
|||
|
|
|
|||
|
|
GetGlobalLogicEngine()->GetChatMgr().AddChatRecord(outPack.getMemoryPtr(), outPack.getPosition());
|
|||
|
|
GetGlobalLogicEngine()->GetEntityMgr()->BroadCast(outPack.getMemoryPtr(), outPack.getPosition());
|
|||
|
|
|
|||
|
|
if(nMaxTimes != -1 && nMaxTimes-nUseTimes-1 <= gc.nDisplayLeftTimesLimit ) {
|
|||
|
|
m_pEntity->SendTipmsgFormatWithId(tmChatVipLeftTimes, tstFigthing,nMaxTimes-nUseTimes-1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// LPCTSTR sLogText = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpLogWorldChat);
|
|||
|
|
// if (nCount == 0 || m_pEntity->ChangeMoney(mtCoin,-1*nCount,GameLog::clChatMoney,0, sLogText,true)) //先扣除银两才能进行世界聊天
|
|||
|
|
// {
|
|||
|
|
// GetGlobalLogicEngine()->GetEntityMgr()->BroadCast(outPack.getMemoryPtr(), outPack.getPosition());
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (boCanSendToLog && boSave && GetLogicServer()->GetDataProvider()->GetChatSystemConfig().nChatLogFlag > 0)
|
|||
|
|
{
|
|||
|
|
SaveChatMsg(nChannleID, (char *)m_pEntity->GetEntityName(), msg);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 贪玩聊天上报
|
|||
|
|
static char *pSPID = (char *)GetLogicServer()->GetVSPDefine().GetDefinition("SPID");
|
|||
|
|
char cSPID[CHAT_BUFF_SIZE] = {"27"};
|
|||
|
|
if ( strcmp(pSPID, cSPID) == 0 )
|
|||
|
|
{
|
|||
|
|
TanWanChatReport(m_pEntity->GetAccount(), m_pEntity->GetId(), m_pEntity->GetEntityName(), nChannleID, msg, sendName.c_str());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CChatSystem::SendChatMessageByChannel(int channel, char * outPack,SIZE_T nSize)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
switch(channel)
|
|||
|
|
{
|
|||
|
|
case ciChannelNear: //附近
|
|||
|
|
m_pEntity->GetObserverSystem()->BroadCast(outPack, nSize,true); //附近广播
|
|||
|
|
break;
|
|||
|
|
case ciChannelGuild: //工会
|
|||
|
|
m_pEntity->GetGuildSystem()->BroadCast(outPack, nSize);
|
|||
|
|
break;
|
|||
|
|
case ciChannelTeam: //队伍聊天
|
|||
|
|
m_pEntity->GetTeamSystem().BroadCast(outPack, nSize);
|
|||
|
|
break;
|
|||
|
|
case ciChannelWorld: //世界频道
|
|||
|
|
GetGlobalLogicEngine()->GetEntityMgr()->BroadCast(outPack, nSize);
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
default:
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CChatSystem::SetShutup(bool bForbid, INT_PTR nDuration)
|
|||
|
|
{
|
|||
|
|
if (bForbid)
|
|||
|
|
{
|
|||
|
|
m_nFreePostTime = (unsigned int)(GetGlobalLogicEngine()->getMiniDateTime() + nDuration);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
m_nFreePostTime = GetGlobalLogicEngine()->getMiniDateTime();
|
|||
|
|
m_nChatHitCount = 0;
|
|||
|
|
}
|
|||
|
|
if(m_pEntity)
|
|||
|
|
((CActor*)m_pEntity)->SetProperty<unsigned int>(PROP_ACTOR_BANCHAT, m_nFreePostTime);
|
|||
|
|
m_bShutup = bForbid;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
bool CChatSystem::IsShutup()
|
|||
|
|
{
|
|||
|
|
unsigned int nCurrTm = GetGlobalLogicEngine()->getMiniDateTime();
|
|||
|
|
if (m_nFreePostTime <= nCurrTm)
|
|||
|
|
{
|
|||
|
|
m_nFreePostTime = nCurrTm;
|
|||
|
|
m_nChatHitCount = 0;
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
unsigned int CChatSystem::GetFreePostTime()
|
|||
|
|
{
|
|||
|
|
return m_nFreePostTime;
|
|||
|
|
}
|
|||
|
|
void CChatSystem::SetOffLineShutUp(unsigned int nActorId, bool bForbid, INT_PTR nDuration)
|
|||
|
|
{
|
|||
|
|
CActor* pActor = GetGlobalLogicEngine()->GetEntityMgr()->GetEntityPtrByActorID(nActorId);
|
|||
|
|
if(pActor)
|
|||
|
|
{
|
|||
|
|
pActor->GetChatSystem()->SetShutup(bForbid, nDuration);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (bForbid)
|
|||
|
|
{
|
|||
|
|
unsigned int nTime = (unsigned int)(GetGlobalLogicEngine()->getMiniDateTime() + nDuration);
|
|||
|
|
SaveShutUpData(nActorId, nTime);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
SaveShutUpData(nActorId, 0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
void CChatSystem::SaveShutUpData(unsigned int nActorId, unsigned int nFreePostTime)
|
|||
|
|
{
|
|||
|
|
CCLVariant &var = GetGlobalLogicEngine()->GetGlobalVarMgr().GetVar();
|
|||
|
|
CCLVariant* pList = var.get("FreePostTimeList");
|
|||
|
|
if (!pList)
|
|||
|
|
{
|
|||
|
|
pList = &var.set("FreePostTimeList");
|
|||
|
|
}
|
|||
|
|
if (pList)
|
|||
|
|
{
|
|||
|
|
char sId[64];
|
|||
|
|
sprintf(sId,"%u",nActorId);
|
|||
|
|
CCLVariant* pActorVar = pList->get(sId);
|
|||
|
|
if (!pActorVar)
|
|||
|
|
{
|
|||
|
|
pActorVar = &pList->set(sId);
|
|||
|
|
}
|
|||
|
|
if (pActorVar)
|
|||
|
|
{
|
|||
|
|
pActorVar->set("FreePostTime", (double)(nFreePostTime));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
void CChatSystem::SaveToScriptData(PACTORDBDATA pData)
|
|||
|
|
{
|
|||
|
|
pData->nShutUpTime = m_nFreePostTime;
|
|||
|
|
//SaveShutUpData(m_pEntity->GetId(), GetFreePostTime());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CChatSystem::LoadFromScriptData()
|
|||
|
|
{
|
|||
|
|
CCLVariant &var = GetGlobalLogicEngine()->GetGlobalVarMgr().GetVar();
|
|||
|
|
CCLVariant* pList = var.get("FreePostTimeList");
|
|||
|
|
if (pList)
|
|||
|
|
{
|
|||
|
|
char sId[64];
|
|||
|
|
sprintf(sId,"%u",m_pEntity->GetId());
|
|||
|
|
CCLVariant* pActorVar = pList->get(sId);
|
|||
|
|
if (pActorVar)
|
|||
|
|
{
|
|||
|
|
CCLVariant* pVar = pActorVar->get("FreePostTime");
|
|||
|
|
if(pVar)
|
|||
|
|
{
|
|||
|
|
unsigned int nFreePostTime = (unsigned int)((double)(*pVar));
|
|||
|
|
unsigned int nCurrMiniTime = GetGlobalLogicEngine()->getMiniDateTime();
|
|||
|
|
if (nFreePostTime && nFreePostTime > nCurrMiniTime)
|
|||
|
|
{
|
|||
|
|
SetShutup(true, nFreePostTime - nCurrMiniTime);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
char* CChatSystem::GetChannelName(int ChannelId)
|
|||
|
|
{
|
|||
|
|
switch(ChannelId)
|
|||
|
|
{
|
|||
|
|
case ciChannelSecret:
|
|||
|
|
return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpChannelSecret);
|
|||
|
|
case ciChannelNear:
|
|||
|
|
return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpChannelNear);
|
|||
|
|
// case ciChannelHorn:
|
|||
|
|
// return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpChannelHorn);
|
|||
|
|
case ciChannelGuild:
|
|||
|
|
return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpChannelGuild);
|
|||
|
|
case ciChannelTeam:
|
|||
|
|
return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpChannelTeam);
|
|||
|
|
// case ciChannelBigTeam:
|
|||
|
|
// return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpChannelBigTeam);
|
|||
|
|
// case ciChannelMap:
|
|||
|
|
// return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpChannelMap);
|
|||
|
|
// case ciChannelTipmsg:
|
|||
|
|
// return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpChannelTipmsg);
|
|||
|
|
// case ciChannelZhenying:
|
|||
|
|
// return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpChannelZhenying);
|
|||
|
|
// case ciChannelSystem:
|
|||
|
|
// return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpChannelSystem);
|
|||
|
|
case ciChannelWorld:
|
|||
|
|
return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpChannelWorld);
|
|||
|
|
// case ciChannelHelp:
|
|||
|
|
// return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpChannelHelp);
|
|||
|
|
// case ciChannelFriend:
|
|||
|
|
// return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpChannelZhenying); //复用成好友
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CChatSystem::SaveChatMsg(int ChannelId,char * userName,char * strMsg)
|
|||
|
|
{
|
|||
|
|
LPCTSTR channelName = GetChannelName(ChannelId);
|
|||
|
|
if(channelName == NULL) return;
|
|||
|
|
|
|||
|
|
switch(ChannelId)
|
|||
|
|
{
|
|||
|
|
//case ciChannelSecret:
|
|||
|
|
//case ciChannelNear:
|
|||
|
|
case ciChannelGuild:
|
|||
|
|
//case ciChannelTeam:
|
|||
|
|
case ciChannelWorld:
|
|||
|
|
case ciChannelSystem:
|
|||
|
|
case ciChannelIntegrated:
|
|||
|
|
{
|
|||
|
|
//记录日志
|
|||
|
|
if(GetLogicServer()->GetLocalClient())
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CChatSystem::GetSortChatMsg(const char* msg, char* all, char* word)
|
|||
|
|
{
|
|||
|
|
LPCSTR sptr;
|
|||
|
|
INT_PTR nLen = 0;
|
|||
|
|
unsigned char ch;
|
|||
|
|
char letter[CHAT_BUFF_SIZE] = {'\0'};
|
|||
|
|
char other[CHAT_BUFF_SIZE] = {'\0'};
|
|||
|
|
for ( sptr = msg; *sptr; sptr= sptr + nLen)
|
|||
|
|
{
|
|||
|
|
ch = (unsigned char)*sptr;
|
|||
|
|
if((ch & 0xF8) == 0xF8) //5个字节111110xx 10xxxxxx 10xxxxxx 10xxxxxx
|
|||
|
|
{
|
|||
|
|
nLen =5;
|
|||
|
|
}
|
|||
|
|
else if( (ch & 0xF0) == 0xF0 )//4个字节11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
|
|||
|
|
{
|
|||
|
|
nLen =4;
|
|||
|
|
}
|
|||
|
|
else if( (ch & 0xE0) == 0xE0)//3个字节1110xxxx 10xxxxxx 10xxxxxx
|
|||
|
|
{
|
|||
|
|
nLen =3;
|
|||
|
|
}
|
|||
|
|
else if( (ch & 0xC0) == 0xC0 )//2个字节110xxxxx 10xxxxxx
|
|||
|
|
{
|
|||
|
|
nLen =2;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
nLen =1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (nLen >=2)
|
|||
|
|
{
|
|||
|
|
strncat(all,sptr,nLen);
|
|||
|
|
strncat(word,sptr,nLen);
|
|||
|
|
}
|
|||
|
|
else if (nLen == 1)
|
|||
|
|
{
|
|||
|
|
if (ch > 'A' && ch <'Z' || ch >'a'&& ch < 'z')
|
|||
|
|
{
|
|||
|
|
strncat(letter,sptr,nLen);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
strncat(other,sptr,nLen);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
strcat(all,letter);
|
|||
|
|
strcat(all,other);
|
|||
|
|
}
|
|||
|
|
// 检测禁言
|
|||
|
|
void CChatSystem::CheckAutoSilencing(const char* msg)
|
|||
|
|
{
|
|||
|
|
//GLOBALCONFIG& gc(GetLogicServer()->GetDataProvider()->GetGlobalConfig());
|
|||
|
|
CHATSYSTEMCONFIG& gc = GetLogicServer()->GetDataProvider()->GetChatSystemConfig();
|
|||
|
|
if( ! m_pEntity->CheckLevel((int)gc.nAutoSilenceLevel+1, 0))
|
|||
|
|
{ // 包含nAutoSilenceLevel,所以+1
|
|||
|
|
char all[CHAT_BUFF_SIZE] = {'\0'};//排序下中文字母,提高屏蔽字识别率
|
|||
|
|
char word[CHAT_BUFF_SIZE] = {'\0'};//中文
|
|||
|
|
GetSortChatMsg(msg,all,word);
|
|||
|
|
if (! GetGlobalLogicEngine()->GetChatMgr().IsStrInvalid((char*)all, 2))
|
|||
|
|
{
|
|||
|
|
++m_nChatHitCount;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (strcmp(m_lastChatMsg,word) == 0)//只记录中文
|
|||
|
|
{
|
|||
|
|
m_nSameChatMsgCount++;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
m_nSameChatMsgCount = 0;
|
|||
|
|
}
|
|||
|
|
strcpy(m_lastChatMsg,word);
|
|||
|
|
if ( !IsShutup())
|
|||
|
|
{
|
|||
|
|
CChatManager &mgr= GetGlobalLogicEngine()->GetChatMgr();
|
|||
|
|
unsigned long nIp = inet_addr(m_pEntity->GetIp());
|
|||
|
|
int nShutupIpCount = mgr.GetChatShutUpIpCount(nIp);
|
|||
|
|
if (nShutupIpCount >= gc.nAutoSilenceSameIpShutup)//ip禁言
|
|||
|
|
{
|
|||
|
|
SetShutup(true, gc.nAutoSilencingSecond );
|
|||
|
|
}
|
|||
|
|
if (m_nChatHitCount > gc.nAutoSilencing)//forbitword禁言
|
|||
|
|
{
|
|||
|
|
SetShutup(true, gc.nAutoSilencingSecond );
|
|||
|
|
// mgr.AddChatShutUpIpCount(nIp);
|
|||
|
|
}
|
|||
|
|
if (m_nSameChatMsgCount >= gc.nSameChatSliencingCount)//发相同内容禁言
|
|||
|
|
{
|
|||
|
|
SetShutup(true, gc.nSameChatSliencingSecond );
|
|||
|
|
// mgr.AddChatShutUpIpCount(nIp);
|
|||
|
|
m_nSameChatMsgCount =0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
bool CChatSystem::CheckChatLen(char* msg)
|
|||
|
|
{
|
|||
|
|
size_t nLen = strlen(msg);
|
|||
|
|
if (strncmp(msg,"[<#",3)==0)//展示装备功能
|
|||
|
|
{
|
|||
|
|
if (nLen > 300)
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//字符长度过长的话,多半是模拟发言了
|
|||
|
|
else if( nLen > 120)//客户端最多40字符(中文)
|
|||
|
|
{
|
|||
|
|
//m_pEntity->CloseActor(false);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
bool CChatSystem::HaveCutChar(char* InputStr)
|
|||
|
|
{
|
|||
|
|
bool boResult = false;
|
|||
|
|
if( strstr(InputStr,"<url>") || strstr(InputStr, "font") || strstr(InputStr, "color") || strstr(InputStr, "<<") || strstr(InputStr, ">>")
|
|||
|
|
||strstr(InputStr,"\r") || strstr(InputStr, "\n")) //客户端传入的消息,存在非法内容
|
|||
|
|
{
|
|||
|
|
boResult = true;
|
|||
|
|
}
|
|||
|
|
return boResult;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CChatSystem::OnCustomReqCsChat(CDataPacketReader& inPack)
|
|||
|
|
{
|
|||
|
|
if(!m_pEntity)
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
BYTE nChannleID = 0;
|
|||
|
|
int nSvID = 0;
|
|||
|
|
unsigned int nMsgTime = 0;
|
|||
|
|
inPack >> nChannleID;
|
|||
|
|
inPack >> nSvID;
|
|||
|
|
inPack >> nMsgTime;
|
|||
|
|
if (nChannleID == ciChannelTipmsg)
|
|||
|
|
{
|
|||
|
|
char strBuff[10240];
|
|||
|
|
memset(strBuff, 0, sizeof(strBuff));
|
|||
|
|
CActorPacket ap;
|
|||
|
|
CDataPacket& outPack = m_pEntity->AllocPacket(ap);
|
|||
|
|
//CDataPacket outPack(strBuff, sizeof(strBuff));
|
|||
|
|
outPack << (BYTE) enChatSystemID << (BYTE)sSendReqCsChat <<(BYTE)ciChannelTipmsg;
|
|||
|
|
int ccount = 0;
|
|||
|
|
INT_PTR nOffer = outPack.getPosition();
|
|||
|
|
outPack << ccount;
|
|||
|
|
std::vector<CChatManager::CHATRECORD> & pCsRecord = GetGlobalLogicEngine()->GetChatMgr().GetChatCsRecord();
|
|||
|
|
for (size_t i = 0; i < pCsRecord.size(); i++)
|
|||
|
|
{
|
|||
|
|
if(nMsgTime != 0 && pCsRecord[i].msgTime <= nMsgTime)
|
|||
|
|
{
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
outPack << (byte) pCsRecord[i].msgType;
|
|||
|
|
outPack << (unsigned int) pCsRecord[i].msgTime;
|
|||
|
|
std::string sstr = pCsRecord[i].msg;
|
|||
|
|
outPack.writeString(sstr.c_str());
|
|||
|
|
ccount++;
|
|||
|
|
}
|
|||
|
|
INT_PTR nOffer2 = outPack.getPosition();
|
|||
|
|
outPack.setPosition(nOffer);
|
|||
|
|
outPack << ccount;
|
|||
|
|
outPack.setPosition(nOffer2);
|
|||
|
|
ap.flush();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// void CChatSystem::OnSendCsChat(CChatManager::CHATRECORD& record)
|
|||
|
|
// {
|
|||
|
|
// if(!m_pEntity)
|
|||
|
|
// return;
|
|||
|
|
|
|||
|
|
// char strBuff[10240];
|
|||
|
|
// memset(strBuff, 0, sizeof(strBuff));
|
|||
|
|
// CActorPacket ap;
|
|||
|
|
// CDataPacket& outPack = m_pEntity->AllocPacket(ap);
|
|||
|
|
// //CDataPacket outPack(strBuff, sizeof(strBuff));
|
|||
|
|
// outPack << (BYTE) enChatSystemID << (BYTE)sSendReqCsChat <<(BYTE)ciChannelTipmsg;
|
|||
|
|
// int ccount = 0;
|
|||
|
|
// INT_PTR nOffer = outPack.getPosition();
|
|||
|
|
// outPack << 1;
|
|||
|
|
// {
|
|||
|
|
// outPack << (byte) record.msgType;
|
|||
|
|
// outPack << (unsigned int) record.msgTime;
|
|||
|
|
// std::string sstr = record.msg;
|
|||
|
|
// outPack.writeString(sstr.c_str());
|
|||
|
|
// }
|
|||
|
|
// ap.flush();
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CChatSystem::TanWanChatReport(LPCTSTR szAccount, int nActorId, LPCTSTR szActorName, int nChannelId, LPCTSTR szMsg, LPCTSTR szSendToActorName)
|
|||
|
|
{
|
|||
|
|
if ( nChannelId < 0 || nChannelId > ciChannelMax)
|
|||
|
|
{
|
|||
|
|
OutputMsg(rmError,"TanWanChatReport nChannelId 错误 频道Id=%d !", nChannelId);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int nTanWanChannleId = 0;
|
|||
|
|
switch(nChannelId)
|
|||
|
|
{
|
|||
|
|
case ciChannelSecret: //私聊
|
|||
|
|
{
|
|||
|
|
nTanWanChannleId = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case ciChannelNear: //附近频道,同屏
|
|||
|
|
{
|
|||
|
|
nTanWanChannleId = 8;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case ciChannelGuild: //工会,帮派
|
|||
|
|
{
|
|||
|
|
nTanWanChannleId = 6;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case ciChannelTeam: //队伍频道,5人
|
|||
|
|
{
|
|||
|
|
nTanWanChannleId = 7;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case ciChannelWorld: //世界频道
|
|||
|
|
{
|
|||
|
|
nTanWanChannleId = 4;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
default:
|
|||
|
|
{
|
|||
|
|
nTanWanChannleId = 0;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ( !nTanWanChannleId )
|
|||
|
|
{
|
|||
|
|
OutputMsg(rmError,"TanWanChatReport nTanWanChannleId 错误 频道Id=%d !", nTanWanChannleId);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int nServerId = GetLogicServer()->GetServerIndex();
|
|||
|
|
char* szServerName = (char *)GetLogicServer()->getServerName();
|
|||
|
|
|
|||
|
|
static CNpc* globalNpc = GetGlobalLogicEngine()->GetGlobalNpc();
|
|||
|
|
if ( globalNpc )
|
|||
|
|
{
|
|||
|
|
CScriptValueList paramList;
|
|||
|
|
paramList << nServerId;
|
|||
|
|
paramList << szServerName;
|
|||
|
|
paramList << szAccount;
|
|||
|
|
paramList << nActorId;
|
|||
|
|
paramList << szActorName;
|
|||
|
|
paramList << nTanWanChannleId;
|
|||
|
|
paramList << szMsg;
|
|||
|
|
paramList << szSendToActorName;
|
|||
|
|
if ( !globalNpc->GetScript().CallModule("TanWanChatReport", "OnReqTanWanChatReport", paramList, paramList, 0) )
|
|||
|
|
{
|
|||
|
|
OutputMsg(rmError,"TanWanChatReport OnReqTanWanChatReport 错误 玩家=%s !", szActorName);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|