From 45b5009e0cb3d02df92faf0cb8147ddd85544ec1 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 10 九月 2020 23:40:19 +0800
Subject: [PATCH] 0312 增加download文件夹

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAssist.py |  160 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 158 insertions(+), 2 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAssist.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAssist.py
index e0d7c0b..61815ea 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAssist.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAssist.py
@@ -25,6 +25,9 @@
 import ItemControler
 import ItemCommon
 import ChConfig
+import ShareDefine
+import PyGameData
+import FBCommon
 
 def DoPlayerOnDay(curPlayer):
     ## 过天处理
@@ -37,6 +40,20 @@
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayAssistMoney, 0)
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayAssistMoneySocial, 0)
     Sync_TodayAssistMoneyInfo(curPlayer)
+    return
+
+def OnPlayerLeaveMap(curPlayer):
+    ## 玩家离开地图处理
+    
+    NPCHurtManager.OnPlayerLeaveMap(curPlayer)
+    
+    mapID = curPlayer.GetMapID()
+    if GameWorld.GetMap().GetMapFBTypeByMapID(mapID) == IPY_GameWorld.fbtTeam:
+        mapAssistGiftDict = IpyGameDataPY.GetFuncEvalCfg("AssistAward", 2, {})
+        if str(mapID) in mapAssistGiftDict and PlayerControl.GetAssistTagPlayerID(curPlayer):
+            lineID = PlayerControl.GetFBFuncLineID(curPlayer)
+            OnCancelAssistTeamFB(curPlayer.GetPlayerID(), mapID, lineID, "LeaveMap")
+            
     return
 
 #// B0 10 请求协助Boss #tagCMRequestAssistBoss
@@ -53,6 +70,9 @@
     playerID = curPlayer.GetPlayerID()
     objID = clientData.ObjID
     npcID = clientData.NPCID
+    
+    if GameWorld.IsCrossServer():
+        return
     
     if not curPlayer.GetFamilyID():
         GameWorld.DebugLog("没有仙盟不能请求协助!", playerID)
@@ -80,9 +100,10 @@
         GameWorld.DebugLog("请求协助CD中!npcID=%s" % npcID, playerID)
         return
     
+    npcLV = curNPC.GetLV()
     mapID = curPlayer.GetMapID()
-    lineID = GameWorld.GetGameWorld().GetLineID()
-    queryData = [mapID, lineID, npcID, objID]
+    lineID = NPCHurtManager.GetBossLineID(npcID)
+    queryData = [mapID, lineID, npcID, objID, npcLV]
     QueryGameServer_PlayerAssist(playerID, "RequestAssistBoss", queryData)
     return
 
@@ -102,6 +123,9 @@
     mapID = clientData.MapID
     lineID = clientData.LineID
     
+    if GameWorld.IsCrossServer():
+        return
+    
     if not curPlayer.GetFamilyID():
         GameWorld.DebugLog("没有仙盟不能请求协助!", playerID)
         return
@@ -114,6 +138,21 @@
         GameWorld.DebugLog("请求协助CD中!mapID=%s,lineID=%s" % (mapID, lineID), playerID)
         return
     
+    mapAssistGiftDict = IpyGameDataPY.GetFuncEvalCfg("AssistAward", 2, {})
+    if str(mapID) not in mapAssistGiftDict:
+        return
+    
+    teamID = curPlayer.GetTeamID()
+    if teamID:
+        if curPlayer.GetTeamLV() != IPY_GameWorld.tmlLeader:
+            GameWorld.DebugLog("非队长,无法发布副本协助!")
+            return
+        
+    fbIpyData = FBCommon.GetFBIpyData(mapID)
+    fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, lineID)
+    if PlayerControl.CheckMoveToFB(curPlayer, mapID, lineID, fbIpyData, fbLineIpyData, tick) != ShareDefine.EntFBAskRet_OK:
+        return
+    
     queryData = [mapID, lineID]
     QueryGameServer_PlayerAssist(playerID, "RequestAssistTeamFB", queryData)
     return
