From 1ee23ed9a201181eca6b2da5fb256ca9af0639f2 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 23 十二月 2019 18:11:08 +0800
Subject: [PATCH] 8359 【主干】活跃兑换(改为后端计算倒计时;优化次数启动及结算模式)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ActivityPlace.py |    7 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                       |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py     |  201 ++++++++++++++-------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py               |   56 +++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py           |   14 +-
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py                                    |   56 +++++++
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                                |   14 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py        |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                  |    6 
 9 files changed, 233 insertions(+), 130 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 7f40e82..2ae3d31 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -14006,6 +14006,54 @@
 
 
 #------------------------------------------------------
+# B0 28 活跃放置快速完成 #tagCMActivityPlaceQuickFinish
+
+class  tagCMActivityPlaceQuickFinish(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB0
+        self.SubCmd = 0x28
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB0
+        self.SubCmd = 0x28
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMActivityPlaceQuickFinish)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B0 28 活跃放置快速完成 //tagCMActivityPlaceQuickFinish:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCMActivityPlaceQuickFinish=tagCMActivityPlaceQuickFinish()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivityPlaceQuickFinish.Cmd,m_NAtagCMActivityPlaceQuickFinish.SubCmd))] = m_NAtagCMActivityPlaceQuickFinish
+
+
+#------------------------------------------------------
 # B0 27 活跃放置启动 #tagCMActivityPlaceStart
 
 class  tagCMActivityPlaceStart(Structure):
@@ -14013,7 +14061,6 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("RewardEndType", c_ubyte),    #是否结算探索,后端处理奖励后自动启动下一次放置探索;0-无结算启动,1-倒计时结束结算,2-快速结算;
                   ]
 
     def __init__(self):
@@ -14030,7 +14077,6 @@
     def Clear(self):
         self.Cmd = 0xB0
         self.SubCmd = 0x27
-        self.RewardEndType = 0
         return
 
     def GetLength(self):
@@ -14042,13 +14088,11 @@
     def OutputString(self):
         DumpString = '''// B0 27 活跃放置启动 //tagCMActivityPlaceStart:
                                 Cmd:%s,
-                                SubCmd:%s,
-                                RewardEndType:%d
+                                SubCmd:%s
                                 '''\
                                 %(
                                 self.Cmd,
-                                self.SubCmd,
-                                self.RewardEndType
+                                self.SubCmd
                                 )
         return DumpString
 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 270b221..162ea87 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -29201,8 +29201,8 @@
 
 class  tagMCActivityPlaceInfo(Structure):
     Head = tagHead()
-    PlaceState = 0    #(BYTE PlaceState)// 是否启动状态
     StartTime = 0    #(DWORD StartTime)// 开始探索time时间戳,完成一次探索会自动下一次探索并更新该时间
+    PlaceCount = 0    #(BYTE PlaceCount)// 剩余未完成探索次数
     RewardCount = 0    #(BYTE RewardCount)// 累计未领取探索奖励次数
     RewardLen = 0    #(BYTE RewardLen)
     RewardInfo = ""    #(String RewardInfo)//累计未领取探索奖励 [[itemID, count], ...]
@@ -29217,8 +29217,8 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlaceState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.StartTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlaceCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RewardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RewardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RewardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.RewardLen)
@@ -29229,8 +29229,8 @@
         self.Head.Clear()
         self.Head.Cmd = 0xB0
         self.Head.SubCmd = 0x27
-        self.PlaceState = 0
         self.StartTime = 0
+        self.PlaceCount = 0
         self.RewardCount = 0
         self.RewardLen = 0
         self.RewardInfo = ""
@@ -29239,8 +29239,8 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
-        length += 1
         length += 4
+        length += 1
         length += 1
         length += 1
         length += len(self.RewardInfo)
@@ -29250,8 +29250,8 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.PlaceState)
         data = CommFunc.WriteDWORD(data, self.StartTime)
+        data = CommFunc.WriteBYTE(data, self.PlaceCount)
         data = CommFunc.WriteBYTE(data, self.RewardCount)
         data = CommFunc.WriteBYTE(data, self.RewardLen)
         data = CommFunc.WriteString(data, self.RewardLen, self.RewardInfo)
