From 91c306890bf90cd86de289478762e5ea55c55ff2 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期六, 24 十一月 2018 15:39:36 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/SnxxServerCode

---
 ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py                                                   |   85 ++++++++++++++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                              |   10 ++
 PySysDB/PySysDBPY.h                                                                                               |    4 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_IceLode.py |   39 +++++++++---
 PySysDB/PySysDBG.h                                                                                                |   31 ++++++++++
 5 files changed, 155 insertions(+), 14 deletions(-)

diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index dbe801f..d5d5eba 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -115,6 +115,14 @@
 	dict		NotifyInfoDict;	//广播提示信息
 };
 
+//副本总表
+
+struct tagFBFunc
+{
+	DWORD		_DataMapID;	//数据地图ID
+	WORD		HelpPoint;	//助战仙缘币(0代表不可助战)
+};
+
 //副本功能线路表
 
 struct tagFBLine
@@ -209,6 +217,29 @@
 	DWORD		ReFightPower;	//战斗力
 };
 
+//VIP特权表
+
+struct tagVipPrivilege
+{
+    DWORD   _VIPPriID;  //特权ID
+    DWORD   VIP0;   //VIP0对应的特权值
+    DWORD   VIP1;   //VIP1对应的特权值
+    DWORD   VIP2;   //VIP2对应的特权值
+    DWORD   VIP3;   //VIP3对应的特权值
+    DWORD   VIP4;   //VIP4对应的特权值
+    DWORD   VIP5;   //VIP5对应的特权值
+    DWORD   VIP6;    //VIP6对应的特权值
+    DWORD   VIP7;    //VIP7对应的特权值
+    DWORD   VIP8;    //VIP8对应的特权值
+    DWORD   VIP9;    //VIP9对应的特权值
+    DWORD   VIP10;   //VIP10对应的特权值
+    DWORD   VIP11;   //VIP11对应的特权值
+    DWORD   VIP12;   //VIP12对应的特权值
+    DWORD   VIP13;   //VIP13对应的特权值
+    DWORD   VIP14;   //VIP14对应的特权值
+    DWORD   VIP15;   //VIP15对应的特权值
+};
+
 //限时特惠表
 
 struct tagActSpringSale
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index aae0d2d..03a904a 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -519,7 +519,9 @@
 	DWORD		ExtraTimesMWPriID;	//额外次数法宝权限ID
 	BYTE		GuardPick;	//该地图守护是否能拾取
 	WORD		OfflineTime;	//离线多久退出副本(秒)
-	WORD		HelpPoint;	//助战积分(0代表不可助战)
+	WORD		FBPoint;	//副本过关仙缘币
+	WORD		HelpPoint;	//助战仙缘币(0代表不可助战)
+	BYTE		DayHelpCountMax;	//每日手动助战获得仙缘币次数(非镜像)
 };
 
 //副本功能线路表
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index c6a03fb..b20b719 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -122,6 +122,11 @@
                         ("dict", "NotifyInfoDict", 0),
                         ),
 
