4869 【主干】【长尾】【BT】七日巡礼重置逻辑优化;运营活动所处天索引逻辑优化;
4个文件已修改
170 ■■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastWeekParty.py 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
@@ -390,12 +390,11 @@
                        activityInfoDict[ShareDefine.ActKey_WorldLVList] = GameWorldAverageLv.GetWorldLVListByTime(startDayDate, (endDayDate - startDayDate).days)
                    
                    if startDayDate <= curDateTime < endDayDate:
                        dayIndex = 0
                        dayIndex = (curDateTime - startDayDate).days
                        actIDDateTime = startDayDate
                        isDayRest = 0 if not hasattr(ipyData, "GetIsDayReset") else ipyData.GetIsDayReset()
                        # 按时段开的默认每天重置
                        if isDayRest or (startHMStrList and endHMStrList):
                            dayIndex = (curDateTime - startDayDate).days
                            actIDDateTime += datetime.timedelta(days=dayIndex)
                        actID = int(time.mktime(actIDDateTime.timetuple())) # 默认取开始时间点的time值作为活动ID
                        activityInfoDict[ShareDefine.ActKey_DayIndex] = dayIndex
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3785,7 +3785,8 @@
Def_PDict_FBRealHelpCount = "FBRealHelpCount_%s" #副本真实助战次数,仅针对真实进去打的副本,参数mapID
#周狂欢
Def_PDict_WeekPartyID = "WeekPartyID"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值
Def_PDict_WeekPartyActID = "WeekPartyActID"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值
Def_PDict_WeekPartyID = "WeekPartyID"  # 玩家身上的活动ID,配置ID,用于补发上次活动用
Def_PDict_WeekPartyCurTimes = "WeekPartyCurTimes_%s_%s" #当前完成次数 参数(第X天,模板ID)
Def_PDict_WeekPartyGotTimes = "WeekPartyGotTimes_%s_%s" #当前已领次数 参数(第X天,模板ID)
Def_PDict_WeekPartyAwardRecord = "WeekPartyAwardRecord_%s" #积分领奖记录  参数(第X天)
@@ -5415,9 +5416,6 @@
Def_WPAct_FamilyBoss,  #仙盟Boss 28
Def_WPAct_FairyDomain,  #缥缈仙域 29    
) = range(1, 29+1)
#可提前完成的周狂欢活动
AheadFinishWPActList = [Def_WPAct_Horse, Def_WPAct_Pet, Def_WPAct_Dogz, Def_WPAct_Rune]
#登录奖励活动定义
LoginAwardActIDList = (
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastWeekParty.py
@@ -41,6 +41,7 @@
        # 活动中同步活动信息
        SyncFeastWeekPartyInfo(curPlayer)
        if actCostRebateInfo.get(ShareDefine.ActKey_State):
            AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False, False)
            SyncFeastWeekPartyPlayerInfo(curPlayer)
    return
@@ -60,36 +61,32 @@
    playerID = curPlayer.GetPlayerID()
    
    actFeastWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})
    #FeastWeekPartyID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_ID, 0)
    state = actFeastWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
    actID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_ID, 0)
    cfgID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
    passlv = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)
    if state:
        #每天都要触发
        AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Tower, passlv, False, True, False)
        AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False)
        AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Stone, Operate_EquipStone.GetTotalStoneLV(curPlayer), False, True, False)
        AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_GodWeapon, PlayerGodWeapon.GetGodWeaponTotalLV(curPlayer), False, True, False)
        SyncFeastWeekPartyPlayerInfo(curPlayer)
    playerFeastWeekPartyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyID, 0, ChConfig.Def_PDictType_FeastWeekParty)  # 玩家身上的活动ID
    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyActID, 0, ChConfig.Def_PDictType_FeastWeekParty)  # 玩家身上的活动ID
    playerFeastWeekPartyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyID, 0, ChConfig.Def_PDictType_FeastWeekParty)  # 玩家身上的活动配置ID
    # 活动ID 相同的话不处理
    if cfgID == playerFeastWeekPartyID:
        #GameWorld.DebugLog("节日巡礼活动ID不变,不处理!", curPlayer.GetPlayerID())
    if actID == playerActID:
        GameWorld.DebugLog("节日巡礼活动ID不变,不处理!playerActID=%s" % playerActID, curPlayer.GetPlayerID())
        if state:
            CheckFeastWeekPartyActionCnt(curPlayer, True)
        return
    CheckFeastWeekPartyActionCnt(curPlayer)
    # 未领取的奖励邮件发放
    if playerFeastWeekPartyID:
        __SendFeastWeekPartyMail(curPlayer, playerFeastWeekPartyID)
    
    if not cfgID:
        GameWorld.DebugLog('    节日巡礼活动重置!')
        curPlayer.ClearNomalDict(ChConfig.Def_PDictType_FeastWeekParty)
    
    GameWorld.DebugLog("节日巡礼变更! state=%s,cfgID=%s,playerFeastWeekPartyID=%s" % (state, cfgID, playerFeastWeekPartyID), playerID)
    GameWorld.DebugLog("节日巡礼变更! state=%s,actID=%s,cfgID=%s,playerFeastWeekPartyID=%s" % (state, actID, cfgID, playerFeastWeekPartyID), playerID)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyActID, actID, ChConfig.Def_PDictType_FeastWeekParty)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastWeekPartyID, cfgID, ChConfig.Def_PDictType_FeastWeekParty)
    if state:
        CheckFeastWeekPartyActionCnt(curPlayer,  False)
    SyncFeastWeekPartyInfo(curPlayer)
        SyncFeastWeekPartyPlayerInfo(curPlayer)
    return True
