ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py
@@ -90,7 +90,8 @@
AwwardType_Guess, # 竞猜
AwwardType_PlayerHurt, # 个人伤害排行
AwwardType_FamilyScore, # 仙盟积分排行
) = range(3)
AwwardType_Like, # 点赞
) = range(4)
class FamilyGCZFighter(object):
@@ -1287,9 +1288,13 @@
    value5 = joinFamily.serverID
    groupValue1 = joinFamily.zoneID
    groupValue2 = GetRoundHurtGroupID(joinFamily.batType, joinFamily.groupNum)
    roundTotalHurt = sum(joinFamily.cityWall.fighterHurtDict.values())
    cmpValue = roundTotalHurt / ChConfig.Def_PerPointValue
    cmpValue2 = roundTotalHurt % ChConfig.Def_PerPointValue
    memHurtTotal = sum(joinFamily.cityWall.fighterHurtDict.values())
    cityRemainHPPer = joinFamily.cityWall.hp / float(joinFamily.cityWall.hpMax)
    familyRoundHurt = eval(IpyGameDataPY.GetFuncCompileCfg("FamilyGCZCity", 3))
    GameWorld.DebugLog("计算仙盟轮次伤害榜值: familyID=%s,familyRoundHurt=%s,memHurtTotal=%s,cityRemainHPPer=%s, %s/%s"
                       % (dataID, familyRoundHurt, memHurtTotal, cityRemainHPPer, joinFamily.cityWall.hp, joinFamily.cityWall.hpMax))
    cmpValue = familyRoundHurt / ChConfig.Def_PerPointValue
    cmpValue2 = familyRoundHurt % ChConfig.Def_PerPointValue
    cmpValue3 = joinFamily.sortWeight
    CrossBillboard.UpdCrossBillboard(ShareDefine.Def_CBT_FamilyGCZRoundHurt, groupValue1, dataID, name1, name2, type2, value1, value2,
                                     cmpValue, cmpValue2, cmpValue3, groupValue2=groupValue2, id2=id2, autoSort=True, value3=value3, value5=value5)
@@ -1855,7 +1860,11 @@
                           % (remainHurtTotal, killCnt, curCity.atkReportDict, tagCity.defReportDict))
        
    GameWorld.DebugLog("cityHP=%s/%s,atkedGuardIDList=%s" % (tagCity.hp, tagCity.hpMax, atkedGuardIDList))
    if tagFamilyID:
        tagJoinFamily = zone.GetZoneJoinFamily(tagFamilyID)
        if tagJoinFamily:
            UndFamilyRoundHurtBillboard(tagJoinFamily) # 榜单伤害受城池血量影响,所以被攻击方也要更新榜单
    for memID, memHurt in memHurtDict.items():
        GameWorld.DebugLog("攻击方成员输出: memID=%s,%s" % (memID, memHurt))
        joinMember = zone.GetZoneJoinMember(memID)
@@ -1875,6 +1884,8 @@
            
    if not curCity.IsBroken():
        UndFamilyRoundHurtBillboard(curJoinFamily)
    else:
        GameWorld.DebugLog("    攻击方仙盟城池已被摧毁,不再累加本轮仙盟伤害榜值! familyID=%s" % curFamilyID)
        
    if not CheckXiuluoCity(zoneID, curRound, batType, groupNum, gmPlayerID):
        Sync_FamilyGCZBatSceneInfo(zoneID, batType, groupNum)
@@ -2052,6 +2063,9 @@
        hurtDict[tagCityID] = oneHurtTotal # 飘血按伤害
        # 通知被攻击盟成员大本营城池信息
        if tagCity.familyID:
            tagJoinFamily = zone.GetZoneJoinFamily(tagCity.familyID)
            if tagJoinFamily:
                UndFamilyRoundHurtBillboard(tagJoinFamily) # 榜单伤害受城池血量影响,所以被攻击方也要更新榜单
            Sync_FamilyGCZCampInfo(zoneID, tagCity.familyID, defMemIDList=atkedGuardIDList)
        Sync_FamilyGCZBatCityInfo(zoneID, batType, groupNum, tagCityID, AtkRet_OK, playerID, oneHurtTotal, killCnt)
        
