From 37a0a0bba170701ee91b15c668b97b5b47a53289 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 26 十一月 2018 21:21:02 +0800
Subject: [PATCH] 4762 【后端】组队助战类型副本助战修改(混乱妖域);宗门、渡劫、娲皇、混乱妖域结算增加同步获得仙缘币信息;增加每日助战登记修行点; 召唤成功增加同步职业信息;
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py | 6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 5
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 8 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py | 135 ++++++++++++++++++----
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 8 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py | 10 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py | 46 +------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MunekadoTrial.py | 9 -
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_DuJie.py | 10 -
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py | 29 ++++
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 5
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py | 6 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py | 54 +++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 2
16 files changed, 246 insertions(+), 91 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 767623a..0985258 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -24930,6 +24930,7 @@
("SubCmd", c_ubyte),
("ObjID", c_int), # 助战实例ID
("PlayerID", c_int), # 助战镜像ID,大于1小于100代表机器人,如果是机器人前端按顺序自己记录对应实例ID代表已召唤
+ ("Job", c_ubyte), # 职业
]
def __init__(self):
@@ -24948,6 +24949,7 @@
self.SubCmd = 0x06
self.ObjID = 0
self.PlayerID = 0
+ self.Job = 0
return
def GetLength(self):
@@ -24961,13 +24963,15 @@
Cmd:%s,
SubCmd:%s,
ObjID:%d,
- PlayerID:%d
+ PlayerID:%d,
+ Job:%d
'''\
%(
self.Cmd,
self.SubCmd,
self.ObjID,
- self.PlayerID
+ self.PlayerID,
+ self.Job
)
return DumpString
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
index 2ce78a2..3f00186 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
@@ -24,6 +24,7 @@
import ChPyNetSendPack
import DataRecordPack
import PlayerControl
+import PlayerFriend
import ShareDefine
import PyGameData
import GameWorld
@@ -2905,6 +2906,23 @@
askMapID, askMapEx, memStateDict = PyGameData.g_prepareTeamDict[teamID][:3]
enterInfo = GetTeamFBEnterInfo(leader, curTeam, askMapID, askMapEx)
+ leaderID = leader.GetPlayerID()
+ friendList = []
+ memFamilyIDDict = {}
+ memNameDict = {}
+ #队长与队员的关系
+ for index in xrange(curTeam.GetMemberCount()):
+ memPlayer = curTeam.GetMemberPlayer(index)
+ if not memPlayer or not memPlayer.GetPlayerID():
+ continue
+ memPlayerID = memPlayer.GetPlayerID()
+ if memPlayerID not in memStateDict:
+ continue
+ memFamilyIDDict[memPlayerID] = memPlayer.GetFamilyID() # 存储各队员的家族ID
+ memNameDict[memPlayerID] = memPlayer.GetName()
+ if leaderID != memPlayerID and PlayerFriend.IsFriend(leaderID, memPlayerID):
+ friendList.append([leaderID, memPlayerID])
+
#踢出所有在此类副本,但不同线路的玩家
for index in xrange(curTeam.GetMemberCount()):
memPlayer = curTeam.GetMemberPlayer(index)
@@ -2926,8 +2944,17 @@
resultName = str([askMapID, askMapEx] + enterInfo)
memPlayer.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamAsk", resultName, len(resultName))
GameWorld.Log("队长成功进入组队副本, 队员开始进入副本: teamID=%s,memPlayerID=%s" % (teamID, memPlayerID), leader.GetPlayerID())
-
+ for preMemPlayerID in memStateDict.keys():
+ if memPlayerID == preMemPlayerID:
+ continue
+ if PlayerFriend.IsFriend(memPlayerID, preMemPlayerID) and [memPlayerID, preMemPlayerID] not in friendList:
+ friendList.append([memPlayerID, preMemPlayerID])
+
PyGameData.g_prepareTeamDict.pop(teamID)
+
+ # 同步进入组队副本的队员关系到目标地图
+ relationInfo = str([teamID, friendList, memFamilyIDDict, memNameDict])
+ leader.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamRelation", relationInfo, len(relationInfo))
return
def __CheckTeamFBPlayerExist(curTeam):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index e4da953..84cdb72 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -777,7 +777,7 @@
CDBPlayerRefresh_NPCHurtAddPer, # 对怪物伤害加成
CDBPlayerRefresh_FinalHurtPer, # 最终输出伤害百分比
CDBPlayerRefresh_TalentPoint, # 天赋点数 190
-CDBPlayerRefresh_DayFBHelpPoint, # 今日副本助战点数 191
+CDBPlayerRefresh_191, # 废弃 191
CDBPlayerRefresh_GodWeaponLV_1, # 神兵等级 - 类型1 192
CDBPlayerRefresh_GodWeaponLV_2, # 神兵等级 - 类型2 193
CDBPlayerRefresh_GodWeaponLV_3, # 神兵等级 - 类型3 194
@@ -1494,7 +1494,8 @@
DailyActionID_FamilyRobBoss, # 仙盟抢boss
DailyActionID_KillNPC, # 野外怪物
DailyActionID_IceLode, # 冰晶矿脉
-) = range(1, 19 + 1)
+DailyActionID_HelpBattleCheckIn, # 助战登记 20
+) = range(1, 20 + 1)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 6c1d7ed..45deeff 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3317,7 +3317,6 @@
Def_Player_Dict_RecoverFbCnt = "RecoverFbCnt_%s" # 今日找回的副本次数, 参数为副本ID
Def_Player_Dict_ItemAddFbCnt = "ItemAddFbCnt_%s" # 使用物品增加的副本次数, 参数为副本ID
Def_Player_Dict_EnterFbCntWeek = "EnterFbCntWeek_%s" # 本周进入副本次数, 参数为副本ID
-Def_Player_Dict_FBHelpPointCntDay = "FBHelpPointCntDay" # 今日已增加副本助战积分
Def_Player_Dict_FbCntRegainStartTime = "FbCntRegainStartTime_%s" # 副本次数恢复开始时间, 参数为副本ID
Def_Player_Dict_FbCntRegainTotalTime = "FbCntRegainTotalTime_%s" # 副本次数恢复还需时间, 参数为副本ID
Def_Player_Dict_FBHistoryMaxLine = "FBHistoryMaxLine_%s" # 副本历史最高通关, 参数为副本ID
@@ -3673,6 +3672,7 @@
#助战
Def_PDict_HelpBattleCheckInCount = "HelpBattleCheckInCount" #助战登记次数, 登记次数*10+今日是否登记过
Def_PDict_HelpBattleTotalCount = "HelpBattleTotalCount" #累计助战次数
+Def_PDict_FBRealHelpCount = "FBRealHelpCount_%s" #副本真实助战次数,仅针对真实进去打的副本,参数mapID
#-------------------------------------------------------------------------------
#类型 Def_PDictType_OnlinePrize
Def_PDict1_OnlinePrizeCnt = "OnlinePrizeCnt" # 新手在线已领取奖励次数
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 767623a..0985258 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -24930,6 +24930,7 @@
("SubCmd", c_ubyte),
("ObjID", c_int), # 助战实例ID
("PlayerID", c_int), # 助战镜像ID,大于1小于100代表机器人,如果是机器人前端按顺序自己记录对应实例ID代表已召唤
+ ("Job", c_ubyte), # 职业
]
def __init__(self):
@@ -24948,6 +24949,7 @@
self.SubCmd = 0x06
self.ObjID = 0
self.PlayerID = 0
+ self.Job = 0
return
def GetLength(self):
@@ -24961,13 +24963,15 @@
Cmd:%s,
SubCmd:%s,
ObjID:%d,
- PlayerID:%d
+ PlayerID:%d,
+ Job:%d
'''\
%(
self.Cmd,
self.SubCmd,
self.ObjID,
- self.PlayerID
+ self.PlayerID,
+ self.Job
)
return DumpString
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
index afaf44b..c3f52d5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
@@ -86,6 +86,7 @@
Over_extrScore = 'extrScore' #已获得额外积分
Over_enterLV = 'enterLV' #进入时等级
Over_leaderID = 'leaderID' #渡劫玩家ID
+Over_xianyuanCoin = 'xianyuanCoin' #获得仙缘币信息 [获得仙缘币数, 没有获得的原因] 原因: 1-达到助战次数上限,2-达到每日获得仙缘币上限
#副本行为
(
@@ -1547,35 +1548,6 @@
##获取是否助战
return GameWorld.GetGameFB().GetPlayerGameFBDictByKey(curPlayer.GetID(), ChConfig.FBPlayerDict_IsHelpFight)
-
-def AddFBHelpPoint(curPlayer, mapID, addFBCnt=1):
- ##增加副本助战积分
- PlayerControl.NotifyCode(curPlayer, 'TodayNoDungeonReward')
- fbIpyData = GetFBIpyData(mapID)
- helpPoint = fbIpyData.GetHelpPoint()
- if not helpPoint:
- return 0
- #任务
- EventShell.EventRespons_FBEvent(curPlayer, 'fbhelp')
- EventShell.EventRespons_FBEvent(curPlayer, 'fbhelp_%s'%mapID)
- # 每日活动
- PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_FBHelp)
- addHelpPoint = helpPoint * addFBCnt
- dayMaxPoint = IpyGameDataPY.GetFuncCfg('DungeonIntegral')
- curDayPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBHelpPointCntDay)
- if curDayPoint >= dayMaxPoint:
- PlayerControl.NotifyCode(curPlayer, 'AssistantIntegralFull')
- return 0
- addHelpPoint = min(addHelpPoint, dayMaxPoint-curDayPoint)
- updHelpPoint = curDayPoint+addHelpPoint
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBHelpPointCntDay, updHelpPoint)
- curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DayFBHelpPoint, updHelpPoint, False)
-
- PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_FBHelpPoint, addHelpPoint, isSysHint=False)
- PlayerControl.NotifyCode(curPlayer, 'AssistantIntegral', [addHelpPoint])
- GameWorld.DebugLog(" 增加副本助战积分!mapID=%s, addHelpPoint=%s"%(mapID, addHelpPoint), curPlayer.GetID())
- return addHelpPoint
-
def FBOnWeek(curPlayer, onWeekType):
mapIDInfo = []
@@ -1614,6 +1586,14 @@
for i in xrange(ipyDataMgr.GetFBFuncCount()):
ipyData = ipyDataMgr.GetFBFuncByIndex(i)
mapID = ipyData.GetDataMapID()
+
+ # 有真实助战次数奖励限制的
+ if ipyData.GetDayHelpCountMax():
+ helpCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FBRealHelpCount % mapID)
+ if helpCount:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FBRealHelpCount % mapID, 0)
+ GameWorld.DebugLog("重置日助战奖励次数限制!mapID=%s" % mapID)
+
dayTimes = ipyData.GetDayTimes()
# 没有日次数限制的不处理
if not dayTimes and not ipyData.GetBuyTimesVIPPriID() and not ipyData.GetExtraTimesVIPPriID() and not ipyData.GetExtraTimesMWPriID():
@@ -1662,10 +1642,6 @@
Sync_FBPlayerFBInfoData(curPlayer, mapIDInfo)
Sync_FBPlayerFBBuyCount(curPlayer, mapIDInfo)
- #重置每日获得的助战积分
- if onDayType ==ShareDefine.Def_OnEventTypeEx:
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBHelpPointCntDay, 0)
- curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DayFBHelpPoint, 0, False)
return
## 玩家通用副本登录处理
@@ -1680,10 +1656,8 @@
NotifyFBCntRegainInfo(curPlayer)
#判断副本里离线超过一定时间则退出副本
CheckFBPlayerOffine(curPlayer)
- #通知助战点数
- curDayPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBHelpPointCntDay)
- curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DayFBHelpPoint, curDayPoint, False)
return
+
def CheckFBPlayerOffine(curPlayer):
mapid = curPlayer.GetMapID()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py
index 61b4e32..6a2a3ec 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py
@@ -31,6 +31,8 @@
import NPCCommon
import FBLogic
import PlayerVip
+import IPY_GameWorld
+import PlayerActivity
def DoPlayerOnDay(curPlayer):
checkInInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HelpBattleCheckInCount)
@@ -40,6 +42,9 @@
checkInInfo = (checkInCount + 1) * 10 + 0
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HelpBattleCheckInCount, checkInInfo)
SyncCheckInState(curPlayer, 0, False)
+
+ # 重置每日已获得仙缘币
+ PlayerControl.SetTodayXianyuanCoin(curPlayer, 0)
return
def DoPlayerLogin(curPlayer):
@@ -103,6 +108,7 @@
if isOK:
checkInInfo = (checkInCount + 1) * 10 + 1
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HelpBattleCheckInCount, checkInInfo)
+ PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_HelpBattleCheckIn)
# 没有数据缓存的话,马上同步一次
if not haveViewCache:
@@ -227,6 +233,7 @@
callResultPack = ChPyNetSendPack.tagMCHelpBattleCallResult()
callResultPack.ObjID = objID
callResultPack.PlayerID = calledPlayerID
+ callResultPack.Job = job
NetPackCommon.SendFakePack(curPlayer, callResultPack)
# 召唤满后
@@ -419,16 +426,34 @@
PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FBHelpBattle, totalHelpCount)
return
-def DoSingleFBAddXianyuanCoin(curPlayer, mapID, lineID):
- ## 挑战单人副本增加仙缘币,仅适用于召唤镜像助战挑战的副本
+def DoFBAddXianyuanCoin(curPlayer, mapID, lineID, isHelp=False):
+ '''真人挑战副本增加仙缘币,包含过关或助战(不含镜像助战)
+ @param isHelp: 是否助战的
+ @return: 获得的仙缘币, 无法获得仙缘币原因(1-达到助战次数上限,2-达到每日获得仙缘币上限)
+ '''
playerID = curPlayer.GetPlayerID()
fbFuncIpyData = IpyGameDataPY.GetIpyGameData("FBFunc", mapID)
- fbHelpIpyData = IpyGameDataPY.GetIpyGameData("FBHelpBattle", mapID, lineID)
- if not fbFuncIpyData or not fbHelpIpyData:
- return
+ if not fbFuncIpyData:
+ return 0, 0
+ reason = 0
addCoinRate = 10000 # 基础倍率
- baseFBPoint = fbFuncIpyData.GetFBPoint() # 过关 - 基础仙缘币
+ if not isHelp:
+ baseFBPoint = fbFuncIpyData.GetFBPoint() # 过关 - 基础仙缘币
+ else:
+ baseFBPoint = fbFuncIpyData.GetHelpPoint() # 助战
+ dayHelpCountMax = fbFuncIpyData.GetDayHelpCountMax() # 真实助战每日可获得仙缘币次数
+ if dayHelpCountMax:
+ todayHelpCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FBRealHelpCount % mapID)
+ if todayHelpCount >= dayHelpCountMax:
+ baseFBPoint = 0
+ reason = 1
+ GameWorld.DebugLog("达到每日助战可获得仙缘币次数上限!无法再获得!mapID=%s" % (mapID), playerID)
+ else:
+ todayHelpCount += 1
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FBRealHelpCount % mapID, todayHelpCount)
+ GameWorld.DebugLog("增加每日助战可获得仙缘币次数!mapID=%s,todayHelpCount=%s" % (mapID, todayHelpCount), playerID)
+
xianyuanCoinUpper = IpyGameDataPY.GetFuncCfg("HelpBattlePoint", 1) # 每日仙缘币上限
relationCoinAddDict = IpyGameDataPY.GetFuncEvalCfg("HelpBattlePoint", 2, {}) # 社交关系加成 {"社交关系":[过关加成, 助战加成], ...}
todayXianyuanCoin = PlayerControl.GetTodayXianyuanCoin(curPlayer) # 今日已获得仙缘币
@@ -437,37 +462,95 @@
playerXianyuanCoinUpper += PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_XianyuanCoinUpperAdd)
addCoinRate += PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_XianyuanCoinAddPer)
- if todayXianyuanCoin >= playerXianyuanCoinUpper:
- GameWorld.DebugLog("玩家今日仙缘币已达上限!todayXianyuanCoin=%s,playerXianyuanCoinUpper=%s"
- % (todayXianyuanCoin, playerXianyuanCoinUpper), playerID)
- return
+ #达到上限也需要记录,所以这里暂不限制
+ #if todayXianyuanCoin >= playerXianyuanCoinUpper:
+ # GameWorld.DebugLog("玩家今日仙缘币已达上限!todayXianyuanCoin=%s,playerXianyuanCoinUpper=%s"
+ # % (todayXianyuanCoin, playerXianyuanCoinUpper), playerID)
+ # return
- relationAdd = 0
- helpBattlePlayerDict = PyGameData.g_fbHelpBattlePlayerDict.get(playerID, {})
- for helpPlayerInfoDict in helpBattlePlayerDict.values():
- relation = helpPlayerInfoDict.get("Relation", 0)
- if not relation:
- continue
- relationAddList = relationCoinAddDict.get(str(relation), [])
- relationAdd += relationAddList[1] if len(relationAddList) == 2 else 0
+ relationAdd, relationPlayerID, relationPlayerName = 0, 0, ""
+
+ fbType = GameWorld.GetMap().GetMapFBType()
+ if fbType == IPY_GameWorld.fbtSingle:
+ helpBattlePlayerDict = PyGameData.g_fbHelpBattlePlayerDict.get(playerID, {})
+ for helpPlayerInfoDict in helpBattlePlayerDict.values():
+ relation = helpPlayerInfoDict.get("Relation", 0)
+ if not relation:
+ continue
+ relationAddList = relationCoinAddDict.get(str(relation), [])
+ relationAdd += relationAddList[0] if len(relationAddList) == 2 else 0
+ elif fbType == IPY_GameWorld.fbtTeam:
+ relationAdd, relationPlayerID, relationPlayerName = __GetTeamFBMemRelationInfo(curPlayer, relationCoinAddDict, isHelp)
- coinAdd = int((baseFBPoint + relationAdd) * addCoinRate / 10000.0)
+ coinAdd = 0
+ if baseFBPoint:
+ coinAdd = int((baseFBPoint + relationAdd) * addCoinRate / 10000.0)
canAddMax = max(playerXianyuanCoinUpper - todayXianyuanCoin, 0)
coinAddReal = min(coinAdd, canAddMax) # 实际加仙缘币
-
- GameWorld.DebugLog("挑战单人副本增加仙缘币: coinAdd=%s,canAddMax=%s,coinAddReal=%s" % (coinAdd, canAddMax, coinAddReal), playerID)
+ if canAddMax == 0 and not reason:
+ reason = 2
+
+ GameWorld.DebugLog("挑战副本增加仙缘币: baseFBPoint=%s,relationAdd=%s,addCoinRate=%s,coinAdd=%s,canAddMax=%s,coinAddReal=%s,relationPlayerID=%s"
+ % (baseFBPoint, relationAdd, addCoinRate, coinAdd, canAddMax, coinAddReal, relationPlayerID), playerID)
if coinAddReal:
addDataDict = {"MapID":mapID, "FuncLineID":lineID}
PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanCoin, coinAddReal, addDataDict=addDataDict)
PlayerControl.AddTodayXianyuanCoin(curPlayer, coinAddReal)
# 通知自己获得仙缘币
- Sync_AddXianyuanCoinMsg(curPlayer, mapID, lineID, coinAddReal)
- return
+ Sync_AddXianyuanCoinMsg(curPlayer, mapID, lineID, coinAddReal, relationPlayerID, relationPlayerName)
+ return coinAddReal, reason
-def DoTeamFBAddXianyuanCoin(curPlayer, mapID, lineID, callPlayerID, callPlayerName, relation):
- ## 挑战组队副本增加仙缘币
- return
+def __GetTeamFBMemRelationInfo(curPlayer, relationCoinAddDict, isHelp):
+ relationAdd = 0 # 社交关系加成
+ relationPlayerID = 0
+ relationPlayerName = ""
+ teamID = curPlayer.GetTeamID()
+ if teamID not in PyGameData.g_teamFBMemRelationDict:
+ return relationAdd, relationPlayerID, relationPlayerName
+
+ friendList, memFamilyIDDict, memNameDict = PyGameData.g_teamFBMemRelationDict[teamID]
+ relationList = IpyGameDataPY.GetFuncEvalCfg("HelpBattlePoint", 3, []) # 社交关系优先级
+ playerID = curPlayer.GetPlayerID()
+ familyID = curPlayer.GetFamilyID()
+ if isHelp:
+ # 助战的随便取一位优先级最高的即可
+ for checkRelation in relationList:
+ memRelation, relationPlayerID = 0, 0
+ if checkRelation == 1:
+ for memPlayerID in memFamilyIDDict.keys():
+ if [playerID, memPlayerID] in friendList:
+ memRelation = checkRelation
+ relationPlayerID = memPlayerID
+ break
+ if checkRelation == 2:
+ for memPlayerID, memFamilyID in memFamilyIDDict.items():
+ if playerID != memPlayerID and familyID == memFamilyID:
+ memRelation = checkRelation
+ relationPlayerID = memPlayerID
+ break
+ if memRelation and relationPlayerID:
+ relationAddList = relationCoinAddDict.get(str(memRelation), [])
+ relationAdd += relationAddList[1] if len(relationAddList) == 2 else 0
+ relationPlayerName = memNameDict[relationPlayerID]
+ return relationAdd, relationPlayerID, relationPlayerName
+ else:
+ # 非助战享受所有队员加成
+ for memPlayerID, memFamilyID in memFamilyIDDict.items():
+ memRelation = 0
+ for checkRelation in relationList:
+ if [playerID, memPlayerID] in friendList:
+ memRelation = checkRelation
+ break
+ if playerID != memPlayerID and familyID == memFamilyID:
+ memRelation = checkRelation
+ break
+ if not memRelation:
+ continue
+ relationAddList = relationCoinAddDict.get(str(memRelation), [])
+ relationAdd += relationAddList[0] if len(relationAddList) == 2 else 0
+
+ return relationAdd, relationPlayerID, relationPlayerName
def Sync_AddXianyuanCoinMsg(curPlayer, mapID, funcLineID, addXianyuanCoin, callPlayerID=0, callPlayerName=""):
'''同步自己主动战斗获得仙缘币信息
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py
index fd1ba49..c84da43 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py
@@ -30,6 +30,7 @@
import ShareDefine
import ItemCommon
import PlayerSuccess
+import FBHelpBattle
import EventReport
import math
@@ -350,9 +351,9 @@
FBCommon.Notify_FB_Over(curPlayer, {FBCommon.Over_isPass: 0})
continue
overDict = {FBCommon.Over_grade:star,FBCommon.Over_dataMapID:mapID,FBCommon.Over_isPass:int(isPass), FBCommon.Over_costTime:costTime}
- #增加助战积分
+ isHelp = False
if FBCommon.GetIsHelpFight(curPlayer):
- FBCommon.AddFBHelpPoint(curPlayer, mapID, 1)
+ isHelp = True
else:
#给奖励
needSpace = len(prizeItemList)
@@ -374,7 +375,10 @@
expPoint = addExp / ChConfig.Def_PerPointValue
overDict[FBCommon.Over_exp] = exp
overDict[FBCommon.Over_expPoint] = expPoint
-
+
+ addXianyuanCoin, reason = FBHelpBattle.DoFBAddXianyuanCoin(curPlayer, mapID, 0, isHelp)
+ overDict[FBCommon.Over_xianyuanCoin] = [addXianyuanCoin, reason]
+
FBCommon.Notify_FB_Over(curPlayer, overDict)
#成就
PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_ChaosDemon, 1, [playerCount, star])
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_DuJie.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_DuJie.py
index 6cbe254..6e5be03 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_DuJie.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_DuJie.py
@@ -411,7 +411,6 @@
EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, ChConfig.CME_Log_End, 0, isPass)
curPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, leaveTick, True)
- FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, isPass, overDict)
if isPass and leaderPlayer:
if curPlayer.GetPlayerID() == leaderPlayerID:
#渡劫通过处理
@@ -420,18 +419,15 @@
FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_LastEnterFBTick % ChConfig.Def_FBMapID_DuJie, 0)
FBCommon.SyncFBEnterTick(curPlayer)
if lineID:
- FBHelpBattle.DoSingleFBAddXianyuanCoin(curPlayer, ChConfig.Def_FBMapID_DuJie, FBPropertyMark)
-# else:
-# #帮忙打的给奖励
-# __GiveTeamAward(curPlayer, leaderPlayer, realmIpyData, curStar)
-# EventShell.EventRespons_DujieFBHelpPass(curPlayer)
-# FBCommon.AddFBHelpPoint(curPlayer, ChConfig.Def_FBMapID_DuJie, 1)
+ addXianyuanCoin, reason = FBHelpBattle.DoFBAddXianyuanCoin(curPlayer, ChConfig.Def_FBMapID_DuJie, FBPropertyMark)
+ overDict[FBCommon.Over_xianyuanCoin] = [addXianyuanCoin, reason]
if realmIpyData and realmIpyData.GetIsBigRealm():
#成就
PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_DujieFBHelpPass, 1)
if playerCnt > 1: #多人组队渡劫
EventShell.EventRespons_FBEvent(curPlayer, 'teamdujie')
+ FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, isPass, overDict)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MunekadoTrial.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MunekadoTrial.py
index 6e97ffa..c2b2b34 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MunekadoTrial.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MunekadoTrial.py
@@ -428,16 +428,11 @@
EventShell.EventRespons_FBEvent(curPlayer, "zmsl_%s_%s" % (lineID, star))
PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_MunekadoTrial, 1, [playerCount, star, lineID+1])
EventShell.EventRespons_FBEvent(curPlayer, "passzmsl")
- #增加助战积分
-# if isHelpFight:
-# EventShell.EventRespons_FBEvent(curPlayer, "helpzmsl_%s"%lineID)
-# FBCommon.AddFBHelpPoint(curPlayer, mapID, 1)
-# overDict.pop(FBCommon.Over_itemInfo, 0)
-# else:
# 如果在副本中过天,则只给物品奖励,不变更过关信息
if not isInFBOnDay:
FBCommon.AddEnterFBCount(curPlayer, mapID, 1)
- FBHelpBattle.DoSingleFBAddXianyuanCoin(curPlayer, mapID, lineID)
+ addXianyuanCoin, reason = FBHelpBattle.DoFBAddXianyuanCoin(curPlayer, mapID, lineID)
+ overDict[FBCommon.Over_xianyuanCoin] = [addXianyuanCoin, reason]
needSyncFBData = False
else:
curPlayer.SetDict(ChConfig.Def_PlayerKey_IsInFBOnDay, 0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py
index 48022cf..2eb05d4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py
@@ -496,7 +496,6 @@
EventShell.EventRespons_PassQueenRelecs(curPlayer, lineID, grade)
#任务
EventShell.EventRespons_FBEvent(curPlayer, "queenrelics_pass")
- FBCommon.NotifyFBOver(curPlayer, dataMapID, lineID, isPass, overDict)
# 记录结算到的线路层,记录值+1
updRewardLine = lineID + 1
@@ -508,7 +507,8 @@
GameWorld.DebugLog("首次结算奖励,增加挑战次数!", playerID)
needSyncFBData = True
FBCommon.AddEnterFBCount(curPlayer, dataMapID)
- FBHelpBattle.DoSingleFBAddXianyuanCoin(curPlayer, mapID, lineID)
+ addXianyuanCoin, reason = FBHelpBattle.DoFBAddXianyuanCoin(curPlayer, mapID, lineID)
+ overDict[FBCommon.Over_xianyuanCoin] = [addXianyuanCoin, reason]
else:
GameWorld.DebugLog("副本中过天,不增加挑战次数!", playerID)
PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_QueenRelicsEx, 1)
@@ -521,6 +521,8 @@
if needSyncFBData:
FBCommon.Sync_FBPlayerFBInfoData(curPlayer, dataMapID) # 同步信息
+
+ FBCommon.NotifyFBOver(curPlayer, dataMapID, lineID, isPass, overDict)
return
def __GivePlayerQueenRelicsReward(curPlayer, dataMapID, rewardLineID, curLineID, passGrade, maxGrade, rewardRateList):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
index 11eb234..6c1429b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
@@ -106,6 +106,12 @@
ownerID = gameFBMgr.GetGameFBDictByKey(ChConfig.Def_FB_SingleFBPlayerID)
if ownerID in PyGameData.g_fbHelpBattlePlayerDict:
PyGameData.g_fbHelpBattlePlayerDict.pop(ownerID)
+ GameWorld.DebugLog("清除单人副本镜像助战信息: ownerID=%s" % ownerID)
+ elif fbType == IPY_GameWorld.fbtTeam:
+ teamID = gameWorld.GetPropertyID()
+ if teamID in PyGameData.g_teamFBMemRelationDict:
+ PyGameData.g_teamFBMemRelationDict.pop(teamID)
+ GameWorld.DebugLog("清除组队副本队员关系信息: teamID=%s" % teamID)
#副本关闭时统一清怪
FBCommon.ClearFBNPC()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index e8e6578..68a3307 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -5705,6 +5705,7 @@
## 玩家今日已获得仙缘币
def GetTodayXianyuanCoin(curPlayer): return curPlayer.GetExAttr11()
+def SetTodayXianyuanCoin(curPlayer, value): return curPlayer.SetExAttr11(value)
def AddTodayXianyuanCoin(curPlayer, addValue): return curPlayer.SetExAttr11(curPlayer.GetExAttr11() + addValue, False, True)
##VIP到期时间, 需要同步GameServer
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py
new file mode 100644
index 0000000..49de67a
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py
@@ -0,0 +1,54 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.RemoteQuery.GY_Query_EnterFBTeamRelation
+#
+# @todo:进入组队副本队员间社交关系信息
+# @author hxp
+# @date 2018-11-26
+# @version 1.0
+#
+# 详细描述: 进入组队副本队员间社交关系信息
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2018-11-26 下午4:18:04"""
+#-------------------------------------------------------------------------------
+#导入
+import PyGameData
+import GameWorld
+
+#---------------------------------------------------------------------
+
+
+#---------------------------------------------------------------------
+#逻辑实现
+## 请求逻辑
+# @param query_Type 请求类型
+# @param query_ID 请求的玩家ID
+# @param packCMDList 发包命令 [ ]
+# @param tick 当前时间
+# @return "True" or "False" or ""
+# @remarks 函数详细说明.
+def DoLogic(query_Type, query_ID, packCMDList, tick):
+ return
+
+
+#执行结果
+## 执行结果
+# @param curPlayer 发出请求的玩家
+# @param callFunName 功能名称
+# @param funResult 查询的结果
+# @param tick 当前时间
+# @return None
+# @remarks 函数详细说明.
+def DoResult(curPlayer, callFunName, funResult, tick):
+ try:
+ teamID, friendList, memFamilyIDDict, memNameDict = eval(funResult)
+ PyGameData.g_teamFBMemRelationDict[teamID] = [friendList, memFamilyIDDict, memNameDict]
+ GameWorld.Log("队员关系信息: teamID=%s,friendList=%s,memFamilyIDDict=%s" % (teamID, friendList, memFamilyIDDict))
+ except:
+ pass
+
+ return
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
index ef5989f..3869e0f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -71,3 +71,6 @@
g_fbHelpBattlePlayerDict = {} # 助战玩家信息 {playerID:{助战玩家ID:{助战玩家简要信息字典} ...}, ...}
+g_teamFBMemRelationDict = {} # 组队副本队员关系信息 {teamID:[[好友组合列表], {队员ID:家族ID, ...}], }
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index e4da953..84cdb72 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -777,7 +777,7 @@
CDBPlayerRefresh_NPCHurtAddPer, # 对怪物伤害加成
CDBPlayerRefresh_FinalHurtPer, # 最终输出伤害百分比
CDBPlayerRefresh_TalentPoint, # 天赋点数 190
-CDBPlayerRefresh_DayFBHelpPoint, # 今日副本助战点数 191
+CDBPlayerRefresh_191, # 废弃 191
CDBPlayerRefresh_GodWeaponLV_1, # 神兵等级 - 类型1 192
CDBPlayerRefresh_GodWeaponLV_2, # 神兵等级 - 类型2 193
CDBPlayerRefresh_GodWeaponLV_3, # 神兵等级 - 类型3 194
@@ -1494,7 +1494,8 @@
DailyActionID_FamilyRobBoss, # 仙盟抢boss
DailyActionID_KillNPC, # 野外怪物
DailyActionID_IceLode, # 冰晶矿脉
-) = range(1, 19 + 1)
+DailyActionID_HelpBattleCheckIn, # 助战登记 20
+) = range(1, 20 + 1)
--
Gitblit v1.8.0