@@ -149,35 +146,15 @@
    
    if not cfgID:
        return
    if not state and actionID not in ChConfig.AheadFinishWPActList:
    if not state:
        return
    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActFeastWeekParty", cfgID)
    if not actBossIpyData:
        return
    templateIDList = actBossIpyData.GetTemplateID()
    dayIndex = actFeastWeekPartyInfo.get(ShareDefine.ActKey_DayIndex, 0)
    if dayIndex >= len(templateIDList):
        return
    if actionID in ChConfig.AheadFinishWPActList:
        isFind = False
        for day, dayTidList in enumerate(templateIDList[dayIndex:]):
            findTid = 0
            for tid in dayTidList:
                if tid / 100 == actionID:
                    findTid = tid
                    break
            if not findTid:
                continue
            ipyData = IpyGameDataPY.GetIpyGameData('FeastWeekParty', findTid)
            if not ipyData:
                continue
            totalTimes = ipyData.GetTotalTimes()
            if addCnt != totalTimes:
                continue
            dayIndex = day + dayIndex
            isFind = True
            break
        if not isFind:
            return
    
    dayTidList = templateIDList[dayIndex]
@@ -217,24 +194,26 @@
        SyncFeastWeekPartyPlayerInfo(curPlayer, dayIndex, findTid)
    return True
def CheckFeastWeekPartyActionCnt(curPlayer, isSync):
    ## 同步活动状态时需要触发的
def CheckFeastWeekPartyActionCnt(curPlayer):
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for actionType in ChConfig.AheadFinishWPActList:
        if actionType == ChConfig.Def_WPAct_Pet:
    # 灵宠激活
            petDataPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet)
            for petDataIndex in range(petDataPack.GetCount()):
                petItem = petDataPack.GetAt(petDataIndex)
                if petItem.IsEmpty():
                    continue
                petNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
                AddFeastWeekPartyActionCnt(curPlayer, actionType, petNPCID, False)
        elif actionType == ChConfig.Def_WPAct_Dogz:
        AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Pet, petNPCID, False, isSync=isSync)
    # 出战神兽
    ipyDataMgr = IpyGameDataPY.IPY_Data()
            for i in xrange(ipyDataMgr.GetDogzCount()):
                ipyData = ipyDataMgr.GetDogzByIndex(i)
                if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i):
                    AddFeastWeekPartyActionCnt(curPlayer, actionType, ipyData.GetDogzID(), False)
        elif actionType == ChConfig.Def_WPAct_Rune:
            AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Dogz, ipyData.GetDogzID(), False, isSync=isSync)
    # 穿戴某品质符印
            runeHoleCnt = IpyGameDataPY.GetFuncCfg("RuneUnlock", 4)
            for holeNum in xrange(1, runeHoleCnt + 1):
                runeData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % holeNum, 0)
@@ -245,7 +224,13 @@
                if not itemData:
                    continue
                itemColor = itemData.GetItemColor()
                AddFeastWeekPartyActionCnt(curPlayer, actionType, itemColor, False)
        AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Rune, itemColor, False, isSync=isSync)
    AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False, isSync)
    passlv = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)
    AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Tower, passlv, False, True, isSync)
    AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Stone, Operate_EquipStone.GetTotalStoneLV(curPlayer), False, True, isSync)
    AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_GodWeapon, PlayerGodWeapon.GetGodWeaponTotalLV(curPlayer), False, True, isSync)
    return
def GetFeastWeekPartyActionAward(curPlayer, day, templateID):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py
@@ -42,6 +42,7 @@
        # 活动中同步活动信息
        SyncWeekPartyInfo(curPlayer)
        if actCostRebateInfo.get(ShareDefine.ActKey_State):
            AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False, False)
            SyncWeekPartyPlayerInfo(curPlayer)
    return
