10416 【英文】【bt】【GM】【砍树】登录基金和幻境基金 完成后可以重置购买
6个文件已修改
85 ■■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Zhanling.py 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -53309,6 +53309,7 @@
    ZhanlingType = 0    #(BYTE ZhanlingType)// 战令类型
    IsActivite = 0    #(BYTE IsActivite)// 普通战令是否已激活
    IsActiviteH = 0    #(BYTE IsActiviteH)// 高级战令是否已激活
    AllFinishTime = 0    #(DWORD AllFinishTime)// 全部奖励领取完毕的时间戳,未完毕时该值为0,后端会在0点过天时检查可否重置,前端自行做倒计时表现即可
    Value1 = 0    #(DWORD Value1)// 战令对应的自定义值,可选,如登录战令代表开始计算日期时间戳
    RewardCount = 0    #(WORD RewardCount)
    RewardList = list()    #(vector<tagMCZhanling> RewardList)
@@ -53326,6 +53327,7 @@
        self.ZhanlingType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.IsActivite,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.IsActiviteH,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AllFinishTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.RewardCount):
@@ -53342,6 +53344,7 @@
        self.ZhanlingType = 0
        self.IsActivite = 0
        self.IsActiviteH = 0
        self.AllFinishTime = 0
        self.Value1 = 0
        self.RewardCount = 0
        self.RewardList = list()
@@ -53353,6 +53356,7 @@
        length += 1
        length += 1
        length += 1
        length += 4
        length += 4
        length += 2
        for i in range(self.RewardCount):
@@ -53366,6 +53370,7 @@
        data = CommFunc.WriteBYTE(data, self.ZhanlingType)
        data = CommFunc.WriteBYTE(data, self.IsActivite)
        data = CommFunc.WriteBYTE(data, self.IsActiviteH)
        data = CommFunc.WriteDWORD(data, self.AllFinishTime)
        data = CommFunc.WriteDWORD(data, self.Value1)
        data = CommFunc.WriteWORD(data, self.RewardCount)
        for i in range(self.RewardCount):
@@ -53378,6 +53383,7 @@
                                ZhanlingType:%d,
                                IsActivite:%d,
                                IsActiviteH:%d,
                                AllFinishTime:%d,
                                Value1:%d,
                                RewardCount:%d,
                                RewardList:%s
@@ -53387,6 +53393,7 @@
                                self.ZhanlingType,
                                self.IsActivite,
                                self.IsActiviteH,
                                self.AllFinishTime,
                                self.Value1,
                                self.RewardCount,
                                "..."
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4197,6 +4197,7 @@
Def_PDict_ZhanlingReward = "ZhanlingReward_%s_%s"  # 战令奖励领取记录,按类型二进制位运算记录是否已领取,参数(类型,key编号)
Def_PDict_ZhanlingRewardH = "ZhanlingRewardH_%s_%s"  # 高级战令奖励领取记录,按类型二进制位运算记录是否已领取,参数(类型,key编号)
Def_PDict_ZhanlingRewardFree = "ZhanlingRewardFree_%s_%s"  # 战令免费奖励领取记录,按类型二进制位运算记录是否已领取,参数(类型,key编号)
Def_PDict_ZhanlingFinishTime = "ZhanlingFinishTime_%s"  # 战令奖励全部领取完毕的时间戳,参数(类型)
#登录活动新
Def_PDict_ActLoginNewID = "ActLoginNewID_%s"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -53309,6 +53309,7 @@
    ZhanlingType = 0    #(BYTE ZhanlingType)// 战令类型
    IsActivite = 0    #(BYTE IsActivite)// 普通战令是否已激活
    IsActiviteH = 0    #(BYTE IsActiviteH)// 高级战令是否已激活
    AllFinishTime = 0    #(DWORD AllFinishTime)// 全部奖励领取完毕的时间戳,未完毕时该值为0,后端会在0点过天时检查可否重置,前端自行做倒计时表现即可
    Value1 = 0    #(DWORD Value1)// 战令对应的自定义值,可选,如登录战令代表开始计算日期时间戳
    RewardCount = 0    #(WORD RewardCount)
    RewardList = list()    #(vector<tagMCZhanling> RewardList)
@@ -53326,6 +53327,7 @@
        self.ZhanlingType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.IsActivite,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.IsActiviteH,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AllFinishTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.RewardCount):
