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