@@ -122,6 +161,12 @@
     ## 开始协助组队副本,协助玩家进入副本调用
     queryData = [mapID, lineID, tagPlayerID]
     QueryGameServer_PlayerAssist(playerID, "OnStartAssistTeamFB", queryData)
+    return
+
+def OnCancelAssistTeamFB(playerID, mapID, lineID, reason):
+    ## 取消副本协助
+    queryData = [mapID, lineID, reason]
+    QueryGameServer_PlayerAssist(playerID, "OnCancelAssistTeamFB", queryData)
     return
 
 def QueryGameServer_PlayerAssist(playerID, queryType, queryData):
@@ -190,6 +235,117 @@
         
     return
 
+def OnPlayerEnterAssistFB(curPlayer, mapID, lineID=0):
+    ## 玩家进入协助副本
+    
+    if GameWorld.GetMap().GetMapFBTypeByMapID(mapID) != IPY_GameWorld.fbtTeam:
+        return
+    
+    mapAssistGiftDict = IpyGameDataPY.GetFuncEvalCfg("AssistAward", 2, {})
+    if str(mapID) not in mapAssistGiftDict:
+        return
+    
+    playerID = curPlayer.GetPlayerID()
+    gameFB = GameWorld.GetGameFB()
+    noAssistPlayerID = gameFB.GetGameFBDictByKey("FBNoAssistPlayerID")
+    if noAssistPlayerID:
+        if playerID != noAssistPlayerID:
+            OnStartAssistTeamFB(playerID, mapID, lineID, noAssistPlayerID)
+        return
+    
+    if curPlayer.GetTeamID():
+        if curPlayer.GetTeamLV() != IPY_GameWorld.tmlLeader:
+            # 非队长先进入的,暂不处理,等待队长进入后统一处理
+            return
+        
+    noAssistPlayerID = playerID # 队长或无队伍进入则为非协助玩家
+    gameFB.SetGameFBDict("FBNoAssistPlayerID", noAssistPlayerID)
+    GameWorld.DebugLog("设置副本非协助玩家: noAssistPlayerID=%s" % noAssistPlayerID)
+    
+    copyPlayerManager = GameWorld.GetMapCopyPlayerManager()
+    for index in xrange(copyPlayerManager.GetPlayerCount()):
+        player = copyPlayerManager.GetPlayerByIndex(index)
+        if not player:
+            continue
+        fbPlayerID = player.GetPlayerID()
+        if fbPlayerID == noAssistPlayerID:
+            continue
+        if PlayerControl.GetAssistTagPlayerID(player) != noAssistPlayerID:
+            OnStartAssistTeamFB(fbPlayerID, mapID, lineID, noAssistPlayerID)
+            
+    return
+
+def OnFBAssistOver(isPass, mapID, lineID=0):
+    ''' 副本协助结束
+    @return: noAssistPlayerID, assistMoneyType, assistPlayerMoneyDict
+        当 noAssistPlayerID 为0时代表没有成功结算协助,副本额外的协助奖励也不能结算,防止被刷协助奖励
+    '''
+    assistPlayerMoneyDict = {}
+    assistMoneyType = ShareDefine.TYPE_Price_FamilyActivity
+    defaultReturn = (0, assistMoneyType, assistPlayerMoneyDict)
+    gameFB = GameWorld.GetGameFB()
+    noAssistPlayerID = gameFB.GetGameFBDictByKey("FBNoAssistPlayerID")
+    GameWorld.DebugLog("副本协助结算: isPass=%s,mapID=%s,lineID=%s,noAssistPlayerID=%s" % (isPass, mapID, lineID, noAssistPlayerID))
+    
+    if not isPass or not noAssistPlayerID:
+        return defaultReturn
+    
+    copyPlayerManager = GameWorld.GetMapCopyPlayerManager()
+    noAssistPlayer = copyPlayerManager.FindPlayerByID(noAssistPlayerID)
+    if not noAssistPlayer:
+        GameWorld.DebugLog("    非协助玩家不在,不结算协助奖励!")
+        return defaultReturn
+    
+    mapAssistGiftDict = IpyGameDataPY.GetFuncEvalCfg("AssistAward", 2, {})
+    if str(mapID) not in mapAssistGiftDict:
+        return  defaultReturn
+    liheItemID, assistMoney = mapAssistGiftDict[str(mapID)]
+    
+    friendList, memFamilyIDDict = [], {}
+    teamID = GameWorld.GetGameWorld().GetPropertyID()
+    if teamID in PyGameData.g_teamFBMemRelationDict:
+        friendList, memFamilyIDDict = PyGameData.g_teamFBMemRelationDict[teamID][:2]
+    noAssistPlayerFamilyID = memFamilyIDDict.get(noAssistPlayerID, 0)
+    
+    assistAwardItemID = liheItemID
+    assistPlayerDict = {}
+    for index in xrange(copyPlayerManager.GetPlayerCount()):
+        curPlayer = copyPlayerManager.GetPlayerByIndex(index)
+        if not curPlayer:
+            continue
+        
+        playerID = curPlayer.GetPlayerID()
+        if playerID == noAssistPlayerID:
+            continue
+        
+        assistPlayer = curPlayer
+        assistPlayerID = playerID
+        isFriend = [noAssistPlayerID, playerID] in friendList or [playerID, noAssistPlayerID] in friendList
+        assistFamilyID = assistPlayer.GetFamilyID()
+        
+        addAssistMoney = AddTodayAssistMoney(curPlayer, assistMoneyType, assistMoney, isFriend)
+        assistPlayerMoneyDict[assistPlayerID] = addAssistMoney
+        GameWorld.DebugLog("协助方给活跃令奖励: assistPlayerID=%s,assistMoney=%s,isFriend=%s,addAssistMoney=%s" 
+                           % (assistPlayerID, assistMoney, isFriend, addAssistMoney), mapID, lineID)
+        
+        todayGiftCount = assistPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GetThanksGiftCount % liheItemID)
+        assistPlayerDict[assistPlayerID] = {"PlayerName":assistPlayer.GetPlayerName(), "Job":assistPlayer.GetJob(), 
+                                            "LV":assistPlayer.GetLV(), "RealmLV":assistPlayer.GetOfficialRank(),
+                                            "TodayGiftCount":todayGiftCount}
+        
+        # 暂定支持同队伍不同仙盟间协助
+        if assistFamilyID and assistFamilyID == noAssistPlayerFamilyID:
+            notifyParam = [assistPlayer.GetPlayerName(), noAssistPlayer.GetPlayerName(), mapID]
+            PlayerControl.FamilyNotify(assistFamilyID, "AssistFBFinish", notifyParam)
+                
+    if assistPlayerDict:
+        GameWorld.DebugLog("发布方给感谢礼盒奖励: noAssistPlayerID=%s,assistAwardItemID=%s" % (noAssistPlayerID, assistAwardItemID), mapID, lineID)
+        ItemControler.GivePlayerItemOrMail(noAssistPlayer, [[assistAwardItemID, 1, 0]])
+        
+    queryData = [mapID, lineID, noAssistPlayerID, assistAwardItemID, assistPlayerDict]
+    QueryGameServer_PlayerAssist(0, "OnFBAssistOver", queryData)
+    return noAssistPlayerID, assistMoneyType, assistPlayerMoneyDict
+
 def AddTodayAssistMoney(curPlayer, moneyType, addMoney, isSocialEx):
     ''' 增加今日协助货币奖励    
     @param moneyType: 货币类型

--
Gitblit v1.8.0