@@ -53342,6 +53344,7 @@
        self.ZhanlingType = 0
        self.IsActivite = 0
        self.IsActiviteH = 0
        self.AllFinishTime = 0
        self.Value1 = 0
        self.RewardCount = 0
        self.RewardList = list()
@@ -53353,6 +53356,7 @@
        length += 1
        length += 1
        length += 1
        length += 4
        length += 4
        length += 2
        for i in range(self.RewardCount):
@@ -53366,6 +53370,7 @@
        data = CommFunc.WriteBYTE(data, self.ZhanlingType)
        data = CommFunc.WriteBYTE(data, self.IsActivite)
        data = CommFunc.WriteBYTE(data, self.IsActiviteH)
        data = CommFunc.WriteDWORD(data, self.AllFinishTime)
        data = CommFunc.WriteDWORD(data, self.Value1)
        data = CommFunc.WriteWORD(data, self.RewardCount)
        for i in range(self.RewardCount):
@@ -53378,6 +53383,7 @@
                                ZhanlingType:%d,
                                IsActivite:%d,
                                IsActiviteH:%d,
                                AllFinishTime:%d,
                                Value1:%d,
                                RewardCount:%d,
                                RewardList:%s
@@ -53387,6 +53393,7 @@
                                self.ZhanlingType,
                                self.IsActivite,
                                self.IsActiviteH,
                                self.AllFinishTime,
                                self.Value1,
                                self.RewardCount,
                                "..."
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Zhanling.py
@@ -19,6 +19,7 @@
import PlayerControl
import PlayerZhanling
import GameWorld
import time
#---------------------------------------------------------------------
#逻辑实现
@@ -34,6 +35,7 @@
        GameWorld.DebugAnswer(curPlayer, "重置奖励: Zhanling 0 类型")
        GameWorld.DebugAnswer(curPlayer, "设置战令: Zhanling 类型 是否激活普通   高级")
        GameWorld.DebugAnswer(curPlayer, "设置进度: Zhanling v 类型  进度值")
        GameWorld.DebugAnswer(curPlayer, "设置登录: Zhanling d 登录战令已登录天数")
        return
    
    value = msgList[0]
@@ -51,6 +53,14 @@
            GameWorld.DebugAnswer(curPlayer, "该战令不用设置进度值! %s" % (zhanlingType))
            return
        GameWorld.DebugAnswer(curPlayer, "战令进度:Type=%s,V=%s" % (zhanlingType, retValue))
    elif value == "d":
        zhanlingType = 5
        loginDays = msgList[1] if len(msgList) > 1 else 1
        curTime = int(time.time())
        firstLoginTime = curTime - (loginDays - 1) * 3600 * 24
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType, firstLoginTime)
        PlayerZhanling.SyncZhanlingInfo(curPlayer, zhanlingType)
        GameWorld.DebugAnswer(curPlayer, "登录战令已登录天数:%s" % (GameWorld.GetDiff_Day(curTime, firstLoginTime) + 1))
    else:
        zhanlingType = value
        activiteC = msgList[1] if len(msgList) > 1 else 0
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -125,6 +125,7 @@
import PlayerFairyDomain
import CrossPlayerData
import PlayerTreasure
import PlayerZhanling
import PlayerVip
import PlayerLove
import PlayerDiceEx
@@ -551,6 +552,8 @@
        
        #投资
        PlayerGoldInvest.OnDay(curPlayer)
        #战令
        PlayerZhanling.OnDay(curPlayer)
        #寻宝
        PlayerTreasure.OnDay(curPlayer)
        #法宝
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
@@ -50,6 +50,7 @@
def OnPlayerLogin(curPlayer):
    for zhanlingType in ZhanlingTypeList:
        CheckZhanlingAllFinish(curPlayer, zhanlingType) # 因为是后面加的功能,为了处理线上玩家及兼容之后可能修改配置等,故上线默认检查一次
        if zhanlingType == ZhanlingType_Login:
            value1 = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType)
            if not value1:
@@ -57,6 +58,23 @@
                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType, firstLoginTime)
                GameWorld.DebugLog("设置登录战令首次登录时间: %s" % firstLoginTime, curPlayer.GetPlayerID())
        SyncZhanlingInfo(curPlayer, zhanlingType)
    return