@@ -2467,7 +2481,11 @@
    # 竞猜
    if awardType == AwwardType_Guess:
        awardTemplateID = ipyDataInfo.get("GuessTemplateID", 0)
        __clientServer_GetAward_Guess(zoneID, playerID, serverGroupID, actID, state, awardType, awardTemplateID)
        playerAwardID, awardItemList = GetGuessAwardInfo(zoneID, state, awardTemplateID, playerID)
        if not awardItemList:
            GameWorld.ErrLog("仙盟攻城战玩家没有竞猜奖励! zoneID=%s" % (zoneID), playerID)
            return
        __clientServer_GetAward_Ret(zoneID, playerID, serverGroupID, actID, awardType, playerAwardID, awardItemList)
        return
    
    gczMgr = GetFamilyGCZMgr()
@@ -2497,6 +2515,12 @@
        billboardType = ShareDefine.Def_CBT_FamilyGCZScore
        awardTemplateID = ipyDataInfo.get("FamilyTemplateID", 0)
        
    # 点赞奖励
    elif awardType == AwwardType_Like:
        awardItemList = IpyGameDataPY.GetFuncEvalCfg("FamilyGCZGuess", 4)
        __clientServer_GetAward_Ret(zoneID, playerID, serverGroupID, actID, awardType, 0, awardItemList)
        return
    else:
        return
    
@@ -2518,30 +2542,22 @@
    if not playerAwardItemList:
        return
    
    GameWorld.Log("仙盟攻城战玩家请求领取奖励! zoneID=%s,awardType=%s,playerAwardItemList=%s"
                  % (zoneID, awardType, playerAwardItemList), playerID)
    joinMember.awardState = joinMember.awardState | pow(2, awardType) # 标记已推送
    msgInfo = {"zoneID":zoneID, "playerID":playerID, "actID":actID, "awardType":awardType, "awardValue":billRank,
               "awardItemList":playerAwardItemList, "fmLV":fmLV}
    Send_CrossServerMsg_FamilyGCZ("FamilyGCZAward", msgInfo, [serverGroupID])
    __clientServer_GetAward_Ret(zoneID, playerID, serverGroupID, actID, awardType, billRank, playerAwardItemList)
    return
def __clientServer_GetAward_Guess(zoneID, playerID, serverGroupID, actID, state, awardType, guessTemplateID):
    ## 竞猜领奖
    playerAwardID, awardItemList = GetGuessAwardInfo(zoneID, state, guessTemplateID, playerID)
    if not awardItemList:
        GameWorld.ErrLog("仙盟攻城战玩家没有竞猜奖励! zoneID=%s" % (zoneID), playerID)
        return
    GameWorld.Log("仙盟攻城战玩家请求领取竞猜奖励! zoneID=%s,playerAwardID=%s,awardItemList=%s"
                  % (zoneID, playerAwardID, awardItemList), playerID)
def __clientServer_GetAward_Ret(zoneID, playerID, serverGroupID, actID, awardType, awardValue, awardItemList):
    ## 同步子服领奖结果
    gczMgr = GetFamilyGCZMgr()
    zone = gczMgr.GetActZone(zoneID)
    joinMember = zone.GetZoneJoinMember(playerID)
    fmLV = 0
    if joinMember:
        fmLV = joinMember.fmLV
        joinMember.awardState = joinMember.awardState | pow(2, awardType) # 标记已推送
    msgInfo = {"zoneID":zoneID, "playerID":playerID, "actID":actID, "awardType":awardType, "awardValue":playerAwardID, "awardItemList":awardItemList}
    GameWorld.Log("仙盟攻城战玩家请求领取奖励! zoneID=%s,awardType=%s,awardValue=%s,awardItemList=%s"
                  % (zoneID, awardType, awardValue, awardItemList), playerID)
    msgInfo = {"zoneID":zoneID, "playerID":playerID, "actID":actID, "awardType":awardType, "awardValue":awardValue,
               "awardItemList":awardItemList, "fmLV":fmLV}
    Send_CrossServerMsg_FamilyGCZ("FamilyGCZAward", msgInfo, [serverGroupID])
    return