From f6da6b8d7d635786271d4e0ed923b843c5b59676 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 16 四月 2019 20:14:52 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/SnxxServerCode

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearCollectNPCCnt.py                    |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                                               |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py                           |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                                   |  119 +++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                                     |   18 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py                                     |   94 ++++++++++---
 PySysDB/PySysDBPY.h                                                                                                      |    8 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py |   37 +++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py                          |   10 +
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                                                        |  119 +++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FairyTreasure.py  |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                                          |    3 
 12 files changed, 385 insertions(+), 35 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 89f6a1a..8e4c221 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1014,9 +1014,13 @@
 	DWORD		_NPCID;	//ID
 	BYTE		PrepareTime;	//采集耗时,秒
 	list		LostHPPer;	//采集掉血,[每X秒,掉血百分比]
-	BYTE		MaxCollectCount;	//每日可采集次数,0限制
+	BYTE		MaxCollectCount;	//可采集次数,0无限制
+	BYTE		CollectResetType;	//采集次数重置类型,0-不重置,1-每日5点重置
 	char		CollectCountLimitNotify;	//无采集次数采集提示
-	list		CollectAward;	//采集奖励物品, [物品ID,个数,是否绑定]
+	list		CollectAward;	//采集奖励物品,权重列表 [[权重, [物品ID,个数,是否拍品]], ...]
+	dict		CollectAppointAward;	//采集次数定制产出 {次数:[物品ID,个数,是否拍品], ...}
+	BYTE		AlchemyDiffLV;	//过滤炼丹等级差,0-不过滤,>0过滤大于自身炼丹等级X级的物品
+	BYTE		NotifyCollectResult;	//是否通知采集结果
 };
 
 //宝箱表开启
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index cbc1371..4f17db3 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -18959,6 +18959,125 @@
 
 
 #------------------------------------------------------