def OnDay(curPlayer):
    resetZhanlingDict = IpyGameDataPY.GetFuncEvalCfg("Zhanling", 4, {})
    for zhanlingTypeStr, cdDays in resetZhanlingDict.items():
        zhanlingType = int(zhanlingTypeStr)
        finishTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingFinishTime % zhanlingType)
        if not finishTime:
            GameWorld.DebugLog("战令奖励未全部领取,不重置! zhanlingType=%s" % zhanlingType, curPlayer.GetPlayerID())
            continue
        passDays = GameWorld.GetDiff_Day(int(time.time()), finishTime)
        if passDays < cdDays:
            GameWorld.DebugLog("战令重置CD天未到,不重置! zhanlingType=%s,passDays=%s < %s, finishTime=%s"
                               % (zhanlingType, passDays, cdDays, GameWorld.ChangeTimeNumToStr(finishTime)), curPlayer.GetPlayerID())
            continue
        ResetZhanling(curPlayer, int(zhanlingTypeStr))
    return
def OnActiviteByCTGID(curPlayer, ctgID):
@@ -109,6 +127,10 @@
    elif zhanlingType in ZhanlingValue1TypeList:
        backValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType, 0)
    elif zhanlingType == ZhanlingType_Login:
        firstLoginTime = int(time.time())
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType, firstLoginTime)
        GameWorld.DebugLog("重置登录战令首次登录时间: %s" % firstLoginTime, curPlayer.GetPlayerID())
    GameWorld.Log("重置战令: zhanlingType=%s,backValue=%s,state=(%s to %s) stateH=(%s to %s)" 
                  % (zhanlingType, backValue, state, updState, stateH, updStateH), curPlayer.GetPlayerID())
    
@@ -119,6 +141,8 @@
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingReward % (zhanlingType, keyNum), 0)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingRewardH % (zhanlingType, keyNum), 0)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingRewardFree % (zhanlingType, keyNum), 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingFinishTime % zhanlingType, 0)
    SyncZhanlingInfo(curPlayer, zhanlingType)
    return
@@ -267,7 +291,39 @@
        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem])
    ItemControler.NotifyGiveAwardInfo(curPlayer, itemList, "Zhanling")
    
    if str(zhanlingType) in IpyGameDataPY.GetFuncEvalCfg("Zhanling", 4, {}):
        CheckZhanlingAllFinish(curPlayer, zhanlingType)
    return
def CheckZhanlingAllFinish(curPlayer, zhanlingType):
    ## 判断战令类型是否所有奖励已领取
    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingFinishTime % zhanlingType):
        return True
    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("Zhanling", {"ZhanlingType":zhanlingType}, True)
    if not ipyDataList:
        return
    for ipyData in ipyDataList:
        rewardIndex = ipyData.GetRewardIndex()
        if ipyData.GetZLRewardItemListH() and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingRewardH, rewardIndex, True, [zhanlingType]):
            GameWorld.DebugLog("还有高级战令奖励未领取! zhanlingType=%s,rewardIndex=%s" % (zhanlingType, rewardIndex), curPlayer.GetPlayerID())
            return
        if ipyData.GetZLRewardItemList() and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingReward, rewardIndex, True, [zhanlingType]):
            GameWorld.DebugLog("还有普通战令奖励未领取! zhanlingType=%s,rewardIndex=%s" % (zhanlingType, rewardIndex), curPlayer.GetPlayerID())
            return
        if ipyData.GetFreeRewardItemList() and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingRewardFree, rewardIndex, True, [zhanlingType]):
            GameWorld.DebugLog("还有免费战令奖励未领取! zhanlingType=%s,rewardIndex=%s" % (zhanlingType, rewardIndex), curPlayer.GetPlayerID())
            return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingFinishTime % zhanlingType, int(time.time()))
    SyncZhanlingInfo(curPlayer, zhanlingType)
    GameWorld.DebugLog("设置战令已全部领取完毕! zhanlingType=%s" % (zhanlingType), curPlayer.GetPlayerID())
    return True
def SyncZhanlingInfo(curPlayer, zhanlingType, ipyDataList=None):
    
@@ -292,6 +348,7 @@
    clientPack.ZhanlingType = zhanlingType
    clientPack.IsActivite = 1 if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingState)&pow(2, zhanlingType) else 0
    clientPack.IsActiviteH = 1 if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingStateH)&pow(2, zhanlingType) else 0
    clientPack.AllFinishTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingFinishTime % zhanlingType)
    clientPack.Value1 = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType)
    clientPack.RewardList = rewardList
    clientPack.RewardCount = len(clientPack.RewardList)