#!/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
|
|
|
|
|