From 54751d2f5bde9d6c376add002be45de2021172d9 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 08 十一月 2018 17:45:16 +0800 Subject: [PATCH] 4595 【1.2】【后端】装备战力、评分优化(修复无传奇属性时没有评分的bug ) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py | 109 +++++++++++++++++++++++------------------------------- 1 files changed, 47 insertions(+), 62 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py index 11882e1..960bc9a 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py @@ -69,6 +69,7 @@ import random import math +import time #--------------------------------------------------------------------- ##开始交易 # @param curPlayer 玩家实例 @@ -201,7 +202,6 @@ def ShopItemOnDay(curPlayer, onEventType): if onEventType == ShareDefine.Def_OnEventType: UpdataSuperGiftTime(curPlayer, True) - SyncSuperGiftInfo(curPlayer) OSSaleOpenMail(curPlayer) refreshType = [3] elif onEventType == ShareDefine.Def_OnEventTypeEx: @@ -452,12 +452,18 @@ GameWorld.DebugLog("购买物品: shopType=%s,itemIndex=%s,clientBuyCount=%s,totalItemList=%s,mainItemID=%s,needPackSpaceDict=%s" % (shopType, itemIndex, clientBuyCount, totalItemList, mainItemID, needPackSpaceDict), curPlayer.GetPlayerID()) - + mailKey = ipyData.GetMailKey() + isLackPack = False #是否背包不足 for packType, needSpace in needPackSpaceDict.items(): if needSpace > ItemCommon.GetItemPackSpace(curPlayer, packType, needSpace): - curPlayer.ShopResult(itemIndex, IPY_GameWorld.tsrNoPlace) - PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [packType]) - return + isLackPack = True + if mailKey: + break + else: + curPlayer.ShopResult(itemIndex, IPY_GameWorld.tsrNoPlace) + PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [packType]) + return + sendMailKey = mailKey if isLackPack and mailKey else '' #背包不足且配置了mailKey的才发邮件 # 购买限制条件扩展 if CheckBuyItemLimitEx(curPlayer, shopType, itemIndex, mainItemID, ipyData.GetLimitValue()): @@ -473,21 +479,22 @@ #已经在查询中, 不重复查询 GameWorld.DebugLog("全服购买次数已经在查询中, 不重复查询 itemIndex=%s" % itemIndex) return - cmdStr = '%s' % ([itemIndex, serverLimitCnt, clientBuyCount, totalItemList, mainItemID, limitBuyCnt]) + cmdStr = '%s' % ([itemIndex, serverLimitCnt, clientBuyCount, totalItemList, mainItemID, limitBuyCnt, sendMailKey]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "GetStoreServerBuyCnt", cmdStr, len(cmdStr)) #设置状态查询中 curPlayer.SetDict(ChConfig.Def_PlayerKey_StoreQueryState, 1) return #-------------------------开始购买物品----------------------------- - DoBuyStoreItem(curPlayer, itemIndex, clientBuyCount, totalItemList, mainItemID, limitBuyCnt, ipyData) + DoBuyStoreItem(curPlayer, itemIndex, clientBuyCount, totalItemList, mainItemID, limitBuyCnt, sendMailKey, ipyData) return -def DoBuyStoreItem(curPlayer, itemIndex, clientBuyCount, totalItemList, mainItemID, limitBuyCnt, ipyData=None): +def DoBuyStoreItem(curPlayer, itemIndex, clientBuyCount, totalItemList, mainItemID, limitBuyCnt, sendMailKey, ipyData=None): if not ipyData: ipyData = IpyGameDataPY.GetIpyGameData("Store", itemIndex) priceType, itemPrice = ipyData.GetMoneyType(), ipyData.GetMoneyNum() + itemPrice *= clientBuyCount shopType = ipyData.GetShopType() beforeMoney = PlayerControl.GetMoney(curPlayer, priceType) @@ -508,31 +515,32 @@ "ItemPrice":itemPrice, "MoneyType":priceType, "BeforeMoney":beforeMoney, "AfterMoney":afterMoney} isForceEvent = priceType not in [IPY_GameWorld.TYPE_Price_Silver_Money] - + itemControl = ItemControler.PlayerItemControler(curPlayer) for itemID, itemCount, isBind in totalItemList: curItemObj = ItemControler.GetOutPutItemObj(itemID, itemCount, isBind) if not curItemObj: continue userData = curItemObj.GetUserData() - packType = ChConfig.GetItemPackType(curItemObj.GetType()) - if not itemControl.PutInItem(packType, curItemObj, event=[ChConfig.ItemGive_BuyItem, isForceEvent, dataDict]): + if not sendMailKey: + packType = ChConfig.GetItemPackType(curItemObj.GetType()) + if not itemControl.PutInItem(packType, curItemObj, event=[ChConfig.ItemGive_BuyItem, isForceEvent, dataDict]): + curItemObj.Clear() + continue + else: curItemObj.Clear() - continue - EventShell.EventRespons_BuyItem(curPlayer, itemID, itemCount) if ipyData.GetNotifyMark() and itemID == mainItemID: PlayerControl.WorldNotify(0, ipyData.GetNotifyMark(), [curPlayer.GetName(), mainItemID, userData]) - + if sendMailKey: + PlayerControl.SendMailByKey(sendMailKey, [curPlayer.GetID()], totalItemList, detail=dataDict) #触发任务购买物品 EventShell.EventRespons_ShopBuy(curPlayer, shopType) #curPlayer.ShopResult(itemIndex, IPY_GameWorld.tsrShopOK) SyncShoppingResult(curPlayer, itemIndex, clientBuyCount) if itemIndex in IpyGameDataPY.GetFuncEvalCfg('CeremonyFireParty', 1, {}).values(): PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Fireworks, clientBuyCount) - if itemIndex in dict(IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList')): - UpdataSuperGiftTime(curPlayer) return def __GetShopJobItem(job, itemID, jobItemList): @@ -619,67 +627,44 @@ #超值礼包购买时间 def UpdataSuperGiftTime(curPlayer, isOnday=False): - superGiftData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuperGiftData) - giftIndex, startDay = superGiftData%10, superGiftData/10 - superGiftTimeList = IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList') - if giftIndex >= len(superGiftTimeList): - return - if isOnday and not giftIndex: - return - openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)+1 - newIndex = giftIndex + curTime = int(time.time()) if isOnday: - lastDays = 0 - pastDay = openServerDay - startDay - for i in xrange(giftIndex-1, len(superGiftTimeList)): - lastDays += superGiftTimeList[i][1] - if pastDay < lastDays: - break - if pastDay >= lastDays: - newIndex = i+2 - + startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuperGiftStartTime) + if not startTime: + return + superGiftTimeList = IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList') + maxDay = max([info[1] for info in superGiftTimeList]) + if curTime - startTime >= maxDay * 86400: + #活动结束 重置 + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SuperGiftStartTime, 0) else: - newIndex = min(len(superGiftTimeList), giftIndex+1) - - if newIndex == giftIndex: - return - - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SuperGiftData, openServerDay*10+newIndex) - #通知 - if not isOnday: - SyncSuperGiftInfo(curPlayer) - if newIndex == 1: + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SuperGiftStartTime, curTime) addItemList = IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList', 2) PlayerControl.SendMailByKey('SellMail2', [curPlayer.GetID()], addItemList) + SyncSuperGiftInfo(curPlayer) return True def SyncSuperGiftInfo(curPlayer): - superGiftData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuperGiftData) - giftIndex, startDay = superGiftData%10, superGiftData/10 - superGiftTimeList = IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList') - if giftIndex == 0 or giftIndex > len(superGiftTimeList): + startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuperGiftStartTime) + if not startTime: return - giftID, day = superGiftTimeList[giftIndex-1] - openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)+1 - remainDay = max(0, day - openServerDay+startDay)-1 - packData = ChPyNetSendPack.tagMCSuperGiftInfo() - packData.GiftID = giftID - packData.EndtDate = str(GameWorld.GetDatetimeByDiffDays(remainDay))[:10] + packData.StartTime = startTime NetPackCommon.SendFakePack(curPlayer, packData) return def CheckSuperGiftBuy(curPlayer, giftID): #超值礼包是否可购买 - superGiftData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuperGiftData) - giftIndex, startDay = superGiftData%10, superGiftData/10 - superGiftTimeList = IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList') - if giftIndex == 0 or giftIndex > len(superGiftTimeList): + startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuperGiftStartTime) + if not startTime: return - curGiftID, day = superGiftTimeList[giftIndex-1] - if giftID != curGiftID: + + superGiftTimeDict = dict(IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList')) + totalDay = superGiftTimeDict.get(giftID, 0) + if not totalDay: return - openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)+1 - if not max(0, day - openServerDay+startDay): + curTime = int(time.time()) + if (curTime - startTime)/86400 >= totalDay: + #已结束 return return True -- Gitblit v1.8.0