#!/usr/bin/python # -*- coding: GBK -*- #--------------------------------------------------------------------- # #--------------------------------------------------------------------- ##@package PlayerFamily #¼Ò×åÂß¼­´¦Àí # # @author eggxp # @date 2010-4-23 # @version 1.0 # #--------------------------------------------------------------------- #"""Version = 2017-07-12 21:00""" #--------------------------------------------------------------------- import FBLogic import ChConfig import GameWorld import ShareDefine import PlayerControl import NetPackCommon import PlayerViewCache import ChPyNetSendPack import PlayerFamilyEmblem #import PlayerFamilyZhenfa import PlayerFamilyZhenbaoge import IPY_PlayerDefine import IpyGameDataPY import IPY_GameWorld import ItemControler import GameFuncComm import DBDataMgr import DirtyList import ObjPool import random import time #ÉêÇë¡¢ÉóºË¡¢Í˳ö¡¢ÌßÈË¡¢¾èÏס¢Éý¼¶ Def_CreatFamily_MaxStr = 33 #ÏÉÃ˱ä¸üÀàÐÍ FamilyChangeTypes = ( FamilyChangeType_None, FamilyChangeType_MemJoin, # ³ÉÔ±¼ÓÈë 1 FamilyChangeType_MemLeave, # ³ÉÔ±Í˳ö 2 FamilyChangeType_JoinSet, # ÊÕÈËÉèÖÃÐÞ¸Ä 3 FamilyChangeType_Broadcast, # ¹«¸æÐÞ¸Ä 4 FamilyChangeType_EChange, # »ÕÕÂÐÞ¸Ä 5 FamilyChangeType_LeaderChange, # ÃËÖ÷±ä¸ü 6 FamilyChangeType_MemFmlvChange, # ³ÉԱְλ±ä¸ü 7 FamilyChangeType_MemLogin, # ³ÉÔ±ÉÏÏß 8 FamilyChangeType_MemLogout, # ³ÉÔ±ÀëÏß9 FamilyChangeType_FamilyLVExp, # ÏÉÃ˵ȼ¶¾­Ñé±ä¸ü 10 FamilyChangeType_MemContrib, # ³ÉÔ±¹±Ï×±ä¸ü 11 FamilyChangeType_OnDay, # ¹ýÌì 12 ) = range(13) #ÏÉÃËȨÏÞ ( FamilyPowerID_Call, #ÕÐÈË 1 FamilyPowerID_ChangeFmlv, #±ä¸üְλ 2 FamilyPowerID_Broadcast, #·¢²¼¹«¸æ 3 FamilyPowerID_Kick, #ÌßÈË 4 ) = range(1, 1 + 4) #ÏÉÃËְλ¶ÔÓ¦ÈËÊýÉèÖÃÊôÐÔÃû Def_FmlSetAttrName = { IPY_PlayerDefine.fmlMember:"MemberMax", IPY_PlayerDefine.fmlCounsellor:"EliteMax", IPY_PlayerDefine.fmlViceLeader:"DeputyLeaderMax", } def FamilyOnDay(): if GameWorld.IsCrossServer(): return familyManager = DBDataMgr.GetFamilyMgr() for i in range(0, familyManager.GetCount()): family = familyManager.GetAt(i) familyID = family.GetID() #Õ䱦¸ó PlayerFamilyZhenbaoge.OnDay(family) for index in xrange(family.GetCount()): member = family.GetAt(index) # ÖØÖóÉÔ±ÈÕÐÅÏ¢ member.SetContribDay(0) member.SetDonateCntDay(0) Broadcast_FamilyChange(familyID, FamilyChangeType_OnDay) return def PlayerOnDay(curPlayer): if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Family): return ResetDailyDonateCnt(curPlayer) PlayerFamilyZhenbaoge.PlayerOnDay(curPlayer) return def OnPlayerLogin(curPlayer, tick): if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Family): return PlayerLoginRefreshFamily(curPlayer, tick) Sync_RequestAddFamilyInfo(curPlayer, False) SyncDonateCntInfo(curPlayer) #PlayerFamilyZhenfa.OnPlayerLogin(curPlayer) PlayerFamilyZhenbaoge.OnPlayerLogin(curPlayer) return def OnPlayerLogout(curPlayer): playerID = curPlayer.GetPlayerID() familyID = curPlayer.GetFamilyID() if not familyID: return familyMgr = DBDataMgr.GetFamilyMgr() family = familyMgr.FindFamily(familyID) if not family: return curMember = family.FindMember(playerID) if not curMember: return curMember.SetOffTime(int(time.time())) #XW_JZ_LeaguerLeaveline {%S1%}ÏÂÏßÁË£¡ 25 - - NotifyAllFamilyMemberMsg(familyID, "XW_JZ_LeaguerLeaveline", [curPlayer.GetPlayerName()]) Broadcast_FamilyChange(familyID, FamilyChangeType_MemLogout, excludeIDList=[playerID]) return def OnWeekEx(curPlayer): #ÖØÖà return def PlayerLoginRefreshFamily(curPlayer, tick): ## Íæ¼ÒµÇ¼ʱˢмÒ×å playerID = curPlayer.GetPlayerID() familyMgr = DBDataMgr.GetFamilyMgr() refreshFamilyID = familyMgr.GetPlayerFamilyID(playerID) MapServer_FamilyRefresh(curPlayer, refreshFamilyID) familyID = curPlayer.GetFamilyID() if not familyID: return family = familyMgr.FindFamily(familyID) if not family: return curMember = family.FindMember(playerID) if not curMember: return curMember.SetOffTime(0) # ÔÚÏß0£¬ÍÑ»ú1£¬>1ÀëÏßʱ¼ä curMember.RefreshMember(curPlayer) Sync_FamilyInfo(curPlayer) SendFamilyActionInfo(curPlayer, familyID, ShareDefine.Def_ActionType_FamilyData) #֪ͨÕÐÈË if GetFamilyMemberHasPow(curMember, FamilyPowerID_Call): NetPackCommon.SendFakePack(curPlayer, GetPack_FamilyReqJoinInfo(familyID)) #XW_JZ_LeaguerOnline {%S1%}ÉÏÏßÁË£¡ 25 - - NotifyAllFamilyMemberMsg(familyID, "XW_JZ_LeaguerOnline", [curPlayer.GetName()], [playerID]) Broadcast_FamilyChange(familyID, FamilyChangeType_MemLogin, excludeIDList=[playerID]) # ÃËÖ÷ÉÏÏß´¦Àí if curMember.GetFmLV() == IPY_PlayerDefine.fmlLeader: OnFamilyLeaderLogin(curPlayer) return def OnFamilyLeaderLogin(curPlayer): ## ÃËÖ÷µÇ¼¶îÍâ´¦Àí return def OnMinute(): #Õ½Á¦Ë¢ÐÂÔÚDBFamily.OnMinute PlayerFamilyEmblem.CheckExpireEmblem() return def RefreshFamilyMember(curPlayer): ## Íæ¼Ò³ÉÔ±Ïà¹ØÊôÐÔ±ä¸üʱͬ²½¸üмÒ×å³ÉÔ±ÐÅÏ¢ familyID = curPlayer.GetFamilyID() if not familyID: return familyMgr = DBDataMgr.GetFamilyMgr() family = familyMgr.FindFamily(familyID) if not family: return playerID = curPlayer.GetPlayerID() member = family.FindMember(playerID) if not member: return member.RefreshMember(curPlayer) return def GetRenameTime(dataAction): return dataAction.GetValue1() def SetRenameTime(dataAction, setTime): dataAction.SetValue1(setTime) def GetFamilyDataAction(familyID): ## ¼Ò×å¶îÍâÊý¾Ý´æ´¢µÄÐÐΪÊý¾Ý£¬¿ÉÒÔÊÓΪFamily¹«¹²Êý¾ÝµÄÒ»¸öÀ©Õ¹ action = DBDataMgr.GetFamilyActionMgr().GetFamilyAction(familyID, ShareDefine.Def_ActionType_FamilyData) return action.GetOneAction(True) #// A6 04 ´´½¨¼Ò×å #tagCMCreateFamily # #struct tagCMCreateFamily #{ # tagHead Head; # char Name[33]; # WORD EmblemID; //Ñ¡Ôñ»ÕÕÂID£¬½âËøÏÉÃ˵ȼ¶Îª1¼¶µÄ¾ùΪ¿ÉÑ¡ID # char EmblemWord[3]; //»ÕÕÂÎÄ×Ö #}; def OnCreateFamily(index, clientPack, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) inputName = clientPack.Name emblemID = clientPack.EmblemID emblemWord = clientPack.EmblemWord if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Family): return playerID = curPlayer.GetPlayerID() playerFamilyID = curPlayer.GetFamilyID() familyMgr = DBDataMgr.GetFamilyMgr() if playerFamilyID: curFamily = familyMgr.FindFamily(playerFamilyID) if curFamily: if curFamily.FindMember(playerID): #Íæ¼ÒÒѾ­ÓмÒ×å, ´´½¨Ê§°Ü PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_85890") return fullFamilyName = CheckInputFamilyName(curPlayer, inputName) if not fullFamilyName: return needMoney = IpyGameDataPY.GetFuncCfg("CreateFamily", 1) moneyType = IpyGameDataPY.GetFuncCfg("CreateFamily", 2) if moneyType and needMoney: if not PlayerControl.PayMoney(curPlayer, moneyType, needMoney, "CreateFamily"): return serverID = GameWorld.GetPlayerServerID(curPlayer) curFamily = familyMgr.AddFamily(fullFamilyName, serverID) if curFamily == None: GameWorld.ErrLog("´´½¨¼Ò×åʧ°Ü", playerID) return newFamilyID = curFamily.GetID() curFamily.SetLV(1) emblemIDList = PlayerFamilyEmblem.GetDefaultFamilyEmblemIDList() if not emblemID or emblemID not in emblemIDList: emblemID = random.choice(emblemIDList) # ´ÓĬÈÏ»ÕÕÂÖÐËæ»úÑ¡ÔñÒ»¸ö GameWorld.Log("´´½¨ÏÉÃË: familyID=%s,playerID=%s,emblemID=%s" % (newFamilyID, playerID, emblemID)) curFamily.SetEmblemID(emblemID) curFamily.SetEmblemWord(emblemWord) #-ÉèÖüÒ×å³ÉÔ±ÊôÐÔ DoPlayerJionFamily(curFamily, playerID, curPlayer, IPY_PlayerDefine.fmlLeader) familyMgr.Sort() #XW_JZ_EstablishSud ¹§Ï²Äú£¬¼Ò×彨Á¢³É¹¦! 25 - - PlayerControl.NotifyCode(curPlayer, "XW_JZ_EstablishSud") PlayerControl.WorldNotify(0, "jiazu_liubo_671654", [curPlayer.GetName(), fullFamilyName, newFamilyID]) PlayerFamilyZhenbaoge.OnZhenbaogeReset(curFamily) return def CheckInputFamilyName(curPlayer, inputName): '''¼ì²éÍæ¼ÒÊäÈëµÄÏÉÃËÃûÊÇ·ñºÏ·¨£¬½¨ÃË¡¢¸ÄÃûͨÓà @return: None-²»ºÏ·¨£»·Ç¿Õ-ºÏ·¨µÄÏÉÃËÈ«Ãû ''' #C++¹ýÂ˿ոñ familyName = GameWorld.GetGameWorld().GetCharTrim(inputName) fullFamilyName = GetFamilyFullName(curPlayer, familyName) if not fullFamilyName: GameWorld.ErrLog("¼Ò×åÈ«ÃûÒì³£!", curPlayer.GetPlayerID()) return if DirtyList.IsWordForbidden(familyName): #XW_JZ_Family_NameNoLegality ¶Ô²»Æð,¼Ò×åÃû³ÆÖк¬ÓзǷ¨×Ö·û PlayerControl.NotifyCode(curPlayer, "XW_JZ_Family_NameNoLegality") return if len(familyName) <= 0 or len(familyName) > Def_CreatFamily_MaxStr: PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_980181", [Def_CreatFamily_MaxStr / 2, Def_CreatFamily_MaxStr]) return familyMgr = DBDataMgr.GetFamilyMgr() if familyMgr.FindFamilyByName(fullFamilyName): #XW_JZ_EstablishErr_Name ¶Ô²»Æð£¬ÄúÊäÈëµÄ¼Ò×åÃûÒÑ´æÔÚ£¬½¨Á¢¼Ò×åʧ°Ü£¡ 25 - - PlayerControl.NotifyCode(curPlayer, "XW_JZ_EstablishErr_Name") return return fullFamilyName ## »ñÈ¡¼Ò×åÈ«Ãû def GetFamilyFullName(curPlayer, familyName): serverID = GameWorld.GetPlayerServerID(curPlayer) maxServerID = IpyGameDataPY.GetFuncCfg("FamilyNameFormat", 3) if serverID > maxServerID or serverID <= 0: GameWorld.ErrLog("ÏÉÃËÈ«Ãû serverID=%s error! maxServerID=%s, check FamilyNameFormat.txt" % (serverID, maxServerID)) return "" specServerDict = IpyGameDataPY.GetFuncEvalCfg("FamilyNameFormat", 4, {}) nameFormatInfo = GameWorld.GetDictValueByRangeKey(specServerDict, serverID) if not nameFormatInfo: nameFormatInfo = IpyGameDataPY.GetFuncEvalCfg("FamilyNameFormat", 1) if not nameFormatInfo: return "" nameFormat = nameFormatInfo[0] paramList = [eval(pName) for pName in nameFormatInfo[1:]] fullName = nameFormat % tuple(paramList) maxLen = IpyGameDataPY.GetFuncCfg("FamilyNameFormat", 2) if len(fullName) > maxLen: GameWorld.ErrLog("ÏÉÃËÈ«Ãû familyName=%s,È«Ãû=%s len=%s > %s, check FamilyNameFormat.txt" % (familyName, fullName, len(fullName), maxLen)) PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_980181", [maxLen / 2, maxLen]) return "" return fullName def DoPlayerJionFamily(family, playerID, jionPlayer, jionFamilySetLv=IPY_PlayerDefine.fmlMember, broadcastFamilyChange=True): '''¼ÓÈë¼Ò×壬֧³ÖÀëÏßÍæ¼Ò¼ÓÈë @param jionPlayer: Èç¹ûÊÇÀëÏßÍæ¼ÒÔòΪNone ''' if isinstance(family, int): familyID = family familyMgr = DBDataMgr.GetFamilyMgr() curFamily = familyMgr.FindFamily(familyID) else: curFamily = family if not curFamily: return familyID = curFamily.GetID() member = curFamily.AddMember(playerID) member.SetFmLV(jionFamilySetLv) if jionPlayer: member.RefreshMember(jionPlayer) else: member.RefreshMemberByID(playerID) curFamily.SetFightPowerTotal(curFamily.GetFightPowerTotal() + member.GetFightPowerTotal()) if jionFamilySetLv == IPY_PlayerDefine.fmlLeader: curFamily.SetLeaderID(playerID) #ÉèÖÃÍæ¼ÒÉíÉϱ£´æµÄ¼Ò×åÐÅÏ¢ if jionPlayer: MapServer_FamilyRefresh(jionPlayer, familyID) Sync_FamilyInfo(jionPlayer) if jionFamilySetLv != IPY_PlayerDefine.fmlLeader: if broadcastFamilyChange: Broadcast_FamilyChange(familyID, FamilyChangeType_MemJoin, excludeIDList=[playerID]) #֪ͨËùÓмÒ×å³ÉÔ±, Õâ¸öÈ˼ÓÈëÁ˼Ò×å NotifyAllFamilyMemberMsg(familyID, "XW_JZ_EnterFamily", [member.GetPlayerName()], excludeIDList=[playerID]) if jionPlayer: PlayerControl.NotifyCode(jionPlayer, 'XW_JZ_EnterFamilyInfo', [family.GetName()]) #¼Ç¼¼ÓÈëʼþ tick = GameWorld.GetGameWorld().GetTick() AddFamilyActionNote(member.GetPlayerName(), familyID, ShareDefine.Def_ActionType_FamilyEvent, [ShareDefine.Def_FamilyActionEvent_MemberChange, ShareDefine.Def_FamilyMemberChange_Join, jionFamilySetLv, 0], tick) #Íæ¼Ò»º´æ #PlayerViewCache.OnPlayerFamilyChange(jionPlayer.GetPlayerID(), curFamily.GetID(), curFamily.GetName()) #SetMemberFightPower(familyMember, PlayerControl.GetFightPower(jionPlayer)) #GetFamilyMgr().AddFamilyIDToFightPowerChangeList(curFamily.GetID(), jionPlayer.GetPlayerID()) return def AddFamilyActionNote(curName, familyID, actionType, actionDataList, tick, isClearNone=True, useData=""): '''ͳһÌí¼Ó¼Ò×åActionÊý¾Ý ''' if actionType not in ShareDefine.Def_ActionTypeList: #¼Ç¼ÐÐΪÀàÐÍ´íÎó GameWorld.ErrLog("¼Ç¼¼Ò×åÐÐΪÀàÐÍ:%s ´íÎó") return False familyAction = DBDataMgr.GetFamilyActionMgr().GetFamilyAction(familyID, actionType) actionData = familyAction.AddAction() if not actionData: return False #---ÉèÖÃÐÐΪ¶ÔÏóÊý¾Ý--- actionData.SetName(curName) # ÉèÖÃÃû×Ö actionData.SetUserData(useData) # ÉèÖÃ×Ô¶¨ÒåÊý¾Ý for num, value in enumerate(actionDataList, 1): setFunc = getattr(actionData, "SetValue%s" % num) if setFunc: setFunc(value) return True def MapServer_FamilyRefresh(curPlayer, refreshFamilyID, isVoluntarily=0): ''' Ï൱ÓÚGameServerµ÷Óà curPlayer.MapServer_FamilyRefresh() @param familyID: Íæ¼Ò¸üеÄfamilyID @param isVoluntarily: ÊÇ·ñ×ÔÔ¸À뿪µÄ£¬½öÀ뿪ˢÐÂʱÓÐЧ ''' tick = GameWorld.GetGameWorld().GetTick() playerID = curPlayer.GetPlayerID() refreshFmLV = 0 refreshFamilyLV = 0 refreshFamilyName = "" if refreshFamilyID: familyMgr = DBDataMgr.GetFamilyMgr() curFamily = familyMgr.FindFamily(refreshFamilyID) if curFamily: refreshFamilyLV = curFamily.GetLV() refreshFamilyName = curFamily.GetName() member = curFamily.FindMember(playerID) if member: refreshFmLV = member.GetFmLV() else: refreshFamilyID = 0 lastFamilyID = curPlayer.GetFamilyID() lastFamilyLV = curPlayer.GetFamilyLV() # ÏÉÃ˵ȼ¶£¬·ÇְλµÈ¼¶ lastFmLV = PlayerControl.GetFamilyMemberLV(curPlayer) if lastFamilyID != refreshFamilyID: curPlayer.SetFamilyID(refreshFamilyID) if curPlayer.GetFamilyName() != refreshFamilyName: curPlayer.SetFamilyName(refreshFamilyName) curPlayer.Notify_FamilyNameRefresh() #//04 36 ÖÜÎ§Íæ¼Ò¼Ò×åÃûË¢ÐÂ#tagPlayerFamilyNameRefresh if lastFmLV != refreshFmLV: PlayerControl.SetFamilyMemberLV(curPlayer, refreshFmLV) if lastFamilyLV != refreshFamilyLV: isLVUP = False if lastFamilyLV and refreshFamilyLV > 0: #´¥·¢¼Ò×åÉý¼¶Ê¼þ isLVUP = True curPlayer.SetFamilyLV(refreshFamilyLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyLV, refreshFamilyLV) #´¥·¢¼Ò×åÉý¼¶Ê¼þ, ÔÚSetFamilyLVÖ®ºó£¬ÈÎÎñ¿ÉÒÔÈ¡µÈ¼¶Åж¨ if isLVUP: pass if lastFamilyID != 0 and curPlayer.GetFamilyID() == 0: #Íæ¼ÒÀ뿪¼Ò×å __OnLeaveFamily(curPlayer, isVoluntarily, tick) elif lastFamilyID == 0 and curPlayer.GetFamilyID() != 0: #¸Õ½ø¼Ò×岢Ϊ×峤,´¥·¢½¨¼Ò×åʼþ if curPlayer.GetFamilyMemberLV() == IPY_GameWorld.fmlLeader: pass #½øÈë¼Ò×å´¥·¢Ê¼þ __OnEnterFamily(curPlayer, tick) #---֪ͨ¿Í»§¶ËË¢ÐÂÊôÐÔ--- curPlayer.View_FamilyInfoRefresh() #//04 30 Íæ¼Ò¼Ò×åÃû×ÖְλµÈÐÅϢˢÐÂ#tagPlayerInFamilyInfoRefresh return def __OnEnterFamily(curPlayer, tick): ## ½øÈë¼Ò×å´¥·¢Ê¼þ familyMgr = DBDataMgr.GetFamilyMgr() familyMgr.DelPlayerReqJoinFamilyIDAll(curPlayer.GetPlayerID()) Sync_RequestAddFamilyInfo(curPlayer) return def __OnLeaveFamily(curPlayer, isVoluntarily, tick): ## Í˳ö¼Ò×å´¥·¢Ê¼þ #---Çå¿Õ¼Ò×åÏà¹ØÐÅÏ¢--- curPlayer.SetPerExp(0) curPlayer.SetFamilyHornor(0) curPlayer.SetFamilyActiveValue(0) curPlayer.SetLastWeekFamilyActiveValue(0) curPlayer.SetFamilyLV(0) PlayerControl.SetLeaveFamilyTimeEx(curPlayer, int(time.time())) leaveCnt, kickedCnt, _ = PlayerControl.GetLeaveFamilyInfo(curPlayer) GameWorld.DebugLog("__OnLeaveFamily: isVoluntarily=%s,leaveCnt=%s,kickedCnt=%s" % (isVoluntarily, leaveCnt, kickedCnt)) delMoneyType, delMoneyPer = IpyGameDataPY.GetFuncCfg("FamilyLeave", 3), 0 if isVoluntarily: delMoneyPerList = IpyGameDataPY.GetFuncEvalCfg("FamilyLeave", 4) if delMoneyPerList: delMoneyPer = delMoneyPerList[leaveCnt] if len(delMoneyPerList) > leaveCnt else delMoneyPerList[-1] leaveCnt += 1 GameWorld.DebugLog(" Ôö¼ÓÖ÷¶¯À뿪´ÎÊý: leaveCnt=%s" % (leaveCnt)) else: delMoneyPerList = IpyGameDataPY.GetFuncEvalCfg("FamilyLeave", 5) if delMoneyPerList: delMoneyPer = delMoneyPerList[kickedCnt] if len(delMoneyPerList) > kickedCnt else delMoneyPerList[-1] kickedCnt += 1 GameWorld.DebugLog(" Ôö¼Ó±»ÌßÀ뿪´ÎÊý: kickedCnt=%s" % (kickedCnt)) PlayerControl.SetLeaveFamilyInfo(curPlayer, leaveCnt, kickedCnt, isVoluntarily) if delMoneyType and delMoneyPer: nowMoney = PlayerControl.GetMoney(curPlayer, delMoneyType) delMoney = int(nowMoney * delMoneyPer / 100.0) GameWorld.DebugLog(" ¿Û³ý»õ±Ò: delMoneyType=%s,delMoneyPer=%s,nowMoney=%s,delMoney=%s" % (delMoneyType, delMoneyPer, nowMoney, delMoney)) PlayerControl.PayMoney(curPlayer, delMoneyType, delMoney, "LeaveFamily") FBLogic.OnLeaveFamily(curPlayer, tick) return def GetFamilyMemberHasPow(member, powerID): ## ÏÉÃ˳ÉÔ±ÊÇ·ñÓиÃȨÏÞ powerDict = IpyGameDataPY.GetFuncEvalCfg("FamilyPower", 1, {}) if str(powerID) not in powerDict: return False needMemberLV = powerDict[str(powerID)] return member.GetFmLV() >= needMemberLV def Sync_FamilyInfo(curPlayer, infoPack=None): ## // A5 20 Íæ¼Ò¼Ò×åÐÅÏ¢ #tagMCRoleFamilyInfo familyID = curPlayer.GetFamilyID() if not familyID: return if not infoPack: infoPack = GetPack_FamilyInfo(familyID) NetPackCommon.SendFakePack(curPlayer, infoPack) return def GetPack_FamilyInfo(familyID): familyMgr = DBDataMgr.GetFamilyMgr() curFamily = familyMgr.FindFamily(familyID) if not curFamily: return clientPack = ChPyNetSendPack.tagMCRoleFamilyInfo() clientPack.FamilyID = familyID clientPack.FamilyName = curFamily.GetName() clientPack.FamilyLV = curFamily.GetLV() clientPack.FamilyLVExp = curFamily.GetExp() clientPack.JoinReview = curFamily.GetJoinReview() clientPack.JoinLVMin = curFamily.GetJoinLVMin() clientPack.ServerID = curFamily.GetServerID() clientPack.EmblemID = curFamily.GetEmblemID() clientPack.EmblemWord = curFamily.GetEmblemWord() clientPack.FightPower = curFamily.GetFightPower() clientPack.FightPowerEx = curFamily.GetFightPowerEx() clientPack.Broadcast = curFamily.GetBroadcast() clientPack.BroadcastLen = len(clientPack.Broadcast) clientPack.LeaderID = curFamily.GetLeaderID() clientPack.MemberList = [] for index in xrange(curFamily.GetCount()): member = curFamily.GetAt(index) memInfo = ChPyNetSendPack.tagMCRoleFamilyMember() memInfo.PlayerID = member.GetPlayerID() memInfo.JoinTime = member.GetJoinTime() memInfo.Name = member.GetPlayerName() memInfo.NameLen = len(memInfo.Name) memInfo.LV = member.GetLV() memInfo.Job = member.GetJob() memInfo.RealmLV = member.GetRealmLV() memInfo.Face = member.GetFace() memInfo.FacePic = member.GetFacePic() memInfo.TitleID = member.GetTitleID() memInfo.FightPower = member.GetFightPower() memInfo.FightPowerEx = member.GetFightPowerEx() memInfo.FmLV = member.GetFmLV() memInfo.ServerID = member.GetServerID() memInfo.ContribTotal = member.GetContribTotal() memInfo.ContribDay = member.GetContribDay() memInfo.DonateCntTotal = member.GetDonateCntTotal() memInfo.DonateCntDay = member.GetDonateCntDay() memInfo.OffTime = member.GetOffTime() clientPack.MemberList.append(memInfo) clientPack.MemberCount = len(clientPack.MemberList) return clientPack def Broadcast_FamilyChange(familyID, changeType=FamilyChangeType_None, powerID=None, excludeIDList=None): ## // A5 21 ¼Ò×å±ä¸ü #tagMCFamilyChange # @param excludeIDList: ²»¹ã²¥µÄ³ÉÔ±IDÁбí clientPack = ChPyNetSendPack.tagMCFamilyChange() clientPack.Type = changeType Broadcast_FamilyPack(familyID, clientPack, powerID, excludeIDList) return def Broadcast_FamilyPack(familyID, clientPack, powerID=None, excludeIDList=None): ## ¹ã²¥¼Ò×å³ÉÔ±·â°ü # @param powerID: ¿ÉÖ¸¶¨Ö»·¢¸øÓиÃȨÏ޵ijÉÔ± # @param excludeIDList: ²»¹ã²¥µÄ³ÉÔ±IDÁбí if not clientPack: return familyMgr = DBDataMgr.GetFamilyMgr() curFamily = familyMgr.FindFamily(familyID) if not curFamily: return playerManager = GameWorld.GetPlayerManager() for index in xrange(curFamily.GetCount()): member = curFamily.GetAt(index) playerID = member.GetPlayerID() if excludeIDList and playerID in excludeIDList: continue curPlayer = playerManager.FindPlayerByID(playerID) if not curPlayer: continue if powerID != None and not GetFamilyMemberHasPow(member, powerID): continue NetPackCommon.SendFakePack(curPlayer, clientPack) return def NotifyAllFamilyMemberMsg(familyID, code, paramList=[], excludeIDList=None): ## ֪ͨËùÓмÒ×å³ÉÔ±ÐÅÏ¢ # @param excludeIDList: ²»Í¨ÖªµÄ³ÉÔ±IDÁбí familyMgr = DBDataMgr.GetFamilyMgr() curFamily = familyMgr.FindFamily(familyID) if not curFamily: return playerManager = GameWorld.GetPlayerManager() for i in xrange(curFamily.GetCount()): member = curFamily.GetAt(i) playerID = member.GetPlayerID() if excludeIDList and playerID in excludeIDList: continue curPlayer = playerManager.FindPlayerByID(playerID) if not curPlayer: continue PlayerControl.NotifyCode(curPlayer, code, paramList) return #// A6 01 ÏòÍæ¼ÒÉêÇë¼ÓÈë¼Ò×å #tagCMRequestJoinFamilyByPlayer # #struct tagCMRequestJoinFamilyByPlayer #{ # tagHead Head; # DWORD TagPlayerID; //Ä¿±ê¼Ò×åÍæ¼ÒID #}; def OnRequestJoinFamilyByPlayer(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) tagPlayerID = clientData.TagPlayerID tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID) if not tagPlayer: GameWorld.DebugLog("¶Ô·½²»ÔÚÏß! tagPlayerID=%s" % tagPlayerID) return tagFamilyID = tagPlayer.GetFamilyID() if tagFamilyID <= 0: GameWorld.DebugLog("¶Ô·½Ã»ÓмÒ×å! tagPlayerID=%s" % tagPlayerID) return RequestJoinTagFamily(curPlayer, tagFamilyID) return #// A6 02 ÉêÇë¼ÓÈë¼Ò×å#tagCMRequesJoinFamily # #struct tagCMRequesJoinFamily #{ # tagHead Head; # BYTE Type; //ÉêÇëÀàÐÍ£¬0-ÉêÇ룻1-³·Ïú # DWORD TagFamilyID; //Ä¿±ê¼Ò×åID£¬ÉêÇëʱΪ0´ú±íÒ»¼üÉêÇë¼Ò×åÈÎÒâ¼Ò×å #}; def OnRequesJoinFamily(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) tagFamilyID = clientData.TagFamilyID # ÉêÇë½øÈëµÄ¼Ò×åID requestType = clientData.Type # ÉêÇëÀàÐÍ(ÉêÇë/³·Ïú) # ÉêÇë¼ÓÈë if requestType == 0: if not tagFamilyID: AutoJoinFamily(curPlayer) else: RequestJoinTagFamily(curPlayer, tagFamilyID) # ³·ÏúÉêÇë elif requestType == 1: CancelJoinTagFamily(curPlayer, tagFamilyID) return def CheckInJoinCD(curPlayer): ## ¼ì²éÊÇ·ñ¼ÓÈëÏÉÃËCDÖÐ leaveFamilyTime = PlayerControl.GetLeaveFamilyTimeEx(curPlayer) if not leaveFamilyTime: return False leaveCnt, kickedCnt, lastVoluntarily = PlayerControl.GetLeaveFamilyInfo(curPlayer) joinCDMinute = 0 if lastVoluntarily: if leaveCnt <= 0: return False joinCDMinuteList = IpyGameDataPY.GetFuncEvalCfg("FamilyLeave", 1) if joinCDMinuteList: joinCDMinute = joinCDMinuteList[leaveCnt - 1] if len(joinCDMinuteList) >= leaveCnt else joinCDMinuteList[-1] else: if kickedCnt <= 0: return False joinCDMinuteList = IpyGameDataPY.GetFuncEvalCfg("FamilyLeave", 2) if joinCDMinuteList: joinCDMinute = joinCDMinuteList[kickedCnt - 1] if len(joinCDMinuteList) >= kickedCnt else joinCDMinuteList[-1] if joinCDMinute: cdTimes = joinCDMinute * 60 passTimes = int(time.time()) - leaveFamilyTime if passTimes < cdTimes: GameWorld.DebugLog("¼ÓÈëÏÉÃËCDÖÐ: leaveCnt=%s,kickedCnt=%s,lastVoluntarily=%s,leaveFamilyTime=%s(%s),passTimes=%s < %s" % (leaveCnt, kickedCnt, lastVoluntarily, leaveFamilyTime, GameWorld.ChangeTimeNumToStr(leaveFamilyTime), passTimes, cdTimes)) return True return False def AutoJoinFamily(curPlayer): if curPlayer.GetFamilyID(): return playerID = curPlayer.GetPlayerID() realmLV = curPlayer.GetOfficialRank() GameWorld.DebugLog("Íæ¼ÒÒ»¼ü×Ô¶¯¼ÓÈë¼Ò×壡 realmLV=%s" % realmLV, playerID) if CheckInJoinCD(curPlayer): return familyMgr = DBDataMgr.GetFamilyMgr() indexList = range(familyMgr.GetCount()) random.shuffle(indexList) #´òÂÒ˳Ðò for index in indexList: family = familyMgr.GetAt(index) if not family: continue familyID = family.GetID() lvMin = family.GetJoinLVMin() if lvMin and realmLV < lvMin: GameWorld.DebugLog(" ¹ÙÖ°²»×ãµÄ²»´¦Àí! familyID=%s,lvMin=%s" % (familyID, lvMin), playerID) continue if family.GetJoinReview(): GameWorld.DebugLog(" ÐèÒªÉóºËµÄ²»´¦Àí! familyID=%s" % familyID, playerID) continue MemberMax = GetFamilySetting(family.GetLV(), "MemberMax") if family.GetCount() >= MemberMax: GameWorld.DebugLog(" ³ÉÔ±ÒÑÂúµÄ²»´¦Àí! familyID=%s" % familyID, playerID) continue #Ö±½Ó¼ÓÈë DoPlayerJionFamily(family, playerID, curPlayer) return # ¿ÉÔÙÀ©Õ¹×Ô¶¯ÇëÇó£¬ÔÝʱ²»´¦Àí GameWorld.DebugLog("ûÓпÉ×Ô¶¯½øÈëµÄÏÉÃË!") return def GetFamilySetting(familyLV, fieldName): ## »ñÈ¡ÏÉÃ˵ȼ¶±í¶ÔÓ¦×Ö¶ÎÖµ if not fieldName: return 0 ipyData = IpyGameDataPY.GetIpyGameData("Family", familyLV) if not ipyData: return 0 attrName = "Get%s" % fieldName if not hasattr(ipyData, attrName): return 0 return getattr(ipyData, attrName)() def RequestJoinTagFamily(curPlayer, familyID): ## ÉêÇë¼ÓÈë if CheckInJoinCD(curPlayer): return playerID = curPlayer.GetPlayerID() if curPlayer.GetFamilyID(): GameWorld.DebugLog('ÒѾ­ÓÐÏÉÃ˲»ÄÜÔÙÉêÇë¼ÓÈë! familyID=%s' % curPlayer.GetFamilyID(), playerID) return familyMgr = DBDataMgr.GetFamilyMgr() reqFamilyIDList = familyMgr.GetPlayerReqJoinFamilyIDList(playerID) if playerID in reqFamilyIDList: GameWorld.DebugLog('ÒѾ­ÔÚÉêÇë¼ÓÈëÏÉÃËÁбíÖÐ! familyID=%s' % familyID, playerID) return maxReqFamilyCnt = IpyGameDataPY.GetFuncCfg("FamilyReqJoin", 2) if len(reqFamilyIDList) >= maxReqFamilyCnt: GameWorld.DebugLog('ÒѾ­´ïµ½×î´óÉêÇë¼ÓÈëÏÉÃËÊý! %s, %s' % (len(reqFamilyIDList), reqFamilyIDList), playerID) return tagFamily = familyMgr.FindFamily(familyID) if not tagFamily: return lvMin = tagFamily.GetJoinLVMin() if curPlayer.GetOfficialRank() < lvMin: GameWorld.DebugLog('¹Ùְδ´ïµ½¸ÃÏÉÃ˼ÓÈë×îµÍÏÞÖÆ! realmLV=%s < %s' % (curPlayer.GetOfficialRank(), lvMin), playerID) return # ÐèÒªÉóºË£¬ÂúÔ±ºó¶Ë²»ÏÞÖÆÉêÇ룬ÓÉǰ¶Ë×ÔÐоö¶¨ÊÇ·ñ¿ÉÉêÇë if tagFamily.GetJoinReview(): reqPlayerIDDict = tagFamily.GetReqJoinPlayerInfo() if playerID not in reqPlayerIDDict: maxReqPlayerCnt = IpyGameDataPY.GetFuncCfg("FamilyReqJoin", 1) if len(reqPlayerIDDict) >= maxReqPlayerCnt: GameWorld.DebugLog('Ä¿±êÏÉÃËÉêÇë¼ÓÈëÊýÒÑÂú! %s, %s' % (len(reqFamilyIDList), reqFamilyIDList), playerID) PlayerControl.NotifyCode(curPlayer, "jiazu_pan_141056") return tagFamily.AddReqJoinPlayerID(playerID) # ¹ã²¥¸øÓÐÕÐÈËȨÏÞµÄ Broadcast_FamilyPack(familyID, GetPack_FamilyReqJoinInfo(familyID), FamilyPowerID_Call) #jiazu_pan_500807:ÉêÇëÈë°ï³É¹¦£¡ÇëµÈ´ý°ï»á¹ÜÀíÈËÔ±ÉóÅú£¡ PlayerControl.NotifyCode(curPlayer, "jiazu_pan_500807") Sync_RequestAddFamilyInfo(curPlayer) return # ²»ÐèÒªÉóºË£¬×Ô¶¯¼ÓÈë memberMax = GetFamilySetting(tagFamily.GetLV(), "MemberMax") if tagFamily.GetCount() >= memberMax: GameWorld.DebugLog('Ä¿±êÏÉÃ˳ÉÔ±ÒÑÂú! familyLV=%s,memberMax=%s' % (tagFamily.GetLV(), memberMax), playerID) return DoPlayerJionFamily(tagFamily, playerID, curPlayer) return def CancelJoinTagFamily(curPlayer, familyID): # ³·ÏúÉêÇë familyMgr = DBDataMgr.GetFamilyMgr() playerID = curPlayer.GetPlayerID() tagFamily = familyMgr.FindFamily(familyID) if tagFamily: tagFamily.DelReqJoinPlayerID(playerID) familyMgr.DelPlayerReqJoinFamilyID(playerID, familyID) Broadcast_FamilyPack(familyID, GetPack_FamilyReqJoinInfo(familyID), FamilyPowerID_Call) Sync_RequestAddFamilyInfo(curPlayer) return def Sync_RequestAddFamilyInfo(curPlayer, isForce=True): ## ֪ͨµ±Ç°ÉêÇë¼ÓÈëµÄÄÄЩ¼Ò×å playerID = curPlayer.GetPlayerID() familyMgr = DBDataMgr.GetFamilyMgr() reqFamilyIDList = familyMgr.GetPlayerReqJoinFamilyIDList(playerID) # ·ÇÇ¿ÖÆÍ¨ÖªÊ±Ã»ÓÐÉêÇë¼Ç¼µÄ¿É²»Í¨Öª£¬ÈçµÇ¼ if not isForce and not reqFamilyIDList: return clientPack = ChPyNetSendPack.tagMCNotifyRequestJoinFamilyInfo() clientPack.Clear() clientPack.RequestJoinFamilyIDList = reqFamilyIDList clientPack.RequestCount = len(clientPack.RequestJoinFamilyIDList) NetPackCommon.SendFakePack(curPlayer, clientPack) return def GetPack_FamilyReqJoinInfo(familyID): ## »ñÈ¡ // A5 22 ¼Ò×åÉêÇë¼ÓÈëµÄÍæ¼ÒÐÅÏ¢ #tagMCFamilyReqJoinInfo familyMgr = DBDataMgr.GetFamilyMgr() curFamily = familyMgr.FindFamily(familyID) if not curFamily: return reqPlayerIDDict = curFamily.GetReqJoinPlayerInfo() playerManager = GameWorld.GetPlayerManager() clientPack = ChPyNetSendPack.tagMCFamilyReqJoinInfo() clientPack.ReqJoinList = [] for playerID, reqTime in reqPlayerIDDict.items(): curPlayer = playerManager.FindPlayerByID(playerID) reqInfo = ChPyNetSendPack.tagMCFamilyReqJoinPlayer() reqInfo.PlayerID = playerID reqInfo.ReqTime = reqTime if curPlayer: reqInfo.IsOnLine = True viewCache = PlayerViewCache.FindViewCache(playerID) if viewCache: reqInfo.Name = viewCache.GetPlayerName() reqInfo.NameLen = len(reqInfo.Name) reqInfo.LV = viewCache.GetLV() reqInfo.Job = viewCache.GetJob() reqInfo.RealmLV = viewCache.GetRealmLV() reqInfo.Face = viewCache.GetFace() reqInfo.FacePic = viewCache.GetFacePic() reqInfo.TitleID = viewCache.GetTitleID() reqInfo.FightPower = viewCache.GetFightPower() reqInfo.FightPowerEx = viewCache.GetFightPowerEx() reqInfo.ServerID = viewCache.GetServerID() clientPack.ReqJoinList.append(reqInfo) if len(clientPack.ReqJoinList) >= 100: break clientPack.ReqCnt = len(clientPack.ReqJoinList) return clientPack #// A6 21 ÉóºËÇëÇó¼ÓÈë¼Ò×å #tagCMJoinFamilyReply # #struct tagCMJoinFamilyReply #{ # tagHead Head; # DWORD TagPlayerID; //±»ÉóºËÍæ¼ÒID 0Ôò´ú±íÈ«²¿ # BYTE IsOK; //ÊÇ·ñͬÒâÆä¼ÓÈë #}; def OnJoinFamilyReply(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) tagPlayerID = clientData.TagPlayerID isOK = clientData.IsOK playerID = curPlayer.GetPlayerID() familyID = curPlayer.GetFamilyID() if familyID <= 0: return familyMgr = DBDataMgr.GetFamilyMgr() family = familyMgr.FindFamily(familyID) if not family: return curMember = family.FindMember(playerID) if not curMember: return if not GetFamilyMemberHasPow(curMember, FamilyPowerID_Call): #GameWorld.DebugLog("ûÓÐÕÐÈËȨÏÞ£¬ÎÞ·¨ÉóºËÈËÔ±ÈëÃË!", playerID) PlayerControl.NotifyCode(curPlayer, "XW_JZ_InviteErr_Popedom") return GameWorld.DebugLog("ÉóºËÈëÃËÉêÇë: tagPlayerID=%s,familyID=%s,isOK=%s" % (tagPlayerID, familyID, isOK), playerID) reqPlayerIDDict = family.GetReqJoinPlayerInfo() tagPlayerIDList = reqPlayerIDDict.keys() if tagPlayerID: if tagPlayerID not in reqPlayerIDDict: GameWorld.DebugLog("²»´æÔÚ¸ÃÉêÇëÈËÔ±! tagPlayerID=%s" % tagPlayerID) return tagPlayerIDList = [tagPlayerID] if not tagPlayerIDList: GameWorld.DebugLog("ûÓÐÉêÇëÈËÔ±!") return playerManager = GameWorld.GetPlayerManager() # ¾Ü¾ø if not isOK: for tagPlayerID in tagPlayerIDList: family.DelReqJoinPlayerID(tagPlayerID) tagPlayer = playerManager.FindPlayerByID(tagPlayerID) if not tagPlayer: continue Sync_RequestAddFamilyInfo(tagPlayer) #jiazu_pan_592934:{%S}¾Ü¾øÁËÄúµÄÈë°ïÉêÇë PlayerControl.NotifyCode(tagPlayer, "jiazu_pan_592934", [family.GetName()]) Broadcast_FamilyPack(familyID, GetPack_FamilyReqJoinInfo(familyID), FamilyPowerID_Call) return # ´¦ÀíͬÒâ offlinePlayerCanJoin = IpyGameDataPY.GetFuncCfg("FamilyReqJoin", 3) MemberMax = GetFamilySetting(family.GetLV(), "MemberMax") joinOKPlayerIDList = [] for tagPlayerID in tagPlayerIDList: if family.GetCount() >= MemberMax: PlayerControl.NotifyCode(curPlayer, "jiazu_lhs_202580") break tagPlayer = playerManager.FindPlayerByID(tagPlayerID) #ÉêÇëÄ¿±ê²»ÔÚÏß if not tagPlayer: if not offlinePlayerCanJoin: GameWorld.DebugLog("ÀëÏßÍæ¼ÒÎÞ·¨¼ÓÈëÏÉÃË! tagPlayerID=%s" % tagPlayerID, playerID) PlayerControl.NotifyCode(curPlayer, "jiazu_hwj35_367906") continue if family.FindMember(tagPlayerID): GameWorld.DebugLog("ÒѾ­ÊDZ¾Ã˳ÉÔ±! tagPlayerID=%s" % tagPlayerID, playerID) PlayerControl.NotifyCode(curPlayer, "XW_JZ_InviteErr_Repeat") continue tagFamilyID = familyMgr.GetPlayerFamilyID(tagPlayerID) if tagFamilyID: GameWorld.DebugLog("ÒѾ­¼ÓÈëÆäËûÏÉÃË! tagPlayerID=%s,tagFamilyID=%s" % (tagPlayerID, tagFamilyID), playerID) PlayerControl.NotifyCode(curPlayer, "XW_JZ_InviteErr_Repeat") continue DoPlayerJionFamily(family, tagPlayerID, tagPlayer, broadcastFamilyChange=False) joinOKPlayerIDList.append(tagPlayerID) if not joinOKPlayerIDList: return Broadcast_FamilyChange(familyID, FamilyChangeType_MemJoin, excludeIDList=joinOKPlayerIDList) Broadcast_FamilyPack(familyID, GetPack_FamilyReqJoinInfo(familyID), FamilyPowerID_Call) return #// A6 22 ÐÞ¸ÄÊÕÈË·½Ê½ #tagCMChangeFamilyJoin # #struct tagCMChangeFamilyJoin #{ # tagHead Head; # BYTE JoinReview; //³ÉÔ±¼ÓÈëÊÇ·ñÐèÒªÉóºË£¬Ä¬ÈÏ0×Ô¶¯¼ÓÈë # WORD JoinLVMin; //ÏÞÖÆ×îµÍ¿É¼ÓÈëµÄÍæ¼ÒµÈ¼¶ #}; def OnChangeFamilyJoin(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) joinReview = clientData.JoinReview joinLVMin = clientData.JoinLVMin # ¹ÙÖ° playerID = curPlayer.GetPlayerID() familyID = curPlayer.GetFamilyID() if familyID <= 0: return familyMgr = DBDataMgr.GetFamilyMgr() family = familyMgr.FindFamily(familyID) if not family: return curMember = family.FindMember(playerID) if not curMember: return if not GetFamilyMemberHasPow(curMember, FamilyPowerID_Call): GameWorld.DebugLog("ûÓÐÕÐÈËȨÏÞ", playerID) return GameWorld.DebugLog("ÐÞ¸ÄÕÐÈËÉèÖÃ: familyID=%s,joinReview=%s,joinLVMin=%s" % (familyID, joinReview, joinLVMin), playerID) family.SetJoinReview(joinReview) family.SetJoinLVMin(joinLVMin) Sync_FamilyInfo(curPlayer) Broadcast_FamilyChange(familyID, FamilyChangeType_JoinSet, FamilyPowerID_Call, excludeIDList=[playerID]) return #// A6 23 Ð޸ļÒ×幫¸æ #tagCMChangeFamilyBroadcast # #struct tagCMChangeFamilyBroadcast #{ # tagHead Head; # char Msg[200]; #}; def OnChangeFamilyBroadcast(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) broadcast = clientData.Msg playerID = curPlayer.GetPlayerID() familyID = curPlayer.GetFamilyID() if familyID <= 0: return familyMgr = DBDataMgr.GetFamilyMgr() family = familyMgr.FindFamily(familyID) if not family: return curMember = family.FindMember(playerID) if not curMember: return if not GetFamilyMemberHasPow(curMember, FamilyPowerID_Broadcast): GameWorld.DebugLog("ûÓÐÐ޸Ĺ«¸æÈ¨ÏÞ", playerID) return family.SetBroadcast(broadcast) GameWorld.DebugLog('¸ü¸ÄÏÉÃ˹«¸æ: Family=%s,¹«¸æ=%s' % (GameWorld.CodeToGbk(family.GetName()), GameWorld.CodeToGbk(broadcast)), playerID) Sync_FamilyInfo(curPlayer) Broadcast_FamilyChange(familyID, FamilyChangeType_Broadcast, excludeIDList=[playerID]) return #// A6 24 Ð޸ļÒ×å»ÕÕ #tagCMChangeFamilyEmblem # #struct tagCMChangeFamilyEmblem #{ # tagHead Head; # BYTE EmblemID; // ¸ü»»µÄ»ÕÕÂID # char EmblemWord[3]; // »ÕÕÂÎÄ×Ö #}; def OnChangeFamilyEmblem(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) changeEmblemID = clientData.EmblemID emblemWord = clientData.EmblemWord PlayerFamilyEmblem.OnChangeFamilyEmblem(curPlayer, changeEmblemID, emblemWord) return #// A6 25 Ð޸ļÒ×å³ÉԱְλ #tagCMChangeFamilyMemLV # #struct tagCMChangeFamilyMemLV #{ # tagHead Head; # DWORD PlayerID; // Ä¿±ê³ÉÔ±ID # BYTE FmLV; // ±ä¸üΪxxְλ #}; def OnChangeFamilyMemLV(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) OnChangeFamilyMemberLV(curPlayer, clientData.PlayerID, clientData.FmLV) return def OnChangeFamilyMemberLV(curPlayer, tagID, changeFmlv, isGMOP=False): '''±ä¸ü³ÉԱְλ @param curPlayer: ²Ù×÷µÄÍæ¼Ò @param tagID: Ä¿±ê³ÉÔ±ID @param changeFmlv: ÐÞ¸ÄΪxxְλ @param isGMOP: ÊÇ·ñÊÇGMºǫ́·¢ÆðµÄ£¬Èç¹ûÊÇGM·¢ÆðµÄ£¬Ò»°ãcurPlayer´«ÈëµÄΪĿ±ê³ÉÔ±IDʵÀý ''' if not curPlayer: return playerID = curPlayer.GetPlayerID() familyID = curPlayer.GetFamilyID() if familyID <= 0: return familyMgr = DBDataMgr.GetFamilyMgr() family = familyMgr.FindFamily(familyID) if not family: return curMember = family.FindMember(playerID) if not curMember: return if changeFmlv < 0 or changeFmlv > IPY_PlayerDefine.fmlLeader: GameWorld.DebugLog("²»´æÔÚ¸ÃְλµÈ¼¶! changeFmlv=%s" % changeFmlv) return # ·ÇGM²Ù×÷µÄÐè¼ì²éȨÏÞ if not isGMOP: if not GetFamilyMemberHasPow(curMember, FamilyPowerID_ChangeFmlv): return if playerID == tagID: GameWorld.DebugLog("²»ÄÜÈÎÃâ×Ô¼ºµÄ¼Ò×åְλ", playerID) return tagMember = family.FindMember(tagID) if tagMember == None: GameWorld.DebugLog("¸ü¸Ä¼Ò×å³ÉԱְλʱĿ±ê³ÉÔ±²»´æÔÚ! tagID=%s" % tagID, playerID) return if not isGMOP: if curMember.GetFmLV() != IPY_PlayerDefine.fmlLeader: if changeFmlv >= curMember.GetFmLV(): GameWorld.DebugLog("Ð޸ĵÄְλ²»ÄܱÈ×Ô¼º¸ß»òƽ¼¶! changeFmlv=%s" % changeFmlv, playerID) return if tagMember.GetFmLV() >= curMember.GetFmLV(): GameWorld.DebugLog("Ð޸ĵÄÄ¿±ê³ÉԱְλ²»ÄܱÈ×Ô¼º¸ß»òƽ¼¶! tagFmlv=%s" % tagMember.GetFmLV(), playerID) return if changeFmlv == IPY_PlayerDefine.fmlLeader: changeType = FamilyChangeType_LeaderChange ChangeFamilyLeader(family, tagMember) else: fmLVMemCnt = 0 for index in range(family.GetCount()): familyMember = family.GetAt(index) if familyMember.GetFmLV() != changeFmlv: continue fmLVMemCnt += 1 maxCnt = GetFamilySetting(family.GetLV(), Def_FmlSetAttrName.get(changeFmlv, "")) if fmLVMemCnt >= maxCnt: # jiazu_hwj35_272921 ¸ÄΪ jiazu_chenxin_31379 PlayerControl.NotifyCode(curPlayer, "jiazu_chenxin_31379") GameWorld.DebugLog("Ŀǰ¸ÃְλµÄÈËÊýÒѾ­´ïµ½ÉÏÏÞ! changeFmlv=%s,fmLVMemCnt=%s >= %s" % (changeFmlv, fmLVMemCnt, maxCnt)) return changeType = FamilyChangeType_MemFmlvChange ChangeFamilyMemberLv(tagMember, changeFmlv) if isGMOP: family.SetBroadcast("") Sync_FamilyInfo(curPlayer) Broadcast_FamilyChange(familyID, changeType, excludeIDList=[playerID, tagID]) return True def ChangeFamilyLeader(family, newLeaderMem): ## ±ä¸ü¼Ò×å×峤 familyID = family.GetID() befLeaderID = family.GetLeaderID() newLeaderID = newLeaderMem.GetPlayerID() if befLeaderID == newLeaderID: return befLeaderMem = family.FindMember(befLeaderID) if befLeaderMem: #°ÑÔ­×峤½µÎªÆÕͨ³ÉÔ± ChangeFamilyMemberLv(befLeaderMem, IPY_PlayerDefine.fmlMember) family.SetLeaderID(newLeaderID) ChangeFamilyMemberLv(newLeaderMem, IPY_PlayerDefine.fmlLeader) GameWorld.Log("¼Ò×åÉèÖÃÐÂ×峤! familyID=%s,newLeaderID=%s,befLeaderID=%s" % (familyID, newLeaderID, befLeaderID)) return def ChangeFamilyMemberLv(tagMember, changeFamilyLV): ## Ð޸ijÉԱְλ£¬Ö»×öÐÞ¸ÄÂß¼­£¬²»×öÑéÖ¤£¬ÑéÖ¤Óɸ÷µ÷ÓÃÈë¿Ú×ÔÐÐÑéÖ¤ familyID = tagMember.GetFamilyID() tagID = tagMember.GetPlayerID() memName = tagMember.GetPlayerName() befFamilyLV = tagMember.GetFmLV() tagMember.SetFmLV(changeFamilyLV) tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagID) if tagPlayer: MapServer_FamilyRefresh(tagPlayer, familyID) Sync_FamilyInfo(tagPlayer) if GetFamilyMemberHasPow(tagMember, FamilyPowerID_Call): NetPackCommon.SendFakePack(tagPlayer, GetPack_FamilyReqJoinInfo(familyID)) # ¼Ç¼¼Ò×åʼþ¼Ç¼ÐÅÏ¢ tick = GameWorld.GetGameWorld().GetTick() AddFamilyActionNote(memName, familyID, ShareDefine.Def_ActionType_FamilyEvent, [ShareDefine.Def_FamilyActionEvent_MemberChange, ShareDefine.Def_FamilyMemberChange_FMLV, changeFamilyLV, befFamilyLV], tick) #xx±»ÈÎÃüΪxx NotifyAllFamilyMemberMsg(familyID, "XW_JZ_AppointFamily", [memName, changeFamilyLV]) #GetFamilyMgr().SetSyncCrossFamilyUpd(familyMember.GetFamilyID(), familyMember.GetPlayerID(), syncNow=True) # ³ÉԱְλ±ä¸ü return #// A6 26 ÇëÇó¼Ò×å³ÉÔ±Áбí #tagCMGetFamilyInfo # #struct tagCMGetFamilyInfo #{ # tagHead Head; #}; def OnGetFamilyInfo(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) Sync_FamilyInfo(curPlayer) return #// A6 03 À뿪¼Ò×å #tagCMLeaveFamily # #struct tagCMLeaveFamily #{ # tagHead Head; #}; def OnLeaveFamily(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerID = curPlayer.GetPlayerID() familyID = curPlayer.GetFamilyID() if familyID <= 0: return familyMgr = DBDataMgr.GetFamilyMgr() family = familyMgr.FindFamily(familyID) if not family: return curMember = family.FindMember(playerID) if not curMember: return familyLV = curMember.GetFmLV() # ְλ if family.GetCount() > 1 and familyLV == IPY_PlayerDefine.fmlLeader: GameWorld.DebugLog("×峤ÔÚ³ÉÔ±ÈËÊý´óÓÚ1ʱ²»ÄÜÖ±½ÓÍ˳ö¼Ò×å", playerID) return # ¹¦ÄÜÏÞÖÆÍ˳öÏÉÃË # ... # ½ø³öʱ¼äÏÞÖÆÔݲ»×ö£¬µÈÕýʽ¹¦ÄÜÔÙ²¹ #PlayerControl.SetLeaveFamilyTime(curPlayer, updTime) # Ö´ÐÐÍ˳ö GameWorld.DebugLog("À뿪¼Ò×å! familyID=%s" % familyID, playerID) family.DeleteMember(playerID) AddFamilyActionNote(curPlayer.GetName(), familyID, ShareDefine.Def_ActionType_FamilyEvent, [ShareDefine.Def_FamilyActionEvent_MemberChange, ShareDefine.Def_FamilyMemberChange_Leave], tick) #XW_JZ_LeaveFamily {%S1%}Í˳öÁ˼Ò×壡 25 - - NotifyAllFamilyMemberMsg(familyID, "XW_JZ_LeaveFamily", [curPlayer.GetName()]) MapServer_FamilyRefresh(curPlayer, 0, 1) if family.GetCount() == 0: #Íæ¼ÒÀ뿪ºó, ¼Ò×åûÓÐÈËÁË , ɾ³ýÕâ¸ö¼Ò×å familyMgr.DelFamily(familyID) return Broadcast_FamilyChange(familyID, FamilyChangeType_MemLeave) return #// A6 05 ɾ³ý¼Ò×å³ÉÔ± #tagCMDeleteFamilyMember # #struct tagCMDeleteFamilyMember #{ # tagHead Head; # DWORD MemberID; #}; def OnDeleteFamilyMember(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) tagMemberID = clientData.MemberID playerID = curPlayer.GetPlayerID() if playerID == tagMemberID: return familyID = curPlayer.GetFamilyID() if familyID <= 0: return familyMgr = DBDataMgr.GetFamilyMgr() family = familyMgr.FindFamily(familyID) if not family: return curMember = family.FindMember(playerID) if not curMember: return if not GetFamilyMemberHasPow(curMember, FamilyPowerID_Kick): GameWorld.DebugLog("ûÓÐÌßÈËȨÏÞ!") return tagMember = family.FindMember(tagMemberID) if not tagMember: return curFmlv = curMember.GetFmLV() tagFmlv = tagMember.GetFmLV() if tagFmlv >= curFmlv: GameWorld.DebugLog("Ö»ÄÜÌß±È×Ô¼ºÖ°Î»µÍµÄ³ÉÔ±! tagMemberID=%s,tagFmlv(%s) >= curFmlv(%s)" % (tagMemberID, tagFmlv, curFmlv), playerID) return # ¹¦ÄÜÏÞÖÆÌßÈË # ... tagPlayerName = tagMember.GetPlayerName() # ±»ÌßÍæ¼ÒÃû tagPlayerID = tagMember.GetPlayerID() # ±»ÌßÍæ¼ÒID family.DeleteMember(tagPlayerID) AddFamilyActionNote(tagPlayerName, familyID, ShareDefine.Def_ActionType_FamilyEvent, [ShareDefine.Def_FamilyActionEvent_MemberChange, ShareDefine.Def_FamilyMemberChange_KickOut], tick) #XW_JZ_LeaveFamily {%S1%}Í˳öÁ˼Ò×壡 25 - - NotifyAllFamilyMemberMsg(familyID, "XW_JZ_LeaveFamily", [tagPlayerName]) #ɾ³ýÍæ¼Ò tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagMemberID) if tagPlayer: MapServer_FamilyRefresh(tagPlayer, 0) Broadcast_FamilyChange(familyID, FamilyChangeType_MemLeave) return #// A6 11 ¼Ò×å¸ÄÃû #tagCMRenameFamily # #struct tagCMRenameFamily #{ # tagHead Head; # BYTE NewNameLen; # char NewName[NewNameLen]; # BYTE ItemIndex; //¸ÄÃûÎïÆ·ÔÚ±³°üÖеÄλÖà #}; def UpdateFamilyName(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) newName = clientData.NewName #itemIndex = clientData.ItemIndex playerID = curPlayer.GetPlayerID() familyID = curPlayer.GetFamilyID() if familyID <= 0: return familyMgr = DBDataMgr.GetFamilyMgr() family = familyMgr.FindFamily(familyID) if not family: return curMember = family.FindMember(playerID) if not curMember: return if curMember.GetFmLV() != IPY_PlayerDefine.fmlLeader: GameWorld.DebugLog("·ÇÃËÖ÷²»¿É¸ÄÃû!", playerID) return cdHours = IpyGameDataPY.GetFuncCfg("FamilyRename", 2) if cdHours: cdSeconds = cdHours * 3600 curTime = int(time.time()) dataAction = GetFamilyDataAction(familyID) lastRenameTime = GetRenameTime(dataAction) if lastRenameTime and (curTime - lastRenameTime) < cdSeconds: GameWorld.DebugLog("ÏÉÃ˸ÄÃûCDÖÐ! lastRenameTime=%s,cdHours=%s" % (GameWorld.ChangeTimeNumToStr(lastRenameTime), cdHours)) return familyName = CheckInputFamilyName(curPlayer, newName) if not familyName: return moneyType, moneyValue = IpyGameDataPY.GetFuncEvalCfg("FamilyRename", 1) if moneyType and moneyValue and not PlayerControl.PayMoney(curPlayer, moneyType, moneyValue, "FamilyRename"): return family.SetName(familyName) infoPack = GetPack_FamilyInfo(familyID) playerManager = GameWorld.GetPlayerManager() for index in xrange(family.GetCount()): member = family.GetAt(index) memID = member.GetPlayerID() player = playerManager.FindPlayerByID(memID) if not player: continue Sync_FamilyInfo(player, infoPack) player.SetFamilyName(familyName) #player.Notify_FamilyNameRefresh() #//04 36 ÖÜÎ§Íæ¼Ò¼Ò×åÃûË¢ÐÂ#tagPlayerFamilyNameRefresh if cdHours: SetRenameTime(dataAction, curTime) SendFamilyActionInfo(None, familyID, ShareDefine.Def_ActionType_FamilyData) return #// A6 20 ËÑË÷¼Ò×åÁбí #tagCMViewFamilyPage # #struct tagCMViewFamilyPage #{ # tagHead Head; # BYTE MsgLen; //Ä£ºýËÑË÷¼Ò×壬Èç¹ûÊäÈëΪ¿Õ£¬ÔòΪ²»ÏÞÖÆ¸ÃÌõ¼þ # char Msg[MsgLen]; //size = MsgLen # BYTE PageIndex; //²éѯµÚXÒ³Ë÷Òý£¬0~n # BYTE ShowCount; //ÿҳÊýÁ¿£¬Ç°¶Ë¿É×ÔÐÐÖ¸¶¨£¬×î´ó50 #}; def OnViewFamilyPage(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) msg = clientData.Msg pageIndex = clientData.PageIndex showCount = min(clientData.ShowCount, 50) familyMgr = DBDataMgr.GetFamilyMgr() familyCount = familyMgr.GetCount() totalPage = 0 if not msg: startIndex = pageIndex * showCount endIndex = startIndex + showCount - 1 if familyCount > 0: totalPage = GameWorld.GetIntUpper(familyCount, showCount) # ÓÐÖ¸¶¨ËÑË÷ÄÚÈݵĺó¶Ë¹Ì¶¨·µ»Øµ¥Ò³ else: pageIndex = 0 showCount = 20 totalPage = 1 startIndex = 0 endIndex = familyCount - 1 clientPack = ChPyNetSendPack.tagMCFamilyViewList() clientPack.Msg = msg clientPack.MsgLen = len(clientPack.Msg) clientPack.PageIndex = pageIndex clientPack.ShowCount = showCount clientPack.TotalPage = totalPage clientPack.FamilyList = [] for index in range(startIndex, endIndex + 1): if index >= familyCount: break family = familyMgr.GetAt(index) if not family: continue if msg: if msg in family.GetName() or msg == str(family.GetID()): pass else: continue familyView = ChPyNetSendPack.tagMCFamilyView() familyView.Rank = index + 1 familyView.FamilyID = family.GetID() familyView.FamilyName = family.GetName() familyView.FamilyNameLen = len(familyView.FamilyName) familyView.LeaderID = family.GetLeaderID() leaderMember = family.FindMember(familyView.LeaderID) familyView.LeaderName = leaderMember.GetPlayerName() if leaderMember else "" familyView.LeaderNameLen = len(familyView.LeaderName) familyView.FamilyLV = family.GetLV() familyView.JoinReview = family.GetJoinReview() familyView.JoinLVMin = family.GetJoinLVMin() familyView.ServerID = family.GetServerID() familyView.EmblemID = family.GetEmblemID() familyView.EmblemWord = family.GetEmblemWord() familyView.FightPower = family.GetFightPower() familyView.FightPowerEx = family.GetFightPowerEx() familyView.MemberCount = family.GetCount() clientPack.FamilyList.append(familyView) clientPack.FamilyCount = len(clientPack.FamilyList) if clientPack.FamilyCount >= showCount: break NetPackCommon.SendFakePack(curPlayer, clientPack) return #// A6 12 ¼Ò×å¾èÏ×»õ±Ò #tagCMFamilyMoneyDonate # #struct tagCMFamilyMoneyDonate #{ # tagHead Head; # BYTE DonateType; // ¾èÏ×ÀàÐÍ #}; def OnFamilyMoneyDonate(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) donateType = clientData.DonateType playerID = curPlayer.GetPlayerID() familyID = curPlayer.GetFamilyID() if familyID <= 0: return familyMgr = DBDataMgr.GetFamilyMgr() curFamily = familyMgr.FindFamily(familyID) if not curFamily: return curMember = curFamily.FindMember(playerID) if not curMember: return ipyData = IpyGameDataPY.GetIpyGameData("FamilyDonate", donateType) if not ipyData: return dailyCntMax = ipyData.GetDailyCnt() donateCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyDonateCnt % donateType) if donateCnt >= dailyCntMax: GameWorld.DebugLog("½ñÈÕ¾èÏ×´ÎÊýÒÑ´ïÉÏÏÞ! donateType=%s,donateCnt=%s >= %s" % (donateType, donateCnt, dailyCntMax), playerID) return moneyType = ipyData.GetMoneyType() moneyValue = ipyData.GetMoneyValue() if not moneyType or not moneyValue: return if not PlayerControl.PayMoney(curPlayer, moneyType, moneyValue, "FamilyMoneyDonate"): return awardItemList = ipyData.GetAwardItemList() donateCnt += 1 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyDonateCnt % donateType, donateCnt) SyncDonateCntInfo(curPlayer) # Ôö¼Ó³ÉÔ±¾èÏ×´ÎÊý¼Ç¼ memDonateCntDay = curMember.GetDonateCntDay() + 1 memDonateCntTotal = min(curMember.GetDonateCntTotal() + 1, ChConfig.Def_UpperLimit_DWord) curMember.SetDonateCntDay(memDonateCntDay) curMember.SetDonateCntTotal(memDonateCntTotal) GameWorld.DebugLog("¼Ò×å¾èÏ×: donateType=%s,donateCnt=%s,%s,memDonateCntDay=%s,memDonateCntDay=%s" % (donateType, donateCnt, awardItemList, memDonateCntDay, memDonateCntTotal), playerID) ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList) return def ResetDailyDonateCnt(curPlayer): isReset = False ipyDataMgr = IpyGameDataPY.IPY_Data() for index in range(ipyDataMgr.GetFamilyDonateCount()): ipyData = ipyDataMgr.GetFamilyDonateByIndex(index) donateType = ipyData.GetDonateType() donateCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyDonateCnt % donateType) if donateCnt: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyDonateCnt % donateType, 0) isReset = True if isReset: SyncDonateCntInfo(curPlayer) return def SyncDonateCntInfo(curPlayer): donateCntList = [] ipyDataMgr = IpyGameDataPY.IPY_Data() for index in range(ipyDataMgr.GetFamilyDonateCount()): ipyData = ipyDataMgr.GetFamilyDonateByIndex(index) donateType = ipyData.GetDonateType() donateCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyDonateCnt % donateType) donateCntList.append(donateCnt) if not donateCntList: return clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCDonateCntInfo) clientPack.DonateCntList = donateCntList clientPack.Count = len(clientPack.DonateCntList) NetPackCommon.SendFakePack(curPlayer, clientPack) return def AddFamilyExp(curPlayer, addExp): ## Ôö¼ÓÍæ¼Ò¼Ò×å¾­Ñé playerID = curPlayer.GetPlayerID() familyID = curPlayer.GetFamilyID() if familyID <= 0: return familyMgr = DBDataMgr.GetFamilyMgr() curFamily = familyMgr.FindFamily(familyID) if not curFamily: return curLV = curFamily.GetLV() curExp = curFamily.GetExp() updLV = curLV updExp = curExp + addExp GameWorld.DebugLog("Ôö¼ÓÏÉÃ˾­Ñé: curLV=%s,curExp=%s,addExp=%s,updExp=%s" % (curLV, curExp, addExp, updExp), playerID) ipyData = IpyGameDataPY.GetIpyGameData("Family", curLV) lvUPExp = ipyData.GetNeedExp() while lvUPExp and updExp >= lvUPExp: ipyData = IpyGameDataPY.GetIpyGameDataNotLog("Family", updLV + 1) if not ipyData: break updLV += 1 updExp -= lvUPExp lvUPExp = ipyData.GetNeedExp() GameWorld.DebugLog(" ÏÉÃËÉý¼¶: updLV=%s,updExp=%s,lvUPExp=%s" % (updLV, updExp, lvUPExp), playerID) curFamily.SetLV(updLV) curFamily.SetExp(updExp) Sync_FamilyInfo(curPlayer) Broadcast_FamilyChange(familyID, FamilyChangeType_FamilyLVExp, excludeIDList=[playerID]) return True def AddFamilyContrib(curPlayer, addContribValue): ## Ôö¼ÓÍæ¼ÒÀۼƼÒ×å¹±Ï× playerID = curPlayer.GetPlayerID() familyID = curPlayer.GetFamilyID() if familyID <= 0: return familyMgr = DBDataMgr.GetFamilyMgr() curFamily = familyMgr.FindFamily(familyID) if not curFamily: return curMember = curFamily.FindMember(playerID) if not curMember: return contribDay = curMember.GetContribDay() + addContribValue contribTotal = min(curMember.GetContribTotal() + addContribValue, ChConfig.Def_UpperLimit_DWord) curMember.SetContribDay(contribDay) curMember.SetContribTotal(contribTotal) GameWorld.DebugLog("Ôö¼Ó³ÉÔ±¹±Ï×: familyID=%s,addContribValue=%s,contribDay=%s,contribTotal=%s" % (familyID, addContribValue, contribDay, contribTotal), playerID) Sync_FamilyInfo(curPlayer) Broadcast_FamilyChange(familyID, FamilyChangeType_MemContrib, excludeIDList=[playerID]) return ## ------------------------------------------------------------------------------------------------ #// A6 17 ²éѯ¼Ò×åÐÐΪÐÅÏ¢ #tagCMQueryFamilyAction # #struct tagCMQueryFamilyAction #{ # tagHead Head; # BYTE ActionType; // ÐÐΪÀàÐÍ # DWORD FamilyID; // ¼Ò×åID£¬·¢0ĬÈÏ×Ô¼º¼Ò×å #}; def OnQueryFamilyAction(index, cliendData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if not curPlayer: return actionType = cliendData.ActionType familyID = cliendData.FamilyID if not familyID: familyID = curPlayer.GetFamilyID() SendFamilyActionInfo(curPlayer, familyID, actionType) return def SendFamilyActionInfo(curPlayer, familyID, actionType): ## ·¢ËͼÒ×åÐÐΪ # @param curPlayer: ΪNoneʱ֪ͨ¸ÃÏÉÃËËùÓгÉÔ± familyAction = DBDataMgr.GetFamilyActionMgr().GetFamilyAction(familyID, actionType) clientPack = ChPyNetSendPack.tagMCFamilyActionInfo() clientPack.FamilyID = familyID clientPack.ActionType = actionType clientPack.FamilyActionList = [] for index in xrange(familyAction.Count()): familyActionData = familyAction.At(index) actionData = ChPyNetSendPack.tagMCFamilyAction() actionData.Time = familyActionData.GetTime() actionData.Name = familyActionData.GetName() actionData.NameLen = len(actionData.Name) actionData.Value1 = familyActionData.GetValue1() actionData.Value2 = familyActionData.GetValue2() actionData.Value3 = familyActionData.GetValue3() actionData.Value4 = familyActionData.GetValue4() actionData.Value5 = familyActionData.GetValue5() actionData.Value6 = familyActionData.GetValue6() actionData.UseData = familyActionData.GetUserData() actionData.UseDataLen = len(actionData.UseData) clientPack.FamilyActionList.append(actionData) clientPack.Count = len(clientPack.FamilyActionList) if curPlayer: NetPackCommon.SendFakePack(curPlayer, clientPack) return Broadcast_FamilyPack(familyID, clientPack) return def SendFamilyAction(actionDataList, curPlayer=None): ## ͬ²½Ö¸¶¨ÏÉÃËaction # @param actionDataList: Ö§³ÖÁбí»òÖ¸¶¨actionData # @param curPlayer: ΪNoneʱ֪ͨ¸ÃÏÉÃËËùÓгÉÔ± if not isinstance(actionDataList, list): actionDataList = [actionDataList] if not actionDataList: return familyActionData = actionDataList[0] familyID = familyActionData.GetFamilyID() actionType = familyActionData.GetActionType() clientPack = ChPyNetSendPack.tagMCFamilyActionInfo() clientPack.FamilyID = familyID clientPack.ActionType = actionType clientPack.FamilyActionList = [] for familyActionData in actionDataList: actionData = ChPyNetSendPack.tagMCFamilyAction() actionData.Time = familyActionData.GetTime() actionData.Name = familyActionData.GetName() actionData.NameLen = len(actionData.Name) actionData.Value1 = familyActionData.GetValue1() actionData.Value2 = familyActionData.GetValue2() actionData.Value3 = familyActionData.GetValue3() actionData.Value4 = familyActionData.GetValue4() actionData.Value5 = familyActionData.GetValue5() actionData.Value6 = familyActionData.GetValue6() actionData.UseData = familyActionData.GetUserData() actionData.UseDataLen = len(actionData.UseData) clientPack.FamilyActionList.append(actionData) clientPack.Count = len(clientPack.FamilyActionList) if curPlayer: NetPackCommon.SendFakePack(curPlayer, clientPack) return Broadcast_FamilyPack(familyID, clientPack) return