From 1220086d487c28e3c265fdbbeb4e9ba5dbafd787 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 30 五月 2019 16:49:47 +0800
Subject: [PATCH] 6805 【后端】【2.0】副本前端化(支持骑乘、宠物的召唤限制处理)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py    |    2 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py      |   23 +++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py  |   17 +++++++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py    |    2 +
 PySysDB/PySysDBPY.h                                                                       |    9 ++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py |   17 ++++++--
 6 files changed, 62 insertions(+), 8 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 1b3f7e7..55693eb 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -538,6 +538,15 @@
 	dict		SweepGoodDrop;	//扫荡珍稀符印
 };
 
+//地图表格
+
+struct tagChinMap
+{
+	DWORD		_MapID;	//地图ID
+	BYTE		CanRide;	//可否骑乘
+	BYTE		CanOutPet;	//可否召唤宠物
+};
+
 //副本总表
 
 struct tagFBFunc
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 2a96f71..782cf3e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -451,6 +451,12 @@
                         ("dict", "SweepGoodDrop", 0),
                         ),
 
+                "ChinMap":(
+                        ("DWORD", "MapID", 1),
+                        ("BYTE", "CanRide", 0),
+                        ("BYTE", "CanOutPet", 0),
+                        ),
+
                 "FBFunc":(
                         ("DWORD", "DataMapID", 1),
                         ("BYTE", "DayTimes", 0),
@@ -2335,6 +2341,19 @@
     def GetSweepRunePoint(self): return self.SweepRunePoint # 扫荡符印精华
     def GetSweepYsog(self): return self.SweepYsog # 扫荡魔精
     def GetSweepGoodDrop(self): return self.SweepGoodDrop # 扫荡珍稀符印
+
+# 地图表格
+class IPY_ChinMap():
+    
+    def __init__(self):
+        self.MapID = 0
+        self.CanRide = 0
+        self.CanOutPet = 0
+        return
+        
+    def GetMapID(self): return self.MapID # 地图ID
+    def GetCanRide(self): return self.CanRide # 可否骑乘
+    def GetCanOutPet(self): return self.CanOutPet # 可否召唤宠物
 
 # 副本总表
 class IPY_FBFunc():
@@ -4562,6 +4581,8 @@
         self.ipyNPCDropItemLen = len(self.ipyNPCDropItemCache)
         self.ipyRuneTowerCache = self.__LoadFileData("RuneTower", IPY_RuneTower)
         self.ipyRuneTowerLen = len(self.ipyRuneTowerCache)
+        self.ipyChinMapCache = self.__LoadFileData("ChinMap", IPY_ChinMap)
+        self.ipyChinMapLen = len(self.ipyChinMapCache)
         self.ipyFBFuncCache = self.__LoadFileData("FBFunc", IPY_FBFunc)
         self.ipyFBFuncLen = len(self.ipyFBFuncCache)
         self.ipyFBLineCache = self.__LoadFileData("FBLine", IPY_FBLine)
@@ -5024,6 +5045,8 @@
     def GetNPCDropItemByIndex(self, index): return self.ipyNPCDropItemCache[index]
     def GetRuneTowerCount(self): return self.ipyRuneTowerLen
     def GetRuneTowerByIndex(self, index): return self.ipyRuneTowerCache[index]
+    def GetChinMapCount(self): return self.ipyChinMapLen
+    def GetChinMapByIndex(self, index): return self.ipyChinMapCache[index]
     def GetFBFuncCount(self): return self.ipyFBFuncLen
     def GetFBFuncByIndex(self, index): return self.ipyFBFuncCache[index]
     def GetFBLineCount(self): return self.ipyFBLineLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index d07bd51..3a9db86 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -260,6 +260,8 @@
     if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene):
         PlayerFB.DoExitCustomScene(curPlayer)
         
+    PetControl.DoLogic_PetLoadMapOK(curPlayer)
+    
     msgInfo = ""
     GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetPlayerID(), 0, 0, "RefreshMainServerRole", msgInfo, len(msgInfo))
     return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