@@ -29260,16 +29260,16 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                PlaceState:%d,
                                 StartTime:%d,
+                                PlaceCount:%d,
                                 RewardCount:%d,
                                 RewardLen:%d,
                                 RewardInfo:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.PlaceState,
                                 self.StartTime,
+                                self.PlaceCount,
                                 self.RewardCount,
                                 self.RewardLen,
                                 self.RewardInfo
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index f048ca2..22d6543 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -1416,7 +1416,7 @@
 Writer = xdh
 Releaser = xdh
 RegType = 0
-RegisterPackCount = 2
+RegisterPackCount = 3
 
 PacketCMD_1=0xA5
 PacketSubCMD_1=0x25
@@ -1426,6 +1426,10 @@
 PacketSubCMD_2=0x27
 PacketCallFunc_2=OnActivityPlaceStart
 
+PacketCMD_3=0xB0
+PacketSubCMD_3=0x28
+PacketCallFunc_3=OnActivityPlaceQuickFinish
+
 ;协助
 [PlayerAssist]
 ScriptName = Player\PlayerAssist.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 617541f..749d299 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3838,10 +3838,10 @@
 
 # 活跃放置
 Def_PDict_ActivityCanCostTotalPoint = "ActivityCanCostTotalPoint"  # 当前总活跃值(可消耗)
-Def_PDict_ActivityPlaceState = "ActivityPlaceState" # 活跃放置是否探索中
 Def_PDict_ActivityPlaceStartTime = "ActivityPlaceStartTime" # 活跃放置开始time值
-Def_PDict_ActivityPlaceRewardTotalCount = "ActivityPlaceRewardTotalCount" # 活跃放置总共累计奖励次数
-Def_PDict_ActivityPlaceRewardCount = "ActivityPlaceRewardCount" # 活跃放置累计奖励次数
+Def_PDict_ActivityPlaceRemainCount = "ActivityPlaceRemainCount" # 活跃放置剩余进行次数
+Def_PDict_ActivityPlaceRewardCount = "ActivityPlaceRewardCount" # 活跃放置本次启动已累计奖励次数
+Def_PDict_ActivityPlaceRewardTotalCount = "ActivityPlaceRewardTotalCount" # 活跃放置历史总共累计奖励次数
 Def_PDict_ActivityPlaceRewardItem = "ActivityPlaceItem" # 奖励物品个数
 Def_PDict_ActivityPlaceRewardItemID = "ActivityPlaceItemID_%s" # 奖励物品ID,参数(index)
 Def_PDict_ActivityPlaceRewardItemCount = "ActivityPlaceItemCount_%s" # 奖励物品个数,参数(index)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 7f40e82..2ae3d31 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -14006,6 +14006,54 @@
 
 
 #------------------------------------------------------
+# B0 28 活跃放置快速完成 #tagCMActivityPlaceQuickFinish
+
+class  tagCMActivityPlaceQuickFinish(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB0
+        self.SubCmd = 0x28
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB0
+        self.SubCmd = 0x28
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMActivityPlaceQuickFinish)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B0 28 活跃放置快速完成 //tagCMActivityPlaceQuickFinish:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCMActivityPlaceQuickFinish=tagCMActivityPlaceQuickFinish()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivityPlaceQuickFinish.Cmd,m_NAtagCMActivityPlaceQuickFinish.SubCmd))] = m_NAtagCMActivityPlaceQuickFinish
+
+
+#------------------------------------------------------
 # B0 27 活跃放置启动 #tagCMActivityPlaceStart
 
 class  tagCMActivityPlaceStart(Structure):
@@ -14013,7 +14061,6 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("RewardEndType", c_ubyte),    #是否结算探索,后端处理奖励后自动启动下一次放置探索;0-无结算启动,1-倒计时结束结算,2-快速结算;
                   ]
 
     def __init__(self):
@@ -14030,7 +14077,6 @@
     def Clear(self):
         self.Cmd = 0xB0
         self.SubCmd = 0x27
-        self.RewardEndType = 0
         return
 
     def GetLength(self):