+# A7 18 采集奖励物品通知 #tagMCCollectAwardItemInfo
+
+class  tagMCCollectAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("Count", c_ubyte),    
+                  ("IsAuctionItem", c_ubyte),    #是否拍品
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        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.ItemID = 0
+        self.Count = 0
+        self.IsAuctionItem = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCollectAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A7 18 采集奖励物品通知 //tagMCCollectAwardItemInfo:
+                                ItemID:%d,
+                                Count:%d,
+                                IsAuctionItem:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.Count,
+                                self.IsAuctionItem
+                                )
+        return DumpString
+
+
+class  tagMCCollectAwardItemInfo(Structure):
+    Head = tagHead()
+    CollectNPCID = 0    #(DWORD CollectNPCID)//采集的NPCID
+    Count = 0    #(BYTE Count)
+    AwardItemList = list()    #(vector<tagMCCollectAwardItem> AwardItemList)//奖励物品信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x18
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.CollectNPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temAwardItemList = tagMCCollectAwardItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x18
+        self.CollectNPCID = 0
+        self.Count = 0
+        self.AwardItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.AwardItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.CollectNPCID)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                CollectNPCID:%d,
+                                Count:%d,
+                                AwardItemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.CollectNPCID,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCCollectAwardItemInfo=tagMCCollectAwardItemInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCollectAwardItemInfo.Head.Cmd,m_NAtagMCCollectAwardItemInfo.Head.SubCmd))] = m_NAtagMCCollectAwardItemInfo
+
+
+#------------------------------------------------------
 # A7 13 动态障碍物状态 #tagMCDynamicBarrierState
 
 class  tagMCDynamicBarrier(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index cbb88d8..323de3b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -745,9 +745,9 @@
 PacketSubCMD_1=0x52
 PacketCallFunc_1=OnBuyCollectionCnt
 
-PacketCMD_2=
-PacketSubCMD_2=
-PacketCallFunc_2=
+PacketCMD_2=A2
+PacketSubCMD_2=34
+PacketCallFunc_2=OnGetCustomSceneCollectAward
 
 PacketCMD_3=0xA5
 PacketSubCMD_3=0x0A
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 72f7417..dbd0171 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3449,7 +3449,8 @@
 Def_PDict_KillPlayerAddActive = "KillPlayerAddActiveByDay"  # 杀人每日获得活跃度
 Def_PDict_LoginDayCnt = "PLoginDayCnt"  # 累计登陆天数
 Def_PDict_LoginDayAward = "PLoginDayAward"  # 累计登陆领取情况
-Def_PDict_CollNpcIDCollTime = "CollNpcIDCollTime_%s"   # 采集NPCID对应每日对应采集次数,%sNPCID
+Def_PDict_CollNpcIDCollTime = "NPCIDCollTime_%s"   # 采集NPCID对应每日对应采集次数,%sNPCID
+Def_PDict_CollNpcIDCollTimeTotal = "NPCIDCollTimeTotal_%s"   # 采集NPCID对应对应采集总次数,%sNPCID
 Def_PDict_ShopItemDayBuyCnt = "ShopItemDayBuyCnt_%s"   # 商店NPC商品已购买次数,itemIndex
 Def_PDict_ShopItemStartTime = "ShopItemStartTime_%s"   # 神秘限购商品开卖时间,itemIndex
 Def_PDict_MysticalShopGoods = "MysticalShopGoods_%s"   # 神秘商店商品ID,索引
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index cbc1371..4f17db3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -18959,6 +18959,125 @@
 
 
 #------------------------------------------------------
+# A7 18 采集奖励物品通知 #tagMCCollectAwardItemInfo
+
+class  tagMCCollectAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("Count", c_ubyte),    
+                  ("IsAuctionItem", c_ubyte),    #是否拍品
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        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.ItemID = 0
+        self.Count = 0
+        self.IsAuctionItem = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCollectAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A7 18 采集奖励物品通知 //tagMCCollectAwardItemInfo:
+                                ItemID:%d,
+                                Count:%d,
+                                IsAuctionItem:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.Count,
+                                self.IsAuctionItem
+                                )
+        return DumpString
+
+
+class  tagMCCollectAwardItemInfo(Structure):
+    Head = tagHead()
+    CollectNPCID = 0    #(DWORD CollectNPCID)//采集的NPCID
+    Count = 0    #(BYTE Count)
+    AwardItemList = list()    #(vector<tagMCCollectAwardItem> AwardItemList)//奖励物品信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x18
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.CollectNPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temAwardItemList = tagMCCollectAwardItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x18
+        self.CollectNPCID = 0
+        self.Count = 0
+        self.AwardItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.AwardItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.CollectNPCID)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                CollectNPCID:%d,
+                                Count:%d,
+                                AwardItemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.CollectNPCID,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCCollectAwardItemInfo=tagMCCollectAwardItemInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCollectAwardItemInfo.Head.Cmd,m_NAtagMCCollectAwardItemInfo.Head.SubCmd))] = m_NAtagMCCollectAwardItemInfo
+
+
+#------------------------------------------------------
 # A7 13 动态障碍物状态 #tagMCDynamicBarrierState
 
 class  tagMCDynamicBarrier(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearCollectNPCCnt.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearCollectNPCCnt.py
index 641ea481..e2b742e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearCollectNPCCnt.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearCollectNPCCnt.py
@@ -38,6 +38,7 @@
     for index in xrange(ipyDataMgr.GetCollectNPCCount()):
         ipyData = ipyDataMgr.GetCollectNPCByIndex(index)
         npcID = ipyData.GetNPCID()
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CollNpcIDCollTimeTotal % npcID, 0)
         if not ipyData.GetMaxCollectCount():
             continue
         if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CollNpcIDCollTime % npcID):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py
index 0b2d18e..4bf5191 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py
@@ -14,12 +14,37 @@
 #-------------------------------------------------------------------------------
 #"""Version = 2019-04-15 16:30"""
 #-------------------------------------------------------------------------------
+
 import GameWorld
 import GameWorldProcess
+import PlayerFairyDomain
 import NPCCustomRefresh
+import IpyGameDataPY
 import PyGameData
+import NPCCommon
+
+def DoResetCrossGrassland(curPlayer, eventType):
+    ## 草园重置
+    
+    resetCollectType = 10 + eventType
+    NPCCommon.DoResetCollectNPCTimeByType(curPlayer, [resetCollectType])
+    
+    # 宝箱怪次数重置
+    
+    return
+    
+def __SetGrasslandVisitState(curPlayer, mapID, lineID, state):
+    ipyData = IpyGameDataPY.GetIpyGameDataByCondition("FairyDomain", {"MapID":mapID, "LineID":lineID})
+    if not ipyData:
+        return False
+    eventID = ipyData.GetID()
+    if not PlayerFairyDomain.SetFairyDomainEventState(curPlayer, eventID, state):
+        return False
+    return True
 
 def OnEnterFBEvent(curPlayer, mapID, lineID, tick):
