From fc7847f19424c902c7e6fdac1d024b5039b3d725 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期四, 14 二月 2019 15:16:49 +0800
Subject: [PATCH] 5315 【后端】【1.6】登录奖励活动

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLogin.py |   94 ++++++++++++++++++++++++++---------------------
 1 files changed, 52 insertions(+), 42 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLogin.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLogin.py
index 1206580..396122b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLogin.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLogin.py
@@ -30,6 +30,7 @@
 import PyGameData
 import ItemCommon
 
+import json
 
 def OnLogin(curPlayer):
     isReset = __CheckPlayerLoginAwardAction(curPlayer)
@@ -57,7 +58,7 @@
     playerID = curPlayer.GetPlayerID()
     
     actLoginAwardInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_LoginAward, {})
-    #LoginAwardID = actLoginAwardInfo.get(ShareDefine.ActKey_ID, 0)
+    #loginAwardID = actLoginAwardInfo.get(ShareDefine.ActKey_ID, 0)
     state = actLoginAwardInfo.get(ShareDefine.ActKey_State, 0)
     cfgID = actLoginAwardInfo.get(ShareDefine.ActKey_CfgID, 0)
     if state:
@@ -70,16 +71,20 @@
     if cfgID == playerLoginAwardID:
         #GameWorld.DebugLog("登录奖励活动ID不变,不处理!", curPlayer.GetPlayerID())
         return
+    actWorldLVList = actLoginAwardInfo.get(ShareDefine.ActKey_WorldLVList, [])
     # 未领取的奖励邮件发放
-    __SendLoginAwardMail(curPlayer, playerLoginAwardID)
+    if playerLoginAwardID:
+        __SendLoginAwardMail(curPlayer, playerLoginAwardID)
     
-    if not cfgID:
-        GameWorld.DebugLog('    登录奖励活动重置!')
-        curPlayer.ClearNomalDict(ChConfig.Def_PDictType_LoginAward)
+    #if not cfgID:
+    GameWorld.DebugLog('    登录奖励活动重置!')
+    curPlayer.ClearNomalDict(ChConfig.Def_PDictType_LoginAward)
     
-    GameWorld.DebugLog("登录奖励变更! state=%s,cfgID=%s,playerLoginAwardID=%s" % (state, cfgID, playerLoginAwardID), playerID)
+    GameWorld.DebugLog("登录奖励变更! state=%s,cfgID=%s,playerLoginAwardID=%s,actWorldLVList=%s" % (state, cfgID, playerLoginAwardID, actWorldLVList), playerID)
     
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoginAwardID, cfgID, ChConfig.Def_PDictType_LoginAward)
+    for i, actWorldLV in enumerate(actWorldLVList):
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoginAwardWorldLV % i, actWorldLV, ChConfig.Def_PDictType_LoginAward)
         
     SyncLoginAwardInfo(curPlayer)
     return True
@@ -87,15 +92,17 @@
 
 def __SendLoginAwardMail(curPlayer, cfgID):
     # 未领取的奖励邮件发放
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActLoginAward", cfgID)
-    if not actBossIpyData:
+    actIpyData = IpyGameDataPY.GetIpyGameData("ActLoginAward", cfgID)
+    if not actIpyData:
         return
-    templateIDList = actBossIpyData.GetTemplateID()
+    templateIDList = actIpyData.GetTemplateID()
     if not templateIDList:
         return
     
     totalItemDict = {}
     for day, tidList in enumerate(templateIDList):
+        playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoginAwardWorldLV % day, 0, ChConfig.Def_PDictType_LoginAward)
+
         for tid in tidList:
             ipyData = IpyGameDataPY.GetIpyGameData('LoginAward', tid)
             if not ipyData:
@@ -106,13 +113,13 @@
             canGotCnt = (curTimes - gotTimes) / singleTimes
             if not canGotCnt:
                 continue
-            itemDict = __GetAwardItem(curPlayer, ipyData, canGotCnt)
+            itemDict = __GetAwardItem(curPlayer, ipyData, playerWorldLV, canGotCnt)
             GameWorld.AddDictValue(totalItemDict, itemDict)
     
     if not totalItemDict:
         return
     totalItemList = [[itemID, itemCnt, 1] for itemID, itemCnt in totalItemDict.items()]
-    PlayerControl.SendMailByKey('SecondWeekReward', [curPlayer.GetID()], totalItemList)
+    PlayerControl.SendMailByKey('LoginAward_1', [curPlayer.GetID()], totalItemList)
     return
 
 
@@ -127,10 +134,10 @@
     
     if not state or not cfgID:
         return
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActLoginAward", cfgID)
-    if not actBossIpyData:
+    actIpyData = IpyGameDataPY.GetIpyGameData("ActLoginAward", cfgID)
+    if not actIpyData:
         return
-    templateIDList = actBossIpyData.GetTemplateID()
+    templateIDList = actIpyData.GetTemplateID()
     dayIndex = actLoginAwardInfo.get(ShareDefine.ActKey_DayIndex, 0)
     if dayIndex >= len(templateIDList):
         return
@@ -175,9 +182,9 @@
     gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoginAwardGotTimes % (day, templateID), 0, ChConfig.Def_PDictType_LoginAward)
     if curTimes - gotTimes < singleTimes:
         return
