//解码 void CMailManager::DecordFromByteArray(BYTE* pByte, long& pos,tagMailParam *pMailParam) { char strTemp[2048]; if (pMailParam==NULL) return; _GetBufferFromByteArray(pByte,pos,pMailParam->guid); _GetStringFromByteArray(pByte,pos,strTemp); pMailParam->strSubject = strTemp; _GetStringFromByteArray(pByte,pos,strTemp); pMailParam->strWriter = strTemp; _GetStringFromByteArray(pByte,pos,strTemp); pMailParam->strText = strTemp; _GetStringFromByteArray(pByte,pos,strTemp); pMailParam->strExText = strTemp; pMailParam->lGold = _GetLongFromByteArray(pByte,pos); pMailParam->tRemainTime = time_t(_GetDwordFromByteArray(pByte,pos)); pMailParam->bRead = _GetByteFromByteArray(pByte,pos); pMailParam->lType = _GetLongFromByteArray(pByte,pos); pMailParam->bReject = _GetByteFromByteArray(pByte,pos); _GetStringFromByteArray(pByte,pos,strTemp); pMailParam->strReceiver = strTemp; _GetBufferFromByteArray(pByte,pos,pMailParam->ReceiverGuid); long lSNum = _GetLongFromByteArray(pByte,pos); for (int i=0; i<lSNum; ++i) { tagSGoods *ptgSGoods = OBJ_CREATE(tagSGoods); ptgSGoods->lIndex = _GetLongFromByteArray(pByte,pos); ptgSGoods->lNum = _GetLongFromByteArray(pByte,pos); pMailParam->lSGoods.push_back(ptgSGoods); } long lCNum = _GetLongFromByteArray(pByte,pos); for (int i=0; i<lCNum; ++i) { tagCGoods *ptgCGoods = OBJ_CREATE(tagCGoods); _GetBufferFromByteArray(pByte,pos,ptgCGoods->goodsguid); ptgCGoods->lNum = _GetLongFromByteArray(pByte,pos); ptgCGoods->lContainerID = _GetLongFromByteArray(pByte,pos); ptgCGoods->lPos = _GetLongFromByteArray(pByte,pos); pMailParam->lCGoods.push_back(ptgCGoods); } long lGNum = _GetLongFromByteArray(pByte,pos); for (int i=0; i<lGNum; ++i) { CGoods *pGoods = CGoodsFactory::UnserializeGoods(pByte,pos,25); if( pGoods ) { CGoodsFactory::UpdateEquipmentAttr(pGoods); pMailParam->vMailGoods.push_back(pGoods); } } }
CPlayerPack::CPlayerPack(CPlayer* pPlayer) :m_pPlayer(pPlayer) ,m_cWallet(GoodsSetup::GetGoldCoinIndex()) ,m_cSilverWallet(GoodsSetup::GetSilverIndex()) ,m_cGem(GoodsSetup::GetGemIndex()) { //原始背包 m_pOrigGoodsContainer = OBJ_CREATE(CVolumeLimitGoodsContainer); m_pOrigGoodsContainer->SetContainerVolume(20); m_pSubpackContainer=OBJ_CREATE(CSubpackContainer); m_pOrigGoodsContainer->AddListener(m_pPlayer); }
/// 针对竞技相位创建 void PhaseManager::CreatePhase(const CGUID& first,const CGUID& second, float size1, float size2, eTrigger trigger, const char* Scriptfile ) { /// 针对竞技的创建规则,不明确,没有注明 /// 传进来的first,second 应该都是队伍Leader PhaseOpen(RNULL); CPlayer* fplayer = GetGame()->FindPlayer( first ); CPlayer* splayer = GetGame()->FindPlayer( second); if ( fplayer->IsDied() || splayer->IsDied() ) return ; const CGUID& team_fid = fplayer->GetTeamID(); const CGUID& team_sid = splayer->GetTeamID(); GSTeam *teamf = GetOrganiCtrl()->GetGameTeamByID( team_fid ); GSTeam *teams = GetOrganiCtrl()->GetGameTeamByID( team_sid ); /// 相位初始化 new PhasePro(); PhasePro* TempPro = OBJ_CREATE(PhasePro); if( TempPro != NULL ) { m_PhaseList[ TempPro->GetID() ] = TempPro; /// 建立2组队伍映射 TempPro->Init(fplayer,teamf,2,size1,size2,ePk,trigger,splayer,teams); TempPro->RunScript(fplayer, Scriptfile ); Log4c::Trace(ROOT_MODULE, "Pk Phase { %s } Create Successed ! first leader % s , second leader %s", TempPro->GetID().tostring() , fplayer->GetName() , splayer->GetName() ); } }
//执行 void COpDestObjs::Execute(CMoveShape* pShape) { if (m_Obj == Obj_Self) { pShape = m_pParam->pUser; } //添加目标 if(m_Op == OP_Dest_Obj_Add && pShape) { list<stDestObj*>::iterator it = m_pParam->OperObjs.begin(); for(; it!=m_pParam->OperObjs.end(); ++it) { if ((*it)->DestID==pShape->GetExID() && (*it)->nDestType==pShape->GetType()) { return; } } stDestObj *obj = OBJ_CREATE(stDestObj); obj->DestID = pShape->GetExID(); obj->nDestType = pShape->GetType(); m_pParam->OperObjs.push_back(obj); } //清除一个目标 else if(m_Op == OP_Dest_Obj_Del) { } //清除所有目标 else if(m_Op == OP_Dest_Obj_Clear) { m_pParam->OperObjs.clear(); } }
void DoW2SMailSendResult( CMessage *pMsg ) { long lRet=0; BYTE *ByteData = NULL; CPlayer *pPlayer=NULL; CGUID WriterGuid; pMsg->GetGUID(WriterGuid); lRet = pMsg->GetLong(); long lByteDataLen = pMsg->GetLong(); if (lRet==1) { ByteData = (BYTE*)M_ALLOC(sizeof(BYTE)*lByteDataLen); pMsg->GetEx(ByteData,lByteDataLen); long Pos = 0; tagMailParam *pMailParam = OBJ_CREATE(tagMailParam); GameManager::GetInstance()->GetMailManager()->DecordMailMsgFromByteArray(ByteData,Pos,pMailParam); CMail *pMail = OBJ_CREATE_PVOID(CMail, (void*)pMailParam); pPlayer = GetGame()->FindPlayer(pMail->GetWriter().c_str()); if (pPlayer) { int nRet = GameManager::GetInstance()->GetMailManager()->ReMoveGoldAndGoods(pMail,pPlayer);//--扣除物品和金钱 GameManager::GetInstance()->GetMailManager()->SendMailToReceiver(pMail->GetExID(),nRet); } OBJ_RELEASE(CMail, pMail); M_FREE(ByteData, sizeof(BYTE)*lByteDataLen); } else { GameManager::GetInstance()->GetMailManager()->SendMailFailedToClient(WriterGuid,MAIL_SENDING_FAILED_INVALID_RECEIVER);//--非法收信人 } }
CMail::CMail(void) { m_pBaseParam = OBJ_CREATE(tagMailParam); m_pBaseParam->lCGoods.clear(); m_pBaseParam->vMailGoods.clear(); m_pBaseParam->strExText.clear(); m_pBaseParam->WriterGuid = NULL_GUID; m_pBaseParam->strReceiverList.clear(); m_pBaseParam->strText.clear(); m_pBaseParam->strSubject.clear(); m_pBaseParam->bRead = 0; m_pBaseParam->lType = 0; m_pBaseParam->tRemainTime = 0; m_pBaseParam->lGold = 0; m_pBaseParam->tWriteTime = 0; m_pBaseParam->bSave = 0; m_pBaseParam->ReceiverGuid = NULL_GUID; m_pBaseParam->strWriter.clear(); m_pBaseParam->lCGoods.clear(); m_pBaseParam->lSGoods.clear(); m_pBaseParam->ltgTimer.clear(); m_pBaseParam->ltgMailEvent.clear(); m_pBaseParam->vMailGoods.clear(); m_pBaseParam->lMailCondition.clear(); ++g_lMailCount; }
bool Script::SendSysMail( ulong mailID, const char *writer ) { CPlayer *player = FindPlayer( NULL ); if( player == NULL ) return false; tagMailParam *mailParam = MailList::GetSysMail( mailID ); //if( player->CheckSysMail( mailID ) )//--add // { // return false; // } player->InsertSysMail( mailID, 1 ); if( mailParam ) { bool receive = false; if( mailParam->strReceiverList.size() == 0 ) { receive = true; mailParam->strReceiverList.push_back( player->GetName() ); } mailParam->WriterGuid = NULL_GUID; mailParam->strWriter = writer; tagMailParam *pMailParam = OBJ_CREATE( tagMailParam ); GameManager::GetInstance()->GetMailManager()->InitSysMailParam( pMailParam, mailParam );//为g_MailManager对象做初始化 if( receive ) mailParam->strReceiverList.clear(); //pMailParam->lType = mailID;//--modify by shixi CMail *pMail = OBJ_CREATE_PVOID( CMail, (void*)pMailParam ); GameManager::GetInstance()->GetMailManager()->SendSysMailByScript( pMail ); } return true; }
//得到实例 CGlobalScriptTimer* CGlobalScriptTimer::GetInstance() { if(instance == NULL) { instance = OBJ_CREATE(CGlobalScriptTimer); } return instance; }
CPKSys* CPKSys::getInstance() { if(pInstance == NULL) { pInstance = OBJ_CREATE(CPKSys); } return pInstance; }
void DoW2SMailReceive( CMessage *pMsg ) { BYTE *ByteData = NULL; list<CGUID> lMailGuid; list<CMail*> lMailList; CGUID playerGuid; pMsg->GetGUID(playerGuid); long lByteDataLen = pMsg->GetLong(); ByteData = (BYTE*)M_ALLOC(sizeof(BYTE)*lByteDataLen); pMsg->GetEx(ByteData,lByteDataLen); time_t t_CurrentTime = time(NULL); CPlayer *pPlayer = GetGame()->FindPlayer(playerGuid); if (pPlayer) { long Pos = 0; long lNum = _GetLongFromByteArray(ByteData,Pos); for (int i=0; i<lNum; ++i) { tagMailParam *pMailParam = OBJ_CREATE(tagMailParam); GameManager::GetInstance()->GetMailManager()->DecordFromByteArray(ByteData,Pos,pMailParam); CMail *pMail = OBJ_CREATE_PVOID(CMail, (void*)pMailParam); if(!GameManager::GetInstance()->GetMailManager()->SetMapMail(pMail)) { lMailGuid.push_back(pMailParam->guid); } else { lMailList.push_back(pMail); } } if(lMailGuid.size()>0) { //删除邮件 GameManager::GetInstance()->GetMailManager()->DeleteMailToWS(lMailGuid,pPlayer); } vector<BYTE> vectorByte; vectorByte.clear(); _AddToByteArray(&vectorByte,(long)lMailList.size()); pPlayer->SetReceiveMail(true); for (list<CMail*>::iterator it=lMailList.begin();it!=lMailList.end();++it) { pPlayer->AddReceiveMailList((*it)->GetExID()); } GameManager::GetInstance()->GetMailManager()->SendReceiveMail( pPlayer ); } M_FREE(ByteData, lByteDataLen); }
//初始化系统邮件参数 void CMailManager::InitSysMailParam(tagMailParam *pParam,tagMailParam *pPamramList) { pParam->bRead = pPamramList->bRead; pParam->lType = pPamramList->lType; pParam->strExText = pPamramList->strExText; pParam->strText = pPamramList->strText; pParam->bReject = 0; pParam->tRemainTime = pPamramList->tRemainTime; pParam->strWriter = pPamramList->strWriter; pParam->WriterGuid = NULL_GUID; pParam->strSubject = pPamramList->strSubject; pParam->strReceiverList = pPamramList->strReceiverList; pParam->lGold = pPamramList->lGold; for (list<tagMailEvent*>::iterator it=pPamramList->ltgMailEvent.begin(); it!=pPamramList->ltgMailEvent.end(); ++it) { tagMailEvent *ptgMailEvent = OBJ_CREATE(tagMailEvent); ptgMailEvent->strEventName = (*it)->strEventName; ptgMailEvent->lBeginTime = (*it)->lBeginTime; ptgMailEvent->lEndTime = (*it)->lEndTime; pParam->ltgMailEvent.push_back(ptgMailEvent); } for (list<tagSGoods*>::iterator it=pPamramList->lSGoods.begin(); it!=pPamramList->lSGoods.end(); ++it) { tagSGoods *ptgSGoods = OBJ_CREATE(tagSGoods); ptgSGoods->lIndex = (*it)->lIndex; ptgSGoods->lNum = (*it)->lNum; pParam->lSGoods.push_back(ptgSGoods); } for (list<tagMailCondition*>::iterator it=pPamramList->lMailCondition.begin(); it!=pPamramList->lMailCondition.end(); ++it) { tagMailCondition *ptgMailCondition = OBJ_CREATE(tagMailCondition); ptgMailCondition->strName = (*it)->strName; ptgMailCondition->lValue = (*it)->lValue; pParam->lMailCondition.push_back(ptgMailCondition); } }
bool CShopManager::StartupTimer() { if( m_lUpdateBuyTimer != INVALID_TIMER ) { return false; } unsigned long uInterval = GetInst( CConfiger ).GetGlobalCfg().uGoodsUpdateInter * 1000; tagTimerVar *pTimerVar = OBJ_CREATE(tagTimerVar); pTimerVar->TimerType = (eChildObjType)TT_UPDATE_BUY; // refresh immediately. m_lUpdateBuyTimer = GameManager::GetInstance()->Schedule( this, pTimerVar, timeGetTime(), uInterval ); return true; }
//初始化系统邮件 void CMailManager::InitSysMail() { ClearSysMail(); map<DWORD,tagMailParam*> mapMail = CMailList::GetSysMail(); map<DWORD,tagMailParam*>::iterator it=mapMail.begin(); for (;it!=mapMail.end();++it) { CGUID guid; CGUID::CreateGUID(guid); tagMailParam *ptgMailParam = OBJ_CREATE(tagMailParam); InitSysMailParam(ptgMailParam,(*it).second); ptgMailParam->guid =guid; ptgMailParam->lType = (*it).first; CMail *pMail = MP_NEW CMail(ptgMailParam); AddSysMail((*it).first,pMail); } }
void DoW2SMailSend( CMessage *pMsg ) { BYTE *ByteData = NULL; CGUID MailGuid; pMsg->GetGUID(MailGuid); long lByteDataLen = pMsg->GetLong(); ByteData = (BYTE*)M_ALLOC(sizeof(BYTE)*lByteDataLen); pMsg->GetEx(ByteData,lByteDataLen); long Pos = 0; tagMailParam *pMailParam = OBJ_CREATE(tagMailParam); GameManager::GetInstance()->GetMailManager()->DecordFromByteArray(ByteData,Pos,pMailParam); CMail *pMail = OBJ_CREATE_PVOID(CMail, (void*)pMailParam);//用pMailParam作为构造函数创建CMail对象 GameManager::GetInstance()->GetMailManager()->SendMailToClient(pMail); M_FREE(ByteData, sizeof(BYTE)*lByteDataLen); }
//付款收信 void CMailManager::PayMoneyMail(CMail *pMail,CPlayer *pPlayer) { char strSysMsg[128]; if (pPlayer==NULL || pMail->GetGold()==0) return; _snprintf(strSysMsg, 128, CStringReading::LoadString(IDS_WGS_SYSMAIL,STR_WS_SYSMAIL_SIXTH)); long lPayGold = pMail->GetGold(); string strReceiver; string strSubject = strSysMsg; strReceiver = pMail->GetWriter(); tagMailParam *ptgMailParam = OBJ_CREATE(tagMailParam); ptgMailParam->lType = SENDGOLD_MAIL; ptgMailParam->lGold = lPayGold; ptgMailParam->strWriter = pPlayer->GetName(); ptgMailParam->strReceiverList.push_back(strReceiver); ptgMailParam->WriterGuid = pPlayer->GetExID(); ptgMailParam->strSubject=strSubject; CMail *pPayMail = MP_NEW CMail(ptgMailParam); if(AddMail(pPayMail,pPlayer)) { pMail->SetGold(0); if (pMail->GetMGoodsContainer().size()>0) { pMail->SetType(AFFIX_MAIL); } else { pMail->SetType(COMMON_MAIL); } SendPayMailMsg(pMail->GetExID(),BYTE(AFFIX_MAIL),pPlayer); CMessage msg(MSG_S2W_MAIL_PAY); msg.Add(pMail->GetExID()); msg.Send(); } }
/// 针对野战相位创建 void PhaseManager::CreatePhase(CPlayer* player, float size1 , float size2 , eTrigger trigger, const char* Scriptfile) { PhaseOpen(RNULL); if (!player || player->GetPhaseID() != NULL_GUID ) { Log4c::Error(ROOT_MODULE,"%-15s Player name %s ReCreatePhase",__FUNCTION__, player->GetName() ); return ; } const CGUID& team_id = player->GetTeamID(); GSTeam *team = GetOrganiCtrl()->GetGameTeamByID( team_id ); /// 如果不是单独的一个人 而且 又不是队长不能创建相位 if( team_id != NULL_GUID && (team == NULL || team->GetLeader()!= player->GetExID()) ) { Log4c::Error(ROOT_MODULE,"%-15s eFight Phase Create Failed ! player % s is not team leader",__FUNCTION__, player->GetName() ); return ; } if ( player->IsDied() ) return ; /// 相位初始化 PhasePro* TempPro = OBJ_CREATE(PhasePro) ;// new PhasePro(); if( TempPro != NULL ) { m_PhaseList[ TempPro->GetID() ] = TempPro; TempPro->Init(player,team, 0 , size1 , size2 , eFight,trigger); TempPro->RunScript(player, Scriptfile ); Log4c::Trace(ROOT_MODULE, "eFight Phase { %s } Create Successed ! player % s is team leader" , TempPro->GetID().tostring() , player->GetName() ); } }
//分配一个CMonster* CBaseObject* GameManager::CreateObject(long typeID,const CGUID& guid, const char *pInfo) { int *nNum = 0; CBaseObject* pObject = NULL; switch(typeID) { case TYPE_GOODS: // 物品 { //! 如果断言失败,说明为同一个GUID已经分配了一块内存,再次分配会产生内存泄露 assert(m_GoodsList.end() == m_GoodsList.find(guid)); /*pObject = (CBaseObject*)m_MultiMemPool.Multi_Alloc(sizeof(CGoods), pInfo); new(pObject)CGoods();*/ pObject = OBJ_CREATE(CGoods); m_GoodsList[guid] = pObject; } break; case TYPE_COLLECTION: { //! 如果断言失败,说明为同一个GUID已经分配了一块内存,再次分配会产生内存泄露 assert(m_CollectionList.end() == m_CollectionList.find(guid)); /*pObject = (CBaseObject*)m_MultiMemPool.Multi_Alloc(sizeof(CCollection), pInfo); new(pObject)CCollection();*/ pObject = OBJ_CREATE(CCollection); m_CollectionList[guid] = pObject; } break; case TYPE_MONSTER: // 怪物 { //! 如果断言失败,说明为同一个GUID已经分配了一块内存,再次分配会产生内存泄露 assert(m_MonsterList.end() == m_MonsterList.find(guid)); /*pObject = (CBaseObject*)m_MultiMemPool.Multi_Alloc(sizeof(CMonster), pInfo); new(pObject)CMonster;*/ pObject = OBJ_CREATE(CMonster); m_MonsterList[guid] = pObject; } break; case TYPE_PLAYER: // 玩家 { //! 如果断言失败,说明为同一个GUID已经分配了一块内存,再次分配会产生内存泄露 assert(m_PlayerList.end() == m_PlayerList.find(guid)); /*pObject = (CBaseObject*)m_MultiMemPool.Multi_Alloc(sizeof(CPlayer), pInfo); new(pObject)CPlayer();*/ pObject = OBJ_CREATE(CPlayer); m_PlayerList[guid] = pObject; } break; case TYPE_REGION: // 地图 { //! 如果断言失败,说明为同一个GUID已经分配了一块内存,再次分配会产生内存泄露 assert(m_RegionList.end() == m_RegionList.find(guid)); /*pObject = (CBaseObject*)m_MultiMemPool.Multi_Alloc(sizeof(CRegion), pInfo); new(pObject)CRegion(guid);*/ pObject = OBJ_CREATE(CRegion); m_RegionList[guid] = pObject; } break; case TYPE_BUILD: { //! 如果断言失败,说明为同一个GUID已经分配了一块内存,再次分配会产生内存泄露 assert(m_BuildList.end() == m_BuildList.find(guid)); /*pObject = (CBaseObject*)m_MultiMemPool.Multi_Alloc(sizeof(CBuild), pInfo); new(pObject)CBuild();*/ pObject = OBJ_CREATE(CBuild); m_BuildList[guid] = pObject; } break; case TYPE_CITYGATE: { //! 如果断言失败,说明为同一个GUID已经分配了一块内存,再次分配会产生内存泄露 assert(m_GateList.end() == m_GateList.find(guid)); /*pObject = (CBaseObject*)m_MultiMemPool.Multi_Alloc(sizeof(CGate), pInfo); new(pObject)CGate();*/ pObject = OBJ_CREATE(CGate); m_GateList[guid] = pObject; } break; default: return NULL; } pObject->SetExID(guid); pObject->SetType(typeID); return pObject; }
//同意赠送 void CMailManager::AgreeToPresent(CMail *pMail,CPlayer *pPlayer,BYTE bType) { long lNum = 0;//计算元宝数量 if (pPlayer==NULL) return; if (bType==0) { if (CheckPresentGoods(pMail,pPlayer,lNum)) { //成功 CMessage msg(MSG_S2C_MAIL_PRESENT_OK); msg.Add(pMail->GetExID()); msg.Add(lNum); msg.SendToPlayer(pPlayer->GetExID()); } else { //存在过期道具 CMessage msg(MSG_S2C_MAIL_PRESENT_FAILED); msg.Add(pMail->GetExID()); msg.Add((long)pMail->GetSGood().size()); list<tagSGoods*>::iterator it=pMail->GetSGood().begin(); for (; it!=pMail->GetSGood().end();++it) { msg.Add((*it)->lIndex); msg.Add((*it)->lNum); } msg.SendToPlayer(pPlayer->GetExID()); } } else { CheckPresentGoods(pMail,pPlayer,lNum); if (lNum>pPlayer->GetYuanbao()) { char* strRes=CStringReading::LoadString(22,22); if(strRes) pPlayer->SendNotifyMessage(strRes); return; } char strSysMsg[128]; _snprintf(strSysMsg, 128, CStringReading::LoadString(IDS_WGS_SYSMAIL,STR_WS_SYSMAIL_SEVENTH),pMail->GetSubject().c_str()); tagMailParam *ptgMailParam = OBJ_CREATE(tagMailParam); CMail *pSendMail = MP_NEW CMail(ptgMailParam); string strReceiver = pMail->GetWriter(); pSendMail->SetExID(pMail->GetExID()); pSendMail->SetWriter(pPlayer->GetName()); pSendMail->SetReceiverList(strReceiver.c_str()); pSendMail->SetType(PRESENT_MAIL); pSendMail->SetSubject(strSysMsg); pSendMail->SetSGoods(pMail->GetSGood()); if(AddMail(pSendMail)) { list<CGUID> lGuid; lGuid.push_back(pMail->GetExID()); DeleteMailToWS(lGuid,pPlayer); } } }
void DoC2SMailSend( CMessage *pMsg ) { CPlayer *pPlayer = pMsg->GetPlayer(); if (NULL == pPlayer) { return; } //玩家在交易或摆摊中不能交易 if (pPlayer->GetCurrentProgress()==CPlayer::PROGRESS_OPEN_STALL || pPlayer->GetCurrentProgress()==CPlayer::PROGRESS_TRADING ) { return; } CGUID NpcGuid = NULL_GUID; pMsg->GetGUID(NpcGuid); CServerRegion *pRegion = pMsg->GetRegion(); if (NULL==pRegion) { return; } CBaseObject *pShape = pRegion->FindChildObject(TYPE_MONSTER,NpcGuid); CMonster *pMailNpc = dynamic_cast<CMonster*>(pShape); //if (pMailNpc && strcmp(pMailNpc->GetOriginName(),"10000Email")==0 && pMailNpc->Distance( pPlayer ) < 8)// --attention //{ tagMailParam *pMailParam = OBJ_CREATE(tagMailParam); long lReceiver = pMsg->GetLong(); //收信人个数 if (lReceiver > 100) { return; } for (int i=0; i<lReceiver; ++i) { char strReceiver[128]; pMsg->GetStr(strReceiver,GlobalSetup::GetSetup()->lMaxName+1); if (lstrlen(strReceiver)>=GlobalSetup::GetSetup()->lMaxName) { GameManager::GetInstance()->GetMailManager()->SendMailFailedToClient(pPlayer->GetExID(),MAIL_SENDING_FAILED_INVALID_MAXNAME); continue; } list<string>::iterator it= find((pMailParam->strReceiverList).begin(),(pMailParam->strReceiverList).end(),strReceiver);// (pMailParam->strReceiverList).f if (it==(pMailParam->strReceiverList).end()) { (pMailParam->strReceiverList).push_back(strReceiver); } } char strTemp[2048]; pMsg->GetStr(strTemp,GlobalSetup::GetSetup()->lMaxSubject+1); //主题 if (lstrlen(strTemp)>=GlobalSetup::GetSetup()->lMaxSubject) { GameManager::GetInstance()->GetMailManager()->SendMailFailedToClient(pPlayer->GetExID(),MAIL_SENDING_FAILED_INVALID_MAXSUBJECT); return; } pMailParam->strSubject = strTemp; pMsg->GetStr(strTemp,GlobalSetup::GetSetup()->lMaxText+1); //内容 if (lstrlen(strTemp)>=GlobalSetup::GetSetup()->lMaxText) { GameManager::GetInstance()->GetMailManager()->SendMailFailedToClient(pPlayer->GetExID(),MAIL_SENDING_FAILED_INVALID_MAXTEXT); return; } pMailParam->strText = strTemp; pMailParam->lGold = pMsg->GetLong(); //金币 pMailParam->lType = pMsg->GetByte(); //类型 ////普通物品 long lCGoodNum = pMsg->GetLong(); if (lCGoodNum>MAXGOODNUM) { char pszGuid[50]=""; pPlayer->GetExID().tostring(pszGuid); Log4c::Warn(ROOT_MODULE,FormatText("GS_GOODS_91",pPlayer->GetName(),pszGuid,lCGoodNum));//%s(ID:%s) 玩家发送物品的数量:%d超过限制(此玩家利用非常规方式发送消息) OBJ_RELEASE(tagMailParam, pMailParam); return; } for (int i=0; i<lCGoodNum; ++i) { listGoods *ptgGoods = OBJ_CREATE(listGoods); pMsg->GetGUID(ptgGoods->goodsguid); ptgGoods->lNum = pMsg->GetLong(); ptgGoods->lContainerID = pMsg->GetDWord(); ptgGoods->lPos = pMsg->GetDWord(); pMailParam->Goodslist.push_back(ptgGoods); } //} pMailParam->strWriter = pPlayer->GetName(); pMailParam->WriterGuid = pPlayer->GetExID(); pMailParam->bReject = 1; //! 发信 CMail *pMail = OBJ_CREATE_PVOID(CMail, (void*)pMailParam); if (pMail->GetType()==SYSTEM_MAIL || pMail->GetGold()<0 || pMail->GetType()>=SENDGOLD_MAIL) { pMail->DeleteMailGoods(); OBJ_RELEASE(CMail, pMail); return; } GameManager::GetInstance()->GetMailManager()->AddMail(pMail,pPlayer);//“在这里发送 MSG_S2W_MAIL_SEND 消息给 worldserver // } }