+    if not __SetGrasslandVisitState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visiting):
+        return False
     return True
 
 ## 开启副本
@@ -52,7 +77,6 @@
 
 ## 副本总逻辑计时器
 def OnProcess(tick):
-    #gameFB = GameWorld.GetGameFB()
     return
 
 ## 关闭副本
@@ -82,4 +106,15 @@
         
     return
 
+## 客户端进入自定义场景
+def OnEnterCustomScene(curPlayer, mapID, lineID):
+    __SetGrasslandVisitState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visiting)
+    return
+
+## 给自定义副本奖励后续处理
+## @return: 返回结算副本over信息字典,不含jsonItem信息
+def OnGiveCustomFBPrizeOK(curPlayer, mapID, lineID):
+    __SetGrasslandVisitState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visited)
+    overDict = {}
+    return overDict
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FairyTreasure.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FairyTreasure.py
index a18207e..71c577b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FairyTreasure.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FairyTreasure.py
@@ -30,6 +30,7 @@
 import ChPlayer
 import EventReport
 import ChNPC
+import ItemCommon
 
 
 FBPlayerDict_CurStep = 'FBPlayerDict_CurStep'   # 当前阶段
@@ -350,7 +351,7 @@
                 itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
                 if not itemData:
                     return
-                if curAlchemyLV < itemData.GetLV() - 1:
+                if curAlchemyLV < ItemCommon.GetItemClassLV(itemData) - 1:
                     #丹炉等级不足
                     continue
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index e9efd34..2a9dd94 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -817,8 +817,12 @@
                         ("BYTE", "PrepareTime", 0),
                         ("list", "LostHPPer", 0),
                         ("BYTE", "MaxCollectCount", 0),
+                        ("BYTE", "CollectResetType", 0),
                         ("char", "CollectCountLimitNotify", 0),
                         ("list", "CollectAward", 0),