-    
+    playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoginAwardWorldLV % day, 0, ChConfig.Def_PDictType_LoginAward)
     #给奖励
-    awardDict = __GetAwardItem(curPlayer, ipyData)
+    awardDict = __GetAwardItem(curPlayer, ipyData, playerWorldLV)
     # 检查背包
     needSpace = len(awardDict)
     packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
@@ -195,15 +202,23 @@
     return
 
 
-
-def __GetAwardItem(curPlayer, ipyData, times=1):
-    awardDict = {}
-    for itemID, itemCnt, isbind in ipyData.GetReward():
+def __GetAwardItem(curPlayer, ipyData, worldLV, times=1):
+    awardItemDict = {}
+    awardDict = eval(ipyData.GetReward())
+    wlvList = [int(lv) for lv in awardDict]
+    wlvList.sort()
+    findWlv = wlvList[-1]
+    for wlv in wlvList:
+        if worldLV <= wlv:
+            findWlv = wlv
+            break
+    itemList = awardDict[findWlv]
+    for itemID, itemCnt, isbind in itemList:
         if not itemID or not itemCnt:
             continue
-        awardDict[itemID] = awardDict.get(itemID, 0) + itemCnt * times
+        awardItemDict[itemID] = awardItemDict.get(itemID, 0) + itemCnt * times
         
-    return awardDict
+    return awardItemDict
 
 
 def SyncLoginAwardPlayerInfo(curPlayer, day=-1, templateID=-1):
@@ -213,10 +228,10 @@
     cfgID = actLoginAwardInfo.get(ShareDefine.ActKey_CfgID, 0)
     if not state or not cfgID:
         return
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActLoginAward", cfgID)
-    if not actBossIpyData:
+    actIpyData = IpyGameDataPY.GetIpyGameData("ActLoginAward", cfgID)
+    if not actIpyData:
         return
-    templateIDList = actBossIpyData.GetTemplateID()
+    templateIDList = actIpyData.GetTemplateID()
     if not templateIDList:
         return
     if day != -1:
@@ -256,21 +271,22 @@
     cfgID = actLoginAwardInfo.get(ShareDefine.ActKey_CfgID, 0)
     if not cfgID:
         return
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActLoginAward", cfgID)
-    if not actBossIpyData:
+    actIpyData = IpyGameDataPY.GetIpyGameData("ActLoginAward", cfgID)
+    if not actIpyData:
         return
-    templateIDList = actBossIpyData.GetTemplateID()
+    templateIDList = actIpyData.GetTemplateID()
     if not templateIDList:
         return
+    actWorldLVList = actLoginAwardInfo.get(ShareDefine.ActKey_WorldLVList, [])
     openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
     actInfo = ChPyNetSendPack.tagMCActLoginAwardInfo()
     actInfo.Clear()
-    actInfo.StartDate = GameWorld.GetOperationActionDateStr(actBossIpyData.GetStartDate(), openServerDay)
-    actInfo.EndtDate = GameWorld.GetOperationActionDateStr(actBossIpyData.GetEndDate(), openServerDay)
-    actInfo.AdvanceMinutes = actBossIpyData.GetAdvanceMinutes()
-    actInfo.IsDayReset = actBossIpyData.GetIsDayReset()
-    actInfo.ResetType = actBossIpyData.GetResetType()
-    actInfo.LimitLV = actBossIpyData.GetLVLimit()
+    actInfo.StartDate = GameWorld.GetOperationActionDateStr(actIpyData.GetStartDate(), openServerDay)
+    actInfo.EndtDate = GameWorld.GetOperationActionDateStr(actIpyData.GetEndDate(), openServerDay)
+    actInfo.AdvanceMinutes = actIpyData.GetAdvanceMinutes()
+    actInfo.IsDayReset = actIpyData.GetIsDayReset()
+    actInfo.ResetType = actIpyData.GetResetType()
+    actInfo.LimitLV = actIpyData.GetLVLimit()
     actInfo.DayInfoList = []
     tidList = []
     for day, dayActList in enumerate(templateIDList):
@@ -280,7 +296,7 @@
         for tid in dayActList:
             if tid not in tidList:
                 tidList.append(tid)
-        
+        dayInfo.WorldLV = actWorldLVList[day] if day < len(actWorldLVList) else 0
         actInfo.DayInfoList.append(dayInfo)
     actInfo.DayCnt = len(actInfo.DayInfoList)
     actInfo.ActionInfo = []
@@ -294,13 +310,7 @@
         tInfo.ActionType = ipyData.GetActionType()
         tInfo.TotalTimes = ipyData.GetTotalTimes()
         tInfo.SingleTimes = ipyData.GetSingleTimes()
-        tInfo.ItemInfo = []
-        for itemID, itemCnt, isBind in ipyData.GetReward():
-            awardItem = ChPyNetSendPack.tagMCActLoginAwardItem()
-            awardItem.ItemID = itemID
-            awardItem.ItemCnt = itemCnt
-            awardItem.IsBind = isBind
-            tInfo.ItemInfo.append(awardItem)
+        tInfo.ItemInfo = ipyData.GetReward()
         tInfo.Count = len(tInfo.ItemInfo)
         actInfo.ActionInfo.append(tInfo)
     actInfo.TCount = len(actInfo.ActionInfo)

--
Gitblit v1.8.0