hxp
2026-01-29 b30b110fc4e5901fde2cd4e4e6444bbd32980d86
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyTaofa.py
@@ -78,11 +78,15 @@
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBuZhenState, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaAnger, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaLeaveGetCnt, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxTotalGetCnt, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxLastTime, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxContribCnt, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurt, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtEx, 0)
    #玩家自己过天非时间过天的,需要刷新一下
    familyID = curPlayer.GetFamilyID()
    curFamily = DBDataMgr.GetFamilyMgr().FindFamily(familyID)
    RefreshPlayerAwardBoxCnt(curFamily, curPlayer, unSyncIDList=[curPlayer.GetPlayerID()])
    SyncTaofaInfo(curPlayer)
    return
@@ -111,8 +115,8 @@
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBuZhenState, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaAnger, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaLeaveGetCnt, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxTotalGetCnt, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxLastTime, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxContribCnt, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurt, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtEx, 0)
@@ -136,6 +140,9 @@
    ## 玩家退出了公会,针对玩家个人的处理
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaAnger, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt, 0)
    totalGetCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxTotalGetCnt)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaLeaveGetCnt, totalGetCnt)
    GameWorld.DebugLog("退出公会记录讨伐已累计领取宝箱数: totalGetCnt=%s" % totalGetCnt)
    SyncTaofaInfo(curPlayer)
    return
@@ -145,45 +152,45 @@
    PlayerFamily.SendFamilyActionInfo(curPlayer, familyID, ActionType)
    return
def RefreshFamilyBuZhenInfo(family):
    ## 刷新公会公共布阵信息
    familyID = family.GetID()
    curTime = int(time.time())
    bzDuration = IpyGameDataPY.GetFuncCfg("FamilyTaofaBuzhen", 4) * 60 # 有效时长秒
    maxLayer = IpyGameDataPY.GetFuncCfg("FamilyTaofaBuzhen", 3)
    gLayer = 0
    gEndTime = 0
    gActionData = None
    familyAction = DBDataMgr.GetFamilyActionMgr().GetFamilyAction(familyID, ActionType)
    for index in range(0, familyAction.Count()):
        actionData = familyAction.At(index)
        dataID = GetFAPlayerID(actionData)
        if dataID == ActionGlobalID:
            gActionData = actionData
            continue
        bzTime = GetFABuzhenTime(actionData)
        if not bzTime:
            continue
        endTime = bzTime + bzDuration
        if endTime <= curTime:
            continue
        if not maxLayer or gLayer < maxLayer:
            gLayer += 1
        if gEndTime < endTime:
            gEndTime = endTime
    GameWorld.DebugLog("刷新公会公共布阵信息: familyID=%s,gLayer=%s,gEndTime=%s" % (familyID, gLayer, GameWorld.ChangeTimeNumToStr(gEndTime)))
    if not gActionData:
        gActionData = familyAction.AddAction()
        SetFAPlayerID(gActionData, ActionGlobalID)
    SetFABuzhenEndTime(gActionData, gEndTime)
    SetFABuzhenLayer(gActionData, gLayer)
    PlayerFamily.SendFamilyAction(gActionData)
    return
#def RefreshFamilyBuZhenInfo(family):
#    ## 刷新公会公共布阵信息
#    familyID = family.GetID()
#    curTime = int(time.time())
#    bzDuration = IpyGameDataPY.GetFuncCfg("FamilyTaofaBuzhen", 4) * 60 # 有效时长秒
#    maxLayer = IpyGameDataPY.GetFuncCfg("FamilyTaofaBuzhen", 3)
#
#    gLayer = 0
#    gEndTime = 0
#    gActionData = None
#    familyAction = DBDataMgr.GetFamilyActionMgr().GetFamilyAction(familyID, ActionType)
#    for index in range(0, familyAction.Count()):
#        actionData = familyAction.At(index)
#        dataID = GetFAPlayerID(actionData)
#        if dataID == ActionGlobalID:
#            gActionData = actionData
#            continue
#        bzTime = GetFABuzhenTime(actionData)
#        if not bzTime:
#            continue
#        endTime = bzTime + bzDuration
#        if endTime <= curTime:
#            continue
#
#        if not maxLayer or gLayer < maxLayer:
#            gLayer += 1
#
#        if gEndTime < endTime:
#            gEndTime = endTime
#
#    GameWorld.DebugLog("刷新公会公共布阵信息: familyID=%s,gLayer=%s,gEndTime=%s" % (familyID, gLayer, GameWorld.ChangeTimeNumToStr(gEndTime)))
#    if not gActionData:
#        gActionData = familyAction.AddAction()
#        SetFAPlayerID(gActionData, ActionGlobalID)
#
#    SetFABuzhenEndTime(gActionData, gEndTime)
#    SetFABuzhenLayer(gActionData, gLayer)
#    PlayerFamily.SendFamilyAction(gActionData)
#    return
def RefreshPlayerAwardBoxCnt(family, curPlayer=None, unSyncIDList=[]):
    ## 刷新玩家可领取的宝箱数