@@ -14042,13 +14088,11 @@
     def OutputString(self):
         DumpString = '''// B0 27 活跃放置启动 //tagCMActivityPlaceStart:
                                 Cmd:%s,
-                                SubCmd:%s,
-                                RewardEndType:%d
+                                SubCmd:%s
                                 '''\
                                 %(
                                 self.Cmd,
-                                self.SubCmd,
-                                self.RewardEndType
+                                self.SubCmd
                                 )
         return DumpString
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 270b221..162ea87 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -29201,8 +29201,8 @@
 
 class  tagMCActivityPlaceInfo(Structure):
     Head = tagHead()
-    PlaceState = 0    #(BYTE PlaceState)// 是否启动状态
     StartTime = 0    #(DWORD StartTime)// 开始探索time时间戳,完成一次探索会自动下一次探索并更新该时间
+    PlaceCount = 0    #(BYTE PlaceCount)// 剩余未完成探索次数
     RewardCount = 0    #(BYTE RewardCount)// 累计未领取探索奖励次数
     RewardLen = 0    #(BYTE RewardLen)
     RewardInfo = ""    #(String RewardInfo)//累计未领取探索奖励 [[itemID, count], ...]
@@ -29217,8 +29217,8 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlaceState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.StartTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlaceCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RewardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RewardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RewardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.RewardLen)
@@ -29229,8 +29229,8 @@
         self.Head.Clear()
         self.Head.Cmd = 0xB0
         self.Head.SubCmd = 0x27
-        self.PlaceState = 0
         self.StartTime = 0
+        self.PlaceCount = 0
         self.RewardCount = 0
         self.RewardLen = 0
         self.RewardInfo = ""
@@ -29239,8 +29239,8 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
-        length += 1
         length += 4
+        length += 1
         length += 1
         length += 1
         length += len(self.RewardInfo)
@@ -29250,8 +29250,8 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.PlaceState)
         data = CommFunc.WriteDWORD(data, self.StartTime)
+        data = CommFunc.WriteBYTE(data, self.PlaceCount)
         data = CommFunc.WriteBYTE(data, self.RewardCount)
         data = CommFunc.WriteBYTE(data, self.RewardLen)
         data = CommFunc.WriteString(data, self.RewardLen, self.RewardInfo)
@@ -29260,16 +29260,16 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                PlaceState:%d,
                                 StartTime:%d,
+                                PlaceCount:%d,
                                 RewardCount:%d,
                                 RewardLen:%d,
                                 RewardInfo:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.PlaceState,
                                 self.StartTime,
+                                self.PlaceCount,
                                 self.RewardCount,
                                 self.RewardLen,
                                 self.RewardInfo
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ActivityPlace.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ActivityPlace.py
index 5d94d5b..dd69f92 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ActivityPlace.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ActivityPlace.py
@@ -34,16 +34,17 @@
         return
     
     if len(msgList) == 1 and not msgList[0]:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceState, 0)
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceStartTime, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceRewardTotalCount, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceRemainCount, 0)
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceRewardCount, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceRewardTotalCount, 0)
         
         rewardItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceRewardItem)
         for i in xrange(rewardItemCount):
             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceRewardItemID % i, 0)
             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceRewardItemCount % i, 0)
-            
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceRewardItem, 0)
+        
         GameWorld.DebugAnswer(curPlayer, "重置活跃放置成功!")
         PlayerActivity.Sync_ActivityPlaceInfo(curPlayer)
         return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py
index 416fb05..2d39151 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py
@@ -29,6 +29,7 @@
 import PyGameData
 import GameFuncComm
 import EventShell
+import PlayerTJG
 import PlayerPet
 import datetime
 import time
@@ -629,74 +630,108 @@
 #struct    tagCMActivityPlaceStart
 #{
 #    tagHead        Head;
-#    BYTE        RewardEndType;    //是否结算探索,后端处理奖励后自动启动下一次放置探索;0-无结算启动,1-倒计时结束结算,2-快速结算;
 #};
 def OnActivityPlaceStart(index, clientData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    rewardEndType = clientData.RewardEndType
     
+    maxRewardCount = IpyGameDataPY.GetFuncCfg("ActivityPlace", 4) # 最大累计放置奖励次数        
+    remainCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceRemainCount)
     rewardCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceRewardCount)
