10416 【英文】【bt】【GM】【砍树】登录基金和幻境基金 完成后可以重置购买
| | |
| | | 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)
|
| | |
| | | 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):
|
| | |
| | | self.ZhanlingType = 0
|
| | | self.IsActivite = 0
|
| | | self.IsActiviteH = 0
|
| | | self.AllFinishTime = 0
|
| | | self.Value1 = 0
|
| | | self.RewardCount = 0
|
| | | self.RewardList = list()
|
| | |
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | | length += 2
|
| | | for i in range(self.RewardCount):
|
| | |
| | | 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):
|
| | |
| | | ZhanlingType:%d,
|
| | | IsActivite:%d,
|
| | | IsActiviteH:%d,
|
| | | AllFinishTime:%d,
|
| | | Value1:%d,
|
| | | RewardCount:%d,
|
| | | RewardList:%s
|
| | |
| | | self.ZhanlingType,
|
| | | self.IsActivite,
|
| | | self.IsActiviteH,
|
| | | self.AllFinishTime,
|
| | | self.Value1,
|
| | | self.RewardCount,
|
| | | "..."
|
| | |
| | | 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值,参数:(活动编号)
|
| | |
| | | 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)
|
| | |
| | | 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):
|
| | |
| | | self.ZhanlingType = 0
|
| | | self.IsActivite = 0
|
| | | self.IsActiviteH = 0
|
| | | self.AllFinishTime = 0
|
| | | self.Value1 = 0
|
| | | self.RewardCount = 0
|
| | | self.RewardList = list()
|
| | |
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | | length += 2
|
| | | for i in range(self.RewardCount):
|
| | |
| | | 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):
|
| | |
| | | ZhanlingType:%d,
|
| | | IsActivite:%d,
|
| | | IsActiviteH:%d,
|
| | | AllFinishTime:%d,
|
| | | Value1:%d,
|
| | | RewardCount:%d,
|
| | | RewardList:%s
|
| | |
| | | self.ZhanlingType,
|
| | | self.IsActivite,
|
| | | self.IsActiviteH,
|
| | | self.AllFinishTime,
|
| | | self.Value1,
|
| | | self.RewardCount,
|
| | | "..."
|
| | |
| | | import PlayerControl
|
| | | import PlayerZhanling
|
| | | import GameWorld
|
| | | import time
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | #逻辑实现
|
| | |
| | | GameWorld.DebugAnswer(curPlayer, "重置奖励: Zhanling 0 类型")
|
| | | GameWorld.DebugAnswer(curPlayer, "设置战令: Zhanling 类型 是否激活普通 高级")
|
| | | GameWorld.DebugAnswer(curPlayer, "设置进度: Zhanling v 类型 进度值")
|
| | | GameWorld.DebugAnswer(curPlayer, "设置登录: Zhanling d 登录战令已登录天数")
|
| | | return
|
| | |
|
| | | value = msgList[0]
|
| | |
| | | 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
|
| | |
| | | import PlayerFairyDomain
|
| | | import CrossPlayerData
|
| | | import PlayerTreasure
|
| | | import PlayerZhanling
|
| | | import PlayerVip
|
| | | import PlayerLove
|
| | | import PlayerDiceEx
|
| | |
| | |
|
| | | #投资
|
| | | PlayerGoldInvest.OnDay(curPlayer)
|
| | | #战令
|
| | | PlayerZhanling.OnDay(curPlayer)
|
| | | #寻宝
|
| | | PlayerTreasure.OnDay(curPlayer)
|
| | | #法宝
|
| | |
| | |
|
| | | 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:
|
| | |
| | | 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):
|
| | |
| | | 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())
|
| | |
|
| | |
| | | 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
|
| | |
|
| | |
| | | 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):
|
| | |
|
| | |
| | | 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)
|