#!/usr/bin/python # -*- coding: GBK -*- #--------------------------------------------------------------------- # #--------------------------------------------------------------------- ##@package PlayerFamilyAction # @todo: ¼Ò×åÐÐΪ # # @author: jiang # @date 2011-11-30 # @version 2.1 # @note: # @change: "2013-03-13 17:00" wdb ɾ³ý·â°ü # @change: "2013-06-06 15:00" Alee »Ö¸´¼Ò×å·â°ü # @change: "2013-12-06 15:00" hxp Ð޸ļÒ×åÅÅÐаñ³ÉÔ±ÅжϷµ»ØÖµ # @change: "2014-05-04 20:00" xmnathan Ôö¼Ó¼Ò×åÊÕÈËÉóºË·½Ê½£¬¼°¸ù¾Ý²»Í¬·½Ê½½øÐд¦Àí # @change: "2014-09-22 11:30" hxp Ôö¼Ó֪ͨMapServerÍæ¼ÒÉêÇë¼ÓÈë¼Ò×åÉêÇë³É¹¦Óë·ñ # @change: "2014-10-31 13:30" hxp »Ö¸´Õ½ÃËÐüÉÍÈÎÎñ # @change: "2015-03-22 17:00" hxp Ôö¼Ó¿Í»§¶Ë²éѯ¼Ò×åÐÐΪ; ¼Ò×åÐÐΪÔö¼ÓuseData # @change: "2015-04-02 19:00" hxp Çå³ýFamilyActionÖ§³ÖuseData # @change: "2015-04-07 14:00" hxp Çå³ýFamilyActionÔö¼Ó·µ»ØÖµ # @change: "2015-04-09 11:00" hxp ²éѯFamilyAction²»ÏÞÖÆ±¾Õ½ÃË # @change: "2016-05-18 16:00" hxp Ôö¼ÓÕ½Ã˹ÙԱģÐÍ×°±¸ÐÅÏ¢¸üд¦Àí #--------------------------------------------------------------------- #"""Version = 2016-05-18 16:00""" #--------------------------------------------------------------------- import time import GameWorld import ChConfig import NetPackCommon import ChPyNetSendPack import PlayerViewCache import ShareDefine import PlayerControl import IPY_GameServer import DataRecordPack import cPickle #--------------------------------------------------------------------- ## ÉèÖÃÍæ¼Ò¼Ò×åÐÐΪ # @param curPlayer Íæ¼ÒʵÀý # @param actionType ÐÐΪÀàÐÍ # @param actionData ÐÐΪÊý¾Ý×Ö·û´®("[Êý¾Ý1, Êý¾Ý2, Êý¾Ý3]") # @param tick ʱ¼ä´Á # @return None def MapServer_PlayerFamilyActionNote(curPlayer, actionType, actionData, tick): actionDataList = cPickle.loads(actionData) familyId = curPlayer.GetFamilyID() #ÉêÇë½øÈë¼Ò×å if actionType == ShareDefine.Def_ActionType_FamilyAdd: if familyId: #ÒѾ­ÓмÒ×å return #¼Ç¼ÉêÇë¸Ã¼Ò×åµÄÐÅÏ¢ __RequestAddFamilyNote(curPlayer, actionType, actionDataList, tick) return if not familyId: #µ±Ç°Íæ¼ÒûÓмÒ×å return #¼Ò×åÐüÉÍÈÎÎñ if actionType == ShareDefine.Def_ActionType_FamilyArrest: __AddFamilyArrestNote(curPlayer, familyId, actionType, actionDataList, tick) return curPlayerName = curPlayer.GetName() AddFamilyActionNote(curPlayerName, familyId, actionType, actionDataList, tick) return ## Ôö¼ÓÍæ¼Ò¼Ò×åÐüÉÍÈÎÎñÍê³ÉÇé¿ö # @param familyId ¼Ò×åʵÀý # @param actionType ÐÐΪÀàÐÍ # @param actionDataList ÐÐΪÊý¾ÝÁбí # @param tick ʱ¼ä´Á # @return None def __AddFamilyArrestNote(curPlayer, familyId, actionType, actionDataList, tick): allFamilyActionManager = GameWorld.GetFamilyActionManager() familyAction = allFamilyActionManager.GetFamilyAction(familyId, actionType) familyActionCnt = familyAction.Count() arrestId = actionDataList[0] # ÐüÉÍÈÎÎñid for index in range(0, familyActionCnt): familyActionData = familyAction.At(index) value = familyActionData.GetValue1() if value == arrestId: #¸ÃÈÎÎñÒѾ­Íê³É return curPlayerName = curPlayer.GetName() #¸öÈËÌáʾ»÷ɱĿ±êÍê³É jiazu_hgg_0 »÷ɱÐüÉÍÄ¿±ê! PlayerControl.NotifyCode(curPlayer, "jiazu_hgg_0") #È«¼Ò×åÌáʾ jiazu_hgg_31379 °ï»á³ÉÔ±%sÍê³ÉÁËÈÎÎñ PlayerControl.FamilyNotify(familyId, "jiazu_hgg_31379", [curPlayerName]) #¼Ç¼»÷ɱÈÎÎñÐÅÏ¢ AddFamilyActionNote(curPlayerName, familyId, actionType, actionDataList, tick) #¼Ç¼ÐüÉÍ»÷ɱʼþÐÅÏ¢ AddFamilyActionNote(curPlayerName, familyId, ShareDefine.Def_ActionType_FamilyEvent, [ShareDefine.Def_FamilyActionEvent_Arrest, arrestId], tick) return ## Ôö¼ÓÍæ¼Ò¼Ò×åÐÐΪ # @param curName Ãû×Ö # @param familyId ¸ÃÐÐΪËùÊô¼Ò×åID # @param actionType ÐÐΪÀàÐÍ # @param actionDataList ÐÐΪÊý¾ÝÁбí # @param tick ʱ¼ä´Á # @param isClearNone ³¬¹ý¼Ç¼ʱÊÇ·ñÇå¿Õ×îÔçÊý¾Ý # @return ¼Ç¼ÊÇ·ñ³É¹¦ def AddFamilyActionNote(curName, familyId, actionType, actionDataList, tick, isClearNone=True, useData=""): if actionType not in ShareDefine.Def_ActionTypeList: #¼Ç¼ÐÐΪÀàÐÍ´íÎó GameWorld.ErrLog("¼Ç¼¼Ò×åÐÐΪÀàÐÍ:%s ´íÎó") return False #ËùÓмÒ×åÐÐΪ¶ÔÏó¹ÜÀíÆ÷ allFamilyActionManager = GameWorld.GetFamilyActionManager() familyAction = allFamilyActionManager.GetFamilyAction(familyId, actionType) familyActionCnt = familyAction.Count() if familyActionCnt >= ChConfig.ActionTypeSaveCnt.get(actionType, 0): if not isClearNone: #³¬¹ý¼Ç¼¼Ç¼²»ÁËÁË return False familyAction.SortByTime() # °´Ê±¼äÉýÐò familyAction.DelAction(0) # ɾ³ýµÚÒ»¸ö #Ìí¼ÓÒ»¸öÐÐΪ¶ÔÏó familyActionObj = familyAction.AddAction() #---ÉèÖÃÐÐΪ¶ÔÏóÊý¾Ý--- familyActionObj.SetFamilyId(familyId) # ÉèÖøÃÐÐΪËùÊô¼Ò×åId familyActionObj.SetActionType(actionType) # ÉèÖÃÐÐΪÀàÐÍ familyActionObj.SetName(curName) # ÉèÖÃÃû×Ö familyActionObj.SetUseData(useData, len(useData)) # ÉèÖÃ×Ô¶¨ÒåÊý¾Ý curTimeStr = GameWorld.GetCurrentDataTimeStr() curTimeTuple = time.strptime(curTimeStr, ChConfig.TYPE_Time_Format) curTimeNum = int(time.mktime(curTimeTuple)) familyActionObj.SetTime(curTimeNum) # ÉèÖÃʱ¼ä actionDataLen = len(actionDataList) if actionDataLen >= 1: familyActionObj.SetValue1(actionDataList[0]) if actionDataLen >= 2: familyActionObj.SetValue2(actionDataList[1]) if actionDataLen >= 3: familyActionObj.SetValue3(actionDataList[2]) if actionDataLen >= 4: familyActionObj.SetValue4(actionDataList[3]) if actionDataLen >= 5: familyActionObj.SetValue5(actionDataList[4]) if actionDataLen >= 6: familyActionObj.SetValue6(actionDataList[5]) return True ## ¼Ç¼ÉêÇë½øÈë¸Ã¼Ò×åµÄÐÅÏ¢ # @param curPlayer: Íæ¼ÒʵÀý # @param actionType: ÐÐΪÀàÐÍ # @param actionDataList: ÐÐΪÊý¾ÝÁбí # @param tick: ʱ¼ä´Á # @return def __RequestAddFamilyNote(curPlayer, actionType, actionDataList, tick): requestAddFamilyID = actionDataList[0] # ÉêÇë½øÈëµÄ¼Ò×å fightPower = actionDataList[1] if len(actionDataList) > 1 else PlayerControl.GetFightPower(curPlayer) requestPlayerName = curPlayer.GetName() # ÉêÇëµÄÍæ¼ÒÃû×Ö familyManager = GameWorld.GetFamilyManager() curFamily = familyManager.FindFamily(requestAddFamilyID) if not curFamily: #ûÓиüÒ×å GameWorld.ErrLog("__RequestAddFamilyNote Err not Id = %s family" % (requestAddFamilyID)) return #¼Ò×åÉóºËÉèÖþܾøÍæ¼Ò¼ÓÈë curAcceptJoinType = curFamily.GetAcceptJoin() if curAcceptJoinType == ShareDefine.FamilyAcceptJoin_Refuse: GameWorld.Log("__RequestAddFamilyNote FamilyID = %s RefuseJoin" % requestAddFamilyID, curPlayer.GetID()) return #¼Ò×åÉóºËÉèÖÃÔÊÐíÍæ¼ÒÖ±½Ó¼ÓÈë if curAcceptJoinType == ShareDefine.FamilyAcceptJoin_Agree: import PlayerFamily maxMemberCnt = PlayerFamily.GetFamilySetting(curFamily, ChConfig.Def_FamilySetting_MaxMemberCnt) if curFamily.GetCount() < maxMemberCnt and curPlayer.GetLV() >= ChConfig.Def_Family_JionMinLV: #Ö±½Ó¼ÓÈË PlayerFamily.DoPlayerJionFamily(curFamily, curPlayer, IPY_GameServer.fmlMember) #֪ͨËùÓмÒ×å³ÉÔ±, Õâ¸öÈ˼ÓÈëÁ˼Ò×å PlayerFamily.NotifyAllFamilyMemberMsg(curFamily, curPlayer, "XW_JZ_EnterFamily", [curPlayer.GetName()]) PlayerControl.NotifyCode(curPlayer, 'XW_JZ_EnterFamilyInfo', [curFamily.GetName()]) #֪ͨ¿Í»§¶Ë¼Ò×åÐÅÏ¢¸Ä±ä curFamily.Broadcast_FamilyChange() GameWorld.Log("__RequestAddFamilyNote FamilyID = %s AgreeJoin" % requestAddFamilyID, curPlayer.GetID()) return allFamilyActionManager = GameWorld.GetFamilyActionManager() familyAction = allFamilyActionManager.GetFamilyAction(requestAddFamilyID, actionType) familyActionCnt = familyAction.Count() for index in range(0, familyActionCnt): familyActionData = familyAction.At(index) name = familyActionData.GetName() if name == requestPlayerName: #jiazu_pan_143504:ÄúÒѾ­Ïò¸Ã°ï»áÌá½»Èë°ïÉêÇëÁË£¬ÇëµÈ´ý°ï»á¹ÜÀíÈËÔ±ÉóÅú! PlayerControl.NotifyCode(curPlayer, "jiazu_pan_143504") return #Íæ¼ÒId, µÈ¼¶,Ö°Òµ,Õ½¶·Á¦ actionDataList = [curPlayer.GetID(), curPlayer.GetLV(), curPlayer.GetJob(), fightPower % ChConfig.Def_PerPointValue, fightPower / ChConfig.Def_PerPointValue] result = AddFamilyActionNote(requestPlayerName, requestAddFamilyID, actionType, actionDataList, tick, False) if not result: #jiazu_pan_141056:¶Ô²»Æð£¬Ä¿±ê°ï»áÉêÇëÈë°ïÁбíÒÑÂú£¬ÉêÇëÈë°ïʧ°Ü£¡ PlayerControl.NotifyCode(curPlayer, "jiazu_pan_141056") else: sendMsg = str([requestAddFamilyID]) # ¸æËßMapÍæ¼ÒÉêÇë¼ÓÈë¼Ò×å³É¹¦ curPlayer.MapServer_QueryPlayerResult(0, 0, 'FamilyAdd', sendMsg, len(sendMsg)) #jiazu_pan_500807:ÉêÇëÈë°ï³É¹¦£¡ÇëµÈ´ý°ï»á¹ÜÀíÈËÔ±ÉóÅú£¡ PlayerControl.NotifyCode(curPlayer, "jiazu_pan_500807") #֪ͨ NotifyFamilyRequestInfo(curFamily) return #Íⲿµ÷Óú¯Êý #=============================================================================== ## ɾ³ý¼Ò×åËùÓÐÐÐΪÊý¾Ý # @param familyId: °ï»áId # @param actionType: ÐÐΪÀàÐÍ,СÓÚ0ÔòĬÈÏɾ³ýËùÓÐÐÐΪ # @param day: Ïà²îÌìÊý # @param playerID: ¼Ç¼µÄÍæ¼ÒID # @return: -1-È«²¿É¾³ý£»>=0-ɾ³ýµÄ¸öÊý def ClearFamilyAction(familyId, actionType= -1, day=0, playerID=0, useData=""): #ËùÓмÒ×åÐÐΪ¶ÔÏó¹ÜÀíÆ÷ allFamilyActionManager = GameWorld.GetFamilyActionManager() if day == 0 and playerID == 0 and useData == "": if actionType > 0: allFamilyActionManager.DelFamilyAction(familyId, actionType) __DoDelFamilyActionOverLogic(familyId, actionType) return -1 for actionType in ShareDefine.Def_ActionTypeList: allFamilyActionManager.DelFamilyAction(familyId, actionType) __DoDelFamilyActionOverLogic(familyId, actionType) return -1 familyAction = allFamilyActionManager.GetFamilyAction(familyId, actionType) familyActionCnt = familyAction.Count() familyAction.SortByTime() # °´Ê±¼äÉýÐò clearIndexList = [] # ɾ³ýµÄË÷ÒýÁбí for index in range(0, familyActionCnt): familyActionData = familyAction.At(index) noteTime = int(familyActionData.GetTime()) noteTime = time.strftime(ChConfig.TYPE_Time_Format, time.localtime(noteTime)) pastTimeDay = int(GameWorld.GetPastHour(noteTime) / 24) if day and pastTimeDay < day: continue if playerID != 0 and familyActionData.GetValue1() != playerID: continue if useData and familyActionData.GetUseData() != useData: continue clearIndexList.append(index) if clearIndexList == []: return 0 #ɾ³ý³¬¹ýʱ¼äµÄÐÐΪÊý¾Ý if len(clearIndexList) == familyActionCnt: #ËùÓÐÊý¾Ý¶¼³¬¹ýʱ¼ä, ɾ³ýÕû¸ö¼Ç¼ allFamilyActionManager.DelFamilyAction(familyId, actionType) __DoDelFamilyActionOverLogic(familyId, actionType) return -1 clearCnt = 0 # ÒѾ­É¾³ýÊýÁ¿ for index in clearIndexList: clearIndex = index - clearCnt familyAction.DelAction(clearIndex) clearCnt += 1 __DoDelFamilyActionOverLogic(familyId, actionType) return clearCnt def __DoDelFamilyActionOverLogic(familyId, actionType): ## ɾ³ý¼Ò×åÐÐΪ¼Ç¼ºóµÄ²Ù×÷ family = GameWorld.GetFamilyManager().FindFamily(familyId) if not family: return if actionType == ShareDefine.Def_ActionType_FamilyAdd: NotifyFamilyRequestInfo(family) return ## »ñÈ¡ÐüÉÍÈÎÎñÍê³ÉÇé¿ö # @param curPlayer: Íæ¼ÒʵÀý # @param arrestId: ÐüÉÍÈÎÎñid # @return ÈÎÎñÊÇ·ñÍê³É def GetFamilyArrestOverState(curPlayer, arrestId): allFamilyActionManager = GameWorld.GetFamilyActionManager() familyAction = allFamilyActionManager.GetFamilyAction(curPlayer.GetFamilyID(), ShareDefine.Def_ActionType_FamilyArrest) familyActionCnt = familyAction.Count() if familyActionCnt <= 0: #δ¼Ç¼, ûÓÐÍê³É return False for index in range(0, familyActionCnt): familyActionData = familyAction.At(index) value = familyActionData.GetValue1() if value == arrestId: #¸ÃÈÎÎñÒѾ­Íê³É return True return False #=============================================================================== # //B0 25 ÇëÇó¼Ò×åÐüÉÍÈÎÎñÍê³ÉÇé¿ö #tagQueryFamilyArrestOverState # # struct tagQueryFamilyArrestOverState # # { # tagHead Head; # }; #=============================================================================== ## ÇëÇó¼Ò×åÐüÉÍÈÎÎñÍê³ÉÇé¿ö # @param index Íæ¼ÒË÷Òý # @param clientData ·â°üÊý¾Ý½á¹¹Ìå # @param tick ʱ¼ä´Á # @return None def QueryFamilyArrestOverState(index, cliendData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) familyId = curPlayer.GetFamilyID() if not familyId: #µ±Ç°Íæ¼ÒûÓмÒ×å return allFamilyActionManager = GameWorld.GetFamilyActionManager() familyAction = allFamilyActionManager.GetFamilyAction(familyId, ShareDefine.Def_ActionType_FamilyArrest) familyActionCnt = familyAction.Count() packList = [] for index in range(0, familyActionCnt): familyActionData = familyAction.At(index) playerName = familyActionData.GetName() # Íê³ÉÈÎÎñµÄÍæ¼ÒÃû×Ö arrestId = familyActionData.GetValue1() # Íê³ÉµÄÈÎÎñId familyArrestOverState = ChPyNetSendPack.tagFamilyArrestOverState() familyArrestOverState.NameLen = len(playerName) familyArrestOverState.Name = playerName familyArrestOverState.ID = arrestId familyArrestOverState.OverState = 1 packList.append(familyArrestOverState) familyArrestOverStateInfo = ChPyNetSendPack.tagFamilyArrestOverStateInfo() familyArrestOverStateInfo.Count = len(packList) familyArrestOverStateInfo.ArrestOverStateInfo = packList #·¢°ü¸ø¿Í»§¶Ë NetPackCommon.SendFakePack(curPlayer, familyArrestOverStateInfo) return #=============================================================================== # //A4 02 ²é¿´ÉêÇëÈë»áµÄÍæ¼Ò #tagCGViewFamilyRequestInfo # # struct tagCGViewFamilyRequestInfo # { # tagHead Head; # }; #=============================================================================== ## ²é¿´ÉêÇë°ï»áµÄ³ÉÔ±ÐÅÏ¢ # @param index Íæ¼ÒË÷Òý # @param clientData ·â°üÊý¾Ý½á¹¹Ìå # @param tick ʱ¼ä´Á # @return None def ViewFamilyRequestInfo(curPlayer): if PlayerControl.GetIsTJG(curPlayer): return familyID = curPlayer.GetFamilyID() if familyID <= 0: #¸ÃÍæ¼ÒûÓмÒ×å GameWorld.ErrLog("ViewFamilyRequestInfo playerID = %s not family" % (curPlayer.GetID())) return allFamilyActionManager = GameWorld.GetFamilyActionManager() familyAction = allFamilyActionManager.GetFamilyAction(familyID, ShareDefine.Def_ActionType_FamilyAdd) familyActionCnt = familyAction.Count() packList = [] for index in range(0, familyActionCnt): familyActionData = familyAction.At(index) requestPlayerName = familyActionData.GetName() # ÉêÇëµÄÍæ¼ÒÃû×Ö requestTime = familyActionData.GetTime() # ÉêÇëµÄʱ¼ä playerID = familyActionData.GetValue1() # ID playerLV = familyActionData.GetValue2() # µÈ¼¶ playerJob = familyActionData.GetValue3() # Ö°Òµ fightPower = familyActionData.GetValue4() # Õ½¶·Á¦ fightPower += familyActionData.GetValue5() * ChConfig.Def_PerPointValue tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID) if not tagPlayer: isOnLine = 0 else: isOnLine = 1 playerLV = tagPlayer.GetLV() if PlayerControl.GetFightPower(tagPlayer) > fightPower: fightPower = PlayerControl.GetFightPower(tagPlayer) memberInfo = ChPyNetSendPack.tagtMemberInfo() memberInfo.PlayerID = playerID memberInfo.NameLen = len(requestPlayerName) memberInfo.Name = requestPlayerName memberInfo.PlayerLV = playerLV memberInfo.PlayeJob = playerJob memberInfo.PlayeFightPower = fightPower % ChConfig.Def_PerPointValue memberInfo.PlayeFightPowerEx = fightPower / ChConfig.Def_PerPointValue memberInfo.RequestTime = requestTime memberInfo.IsOnLine = isOnLine packList.append(memberInfo) requestMemberInfo = ChPyNetSendPack.tagGCViewFamilyRequestInfo() requestMemberInfo.Clear() requestMemberInfo.RequestMemberCount = familyActionCnt requestMemberInfo.MemberInfo = packList #·¢°ü¸ø¿Í»§¶Ë NetPackCommon.SendFakePack(curPlayer, requestMemberInfo) return def NotifyFamilyRequestInfo(curFamily): import PlayerFamily playerManager = GameWorld.GetPlayerManager() for i in range(0, curFamily.GetCount()): notifyMember = curFamily.GetAt(i) notifyPlayer = playerManager.FindPlayerByID(notifyMember.GetPlayerID()) if notifyPlayer == None: continue if not PlayerFamily.GetFamilyMemberHasPow(notifyMember, ChConfig.Def_PurviewDictKey_CanCall): continue ViewFamilyRequestInfo(notifyPlayer) return #// A4 08 ²éѯ¼Ò×åÐÐΪÐÅÏ¢ #tagCGQueryFamilyAction # #struct tagCGQueryFamilyAction #{ # tagHead Head; # BYTE ActionType; // ÐÐΪÀàÐÍ # DWORD FamilyID; // ¼Ò×åID #}; #=============================================================================== ## ÇëÇó¼Ò×åÐÐΪÐÅÏ¢ # @param index Íæ¼ÒË÷Òý # @param clientData ·â°üÊý¾Ý½á¹¹Ìå # @param tick ʱ¼ä´Á # @return None def QueryFamilyActionInfo(index, cliendData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if not curPlayer: return actionType = cliendData.ActionType familyID = cliendData.FamilyID if actionType not in ChConfig.Def_QueryNoLimit_ActionTypeList: playerFamilyId = curPlayer.GetFamilyID() if not playerFamilyId: return if playerFamilyId != familyID: return SendFamilyActionInfo(curPlayer, familyID, actionType) return ## ·¢ËͼÒ×åÐÐΪ # @param curPlayer Íæ¼Ò # @param familyID # @param actionType # @return None def SendFamilyActionInfo(curPlayer, familyID, actionType): familyAction = GameWorld.GetFamilyActionManager().GetFamilyAction(familyID, actionType) familyActionCnt = familyAction.Count() actionInfoPack = ChPyNetSendPack.tagGCFamilyActionInfo() actionInfoPack.Clear() actionInfoPack.FamilyID = familyID actionInfoPack.ActionType = actionType actionInfoPack.FamilyActionList = [] for index in xrange(familyActionCnt): familyActionData = familyAction.At(index) actionData = ChPyNetSendPack.tagGCFamilyAction() actionData.Clear() 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.GetUseData() actionData.UseDataLen = len(actionData.UseData) actionInfoPack.FamilyActionList.append(actionData) actionInfoPack.Count = len(actionInfoPack.FamilyActionList) if curPlayer: NetPackCommon.SendFakePack(curPlayer, actionInfoPack) return # ûÓÐÖ¸¶¨Íæ¼ÒµÄÇé¿öÏÂ֪ͨȫսÃË family = GameWorld.GetFamilyManager().FindFamily(familyID) if not family: return for index in xrange(family.GetCount()): curMember = family.GetAt(index) curPlayer = curMember.GetPlayer() #²»ÔÚÏß if curPlayer == None: continue NetPackCommon.SendFakePack(curPlayer, actionInfoPack) return def SendFamilyAction(actionDataList, curPlayer=None): ## ͬ²½Ö¸¶¨action # @param actionDataList: Ö§³ÖÁбí»òÖ¸¶¨actionData if not isinstance(actionDataList, list): actionDataList = [actionDataList] if not actionDataList: return familyActionData = actionDataList[0] familyID = familyActionData.GetFamilyId() actionInfoPack = ChPyNetSendPack.tagGCFamilyActionInfo() actionInfoPack.Clear() actionInfoPack.FamilyID = familyID actionInfoPack.ActionType = familyActionData.GetActionType() actionInfoPack.FamilyActionList = [] for familyActionData in actionDataList: actionData = ChPyNetSendPack.tagGCFamilyAction() actionData.Clear() 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.GetUseData() actionData.UseDataLen = len(actionData.UseData) actionInfoPack.FamilyActionList.append(actionData) actionInfoPack.Count = len(actionInfoPack.FamilyActionList) if curPlayer: NetPackCommon.SendFakePack(curPlayer, actionInfoPack) return # ûÓÐÖ¸¶¨Íæ¼ÒµÄÇé¿öÏÂ֪ͨȫսÃË family = GameWorld.GetFamilyManager().FindFamily(familyID) if not family: return for index in xrange(family.GetCount()): curMember = family.GetAt(index) curPlayer = curMember.GetPlayer() #²»ÔÚÏß if curPlayer == None: continue NetPackCommon.SendFakePack(curPlayer, actionInfoPack) return ## ɾ³ýʱ»ú: 1-½µÎªÆÕͨ³ÉÔ±£»2-Í˳ö¼Ò×å def DelFamilyOfficerModelEquip(familyID, delPlayerID): if delPlayerID <= 0: return clearCnt = ClearFamilyAction(familyID, ShareDefine.Def_ActionType_OfficerModelEquip, playerID=delPlayerID) GameWorld.DebugLog("ɾ³ý¼Ò×å¹ÙԱģÐÍ×°±¸ÐÅÏ¢£¡familyID=%s,playerID=%s,delCnt=%s" % (familyID, delPlayerID, clearCnt)) return ## ¸üмÒ×å¹ÙԱģÐÍ×°±¸ÐÅÏ¢ def UpdFamilyOfficerModelEquip(familyID, playerID): curFamily = GameWorld.GetFamilyManager().FindFamily(familyID) if curFamily == None: return curMember = curFamily.FindMember(playerID) if curMember == None: return memberLV = curMember.GetFamilyLV() # ÆÕͨ³ÉÔ±²»¼Ç¼ if memberLV == IPY_GameServer.fmlMember: #GameWorld.DebugLog("ÆÕͨ³ÉÔ±²»¼Ç¼¼Ò×å¹ÙԱģÐÍ×°±¸ÐÅÏ¢£¡") return modelEquipInfoList = [] #modelEquipInfoList = PlayerViewCache.GetPlayerCacheEquipView(playerID) if not modelEquipInfoList: #GameWorld.DebugLog("ÕÒ²»µ½¼Ò×å¹ÙԱģÐÍ×°±¸ÐÅÏ¢, ²»¼Ç¼£¡familyID=%s,playerID=%s" % (familyID, playerID)) return findActionObj = None actionType = ShareDefine.Def_ActionType_OfficerModelEquip familyAction = GameWorld.GetFamilyActionManager().GetFamilyAction(familyID, actionType) familyActionCnt = familyAction.Count() for i in xrange(familyActionCnt): actionData = familyAction.At(i) if actionData.GetValue1() != playerID: continue findActionObj = actionData break if not findActionObj: if familyActionCnt >= ChConfig.ActionTypeSaveCnt.get(actionType, 0): GameWorld.ErrLog("UpdFamilyOfficerModelEquip familyActionCnt=%s ÒÑ´ïµ½×î´óÖµ£¡" % familyActionCnt) findActionObj = familyAction.AddAction() memberName = curMember.GetName() memberJob = curMember.GetJob() #---ÉèÖÃÐÐΪ¶ÔÏóÊý¾Ý--- findActionObj.SetFamilyId(familyID) findActionObj.SetActionType(actionType) findActionObj.SetName(memberName) findActionObj.SetValue1(playerID) findActionObj.SetValue2(memberJob) findActionObj.SetValue3(memberLV) useData = str(modelEquipInfoList) findActionObj.SetUseData(useData, len(useData)) # ÉèÖÃ×Ô¶¨ÒåÊý¾Ý GameWorld.DebugLog("¸üмÒ×å¹ÙԱģÐÍ×°±¸ÐÅÏ¢: familyID=%s,playerID=%s,name=%s,job=%s,memLV=%s,useData=%s,actionNowCnt=%s" % (familyID, playerID, memberName, memberJob, memberLV, str(useData), familyAction.Count())) return