-    maxRewardCount = IpyGameDataPY.GetFuncCfg("ActivityPlace", 4) # 最大累计放置奖励次数
-    if rewardCount >= maxRewardCount:
-        GameWorld.ErrLog("活跃放置奖励累计次数已达上限,无法启动")
+    
+    maxCanStartCount = maxRewardCount - remainCount - rewardCount
+    if maxCanStartCount <= 0:
+        GameWorld.DebugLog("活跃放置奖励累计次数已达上限,无法启动!remainCount=%s + rewardCount=%s >= maxRewardCount=%s" 
+                           % (remainCount, rewardCount, maxRewardCount))
+        return
+            
+    costPoint = IpyGameDataPY.GetFuncCfg("ActivityPlace", 2) # 单次放置消耗的活跃点数
+    canUseActivityPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityCanCostTotalPoint)
+    pointCanUseCount = canUseActivityPoint / costPoint
+    startCount = min(maxCanStartCount, pointCanUseCount)
+    if startCount <= 0:
+        GameWorld.DebugLog("可用活跃不足,无法添加次数启动!canUseActivityPoint=%s,costPoint=%s" % (canUseActivityPoint, costPoint))
         return
     
-    placeState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceState)
+    updRemainCount = remainCount + startCount
+    GameWorld.DebugLog("添加活跃放置次数: startCount=%s,rewardCount=%s,remainCount=%s,updRemainCount=%s" 
+                       % (startCount, rewardCount, remainCount, updRemainCount))
     
-    endCount, nextStartReduceSeconds = 1, 0
+    costPointTotal = costPoint * startCount
+    CostActivityPoint(curPlayer, costPointTotal)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceRemainCount, updRemainCount)
     
-    # 无结算启动
-    if rewardEndType == 0:
-        if placeState:
-            GameWorld.DebugLog("已在放置探索中!")
-            return
-        __DoActivityPlaceStart(curPlayer)
-        
-    # 倒计时结束结算
-    elif rewardEndType == 1:
-        if not placeState:
-            GameWorld.DebugLog("非放置探索中,无法结算!")
-            return
-        startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceStartTime)
-        if not startTime:
-            return
-        needSeconds = IpyGameDataPY.GetFuncCfg("ActivityPlace", 3) # 单次放置奖励持续时间,秒
+    if not remainCount:
         curTime = int(time.time())
-        passTime = curTime - startTime
-        if passTime < needSeconds:
-            GameWorld.DebugLog("探索时间未到,无法结算! curTime=%s,startTime=%s,passTime=%s < %s" % (curTime, startTime, passTime, needSeconds))
-            return
-        endCount = passTime / needSeconds
-        nextStartReduceSeconds = passTime % needSeconds
-        __DoActivityPlaceRewardEnd(curPlayer, endCount, nextStartReduceSeconds)
-        
-    # 快速结算
-    elif rewardEndType == 2:
-        if not placeState:
-            GameWorld.DebugLog("非放置探索中,无法快速结算!")
-            return
-        
-        costItemID, costGoldParper = IpyGameDataPY.GetFuncEvalCfg("ActivityPlace", 5)
-        costItemCount = 1
-        
-        costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount)
-        lackCnt = costItemCount - bindCnt - unBindCnt
-        if lackCnt > 0:
-            if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, costGoldParper, ChConfig.Def_Cost_ActivityPlace):
-                return
-        else:
-            ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, costItemCount, ChConfig.ItemDel_ActivityPlace)
-            
-        __DoActivityPlaceRewardEnd(curPlayer, endCount, nextStartReduceSeconds)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceStartTime, curTime)
+        GameWorld.DebugLog("    没有剩余次数,更新启动时间: %s" % curTime)
         
     Sync_ActivityPlaceInfo(curPlayer)
     return
 