+                        ("dict", "CollectAppointAward", 0),
+                        ("BYTE", "AlchemyDiffLV", 0),
+                        ("BYTE", "NotifyCollectResult", 0),
                         ),
 
                 "Chests":(
@@ -3066,16 +3070,24 @@
         self.PrepareTime = 0
         self.LostHPPer = []
         self.MaxCollectCount = 0
+        self.CollectResetType = 0
         self.CollectCountLimitNotify = ""
-        self.CollectAward = []
+        self.CollectAward = []
+        self.CollectAppointAward = {}
+        self.AlchemyDiffLV = 0
+        self.NotifyCollectResult = 0
         return
         
     def GetNPCID(self): return self.NPCID # ID
     def GetPrepareTime(self): return self.PrepareTime # 采集耗时,秒
     def GetLostHPPer(self): return self.LostHPPer # 采集掉血,[每X秒,掉血百分比]
-    def GetMaxCollectCount(self): return self.MaxCollectCount # 每日可采集次数,0限制
+    def GetMaxCollectCount(self): return self.MaxCollectCount # 可采集次数,0无限制
+    def GetCollectResetType(self): return self.CollectResetType # 采集次数重置类型,0-不重置,1-每日5点重置
     def GetCollectCountLimitNotify(self): return self.CollectCountLimitNotify # 无采集次数采集提示
-    def GetCollectAward(self): return self.CollectAward # 采集奖励物品, [物品ID,个数,是否绑定]
+    def GetCollectAward(self): return self.CollectAward # 采集奖励物品,权重列表 [[权重, [物品ID,个数,是否拍品]], ...]
+    def GetCollectAppointAward(self): return self.CollectAppointAward # 采集次数定制产出 {次数:[物品ID,个数,是否拍品], ...}
+    def GetAlchemyDiffLV(self): return self.AlchemyDiffLV # 过滤炼丹等级差,0-不过滤,>0过滤大于自身炼丹等级X级的物品
+    def GetNotifyCollectResult(self): return self.NotifyCollectResult # 是否通知采集结果
 
 # 宝箱表开启
 class IPY_Chests():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
index 193d34f..0b599b0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
@@ -1967,7 +1967,7 @@
     classLV = GetItemClassLV(curItem)
     return maxStarDict[str(itemColor)].get(str(classLV), 0)
 
-## 获取物品阶级
+## 获取物品阶级或品级
 def GetItemClassLV(curItem):
     return curItem.GetLV()
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
index b01f4b0..ba806e7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -5487,21 +5487,6 @@
     return max(value / pow(10, nlen), 1)
 
 
-Def_CollNPCCfg_Len = 10
-(
-Def_CollNPCCfg_CanTogether, # 是否允许同时采集
-Def_CollNPCCfg_SysMsgMark, # 不可同时采集提示
-Def_CollNPCCfg_CostItemInfo, # 采集消耗物品信息
-Def_CollNPCCfg_PrepareTime, # 采集时间毫秒
-Def_CollNPCCfg_ExpFormat, # 获得经验公式
-Def_CollNPCCfg_MoneyFormat, # 获得金币公式
-Def_CollNPCCfg_ZhenQi, # 获得的真气/魔魂
-Def_CollNPCCfg_GiveItemModeID, # 获得的物品信息模板编号
-Def_CollNPCCfg_NotCostItemNotify, # 消耗品不足提示
-Def_CollNPCCfg_LimitSysMsgMark, #采集上限提示
-) = range(Def_CollNPCCfg_Len)
-
-
 def CheckCanCollectByNPCID(curPlayer, npcID, collectNPCIpyData):
     # 根据NPCID判断是否可以采集
     
@@ -5667,6 +5652,24 @@
         DoGiveCollectNPCAward(curPlayer, npcID, collectNPCIpyData)
     return
 
+#// A2 34 自定义场景中获取采集奖励 #tagCMGetCustomSceneCollectAward
+#
+#struct    tagCMGetCustomSceneCollectAward
+#{
+#    tagHead        Head;
+#    DWORD        NPCID;    //采集的NPCID
+#};
+def OnGetCustomSceneCollectAward(index, clientData, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    npcID = clientData.NPCID
+    if not curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene):
+        GameWorld.DebugLog("非自定义场景中,无法获取定义采集奖励!")
+        return
+    collectNPCIpyData = IpyGameDataPY.GetIpyGameData("CollectNPC", npcID)
+    if collectNPCIpyData:
+        DoGiveCollectNPCAward(curPlayer, npcID, collectNPCIpyData)
+    return
+
 def DoGiveCollectNPCAward(curPlayer, npcID, collectNPCIpyData, collectCnt=1):
     GameWorld.DebugLog("给采集奖励: npcID=%s,collectCnt=%s" % (npcID, collectCnt))
     if collectCnt <= 0:
@@ -5684,13 +5687,52 @@
         updCollTime = todayCollTime + collectCnt
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CollNpcIDCollTime % npcID, updCollTime)
         SyncCollNPCTime(curPlayer, [npcID])
-        GameWorld.DebugLog("        增加当日采集次数: todayCollTime=%s,updCollTime=%s" % (todayCollTime, updCollTime))
-     
-    giveItemList = collectNPCIpyData.GetCollectAward()
-    if giveItemList:
-        itemID, itemCount, isAuctionItem = giveItemList
-        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem])
+        GameWorld.DebugLog("        增加采集次数: todayCollTime=%s,updCollTime=%s" % (todayCollTime, updCollTime))
         