+                "FBFunc":(
+                        ("DWORD", "DataMapID", 1),
+                        ("WORD", "HelpPoint", 0),
+                        ),
+
                 "FBLine":(
                         ("DWORD", "DataMapID", 1),
                         ("BYTE", "LineID", 1),
@@ -186,6 +191,26 @@
                 "PlayerLV":(
                         ("WORD", "LV", 1),
                         ("DWORD", "ReFightPower", 0),
+                        ),
+
+                "VipPrivilege":(
+                        ("DWORD", "VIPPriID", 1),
+                        ("DWORD", "VIP0", 0),
+                        ("DWORD", "VIP1", 0),
+                        ("DWORD", "VIP2", 0),
+                        ("DWORD", "VIP3", 0),
+                        ("DWORD", "VIP4", 0),
+                        ("DWORD", "VIP5", 0),
+                        ("DWORD", "VIP6", 0),
+                        ("DWORD", "VIP7", 0),
+                        ("DWORD", "VIP8", 0),
+                        ("DWORD", "VIP9", 0),
+                        ("DWORD", "VIP10", 0),
+                        ("DWORD", "VIP11", 0),
+                        ("DWORD", "VIP12", 0),
+                        ("DWORD", "VIP13", 0),
+                        ("DWORD", "VIP14", 0),
+                        ("DWORD", "VIP15", 0),
                         ),
 
                 "ActSpringSale":(
@@ -543,6 +568,17 @@
     def GetStateValue(self): return self.StateValue # 状态值
     def GetNotifyInfoDict(self): return self.NotifyInfoDict # 广播提示信息
 
+# 副本总表
+class IPY_FBFunc():
+    
+    def __init__(self):
+        self.DataMapID = 0
+        self.HelpPoint = 0
+        return
+        
+    def GetDataMapID(self): return self.DataMapID # 数据地图ID
+    def GetHelpPoint(self): return self.HelpPoint # 助战仙缘币(0代表不可助战)
+
 # 副本功能线路表
 class IPY_FBLine():
     
@@ -683,6 +719,47 @@
         
     def GetLV(self): return self.LV # 玩家等级
     def GetReFightPower(self): return self.ReFightPower # 战斗力
+
+# VIP特权表
+class IPY_VipPrivilege():
+    
+    def __init__(self):
+        self.VIPPriID = 0
+        self.VIP0 = 0
+        self.VIP1 = 0
+        self.VIP2 = 0
+        self.VIP3 = 0
+        self.VIP4 = 0
+        self.VIP5 = 0
+        self.VIP6 = 0
+        self.VIP7 = 0
+        self.VIP8 = 0
+        self.VIP9 = 0
+        self.VIP10 = 0
+        self.VIP11 = 0
+        self.VIP12 = 0
+        self.VIP13 = 0
+        self.VIP14 = 0
+        self.VIP15 = 0
+        return
+        
+    def GetVIPPriID(self): return self.VIPPriID # 特权ID
+    def GetVIP0(self): return self.VIP0 # VIP0对应的特权值
+    def GetVIP1(self): return self.VIP1 # VIP1对应的特权值
+    def GetVIP2(self): return self.VIP2 # VIP2对应的特权值
+    def GetVIP3(self): return self.VIP3 # VIP3对应的特权值
+    def GetVIP4(self): return self.VIP4 # VIP4对应的特权值
+    def GetVIP5(self): return self.VIP5 # VIP5对应的特权值
+    def GetVIP6(self): return self.VIP6 # VIP6对应的特权值
+    def GetVIP7(self): return self.VIP7 # VIP7对应的特权值
+    def GetVIP8(self): return self.VIP8 # VIP8对应的特权值
+    def GetVIP9(self): return self.VIP9 # VIP9对应的特权值
+    def GetVIP10(self): return self.VIP10 # VIP10对应的特权值
+    def GetVIP11(self): return self.VIP11 # VIP11对应的特权值
+    def GetVIP12(self): return self.VIP12 # VIP12对应的特权值
+    def GetVIP13(self): return self.VIP13 # VIP13对应的特权值
+    def GetVIP14(self): return self.VIP14 # VIP14对应的特权值
+    def GetVIP15(self): return self.VIP15 # VIP15对应的特权值
 
 # 限时特惠表
 class IPY_ActSpringSale():
@@ -1066,6 +1143,8 @@
         self.ipyFBStateTimeLen = len(self.ipyFBStateTimeCache)
         self.ipyFBStateTimeCustomCache = self.__LoadFileData("FBStateTimeCustom", IPY_FBStateTimeCustom)
         self.ipyFBStateTimeCustomLen = len(self.ipyFBStateTimeCustomCache)
+        self.ipyFBFuncCache = self.__LoadFileData("FBFunc", IPY_FBFunc)
+        self.ipyFBFuncLen = len(self.ipyFBFuncCache)
         self.ipyFBLineCache = self.__LoadFileData("FBLine", IPY_FBLine)
         self.ipyFBLineLen = len(self.ipyFBLineCache)
         self.ipyFBHelpBattleCache = self.__LoadFileData("FBHelpBattle", IPY_FBHelpBattle)
@@ -1084,6 +1163,8 @@
         self.ipyChinNPCLen = len(self.ipyChinNPCCache)
         self.ipyPlayerLVCache = self.__LoadFileData("PlayerLV", IPY_PlayerLV)
         self.ipyPlayerLVLen = len(self.ipyPlayerLVCache)
+        self.ipyVipPrivilegeCache = self.__LoadFileData("VipPrivilege", IPY_VipPrivilege)
+        self.ipyVipPrivilegeLen = len(self.ipyVipPrivilegeCache)
         self.ipyActSpringSaleCache = self.__LoadFileData("ActSpringSale", IPY_ActSpringSale)
         self.ipyActSpringSaleLen = len(self.ipyActSpringSaleCache)
         self.ipyActFlashGiftbagCache = self.__LoadFileData("ActFlashGiftbag", IPY_ActFlashGiftbag)
@@ -1292,6 +1373,8 @@
     def GetFBStateTimeByIndex(self, index): return self.ipyFBStateTimeCache[index]
     def GetFBStateTimeCustomCount(self): return self.ipyFBStateTimeCustomLen
     def GetFBStateTimeCustomByIndex(self, index): return self.ipyFBStateTimeCustomCache[index]
+    def GetFBFuncCount(self): return self.ipyFBFuncLen
+    def GetFBFuncByIndex(self, index): return self.ipyFBFuncCache[index]
     def GetFBLineCount(self): return self.ipyFBLineLen
     def GetFBLineByIndex(self, index): return self.ipyFBLineCache[index]
     def GetFBHelpBattleCount(self): return self.ipyFBHelpBattleLen
@@ -1310,6 +1393,8 @@
     def GetChinNPCByIndex(self, index): return self.ipyChinNPCCache[index]
     def GetPlayerLVCount(self): return self.ipyPlayerLVLen
     def GetPlayerLVByIndex(self, index): return self.ipyPlayerLVCache[index]
+    def GetVipPrivilegeCount(self): return self.ipyVipPrivilegeLen
+    def GetVipPrivilegeByIndex(self, index): return self.ipyVipPrivilegeCache[index]
     def GetActSpringSaleCount(self): return self.ipyActSpringSaleLen
     def GetActSpringSaleByIndex(self, index): return self.ipyActSpringSaleCache[index]
     def GetActFlashGiftbagCount(self): return self.ipyActFlashGiftbagLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_IceLode.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_IceLode.py
index 32dd8df..d46382d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_IceLode.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_IceLode.py
@@ -31,6 +31,7 @@
 import EventReport
 import ChPyNetSendPack
 import NetPackCommon
+import BuffSkill
 
 import random
 import datetime
@@ -218,6 +219,7 @@
 # @param tick 时间戳
 # @return 无意义
 def DoExitFB(curPlayer, tick):
+    
     return
 
 ##玩家主动离开副本.
@@ -227,6 +229,12 @@
 def DoPlayerLeaveFB(curPlayer, tick):
     return
 
+##玩家切换地图
+def DoPlayerChangeMapLogic(curPlayer):
+    tick = GameWorld.GetGameWorld().GetTick()
+    for buffID in IpyGameDataPY.GetFuncEvalCfg('IceLodeSpecial', 2):
+        BuffSkill.DelBuffBySkillID(curPlayer, buffID, tick)
+    return
 
 def OnPickUpItem(curPlayer, curItem, tick):
     return
@@ -448,12 +456,7 @@
         return False
     return True
 
-## 执行副本杀怪逻辑
-#  @param curPlayer 杀怪的人
-#  @param curNPC 被杀的怪
-#  @param tick 当前时间
-#  @return None
-def DoFB_Player_KillNPC(curPlayer, curNPC, tick):
+def __OnKillNPC(attacker, curNPC, tick):
     gameFB = GameWorld.GetGameFB()
     npcid = curNPC.GetNPCID()
     npcCfg = GetIceLodeNPCCfg()
@@ -468,8 +471,22 @@
     remainNPCCnt = max(0, gameFB.GetGameFBDictByKey(FBPlayerDict_RemainNPCCnt) - 1)
     gameFB.SetGameFBDict(FBPlayerDict_RemainNPCCnt, remainNPCCnt)
     
-    if remainNPCCnt <=0:
+    if remainNPCCnt <=0 or npcid in IpyGameDataPY.GetFuncEvalCfg('IceLodeSpecial'):
         __DoIceLodeOver(True)
+    return
+
+def DoFB_Npc_KillNPC(attacker, curNPC, tick):
+    __OnKillNPC(attacker, curNPC, tick)
+    return
+
+## 执行副本杀怪逻辑
+#  @param curPlayer 杀怪的人
+#  @param curNPC 被杀的怪
+#  @param tick 当前时间
+#  @return None
+def DoFB_Player_KillNPC(curPlayer, curNPC, tick):
+    __OnKillNPC(curPlayer, curNPC, tick)
+    
     
 #    addPoint = GetPointByNPCID(npcid)
 #    if not addPoint:
@@ -562,10 +579,10 @@
     FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttLeaveMap, FBCommon.GetFBLineStepTime(mapID)[Def_LeaveTime] * 1000)
     
     # 清怪,关闭刷怪
-    FBCommon.ClearFBNPC()
-    npcCfg = GetIceLodeNPCCfg()
-    for npcInfo in npcCfg:
-        NPCCustomRefresh.CloseNPCRefresh(npcInfo[Def_RefreshMark], tick)
+#    FBCommon.ClearFBNPC()
+#    npcCfg = GetIceLodeNPCCfg()
+#    for npcInfo in npcCfg:
+#        NPCCustomRefresh.CloseNPCRefresh(npcInfo[Def_RefreshMark], tick)
     
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index de72342..eadc205 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -437,7 +437,9 @@
                         ("DWORD", "ExtraTimesMWPriID", 0),
                         ("BYTE", "GuardPick", 0),
                         ("WORD", "OfflineTime", 0),
+                        ("WORD", "FBPoint", 0),
                         ("WORD", "HelpPoint", 0),
+                        ("BYTE", "DayHelpCountMax", 0),
                         ),
 
                 "FBLine":(
@@ -1950,7 +1952,9 @@
         self.ExtraTimesMWPriID = 0
         self.GuardPick = 0
         self.OfflineTime = 0
-        self.HelpPoint = 0
+        self.FBPoint = 0
+        self.HelpPoint = 0
+        self.DayHelpCountMax = 0
         return
         
     def GetDataMapID(self): return self.DataMapID # 数据地图ID
@@ -1964,7 +1968,9 @@
     def GetExtraTimesMWPriID(self): return self.ExtraTimesMWPriID # 额外次数法宝权限ID
     def GetGuardPick(self): return self.GuardPick # 该地图守护是否能拾取
     def GetOfflineTime(self): return self.OfflineTime # 离线多久退出副本(秒)
-    def GetHelpPoint(self): return self.HelpPoint # 助战积分(0代表不可助战)
+    def GetFBPoint(self): return self.FBPoint # 副本过关仙缘币
+    def GetHelpPoint(self): return self.HelpPoint # 助战仙缘币(0代表不可助战)
+    def GetDayHelpCountMax(self): return self.DayHelpCountMax # 每日手动助战获得仙缘币次数(非镜像)
 
 # 副本功能线路表
 class IPY_FBLine():

--
Gitblit v1.8.0