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 | 209 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 203 insertions(+), 6 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 fae0769..61815ea 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAssist.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAssist.py
@@ -19,10 +19,15 @@
import IpyGameDataPY
import PlayerControl
import NPCHurtManager
+import ChPyNetSendPack
+import NetPackCommon
import IPY_GameWorld
import ItemControler
import ItemCommon
import ChConfig
+import ShareDefine
+import PyGameData
+import FBCommon
def DoPlayerOnDay(curPlayer):
## 过天处理
@@ -32,6 +37,23 @@
ipyData = ipyDataMgr.GetAssistThanksGiftByIndex(index)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GetThanksGiftCount % ipyData.GetGiftID(), 0)
+ 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
@@ -49,13 +71,19 @@
objID = clientData.ObjID
npcID = clientData.NPCID
+ if GameWorld.IsCrossServer():
+ return
+
if not curPlayer.GetFamilyID():
GameWorld.DebugLog("没有仙盟不能请求协助!", playerID)
return
curNPC = GameWorld.FindNPCByNPCID(npcID)
- if not curNPC or curNPC.GetID() != objID:
- GameWorld.DebugLog("协助NPC不存在无法协助!", playerID)
+ if not curNPC:
+ GameWorld.DebugLog("协助NPC不存在无法协助!npcID=%s" % npcID, playerID)
+ return
+ if curNPC.GetID() != objID:
+ GameWorld.DebugLog("协助NPC实例ID不一致无法协助!npcID=%s,curNPC.GetID()=%s,sendObjID=%s" % (npcID, curNPC.GetID(), objID), playerID)
return
ipyData = IpyGameDataPY.GetIpyGameDataNotLog('BOSSInfo', npcID)
@@ -72,11 +100,10 @@
GameWorld.DebugLog("请求协助CD中!npcID=%s" % npcID, playerID)
return
+ npcLV = curNPC.GetLV()
mapID = curPlayer.GetMapID()
- lineID = 0
- if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull: # 副本型boss,如封魔坛
- lineID = PlayerControl.GetFBFuncLineID(curPlayer)
- queryData = [mapID, lineID, npcID, objID]
+ lineID = NPCHurtManager.GetBossLineID(npcID)
+ queryData = [mapID, lineID, npcID, objID, npcLV]
QueryGameServer_PlayerAssist(playerID, "RequestAssistBoss", queryData)
return
@@ -96,6 +123,9 @@
mapID = clientData.MapID
lineID = clientData.LineID
+ if GameWorld.IsCrossServer():
+ return
+
if not curPlayer.GetFamilyID():
GameWorld.DebugLog("没有仙盟不能请求协助!", playerID)
return
@@ -108,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
@@ -116,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):
@@ -184,4 +235,150 @@
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: 货币类型
+ @param addMoney: 常规增加,有每日上限
+ @param isSocialEx: 是否社交加成,不计入常规上限
+ '''
+
+ todayAssistMoney = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayAssistMoney)
+ socialMoney = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayAssistMoneySocial)
+ todayAssistMoneyMax = IpyGameDataPY.GetFuncCfg("AssistAward", 4)
+ if todayAssistMoney >= todayAssistMoneyMax:
+ return 0
+
+ addValue = min(addMoney, todayAssistMoneyMax - todayAssistMoney)
+ socialEx = 0
+ if isSocialEx:
+ friendAddAssistMoneyPer = IpyGameDataPY.GetFuncCfg("AssistAward", 3)
+ socialEx = int(addValue * friendAddAssistMoneyPer / 100.0)
+
+ realAdd = addValue + socialEx
+ PlayerControl.GiveMoney(curPlayer, moneyType, realAdd)
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayAssistMoney, todayAssistMoney + addValue)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayAssistMoneySocial, socialMoney + socialEx)
+
+ Sync_TodayAssistMoneyInfo(curPlayer)
+ return realAdd
+
+def Sync_TodayAssistMoneyInfo(curPlayer):
+ ## 通知今日已获得协助货币信息
+ infoPack = ChPyNetSendPack.tagMCTodayAssistMoneyInfo()
+ infoPack.TodayAssistMoney = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayAssistMoney)
+ infoPack.SocialMoney = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayAssistMoneySocial)
+ NetPackCommon.SendFakePack(curPlayer, infoPack)
+ return
--
Gitblit v1.8.0