-def __DoActivityPlaceRewardEnd(curPlayer, endCount, nextStartReduceSeconds):
+#// B0 28 活跃放置快速完成 #tagCMActivityPlaceQuickFinish
+#
+#struct    tagCMActivityPlaceQuickFinish
+#{
+#    tagHead        Head;
+#};
+def OnActivityPlaceQuickFinish(index, clientData, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    
+    remainCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceRemainCount)
+    if not remainCount:
+        GameWorld.DebugLog("没有剩余活跃放置次数,无法快速完成!")
+        return
+    
+    costItemID, costGoldParper = IpyGameDataPY.GetFuncEvalCfg("ActivityPlace", 5)
+    costItemCount = 1 # 默认扣一个
+    endCount = 1 # 只快速结算一次
+    
+    costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount)
+    lackCnt = costItemCount - bindCnt - unBindCnt
+    if lackCnt > 0:
+        if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, costGoldParper, ChConfig.Def_Cost_ActivityPlace):
+            return
+    else:
+        ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, costItemCount, ChConfig.ItemDel_ActivityPlace)
+        
+    __DoActivityPlaceRewardEnd(curPlayer, endCount)
+    return
+
+def ProcessActivityPlace(curPlayer):
+    ## 活跃放置定时处理
+    
+    remainCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceRemainCount)
+    if remainCount <= 0:
+        #GameWorld.DebugLog("没有剩余放置次数不处理!")
+        return
+    
+    curTime = int(time.time())
+    startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceStartTime)
+    if not startTime:
+        startTime = curTime
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceStartTime, curTime)
+        
+    needSeconds = IpyGameDataPY.GetFuncCfg("ActivityPlace", 3) # 单次放置奖励持续时间,秒
+    passTime = curTime - startTime
+    if passTime < needSeconds:
+        #GameWorld.DebugLog("探索时间未到,不结算! curTime=%s,startTime=%s,passTime=%s < %s" % (curTime, startTime, passTime, needSeconds))
+        return
+    endCount = passTime / needSeconds
+    nextStartReduceSeconds = passTime % needSeconds
+    __DoActivityPlaceRewardEnd(curPlayer, endCount, nextStartReduceSeconds)
+    return
+
+def __DoActivityPlaceRewardEnd(curPlayer, endCount, nextStartReduceSeconds=0):
     ## 放置活跃奖励结算
     
-    if not endCount:
+    remainCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceRemainCount)
+    endCount = min(endCount, remainCount)
+    if endCount <= 0:
         return
+    
+    if PlayerTJG.GetIsTJG(curPlayer):
+        return
+    
     countDataDict = {}
     lvDataDict = {}
     ipyDataMgr = IpyGameDataPY.IPY_Data()
@@ -719,36 +754,24 @@
     if not lvRewardIpyData:
         lvRewardIpyData = lvDataDict[lvList[-1]]
         
-    costPoint = IpyGameDataPY.GetFuncCfg("ActivityPlace", 2) # 单次放置消耗的活跃点数
-    maxRewardCount = IpyGameDataPY.GetFuncCfg("ActivityPlace", 4) # 最大累计放置奖励次数
     maxAppointCount = max(countDataDict) # 最大定制奖励次数
     rewardCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceRewardCount)
+    rewardTotalCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceRewardTotalCount)
     
-    isStop = False
     rewardItemDict = {}
-    GameWorld.DebugLog("结算放置活跃奖励: rewardCount=%s,endCount=%s,maxRewardCount=%s,maxAppointCount=%s" % (rewardCount, endCount, maxRewardCount, maxAppointCount))
-    for endIndex in xrange(endCount):
-        #GameWorld.DebugLog("endIndex=%s" % endIndex)
+    GameWorld.DebugLog("结算放置活跃奖励: remainCount=%s,rewardCount=%s,endCount=%s,maxAppointCount=%s" % (remainCount, rewardCount, endCount, maxAppointCount))
+    for _ in xrange(endCount):
         
-        # 超过1次的需要补扣活跃消耗
-        if endCount > 1 and endIndex != 0:
-            if not CostActivityPoint(curPlayer, costPoint):
-                isStop = True
-                GameWorld.DebugLog("    可消耗的活跃不足,无法继续结算奖励!")
-                break
-            
         rewardIpyData = None
-        rewardTotalCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceRewardTotalCount)
         
         # 加奖励次数
+        remainCount -= 1
         rewardCount += 1
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceRewardCount, rewardCount)
         if rewardTotalCount < maxAppointCount:
             rewardTotalCount += 1
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceRewardTotalCount, rewardTotalCount)
             if rewardTotalCount in countDataDict:
                 rewardIpyData = countDataDict[rewardTotalCount]
