From a1f9aded73d7c162d51f87a5a6659799f2f08c21 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 17 十月 2022 17:09:34 +0800 Subject: [PATCH] 9684 【越南】坐骑幻化支持时效性 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py | 107 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 89 insertions(+), 18 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py index 32586b7..faeee70 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py @@ -38,6 +38,8 @@ import PlayerSuccess import PlayerPet +import time + Def_HorseEquipIndex = 5 @@ -172,15 +174,25 @@ if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Horse): return - activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState) - if activateState & pow(2, activateID): - GameWorld.DebugLog("该坐骑已幻化!activateState=%s,activateID=%s" % (activateState, activateID)) - return - ipyData = IpyGameDataPY.GetIpyGameData("HorseSkinPlus", activateID) if not ipyData: return + updSkinEndTime = 0 + validTime = ipyData.GetSkinValidTime() + if validTime: + curTime = int(time.time()) + skinEndTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinEndTime % activateID) + if curTime >= skinEndTime: + updSkinEndTime = curTime + validTime + else: + updSkinEndTime = skinEndTime + validTime + else: + activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState) + if activateState & pow(2, activateID): + GameWorld.DebugLog("该坐骑已幻化!activateState=%s,activateID=%s" % (activateState, activateID)) + return + needItemID = ipyData.GetUnlockItemID() needItemCnt = ipyData.GetUnlockItemCnt() itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) @@ -190,16 +202,23 @@ return ItemCommon.ReduceItem(curPlayer, itemPack, itemList, needItemCnt, False, ChConfig.ItemDel_Horse) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, activateState|pow(2, activateID)) - + if validTime: + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % activateID, updSkinEndTime) + GameWorld.DebugLog("坐骑幻化时效 activateID=%s,updSkinEndTime=%s(%s)" % (activateID, updSkinEndTime, GameWorld.ChangeTimeNumToStr(updSkinEndTime)), playerID) + else: + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, activateState|pow(2, activateID)) + playerEquip = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) itemRideHorse = playerEquip.GetAt(Def_HorseEquipIndex) #无指定道具 if itemRideHorse.IsEmpty(): DoChangeHorse(curPlayer, 2, activateID, tick) - Sync_HorseClassData(curPlayer) - GameWorld.Log("坐骑激活成功!activateID=%s" % (activateID), playerID) + if validTime: + SyncHorseSkinTimeInfo(curPlayer, activateID) + else: + Sync_HorseClassData(curPlayer) + GameWorld.Log("坐骑激活成功!activateID=%s,updSkinEndTime=%s" % (activateID, updSkinEndTime), playerID) # 刷属性,更新排行榜 RefreshHorseAttr(curPlayer) @@ -265,13 +284,10 @@ # 按幻化 elif chooseType == 2: - activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState) - if not activateState & pow(2, lvID): - GameWorld.DebugLog("坐骑幻化未激活,无法使用该坐骑皮肤! activateState=%s,lvID=%s" % (activateState, lvID)) - return - skinPlusIpyData = IpyGameDataPY.GetIpyGameData("HorseSkinPlus", lvID) if not skinPlusIpyData: + return + if not CheckHorseSkinState(curPlayer, skinPlusIpyData): return horseItemID = skinPlusIpyData.GetHorseSkinPlusID() @@ -306,6 +322,31 @@ return True +def CheckHorseSkinState(curPlayer, skinPlusIpyData): + skinID = skinPlusIpyData.GetID() + if skinPlusIpyData.GetSkinValidTime(): + skinEndTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinEndTime % skinID) + if not skinEndTime: + return False + curTime = int(time.time()) + if curTime >= skinEndTime: + playerID = curPlayer.GetPlayerID() + GameWorld.Log("坐骑幻化已过期! skinID=%s,skinEndTime=%s(%s)" % (skinID, skinEndTime, GameWorld.ChangeTimeNumToStr(skinEndTime)), playerID) + # 发送过期通知邮件,重置为0 + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % skinID, 0) + + skinItemID = skinPlusIpyData.GetUnlockItemID() + addItemList = [] + paramList = [skinItemID] + PlayerControl.SendMailByKey("HorseSkinInvalidNotify", [playerID], addItemList, paramList) + return False + else: + activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState) + if not activateState & pow(2, skinID): + #GameWorld.DebugLog("坐骑幻化未激活! skinID=%s,activateState=%s" % (skinID, activateState), curPlayer.GetPlayerID()) + return False + return True + def DoHorseOpen(curPlayer): ## 马匹功能开启 horseLV = 1 @@ -318,6 +359,12 @@ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, 0) for trainType in xrange(1, GetHorseTrainTypes() + 1): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserTrainLV % trainType, 1) + + ipyDataMgr = IpyGameDataPY.IPY_Data() + for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()): + skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index) + skinID = skinPlusIpyData.GetID() + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % skinID, 0) horseID = ipyData.GetHorseSkinID() if not ItemCommon.FindItemInPackByItemID(curPlayer, horseID, IPY_GameWorld.rptEquip): @@ -386,11 +433,9 @@ # 幻化属性 initFPAdd = 0 #初始战力 - activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState) for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()): skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index) - skinPlusID = skinPlusIpyData.GetID() - if not activateState & pow(2, skinPlusID): + if not CheckHorseSkinState(curPlayer, skinPlusIpyData): continue initFPAdd += skinPlusIpyData.GetInitFightPower() attrTypeList = skinPlusIpyData.GetAttrType() @@ -643,6 +688,7 @@ Sync_HorseClassData(curPlayer) SyncHorsePetSkinData(curPlayer) + SyncHorseSkinTimeInfo(curPlayer) return def Sync_HorseClassData(curPlayer): @@ -837,4 +883,29 @@ NetPackCommon.SendFakePack(curPlayer, packData) return - +def SyncHorseSkinTimeInfo(curPlayer, skinID=None): + skinList = [] + if skinID > 0: + timeInfo = ChPyNetSendPack.tagMCHorseSkinTimeInfo() + timeInfo.ID = skinID + timeInfo.InvalidTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinEndTime % skinID) + skinList.append(timeInfo) + else: + ipyDataMgr = IpyGameDataPY.IPY_Data() + for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()): + skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index) + skinID = skinPlusIpyData.GetID() + if not skinPlusIpyData.GetSkinValidTime(): + continue + timeInfo = ChPyNetSendPack.tagMCHorseSkinTimeInfo() + timeInfo.ID = skinID + timeInfo.InvalidTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinEndTime % skinID) + skinList.append(timeInfo) + + packData = ChPyNetSendPack.tagMCHorseSkinTimeInfoList() + packData.Clear() + packData.TimeInfoList = skinList + packData.TimeCnt = len(packData.TimeInfoList) + NetPackCommon.SendFakePack(curPlayer, packData) + return + -- Gitblit v1.8.0