#include "StdAfx.h" #include "GuildSystem.h" #include static const char *szGuildAutoJoinLevel = "GuildAutoJoinLevel"; //不使用 static const char *szDailyDonateCoin = "DailyDonateCoin"; //每日捐献金币数量 static const char *szDailyDonateItem = "DailyDonateItem"; //每日捐献道具数量 static const char *szTodayChargeTreeNum = "TodayChargeTreeNum"; //玩家当日已经充能的次数 static const char *szTodayPickFruitNum = "TodayPickFruitNum"; //玩家当日已经采摘果实的次数 static const char *szTodayGetTaskAwardNum = "dailyGuildTaskAwardNum"; //当日领取奖励次数 static const char *szDailyDepotPutInNum = "dailyDepotPutInNum"; //每日可投入行会仓库次数 static const char *szVarCreateGuildIsYbReplace = "CreateGuildIsYbReplace"; //动态变量,创建行会时是否元宝代替 //ActorNodeList::LinkNodeMgr* ActorNodeList::g_LinkNodeMgr; #define SEARCH_GUILD_BY_GUILDNAME 1 #define SEARCH_GUILD_BY_LEADERNAME 2 //行会操作结果符号(协议(10,16)使用) #define GUILD_OP_JOIN_OK 3 #define GUILD_OP_LEFT_OK 4 #define GUILD_CAN_PICKFRUIT 5 //可以摘取神树果实 #define GUILD_CAN_GETTASKAWRD 6 //可以领取行会任务奖励 CGuildSystem::CGuildSystem() { m_pGuild = NULL; nTk = 0; nWealNext = 0; nZzNext = 0; boSaveed = FALSE; nTomorrow = CMiniDateTime::tomorrow(); boWealClear = true; m_Score = 0; m_InGuildFuben = false; m_InDartNow = false; m_GuildGx = 0; m_CallGuildBossFlag = false; m_nTitle = 0; m_TodayGx = 0; m_HasShxTimes = 0; m_ExploreTimes = 0; m_ExploreItemId = 0; m_ChallengeTimes = 0; m_AddChallengeTimes = 0; m_nJoinTime = 0; //加入行会的时间 m_AddShxTimes = 0; m_nGetCoinAwardFlag = 0; m_nTodayDonateCoin = 0; m_nTodayDonateItem = 0; m_nTodayChargeTreeNum = 0; m_nTodayPickFruitNum = 0; m_nFastApply = 0; } VOID CGuildSystem::OnTimeCheck(TICKCOUNT nTickCount) { if (!m_pEntity || m_pEntity->GetType() != enActor) { return; } if (TimeOK(nZzNext)) { nZzNext = 0; } if (nTomorrow != 0 && TimeOK(nTomorrow)) { ClearZJ(); nTomorrow = CMiniDateTime::tomorrow(); }else if (boWealClear && m_pEntity && m_pEntity->GetBagSystem().count() > 0)//今日之前的召集令还没删除 { ClearZJ(); boWealClear = false; } } VOID CGuildSystem::OnDeleteGuild(int nErrorCode) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) return; CGuild* pGuild = m_pGuild;//要删除的帮派 if(nErrorCode == jxInterSrvComm::DbServerProto::reSucc) { //成功的话后期处理 //帮派解散后,帮主帮派贡献值/2(往下取整)。其他成员帮派贡献值不变。 //所有成员本身任务列表的帮派任务删除。 //帮派仓库中的物品全部清空。故该帮主在解散时需二次确认:您确定解散帮派吗?解散后,帮派仓库的物品将全部清空。 //记录日志 if(GetLogicServer()->GetLocalClient()) { } GetGlobalLogicEngine()->GetGuildMgr().DeleteGuild(pGuild); //SetGx(0); boSaveed = TRUE; //设置本帮派无效 m_pEntity->SendTipmsgFormatWithId(tpDeleteGuildSucc); m_pGuild = NULL; nZzNext = GetGlobalLogicEngine()->getMiniDateTime() + GetLogicServer()->GetDataProvider()->GetGuildConfig().nLeftTimeLimit;//设置他的在职时间,在规定时间内不能再加入其他帮派 // CActorPacket ap; // CDataPacket& dataPack = m_pEntity->AllocPacket(ap); // dataPack << (BYTE)enGuildSystemID << (BYTE)sDelGuild; } else { m_pEntity->SendTipmsgFormatWithId(tpDeleteGuildErr); } CActor *pActor = (CActor*)m_pEntity; pActor->ResetShowName(); } VOID CGuildSystem::OnCreateGuild(unsigned int nGid,int nErrorCode,CGuild* pGuild) { if (m_pEntity == NULL) return; CActor *pActor = (CActor*)m_pEntity; if (nErrorCode == jxInterSrvComm::DbServerProto::reSucc && pGuild) { if (m_pGuild != NULL) { //不应该出现这个异常 OutputMsg(rmError,_T("Actor Create Guild More than One time!gid=%u,actorname=%s"),nGid,m_pEntity->GetEntityName()); return; } // bool bIsYbReplace = 0; // CCLVariant& dyVal = m_pEntity->GetDynamicVar(); // CCLVariant* pIsYbReplace = dyVal.get(szVarCreateGuildIsYbReplace); // if (pIsYbReplace) // { // bIsYbReplace = true; // pIsYbReplace->clear(); // } // int nCreateNeedItem = GetLogicServer()->GetDataProvider()->GetGuildConfig().nCreateNeedItem; INT_PTR nCreateNeedYb = GetLogicServer()->GetDataProvider()->GetGuildConfig().nCreateNeedYb; // INT_PTR nMyItemCount = m_pEntity->GetBagSystem().GetItemCount(nCreateNeedItem); unsigned int nMyYb = pActor->GetMoneyCount(mtYuanbao); //元宝 if(nMyYb < nCreateNeedYb) { GetGlobalLogicEngine()->GetGuildMgr().SendDbMsgDeleteGuild(m_pEntity->GetHandle(),nGid); pActor->SendTipmsgFormatWithId(tmNomoreYubao, tstUI); return; } pActor->ChangeMoney( mtYuanbao, -nCreateNeedYb, GameLog::Log_CreateGuild, 0, "create guild yb", true); // if( nMyItemCount < 1) // { // if (nMyYb >= nCreateNeedYb && bIsYbReplace) // { // pActor->ChangeMoney( mtYuanbao, -nCreateNeedYb, GameLog::clGuildFr, 0, "create guild yb", true); // } // else // { // //不正常,不够钱缴纳创建帮派费用 // OutputMsg(rmError,_T("Actor Create Guild no item and no yb!gid=%u,actorid=%s"),nGid,m_pEntity->GetEntityName()); // //删除掉刚创建的帮派 // GetGlobalLogicEngine()->GetGuildMgr().SendDbMsgDeleteGuild(m_pEntity->GetHandle(),nGid); // return; // } // } // else // { // //扣除行会道具 // CUserItemContainer::ItemOPParam itemPara; // itemPara.wItemId = nCreateNeedItem; // itemPara.wCount = 1;//设置一个大的数字,不用先看背包有多少这个物品 // itemPara.btStrong = -1; // itemPara.btQuality = -1;// // m_pEntity->GetBagSystem().DeleteItem(itemPara,pGuild->m_sGuildname,GameLog::clGuildFr); // } //做新帮派初始化的工作 pGuild->InitGuild((CActor*)m_pEntity); // SendGuildTitleList(); //m_pEntity->SendTipmsgFormatWithId(tmCreateGuildSucc, tstUI); // ((CActor*)m_pEntity)->GetQuestSystem()->OnQuestEvent(CQuestData::qcGuildLevel, 1, 1); // CEntityManager* em = GetGlobalLogicEngine()->GetEntityMgr(); // em->BroadTipmsgWithParams(tmCreateGuildSucc, tstUI, ( char *)(m_pEntity->GetEntityName()),pGuild->m_sGuildname); // ((CActor*)m_pEntity)->ResetShowName(); //SendGuildbuildingInfo(); //添加帮派事件 char sText[1024]; LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpCreateGuildEvent); sprintf_s(sText, sizeof(sText), sFormat, ( char *)((CActor*)m_pEntity->GetEntityName())); pGuild->AddEventRecord( sText,enGuildEvent_Create, 0, 0, 0, (char *)((CActor*)m_pEntity->GetEntityName()),NULL ); //记录日志 if(GetLogicServer()->GetLocalClient()) { } } else { OutputMsg(rmTip,_T("Create Guild Error!code =%d"),nErrorCode); //创建帮派出错的提示 if (nErrorCode == jxInterSrvComm::DbServerProto::reNameError) { m_pEntity->SendTipmsgFormatWithId(tmCreateGuildNameErr, tstUI); } else if (nErrorCode == jxInterSrvComm::DbServerProto::reNameInUse) { m_pEntity->SendTipmsgFormatWithId(tmCreateGuildNameInUse,tstUI); } else { m_pEntity->SendTipmsgFormatWithId(tmCreateGuildInterErr,tstUI); } } CActorPacket AP; CDataPacket& DataPacket = m_pEntity->AllocPacket(AP); DataPacket << (BYTE)enGuildSystemID; //知发送创建帮派和解散帮派的通知 DataPacket << (BYTE)sAddGuild; DataPacket << (BYTE)nErrorCode; DataPacket << (int)nGid; AP.flush(); pActor->ResetShowName(); pActor->SaveDb(); } /* 玩家应邀加入帮派 */ VOID CGuildSystem::InviteResult(CDataPacketReader &packet) { if (m_pEntity == NULL) return; BYTE ret = 0; int gid = 0; //处理消息 CGuild::InterMsg Msg; Msg.hActorHandle = m_pEntity->GetHandle(); Msg.nMsgId = CGuild::imInvite; packet >> ret; packet >> gid; packet >> Msg.hSrcHandle; //packet.readString(Msg.szName,ArrayCount(Msg.szName)); _asncpytA(Msg.szName,m_pEntity->GetEntityName()); CGuild* pGuild = GetGlobalLogicEngine()->GetGuildMgr().FindGuild(gid); if (!pGuild) { return; } if (pGuild->FindAndInterMsg(Msg))//之前的确有人邀请他 { if (!ret)//拒绝,通知对方 { CEntity* pEntity = GetGlobalLogicEngine()->GetEntityMgr()->GetEntity(Msg.hSrcHandle); if (pEntity && pEntity->GetType() == enActor) { ((CActor*)pEntity)->SendOldTipmsgFormatWithId(tpRefuseInviteGuild,ttFlyTip); } return; } if (m_pGuild == NULL)//如果还没加入帮派 { if (pGuild->GetMemberCount() >= pGuild->GetMaxMemberCount()) { //达到了人数上限 m_pEntity->SendOldTipmsgFormatWithId(tpMaxMemberCount,ttFlyTip,pGuild->m_sGuildname); return; } //加入gid帮派 pGuild->AddMemberToList((CActor*)m_pEntity); //添加帮派事件 char sText[1024]; //LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpAddToGuildEvent); //sprintf_s( "", sizeof(sText), sFormat, ( char *)((CActor*)m_pEntity->GetEntityName()) ); //pGuild->AddEventRecord( "", enGuildEvent_MemberJoin, 0, 0, 0, (char *)((CActor*)m_pEntity->GetEntityName()),NULL ); LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpAddToGuildmsg); sprintf_s(sText, sizeof(sText), sFormat, ( char *)((CActor*)m_pEntity->GetEntityName())); //pGuild->SendGuildMsg(smGuildCommon,sText,ttChatWindow); ((CActor *)m_pEntity)->GetChatSystem()->SendChat(ciChannelGuild, sText); CGuild::InterMsg nMsg; nMsg.nMsgId = CGuild::imJoin; nMsg.hActorHandle = m_pEntity->GetHandle(); pGuild->FindAndInterMsg(nMsg); } else { m_pEntity->SendOldTipmsgFormatWithId(tpJoinApplyHasInGuild,ttFlyTip); } } } VOID CGuildSystem::OnDbRetData(INT_PTR nCmd,INT_PTR nErrorCode,CDataPacketReader &reader ) { switch(nCmd) { case jxInterSrvComm::DbServerProto::dcAddMember: { int Gid = 0; reader >> Gid; if (nErrorCode == jxInterSrvComm::DbServerProto::reSucc) { //OutputMsg(rmTip,_T("DB Add Member Succ!gid=%d"),Gid); }else { OutputMsg(rmTip,_T("DB Add Member Error!gid=%d"),Gid); } break; } case jxInterSrvComm::DbServerProto::dcSaveActorGuild: if (nErrorCode == jxInterSrvComm::DbServerProto::reSucc) { //OutputMsg(rmTip,_T("Save Actor Guild data Succ!")); }else { OutputMsg(rmTip,_T("Save Actor Guild data Error!")); } break; case jxInterSrvComm::DbServerProto::dcLoadActorGuild: { break; } case jxInterSrvComm::DbServerProto::dcDeleteMember: if (nErrorCode == jxInterSrvComm::DbServerProto::reSucc) { //OutputMsg(rmTip,_T("delete member Succ!")); }else { OutputMsg(rmTip,_T("delete member Error!")); } break; case jxInterSrvComm::DbServerProto::dcAddMemberOffLine: { if (nErrorCode == jxInterSrvComm::DbServerProto::reSucc) { //OutputMsg(rmTip,_T("dcAddMemberOffLine member Succ!")); unsigned int nGid = 0; reader >> nGid; ActorCommonNode Node; reader >> Node; Node.hActorHandle = 0; if (m_pGuild && m_pGuild->m_nGid == nGid) m_pGuild->m_ActorOffLine.push_back(Node); }else { OutputMsg(rmTip,_T("dcAddMemberOffLine member Error!")); } break; } case jxInterSrvComm::DbServerProto::dcSaveGuildSkill: { if (nErrorCode == jxInterSrvComm::DbServerProto::reSucc) { unsigned int nGid = 0; int nSkillId = 0; int nLevel = 0; reader >> nGid; reader >> nSkillId; reader >> nLevel; if (m_pGuild && m_pGuild->m_nGid == nGid) { SetGuildSkillLevel(nSkillId,nLevel); m_pGuild->SendGuildSkillToAllMember(nSkillId,nLevel); } } break; } case jxInterSrvComm::DbServerProto::dcLoadActorBuildingData: { OnRevActorBuildData(reader); break; } } } // VOID CGuildComponent::DealGuildApplyResult( CDataPacketReader & inPacket ) // { // if(!m_pEntity || !m_pGuild) return; // unsigned int nGuildId = 0; // inPacket >> nGuildId;//帮派id // unsigned int nActorId = 0; // inPacket >> nActorId; // int nResult =0; // int nType = 0; // inPacket >> nType; // inPacket >> nResult; // if(nGuildId != m_pGuild->GetGuildId()) // { // return; // } // //同意 // if(nType == 1) // { // if(nResult == 1) // { // m_pEntity->SendTipmsgFormatWithId(tmActorInGuild, tstUI); // return; // }else // { // m_pGuild->DeleteApply(nActorId); // //处理添加玩家信息 // } // } // else if(nTyp == 2) //添加申请 // { // } // else //拒绝 // { // m_pGuild->DeleteApply(nActorId); // } // } /* 下发成员申请加入行会的列表 */ ///不用了 VOID CGuildSystem::JoinApplyMsgList() { if (m_pEntity == NULL) return; if (m_pGuild == NULL) return; if (IsFree() || GetGuildPos() <= smGuildCommon)//帮主、副帮主、官员才可查看 { return; } CActorPacket AP; CDataPacket& DataPacket = m_pEntity->AllocPacket(AP); DataPacket << (BYTE)enGuildSystemID << (BYTE)sJoinApplyMsgList; size_t pos = DataPacket.getPosition(); DataPacket << (int)0;//未必是真实的数量 int nResult = 0; CLinkedNode *pNode; CLinkedListIterator it(m_pGuild->m_InterMsgList); for (pNode = it.first(); pNode && nResult < m_pGuild->m_nJoinMsgCount; pNode = it.next()) { CGuild::InterMsg& Msg = pNode->m_Data; if (Msg.nMsgId == CGuild::imJoin) { //下发玩家信息 CEntity* pEnity = GetGlobalLogicEngine()->GetEntityMgr()->GetEntityPtrByActorID(Msg.Node.BasicData.nActorId); if (pEnity && pEnity->GetType() == enActor) { CActor* pActor = (CActor*)pEnity; DataPacket << pActor->GetProperty(PROP_ENTITY_ID); DataPacket << pActor->GetHandle(); DataPacket << (BYTE)(pActor->GetProperty(PROP_ACTOR_SEX)); DataPacket << pActor->GetProperty(PROP_CREATURE_LEVEL); DataPacket << (BYTE)pActor->GetMenPai(); DataPacket << (BYTE)pActor->GetProperty(PROP_ACTOR_VOCATION); //DataPacket << (unsigned int)pActor->GetProperty(PROP_ACTOR_BATTLE_POWER); DataPacket << (unsigned int)pActor->GetActorAttackValueMax(); //战斗力改为攻击力 DataPacket << (BYTE)0; DataPacket.writeString(pActor->GetEntityName()); } else { //如果他已经下线 DataPacket << (unsigned int)Msg.Node.BasicData.nActorId; DataPacket << Msg.hActorHandle; DataPacket << (BYTE)(Msg.Node.BasicData.nSex); DataPacket << (int)(Msg.Node.BasicData.nLevel); DataPacket << (BYTE)(Msg.Node.BasicData.nMenPai); DataPacket << (BYTE)(Msg.Node.BasicData.nJob); DataPacket << (unsigned int)(Msg.Node.BasicData.nBattleValue); DataPacket << (BYTE)(Msg.Node.BasicData.nVipGrade); DataPacket.writeString(Msg.Node.sActorName); } nResult++; } } int* pCount = (int*)DataPacket.getPositionPtr(pos); *pCount = nResult; AP.flush(); } VOID CGuildSystem::JoinApplyResult(CDataPacketReader &packet) { if (m_pGuild == NULL) return; //看看你是否够权限审核 if (GetGuildPos() < smGuildTangzhu) //官员、副帮主、帮主都可以审核 { if (m_pEntity == NULL) return; m_pEntity->SendTipmsgFormatWithId(tmNoRight, tstUI); return; } unsigned int nActorid = 0; BYTE ApplyResult; packet >> ApplyResult; packet >> nActorid; int nRetCode = m_pGuild->DealApplyByActorId(nActorid, ApplyResult); if( nRetCode == enCheckJoin_NoErr ) { SendJoinGuildApply(); //刷新审核者的面板 GetGlobalLogicEngine()->GetGuildMgr().AdjustRank(m_pGuild); m_pGuild->SendActorApplyToGuild(); } else if( nRetCode == enCheckJoin_MemberLimit ) { //达到了人数上限 m_pEntity->SendTipmsgFormatWithId(tmMaxMemberCount, tstUI); return; } else if( nRetCode == enCheckJoin_HasGuild ) { ((CActor*)m_pEntity)->SendTipmsgFormatWithId(tmActorInGuild, tstUI); return; } } VOID CGuildSystem::JoinApply(CDataPacketReader &packet) { if (m_pEntity == NULL) return; unsigned int nJoinGuildId = 0; packet >> nJoinGuildId; packet >> m_nFastApply; JoinToGuild(nJoinGuildId); } void CGuildSystem::JoinToGuildByRank(int nRank) { CGuild* pGuild = GetGlobalLogicEngine()->GetGuildMgr().FindGuildByRank(nRank); if (pGuild == NULL) { m_pEntity->SendOldTipmsgFormatWithId(tpNoThisGuild,ttFlyTip); return; } JoinToGuild(pGuild->m_nGid); } void CGuildSystem::JoinToGuild(unsigned int nJoinGuildId) { if(!m_pEntity) return; int nLeftTime = 0, nMinLevel = 0,nAotuLevel = 0, errorCode = 0; BYTE result = 0; do { if (m_pGuild) { errorCode = 100; break; } unsigned int nMyGuild = m_pEntity->GetProperty(PROP_ACTOR_GUILD_ID); if(nMyGuild > 0) { return; } nLeftTime = m_pEntity->GetStaticCountSystem().GetStaticCount(NLEFT_GUILDTIME); if (nLeftTime != 0 && time(NULL) < nLeftTime) { //脱离帮派后,要在规定的时间内,不能加入其他帮派,也不能接受邀请 errorCode = 101; break; } //判断等级 nMinLevel = GetLogicServer()->GetDataProvider()->GetGuildConfig().nLevelLimit; if (m_pEntity->GetProperty(PROP_CREATURE_LEVEL) < nMinLevel) { errorCode = 102; break; } //加入到内部消息中 CGuild* pGuild = GetGlobalLogicEngine()->GetGuildMgr().FindGuild(nJoinGuildId); if (pGuild == NULL) { errorCode = 103; break; } if (pGuild->m_boStatus == false) { errorCode = 107; break; } if (pGuild->GetMemberCount() >= pGuild->GetMaxMemberCount()) { //达到了人数上限 errorCode = 105; break; } nAotuLevel = pGuild->GetAutoJoinLevel(); //直接加入 if (m_pEntity->GetProperty(PROP_CREATURE_LEVEL) < nAotuLevel) { //达到了人数上限 errorCode = 106; break; } if( pGuild->m_AddMemberFlag == 1 && m_pEntity->GetProperty(PROP_CREATURE_LEVEL) >= nAotuLevel ) { pGuild->AddMemberToList(m_pEntity); LPCTSTR sTitle = GetLogicServer()->GetDataProvider()->GetTipmsgConfig().GetTipmsg(tmMailGuild); char sContent[1024]={0}; LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetTipmsgConfig().GetTipmsg(tmAddGuidMail); sprintf_s(sContent, sizeof(sContent), sFormat, ( char *)(pGuild->GetGuildName())); CMailSystem::SendMail(m_pEntity->GetProperty(PROP_ENTITY_ID), sTitle, sContent, NULL, 0); // GetGlobalLogicEngine()->GetGuildMgr().AddJoinGuildid(m_pEntity->GetProperty(PROP_ENTITY_ID), pGuild->GetGuildId()); result = 1; } else { errorCode = pGuild->AddJoinApply((CActor*)m_pEntity); if(errorCode == enApplyJoin_NoErr) result = 2; } } while(false); if(errorCode && !m_nFastApply) { SendErrorTipMsg(errorCode, nLeftTime, nAotuLevel, nMinLevel); } // else // { // m_pEntity->SendTipmsgFormatWithId(tmApplySubmit, tstUI); // } if(result) { CActorPacket ap; CDataPacket& dataPack = m_pEntity->AllocPacket(ap); dataPack << (BYTE)enGuildSystemID <<(BYTE)sJoinApply; dataPack << (unsigned int)nJoinGuildId; dataPack<<(BYTE)result; ap.flush(); } } void CGuildSystem::SendErrorTipMsg(int errorCode, int nLeftTime, int nAotuLevel, int nLevelLimit) { switch (errorCode) { case enApplyJoin_NoErr: m_pEntity->SendTipmsgFormatWithId(tmApplySubmit, tstUI); break; case enApplyJoin_HasGuild: m_pEntity->SendTipmsgFormatWithId(tmJoinApplyHasInGuild, tstUI); break; case enApplyJoin_NoGuild: m_pEntity->SendTipmsgFormatWithId(tmNoThisGuild, tstUI); break; case enApplyJoin_MemberLimit: m_pEntity->SendTipmsgFormatWithId(tmMaxMemberCount, tstUI); break; case enApplyJoin_HasSame: m_pEntity->SendTipmsgFormatWithId(tmGuildJoinApplyAlready, tstUI); break; case 100: m_pEntity->SendTipmsgFormatWithId(tmJoinApplyHasInGuild, tstUI); break; case 101: m_pEntity->SendTipmsgFormatWithId(tmLeftGuildCanNotJoin, tstUI, nLeftTime/3600); break; case 102: { std::string minLevel = intToString(nLevelLimit); m_pEntity->SendTipmsgFormatWithId(tmApplyLimiltLevel,tstUI ,minLevel.c_str()); }break; case 103: m_pEntity->SendTipmsgFormatWithId(tmNoThisGuild, tstUI); break; case 105: m_pEntity->SendTipmsgFormatWithId(tmMaxMemberCount, tstUI); break; case 106: { std::string limitLv = intToString(nAotuLevel); m_pEntity->SendTipmsgFormatWithId(tmGuildRequireLvLimit, tstUI, limitLv.c_str()); } break; default: break; } } VOID CGuildSystem::InviteActor(CDataPacketReader &packet) { // if (!m_pEntity) return; // if (!m_pGuild || GetGuildPos() < smGuildAssistLeader) // { // //副帮主以上才可以邀请加入 // m_pEntity->SendOldTipmsgFormatWithId(tpNoRight,ttFlyTip); // return; // } // if (m_pGuild->GetMemberCount() >= m_pGuild->GetMaxMemberCount()) // { // //达到了人数上限 // m_pEntity->SendOldTipmsgFormatWithId(tpMaxMemberCount,ttFlyTip,m_pGuild->m_sGuildname); // return; // } // CGuild::InterMsg Msg; // packet >> Msg.hActorHandle;//被邀请的玩家 // packet.readString(Msg.szName,ArrayCount(Msg.szName)); // Msg.nMsgId = CGuild::imInvite; // Msg.hSrcHandle = m_pEntity->GetHandle(); // //通知玩家 // CActor* pEntity = NULL; // if(Msg.hActorHandle != 0) // { // CEntity* temp = GetGlobalLogicEngine()->GetEntityMgr()->GetEntity(Msg.hActorHandle); // if (temp && temp->GetType() == enActor) // { // pEntity = (CActor*)temp; // } // } // if (!pEntity) // { // pEntity = GetGlobalLogicEngine()->GetEntityMgr()->GetActorPtrByName(Msg.szName); // } // if (pEntity && pEntity->GetType() == enActor) // { // //判断等级 // int nMinLevel = GetLogicServer()->GetDataProvider()->GetGuildConfig().nLevelLimit; // if (pEntity->GetProperty(PROP_CREATURE_LEVEL) < nMinLevel) // { // m_pEntity->SendOldTipmsgFormatWithId(tpInvitLimiltLevel,ttFlyTip,nMinLevel); // return; // } // if (pEntity->GetGuildSystem()->m_pGuild) // { // m_pEntity->SendOldTipmsgFormatWithId(tpLeftGuildCanNotJoin1,ttFlyTip); // return; // } // if (!TimeOK(((CActor*)pEntity)->GetGuildSystem()->nZzNext)) // { // //脱离帮派后,在规定时间内不能接收邀请 // int nLeftTimeLimit = GetLogicServer()->GetDataProvider()->GetGuildConfig().nLeftTimeLimit/3600; // m_pEntity->SendOldTipmsgFormatWithId(tpAddToGuildTimeUp,ttFlyTip,nLeftTimeLimit); // return; // } // CActorPacket AP; // CDataPacket& DataPacket = ((CActor*)pEntity)->AllocPacket(AP); // DataPacket << (BYTE)enGuildSystemID << (BYTE)sNoticeInvite; // DataPacket << (unsigned int)m_pGuild->m_nGid; // DataPacket << (Uint64)(m_pEntity->GetHandle()); // DataPacket.writeString(m_pGuild->m_sGuildname); // if(m_pGuild->m_pLeader) // { // DataPacket.writeString(m_pGuild->m_pLeader->sActorName); // } // else // { // DataPacket.writeString(m_pGuild->m_sFoundname); // } // DataPacket << (int)m_pGuild->GetMemberCount(); // DataPacket << (int)m_pGuild->GetMaxMemberCount(); // AP.flush(); // m_pGuild->AddInterMsg(Msg); //加到消息队列 // m_pEntity->SendOldTipmsgFormatWithId(tpInviteMsgSend,ttFlyTip); // } // else // { // m_pEntity->SendOldTipmsgFormatWithId(tpGuildNoOne,ttFlyTip); // } } bool CGuildSystem::Initialize(void *data,SIZE_T size) { PACTORDBDATA pActorData = (ACTORDBDATA *)data; if(pActorData ==NULL || size != sizeof(ACTORDBDATA)) { OutputMsg(rmWaning,_T("创建角色的数据长度错误,帮派系统初始化失败")); return false; } //CGuild* pGuild = NULL; m_pEntity->SetProperty(PROP_ACTOR_GUILD_ID,pActorData->nGuildID); CGuild* pGuild = GetGlobalLogicEngine()->GetGuildMgr().FindGuild(pActorData->nGuildID); if ( pGuild ) { m_pEntity->SetProperty(PROP_ACTOR_GUILD_LEVEL,pGuild->GetGuildbuildingLev(gbtMainHall)); } return true; } /* 玩家登录时,从行会节点中获取一些信息 */ void CGuildSystem::OnEnterGame() { if( m_pEntity == NULL ) { return; } //下发语音频道聊天信息 CGuild* pGuild = NULL; unsigned int nGid = m_pEntity->GetProperty(PROP_ACTOR_GUILD_ID); if( nGid >= 0 ) // { pGuild = GetGlobalLogicEngine()->GetGuildMgr().FindGuild(nGid); if( pGuild && pGuild->m_boStatus ) //行会存在,并且状态没有被删除 { ActorCommonNode* pNode = pGuild->FindMember(m_pEntity->GetProperty(PROP_ENTITY_ID)); if (pNode) { SetGuildPos(pNode->BasicData.nType); nWealNext = pNode->BasicData.nZjNext; nZzNext = pNode->BasicData.nZzNext; //这个属性不一样,玩家离开行会也要维护的 nTk = pNode->BasicData.nTK; m_nTitle = pNode->BasicData.nGuildTiTle; pNode->BasicData.nTime = m_pEntity->GetLoginTime(); //玩家登陆时间 m_GuildGx = pNode->BasicData.nTotalGx; //玩家今日行会贡献度 m_nJoinTime= pNode->BasicData.nJoinTime; //更新加入行会的时间 //m_TodayGx = pNode->BasicData.nTodayGx; /* INT_PTR guildPos = GetGuildPos(); if (guildPos == smGuildAssistLeader || guildPos == smGuildLeader) { guildPos = (guildPos == smGuildLeader?1:2); m_pEntity->GetAchieveSystem().OnEvent(eAchieveEventGuildMaster,guildPos); } */ } else//帮派成员没找到他,说明他没加入 { pGuild = NULL; if( nGid > 0 ) { //防止出现actor的guildid大于0,但是行会实际不存在的情况 ((CActor*)m_pEntity)->SetProperty(PROP_ACTOR_GUILD_ID,0); ((CActor*)m_pEntity)->SetProperty(PROP_ACTOR_GUILD_LEVEL,0); } //判断能否审核通过加入行会(相当于中途加入) pGuild = GetGlobalLogicEngine()->GetGuildMgr().ActorJoinGuildByApply( (CActor*)m_pEntity ); } } else //行会不存在,或者已被删除 { //防止出现actor的guildid大于0,但是行会实际不存在的情况 ((CActor*)m_pEntity)->SetProperty(PROP_ACTOR_GUILD_ID,0); ((CActor*)m_pEntity)->SetProperty(PROP_ACTOR_GUILD_LEVEL,0); //判断能否审核通过加入行会(相当于中途加入) pGuild = GetGlobalLogicEngine()->GetGuildMgr().ActorJoinGuildByApply( (CActor*)m_pEntity ); } } LoadActorBuildingData(); m_pGuild = pGuild; if (m_pGuild) { if(GetGlobalLogicEngine()->GetGuildMgr().GetCityOwnGuildId() == m_pGuild->GetGuildId()) { ((CActor*)m_pEntity)->GetAchieveSystem().ActorAchievementComplete(nAchieveJionSBKGuild, 1); } OnLogin(); OnLoginDeclarNotice(); if(GetGlobalLogicEngine()->GetGuildMgr().IsGuildSiegeStart() && ((CActor*)m_pEntity)->GetSceneAreaFlag() == scfGuildSiege) UpdateNameClr_OnPkModeChanged(m_pEntity->GetHandle()); } // else // { // //m_pEntity->SetSocialMask(smIsSbkCityMaster,false); // } //else//没加入任何帮派 //{ // SetGuildPos(smGuildCommon); //} // if (m_pEntity->GetLastLogoutTime() >= CMiniDateTime::today())//如果上次下线与今天是同一天,不用清除召集令 // { // boWealClear = false; // } // m_nTodayDonateCoin = ((CActor*)m_pEntity)->GetStaticVarValue(szDailyDonateCoin); // m_nTodayDonateItem = ((CActor*)m_pEntity)->GetStaticVarValue(szDailyDonateItem); // m_nTodayChargeTreeNum = ((CActor*)m_pEntity)->GetStaticVarValue(szTodayChargeTreeNum); // m_nTodayPickFruitNum = ((CActor*)m_pEntity)->GetStaticVarValue(szTodayPickFruitNum); // if( m_pGuild ) // { // CGuildProvider& pConfig = GetLogicServer()->GetDataProvider()->GetGuildConfig(); // int nPickNumLast = pConfig.m_GuildTree.m_nDailyPickLimit - m_nTodayPickFruitNum; //剩余采摘次数 // if( m_pGuild->m_nGuildTreeLevel >= GUILDTREE_PERIOD_4 && nPickNumLast > 0 ) // { // SendGuildOpOk(GUILD_CAN_PICKFRUIT); //可以摘取果实 // } // int nGuildTaskObjNum = m_pGuild->GetGuildTaskObjNum(m_pGuild->m_nGuildTaskId); // int nGetTaskAwardNum =((CActor*)m_pEntity)->GetStaticVarValue(szTodayGetTaskAwardNum); // if( m_pGuild->m_nGuildTaskSche >= nGuildTaskObjNum && nGetTaskAwardNum <= 0 ) //任务已完成,尚未领奖 // { // SendGuildOpOk(GUILD_CAN_GETTASKAWRD); // } // //如果某个活动已经开启,则通知客户端 // for( int nGuildActiveId=GuildActive_Tree; nGuildActiveId< GuildActive_Max; nGuildActiveId++ ) // { // if( m_pGuild->GetGuildActiveSts( nGuildActiveId ) == 1 ) // { // SendGuildActiveSts(nGuildActiveId); // } // } // SendGuildSiegeCmdData( ); //下发攻城战指令 // } } void CGuildSystem::OnLoginDeclarNotice() { if(m_pGuild == NULL) return; INT_PTR nCount = m_pGuild->m_WarList.count(); for (INT_PTR i = 0; i < nCount; i++) { WarRelationData& war= m_pGuild->m_WarList[i]; if( m_pGuild->GetRelationShipInWar(war.nGuildId) == GUILD_WARSHIP_YES ) { CGuild* pGuild = GetGlobalLogicEngine()->GetGuildMgr().FindGuild(war.nGuildId); if(pGuild) { m_pEntity->SendOldTipmsgFormatWithId(tpOnDeclarState,ttChatWindow + ttScreenCenter,pGuild->m_sGuildname); } } } if(m_pGuild->m_SignUpFlag == 1) //已报名明天的沙巴克战 { //m_pEntity->SendOldTipmsgFormatWithId(tpSignUpGuildWarLoginTips,ttChatWindow + ttTipmsgWindow); } /*if(m_pGuild->m_SignUpFlagLast == 1) { SYSTEMTIME &sysTime = GetLogicServer()->GetLogicEngine()->getSysTime(); if(sysTime.wHour < 21) { m_pEntity->SendOldTipmsgFormatWithId(tpGuildSBKMsg1,ttChatWindow + ttTipmsgWindow); } }*/ //TODOSBK } //玩家登陆时,处理行会相关数据 //GetGlobalLogicEngine()->GetGuildMgr().m_GuildId : SBK占领行会 //m_pGuild->m_nGid:本人所在行会 VOID CGuildSystem::OnLogin() { if (m_pEntity == NULL) return; if (m_pGuild) { const CGuildProvider& pConfig = GetLogicServer()->GetDataProvider()->GetGuildConfig(); //加到在线列表中 m_pGuild->m_ActorOnLine.linkAtLast(m_pEntity->GetHandle()); //非在线列表中的node要设置成pActor的handle m_pGuild->FindAndSetHandle(m_pEntity->GetProperty(PROP_ENTITY_ID),m_pEntity->GetHandle()); //下发这个帮派的敌对帮派列表 m_pGuild->SendWarGuildList(m_pEntity); SendGuildTitleList(); m_pGuild->SendActorApplyToGuild(); //通知有入帮消息,必须在m_pGuild->m_ActorOnLine.linkAtLast()之后调用 CheckGuildPlayerPos(gptEnter); } else { ClearZJ();//不再任何帮派,清理帮派物品(召集令) // m_pEntity->GetQuestSystem()->ClearGuildQuest();//清理帮派任务 } } void CGuildSystem::OnActorLoginOut() { } VOID CGuildSystem::Destroy() { if (m_pGuild) { if (m_pEntity == NULL) return; EntityHandle hHandle = m_pEntity->GetHandle(); //先从在线列表中删除 m_pGuild->DeleteOnLineList(hHandle); //设置它不在线 ActorCommonNode * pOffLineNode = m_pGuild->FindMember(m_pEntity->GetProperty(PROP_ENTITY_ID)); if (pOffLineNode) { pOffLineNode->hActorHandle = 0; //更新数据 m_pGuild->UpdateActorData((CActor*)m_pEntity,pOffLineNode); } } } int CGuildSystem::CreateGuild(CDataPacketReader &packet) { if (m_pEntity == NULL) return qeSucc; //是否已在某个帮派中 if (!IsFree()) { m_pEntity->SendTipmsgFormatWithId(tmCreateGuildHasInGuild,tstUI); return qeNotFree; } // if (nZzNext != 0 && !TimeOK(nZzNext)) // { // //脱离帮派后,要在规定的时间内,不能加入其他帮派,也不能接受邀请,不能创建帮派 // int nLeftTimeLimit = GetLogicServer()->GetDataProvider()->GetGuildConfig().nLeftTimeLimit/3600; // m_pEntity->SendTipmsgFormatWithId(tmLeftGuildCanNotJoin,tstUI,nLeftTimeLimit); // return qeTimeErr; // } int nLeftTime = m_pEntity->GetStaticCountSystem().GetStaticCount(NLEFT_GUILDTIME); if (nLeftTime != 0 && time(NULL) < nLeftTime) { //脱离帮派后,要在规定的时间内,不能加入其他帮派,也不能接受邀请 int nLeftTimeLimit = GetLogicServer()->GetDataProvider()->GetGuildConfig().nLeftTimeLimit/3600; m_pEntity->SendTipmsgFormatWithId(tmLeftGuildCanNotJoin, tstUI, nLeftTimeLimit); return qeTimeErr; } //判断等级 int nMinLevel = GetLogicServer()->GetDataProvider()->GetGuildConfig().nLevelLimit; if (m_pEntity->GetProperty(PROP_CREATURE_LEVEL) < nMinLevel) { m_pEntity->SendTipmsgFormatWithId(tmCreateGuildErrorLevel, tstUI); return qeLevel; } char sGuildName[32]; packet.readString(sGuildName,ArrayCount(sGuildName)); sGuildName[sizeof(sGuildName)-1] = 0; GetGlobalLogicEngine()->GetChatMgr().Filter(sGuildName); //这里不能扣除钱币,因为有可能创建失败的 INT_PTR nCreateNeedYb = GetLogicServer()->GetDataProvider()->GetGuildConfig().nCreateNeedYb; unsigned int nMyYb = ((CActor*)m_pEntity)->GetMoneyCount(mtYuanbao); if( nMyYb < nCreateNeedYb ) //没有足够的游戏币 { m_pEntity->SendTipmsgFormatWithId(tmNomoreYubao, tstUI); return 0; } CGuildComponent& mgr = GetGlobalLogicEngine()->GetGuildMgr(); //首先通知数据库服务器创建这个行会的存储数据 mgr.SendDbAddGuild(m_pEntity->GetProperty(PROP_ENTITY_ID),m_pEntity->GetHandle(),sGuildName,m_pEntity->GetEntityName()); return qeSucc; } int CGuildSystem::DeleteGuild() { if (m_pEntity == NULL) return qeSucc; if(m_pGuild == NULL) return qeSucc; return qeSucc; } int CGuildSystem::GetGuildLevel() { return m_pGuild?m_pGuild->GetLevel():0; } void CGuildSystem::ProcessNetData(INT_PTR nCmd,CDataPacketReader &packet ) { switch (nCmd) { case cGuildInfo: //请求本行会详细信息 SendGuildInfoResult(); //下发行会详细信息 break; case cGuildMember: //成员列表 SendMemberList(); break; case cGuildList: //行会列表 SendAllGuildInfo(packet); break; case cAddGuild: //创建行会 CreateGuild(packet); break; // case cDelGuild: //不需要 // DeleteGuild(); // break; // case cInvite: // InviteActor(packet); // break; // case sInviteResult: // InviteResult(packet); // break; case cJoinApply: JoinApply(packet); break; case cJoinApplyMsgList: //请求申请行会的玩家的列表 SendJoinGuildApply(); break; case cGuildBuilds: sendGuilBuilds(); break; case cDeleteMember: { unsigned int nActorid = 0; packet >> nActorid; DeleteMemberRequest(nActorid); break; } case cLeftGuild: { BYTE bType = 0; //packet >> bType; LeftGuild(bType); break; } case cChangeGuildPos: { ChangeGuildPos(packet); //SendGuildCityPosInfo(); break; } case cLeaderChange: { LeaderChange(packet); break; } case cUpdateMemo: { UpdateMemo(packet); break; } case cDeclareWar: { unsigned int nObjGuildid = 0; packet >> nObjGuildid; DeclareWar(nObjGuildid); break; } case cGuildDonate: { byte nType = 0; packet >> nType; GuildDonate(nType); break; } case cGuildDonateInfo: { SendGuildDonateInfo(); break; } case cSetAddMemberFlag: { OnSetAddMemberFlag(packet); break; } case cGuildUpdateBuild: { UpdateGuildBuild(packet); break; } case cDealGuildApply: { JoinApplyResult(packet); break; } case cGuildLog: { SendGuildEventLog(); break; } case cImpeachGuildMember: { unsigned int nObjActorId = 0; packet >> nObjActorId; ImpeachGuildMember(nObjActorId); break; } case cGuildWarList: { SendGuildWarList(); break; } case cGuildGetSbkInfo: { SendSbkInfo(); break; } default: break; } } VOID CGuildSystem::HandItemToGuildDepot(CDataPacketReader &packet) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) return; /* if (GetGuildPos() < smGuildAssistLeader) { //副帮主以上才有权限操作 m_pEntity->SendOldTipmsgFormatWithId(tpNoRight,ttFlyTip); return; } */ BYTE nType = 0; packet >> nType; int nMoney = 0; packet >> nMoney; CUserItem::ItemSeries series ; packet >> series; if(nMoney < 0) { nMoney = 0; } const CGuildProvider& guildConfig = GetLogicServer()->GetDataProvider()->GetGuildConfig(); CUserBag& bag= m_pEntity->GetBagSystem(); //从角色的包裹中查找要穿戴的物品 INT_PTR nBagIdx = bag.FindIndex(series); if ( nBagIdx < 0 ) { m_pEntity->SendOldTipmsgWithId(tpItemNotExist,ttFlyTip); return ; } CUserItem *pUserItem = bag[nBagIdx]; if(pUserItem ==NULL) return; if( pUserItem->binded() || pUserItem->IsDenyDeal() ) //绑定装备或不可交易装备不能放入仓库 { m_pEntity->SendOldTipmsgWithId(tpGuildDepotPutInBind,ttFlyTip ); // return; } if( m_pEntity->GetDealSystem().IsDealing() ) //在交易的时候不能放仓库 { m_pEntity->SendOldTipmsgWithId(tpFailForDealing,ttFlyTip ); // return; } //这里要处理仓库是否已经满的情况 //if(m_pGuild->GetGuildDepotCount() >= MAX_GUILDDEPOTBAG) int nDepotGridCount = m_pGuild->GetGuildDepotGridsCount(); if( m_pGuild->GetGuildDepotCount() >= nDepotGridCount ) //行会仓库满了 { m_pEntity->SendOldTipmsgWithId(tpDepotBagIsFull,ttFlyTip); return ; } const CStdItem * pStdItem = GetLogicServer()->GetDataProvider()->GetStdItemProvider().GetStdItem(pUserItem->wItemId); if(pStdItem ==NULL) return; //--废弃 //特戒、幻武、玄甲装备不能被投入行会仓库 // if( pStdItem->m_btType == Item::itSpecialRing ||pStdItem->m_btType == Item::itExtraWeapon // || pStdItem->m_btType == Item::itExtraDress ) // { // m_pEntity->SendOldTipmsgWithId(tpGuildDepotPutInUnvalidType,ttFlyTip ); // return; // } if( pStdItem->m_Flags.denyGuildDepot ) //注意,denyStorage是禁止放入玩家仓库 { m_pEntity->SendOldTipmsgWithId(tpItemCanNotPutDepot,ttFlyTip); //禁止存放行会仓库 return ; } if( !pStdItem->isEquipment() ) { m_pEntity->SendOldTipmsgWithId(tpGuildDepotPutInNotEquip,ttFlyTip); //不是装备 return ; } int nItemCircle = (int)pStdItem->GetUseConditionValue(CStdItem::ItemUseCondition::ucMinCircle); //转数 int nItemLevel = (int)pStdItem->GetUseConditionValue(CStdItem::ItemUseCondition::ucLevel); //等级 /* if( nItemCircle <= 0 ) { m_pEntity->SendOldTipmsgWithId(tpGuildDepotPutInNotCircleItem, ttFlyTip); //非转生装备禁止放仓库 return; } */ //((CActor*)m_pEntity)->SetStaticVarValue(szDailyDepotPutInNum, nDailyDepotPutInNum+1 ); //每日投入次数加1 // bag.RemoveItem(nBagIdx,"guild_deport",GameLog::clBagToGuildDepot,false); pUserItem->btSharp = 0; GUILDDEPOTITEM nItem; nItem.nActorId = m_pEntity->GetProperty(PROP_ENTITY_ID); nItem.nCoinType = (int)nType; nItem.nCoinNum = nMoney; nItem.nUserItem = pUserItem; m_pGuild->m_GuildDepotBag.add(nItem); /*不记录操作 GUILDDEPOTMSG nDepotMsg; nDepotMsg.nType = 1; _asncpytA(nDepotMsg.nActorName,m_pEntity->GetEntityName()); nDepotMsg.nTime = GetGlobalLogicEngine()->getMiniDateTime(); nDepotMsg.nCoinType = nType; nDepotMsg.nCoinNum = nMoney; _asncpytA(nDepotMsg.nItemName,pStdItem->m_sName); nDepotMsg.nNum = pUserItem->wCount; m_pGuild->m_GuildDepotRecord.insert(0,nDepotMsg); */ m_pGuild->NotifyUpdateDepot(); //通知客户端重新请求数据 m_pGuild->m_bSaveDepotRecord = true; CGuildProvider& pGuildConfig = GetLogicServer()->GetDataProvider()->GetGuildConfig(); int nAddGx = pGuildConfig.GetGuildDepotPutInAddGx(nItemCircle, nItemLevel, pStdItem->m_btType); if( nAddGx > 0 ) { ChangeGuildGx(nAddGx, GameLog::Log_GuildDonate); //增加本人的行会贡献 //int nLastTimes = nDailyDepotPutInLimit-nDailyDepotPutInNum-1; m_pEntity->SendOldTipmsgFormatWithId(tpGuildDepotPutInMsg, ttFlyTip, nAddGx); } char chatMsg[1024]={0}; LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildDepotPutInItem); sprintf_s(chatMsg, sizeof(chatMsg), sFormat, ( char *)(m_pEntity->GetEntityName()), CUserBag::GetItemLink((int)pUserItem->wItemId, pUserItem), nAddGx); m_pGuild->BroadCastMsgInGuildChannel(chatMsg); //记录日志 if(GetLogicServer()->GetLocalClient()) { } // m_pGuild->AddEventRecord( "", enGuildEvent_PutInDepot, 0, 0, 0, (char *)(m_pEntity->GetEntityName()), (char *)pStdItem->m_sName ); } /* 审核行会仓库物品兑换请求 */ void CGuildSystem::CheckGuildDepotItemExchange( CDataPacketReader &packet ) { if( m_pEntity == NULL ) { return; } if( m_pGuild == NULL ) { return; } if( GetGuildPos() < smGuildAssistLeader ) //只有会长、副会长才有权限审核 { //官员以上才有权限操作 m_pEntity->SendOldTipmsgFormatWithId(tpNoRight,ttFlyTip); return; } CUserItem::ItemSeries series ; BYTE nIsPass=0; packet >> series >> nIsPass; INT_PTR nIdx = m_pGuild->FindItemIndex(series); //在行会仓库里查找此装备 if( nIdx < 0 ) { m_pEntity->SendOldTipmsgWithId(tpItemNotExist); return ; } GUILDDEPOTITEM &stDepotItem = m_pGuild->m_GuildDepotBag[nIdx]; if( stDepotItem.nExchangeActorId <= 0 ) //没有人兑换 { m_pEntity->SendOldTipmsgWithId(tpGuildDepotExchangeNo); return; } CUserItem *pUserItem = stDepotItem.nUserItem; if( !pUserItem ) { return; } const CStdItem * pStdItem = GetLogicServer()->GetDataProvider()->GetStdItemProvider().GetStdItem(pUserItem->wItemId); if( pStdItem ==NULL ) { return; } int nItemCircle = (int)pStdItem->GetUseConditionValue(CStdItem::ItemUseCondition::ucMinCircle); //转数 int nItemLevel = (int)pStdItem->GetUseConditionValue(CStdItem::ItemUseCondition::ucLevel); //等级 if( nIsPass ) //审核通过 { LPCTSTR sTitle = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildDepotExchangeTitlt1); LPCTSTR sContent = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildDepotExchangeCont1); CMailSystem::SendMailFromUserItem(stDepotItem.nExchangeActorId, sTitle, sContent, pUserItem); char sText[1024]; LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildDepotItemExchangeAgree); sprintf_s(sText, sizeof(sText), sFormat, ( char *)( stDepotItem.szExchangeActorName ), ( char *) CUserBag::GetItemLink( pUserItem->wItemId, pUserItem ) ); m_pEntity->SendTipmsg( sText, ttFlyTip+ttTipmsgWindow ); // m_pGuild->AddEventRecord( "", enGuildEvent_GetOutDepot, 0, 0, 0, (char *)( stDepotItem.szExchangeActorName ), // (char *)pStdItem->m_sName ); m_pGuild->m_GuildDepotBag.remove(nIdx); //仓库删除此物品(仅仅将该元素踢出列表,但是存储空间还在) m_pGuild->m_bSaveDepotRecord = true; //需要存储 if (pUserItem)//发邮件后内存要释放 { GetGlobalLogicEngine()->DestroyUserItem(pUserItem); } } else { unsigned int nExchangeActorId = stDepotItem.nExchangeActorId; ACTORNAME szExchangeActorName; _asncpytA(szExchangeActorName, stDepotItem.szExchangeActorName); //该物品设置为未被申请兑换 stDepotItem.nExchangeActorId = 0; stDepotItem.szExchangeActorName[0] = 0; stDepotItem.nExchangeTime = 0; m_pGuild->m_bSaveDepotRecord = true; //需要存储 LPCTSTR sTitle = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildDepotExchangeTitlt2); LPCTSTR sContent = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildDepotExchangeCont2); CGuildProvider& pGuildConfig = GetLogicServer()->GetDataProvider()->GetGuildConfig(); int nNeedGx = pGuildConfig.GetGuildDepotGetOutNeedGx(nItemCircle, nItemLevel, pStdItem->m_btType); if( nNeedGx < 0 ) { nNeedGx = 0; } CMailSystem::MAILATTACH mailAttach[MAILATTACHCOUNT]; mailAttach[0].nType = qatGuildContribution; mailAttach[0].item.wCount = nNeedGx; //返回玩家申请兑换时扣除的行会贡献 CMailSystem::SendMail(nExchangeActorId, sTitle, sContent,mailAttach); char sText[1024]; LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildDepotItemCheckingReject); sprintf_s( sText, sizeof(sText), sFormat, ( char *)( szExchangeActorName ), ( char *) CUserBag::GetItemLink( pUserItem->wItemId, pUserItem ) ); m_pEntity->SendTipmsg( sText, ttFlyTip+ttTipmsgWindow ); } m_pGuild->NotifyUpdateDepot(); //通知客户端重新请求一次 //记录日志 if(GetLogicServer()->GetLocalClient()) { } } VOID CGuildSystem::SendWarList() { if (m_pEntity == NULL) return; if (m_pGuild == NULL) { m_pEntity->SendOldTipmsgFormatWithId(tpNotInGuild,ttFlyTip); return; } m_pGuild->SendWarList(m_pEntity); } VOID CGuildSystem::SendWarHistory() { if (m_pEntity == NULL) return; if (m_pGuild == NULL) { m_pEntity->SendOldTipmsgFormatWithId(tpNotInGuild,ttFlyTip); return; } m_pGuild->SendWarHistory(m_pEntity); } //设置与目标行会的关系 VOID CGuildSystem::SetGuildRelation( BYTE nType, unsigned int nObjGuildId ) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) { m_pEntity->SendOldTipmsgFormatWithId(tpNotInGuild,ttFlyTip); return; } if (nObjGuildId == m_pGuild->m_nGid ) return; int nGuildPos = GetGuildPos(); //帮派帮主、副帮主 if (nGuildPos != smGuildLeader && nGuildPos != smGuildAssistLeader) { //只能帮主做这个操作 m_pEntity->SendOldTipmsgFormatWithId(tpNoRight,ttFlyTip); return; } switch(nType) { //联盟 case 1: { SetUnionGuild(nObjGuildId,(int)nType); break; } //敌对 case 2: { //SetEnemryGuild(nGuildId); break; } //解除联盟 case 3: { RefuseGuildUnion(nObjGuildId); break; } //解除敌对 case 4: { //RefuseEnemryGuild(nGuildId); break; } default: break; } } void CGuildSystem::SetEnemryGuild(unsigned int nGuildId) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) return; CGuild* pGuild = GetGlobalLogicEngine()->GetGuildMgr().FindGuild(nGuildId); if(pGuild) { int curType = m_pGuild->GetRelationShipForId(nGuildId); //已经是联盟关系 if(curType == 1) { m_pEntity->SendOldTipmsgFormatWithId(tpIsUnionCanNotBeEnmery,ttFlyTip); return; } //是敌对关系 if(curType == 2) { m_pEntity->SendOldTipmsgFormatWithId(tpIsEnemryRelation,ttFlyTip); return; } m_pGuild->SetRelationShipWithId(nGuildId,2); pGuild->SetRelationShipWithId(m_pGuild->m_nGid,2); m_pGuild->UpdateGuildList(); pGuild->UpdateGuildList(); pGuild->SendGuildMsg(smGuildCommon,tpIsEnemryTips,ttTipmsgWindow,m_pGuild->m_sGuildname); m_pGuild->SendGuildMsg(smGuildCommon,tpIsEnemryTips,ttTipmsgWindow,pGuild->m_sGuildname); } } void CGuildSystem::RefuseEnemryGuild(unsigned int nGuildId) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) return; CGuild* pGuild = GetGlobalLogicEngine()->GetGuildMgr().FindGuild(nGuildId); if(pGuild) { int curType = m_pGuild->GetRelationShipForId(nGuildId); if(curType == 2) { m_pGuild->SetRelationShipWithId(nGuildId,0); pGuild->SetRelationShipWithId(m_pGuild->m_nGid,0); m_pGuild->UpdateGuildList(); pGuild->UpdateGuildList(); pGuild->SendGuildMsg(smGuildCommon,tpRefuseEnemryRelation,ttTipmsgWindow,m_pGuild->m_sGuildname); m_pGuild->SendGuildMsg(smGuildCommon,tpRefuseEnemryRelation,ttTipmsgWindow,pGuild->m_sGuildname); } } } void CGuildSystem::RefuseGuildUnion(unsigned int nGuildId) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) return; CGuild* pGuild = GetGlobalLogicEngine()->GetGuildMgr().FindGuild(nGuildId); if(pGuild) { int curType = m_pGuild->GetRelationShipForId(nGuildId); if(curType == 1) { m_pGuild->SetRelationShipWithId(nGuildId,0); pGuild->SetRelationShipWithId(m_pGuild->m_nGid,0); m_pGuild->UpdateGuildList(); pGuild->UpdateGuildList(); if(GetGlobalLogicEngine()->GetGuildMgr().IsGuildSiegeStart()) //开始沙巴克战 { m_pGuild->UpdateGuildActorNameInSbk(); pGuild->UpdateGuildActorNameInSbk(); } pGuild->SendGuildMsg(smGuildCommon,tpRemoveUnionRelation,ttScreenCenter+ttTipmsgWindow,m_pGuild->m_sGuildname); m_pGuild->SendGuildMsg(smGuildCommon,tpRemoveUnionRelation,ttScreenCenter+ttTipmsgWindow,pGuild->m_sGuildname); //行会模式地图下广播下坐标的敌对关系 for(int i =0; i <=1;i++) { CEntityManager* pEntityMgr = GetGlobalLogicEngine()->GetEntityMgr(); CLinkedNode *pNode; CLinkedListIterator it(i==0?m_pGuild->m_ActorOnLine:pGuild->m_ActorOnLine); for (pNode = it.first(); pNode; pNode = it.next()) { EntityHandle& hHandle = pNode->m_Data; CEntity* pEntity = pEntityMgr->GetEntity(hHandle); if (pEntity && pEntity->GetType() == enActor) { CActor* pActor = (CActor*)pEntity; pActor->GetGuildSystem()->CheckGuildPlayerPos(gptMove); } } } } } } void CGuildSystem::SetUnionGuild(unsigned int nGuildId,int nType) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) return; CGuild* pGuild = GetGlobalLogicEngine()->GetGuildMgr().FindGuild(nGuildId); if(pGuild) { int curType = m_pGuild->GetRelationShipForId(nGuildId); //已经是联盟关系 if(curType == 1) { m_pEntity->SendOldTipmsgFormatWithId(tpIsUnionRelation,ttFlyTip); return; } //是敌对关系 if(curType == 2) { m_pEntity->SendOldTipmsgFormatWithId(tpEnemyRelation,ttFlyTip); return; } //需要的行会资金 int needCoin = GetLogicServer()->GetDataProvider()->GetGuildConfig().m_GuildRelation.nUnionNeedCoin; if(m_pGuild->GetCoin() < needCoin) { m_pEntity->SendOldTipmsgFormatWithId(tpNoMoreGuildCoinUnion,ttFlyTip,needCoin); return; } if(pGuild->SendWarUnionMsgToActor(m_pGuild->m_nGid,m_pEntity->GetProperty(PROP_ENTITY_ID),m_pGuild->m_sGuildname) == false) { m_pEntity->SendOldTipmsgFormatWithId(tpTagetGuildLeaderOffline,ttFlyTip); return; } m_pEntity->SendOldTipmsgFormatWithId(tpBeTheUnionNotice,ttChatWindow + ttTipmsgWindow); m_pGuild->ChangeGuildCoin(-needCoin, 0,"SetUnion"); INTERRELATIONMSG tmpMsg; tmpMsg.nGuildId = nGuildId; int nCount = (int)m_pGuild->m_UiounMsgList.count(); for(int i=0;im_UiounMsgList[i].nGuildId) return; } m_pGuild->m_UiounMsgList.add(tmpMsg); //添加帮派事件 //char sText[1024]; //LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildEventUnion); //sprintf_s(sText, sizeof(sText), sFormat, ( char *)(pGuild->GetGuildName())); //m_pGuild->AddEventRecord(sText,tpGuildEventUnion,0,0,0,( char *)(pGuild->GetGuildName()), ""); //添加帮派事件 //char sText1[1024]; //LPCTSTR sFormat1 = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildEventBeUnion); //sprintf_s(sText1, sizeof(sText1), sFormat1, ( char *)(m_pGuild->GetGuildName())); //pGuild->AddEventRecord(sText1,tpGuildEventBeUnion,0,0,0,( char *)(m_pGuild->GetGuildName()), ""); } } VOID CGuildSystem::WarRelationResult(CDataPacketReader &packet) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) return; int nGuildPos = GetGuildPos(); //帮派帮主、副帮主 if (nGuildPos != smGuildLeader && nGuildPos != smGuildAssistLeader) { //只能帮主做这个操作 m_pEntity->SendOldTipmsgFormatWithId(tpNoRight,ttFlyTip); return; } BYTE nType = 0; packet >> nType; unsigned int nGuildId = 0; packet >> nGuildId; unsigned int nActorId = 0; packet >> nActorId; CGuild* pGuild = GetGlobalLogicEngine()->GetGuildMgr().FindGuild(nGuildId); if(pGuild) { int curType = m_pGuild->GetRelationShipForId(nGuildId); //已经是联盟关系 if(curType == 1) { m_pEntity->SendOldTipmsgFormatWithId(tpIsUnionRelation,ttFlyTip); return; } //是敌对关系 if(curType == 2) { m_pEntity->SendOldTipmsgFormatWithId(tpEnemyRelation,ttFlyTip); return; } int nIndex = -1; for(int i=0;im_UiounMsgList.count();i++) { INTERRELATIONMSG& tmpMsg = pGuild->m_UiounMsgList[i]; if(tmpMsg.nGuildId == m_pGuild->m_nGid) { nIndex = i; break; } } if(nIndex < 0) return; CEntity* pEntity = GetGlobalLogicEngine()->GetEntityMgr()->GetEntityPtrByActorID(nActorId); //同意 if(nType == 1) { m_pGuild->SetRelationShipWithId(nGuildId,nType); pGuild->SetRelationShipWithId(m_pGuild->m_nGid,nType); pGuild->m_UiounMsgList.remove(nIndex); m_pGuild->UpdateGuildList(); pGuild->UpdateGuildList(); if(GetGlobalLogicEngine()->GetGuildMgr().IsGuildSiegeStart()) //开始沙巴克战 { m_pGuild->UpdateGuildActorNameInSbk(); pGuild->UpdateGuildActorNameInSbk(); } /* 取消联盟广播 改为对行会内部广播 */ //m_pGuild->SendGuildMsg( smGuildCommon, tpBecomeUnionGuild, ttChatWindow, m_pGuild->m_sGuildname,pGuild->m_sGuildname); //pGuild->SendGuildMsg( smGuildCommon, tpBecomeUnionGuild, ttChatWindow, m_pGuild->m_sGuildname,pGuild->m_sGuildname); CEntityManager* em = GetGlobalLogicEngine()->GetEntityMgr(); em->BroadTipmsgWithParams(tpBecomeUnionGuild, ttScreenCenter + ttChatWindow, m_pGuild->m_sGuildname,pGuild->m_sGuildname); char sText[100] = {0}; LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpBecomeUnionGuild); sprintf_s(sText, sizeof(sText), sFormat, m_pGuild->m_sGuildname, pGuild->m_sGuildname); // m_pGuild->BroadCastMsgInGuildChannel(sText); // pGuild->BroadCastMsgInGuildChannel(sText); //OutputMsg(rmNormal,"WarRelationResult, sFormat=%s, sText=%s",sFormat, sText); //行会模式地图下广播下坐标的敌对关系 for(int i =0; i <=1;i++) { CEntityManager* pEntityMgr = GetGlobalLogicEngine()->GetEntityMgr(); CLinkedNode *pNode; CLinkedListIterator it(i==0?m_pGuild->m_ActorOnLine:pGuild->m_ActorOnLine); for (pNode = it.first(); pNode; pNode = it.next()) { EntityHandle& hHandle = pNode->m_Data; CEntity* pEntity = pEntityMgr->GetEntity(hHandle); if (pEntity && pEntity->GetType() == enActor) { CActor* pActor = (CActor*)pEntity; pActor->GetGuildSystem()->CheckGuildPlayerPos(gptMove); } } } } //拒绝 else if(nType == 2) { pGuild->m_UiounMsgList.remove(nIndex); if (pEntity && pEntity->GetType() == enActor) { CActor* pActor = (CActor*)pEntity; pActor->SendOldTipmsgFormatWithId(tpRefuseUnion,ttFlyTip,m_pGuild->m_sGuildname); } } } } VOID CGuildSystem::DeclareWar(unsigned int nObjGuildid) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) { m_pEntity->SendTipmsgFormatWithId(tmNotInGuild, tstUI); return; } int nGuildPos = GetGuildPos(); //帮派帮主、副帮主 if (nGuildPos < smGuildElite) { m_pEntity->SendTipmsgFormatWithId(tmNoRight, tstUI); return; } if (nObjGuildid == m_pGuild->m_nGid ) return;//不能向自己帮派宣战 CGuild* pObjGuild = GetGlobalLogicEngine()->GetGuildMgr().FindGuild(nObjGuildid); if (pObjGuild) { int rs = m_pGuild->GetRelationShipInWar(nObjGuildid); //获取本人行会与对方行会是否是宣战关系 //已经宣战 if (rs == 1) { m_pEntity->SendTipmsgFormatWithId(tmNotPeaceful, tstUI); return; } int curType = m_pGuild->GetRelationShipForId(nObjGuildid); //同盟关系不能宣战 if(curType == 1) { m_pEntity->SendOldTipmsgFormatWithId(tmIsUnionDecare, tstUI); return; } //需要的行会资金 int needCoin = GetLogicServer()->GetDataProvider()->GetGuildConfig().m_GuildRelation.nDeclareNeedCoin; if(m_pGuild->GetCoin() < needCoin) { m_pEntity->SendTipmsgFormatWithId(tmNoMoreGuildCoin, tstUI, needCoin); return; } m_pGuild->ChangeGuildCoin(-needCoin,0, "DeclareWar"); //加入到列表中 宣战是相互的 m_pGuild->AddWarGuild(nObjGuildid,pObjGuild); pObjGuild->AddWarGuild(m_pGuild->m_nGid, m_pGuild); //m_pGuild->AddUnionWarGuild(nObjGuildid,pObjGuild); //通知对方成员 //pObjGuild->SendGuildMsg(smGuildCommon,tpDeclareWarNotice,ttScreenCenter+ttTipmsgWindow,m_pGuild->m_sGuildname); //pGuild->NotifyUpdateGuildInfo(); //m_pEntity->SendTipmsgFormatWithId(tmDeclareSucc, tstUI); //通知自己帮派成员 //m_pGuild->SendGuildMsg(smGuildCommon,tpOnWarNotice,ttScreenCenter+ttTipmsgWindow,pObjGuild->m_sGuildname); m_pGuild->UpdateGuildList(); pObjGuild->UpdateGuildList(); // UpdateNameClr_OnPkModeChanged( ((CActor*)m_pEntity)->GetHandle() ); //将自己名称颜色发给周围玩家(包括本人) // UpdateOtherNameClr_GiveSelf( ((CActor*)m_pEntity)->GetHandle() ); //将周围玩家的名称颜色发给本人 //如果通知周围玩家,更新他的周围玩家名称颜色,就会导致N*N的数据量 //NotifyOtherNameClr_GiveThemSelf( ((CActor*)m_pEntity)->GetHandle() ); //通知周围玩家更新他本人的名称颜色 //添加帮派事件 char sText[1024]; LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetTipmsgConfig().GetTipmsg(tmDeclareSucc); sprintf_s(sText, sizeof(sText), sFormat, ( char *)(pObjGuild->GetGuildName())); m_pGuild->AddEventRecord("",enGuildEvent_ToWar,0,0,0,( char *)(pObjGuild->GetGuildName()), ""); m_pGuild->SendGuildChatMsg(m_pEntity, sText); //添加帮派事件 char sText1[1024]; LPCTSTR sFormat1 = GetLogicServer()->GetDataProvider()->GetTipmsgConfig().GetTipmsg(tmOnWarNotice); sprintf_s(sText1, sizeof(sText1), sFormat1, ( char *)(m_pGuild->GetGuildName())); pObjGuild->SendGuildChatMsg(m_pEntity, sText1); pObjGuild->AddEventRecord("",enGuildEvent_War,0,0,0,( char *)(m_pGuild->GetGuildName()), ""); m_pGuild->SendWarGuildListToAllMember(); pObjGuild->SendWarGuildListToAllMember(); //发送敌对帮派的列表 //m_pGuild->SendWarList(m_pEntity); //m_pGuild->NotifyUpdateGuildInfo(); CActorPacket ap; CDataPacket & dataPacket = m_pEntity->AllocPacket(ap); dataPacket << (BYTE)enGuildSystemID << (BYTE)sDeclareWar; dataPacket <<(unsigned int)nObjGuildid; ap.flush(); } } VOID CGuildSystem::GetUpdateGuildInfo() { } //行会升级 VOID CGuildSystem::UpgradeGuild() { if (m_pEntity == NULL) return; if (m_pGuild == NULL) { m_pEntity->SendOldTipmsgFormatWithId(tpNotInGuild,ttFlyTip); return; } INT_PTR nMyLevel = m_pGuild->GetLevel(); if (GetLogicServer()->GetDataProvider()->GetGuildConfig().nMaxLevel <= nMyLevel) { return; } int myPos = GetGuildPos(); if (myPos < smGuildAssistLeader ) { //只能帮主或副帮主才能做这个操作 m_pEntity->SendOldTipmsgFormatWithId(tpNoRight,ttFlyTip); return; } TriggerEvent(gUpgradeGuild); /* const GuildLevelConfig* pConfig = GetLogicServer()->GetDataProvider()->GetGuildConfig().GetLevelConfig(nMyLevel); if(pConfig) { int needYb = pConfig->nNeedYb; //元宝不够 if(m_pEntity->GetProperty(PROP_ACTOR_YUANBAO) < needYb) { m_pEntity->SendOldTipmsgFormatWithId(tpNomoreYubao,ttFlyTip); return; } LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpExpandMan); ((CActor*)m_pEntity)->ChangeMoney(mtYuanbao,-needYb,118,0,sFormat); nMyLevel++; m_pGuild->SetLevel((int)nMyLevel,true,true); //添加帮派事件 char sText[1024]; LPCTSTR strFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpUpguildlevelEvent); const GuildLevelConfig* pNewConfig = GetLogicServer()->GetDataProvider()->GetGuildConfig().GetLevelConfig(nMyLevel); if(pNewConfig) { //发送消息给对方 CActorPacket AP; CDataPacket& DataPacket = ((CActor*)m_pEntity)->AllocPacket(AP); DataPacket << (BYTE)enGuildSystemID << (BYTE)cUpgrade; DataPacket << (int)(pNewConfig->nMaxMember); AP.flush(); sprintf_s(sText, sizeof(sText), strFormat, ( char *)((CActor*)m_pEntity->GetEntityName()),needYb,pNewConfig->nMaxMember); m_pGuild->AddEventRecord(sText,tpCreateGuildEvent,needYb,pNewConfig->nMaxMember,0,( char *)((CActor*)m_pEntity->GetEntityName()),NULL); } } */ } VOID CGuildSystem::GetZJ() { } VOID CGuildSystem::UpdateMemo(CDataPacketReader &packet) { if (m_pGuild == NULL) return; if (m_pEntity == NULL) return; // BYTE nMemoType = 0; // packet >> nMemoType; int nMyPos = GetGuildPos(); if (nMyPos < smGuildAssistLeader) { m_pEntity->SendTipmsgFormatWithId(tmNoRight, tstUI); return; } char nMemo[1024]; memset(nMemo, 0, sizeof(nMemo)); packet.readString(nMemo, ArrayCount(nMemo)); //nMemo[strlen(nMemo) - 1] = 0; // if ( nMemoType < 0 || nMemoType >3) // return; GetGlobalLogicEngine()->GetChatMgr().Filter(nMemo);//过滤字符 // if (nMemoType == 1) // { // m_pGuild->SetInMemo(nMemo,TRUE); // }else if(nMemoType == 2) // { // m_pGuild->SetOutMemo(nMemo,TRUE); // } // else if(nMemoType == 3) // { // m_pGuild->SetGuildGroupMemo(nMemo,TRUE); // } m_pGuild->SetOutMemo(nMemo,TRUE); m_pEntity->SendTipmsgFormatWithId(tmUpdateMemoSucc, tstUI); // if(nMemoType < 3) // m_pEntity->SendTipmsgFormatWithId(tmUpdateMemoSucc, tstUI); m_pGuild->NotifyUpdateGuildInfo(); } VOID CGuildSystem::SetGuildQGroupId(CDataPacketReader &packet) { if (m_pGuild == NULL) return; if (m_pEntity == NULL) return; int nMyPos = GetGuildPos(); if (nMyPos < smGuildAssistLeader) { m_pEntity->SendOldTipmsgFormatWithId(tpNoRight,ttFlyTip); return; } char strQq[32]; packet.readString(strQq,ArrayCount(strQq)); strQq[sizeof(strQq)-1] = 0; GetGlobalLogicEngine()->GetChatMgr().Filter(strQq); m_pGuild->SetQqGroupId(strQq,true); m_pEntity->SendOldTipmsgFormatWithId(tpSetGuildQSuc,ttFlyTip); m_pGuild->NotifyUpdateGuildInfo(); } VOID CGuildSystem::SetGuildYGroupId(CDataPacketReader &packet) { if (m_pGuild == NULL) return; if (m_pEntity == NULL) return; int nMyPos = GetGuildPos(); if (nMyPos != smGuildAssistLeader && nMyPos != smGuildLeader) { m_pEntity->SendOldTipmsgFormatWithId(tpNoRight,ttFlyTip); return; } BYTE nType = 0; packet >> nType; char strYy[32], grilCompere[32]; packet.readString(strYy,ArrayCount(strYy)); strYy[sizeof(strYy)-1]=0; packet.readString(grilCompere, ArrayCount(grilCompere)); char gMsg[1024]; packet.readString(gMsg,ArrayCount(gMsg)); gMsg[sizeof(gMsg)-1]=0; GetGlobalLogicEngine()->GetChatMgr().Filter(gMsg); m_pGuild->SetYyType(nType); m_pGuild->SetYyGroupId(strYy,true); m_pGuild->SetYyGridCompere(grilCompere); m_pGuild->SetYyMemo(gMsg,true); m_pEntity->SendOldTipmsgFormatWithId(tpSetGuildQSuc,ttFlyTip); m_pGuild->NotifyUpdateGuildInfo(); } /* nTargetPos:0-成员,1-官员,2-副帮主,3-帮主 帮主一旦禅让,就直接变成成员 */ VOID CGuildSystem::ChangeGuildPos(CDataPacketReader &packet) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) { m_pEntity->SendTipmsgFormatWithId(tmNotInGuild, tstUI); return; } //BYTE nChangeType;//升职还是降职 //1:升级 // 2:降级 unsigned int nActorid; //目标角色id BYTE nObjNewPos; //目标的新职位 //packet >> nChangeType; packet >> nActorid; packet >> nObjNewPos; //这里参数就是 0-成员,2-副帮主 if (nActorid == m_pEntity->GetProperty(PROP_ENTITY_ID)) return; //目标职位不能是帮主 if( nObjNewPos < smGuildCommon || nObjNewPos >= smGuildLeader ) return; int nMyPos = GetGuildPos(); //本人职位 if( nMyPos != smGuildLeader) //首领或者副首领允许 { m_pEntity->SendTipmsgFormatWithId(tmNoRight,tstUI); return; } if(nObjNewPos != smGuildAssistLeader && nObjNewPos != smGuildCommon) { m_pEntity->SendTipmsgFormatWithId(tmNoRight,tstUI); return; } if(nObjNewPos>=nMyPos) { m_pEntity->SendTipmsgFormatWithId(tmNoRight,tstUI); return; } if (GetGlobalLogicEngine()->GetGuildMgr().IsGuildSiegeStart()) { m_pEntity->SendTipmsgFormatWithId(tmInSbkWar, tstUI); return; } //查找这个人是否加入帮派 ActorCommonNode* pNode = m_pGuild->FindMember(nActorid); if (!pNode) { OutputMsg(rmTip,_T("can not find guild member,actorid=%d"),nActorid); return; } int nObjHisPos = 0; //对方的原帮派地位 CEntity* pEntity = GetGlobalLogicEngine()->GetEntityMgr()->GetEntity(pNode->hActorHandle); CGuildSystem* pGS = NULL; if (pEntity && pEntity->GetType() == enActor) { //在线 pGS = ((CActor*)pEntity)->GetGuildSystem(); if (pGS->m_pGuild == NULL || pGS->m_pGuild != m_pGuild) { //不同帮派,其实也不一定要做这个判断,保险一点 return; } nObjHisPos = pGS->GetGuildPos(); } else { //不在线 nObjHisPos = pNode->BasicData.nType; } if (nObjHisPos == nObjNewPos) { char* szNewGuildTitle = m_pGuild->GetGuildTitleName(nObjNewPos); if( szNewGuildTitle ) { m_pEntity->SendTipmsgFormatWithId(tmGuildObjHasBeenPos, tstUI,szNewGuildTitle); } return; //职位跟原来的一样 } if( nObjHisPos>=nMyPos ) //对方现在的职位高于本人职位 { m_pEntity->SendTipmsgFormatWithId(tmNoRight, tstUI); return; } //判断人数,不同的帮派级别,副帮主的人数是不一样的 if( nObjNewPos == smGuildAssistLeader ) //把某人升/降职到副帮主,要判断人数是否超出了 { if( m_pGuild->GetGuildPosCount(smGuildAssistLeader) >= m_pGuild->MaxGuildPosCount(smGuildAssistLeader) ) { m_pEntity->SendTipmsgFormatWithId(tmGuildPosLimit,tstUI, m_pGuild->GetGuildTitleName(smGuildAssistLeader)); return; } m_pGuild->m_nSecLeaderCount++; } else if( nObjNewPos == smGuildTangzhu ) //把某人升/降职到官员(堂主),要判断人数是否超出了 { if( m_pGuild->GetGuildPosCount(smGuildTangzhu) >= m_pGuild->MaxGuildPosCount(smGuildTangzhu) ) { m_pEntity->SendTipmsgFormatWithId(tmGuildPosLimit, tstUI, m_pGuild->GetGuildTitleName(smGuildTangzhu)); return; } m_pGuild->m_GuildTkCount++; } //原职位数量减一 if (nObjHisPos == smGuildAssistLeader) { m_pGuild->m_nSecLeaderCount--; } else if (nObjHisPos == smGuildTangzhu) { m_pGuild->m_GuildTkCount--; } //添加帮派事件 char sText[1024]; LPCTSTR sFormat; if( nObjHisPos > nObjNewPos ) { // sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tmDownGuildPosEvent); pNode->BasicData.nGuildTiTle = 0; m_pGuild->SendChangeTitleToAll(nActorid,0); } // else // sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tmUpGuildPosEvent); // LPCTSTR gOldName = m_pGuild->GetGuildTitleName(nObjHisPos); //GetGuildPosName(nObjHisPos); // LPCTSTR gNewName = m_pGuild->GetGuildTitleName(nObjNewPos); //GetGuildPosName(nObjNewPos); // sprintf_s(sText, sizeof(sText), sFormat, ( char *)(pNode->sActorName),gOldName,gNewName); if( nObjNewPos > smGuildCommon ) //任命官员 { m_pGuild->AddEventRecord( "", enGuildEvent_AddOfficer, nObjNewPos, 0, 0, (char *)(pNode->sActorName), NULL); } else //撤销官员 { m_pGuild->AddEventRecord( "", enGuildEvent_DelOfficer, nObjHisPos, 0, 0, (char *)(pNode->sActorName), NULL); } //设置对方的职位 pNode->BasicData.nType = nObjNewPos; pNode->BasicData.nZzNext = GetZZNext(); if(pGS) { pGS->SetGuildPos(nObjNewPos); pGS->m_nTitle = pNode->BasicData.nGuildTiTle; } else { //保存到数据库 Save(m_pGuild->m_nGid,pNode->BasicData.nActorId,pNode->BasicData.nTotalGx,pNode->BasicData.nType << 16, pNode->BasicData.nZjNext,pNode->BasicData.nZzNext,pNode->BasicData.nGuildTiTle,pNode->BasicData.nGuildCityPos, pNode->BasicData.nTime, pNode->BasicData.nModelId, pNode->BasicData.nJoinTime); } //给操作的人一个提示 m_pEntity->SendTipmsgFormatWithId(tmOperSucc, tstUI); ((CActor*)m_pEntity)->ResetShowName(); if(pEntity) ((CActor*)pEntity)->ResetShowName(); //记录日志 if(GetLogicServer()->GetLocalClient()) { } m_pGuild->AfterDonateDealGuild(); SendMemberList(); //刷新列表 } /* 帮主禅让 */ VOID CGuildSystem::LeaderChange(CDataPacketReader &packet) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) { m_pEntity->SendTipmsgFormatWithId(tmNotInGuild, tstUI); return; } if (GetGuildPos() != smGuildLeader) { //只能帮主做这个操作 m_pEntity->SendTipmsgFormatWithId(tmNoRight,tstUI); return; } CGuildComponent& guildMgr = GetGlobalLogicEngine()->GetGuildMgr(); SYSTEMTIME &sysTime = GetLogicServer()->GetLogicEngine()->getSysTime(); WORD nWeek = sysTime.wDayOfWeek; /* if( (GetGlobalLogicEngine()->GetGuildMgr().IsCanCrossSbkGuild(m_pEntity->GetProperty(PROP_ACTOR_GUILD_ID)) == true) && (nWeek ==3 || nWeek == 4) ) { m_pEntity->SendOldTipmsgFormatWithId(tpIsCrossGuildCanNotChange,ttFlyTip); return; } if( ((CActor*)m_pEntity)->GetCrossSystem().IsCrossSbkCityOwn(m_pEntity->GetProperty(PROP_ACTOR_GUILD_ID))) { m_pEntity->SendOldTipmsgFormatWithId(tpIsCrossGuildCanNotChange,ttFlyTip); return; } */ unsigned int nActorid = 0;//新帮主 packet >> nActorid; //看看这个新帮主是否已加入这个帮派,是否够20级,是否在职超过72小时 CEntity* pEntity = GetGlobalLogicEngine()->GetEntityMgr()->GetEntityPtrByActorID(nActorid); // if (!pEntity || pEntity->GetType() != enActor) // { // m_pEntity->SendOldTipmsgFormatWithId(tpGuildNoOne,ttFlyTip); // return; // } if (guildMgr.IsGuildSiegeStart()) { m_pEntity->SendTipmsgFormatWithId(tmInSbkWar, tstUI); return; } int nLevel = 0; UINT nzz = 0; int nObjHisPos = 0;//对方的帮派地位 int nMinLevel = GetLogicServer()->GetDataProvider()->GetGuildConfig().nLevelLimit; unsigned int nMyId = m_pEntity->GetId(); ActorCommonNode* pActorNode = m_pGuild->FindMember(nActorid); //查找是否存在此帮派成员 if (!pActorNode) { OutputMsg(rmTip,_T("can not find guild member,actorid=%d"),nActorid); return; } ActorCommonNode* pMyNode = m_pGuild->FindMember(nMyId); //查找是否存在此帮派成员 if (!pMyNode) { OutputMsg(rmTip,_T("can not find guild member,actorid=%d"),nMyId); return; } if(nObjHisPos == 0) nObjHisPos = pActorNode->BasicData.nType; if(nLevel == 0) nLevel = pActorNode->BasicData.nLevel; if(nLevel < nMinLevel) { return; } guildMgr.OnGuildLeaderChange(m_pGuild, m_pEntity->GetId(),nActorid, glcLeaderChange); if(!pEntity) { Save(m_pGuild->m_nGid,pActorNode->BasicData.nActorId, pActorNode->BasicData.nTotalGx, pActorNode->BasicData.nType << 16, pActorNode->BasicData.nZjNext, pActorNode->BasicData.nZzNext, pActorNode->BasicData.nGuildTiTle, pActorNode->BasicData.nGuildCityPos, pActorNode->BasicData.nTime, pActorNode->BasicData.nModelId, pActorNode->BasicData.nJoinTime); } //添加帮派事件 char sText[1024]; LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetTipmsgConfig().GetTipmsg(tmChangeGuildLeaderEvent); sprintf_s(sText, sizeof(sText), sFormat, ( char *)(m_pEntity->GetEntityName()),( char *)(pActorNode->sActorName)); m_pGuild->AddEventRecord( "", enGuildEvent_LeaderChange, 0, 0, 0, (char *)(m_pEntity->GetEntityName()),( char *)(pActorNode->sActorName)); m_pEntity->SendTipmsgFormatWithId(tmChangeLeaderSucc, tstUI); //记录日志 if(GetLogicServer()->GetLocalClient()) { } m_pGuild->AfterDonateDealGuild(); CActorPacket ap; CDataPacket & dataPacket = m_pEntity->AllocPacket(ap); dataPacket << (BYTE)enGuildSystemID << (BYTE)sLeaderChange; dataPacket <<(BYTE)0; ap.flush(); } //玩家主动离开行会 VOID CGuildSystem::LeftGuild(BYTE bType) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) { m_pEntity->SendTipmsgFormatWithId(tmNotInGuild,tstUI); return; } if (GetGlobalLogicEngine()->GetGuildMgr().IsGuildSiegeStart()) { m_pEntity->SendTipmsgFormatWithId(tmInSbkWar, tstUI); return; } if(m_InGuildFuben == true) { m_pEntity->SendTipmsgFormatWithId(tmMeInFuben,tstUI); return ; } //帮主不能退出帮派 if (GetGuildPos() == smGuildLeader) { m_pEntity->SendTipmsgFormatWithId(tmLeaderCanNotLeft,tstUI); return; } if(bType == 0) if(m_InDartNow == true) { // CActorPacket pack; // CDataPacket &data=m_pEntity->AllocPacket(pack); // data << (BYTE)enGuildSystemID << (BYTE)cSendInDart; // pack.flush(); return; } //if(m_InDartNow == true) // TriggerEvent(gLeftGuild); //删除成员 m_pGuild->DeleteMember(m_pEntity->GetProperty(PROP_ENTITY_ID),(CActor*)m_pEntity,NULL,FALSE); m_pEntity->SetProperty(PROP_ACTOR_GUILD_ID , 0); m_pEntity->SetProperty(PROP_ACTOR_GUILD_LEVEL, 0); CActorPacket AP; CDataPacket& DataPacket = m_pEntity->AllocPacket(AP); DataPacket << (BYTE)enGuildSystemID << (BYTE)sLeftGuild; DataPacket <<(BYTE)1; AP.flush(); } /*把玩家踢出行会 成员可能不在线 */ VOID CGuildSystem::DeleteMemberRequest(unsigned int nActorid) { if (m_pEntity == NULL) return; int nMyGuildPos = GetGuildPos(); if (m_pGuild == NULL || nMyGuildPos < smGuildTangzhu ) { //只有帮主才可以进行此操作 m_pEntity->SendTipmsgFormatWithId(tmNoRight, tstUI); return; } if (GetGlobalLogicEngine()->GetGuildMgr().IsGuildSiegeStart()) { m_pEntity->SendTipmsgFormatWithId(tmInSbkWar, tstUI); return; } ActorCommonNode* pNode = m_pGuild->FindMember(nActorid); if (pNode) { int nHisGuildPos = pNode->BasicData.nType; CEntity* pEntity = GetGlobalLogicEngine()->GetEntityMgr()->GetEntity(pNode->hActorHandle); if (pEntity && pEntity->GetType() == enActor) { if(((CActor*)pEntity)->GetGuildSystem()->m_InGuildFuben == true) { ((CActor*)m_pEntity)->SendTipmsgFormatWithId(tmGuildInfuben,tstUI); return ; } if(((CActor*)pEntity)->GetGuildSystem()->m_InDartNow == true) { ((CActor*)m_pEntity)->SendTipmsgFormatWithId(tmInGuildDart,tstUI); return ; } //在线 CGuildSystem* pGS = ((CActor*)pEntity)->GetGuildSystem(); if (pGS->m_pGuild == NULL || pGS->m_pGuild != m_pGuild) { //不同帮派,其实也不一定要做这个判断,保险一点 return; } nHisGuildPos = pGS->GetGuildPos(); } if ((nMyGuildPos - nHisGuildPos) <= 0) { m_pEntity->SendTipmsgFormatWithId(tmNoRight,tstUI); return; } //添加帮派事件 m_pGuild->AddEventRecord( "", enGuildEvent_TickMember, 0, 0, 0, (char *)(m_pEntity->GetEntityName()), (char *)(pNode->sActorName) ); //可以开除成员了:) m_pGuild->DeleteMember(m_pEntity->GetId(),(CActor*)pEntity,pNode,TRUE); int nTime = GetGlobalLogicEngine()->getMiniDateTime() + GetLogicServer()->GetDataProvider()->GetGuildConfig().nLeftTimeLimit;//设置他的在职时间,在规定时间内不能再加入其他帮派 //被开除的成员不在线,保存数据 if(pEntity == NULL) Save(0, (unsigned int)nActorid,0,0,0,nTime,0,0,0,0,0); else if(pEntity && pEntity->GetType() == enActor) { ((CActor*)pEntity)->ResetShowName(); } //刷新职位 m_pGuild->AfterDonateDealGuild(); SendMemberList(); //刷新列表 GetGlobalLogicEngine()->GetGuildMgr().DeleteJoinGuildRelust(nActorid); //删除全局 玩家申请的结果 } else { OutputMsg(rmTip,_T("can not find guild member,actorid=%u"),nActorid); } } /* 玩家主动离开行会或者被踢出行会触发 boType:true-被踢出行会,false-主动离开 */ VOID CGuildSystem::OnLeftGuild(BOOL boType) { if( m_pEntity == NULL ) return; if( m_pGuild == NULL ) return; boSaveed = TRUE; //最后的数据保存,包括贡献值和nZZNext都要保存 m_pGuild = NULL; //真正离开行会之后 if (m_pEntity) { m_pEntity->SetProperty(PROP_ACTOR_GUILD_ID,0); m_pEntity->SetProperty(PROP_ACTOR_GUILD_LEVEL,0); SetGuildPos(smGuildCommon); if (!boType) { //自己脱离了帮派 int nLeftTime = time(NULL) + GetLogicServer()->GetDataProvider()->GetGuildConfig().nLeftTimeLimit;//设置他的在职时间,在规定时间内不能再加入其他帮派 m_pEntity->GetStaticCountSystem().SetStaticCount(NLEFT_GUILDTIME, nLeftTime); } ClearZJ();//清理召集令,如果他不在线,那等下次上线的时候清理 //清除所有的帮派任务 //m_pEntity->GetQuestSystem()->ClearGuildQuest(); //要求离开行会(主动离开或者被T),行会贡献度都清0 //m_pEntity->SetProperty(PROP_ACTOR_GUILDEXP,0); m_pEntity->SendTipmsgFormatWithId(tmGuildFlftAndClearGx, tstUI); //GetGlobalLogicEngine()->GetMiscMgr().DoScriptFunction((CActor*)m_pEntity,"OnGuildSiegeMasterStatueCheckBuff"); GetGlobalLogicEngine()->GetGuildMgr().DeleteJoinGuildRelust(m_pEntity->GetId()); //删除全局 玩家申请的结果 } } void CGuildSystem::TakeOnOffDragonRobe(BYTE nType) { // if (m_pEntity == NULL) return; // CGuildProvider& guildProvider = GetLogicServer()->GetDataProvider()->GetGuildConfig(); // if(nType)//穿上龙袍 // { // if (m_pEntity->GetBuffSystem()->Exists(guildProvider.nDragonRoleBuffId)) // { // return; // } // if (m_pEntity->GetId() == GetGlobalLogicEngine()->GetGuildMgr().GetCityOwnMasterId()) // { // m_pEntity->GetBuffSystem()->Append(guildProvider.nDragonRoleBuffId); // } // } // else // { // if (m_pEntity->GetBuffSystem()->Exists(guildProvider.nDragonRoleBuffId)) // { // m_pEntity->GetBuffSystem()->RemoveById(guildProvider.nDragonRoleBuffId); // } // } } void CGuildSystem::SendGuildCityPosInfo() { } /* 客户端处理(10,2)消息时, 如果数量为1,表示是本人信息更新,则不需要清空成员列表,只需要更新本人那一列的信息,其他成员信息照旧显示 如果数量不为1,则先清空旧的列表 */ VOID CGuildSystem::SendMemberList(unsigned int nActorId) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) return; CMiniDateTime nCurrentTime; nCurrentTime.tv = GetGlobalLogicEngine()->getMiniDateTime(); CActorPacket AP; CDataPacket& DataPacket = m_pEntity->AllocPacket(AP); DataPacket << (BYTE)enGuildSystemID << (BYTE)sGuildMember; size_t pos = DataPacket.getPosition(); DataPacket << (int)0;//未必是真实的数量 int nResult = 0; CEntityManager* pEntityMgr = GetGlobalLogicEngine()->GetEntityMgr(); int nSize = m_pGuild->m_ActorOffLine.size(); for(int i = 0; i < nSize; i++) { ActorCommonNode& actor = m_pGuild->m_ActorOffLine[i]; if( nActorId > 0 && nActorId != actor.BasicData.nActorId ) //指定某个成员的数据 { continue; } CEntity* pOnlineEntity = NULL; if (actor.hActorHandle != 0) { pOnlineEntity = pEntityMgr->GetEntity(actor.hActorHandle); } if (pOnlineEntity) { CActor* pOnlineActor = (CActor*)pOnlineEntity; DataPacket << pOnlineEntity->GetProperty(PROP_ENTITY_ID); DataPacket.writeString(pOnlineActor->GetEntityName()); DataPacket << (int)(pOnlineEntity->GetProperty(PROP_CREATURE_LEVEL)); DataPacket << (BYTE)(pOnlineEntity->GetProperty(PROP_ACTOR_CIRCLE)); DataPacket << (BYTE)(pOnlineEntity->GetProperty(PROP_ACTOR_VOCATION)); DataPacket << (BYTE)(pOnlineEntity->GetProperty(PROP_ACTOR_SEX)); int nPos = pOnlineActor->GetGuildSystem()->GetGuildPos(); DataPacket << (BYTE)nPos; DataPacket << (int)(pOnlineActor->GetGuildSystem()->m_GuildGx); DataPacket << (BYTE)1; DataPacket << (unsigned int)(pOnlineActor->GetLoginTime()); DataPacket << (unsigned int)(pOnlineEntity->GetProperty(PROP_ACTOR_SUPPER_PLAY_LVL)); } else { DataPacket << (unsigned int)actor.BasicData.nActorId; DataPacket.writeString(actor.sActorName); std::string st = actor.sActorName; DataPacket << (int)actor.BasicData.nLevel; DataPacket << (BYTE)actor.BasicData.nCircle; DataPacket << (BYTE)actor.BasicData.nJob; DataPacket << (BYTE)actor.BasicData.nSex; DataPacket << (BYTE)actor.BasicData.nType; DataPacket << (int)(actor.BasicData.nGuildGX); DataPacket << (BYTE)0; int nOnlineTime =nCurrentTime.tv - actor.BasicData.nTime;//在线时间 if(nOnlineTime <0) { nOnlineTime =0; } DataPacket << (unsigned int)nOnlineTime; DataPacket << (unsigned int)(actor.BasicData.nVipGrade); } nResult++; } int* pCount = (int*)DataPacket.getPositionPtr(pos); *pCount = nResult; AP.flush(); } VOID CGuildSystem::SendGuildCard(CDataPacketReader &packet) { } void CGuildSystem::SendGuildCardByRank(int nRank) { } VOID CGuildSystem::SendAllGuildInfo(CDataPacketReader &packet) { if (m_pEntity == NULL) return; CActorPacket AP; CDataPacket& DataPacket = m_pEntity->AllocPacket(AP); unsigned int nActorid = m_pEntity->GetId(); DataPacket << (BYTE)enGuildSystemID << (BYTE)sGuildList; CGuildComponent& mgr = GetGlobalLogicEngine()->GetGuildMgr(); size_t pos = DataPacket.getPosition(); int total = 0; DataPacket << total; //总数 int nNow = GetGlobalLogicEngine()->getMiniDateTime(); CLinkedNode *pNode; CLinkedListIterator it(*mgr.m_pRank); for (pNode = it.first(); pNode; pNode = it.next()) { CGuild* pAllGuild = pNode->m_Data; if (pAllGuild && pAllGuild->m_boStatus) //&& ( (m_pGuild && (nType == m_pGuild->GetRelationShipForId(pAllGuild->m_nGid))) || (m_pGuild && (nType == 3 && m_pGuild->GetRelationShipForId(pAllGuild->m_nGid) == 0)) || nType == 0))//已经加入帮派的,要能查看全部,没有加入的只能看本阵营的 { DataPacket.writeString(pAllGuild->m_sGuildname); DataPacket <<(unsigned int)pAllGuild->m_nGid; pAllGuild->m_nRank = total + 1; DataPacket << (int)pAllGuild->m_nRank; char* sLeaderName = pAllGuild->FindGuildMemberName(pAllGuild->m_nLeaderId); printf("SendAllGuildInfo %d, name :%s \n",pAllGuild->m_nGid, sLeaderName); if(sLeaderName) DataPacket.writeString(sLeaderName); else DataPacket.writeString(""); DataPacket << (int)pAllGuild->m_MainHallLev; DataPacket << (int)pAllGuild->GetMemberCount(); DataPacket << (int)pAllGuild->GetMaxMemberCount(); DataPacket << (BYTE)pAllGuild->m_AddMemberFlag; DataPacket << (int)pAllGuild->m_nAutoJoinLevel; int nTime = 0; if(m_pGuild) { if(m_pGuild->GetRelationShipInWar(pAllGuild->m_nGid) == 0 && m_pGuild->GetRelationShipForId(pAllGuild->m_nGid) == 2) { m_pGuild->SetRelationShipWithId(pAllGuild->m_nGid,0); pAllGuild->SetRelationShipWithId(m_pGuild->m_nGid,0); } else if(m_pGuild->GetRelationShipInWar(pAllGuild->m_nGid) == 1) { m_pGuild->SetRelationShipWithId(pAllGuild->m_nGid,2); pAllGuild->SetRelationShipWithId(m_pGuild->m_nGid,2); } DataPacket << (BYTE)m_pGuild->GetRelationShipInWar(pAllGuild->m_nGid); //行会宣战关系 } else { DataPacket << (BYTE)0; } DataPacket << (bool)(pAllGuild->CheckIsApply(nActorid)); total++; } } int* pCount = (int*)DataPacket.getPositionPtr(pos); *pCount = total; AP.flush(); } void CGuildSystem::BroadCast(char * pData, SIZE_T size) { if (m_pEntity == NULL) return; unsigned int nGuildId = m_pEntity->GetProperty(PROP_ACTOR_GUILD_ID); if(GetLogicServer()->IsCommonServer()) { CVector actorList; GetGlobalLogicEngine()->GetEntityMgr()->GetOnlineAcotrPtrList(actorList); for (INT_PTR i = 0; i < actorList.count(); i++) { CActor *tmpActor = (CActor *)actorList[i]; if(tmpActor) { if (tmpActor->OnGetIsTestSimulator() || tmpActor->OnGetIsSimulator() ) { continue; } if(nGuildId == tmpActor->GetProperty(PROP_ACTOR_GUILD_ID)) { CActorPacket pack; CDataPacket &data = tmpActor->AllocPacket(pack); data.writeBuf(pData,size); pack.flush(); } } } return; } if (m_pGuild == NULL) { m_pEntity->SendTipmsgFormatWithId(tmNotInGuild, tstUI); return; } m_pGuild->BroadCast(pData,size); } int CGuildSystem::GetGx() { return m_pEntity?m_pEntity->GetProperty(PROP_ACTOR_GUILDEXP):0; } VOID CGuildSystem::SetGx(int nValue) { if (nValue < 0) { nValue = 0; } int gGx = (int)GetGx(); //增加帮派贡献 if(gGxSetProperty(PROP_ACTOR_GUILDEXP,nValue); } } /* 下发行会详细信息 */ VOID CGuildSystem::SendGuildInfoResult() { if (m_pEntity == NULL) return; CActorPacket AP; CDataPacket& DataPacket = m_pEntity->AllocPacket(AP); DataPacket << (BYTE)enGuildSystemID << (BYTE)sGuildInfo; if ( GetGlobalLogicEngine()->GetGuildMgr().IsGuildClose() ) { DataPacket << (CHAR)2; } else { if (!m_pGuild) { DataPacket << (CHAR)0; }else { DataPacket << (CHAR)1; DataPacket<<(unsigned int)(m_pGuild->m_nGid); DataPacket.writeString(m_pGuild->m_sGuildname); std::string sLeaderName = ""; char* pName = m_pGuild->FindGuildMemberName(m_pGuild->m_nLeaderId); if(pName) sLeaderName = pName; DataPacket.writeString(sLeaderName.c_str()); DataPacket.writeString(m_pGuild->GetOutMemo()); DataPacket << (WORD) m_pGuild->GetLevel(); //行会主殿的等级就是行会等级 DataPacket << (int)(m_pGuild->GetMemberCount()); DataPacket <<(int)(m_pGuild->GetMaxMemberCount()); DataPacket << (int)(m_pGuild->GetCoin()); //行会资金 DataPacket << (int)GetTotalGuildGx(); DataPacket << (BYTE)GetGuildPos(); DataPacket << (BYTE)m_pGuild->m_AddMemberFlag; int nAutoJoinLevel = m_pGuild->GetAutoJoinLevel(); DataPacket << (WORD)nAutoJoinLevel; } } AP.flush(); if ( GetGlobalLogicEngine()->GetGuildMgr().IsGuildClose() ) { m_pEntity->SendTipmsgWithId(tmGuildFunctionNotOpen,tstUI); } } /* 下发行会简单信息 */ VOID CGuildSystem::SendGuildInfoSimple() { } int CGuildSystem::GetGuildPos() { if (m_pEntity == NULL) return smGuildCommon; if (m_pEntity->GetSocialMask(smGuildLeader)) { return smGuildLeader; } else if (m_pEntity->GetSocialMask(smGuildAssistLeader)) { return smGuildAssistLeader; }else if (m_pEntity->GetSocialMask(smGuildTangzhu)) { return smGuildTangzhu; }else if (m_pEntity->GetSocialMask(smGuildElite)) { return smGuildElite; } return smGuildCommon; } VOID CGuildSystem::SetGuildPos(INT_PTR nPos) { if (m_pEntity == NULL) return; //nPos设置为true,其他设置为0 for (int i = smGuildCommon; i <= smGuildLeader; i++) { if (i == nPos) { m_pEntity->SetSocialMask(nPos,TRUE); nZzNext = GetZZNext(); } else m_pEntity->SetSocialMask(i,FALSE); } } void CGuildSystem::Save(PACTORDBDATA pData) { if (m_pEntity == NULL ) return; if (m_pGuild) { ActorCommonNode* pNode = m_pGuild->FindMember(m_pEntity->GetProperty(PROP_ENTITY_ID)); if (pNode) { pNode->BasicData.nTime = m_pEntity->GetLoginTime(); //最后的登陆时间 pNode->BasicData.nTotalGx = m_GuildGx; pNode->BasicData.nIcon = m_pEntity->GetProperty(PROP_ENTITY_ICON); pNode->BasicData.nGuildTiTle = m_nTitle; pNode->BasicData.nGuildCityPos = 0; pNode->BasicData.nGuildGX = m_pEntity->GetProperty(PROP_ACTOR_GUILDEXP); //pNode->BasicData.nTodayGx = m_TodayGx; } } unsigned int nLoginTime = m_pEntity->GetLoginTime(); int nModleId = m_pEntity->GetProperty(PROP_ENTITY_MODELID); Save((unsigned int)(m_pGuild?m_pGuild->m_nGid:0),m_pEntity->GetProperty(PROP_ENTITY_ID),m_GuildGx,GetGuildPos() << 16, nWealNext,nZzNext, m_nTitle, GetGuildCityPos(), nLoginTime, nModleId,m_nJoinTime); pData->nGuildID = m_pEntity->GetProperty(PROP_ACTOR_GUILD_ID); pData->nSocialMask = m_pEntity->GetProperty(PROP_ACTOR_SOCIALMASK); boSaveed = FALSE; ((CActor*)m_pEntity)->SetStaticVarValue(szDailyDonateCoin, m_nTodayDonateCoin); ((CActor*)m_pEntity)->SetStaticVarValue(szDailyDonateItem, m_nTodayDonateItem); ((CActor*)m_pEntity)->SetStaticVarValue(szTodayChargeTreeNum, m_nTodayChargeTreeNum); ((CActor*)m_pEntity)->SetStaticVarValue(szTodayPickFruitNum, m_nTodayPickFruitNum); } VOID CGuildSystem::Save(unsigned int SaveGid,unsigned int SaveActorid,int SaveGx,int typetk,UINT SaveZJ,UINT SaveZZ, int nTitle,int nPosType, unsigned int nLoginTine, int nModleId, unsigned int nJoinTime) { CDataPacket& DataPacket =GetLogicServer()->GetDbClient()->allocProtoPacket(jxInterSrvComm::DbServerProto::dcSaveActorGuild); int nServerId = GetLogicServer()->GetServerIndex(); DataPacket << m_pEntity->GetRawServerIndex() << nServerId; DataPacket << (unsigned int)SaveGid;//没加入门派,或者刚给开除了,gid设置0 DataPacket << (unsigned int)SaveActorid ; DataPacket << (int)SaveGx; DataPacket << (int)typetk; DataPacket << (UINT)SaveZJ; DataPacket << (UINT)SaveZZ; DataPacket << (int)nTitle; DataPacket << (int)nLoginTine; //(int)m_pEntity->GetLoginTime(); DataPacket << (int)nPosType; DataPacket << (int)nModleId; //(int)m_pEntity->GetProperty(PROP_ENTITY_MODELID); DataPacket << (int)m_TodayGx; DataPacket << (int)m_HasShxTimes; DataPacket << (int)m_AddShxTimes; DataPacket << (int)m_ExploreTimes; DataPacket << (int)m_ExploreItemId; DataPacket << (int)m_ChallengeTimes; DataPacket << (int)m_AddChallengeTimes; DataPacket << (unsigned int)nJoinTime; //加入行会的时间 GetLogicServer()->GetDbClient()->flushProtoPacket(DataPacket); } void CGuildSystem::LoadActorBuildingData() { CDataPacket& DataPacket =GetLogicServer()->GetDbClient()->allocProtoPacket(jxInterSrvComm::DbServerProto::dcLoadActorBuildingData); int nServerId = GetLogicServer()->GetServerIndex(); DataPacket << m_pEntity->GetRawServerIndex() << nServerId; DataPacket << (int)(m_pEntity->GetProperty(PROP_ENTITY_ID)); GetLogicServer()->GetDbClient()->flushProtoPacket(DataPacket); } VOID CGuildSystem::ClearZJ() { if (!m_pEntity || !m_pGuild) return; //CUserItemContainer::ItemOPParam itemPara; //itemPara.wItemId = GetLogicServer()->GetDataProvider()->GetGuildConfig().nZJItemId; //itemPara.btCount = 255;//设置一个大的数字,不用先看背包有多少这个物品 //itemPara.btStrong = -1; //itemPara.btQuality = -1; //m_pEntity->GetBagSystem().DeleteItem(itemPara,m_pGuild->m_sGuildname,GameLog::clGuildClear); nWealNext = 0;//表示已清除,随时可以领取新的 } BOOL CGuildSystem::TimeOK(UINT nTime) { if (nTime < GetGlobalLogicEngine()->getMiniDateTime()) return TRUE; return FALSE; } UINT CGuildSystem::GetZZNext() { return GetGlobalLogicEngine()->getMiniDateTime(); //+ GetLogicServer()->GetDataProvider()->GetGuildConfig().nLeaderTimeLimit; } /* 提示客户端重新请求一遍 */ void CGuildSystem::NotifyUpdateGuildInfo() { } void CGuildSystem::SendUpLevelInfo() { } int CGuildSystem::GetGuildSkillLevel(int skillId) { if ((!m_pEntity) || (!m_pGuild)) return 0; for (INT_PTR i =0 ; i< m_pGuild->m_GuildSkillList.count();i ++) { if(skillId == m_pGuild->m_GuildSkillList[i].nSkillId) return m_pGuild->m_GuildSkillList[i].nLevel; } return 0; } void CGuildSystem::SetGuildSkillLevel(int skillId,int skillLevel) { if ((!m_pEntity) || (!m_pGuild)) return; for (INT_PTR i =0 ; i< m_pGuild->m_GuildSkillList.count();i ++) { if(skillId == m_pGuild->m_GuildSkillList[i].nSkillId) { m_pGuild->m_GuildSkillList[i].nLevel=skillLevel; break; } } } bool CGuildSystem::CompareGuildSkillLevel(int skillId,int skillLevel) { if ((!m_pEntity) || (!m_pGuild)) return false; for (INT_PTR i =0 ; i< m_pGuild->m_GuildSkillList.count();i ++) { if(skillId == m_pGuild->m_GuildSkillList[i].nSkillId) { if(m_pGuild->m_GuildSkillList[i].nLevel >= skillLevel) return true; else return false; } } return false; } void CGuildSystem::GetDonateReward() { } void CGuildSystem::GuildDonate(BYTE nType) { if ((!m_pEntity) || (!m_pGuild)) return; CGuildProvider& guildCfg = GetLogicServer()->GetDataProvider()->GetGuildConfig(); DonateCfg* pDonateCfg = guildCfg.GetGuildDonateCfg(nType); if(pDonateCfg == NULL) { m_pEntity->SendTipmsgFormatWithId(tmDataError, tstUI); return; } CActor* pActor = (CActor*)m_pEntity; int nValue = m_pEntity->GetStaticCountSystem().GetStaticCount(pDonateCfg->nStaticCountType); if(nValue >= pDonateCfg->nLimitTimes) { m_pEntity->SendTipmsgFormatWithId(tmGuildDonateLimitTimes, tstUI); return; } nType =m_pEntity->GetMoneyTypeByAward(nType); int nCoin= m_pEntity->GetMoneyCount((eMoneyType)nType); if( nCoin < pDonateCfg->nCost) { if(nType == mtBindCoin) m_pEntity->SendTipmsgFormatWithId(tmNoMoreBindCoin, tstUI); else if(nType == mtBindYuanbao) m_pEntity->SendTipmsgFormatWithId(tmNomoreBindYubao, tstUI); return; } char sText[1024]; LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetTipmsgConfig().GetTipmsg(tmGuildEventCoin); sprintf_s(sText, sizeof(sText), sFormat, ( char *)(m_pEntity->GetEntityName()),(int)pDonateCfg->nCost); pActor->ChangeMoney(nType, -pDonateCfg->nCost, GameLog::Log_GuildDonate, 0,sText, true); if(nType == mtBindCoin) { m_pGuild->AddEventRecord( "", enGuildEvent_DonateCoin, pDonateCfg->nCost, 0, 0, ( char *)(m_pEntity->GetEntityName()),NULL ); }else { m_pGuild->AddEventRecord( "", enGuildEvent_DonateYB, pDonateCfg->nCost, 0, 0, ( char *)(m_pEntity->GetEntityName()),NULL ); } pActor->GetAchieveSystem().ActorAchievementComplete(nAchieveGuildDonate, 1, nType); ChangeGuildGx(pDonateCfg->nAddDonate,GameLog::Log_GuildDonate); m_pGuild->ChangeGuildCoin(pDonateCfg->nAddCoin); m_pEntity->GetStaticCountSystem().SetStaticCount(pDonateCfg->nStaticCountType, nValue+1); m_pGuild->m_boUpdateTime = true; // m_pEntity->GetAchieveSystem().ActorAchievementComplete(nAchieveGetDonateValue, pDonateCfg->nAddDonate); // m_pGuild->AddEventRecord(sText,tmGuildEventCoin,(int)pDonateCfg->nAddCoin,0,0,( char *)(m_pEntity->GetEntityName()), ""); m_pGuild->AfterDonateDealGuild(); CActorPacket ap; CDataPacket& dataPack = m_pEntity->AllocPacket(ap); dataPack <<(BYTE)enGuildSystemID << (BYTE)sGuildDonate; ap.flush(); } /* VOID CGuildSystem::AddGuildGx(int nValue) { int nGX = (int)GetGx(); SetGx(nGX+ nValue); if(nValue>0) ((CActor*)m_pEntity)->SendOldTipmsgFormatWithId(tpGetGuildGx,ttTipmsgWindow, nValue); else if(nValue<0) ((CActor*)m_pEntity)->SendOldTipmsgFormatWithId(tpDelGuildGx,ttTipmsgWindow, -1*nValue); } */ void CGuildSystem::ChangeGuildFr(int value) { // if(m_pGuild==NULL) return; // int gFr = m_pGuild->GetFr(); // m_pGuild->SetFr(gFr+value,TRUE,true); // if(value > 0) // ((CActor*)m_pEntity)->SendTipmsgFormatWithId(tmAddGuildFr, tstUI, value); } void CGuildSystem::SendGuildEventRecord(int nPage,int nNum) { } //不支持不同的帮派不同的职务Name char* CGuildSystem::GetGuildPosName(int posType) { switch(posType) { case 0: return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildMember); case 1: return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildTangZhu); case 2: return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildSecHead); case 3: return GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildHead); default: break; } return NULL; } bool CGuildSystem::NaiveStringMatching(char* srcStr,char *destStr) { int n = (int)strlen(srcStr); int m = (int)strlen(destStr); if(n AllocPacket(pack); data << (BYTE)enGuildSystemID << (BYTE)cDelGuild; // int nIndex = GetScoreRank(actorId); // if(bType<0 || bType>1) // bType = 0; data << (BYTE)0; pack.flush(); } void CGuildSystem::AddTotalGuildGx(int value) { if(value > 0) { m_GuildGx += value; } } void CGuildSystem::SendGuildMemberAddOrLieve(CActor* pActor,BYTE bType,unsigned int nActorId,char* nName) { } /* 申请兑换行会仓库 低于指定转数+等级的装备直接兑换,高于的需要审核 */ VOID CGuildSystem::GetItemFromGuildDepot(CDataPacketReader &packet) { // if (m_pEntity == NULL) return; // if (m_pGuild == NULL) return; // CUserItem::ItemSeries series ; // BYTE nOpType=0; // packet >> series >> nOpType; // if( nOpType == 2 ) //丢弃操作 // { // if( GetGuildPos() < smGuildTangzhu ) // { // //官员以上才有权限操作 // m_pEntity->SendOldTipmsgFormatWithId(tpNoRight,ttFlyTip); // return; // } // } // INT_PTR nIdx = m_pGuild->FindItemIndex(series); // if( nIdx < 0 ) // { // m_pEntity->SendOldTipmsgWithId(tpItemNotExist); // return ; // } // int nType = 2; // if(m_pGuild->m_GuildDepotBag[nIdx].nActorId == m_pEntity->GetProperty(PROP_ENTITY_ID)) // nType = 3; // CUserBag& bag= m_pEntity->GetBagSystem(); // GUILDDEPOTITEM &stDepotItem = m_pGuild->m_GuildDepotBag[nIdx]; //仓库物品结构 // CUserItem* pUserItem = stDepotItem.nUserItem; // if( pUserItem == NULL ) // { // return; // } // const CStdItem * pStdItem = GetLogicServer()->GetDataProvider()->GetStdItemProvider().GetStdItem(pUserItem->wItemId); // if( pStdItem ==NULL ) // { // return; // } // //if(pUserItem ==NULL) return; // if( nOpType == 2 ) //丢弃操作 // { // if( stDepotItem.nExchangeActorId > 0 ) // { // m_pEntity->SendOldTipmsgFormatWithId(tpGuildDepotItemCheckingNoClear, ttFlyTip); // return; // } // m_pGuild->m_GuildDepotBag.remove(nIdx); //仓库删除此物品 // m_pGuild->NotifyUpdateDepot(); //通知客户端重新请求一次 // m_pGuild->m_bSaveDepotRecord = true; // char chatMsg[1024]={0}; // LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildDepotDelItem); // sprintf_s(chatMsg, sizeof(chatMsg), sFormat, // (char *)m_pGuild->GetGuildTitleName( GetGuildPos() ), // (char *)( m_pEntity->GetEntityName() ), // CUserBag::GetItemLink( (int)pUserItem->wItemId, pUserItem) ); // m_pGuild->BroadCastMsgInGuildChannel(chatMsg); // return; // } // else // { // if( stDepotItem.nExchangeActorId > 0 ) // { // m_pEntity->SendOldTipmsgFormatWithId(tpGuildDepotItemCheckingNoExchange, ttFlyTip); // return; // } // int nItemCircle = (int)pStdItem->GetUseConditionValue(CStdItem::ItemUseCondition::ucMinCircle); //转数 // int nItemLevel = (int)pStdItem->GetUseConditionValue(CStdItem::ItemUseCondition::ucLevel); //等级 // CGuildProvider& pGuildConfig = GetLogicServer()->GetDataProvider()->GetGuildConfig(); // int nNeedGx = pGuildConfig.GetGuildDepotGetOutNeedGx(nItemCircle, nItemLevel, pStdItem->m_btType); // if( nNeedGx < 0 ) //配置错了 // { // return; // } // if( GetGx() < nNeedGx ) // { // m_pEntity->SendOldTipmsgFormatWithId(tpGuildDepotGetOutGxUnEnough , ttFlyTip, nNeedGx); //行会贡献不足 // return; // } // if( GetGuildPos() <= smGuildTangzhu && nItemCircle >= m_pGuild->m_nExchangeCheckCircleMin ) //成员或官员,并且需要审核 // { // ChangeGuildGx( -1*nNeedGx ); //扣除本人的行会贡献 // //设置兑换玩家的信息 // stDepotItem.nExchangeActorId = m_pEntity->GetId(); // _asncpytA(stDepotItem.szExchangeActorName, m_pEntity->GetEntityName()); // stDepotItem.nExchangeTime = GetGlobalLogicEngine()->getMiniDateTime(); // m_pEntity->SendOldTipmsgWithId(tpGuildDepotItemDoExchange); // m_pGuild->m_bSaveDepotRecord = true; // //向会长,副会长发送审核图标 // CEntityManager* pEntityMgr = GetGlobalLogicEngine()->GetEntityMgr(); // CLinkedNode *pNode; // CLinkedListIterator it(m_pGuild->m_ActorOffLine); // for( pNode = it.first(); pNode; pNode = it.next() ) // { // ActorCommonNode& actor = pNode->m_Data; // CEntity* pEntity = NULL; // if( actor.hActorHandle != 0 ) // { // pEntity = pEntityMgr->GetEntity(actor.hActorHandle); // } // if( pEntity && pEntity->GetType() == enActor) //玩家在线 // { // int nPos = ((CActor*)pEntity)->GetGuildSystem()->GetGuildPos(); // if(nPos == smGuildLeader || nPos == smGuildAssistLeader) // { // CActorPacket ap; // CDataPacket& pack = ((CActor*)pEntity)->AllocPacket(ap); // pack << (BYTE) enGuildSystemID<< (BYTE)sGuildCheckEquipIcon ; // ap.flush(); // } // } // } // } // else //直接兑换 // { // if(! bag.CanAddItem(pUserItem) ) // { // m_pEntity->SendOldTipmsgWithId(tpBagIsFull); //背包已经满 // return; // } // ChangeGuildGx( -1*nNeedGx ); //扣除本人的行会贡献 // m_pGuild->m_GuildDepotBag.remove(nIdx); //必须在bag.AddItem()之前 // if( bag.AddItem(pUserItem,"guilddeport_2_bag",GameLog::clGuildDepotToBag,true) ) // { // //m_pGuild-> m_GuildDepotBag[nIdx].nExitFlag = 1; //被取出了 // m_pGuild->m_bSaveDepotRecord = true; // m_pEntity->SendOldTipmsgFormatWithId(tpGuildDepotGetOutItemDelGx , ttFlyTip, nNeedGx); //行会贡献不足 // char chatMsg[1024]={0}; // LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildDepotGetOutItem); // sprintf_s(chatMsg, sizeof(chatMsg), sFormat, ( char *)(m_pEntity->GetEntityName()), // CUserBag::GetItemLink((int)pUserItem->wItemId, pUserItem), nNeedGx); // m_pGuild->BroadCastMsgInGuildChannel(chatMsg); // } // } // m_pGuild->NotifyUpdateDepot(); //通知客户端重新请求一次 // } } //获取行会仓库物品和转数的数量 VOID CGuildSystem::GetDepotItemCircleAndNum() { } //获取行会仓库物品列表 VOID CGuildSystem::GetDepotItemList(CDataPacketReader &packet) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) return; BYTE nPage = 0; //仓库第N页,从1-N BYTE nJobCond = 0; //按职业搜索,0-无要求,1-战士、2-法师、3-巫师 BYTE nGxCond = 0; //按行会贡献搜索,0-否,1是 BYTE nCircle = 0; //转数 BYTE nNeedCheck= 0; //是否需要审核,0-全部,1-需要审核,2-不需要审核 packet >> nPage >> nJobCond >> nGxCond >> nCircle >> nNeedCheck; if( nJobCond == 0 && nGxCond == 0 && nCircle == 0 && nNeedCheck == 0 ) //无条件查询 { GetDepotItemListNoCond( nPage ); } else { GetDepotItemListCond( nPage, nJobCond, nGxCond, nCircle, nNeedCheck ); } } /* 没有任何条件,一定是普通查看 */ void CGuildSystem::GetDepotItemListNoCond(int nPage) { } /* nNeedCheck:0-全部,1-需要审核,2-不需要审核 */ void CGuildSystem::GetDepotItemListCond( int nPage, int nJobCond, int nGxCond, int nCircle, int nNeedCheck ) { } VOID CGuildSystem::SendGuildDepotRecord(CDataPacketReader &packet) { } //行会竞价排名 VOID CGuildSystem::OnStartBidGuildRank() { } //向玩家发送推荐行会的消息 //注意:需要@addexp触发,不能直接@level VOID CGuildSystem::SendSuggestGuildToActor(int nLevel) { } void CGuildSystem::OnRequestHelp(CDataPacketReader &packet) { } //设置自动加入行会的等级要求 void CGuildSystem::OnSetAddMemberFlag(CDataPacketReader &packet) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) return; if( GetGuildPos() < smGuildTangzhu ) //官员、副帮主、帮主都可以设置 { m_pEntity->SendOldTipmsgFormatWithId(tpNoRight,ttFlyTip); return; } BYTE bFlag = 0; WORD nLevel = 0; packet >> bFlag >> nLevel; //if(m_pGuild->m_AddMemberFlag == bFlag) return; m_pGuild->m_AddMemberFlag = (int)bFlag; m_pGuild->SetAutoJoinLevel(nLevel); //GetGlobalLogicEngine()->GetMiscMgr().SetSystemStaticVarValue(szGuildAutoJoinLevel, nLevel); SendMemberFlag(); } void CGuildSystem::SendMemberFlag() { if (m_pEntity == NULL) return; if (m_pGuild == NULL) return; CActorPacket pack; CDataPacket &data=m_pEntity->AllocPacket(pack); //int nAutoJoinLevel = GetGlobalLogicEngine()->GetMiscMgr().GetSystemStaticVarValue(szGuildAutoJoinLevel); int nAutoJoinLevel = m_pGuild->GetAutoJoinLevel(); data << (BYTE)enGuildSystemID << (BYTE)sSetAddMemberFlag; data << (BYTE)m_pGuild->m_AddMemberFlag; data << (WORD)nAutoJoinLevel; pack.flush(); } void CGuildSystem::OnEditGuildTitle(CDataPacketReader &packet) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) return; if (GetGuildPos() < smGuildAssistLeader) { //副帮主以上才可以 m_pEntity->SendOldTipmsgFormatWithId(tpNoRight,ttFlyTip); return; } CMiniDateTime nTime; nTime.tv = GetGlobalLogicEngine()->getMiniDateTime(); CMiniDateTime LastTime; LastTime.tv = m_pGuild->m_TileUpdateTime; if(nTime.isSameDay(LastTime)) { m_pEntity->SendOldTipmsgFormatWithId(tpSetTitleOneTimes,ttFlyTip); return; } BYTE nCount = 0; packet >> nCount; for(int i=0;i<(int)nCount;i++) { BYTE nIndex = 0; packet >> nIndex; char strName[32]; packet.readString(strName,ArrayCount(strName)); strName[sizeof(strName)-1] = 0; GetGlobalLogicEngine()->GetChatMgr().Filter(strName); if(nIndex > 0 && nIndex < 8) { _asncpytA(m_pGuild->m_GuildTitles[nIndex-1].nTitleName,strName); } } if(nCount > 0) { m_pGuild->m_TileUpdateTime = GetGlobalLogicEngine()->getMiniDateTime(); m_pGuild->m_boUpdateTime = true; m_pGuild->SendTitleToAll(); //添加帮派事件 //char sText[1024]; //LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpEditGuildTitle); //sprintf_s(sText, sizeof(sText), sFormat, ( char *)((CActor*)m_pEntity->GetEntityName())); //m_pGuild->AddEventRecord(sText,tpEditGuildTitle,0,0,0,( char *)((CActor*)m_pEntity->GetEntityName()),NULL); } } /* 获取帮派成员职位Name,3-首领、2-副首领、1-官员、0-普通成员 代码简单修改后,可以支持 不同帮派不同职位Name m_nTitle:当职位编辑的情况下使用的,目前不使用,采用固定配置 */ char* CGuildSystem::GetGuildTitleName() { if(m_pGuild == NULL) return NULL; //if(m_nTitle <= 0 || m_nTitle > 4 /*7*/) return NULL; //return m_pGuild->m_GuildTitles[m_nTitle-1].nTitleName; int nGuildPos = GetGuildPos(); /* if( nGuildPos < 0 || nGuildPos > 3 ) return NULL; --如果成员title可修改,则才是此段代码 return m_pGuild->m_GuildTitles[3-nGuildPos].nTitleName; */ switch (nGuildPos) //成员title不可修改,则采用此段代码 { case smGuildLeader: return GetLogicServer()->GetDataProvider()->GetTipmsgConfig().GetTipmsg(tmGuildHead); break; case smGuildAssistLeader: return GetLogicServer()->GetDataProvider()->GetTipmsgConfig().GetTipmsg(tmGuildAssistLeader); break; case smGuildTangzhu: return GetLogicServer()->GetDataProvider()->GetTipmsgConfig().GetTipmsg(tmGuildTangZhu); break; case smGuildElite: return GetLogicServer()->GetDataProvider()->GetTipmsgConfig().GetTipmsg(tmGuildElite); break; case smGuildCommon: return GetLogicServer()->GetDataProvider()->GetTipmsgConfig().GetTipmsg(tmGuildMember); break; default: break; } return NULL; } void CGuildSystem::SendGuildTitleList() { } /* 1-帮主 2-副帮主 3- */ void CGuildSystem::OnChangeActorTitle(CDataPacketReader &packet) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) return; if (GetGuildPos() < smGuildAssistLeader) { //副帮主以上才可以 m_pEntity->SendOldTipmsgFormatWithId(tpNoRight,ttFlyTip); return; } unsigned int nActorId = 0; packet >> nActorId; BYTE nIndex = 0; packet >> nIndex; bool bSetFlag = false; //查找这个人是否加入帮派 ActorCommonNode* pNode = m_pGuild->FindMember(nActorId); if (!pNode) { OutputMsg(rmTip,_T("can not find guild member,actorid=%u"),nActorId); return; } CEntity* pEntity = GetGlobalLogicEngine()->GetEntityMgr()->GetEntityPtrByActorID(nActorId); if (pEntity && pEntity->GetType() == enActor) { if(((CActor*)pEntity)->GetGuildSystem()->GetGuildPos() >= smGuildAssistLeader) { return; } if(((CActor*)pEntity)->GetGuildSystem()->m_nTitle != nIndex) { ((CActor*)pEntity)->GetGuildSystem()->m_nTitle = (int)nIndex; bSetFlag = true; } } else { if(pNode->BasicData.nType >= smGuildAssistLeader) { return; } if(pNode->BasicData.nGuildTiTle != nIndex) { pNode->BasicData.nGuildTiTle = (int)nIndex; bSetFlag = true; } } if(bSetFlag) { m_pGuild->SendChangeTitleToAll(nActorId,nIndex); m_pEntity->SendTipmsgFormatWithId(tmOperSucc,ttFlyTip); ((CActor*)m_pEntity)->ResetShowName(); if(nIndex > 0) { //添加帮派事件 //char sText[1024]; //LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpSetActorTitle); //sprintf_s(sText, sizeof(sText), sFormat, ( char *)((CActor*)m_pEntity->GetEntityName()),( char *)pNode->sActorName,m_pGuild->m_GuildTitles[nIndex-1].nTitleName); //m_pGuild->AddEventRecord(sText,tpSetActorTitle,nIndex,0,0,( char *)((CActor*)m_pEntity->GetEntityName()),( char *)pNode->sActorName); } } } void CGuildSystem::SendSignUpGuildList() { // if (!m_pEntity || m_pEntity->GetType() != enActor) // { // return ; // } // CGuildComponent& guildMgr = GetGlobalLogicEngine()->GetGuildMgr(); // CGuildProvider& guildProvider = GetLogicServer()->GetDataProvider()->GetGuildConfig(); // CActorPacket pack; // CDataPacket &DataPacket=m_pEntity->AllocPacket(pack); // DataPacket << (BYTE)enGuildSystemID << (BYTE)sGetSignUpGuildList; // size_t pos = DataPacket.getPosition(); // WORD nCount = 0; //报名的数量 // DataPacket << nCount; // CLinkedNode *pNode; // CLinkedListIterator it(*guildMgr.m_pRank); // for (pNode = it.first(); pNode; pNode = it.next()) // { // CGuild* pAllGuild = pNode->m_Data; // if (pAllGuild && pAllGuild->m_boStatus) // { // if ((guildMgr.m_boTodaySign && pAllGuild->m_SignUpFlag)||//今天已经报名了,19:00之后-攻城结束前 // !guildMgr.m_boTodaySign && pAllGuild->m_MainHallLev >= guildProvider.nAutoSignMainHallLevel)//没到报名时间或者攻城结束 // { // nCount++; // DataPacket.writeString(pAllGuild->m_sGuildname); // } // } // } // WORD* pCount = (WORD*)DataPacket.getPositionPtr(pos); // *pCount = nCount; // pack.flush(); } void CGuildSystem::GMSetGuildCityPostion(const char* sGuildName, BYTE nType, BYTE nState, const char* sName) { // CGuildComponent& guildMgr = GetGlobalLogicEngine()->GetGuildMgr(); // CGuild* pGuild = GetGlobalLogicEngine()->GetGuildMgr().FindGuildByName(sGuildName); // if (pGuild) // { // if(pGuild->GetGuildId() != guildMgr.m_GuildId) // { // OutputMsg(rmTip,_T("Not Sbk Guild,guildid =%u, "),pGuild->m_nGid); // return; // } // if(guildMgr.IsGuildSiegeStart()) //开始沙巴克战 // { // m_pEntity->SendOldTipmsgWithId(tpCityPosErrorInSiege, ttFlyTip); // return; // } // if(nType <= stRealMaster || nType >= stMaxGuildCityPos) return ; // //任命 // if(nState > 0) // { // ActorCommonNode* pNode = pGuild->FindMemberByName(sName); // if (pNode == NULL) //行会没有这个成员 // { // m_pEntity->SendOldTipmsgFormatWithId(tpSetCityPosNotGuildMem,ttFlyTip); // return; // } // if(pNode->BasicData.nType == smGuildLeader) return; // if(guildMgr.getCityPostionById(pNode->BasicData.nActorId) > stNoCityPos) // { // m_pEntity->SendOldTipmsgWithId(tpSbkPosErrorChange, ttFlyTip); // return; // } // guildMgr.SetCityPos(nType,pNode->BasicData.nActorId); // m_pEntity->SendOldTipmsgFormatWithId(tpSetSbkPostionSuc,ttFlyTip); // int nTipsId = tpSetSbkPosSecMonster; // switch(nType) // { // case stEastProtector: // nTipsId = tpSetSbkMasterWife; // break; // case stSouthProtector: // nTipsId = tpSetSbkPosSecMonster; // break; // case stWestProtector: // nTipsId = tpSetSbkPosTips2; // break; // case stNorthProtector: // nTipsId = tpSetSbkPosTips3; // break; // } // CEntityManager* em = GetGlobalLogicEngine()->GetEntityMgr(); // em->BroadTipmsgWithParams(nTipsId, ttScreenCenter + ttChatWindow, ( char *)sName); // } // else // { // guildMgr.SetCityPos(nType,0); // } // SendGuildCityPosInfo(); // } } void CGuildSystem::SetGuildCityPostion(BYTE nType, BYTE nState, const char* sName) { if(m_pEntity == NULL) return; if(m_pGuild == NULL) return; CGuildComponent& guildMgr = GetGlobalLogicEngine()->GetGuildMgr(); CEntityManager* em = GetGlobalLogicEngine()->GetEntityMgr(); if(m_pGuild->m_nGid != guildMgr.m_GuildId) { OutputMsg(rmTip,_T("Not Sbk Guild,guildid =%u, "),m_pGuild->m_nGid); return; } if(guildMgr.IsGuildSiegeStart()) //开始沙巴克战 { m_pEntity->SendOldTipmsgWithId(tpCityPosErrorInSiege, ttFlyTip); return; } if(GetGuildPos() == smGuildLeader) { if(nType <= stRealMaster || nType >= stMaxGuildCityPos) return ; //任命 if(nState > 0) { ActorCommonNode* pNode = NULL; pNode = m_pGuild->FindMemberByName(sName); if (pNode == NULL) //行会没有这个成员 { m_pEntity->SendOldTipmsgFormatWithId(tpSetCityPosNotGuildMem,ttFlyTip); return; } if(pNode->BasicData.nType == smGuildLeader) { //无法设置君主作为护法 m_pEntity->SendOldTipmsgFormatWithId(tpSetCityPosGuildLeaderCantSet,ttFlyTip); return; } if(guildMgr.getCityPostionById(pNode->BasicData.nActorId) > stNoCityPos) { m_pEntity->SendOldTipmsgWithId(tpSbkPosErrorChange, ttFlyTip); return; } guildMgr.SetCityPos(nType,pNode->BasicData.nActorId); CActor *pActor = GetGlobalLogicEngine()->GetEntityMgr()->GetEntityPtrByActorID(pNode->BasicData.nActorId); if(pActor != NULL) { CNpc* pNpc = GetGlobalLogicEngine()->GetGlobalNpc(); if (pNpc != NULL) { CScriptValueList paramList, retParamList; paramList << pActor; pNpc->GetScript().Call("GetCityPosWelfareInfo",paramList,retParamList); } } m_pEntity->SendOldTipmsgFormatWithId(tpSetSbkPostionSuc,ttFlyTip); int nTipsId = tpSetSbkPosSecMonster; switch(nType) { case stEastProtector: nTipsId = tpSetSbkMasterWife; break; case stSouthProtector: nTipsId = tpSetSbkPosSecMonster; break; case stWestProtector: nTipsId = tpSetSbkPosTips2; break; case stNorthProtector: nTipsId = tpSetSbkPosTips3; break; } em->BroadTipmsgWithParams(nTipsId, ttScreenCenter + ttChatWindow, ( char *)sName); } else { guildMgr.SetCityPos(nType,0); } SendGuildCityPosInfo(); } else { m_pEntity->SendOldTipmsgFormatWithId(tpGuildSetPosNotLeader,ttFlyTip); } } int CGuildSystem::GetGuildCityPos() { if(m_pEntity == NULL) return 0; if(m_pGuild == NULL) return 0; CGuildComponent& guildMgr = GetGlobalLogicEngine()->GetGuildMgr(); if(m_pGuild->m_nGid != guildMgr.GetCityOwnGuildId()) return stNoCityPos; return guildMgr.getCityPostionById(m_pEntity->GetId()); } /* 行会成员被击杀 pKiller:击杀者 */ void CGuildSystem::OnBeKilledByOtherTips(CActor* pKiller,char* szSceneName) { if(m_pEntity == NULL) return; if(pKiller == NULL || szSceneName == NULL) return; CEntityManager* em = GetGlobalLogicEngine()->GetEntityMgr(); if(em == NULL) return; if(m_pGuild == NULL) { return; } // static int sMinLv = GetLogicServer()->GetDataProvider()->GetGlobalConfig().nGuilderKilledMinLevel; // if( m_pEntity->GetProperty(PROP_CREATURE_LEVEL) <= sMinLv ) // { // return; // } if(m_pGuild->m_nGid > 0 && m_pGuild->m_nGid == GetGlobalLogicEngine()->GetGuildMgr().GetCityOwnGuildId() && GetGuildCityPos() == stRealMaster) { int x,y; m_pEntity->GetPosition(x,y); // em->BroadTipmsgWithParams(tmSbkGuildLeaderBeKilledtips, tstFigthing, m_pEntity->GetEntityName(), // szSceneName, x,y,pKiller->GetEntityName()); return; } // int nGuildPos = GetGuildPos(); // if( nGuildPos == smGuildLeader || nGuildPos == smGuildAssistLeader || nGuildPos == smGuildTangzhu ) // { // LPCTSTR gPosName = m_pGuild->GetGuildTitleName(nGuildPos); // em->BroadTipmsgWithParams(tmGuildBeKillTips, tstFigthing, m_pGuild->m_sGuildname, gPosName, // m_pEntity->GetEntityName(), szSceneName, pKiller->GetEntityName()); // } // else if(GetGuildPos() == smGuildAssistLeader) // { // em->BroadTipmsgWithParams(tmGuildSecLeaderBeKilledTips,tstFigthing,m_pGuild->m_sGuildname,m_pEntity->GetEntityName(),szSceneName,pKiller->GetEntityName()); // }else // { // // } } void CGuildSystem::OnChangeNameGuildOp() { if(m_pEntity == NULL) return; if(m_pGuild == NULL) return; unsigned int nActorId = ((CActor*)m_pEntity)->GetProperty(PROP_ENTITY_ID); ActorCommonNode* pNode = m_pGuild->FindMember(nActorId); if(pNode) { _asncpytA(pNode->sActorName,m_pEntity->GetEntityName()); } } void CGuildSystem::ChangeGuildGx(int nGx, int nLogId) { if(!m_pEntity) return; if(!m_pGuild) return; if (nGx == 0 ) { return; } int mGx = m_pEntity->GetProperty(PROP_ACTOR_GUILDEXP); int nOldValue = mGx; mGx += nGx; if(mGx < 0) mGx = 0; if(mGx > MAXGUILDGXEXP) { mGx = MAXGUILDGXEXP; } m_pEntity->GiveAward(qaGuildDonate, 0, nGx,0,0,0,0,nLogId); // m_pEntity->SetProperty(PROP_ACTOR_GUILDEXP,mGx); int nNewValue = mGx; if(nGx > 0) { m_GuildGx += nGx; if(m_GuildGx < 0) m_GuildGx = 0; } ActorCommonNode* pNode = m_pGuild->FindMember(m_pEntity->GetId()); if (pNode) { pNode->BasicData.nGuildGX = m_pEntity->GetProperty(PROP_ACTOR_GUILDEXP); pNode->BasicData.nTotalGx = m_GuildGx; m_pGuild->AddToGuildGxList(pNode->BasicData.nActorId,(int)pNode->BasicData.nGuildGX); } if(nGx > 0) { m_pEntity->SendOldTipmsgFormatWithId(tpGetGuildGxTips, ttTipmsgWindow,nGx); } else if(nGx < 0) { m_pEntity->SendOldTipmsgFormatWithId(tpDelteGuildGxTips,ttTipmsgWindow,-nGx); } //记录日志 if(GetLogicServer()->GetLocalClient()) { } } void CGuildSystem::ChangeTodayGx(int nValue) { if(!m_pEntity) return; if(!m_pGuild) return; if(nValue > 0) { if(nValue > MAXGUILDGXEXP) { nValue = MAXGUILDGXEXP; } m_TodayGx += nValue; if(m_TodayGx > MAXGUILDGXEXP) { m_TodayGx = MAXGUILDGXEXP; } SendTodayGetGuildgx(); } } void CGuildSystem::SendGxRankinglist() { } /* 如果只有行会主殿一个建筑,则不使用,行会等级(主殿等级)在行会详细信息(10,1)的协议返回 */ void CGuildSystem::SendGuildbuildingInfo() { } void CGuildSystem::SendTodayGetGuildgx() { // if(!m_pEntity) return; // if(!m_pGuild) return; // CActorPacket pack; // CDataPacket &DataPacket=m_pEntity->AllocPacket(pack); // DataPacket << (BYTE)enGuildSystemID << (BYTE)sSendTodayBuildingGx; // DataPacket << (int)m_TodayGx; // pack.flush(); } //下发行会捐献数据 void CGuildSystem::SendGuildDonateData() { } void CGuildSystem::SendGuildbuildCdTime() { } void CGuildSystem::OnRevActorBuildData(CDataPacketReader &reader) { if(!m_pEntity) return; reader >> m_TodayGx; reader >> m_HasShxTimes; reader >> m_AddShxTimes; reader >> m_ExploreTimes; reader >> m_ExploreItemId; reader >> m_ChallengeTimes; reader >> m_AddChallengeTimes; if(m_TodayGx > 0) { SendTodayGetGuildgx(); } } void CGuildSystem::OnNewDayArriveOP(bool bState) { if(!m_pEntity) return; m_TodayGx = 0; m_HasShxTimes = 0; m_AddShxTimes = 0; m_ExploreTimes = 0; m_ChallengeTimes = 0; m_AddChallengeTimes = 0; m_nTodayDonateCoin = 0; } void CGuildSystem::SendCallTimeRemain() { } unsigned int CGuildSystem::GetGuildId() { CGuild* pGuild = ((CActor*)m_pEntity)->GetGuildSystem()->GetGuildPtr(); if (pGuild) { return pGuild->m_nGid; } return 0; } /* 通知客户端,某些操作成功 */ void CGuildSystem::SendGuildOpOk(BYTE nType) { // if ( !m_pEntity ) // return; // CActorPacket AP; // CDataPacket& DataPacket = m_pEntity->AllocPacket(AP); // DataPacket << (BYTE)enGuildSystemID << (BYTE)sGuildOpOk; // DataPacket << (BYTE)nType; // AP.flush(); } void CGuildSystem::TriggerEvent(INT_PTR nSubEvent,INT_PTR nParam1,INT_PTR nParam2,INT_PTR nParam3,INT_PTR nParam4) { CScriptValueList paramList; //((CActor*)m_pEntity)->InitEventScriptVaueList(paramList,aeGuild); paramList << (int)nSubEvent; if(nParam1 >=0) { paramList << (int)nParam1; if(nParam2 >=0) { paramList << (int)nParam2; if(nParam3 >=0) { paramList << (int)nParam3; if(nParam4 >=0) { paramList << (int)nParam4; } } } } ((CActor*)m_pEntity)->OnEvent(aeGuild,paramList,paramList); } void CGuildSystem::PutInUpgradeGuildItem(int nCount1, int nCount2, int nCount3) { if ((!m_pEntity) || (!m_pGuild)) return; TriggerEvent(gPutInUpgradeGuildItem, nCount1, nCount2, nCount3); } void CGuildSystem::SendGuildUpgradeItem() { } /*行会成员弹劾上级成员 */ void CGuildSystem::ImpeachGuildMember(unsigned int nObjActorId) { if (m_pEntity == NULL) return; if (m_pGuild == NULL) { m_pEntity->SendTipmsgFormatWithId(tmNotInGuild, tstUI); return; } if (GetGlobalLogicEngine()->GetGuildMgr().IsGuildSiegeStart()) { m_pEntity->SendTipmsgFormatWithId(tmInSbkWar, tstUI); return; } CGuildComponent& guildMgr = GetGlobalLogicEngine()->GetGuildMgr(); CActor *pActor = (CActor *)m_pEntity; if( nObjActorId == pActor->GetId() ) //不能弹劾自己 { pActor->SendOldTipmsgFormatWithId(tmGuildImpeachSelf,tstUI); return; } int nMyHisPos = GetGuildPos(); //本人原职位 ActorCommonNode* pMyNode = m_pGuild->FindMember(pActor->GetId()); if (!pMyNode) { OutputMsg(rmTip,_T("I am not the guild member")); return; } //查找这个人是否加入帮派 ActorCommonNode* pObjNode = m_pGuild->FindMember(nObjActorId); if (!pObjNode) { OutputMsg(rmTip,_T("can not find guild member,actorid=%d"),nObjActorId); return; } int nObjPos = 0; //对方的行会职位 CEntity* pObjEntity = GetGlobalLogicEngine()->GetEntityMgr()->GetEntity(pObjNode->hActorHandle); if( pObjEntity ) //对方在线,不能弹劾 { pActor->SendTipmsgFormatWithId(tmGuildImpeachObjOnline, tstUI); return; } else { //不在线 nObjPos = pObjNode->BasicData.nType; //对方职位 } CGuildProvider& pConfig = GetLogicServer()->GetDataProvider()->GetGuildConfig(); int nNow = GetGlobalLogicEngine()->getMiniDateTime(); if( nNow < pObjNode->BasicData.nTime + pConfig.nProtectDay*86400) { m_pEntity->SendTipmsgFormatWithId(tmGuildInProtectDay,tstUI, pConfig.nProtectDay); return; } if( nObjPos != smGuildLeader ) // { m_pEntity->SendTipmsgFormatWithId(tmImpeachOfficeError,tstUI); return; } if(nMyHisPos < smGuildTangzhu) { m_pEntity->SendTipmsgFormatWithId(tmNoRight,tstUI); return; } int yb = m_pEntity->GetProperty(PROP_ACTOR_YUANBAO); if( yb < pConfig.nImpeachcost) { m_pEntity->SendTipmsgFormatWithId(tmYbLimitNoImpeach, tstUI); return; } int objsbkPos = guildMgr.getCityPostionById(pObjNode->BasicData.nActorId);//获取对方sbk职位 int mysbkPos = guildMgr.getCityPostionById(pMyNode->BasicData.nActorId);//获取对方sbk职位 guildMgr.SetCityPos(mysbkPos, 0); guildMgr.SetCityPos(objsbkPos, pMyNode->BasicData.nActorId); pMyNode->BasicData.nType = pObjNode->BasicData.nType; //获取对方职位 pObjNode->BasicData.nType = smGuildCommon; //对方变成普通成员 // if( nObjPos == smGuildLeader ) //本人节点成为帮主节点 // { // guildMgr.OnGuildLeaderChange(m_pGuild, nObjActorId, m_pEntity->GetId(),glcImpeachLeader); // } pMyNode->BasicData.nZzNext = GetZZNext(); pActor->GetGuildSystem()->SetGuildPos(nObjPos); pActor->GetGuildSystem()->m_nTitle = pObjNode->BasicData.nGuildTiTle; //封号序号(不使用了) pActor->ResetShowName(); if( nObjPos == smGuildLeader ) //本人节点成为帮主节点 { guildMgr.OnGuildLeaderChange(m_pGuild, nObjActorId, m_pEntity->GetId(),glcImpeachLeader); } if (nMyHisPos == smGuildAssistLeader) //副帮主 { m_pGuild->m_nSecLeaderCount--; } else if (nMyHisPos == smGuildTangzhu) //官员 { m_pGuild->m_GuildTkCount--; } char sText[1024]; LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetTipmsgConfig().GetTipmsg(tmGuildEventCoin); sprintf_s(sText, sizeof(sText), sFormat, ( char *)(m_pEntity->GetEntityName()),(int)pConfig.nImpeachcost); pActor->ChangeMoney(mtYuanbao, -pConfig.nImpeachcost, GameLog::Log_GuildImpeach, 0,sText,true); //添加帮派事件 //char sText[1024]={0}; //LPCTSTR sFormat; //sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildImpeachEvent); LPCTSTR strPosName = m_pGuild->GetGuildTitleName(nObjPos); //GetGuildPosName(nObjHisPos); //sprintf_s(sText, sizeof(sText), sFormat, (char *)(pMyNode->sActorName), (char *)(pObjNode->sActorName), strPosName); m_pGuild->AddEventRecord( "", enGuildEvent_Impeach, nObjPos, 0, 0, (char *)pObjNode->sActorName, NULL); //保存到数据库 Save(m_pGuild->m_nGid,pObjNode->BasicData.nActorId, pObjNode->BasicData.nTotalGx, pObjNode->BasicData.nType << 16, pObjNode->BasicData.nZjNext, pObjNode->BasicData.nZzNext, pObjNode->BasicData.nGuildTiTle, pObjNode->BasicData.nGuildCityPos, pObjNode->BasicData.nTime, pObjNode->BasicData.nModelId, pObjNode->BasicData.nJoinTime); //保存到数据库 Save(m_pGuild->m_nGid,pMyNode->BasicData.nActorId, pMyNode->BasicData.nTotalGx, pMyNode->BasicData.nType << 16, pMyNode->BasicData.nZjNext, pMyNode->BasicData.nZzNext, pMyNode->BasicData.nGuildTiTle, pMyNode->BasicData.nGuildCityPos, pMyNode->BasicData.nTime, pMyNode->BasicData.nModelId, pMyNode->BasicData.nJoinTime); // char chatMsg[128]={0}; // LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildPosChange); // sprintf_s(chatMsg, sizeof(chatMsg), sFormat, ( char *)(pMyNode->sActorName), strPosName); //((CActor *)m_pEntity)->GetChatSystem()->SendChat(ciChannelGuild, chatMsg); //m_pGuild->BroadCastMsgInGuildChannel(chatMsg); SendMemberList(); //刷新列表 //通知其他成员有弹劾发生了 m_pGuild->NotifyImpeachMember(strPosName, pObjNode->sActorName, pMyNode->sActorName); } int CGuildSystem::GetDailyDonateCoinLimit() { if( m_pEntity == NULL ) return 0; if( m_pGuild == NULL ) return 0; CGuildProvider& pConfig = GetLogicServer()->GetDataProvider()->GetGuildConfig(); int nGuildLevel = m_pGuild->GetLevel(); if( nGuildLevel > 0 && nGuildLevel <= pConfig.m_DailyDonateLimitList.count() ) //1到N { return pConfig.m_DailyDonateLimitList[nGuildLevel-1].m_nCoinLimit; } return 0; } int CGuildSystem::GetDailyDonateItemLimit() { if( m_pEntity == NULL ) return 0; if( m_pGuild == NULL ) return 0; CGuildProvider& pConfig = GetLogicServer()->GetDataProvider()->GetGuildConfig(); int nGuildLevel = m_pGuild->GetLevel(); if( nGuildLevel > 0 && nGuildLevel <= pConfig.m_DailyDonateLimitList.count() ) //1到N { return pConfig.m_DailyDonateLimitList[nGuildLevel-1].m_nItemLimit; } return 0; } //行会神树充能 void CGuildSystem::ChargeGuildTree() { if ((!m_pEntity) || (!m_pGuild)) return; TriggerEvent(gChargeGuildTree); } //摘取行会神树果实 void CGuildSystem::PickGuildFruit() { if ((!m_pEntity) || (!m_pGuild)) return; TriggerEvent(gPickGuildFruit); } //下发行会神树数据 void CGuildSystem::SendGuildTreeData() { // if(!m_pEntity) return; // if(!m_pGuild) return; // CGuildProvider& pConfig = GetLogicServer()->GetDataProvider()->GetGuildConfig(); // int nChargeNumLast = pConfig.m_GuildTree.m_nDailyChargeLimit - m_nTodayChargeTreeNum; // if( nChargeNumLast < 0 ) // { // nChargeNumLast = 0; // } // CActorPacket pack; // CDataPacket &DataPacket=m_pEntity->AllocPacket(pack); // DataPacket << (BYTE)enGuildSystemID << (BYTE)sSendGuildTreeData; // DataPacket << (short)m_pGuild->m_nGuildTreeLevel; // DataPacket << (int)m_pGuild->m_nGuildTreeDegree; // DataPacket << (short)nChargeNumLast; // pack.flush(); } //下发行会神树果实数据 void CGuildSystem::SendGuildFruitData() { } void CGuildSystem::SendGuildTreeBackCoin() { } //下发行会神树果实被采摘的数据 void CGuildSystem::SendGuildFruitPickData() { // } void CGuildSystem::OnGuildTask(int nTaskType, int nTaskObjId, int nAddTaskSche, int nParam) { if(!m_pEntity) return; if(!m_pGuild) return; m_pGuild->OnGuildTask(nTaskType, nTaskObjId, nAddTaskSche, nParam); SendGuildTaskInfo(); } //下发行会任务信息 void CGuildSystem::SendGuildTaskInfo() { } //领取行会任务 void CGuildSystem::GetGuildTaskAward() { if ((!m_pEntity) || (!m_pGuild)) return; TriggerEvent(gGetGuildTaskAward); } //领取行会福利 void CGuildSystem::GetGuildBenefit() { if ((!m_pEntity) || (!m_pGuild)) return; TriggerEvent(gGetGuildBenefit); } void CGuildSystem::SendGuildTaskBenefitData() { if ((!m_pEntity) || (!m_pGuild)) return; TriggerEvent(gSendGuildTaskBenefitData); } /*下发攻城战指令 */ void CGuildSystem::SendGuildSiegeCmdData( ) { if( !m_pEntity || (!m_pGuild) ) return; if( m_pGuild->m_SignUpFlag != 1 ) //行会没有报名参加攻城战 { return; } CActor* pActor = (CActor*)m_pEntity; //如果行会战正在进行中,则通知 if( GetGlobalLogicEngine()->GetGuildMgr().IsGuildSiegeStart() ) { m_pGuild->SendGuildSiegeCmdPanel( pActor, 1); //打开面板 m_pGuild->SendGuildSiegeCommand( pActor ); //发送命令 } } void CGuildSystem::SetExchangeNeedCheckCirclrMin(int nCircleMin) { // if( !m_pEntity || (!m_pGuild) ) // { // return; // } // if( GetGuildPos() < smGuildAssistLeader ) //只有会长、副会长才有权限设置 // { // //官员以上才有权限操作 // m_pEntity->SendOldTipmsgFormatWithId(tpNoRight,ttFlyTip); // return; // } // CGuildProvider& pGuildConfig = GetLogicServer()->GetDataProvider()->GetGuildConfig(); // int nCheckCircleMin = pGuildConfig.m_GuildDepot.nExchangeNeedCheckCircleMin; // if( nCircleMin < nCheckCircleMin ) // { // m_pEntity->SendOldTipmsgFormatWithId( tpGuildDepotItemExchangeCircleLimit, ttFlyTip, nCheckCircleMin ); // return; // } // m_pGuild->m_nExchangeCheckCircleMin = nCircleMin; // m_pGuild->m_boUpdateTime = true; // SendGuildInfoSimple(); // char chatMsg[128]={0}; // LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildDepotItemExchangeCircleSet); // sprintf_s(chatMsg, sizeof(chatMsg), sFormat, ((CActor*)m_pEntity)->GetEntityName(), nCircleMin); // m_pGuild->BroadCastMsgInGuildChannel(chatMsg); // m_pGuild->NotifyGuildSimpleInfo(); //推送其它客户端 } void CGuildSystem::OneKeyClearDepotItem( int nCircle ) { if( !m_pEntity || (!m_pGuild) ) { return; } if( GetGuildPos() < smGuildTangzhu ) //只有官员才有权限设置 { //官员以上才有权限操作 m_pEntity->SendOldTipmsgFormatWithId(tpNoRight,ttFlyTip); return; } int nDelItemNum = 0; //被删除的装备 const CStdItemProvider& itemProvider = GetLogicServer()->GetDataProvider()->GetStdItemProvider(); INT_PTR nCount = m_pGuild->m_GuildDepotBag.count(); for( INT_PTR i=nCount-1; i>=0; i-- ) //删除物品,从链表从尾到头删除 { GUILDDEPOTITEM& nItem = m_pGuild->m_GuildDepotBag[i]; CUserItem *pUserItem = nItem.nUserItem; if( nItem.nExchangeActorId == 0 && pUserItem ) //非正在审核中的装备 { const CStdItem *pStdItem = itemProvider.GetStdItem(pUserItem->wItemId); if( pStdItem ) { int nItemCircle = (int)pStdItem->GetUseConditionValue(CStdItem::ItemUseCondition::ucMinCircle); //转数 if( nCircle == nItemCircle ) { m_pGuild->m_GuildDepotBag.remove(i); //仓库删掉物品 nDelItemNum ++; } } } } m_pGuild->NotifyUpdateDepot(); //通知客户端重新请求数据 m_pGuild->m_bSaveDepotRecord = true; if( nDelItemNum > 0 ) { m_pEntity->SendOldTipmsgFormatWithId(tpRemoveGuildDepotItem, ttFlyTip, nDelItemNum, nCircle); } } void CGuildSystem::SendJoinGuildApply() { if (m_pEntity == NULL) return; if (m_pGuild == NULL) return; CActorPacket AP; CDataPacket& DataPacket = m_pEntity->AllocPacket(AP); DataPacket << (BYTE)enGuildSystemID << (BYTE)sJoinApplyMsgList; size_t pos = DataPacket.getPosition(); DataPacket << (int)0;//未必是真实的数量 int nResult = 0; int nSize = m_pGuild->m_ApplyList.size(); if(nSize > 0) { std::map::iterator it = m_pGuild->m_ApplyList.begin(); for(; it != m_pGuild->m_ApplyList.end(); it++) { ApplyList* pJoinApply = &(it->second); DataPacket << (unsigned int)pJoinApply->nActorId; DataPacket.writeString(pJoinApply->szName); DataPacket << (int)pJoinApply->nLevel; DataPacket << (BYTE)pJoinApply->nCircle;// DataPacket << (BYTE)pJoinApply->nJob; DataPacket << (BYTE)pJoinApply->nSex; DataPacket << (unsigned int)pJoinApply->nVip; nResult++; } } int* pCount = (int*)DataPacket.getPositionPtr(pos); *pCount = nResult; AP.flush(); } //新成员成功加入行会 void CGuildSystem::OnJoinGuildSuccess() { if( m_pEntity == NULL ) return; if( m_pGuild == NULL ) return; CActor* pActor = (CActor*)m_pEntity; pActor->ResetShowName(); //重刷Name // pActor->GetAchieveSystem().OnEvent(eAchieveEventJoinGuild); // pActor->GetQuestSystem()->OnQuestEvent(CQuestData::qtEnterGuild, 1, 1); //添加帮派事件 char sText[1024]; //LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpAddToGuildEvent); //sprintf_s(sText, sizeof(sText), sFormat, ( char *)(m_pEntity->GetEntityName())); m_pGuild->AddEventRecord( "", enGuildEvent_MemberJoin, 0, 0, 0, (char *)(m_pEntity->GetEntityName()),NULL ); LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpAddToGuildmsg); sprintf_s(sText, sizeof(sText), sFormat, ( char *)(m_pEntity->GetEntityName())); //pGuild->SendGuildMsg(smGuildCommon,sText,ttChatWindow); //((CActor *)m_pEntity)->GetChatSystem()->SendChat(ciChannelGuild, sText); m_pGuild->BroadCastMsgInGuildChannel(sText); //m_pEntity->GetQuestSystem()->OnQuestEvent(CQuestData::qcGuildLevel, 1, 1); SendGuildSiegeCmdData(); //加入行会,通知攻城战指令 SendGuildOpOk(GUILD_OP_JOIN_OK); } int CGuildSystem::QuickSortGuildDepotCmp(const void *a ,const void *b) { GUILDDEPOTITEM* Sa = (GUILDDEPOTITEM*)a; GUILDDEPOTITEM* Sb = (GUILDDEPOTITEM*)b; int nSaIsInCheck = Sa->nExchangeActorId > 0 ? 0: 1; int nSbIsInCheck = Sb->nExchangeActorId > 0 ? 0: 1; if( nSaIsInCheck == nSbIsInCheck ) //未审核的排在前面 { return Sa->nUserItem->wItemId - Sb->nUserItem->wItemId; } return nSbIsInCheck - nSaIsInCheck; } VOID CGuildSystem::CallGuildMember() { // if (m_pGuild == NULL) return; // if (m_pEntity == NULL || m_pEntity ->GetType() != enActor) return; // if (GetGuildPos() != smGuildLeader && GetGuildPos() != smGuildAssistLeader) // { // m_pEntity->SendOldTipmsgFormatWithId(tpGuildCallNotOwner,ttFlyTip); // return; // } // CGuildProvider& pConfig = GetLogicServer()->GetDataProvider()->GetGuildConfig(); // int x,y; // ((CActor*)m_pEntity)->GetPosition(x,y); // CScene* pScene = ((CActor*)m_pEntity)->GetScene(); // if (pScene && pScene->HasMapAttribute(x,y,aaSceneNotTransfer,1)) // { // m_pEntity->SendOldTipmsgFormatWithId(tpGuildCallSceneNotRight,ttFlyTip); // return; // } // if (m_pGuild->GetCoin() < pConfig.nCallMemberNeed ) // { // m_pEntity->SendOldTipmsgFormatWithId(tpGuildCallCoinNotEnough,ttFlyTip); // return; // } // m_pGuild->ChangeGuildCoin(-pConfig.nCallMemberNeed, 0,"call member"); // char sText[1024]; // LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetOldTipmsgConfig().GetTipmsg(tpGuildCallChatInfo); // sprintf_s(sText, sizeof(sText), sFormat, ( char *)(m_pEntity->GetEntityName()), pConfig.nCallMemberNeed); // m_pGuild->BroadCastMsgInGuildChannel(sText); // CEntityManager* pEntityMgr = GetGlobalLogicEngine()->GetEntityMgr(); // CLinkedNode *pNode; // CLinkedListIterator it(m_pGuild->m_ActorOnLine); // for (pNode = it.first(); pNode; pNode = it.next()) // { // EntityHandle& hHandle = pNode->m_Data; // CEntity* pEntity = pEntityMgr->GetEntity(hHandle); // if (pEntity && pEntity->GetType() == enActor && hHandle != m_pEntity->GetHandle()) // { // CActor* toActor = (CActor*)pEntity; // CActorPacket pack; // CDataPacket &DataPacket = toActor->AllocPacket(pack); // DataPacket << (BYTE)enGuildSystemID << (BYTE)sCallRequest << m_pEntity->GetHandle() << m_pEntity->GetEntityName(); // pack.flush(); // } // } } VOID CGuildSystem::CallGuildMemberBack(CDataPacketReader &packet) { // if (m_pGuild == NULL) return; // if (m_pEntity == NULL || m_pEntity ->GetType() != enActor) return; // BYTE bResult; // EntityHandle hHandle; // packet >> bResult >> hHandle; // if (bResult == 0) // { // return; // } // CGuildProvider& pConfig = GetLogicServer()->GetDataProvider()->GetGuildConfig(); // CEntityManager* pEntityMgr = GetGlobalLogicEngine()->GetEntityMgr(); // CEntity* pEntity = pEntityMgr->GetEntity(hHandle); // if(!pEntity) // { // m_pEntity->SendOldTipmsgFormatWithId(tpGuildCallTargetIsNotOnLine,ttFlyTip); // return; // } // int x,y; // ((CActor*)m_pEntity)->GetPosition(x,y); // CScene* pScene = ((CActor*)m_pEntity)->GetScene(); // if (pScene && pScene->HasMapAttribute(x,y,aaSceneNotTransfer,1)) // { // CActor* toActor = (CActor*)m_pEntity; // CActorPacket pack; // CDataPacket &DataPacket = toActor->AllocPacket(pack); // DataPacket << (BYTE)enGuildSystemID << (BYTE)sCallRequest << pEntity->GetHandle() << pEntity->GetEntityName(); // pack.flush(); // m_pEntity->SendOldTipmsgFormatWithId(tpGuildCallSceneNotRight,ttFlyTip); // return; // } // int nX,nY; // ((CActor*)pEntity)->GetPosition(nX,nY); // CScene* pTargetScene = ((CActor*)pEntity)->GetScene(); // if (pTargetScene && pTargetScene->HasMapAttribute(nX,nY,aaSceneNotTransfer,1)) // { // m_pEntity->SendOldTipmsgFormatWithId(tpGuildCallTargetSceneNotRight,ttFlyTip); // return; // } // pTargetScene->EnterScene(m_pEntity,nX, nY); // CScriptValueList paramList, retParamList; // CNpc* pNpc = GetGlobalLogicEngine()->GetGlobalNpc(); // paramList << pEntity << m_pEntity; // if (pNpc == NULL) return; // if (!pNpc->GetScript().Call("CallGuildMemberBack", paramList, retParamList)) // { // const RefString &s = pNpc->GetScript().getLastErrorDesc(); // OutputMsg(rmError, (LPCSTR)s); // } } void CGuildSystem::SendGuildPlayerPos(int nType,CVector& playerList) { } void CGuildSystem::CheckGuildPlayerPos(int nType) { if ( !m_pEntity || m_pEntity->GetType() != enActor || !m_pEntity->IsInited()) { return; } int x,y; m_pEntity->GetPosition(x,y); if (m_pEntity->GetScene() && m_pEntity->GetScene()->HasMapAttribute(x,y,aaForcePkMode,fpUnion)) { ((CActor*)m_pEntity)->GetGuildSystem()->BroadCastGuildPlayerPos(nType); } } void CGuildSystem::BroadCastGuildPlayerPos(int nType, CScene* pScene) { DECLARE_TIME_PROF("CGuildSystem::BroadCastGuildPlayerPos"); if (m_pEntity == NULL || m_pEntity ->GetType() != enActor ) return; if (!pScene) pScene = m_pEntity->GetScene(); if (!pScene) return; CEntityManager* pEntityMgr = GetGlobalLogicEngine()->GetEntityMgr(); CLinkedNode *pNode; CLinkedListIterator it(pScene->GetPlayList()); CVector playerList;//区域玩家列表 for (pNode = it.first(); pNode; pNode = it.next()) { CEntity* pEntity = pEntityMgr->GetEntity(pNode->m_Data); if (pEntity && pEntity->GetType() == enActor) { CActor* pActor = (CActor*)pEntity; int x,y; pActor->GetPosition(x,y); if (pScene->HasMapAttribute(x,y,aaForcePkMode,fpUnion) && m_pEntity!= pActor) { playerList.add(pActor); } } } if (nType == gptEnter || nType == gptDisappear) //自己进入或出去,初始化区域所有坐标或全部消失 { m_pEntity->GetGuildSystem()->SendGuildPlayerPos(nType,playerList); } CVector updateList; updateList.add(m_pEntity); for (int i =0; i < playerList.count(); i++) { CActor* pActor = (CActor*)playerList[i]; if(pActor) { pActor->GetGuildSystem()->SendGuildPlayerPos(nType,updateList); } } } void CGuildSystem::sendGuilBuilds() { if(!m_pEntity) return; if(!m_pGuild ) return; CActorPacket ap; CDataPacket& dataPack = m_pEntity->AllocPacket(ap); dataPack <<(BYTE)enGuildSystemID << (BYTE)sGuildBuilds; int nNum = GetLogicServer()->GetDataProvider()->GetGuildConfig().nBuildNum; dataPack << (BYTE)nNum; for(int i = 1; i <= nNum ; i++) { dataPack << (BYTE)i; dataPack <<(BYTE)(m_pGuild->GetGuildbuildingLev(i)); } ap.flush(); } void CGuildSystem::UpdateGuildBuild(CDataPacketReader& packet) { if(!m_pGuild || !m_pEntity) return; int pos = GetGuildPos(); if(pos < smGuildAssistLeader) { m_pEntity->SendTipmsgFormatWithId(tmNoRight, tstUI); return; } BYTE nType = 0; packet >> nType; int nMax = GetLogicServer()->GetDataProvider()->GetGuildConfig().nBuildNum; if(nType > nMax) { m_pEntity->SendTipmsgFormatWithId(tmDataError, tstUI); return; } int level = m_pGuild->GetGuildbuildingLev(nType); const GuildBuildCfg* pbuild = GetLogicServer()->GetDataProvider()->GetGuildConfig().GetBuildCfgPtr(nType, level+1); if(pbuild != NULL) { if(m_pGuild->GetCoin() < pbuild->nCost) { m_pEntity->SendTipmsgFormatWithId(tmGuildCoinLimit, tstUI); return; } if(m_pGuild->GetGuildbuildingLev(gbtMainHall) < pbuild->nLimit) { m_pEntity->SendTipmsgFormatWithId(tmGuildMainBuildLvLimit, tstUI, pbuild->nLimit); return; } m_pGuild->ChangeGuildCoin(-(pbuild->nCost)); m_pGuild->ChangeGuildBuildingLev(nType, 1); sendGuilBuilds(); } else { m_pEntity->SendTipmsgFormatWithId(tmGuildBuildLvLimit, tstUI); return; } } void CGuildSystem::SendGuildDonateInfo() { if(!m_pEntity) return; if(!m_pGuild ) return; CActorPacket ap; CDataPacket& dataPack = m_pEntity->AllocPacket(ap); dataPack <<(BYTE)enGuildSystemID << (BYTE)sGuildDonateInfo; CGuildProvider& guildCfg = GetLogicServer()->GetDataProvider()->GetGuildConfig(); int nSize = guildCfg.m_nDonate.size(); dataPack << (BYTE)nSize; if(nSize > 0) { std::map::iterator it = guildCfg.m_nDonate.begin(); for(; it != guildCfg.m_nDonate.end(); it++) { dataPack << (BYTE)(it->first); dataPack <<(BYTE)(m_pEntity->GetStaticCountSystem().GetStaticCount(it->second.nStaticCountType)); } } ap.flush(); } VOID CGuildSystem::SendGuildWarList() { if(!m_pEntity) return; if(!m_pGuild) return; m_pGuild->SendWarGuildList(m_pEntity); } VOID CGuildSystem::SendGuildEventLog() { if(!m_pEntity) return; if(!m_pGuild) return; m_pGuild->SendGuildEventLog(m_pEntity); } void CGuildSystem::SendSbkInfo() { if(!m_pEntity) return; CActorPacket ap; CDataPacket& data = ((CActor*)m_pEntity)->AllocPacket(ap); data << (BYTE)GetSystemID() << (BYTE)sGuildGetSbkInfo; const char* guildName = GetGlobalLogicEngine()->GetGuildMgr().getSbkGuildName(); const char* leaderName = GetGlobalLogicEngine()->GetGuildMgr().getSbkGuildLeaderName(); data.writeString(leaderName); data.writeString(guildName); ap.flush(); } bool CGuildSystem::checkSbkGuildSeniorofficials() { if(!m_pEntity) return false; if(!m_pGuild) return false; if(m_pGuild->GetGuildId() == GetGlobalLogicEngine()->GetGuildMgr().GetCityOwnGuildId()) { int nMyPos = GetGuildPos(); //本人职位 if(nMyPos >= smGuildAssistLeader) { return true; } } return false; }