From 81de9d0ad10ff2e5c73cc311e8cca6b4e7e42bcf Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 19 四月 2019 19:21:06 +0800
Subject: [PATCH] 6459 【后端】【2.0】缥缈仙域开发单(跨服副本动态线路分流人数配置)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 144 +++++++++++++++++++++++++++++++++--------------
1 files changed, 100 insertions(+), 44 deletions(-)
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 0953bf8..ab00db7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -1211,12 +1211,11 @@
PyGameData.g_needRefreshMapServerState = True # 有玩家离开地图设置需要刷新
PlayerSuccess.FinishDelayAddSuccessProgress(curPlayer, tick)
-
+ playerID = curPlayer.GetPlayerID()
if not isDisconnect:
CrossPlayerData.ClearCrossSyncDataCache(curPlayer)
-
+ PyGameData.g_fbBuyBuffTimeDict.pop(playerID, None)
#清除地图玩家缓存
- playerID = curPlayer.GetPlayerID()
PyGameData.g_zhuXianSkillAddPerDict.pop(playerID, None)
PyGameData.g_zhuXianSkillReducePerDict.pop(playerID, None)
PyGameData.g_playerFuncAttrDict.pop(playerID, None)
@@ -1617,22 +1616,41 @@
NotifyCode(curPlayer, "SingleEnterPK", [mapID])
return
+ fbIpyData = FBCommon.GetFBIpyData(mapID)
+ if fbIpyData:
+ fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, lineID, False)
+ if not fbLineIpyData:
+ GameWorld.DebugLog("副本表找不到副本对应功能线路!mapID=%s,lineID=%s" % (mapID, lineID))
+ return
+ ret = FBCommon.CheckCanEnterFBComm(curPlayer, mapID, lineID, fbIpyData, fbLineIpyData)
+ if ret != ShareDefine.EntFBAskRet_OK:
+ return
+
+ tick = GameWorld.GetGameWorld().GetTick()
+ for mapIDList in ChConfig.Def_FB_MapID.values():
+ if mapID not in mapIDList:
+ continue
+ if not FBLogic.OnEnterFBEvent(curPlayer, mapID, lineID, tick):
+ NotifyCode(curPlayer, "SingleEnterDefaul")
+ return
+ break
+
# 需要动态分布线路的地图,发送到跨服服务器进行分配
if mapID in ChConfig.Def_CrossDynamicLineMap:
extendInfo = {}
if mapID == ChConfig.Def_FBMapID_CrossDemonKing:
- bossID = GameLogic_CrossDemonKing.GetCurFBLineBOSSID(lineID)
+ bossID = GameLogic_CrossDemonKing.GetCurFBLineBOSSID(mapID, lineID)
if not bossID:
return
extendInfo["BossID"] = bossID
- msgDict = {"PlayerID":curPlayer.GetPlayerID(), "DataMapID":mapID, "FuncLineID":lineID}
+ msgDict = {"PlayerID":curPlayer.GetPlayerID(), "MapID":mapID, "FuncLineID":lineID}
if extendInfo:
msgDict.update(extendInfo)
GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_EnterFB, msgDict)
return
- GY_Query_CrossRealmReg.RegisterEnterCrossServer(curPlayer, mapID)
+ GY_Query_CrossRealmReg.RegisterEnterCrossServer(curPlayer, mapID, lineID=lineID)
return
##玩家进入副本
@@ -1728,6 +1746,9 @@
if enterCnt >= FBCommon.GetEnterFBMaxCnt(curPlayer, ChConfig.Def_FBMapID_ZhuXianBoss):
if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhuXianBossHelpCnt):
extendParamList = [bossID, curPlayer.GetFamilyID()]
+ elif mapID == ChConfig.Def_FBMapID_DemonKing:
+ bossID = GameLogic_CrossDemonKing.GetCurFBLineBOSSID(mapID, lineID)
+ extendParamList = [bossID]
SendToGameServerEnterFB(curPlayer, mapID, lineID, tick, extendParamList)
return
@@ -3417,16 +3438,21 @@
curLV = curPlayer.GetLV()
if curLV < openLV:
return 0
+ # 初始点+升级点+境界点
+ setFreePoint = IpyGameDataPY.GetFuncCfg("LVUPAddPoint", 2)
+
addPointDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAddPoint", 1, {})
- initFreePoint = IpyGameDataPY.GetFuncCfg("LVUPAddPoint", 2)
- setFreePoint = initFreePoint
- for lv in xrange(openLV, curLV+1):
- setFreePoint += GameWorld.GetDictValueByRangeKey(addPointDict, lv, 0)
+ for rangLVs, point in addPointDict.items():
+ if curLV < rangLVs[0]:
+ continue
+ setFreePoint += point * (min(curLV, rangLVs[1]) - rangLVs[0] + 1)
+
+ #境界提升点数
+ setFreePoint += curPlayer.GetOfficialRank() * IpyGameDataPY.GetFuncCfg("LVUPAddPoint", 3)
return setFreePoint
def DoAddPointOpen(curPlayer):
- '''加点功能开启 处理给自由属性点及老号处理
- 清除老服玩家未加点的点数(清零),以前加的加点属性不清除,属性不变,战力不减, 根据最新的加点开启等级和老服玩家的当前等级,相差的差值给予玩家对应的加点点数'''
+ '''加点功能开启'''
beforeFreePoint = curPlayer.GetFreePoint()
setFreePoint = GetAllPointByLV(curPlayer)
@@ -3464,8 +3490,6 @@
def ClearAttr(self):
for attrIndex in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
value = 0
-# if attrIndex == ChConfig.TYPE_Calc_SuperHit:
-# value = ChConfig.Def_SuperHitPercent # 默认最低暴击倍值
setattr(self, self.__AttrName % attrIndex, value)
for attrIndex in self.__NolineAttrList:
setattr(self, self.__AttrNameNoline % attrIndex, 0)
@@ -3514,15 +3538,18 @@
Miss = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrMiss) * fpParam.GetCftMiss() # 闪避值
AtkSpeed = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrAtkSpeed) # 攻击速度(数值非攻击间隔)
SuperHitRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHitRate) # 暴击率
- SuperHit = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHit) # 暴击伤害倍率
- SuperHitReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHitReducePer) * fpParam.GetCftSuperHitReduce() # 暴击伤害减免
+ SuperHitRateReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHitRateReduce) # 暴击概率抗性
+ SuperHit = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHit) # 暴击伤害固定值
+ SuperHitReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHitReduce) * fpParam.GetCftSuperHitReduce() # 暴击固定减伤
LuckyHitRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHitRate) # 会心一击
- LuckyHit = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHit) # 会心一击伤害倍率
LuckyHitRateReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHitRateReduce) * fpParam.GetCftLuckyHitRateReduce() # 会心一击概率抗性
+ LuckyHit = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHit) # 会心一击伤害固定值
+ LuckyHitReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHitReduce) # 会心一击伤害固定减伤
SkillAtkRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SkillAtkRate) * fpParam.GetCftSkillAtkRate() # 技能攻击比例加成
SkillAtkRateReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SkillAtkRateReduce) * fpParam.GetCftSkillAtkRateReduce() # 技能攻击比例减少
- DamagePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePer) * fpParam.GetCftDamagePer() # 伤害输出计算百分比
- DamReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrDamReduce) * fpParam.GetCftDamReduce() # 伤害输出计算百分比减少, 伤害吸收
+ DamagePVP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePVP) * fpParam.GetCftDamagePer() # PVP固定伤害
+ DamagePVPReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePVPReduce) * fpParam.GetCftDamReduce() # PVP固定减伤
+ DamagePVE = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePVE) * fpParam.GetCftDamagePer() # PVE固定伤害
HPRestore = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_HPRestorePer) # 自动回复血量,固定值
DamBackPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamBackPer) * fpParam.GetCftDamBackPer() # 反伤百分比
SpeedValue = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrSpeed) # 移动速度值
@@ -3541,6 +3568,8 @@
FaintDefRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FaintDefRate) * fpParam.GetCftFaintDefRate() # 击晕抵抗
FinalHurt = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurt) # 最终固定伤害增加
FinalHurtReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurtReduce) # 最终固定伤害减少
+ FinalHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurtPer) # 最终伤害万分率
+ FinalHurtReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurtReducePer) # 最终伤害减少万分率
DamagePerPVP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePerPVP) * fpParam.GetCftDamagePerPVP() # 伤害输出计算百分比PVP
DamagePerPVPReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePerPVPReduce) * fpParam.GetCftDamagePerPVPReduce() # 伤害输出计算百分比PVP减少
JobAHurtAddPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobAHurtAddPer) * fpParam.GetCftJobAHurtAddPer() # 对目标战士伤害加成
@@ -3549,6 +3578,12 @@
JobAAtkReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobAAtkReducePer) * fpParam.GetCftJobAAtkReducePer() # 战士攻击伤害减免
JobBAtkReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobBAtkReducePer) * fpParam.GetCftJobBAtkReducePer() # 法师攻击伤害减免
JobCAtkReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobCAtkReducePer) * fpParam.GetCftJobCAtkReducePer() # 弓箭攻击伤害减免
+
+ NormalHurt = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_NormalHurt)
+ NormalHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_NormalHurtPer)
+ FabaoHurt = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FabaoHurt)
+ FabaoHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FabaoHurtPer)
+ Luck = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_Luck)
ComboRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ComboRate) # 连击几率
ComboDamPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ComboDamPer) # 连击伤害
@@ -3636,6 +3671,9 @@
# @remarks 玩家升级 加点 2010-05-26 adaws修改 原来有加技能点 现将升级加技能提出
def __DoLVUPAddPoint(self):
curPlayer = self.__Player
+ if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_AddPoint):
+ # 未开启前不可加点,因为DoAddPointOpen会一次性补齐,避免意外情况多加了点数
+ return
curFreePoint = curPlayer.GetFreePoint()
addPoint = GetLvUp_AddPoint(curPlayer)
@@ -4047,8 +4085,10 @@
pointFuncInfo[1](curPlayer, curPQLV)
if not curPQLV:
continue
- pqAttrID = ipyData.GetPointQualityAttrID()
- pqAttrValueList = ipyData.GetPointQualityAttrValueList()
+ pqAttrIDDict = ipyData.GetPointQualityAttrIDDict()
+ pqAttrID = pqAttrIDDict[curPlayer.GetJob()]
+ pqAttrValueDict = ipyData.GetPointQualityAttrValueDict()
+ pqAttrValueList = pqAttrValueDict[str(curPlayer.GetJob())]
pqAttrValue = 0 if curPQLV > len(pqAttrValueList) else pqAttrValueList[curPQLV - 1]
CalcAttrDict_Type(pqAttrID, pqAttrValue, lingGenQualityAttrList)
#GameWorld.DebugLog(" 属性点(%s)品阶等级属性: curPQLV=%s,pqAttrID=%s,pqAttrValue=%s" % (pointAttrID, curPQLV, pqAttrID, pqAttrValue))
@@ -4603,8 +4643,8 @@
setAttrDict[ChConfig.AttrName_DefRate] = int(lvIpyData.GetReMiss() * attrPer) # 闪避
setAttrDict[ChConfig.AttrName_AtkSpeed] = int(lvIpyData.GetReAtkSpeed() * attrPer) # 攻击速度
setAttrDict[ChConfig.AttrName_SkillAtkRate] = int(lvIpyData.GetReSkillAtkRate() * attrPer) # 技能伤害比例
- setAttrDict[ChConfig.AttrName_DamagePer] = int(lvIpyData.GetReDamagePer() * attrPer) # 增加伤害
- setAttrDict[ChConfig.AttrName_DamReducePer] = int(lvIpyData.GetReDamReduce() * attrPer) # 减少伤害
+ setAttrDict[ChConfig.AttrName_DamagePVP] = int(lvIpyData.GetReDamagePer() * attrPer) # PVP固定伤害
+ setAttrDict[ChConfig.AttrName_DamagePVPReduce] = int(lvIpyData.GetReDamReduce() * attrPer) # PVP固定减伤
setAttrDict[ChConfig.AttrName_IgnoreDefRate] = int(lvIpyData.GetReIgnoreDefRate() * attrPer) # 无视防御比例
setAttrDict[ChConfig.AttrName_LuckyHitRate] = int(lvIpyData.GetReLuckyHitRate() * attrPer) # 会心一击率
setAttrDict[ChConfig.AttrName_LuckyHit] = int(lvIpyData.GetReLuckyHit() * attrPer) # 会心一击伤害
@@ -4940,9 +4980,6 @@
ChConfig.TYPE_Calc_HitSucessRate:ChConfig.Def_MaxRateValue,
ChConfig.TYPE_Calc_CurePer:ChConfig.Def_MaxRateValue,
- #ChConfig.TYPE_Calc_SuperHit:ChConfig.Def_SuperHitPercent,
- #ChConfig.TYPE_Calc_GreatHit:ChConfig.Def_GreatHitVal,
- #ChConfig.TYPE_Calc_LuckyHit:ChConfig.Def_LuckyHitVal,
}
for i in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
@@ -6264,16 +6301,19 @@
def SetJobCAtkReducePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_JobCAtkReducePer, value)
#---特殊伤害减免---
-## 会心一击伤害减免
-def GetLuckyHitReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LuckyHitReducePer)
-def SetLuckyHitReducePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_LuckyHitReducePer, value)
+## 会心一击伤害减免固定值
+def GetLuckyHitReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LuckyHitReduce)
+def SetLuckyHitReduce(curPlayer, value):
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_LuckyHitReduce, value)
+ curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_LuckyHitReduce, value, False)
+
## 卓越一击伤害减免
def GetGreatHitReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_GreatHitReducePer)
def SetGreatHitReducePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_GreatHitReducePer, value)
-## 致命一击伤害减免
-def GetSuperHitReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SuperHitReducePer)
-def SetSuperHitReducePer(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_SuperHitReducePer, value)
+## 暴击伤害减免
+def GetSuperHitReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SuperHitReduce)
+def SetSuperHitReduce(curPlayer, value):
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_SuperHitReduce, value)
curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_SuperHitReduce, value, False)
## 无视防御伤害减免
def GetIgnoreDefReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_IgnoreDefReducePer)
@@ -6288,9 +6328,11 @@
## 抗卓越一击概率
def GetGreatHitRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_GreatHitRateReduce)
def SetGreatHitRateReduce(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_GreatHitRateReduce, value)
-## 抗致命一击概率
+## 抗暴击概率
def GetSuperHitRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SuperHitRateReduce)
-def SetSuperHitRateReduce(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SuperHitRateReduce, value)
+def SetSuperHitRateReduce(curPlayer, value):
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_SuperHitRateReduce, value)
+ curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_SuperHitRateReduce, value, False)
## 抗无视防御概率
def GetIgnoreDefRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_IgnoreDefRateReduce)
def SetIgnoreDefRateReduce(curPlayer, value):
@@ -6313,6 +6355,13 @@
def SetFinalHurtPer(curPlayer, value):
curPlayer.SetDict(ChConfig.Def_PlayerKey_FinalHurtPer, value)
curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_FinalHurtPer, value, False)
+
+## 最终伤害减免百分比
+def GetFinalHurtReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurtReducePer)
+def SetFinalHurtReducePer(curPlayer, value):
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_FinalHurtReducePer, value)
+ curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_FinalHurtReducePer, value, False)
+
## 最终固定伤害增加
def GetFinalHurt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurt)
def SetFinalHurt(curPlayer, value):
@@ -6475,15 +6524,22 @@
def SetSkillAtkRateReduce(curPlayer, value):
curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAtkRateReduce, value)
curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_SkillAtkRateReduce, value, False)
-#---伤害输出计算百分比----
-def GetDamagePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePer)
-def SetDamagePer(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePer, value)
- curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DamagePer, value, False)
-#---伤害输出计算百分比对NPC附加----
-def GetDamagePerPVE(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePerPVE)
-def SetDamagePerPVE(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePerPVE, value)
-
+#---PVP固定伤害----
+def GetDamagePVP(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePVP)
+def SetDamagePVP(curPlayer, value):
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePVP, value)
+ curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DamagePVP, value, False)
+#---PVP固定伤害减少----
+def GetDamagePVPReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePVPReduce)
+def SetDamagePVPReduce(curPlayer, value):
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePVPReduce, value)
+ curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DamagePVPReduce, value, False)
+#---伤害输出固定值计算对NPC附加----
+def GetDamagePVE(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePVE)
+def SetDamagePVE(curPlayer, value):
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePVE, value)
+ curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DamagePVE, value, False)
+
#---伤害输出计算百分比对玩家附加----
def GetDamagePerPVP(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePerPVP)
def SetDamagePerPVP(curPlayer, value):
--
Gitblit v1.8.0