@@ -61,36 +62,32 @@
    playerID = curPlayer.GetPlayerID()
    
    actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})
    #WeekPartyID = actWeekPartyInfo.get(ShareDefine.ActKey_ID, 0)
    state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
    actID = actWeekPartyInfo.get(ShareDefine.ActKey_ID, 0)
    cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
    passlv = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)
    if state:
        #每天都要触发
        AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Tower, passlv, False, True, False)
        AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False)
        AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Stone, Operate_EquipStone.GetTotalStoneLV(curPlayer), False, True, False)
        AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_GodWeapon, PlayerGodWeapon.GetGodWeaponTotalLV(curPlayer), False, True, False)
        SyncWeekPartyPlayerInfo(curPlayer)
    playerWeekPartyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyID, 0, ChConfig.Def_PDictType_WeekParty)  # 玩家身上的活动ID
    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyActID, 0, ChConfig.Def_PDictType_WeekParty)  # 玩家身上的活动ID
    playerWeekPartyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyID, 0, ChConfig.Def_PDictType_WeekParty)  # 玩家身上的活动配置ID
    # 活动ID 相同的话不处理
    if cfgID == playerWeekPartyID:
        #GameWorld.DebugLog("周狂欢活动ID不变,不处理!", curPlayer.GetPlayerID())
    if actID == playerActID:
        GameWorld.DebugLog("周狂欢活动ID不变,不处理!playerActID=%s" % playerActID, curPlayer.GetPlayerID())
        if state:
            CheckWeekPartyActionCnt(curPlayer, True)
        return
    CheckWeekPartyActionCnt(curPlayer)
    # 未领取的奖励邮件发放
    if playerWeekPartyID:
        __SendWeekPartyMail(curPlayer, playerWeekPartyID)
    
    if not cfgID:
        GameWorld.DebugLog('    周狂欢活动重置!')
        curPlayer.ClearNomalDict(ChConfig.Def_PDictType_WeekParty)
    
    GameWorld.DebugLog("周狂欢变更! state=%s,cfgID=%s,playerWeekPartyID=%s" % (state, cfgID, playerWeekPartyID), playerID)
    GameWorld.DebugLog("周狂欢变更! state=%s,actID=%s,cfgID=%s,playerWeekPartyID=%s" % (state, actID, cfgID, playerWeekPartyID), playerID)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyActID, actID, ChConfig.Def_PDictType_WeekParty)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyID, cfgID, ChConfig.Def_PDictType_WeekParty)
    if state:
        CheckWeekPartyActionCnt(curPlayer,  False)
    SyncWeekPartyInfo(curPlayer)
        SyncWeekPartyPlayerInfo(curPlayer)
    return True
@@ -151,7 +148,7 @@
    
    if not cfgID:
        return
    if not state and actionID not in ChConfig.AheadFinishWPActList:
    if not state:
        return
    
    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)
@@ -160,27 +157,6 @@
    templateIDList = actBossIpyData.GetTemplateID()
    dayIndex = actWeekPartyInfo.get(ShareDefine.ActKey_DayIndex, 0)
    if dayIndex >= len(templateIDList):
        return
    if actionID in ChConfig.AheadFinishWPActList:
        isFind = False
        for day, dayTidList in enumerate(templateIDList[dayIndex:]):
            findTid = 0
            for tid in dayTidList:
                if tid / 100 == actionID:
                    findTid = tid
                    break
            if not findTid:
                continue
            ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', findTid)
            if not ipyData:
                continue
            totalTimes = ipyData.GetTotalTimes()
            if addCnt != totalTimes:
                continue
            dayIndex = day + dayIndex
            isFind = True
            break
        if not isFind:
            return
    
    dayTidList = templateIDList[dayIndex]
@@ -220,24 +196,26 @@
            SyncWeekPartyPlayerInfo(curPlayer, dayIndex, findTid)
    return True
def CheckWeekPartyActionCnt(curPlayer, isSync):
    ## 同步活动状态时需要触发的
def CheckWeekPartyActionCnt(curPlayer):
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for actionType in ChConfig.AheadFinishWPActList:
        if actionType == ChConfig.Def_WPAct_Pet:
    # 灵宠激活
            petDataPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet)
            for petDataIndex in range(petDataPack.GetCount()):
                petItem = petDataPack.GetAt(petDataIndex)
                if petItem.IsEmpty():
                    continue
                petNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
                AddWeekPartyActionCnt(curPlayer, actionType, petNPCID, False)
        elif actionType == ChConfig.Def_WPAct_Dogz:
        AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Pet, petNPCID, False, isSync=isSync)
    # 出战神兽
    ipyDataMgr = IpyGameDataPY.IPY_Data()
            for i in xrange(ipyDataMgr.GetDogzCount()):
                ipyData = ipyDataMgr.GetDogzByIndex(i)
                if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i):
                    AddWeekPartyActionCnt(curPlayer, actionType, ipyData.GetDogzID(), False)
        elif actionType == ChConfig.Def_WPAct_Rune:
            AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Dogz, ipyData.GetDogzID(), False, isSync=isSync)
    # 穿戴某品质符印
            runeHoleCnt = IpyGameDataPY.GetFuncCfg("RuneUnlock", 4)
            for holeNum in xrange(1, runeHoleCnt + 1):
                runeData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % holeNum, 0)
@@ -248,7 +226,13 @@
                if not itemData:
                    continue
                itemColor = itemData.GetItemColor()
                AddWeekPartyActionCnt(curPlayer, actionType, itemColor, False)
        AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Rune, itemColor, False, isSync=isSync)
    AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False, isSync)
    passlv = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)
    AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Tower, passlv, False, True, isSync)
    AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Stone, Operate_EquipStone.GetTotalStoneLV(curPlayer), False, True, isSync)
    AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_GodWeapon, PlayerGodWeapon.GetGodWeaponTotalLV(curPlayer), False, True, isSync)
    return
def GetWeekPartyActionAward(curPlayer, day, templateID):