-                #GameWorld.DebugLog("    取定制次数奖励")
+                #GameWorld.DebugLog("    取定制次数奖励: rewardTotalCount=%s" % rewardTotalCount)
                 
         if not rewardIpyData:
             rewardIpyData = lvRewardIpyData
@@ -768,13 +791,17 @@
             if itemID:
                 rewardItemDict[itemID] = rewardItemDict.get(itemID, 0) + 1
                 
-        GameWorld.DebugLog("    rewardCount=%s,rewardTotalCount=%s, %s" % (rewardCount, rewardTotalCount, rewardItemDict))
-
-        if rewardCount >= maxRewardCount:
-            isStop = True
-            GameWorld.DebugLog("    放置活跃奖励次数已达上限!rewardCount=%s" % rewardCount)
-            break
-            
+        GameWorld.DebugLog("    remainCount=%s,rewardCount=%s,rewardTotalCount=%s, %s" % (remainCount, rewardCount, rewardTotalCount, rewardItemDict))
+        
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceRemainCount, remainCount)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceRewardCount, rewardCount)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceRewardTotalCount, rewardTotalCount)
+    
+    if remainCount > 0:
+        nextStartTime = int(time.time()) - nextStartReduceSeconds
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceStartTime, nextStartTime)
+        GameWorld.DebugLog("    还有剩余次数,更新启动时间: %s, nextStartReduceSeconds=%s" % (nextStartTime, nextStartReduceSeconds))
+        
     # 存储奖励
     rewardItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceRewardItem)
     for i in xrange(rewardItemCount):
@@ -794,28 +821,8 @@
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceRewardItem, rewardItemCount)
         #GameWorld.DebugLog("    新增探索奖励: itemID=%s,itemCount=%s,rewardItemCount=%s" % (itemID, itemCount, rewardItemCount))
         
-    if isStop:
-        GameWorld.DebugLog("    停止探索!")
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceState, 0)
-    else:
-        __DoActivityPlaceStart(curPlayer, nextStartReduceSeconds)
-        
+    Sync_ActivityPlaceInfo(curPlayer)
     return
-
-def __DoActivityPlaceStart(curPlayer, reduceSeconds=0):
-    
-    costPoint = IpyGameDataPY.GetFuncCfg("ActivityPlace", 2) # 单次放置消耗的活跃点数
-    canUseActivityPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityCanCostTotalPoint)
-    if canUseActivityPoint < costPoint:
-        GameWorld.DebugLog("活跃度不足,无法启动放置探索!canUseActivityPoint=%s" % canUseActivityPoint)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceState, 0)
-        return
-    startTime = int(time.time()) - reduceSeconds
-    GameWorld.DebugLog("    启动新一轮放置探索!reduceSeconds=%s" % reduceSeconds)
-    CostActivityPoint(curPlayer, costPoint)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceState, 1)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityPlaceStartTime, startTime)
-    return True
 
 def GetActivityPlaceReward(curPlayer):
     ## 领取活跃放置奖励
@@ -855,8 +862,8 @@
         itemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceRewardItemCount % i)
         rewardItemInfo.append([itemID, itemCount])
     placeInfo = ChPyNetSendPack.tagMCActivityPlaceInfo()
-    placeInfo.PlaceState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceState)
     placeInfo.StartTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceStartTime)
+    placeInfo.PlaceCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceRemainCount)
     placeInfo.RewardCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityPlaceRewardCount)
     placeInfo.RewardInfo = str(rewardItemInfo)
     placeInfo.RewardLen = len(placeInfo.RewardInfo)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
index 5c77754..b1a1c7d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -57,6 +57,7 @@
 import PlayerWing
 import ChEquip
 import PlayerYinji
+import PlayerActivity
 
 #---------------------------------------------------------------------
 #---------------------------------------------------------------------
@@ -1274,6 +1275,8 @@
     ProcessAreaExp(curPlayer, tick)
     #神秘商店刷新
     FunctionNPCCommon.CheckMysticalShopRefresh(curPlayer, tick)
+    #活跃放置
+    PlayerActivity.ProcessActivityPlace(curPlayer)
     #跨服数据同步,放最后
     CrossPlayerData.ProcessCrossPlayer(curPlayer, tick)
     return

--
Gitblit v1.8.0