+    awardIitemList = []
+    collectAwardCfg = collectNPCIpyData.GetCollectAward()
+    collectAppointAwardCfg = collectNPCIpyData.GetCollectAppointAward()
+    if collectAppointAwardCfg:
+        collTotalTime = min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CollNpcIDCollTimeTotal % npcID) + 1, ChConfig.Def_UpperLimit_DWord)
+        if collTotalTime in collectAppointAwardCfg:
+            awardIitemList.append(collectAppointAwardCfg[collTotalTime])
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CollNpcIDCollTimeTotal % npcID, collTotalTime)
+        #GameWorld.DebugLog("采集次数定制奖励: collTotalTime=%s,awardIitemList=%s" % (collTotalTime, awardIitemList))
+        
+    if not awardIitemList:
+        alchemyDiffLV = collectNPCIpyData.GetAlchemyDiffLV()
+        giveItemWeightList = []
+        if alchemyDiffLV:
+            curAlchemyLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyLV)
+            for itemInfo in collectAwardCfg:
+                itemID = itemInfo[1][0]
+                itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
+                if not itemData:
+                    continue
+                if ItemCommon.GetItemClassLV(itemData) > curAlchemyLV + alchemyDiffLV:
+                    continue
+                giveItemWeightList.append(itemInfo)
+        else:
+            giveItemWeightList = collectAwardCfg
+            
+        giveItemInfo = GameWorld.GetResultByWeightList(giveItemWeightList)
+        awardIitemList.append(giveItemInfo)
+        
+    if awardIitemList:
+        for itemID, itemCount, isAuctionItem in awardIitemList:
+            ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem])
+        if collectNPCIpyData.GetNotifyCollectResult():
+            awardPack = ChPyNetSendPack.tagMCCollectAwardItemInfo()
+            awardPack.CollectNPCID = npcID
+            for itemID, itemCount, isAuctionItem in awardIitemList:
+                awardItem = ChPyNetSendPack.tagMCCollectAwardItem()
+                awardItem.ItemID = itemID
+                awardItem.Count = itemCount
+                awardItem.IsAuctionItem = isAuctionItem
+                awardPack.AwardItemList.append(awardItem)
+            awardPack.Count = len(awardPack.AwardItemList)
+            NetPackCommon.SendFakePack(curPlayer, awardPack)
+            
     #采集成就
     PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Collect, collectCnt, [npcID])
     #SyncCollectionItemInfo(curPlayer, addExp, addMoney, addZhenQi, giveItemInfoList, npcID)
@@ -5740,11 +5782,20 @@
 
 def CollNPCTimeOnDay(curPlayer):
     ## 采集NPCOnDay处理
+    DoResetCollectNPCTimeByType(curPlayer, 1)
+    return
+
+def DoResetCollectNPCTimeByType(curPlayer, resetTypeList=[]):
+    '''重置采集物采集次数
+            重置类型: 0-不重置,1-每日5点,12-灵草园重置,14-仙草园重置
+    '''
     resetNPCIDList = []
     ipyDataMgr = IpyGameDataPY.IPY_Data()
     for index in xrange(ipyDataMgr.GetCollectNPCCount()):
         ipyData = ipyDataMgr.GetCollectNPCByIndex(index)
         npcID = ipyData.GetNPCID()
+        if resetTypeList and ipyData.GetCollectResetType() not in resetTypeList:
+            continue
         if not ipyData.GetMaxCollectCount():
             continue
         if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CollNpcIDCollTime % npcID):
@@ -5753,6 +5804,7 @@
         resetNPCIDList.append(npcID)
         
     if resetNPCIDList:
+        #GameWorld.DebugLog("重置采集次数: resetTypeList=%s,resetNPCIDList=%s" % (resetTypeList, resetNPCIDList), curPlayer.GetPlayerID())
         SyncCollNPCTime(curPlayer, resetNPCIDList)
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
index f92ce14..ee256ce 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
@@ -21,6 +21,7 @@
 import NetPackCommon
 import ShareDefine
 import GameWorld
+import GameLogic_CrossGrassland
 import PlayerControl
 import IpyGameDataPY
 import PlayerActivity
@@ -35,9 +36,9 @@
 (
 FDEventType0,
 FDEventType1,
-FDEventType2,
+FDEventType_GrasslandXian,
 FDEventType3,
-FDEventType4,
+FDEventType_GrasslandLing,
 ) = range(5)
 
 (
@@ -236,6 +237,11 @@
             GameWorld.Log('缥缈仙域事件状态设置,体力不足!,fdeventID=%s, costEnergy=%s, curEnergy=%s' % (fdeventID, costEnergy, curEnergy))
             return
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEnergy, curEnergy - costEnergy)
+        
+        # 草园重置
+        if ipyData.GetEventType() in [FDEventType_GrasslandXian, FDEventType_GrasslandLing]:
+            GameLogic_CrossGrassland.DoResetCrossGrassland(curPlayer, ipyData.GetEventType())
+            
     elif state == FDEventState_Visited:
         if curState != FDEventState_Visiting:
             GameWorld.Log('缥缈仙域事件状态设置错误,fdeventID=%s, state=%s, curState=%s' % (fdeventID, state, curState))

--
Gitblit v1.8.0