index 827b656..6b72837 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
@@ -46,6 +46,7 @@
 import BaseAttack
 import PassiveBuffEffMng
 import ChNetSendPack
+import IpyGameDataPY
 #---------------------------------------------------------------------
 
 DefPetRebornHPRate = 100  # 宠物死亡复活血量百分比
@@ -460,7 +461,7 @@
 # @return BOOL 是否可出战
 # @remarks 检查当前指定宠物是否可出战
 def CheckPetCanFight(curPlayer, curPetObj):
-    if not GameWorld.GetMap().GetMapCanOutPet():
+    if not GetMapCanOutPet(curPlayer):
         #Pet_liubo_314885 此地图禁止宠物
         PlayerControl.NotifyCode(curPlayer, "Pet_liubo_314885")
         return False
@@ -546,7 +547,7 @@
     if not rolePet.GetIsBattle():
         return
     
-    if not GameWorld.GetMap().GetMapCanOutPet():
+    if not GetMapCanOutPet(curPlayer):
         #此地图禁止宠物
         return
     #召唤宠物出战
@@ -578,7 +579,7 @@
 # @remarks 
 def DoLogic_PetLoadMapOK(curPlayer):
     
-    if GameWorld.GetMap().GetMapCanOutPet():
+    if GetMapCanOutPet(curPlayer):
         #此地图宠物可以上
         PlayerPet.AutoSummonPet(curPlayer)
         return
@@ -591,6 +592,16 @@
     PlayerControl.NotifyCode(curPlayer, "Pet_liubo_314885")
     return
 
+def GetMapCanOutPet(curPlayer):
+    ## 检查本地图可否出战宠物,支持前端自定义场景
+    customMapID = PlayerControl.GetCustomMapID(curPlayer)
+    if customMapID:
+        ipyMapData = IpyGameDataPY.GetIpyGameData("ChinMap", customMapID)
+        canOutPet = True if ipyMapData and ipyMapData.GetCanOutPet() else False
+    else:
+        canOutPet = GameWorld.GetMap().GetMapCanOutPet()
+    return canOutPet
+
 #---------------------------------------------------------------------
 ## 刷新宠物信息并通知客户端
 #  @param rolePet 宠物实例
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
index 693d3c0..172104d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
@@ -40,6 +40,7 @@
 import FBHelpBattle
 import SkillShell
 import PyGameData
+import PetControl
 import NPCCommon
 
 import time
@@ -510,6 +511,7 @@
     PlayerControl.SetCustomMap(curPlayer, mapID, lineID)
     GameWorld.Log("玩家开始自定义场景!mapID=%s,lineID=%s" % (mapID, lineID), playerID)
     if mapID:
+        PetControl.DoLogic_PetLoadMapOK(curPlayer)
         FBLogic.OnEnterCustomScene(curPlayer, mapID, lineID)
         
     #通知进入状态
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
index ca5bf25..29b3bfb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
@@ -188,11 +188,18 @@
     # 未加载成功骑乘会导致模型加载失败报错
     if not curPlayer.GetInitOK():
         return False
-                    
-    #地图不允许骑马 RideLimit_lhs_0
-    if not GameWorld.GetMap().GetMapCanRide():
-        PlayerControl.NotifyCode(curPlayer, "RideLimit_lhs_0")
-        return False
+    
+    customMapID = PlayerControl.GetCustomMapID(curPlayer)
+    if customMapID:
+        ipyMapData = IpyGameDataPY.GetIpyGameData("ChinMap", customMapID)
+        if not ipyMapData or not ipyMapData.GetCanRide():
+            PlayerControl.NotifyCode(curPlayer, "RideLimit_lhs_0")
+            return False
+    else:
+        #地图不允许骑马 RideLimit_lhs_0
+        if not GameWorld.GetMap().GetMapCanRide():
+            PlayerControl.NotifyCode(curPlayer, "RideLimit_lhs_0")
+            return False
     
     #检查玩家状态,只有在空闲状态才能上马
     if curPlayer.GetPlayerVehicle() != IPY_GameWorld.pvNull :

--
Gitblit v1.8.0