#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package PlayerActFamilyCTGAssist
|
#
|
# @todo:ÏÉÃ˳äÖµ»¥Öú
|
# @author hxp
|
# @date 2024-06-21
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ÏÉÃ˳äÖµ»¥Öú
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2024-06-21 19:30"""
|
#-------------------------------------------------------------------------------
|
|
import GameWorld
|
import PlayerFamilyAction
|
import ShareDefine
|
import PlayerFamily
|
import ChConfig
|
|
ActionType = ShareDefine.Def_ActionType_FamilyCTGAssist
|
|
def GetFAActNum(actionData): return actionData.GetValue1()
|
def SetFAActNum(actionData, actNum): return actionData.SetValue1(actNum)
|
|
def GetFAActPlayerIDInfo(actionData):
|
playerIDInfo = [[], {}]
|
useData = actionData.GetUseData()
|
if useData:
|
try:
|
playerIDInfo = eval(useData)
|
except:
|
playerIDInfo = [[], {}]
|
return playerIDInfo
|
def SetFAActPlayerIDInfo(actionData, ctgPlayerIDList, getAwardPlayerCountDict):
|
useData = str([ctgPlayerIDList, getAwardPlayerCountDict]).replace(" ", "")
|
actionData.SetUseData(useData, len(useData))
|
return
|
def ClearFAActPlayerIDInfo(actionData):
|
SetFAActPlayerIDInfo(actionData, [], {})
|
return
|
|
def GetFamilyCTGAssistActionData(familyID, actNum):
|
## »ñÈ¡Action
|
findActionData = None
|
familyAction = GameWorld.GetFamilyActionManager().GetFamilyAction(familyID, ActionType)
|
for index in range(0, familyAction.Count()):
|
actionData = familyAction.At(index)
|
if GetFAActNum(actionData) == actNum:
|
findActionData = actionData
|
break
|
|
if not findActionData:
|
findActionData = familyAction.AddAction()
|
findActionData.SetFamilyId(familyID)
|
findActionData.SetActionType(ActionType)
|
SetFAActNum(findActionData, actNum)
|
ClearFAActPlayerIDInfo(findActionData)
|
|
return findActionData
|
|
def OnActStart(actNum):
|
## »î¶¯¿ªÆô
|
|
familyManager = GameWorld.GetFamilyManager()
|
for i in range(0, familyManager.GetCount()):
|
family = familyManager.GetAt(i)
|
familyID = family.GetID()
|
actionData = GetFamilyCTGAssistActionData(familyID, actNum)
|
ClearFAActPlayerIDInfo(actionData) # ÖØÖóäÖµ¼´ÁìÈ¡ÈËÔ±ID¼Ç¼
|
|
PlayerFamilyAction.SendFamilyActionInfo(None, familyID, ActionType)
|
|
return
|
|
def MapServer_FamilyCTGAssist(curPlayer, msgList):
|
mapID = curPlayer.GetRealMapID()
|
playerID = curPlayer.GetPlayerID()
|
GameWorld.DebugLog("MapServer_FamilyCTGAssist mapID=%s,msgList=%s" % (mapID, msgList), playerID)
|
if not msgList:
|
return
|
|
msgType, dataMsg = msgList
|
ret = None
|
|
if msgType == "PlayerCTG":
|
ret = __OnPlayerCTG(curPlayer, dataMsg)
|
|
elif msgType == "FamilyCTGAssistAward":
|
ret = __OnFamilyCTGAssistAward(curPlayer, dataMsg)
|
|
if ret == None:
|
return
|
return msgList + (ret if isinstance(ret, list) else [ret])
|
|
def __OnPlayerCTG(curPlayer, dataMsg):
|
## ÓÐÍæ¼Ò³äÖµ
|
actNumList = dataMsg[0]
|
familyID = curPlayer.GetFamilyID()
|
if not familyID:
|
return
|
|
isChange = False
|
playerID = curPlayer.GetPlayerID()
|
for actNum in actNumList:
|
actionData = GetFamilyCTGAssistActionData(familyID, actNum)
|
|
ctgPlayerIDList, getAwardPlayerCountDict = GetFAActPlayerIDInfo(actionData)
|
if playerID in ctgPlayerIDList:
|
continue
|
|
isChange = True
|
ctgPlayerIDList.append(playerID)
|
SetFAActPlayerIDInfo(actionData, ctgPlayerIDList, getAwardPlayerCountDict)
|
GameWorld.Log("ÏÉÃ˳äÖµ»¥ÖúÈËÊý±ä¸ü: actNum=%s,familyID=%s,л¥ÖúÍæ¼Ò=%s,¸üл¥ÖúÈËÊý=%s, %s"
|
% (actNum, familyID, playerID, len(ctgPlayerIDList), ctgPlayerIDList))
|
|
if not isChange:
|
return
|
|
PlayerFamilyAction.SendFamilyActionInfo(None, familyID, ActionType)
|
return
|
|
def __OnFamilyCTGAssistAward(curPlayer, dataMsg):
|
## Íæ¼ÒÁì½±
|
|
actNum, ctgPlayers, _, _ = dataMsg
|
familyID = curPlayer.GetFamilyID()
|
if not familyID:
|
return
|
|
playerID = curPlayer.GetPlayerID()
|
|
actionData = GetFamilyCTGAssistActionData(familyID, actNum)
|
|
ctgPlayerIDList, getAwardPlayerCountDict = GetFAActPlayerIDInfo(actionData)
|
|
if len(ctgPlayerIDList) < ctgPlayers:
|
GameWorld.DebugLog("ÏÉÃ˳äÖµ»¥ÖúËùÐè³äÖµÈËÊý²»×ã: actNum=%s,familyID=%s,ÒÑ»¥ÖúÈËÊý=%s < %s, %s"
|
% (actNum, familyID, len(ctgPlayerIDList), ctgPlayers, ctgPlayerIDList), playerID)
|
return
|
|
curFamily = GameWorld.GetFamilyManager().FindFamily(familyID)
|
if not curFamily:
|
return
|
maxMemberCnt = PlayerFamily.GetFamilySetting(curFamily, ChConfig.Def_FamilySetting_MaxMemberCnt)
|
|
getAwardPlayerCount = getAwardPlayerCountDict.get(str(ctgPlayers), 0)
|
if getAwardPlayerCount >= maxMemberCnt:
|
GameWorld.DebugLog("ÏÉÃ˳äÖµ»¥ÖúÁì½±ÈËÊýÒÑ´ïÉÏÏÞ: actNum=%s,familyID=%s,ctgPlayers=%s,getAwardPlayerCount=%s >= %s"
|
% (actNum, familyID, ctgPlayers, getAwardPlayerCount, maxMemberCnt), playerID)
|
return
|
|
getAwardPlayerCount += 1
|
getAwardPlayerCountDict[str(ctgPlayers)] = getAwardPlayerCount
|
|
SetFAActPlayerIDInfo(actionData, ctgPlayerIDList, getAwardPlayerCountDict)
|
GameWorld.Log("ÏÉÃ˳äÖµ»¥ÖúÁì½±ÈËÊý¸üÐÂ: actNum=%s,familyID=%s,ctgPlayers=%s,getAwardPlayerCount=%s, %s"
|
% (actNum, familyID, ctgPlayers, getAwardPlayerCount, getAwardPlayerCountDict), playerID)
|
|
PlayerFamilyAction.SendFamilyActionInfo(None, familyID, ActionType)
|
return True
|