@@ -231,37 +238,33 @@
def __doUpdPlayerAwardBoxCnt(curPlayer, member, memContribDict, awardBoxMax, unSyncIDList):
    playerID = curPlayer.GetPlayerID()
    joinTime = member.GetJoinTime()
    boxLastTime = max(curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxLastTime), joinTime) # 与加入时间取最大
    leaveGetCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaLeaveGetCnt) # 上次离开公会时累计领取数
    boxTotalGetCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxTotalGetCnt) # 已领取宝箱数
    curFamilyGetCnt = boxTotalGetCnt - leaveGetCnt # 来到本公会后累计领取数
    boxUnGetCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt) # 未领取宝箱数
    canAddBoxMax = awardBoxMax - boxTotalGetCnt - boxUnGetCnt # 还可领取的箱子数
    if canAddBoxMax <= 0:
        GameWorld.DebugLog("    成员可领取宝箱已达上限不刷新: playerID=%s,boxLastTime=%s,boxTotalGetCnt(%s)+boxUnGetCnt(%s) >= %s"
                           % (playerID, boxLastTime, boxTotalGetCnt, boxUnGetCnt, awardBoxMax))
        GameWorld.DebugLog("    成员可领取宝箱已达上限不刷新: playerID=%s,boxTotalGetCnt(%s)+boxUnGetCnt(%s) >= %s"
                           % (playerID, boxTotalGetCnt, boxUnGetCnt, awardBoxMax))
        return
    
    updBoxLastTime = boxLastTime
    addUnGetBox = 0
    curFamilyCanGet = 0 # 在本公会累计可领取箱子数
    for contribList in memContribDict.values():
        if addUnGetBox >= canAddBoxMax:
            break
        for atkTime, contribBoxCnt in contribList:
            if boxLastTime >= atkTime:
            if joinTime >= atkTime:
                #GameWorld.DebugLog("    加入公会之前的箱子不能领取: joinTime=%s > atkTime(%s),contribBoxCnt=%s" % (joinTime, atkTime, contribBoxCnt))
                continue
            updBoxLastTime = max(updBoxLastTime, atkTime)
            addUnGetBox += contribBoxCnt
            if addUnGetBox >= canAddBoxMax:
                break
            curFamilyCanGet += contribBoxCnt
            
    addUnGetBox = min(curFamilyCanGet - curFamilyGetCnt - boxUnGetCnt, canAddBoxMax)
    if addUnGetBox <= 0:
        GameWorld.DebugLog("    成员当前没有可领取的宝箱不刷新: playerID=%s,boxLastTime=%s,boxTotalGetCnt=%s,boxUnGetCnt=%s,awardBoxMax=%s,canAddBoxMax=%s"
                           % (playerID, boxLastTime, boxTotalGetCnt, boxUnGetCnt, awardBoxMax, canAddBoxMax))
        GameWorld.DebugLog("    成员当前没有可领取的宝箱不刷新: playerID=%s,curFamilyCanGet=%s,curFamilyGetCnt=%s(%s-%s),boxUnGetCnt=%s,awardBoxMax=%s,canAddBoxMax=%s"
                           % (playerID, curFamilyCanGet, curFamilyGetCnt, boxTotalGetCnt, leaveGetCnt, boxUnGetCnt, awardBoxMax, canAddBoxMax))
        return
    updBoxUnGetCnt = boxUnGetCnt + addUnGetBox
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt, updBoxUnGetCnt)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxLastTime, updBoxLastTime)
    GameWorld.DebugLog("    成员可领取的宝箱数: playerID=%s,addUnGetBox=%s,updBoxUnGetCnt=%s,updBoxLastTime=%s,boxLastTime=%s,boxTotalGetCnt=%s,boxUnGetCnt=%s,awardBoxMax=%s,canAddBoxMax=%s"
                       % (playerID, addUnGetBox, updBoxUnGetCnt, updBoxLastTime, boxLastTime, boxTotalGetCnt, boxUnGetCnt, awardBoxMax, canAddBoxMax))
    GameWorld.DebugLog("    成员可领取的宝箱数: playerID=%s,addUnGetBox=%s,updBoxUnGetCnt=%s,curFamilyCanGet=%s,curFamilyGetCnt=%s(%s-%s),boxUnGetCnt=%s,awardBoxMax=%s,canAddBoxMax=%s"
                       % (playerID, addUnGetBox, updBoxUnGetCnt, curFamilyCanGet, curFamilyGetCnt, boxTotalGetCnt, leaveGetCnt, boxUnGetCnt, awardBoxMax, canAddBoxMax))
    if not unSyncIDList or playerID not in unSyncIDList:
        SyncTaofaInfo(curPlayer)
    return
@@ -322,11 +325,11 @@
        return
    gLayer, gActionData = GetFamilyBuzhenLayer(familyID)
    bzDuration = IpyGameDataPY.GetFuncCfg("FamilyTaofaBuzhen", 4) * 60 # 有效时长秒
    maxLayer = IpyGameDataPY.GetFuncCfg("FamilyTaofaBuzhen", 3)
    gEndTime = int(time.time()) + bzDuration # 直接覆盖更新
    if not maxLayer or gLayer < maxLayer:
        gLayer += 1
    gLayer += 1 # 布阵不限制次数,直接加
    #if not maxLayer or gLayer < maxLayer:
    #    gLayer += 1
    GameWorld.DebugLog("公会讨伐布阵: gLayer=%s,gEndTime=%s" % (gLayer, GameWorld.ChangeTimeNumToStr(gEndTime)), playerID)
    # 公共信息
    SetFABuzhenEndTime(gActionData, gEndTime)
@@ -369,6 +372,8 @@
    
    # 计算属性
    gLayer, _ = GetFamilyBuzhenLayer(familyID)
    maxLayer = IpyGameDataPY.GetFuncCfg("FamilyTaofaBuzhen", 3)
    gLayer = min(gLayer, maxLayer) # 限制生效的最大布阵层数
    fightPower = PlayerControl.GetFightPower(curPlayer)
    superRate = IpyGameDataPY.GetFuncCfg("FamilyTaofaBuzhen", 1)
    superRatio = IpyGameDataPY.GetFuncCfg("FamilyTaofaAtk", 3) # 暴击伤害倍值