From 1579f778ac32e4a62e830f52611715c5c7c5a307 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期四, 04 七月 2019 11:48:21 +0800
Subject: [PATCH] 7803 【2.0.200】【后端】灵根升品显示特效
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py | 4 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py | 55 ++++++++++++++++++++++++++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 23 +++++++++++
PySysDB/PySysDBPY.h | 9 ++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 13 +++++-
5 files changed, 98 insertions(+), 6 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index bb72964..dd58c54 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1893,4 +1893,13 @@
WORD NeedLV; //要求等级
DWORD FightPower; //推荐战力
BYTE IsNotify; //是否广播
+};
+
+//灵根特效表
+
+struct tagLingGenEffect
+{
+ DWORD ID; //唯一ID
+ DWORD _PointID; //灵根ID
+ BYTE _QualityLV; //品级
};
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 02b566d..33f12e5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1466,6 +1466,12 @@
("DWORD", "FightPower", 0),
("BYTE", "IsNotify", 0),
),
+
+ "LingGenEffect":(
+ ("DWORD", "ID", 0),
+ ("DWORD", "PointID", 1),
+ ("BYTE", "QualityLV", 1),
+ ),
}
@@ -4485,6 +4491,19 @@
def GetNeedLV(self): return self.NeedLV # 要求等级
def GetFightPower(self): return self.FightPower # 推荐战力
def GetIsNotify(self): return self.IsNotify # 是否广播
+
+# 灵根特效表
+class IPY_LingGenEffect():
+
+ def __init__(self):
+ self.ID = 0
+ self.PointID = 0
+ self.QualityLV = 0
+ return
+
+ def GetID(self): return self.ID # 唯一ID
+ def GetPointID(self): return self.PointID # 灵根ID
+ def GetQualityLV(self): return self.QualityLV # 品级
def Log(msg, playerID=0, par=0):
@@ -4804,6 +4823,8 @@
self.ipySkillElementLen = len(self.ipySkillElementCache)
self.ipySkyTowerCache = self.__LoadFileData("SkyTower", IPY_SkyTower)
self.ipySkyTowerLen = len(self.ipySkyTowerCache)
+ self.ipyLingGenEffectCache = self.__LoadFileData("LingGenEffect", IPY_LingGenEffect)
+ self.ipyLingGenEffectLen = len(self.ipyLingGenEffectCache)
Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
Log("IPY_DataMgr InitOK!")
return
@@ -5264,6 +5285,8 @@
def GetSkillElementByIndex(self, index): return self.ipySkillElementCache[index]
def GetSkyTowerCount(self): return self.ipySkyTowerLen
def GetSkyTowerByIndex(self, index): return self.ipySkyTowerCache[index]
+ def GetLingGenEffectCount(self): return self.ipyLingGenEffectLen
+ def GetLingGenEffectByIndex(self, index): return self.ipyLingGenEffectCache[index]
IPYData = IPY_DataMgr()
def IPY_Data(): return IPYData
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
index 94b076e..d8dd02f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -1189,7 +1189,7 @@
#===============================================================================
# #//03 2F 请求装备显隐#tagRequestEquipShowHide
# //装备显示开关
-# int GetEquipShowSwitch(); 第几套*10+是否有套装
+# int GetEquipShowSwitch(); 灵根特效表key * 1000+第几套*10+是否有套装
#===============================================================================
##请求装备显隐. (设置显示哪套装备外观)
# @param index 玩家索引
@@ -1243,7 +1243,7 @@
return
def ChangeEquipfacadeByClassLV(curPlayer, classLV):
- ##变更第X套装备外观
+ ##变更第X套装备外观 灵根特效表key * 1000+第几套*10+是否有套装
oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()
realSuit=1
equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
@@ -1260,11 +1260,60 @@
if not curEquip.GetSuiteID():
realSuit = 0
break
- updEquipShowSwitch = classLV*10+realSuit
+ updEquipShowSwitch = oldEquipShowSwitch /1000*1000+ classLV*10+realSuit
if oldEquipShowSwitch == updEquipShowSwitch:
return
curPlayer.SetEquipShowSwitch(updEquipShowSwitch)
return True
+
+def ChangeEquipfacadeByLingGen(curPlayer):
+ ## 灵根品级变化影响角色外观显示 灵根特效表key * 1000+第几套*10+是否有套装
+ pointValueInfo = [[ShareDefine.Def_Effect_Metal,PlayerControl.GetMetalQualityLV(curPlayer)],
+ [ShareDefine.Def_Effect_Wood,PlayerControl.GetWoodQualityLV(curPlayer)],
+ [ShareDefine.Def_Effect_Water,PlayerControl.GetWaterQualityLV(curPlayer)],
+ [ShareDefine.Def_Effect_Fire,PlayerControl.GetFireQualityLV(curPlayer)],
+ [ShareDefine.Def_Effect_Earth,PlayerControl.GetEarthQualityLV(curPlayer)],
+ ]
+ g_skillElementCntDict = {} #灵根对应使用专精技能数量
+ skillManager = curPlayer.GetSkillManager()
+ gameData = GameWorld.GetGameData()
+ for i in xrange(skillManager.GetSkillCount()):
+ curSkill = skillManager.GetSkillByIndex(i)
+ skillID = curSkill.GetSkillTypeID()
+ curSelectSkillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % skillID)
+ if not curSelectSkillID:
+ continue
+ elementSkillData = gameData.GetSkillBySkillID(curSelectSkillID)
+ if not elementSkillData:
+ continue
+ skillElementType = SkillShell.GetSkillElementType(elementSkillData)
+ g_skillElementCntDict[skillElementType] = g_skillElementCntDict.get(skillElementType, 0) + 1
+
+ showPointID, showQualityLV = 0, 0
+ for pointID, qualityLV in pointValueInfo:
+ if qualityLV > showQualityLV:
+ showQualityLV = qualityLV
+ showPointID = pointID
+ elif showQualityLV and qualityLV == showQualityLV:
+ #比谁的专精技能数量多
+ if g_skillElementCntDict.get(pointID, 0) > g_skillElementCntDict.get(showPointID, 0):
+ showQualityLV = qualityLV
+ showPointID = pointID
+ effectID = 0
+ if showPointID:
+ ipyData = IpyGameDataPY.GetIpyGameData('LingGenEffect', showPointID, showQualityLV)
+ if not ipyData:
+ return
+ effectID = ipyData.GetID()
+ oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()
+ updEquipShowSwitch = oldEquipShowSwitch % 1000 + 1000 * effectID
+ GameWorld.DebugLog('灵根品级变化影响角色外观显示g_skillElementCntDict=%s,oldEquipShowSwitch=%s,updEquipShowSwitch=%s'%
+ (g_skillElementCntDict, oldEquipShowSwitch, updEquipShowSwitch))
+ if oldEquipShowSwitch != updEquipShowSwitch:
+ curPlayer.SetEquipShowSwitch(updEquipShowSwitch)
+ return
+
+
#获取当前是第几套装备外观
def GetEquipFacadeClassLV(curPlayer):return curPlayer.GetEquipShowSwitch()/10
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 045797c..ed46c5d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -4144,12 +4144,15 @@
ShareDefine.Def_Effect_Fire:[lambda curObj:GetFire(curObj), lambda curObj, value:SetFireQualityLV(curObj, value), lambda curObj:GetFireQualityLV(curObj)],
ShareDefine.Def_Effect_Earth:[lambda curObj:GetEarth(curObj), lambda curObj, value:SetEarthQualityLV(curObj, value), lambda curObj:GetEarthQualityLV(curObj)],
}
+ hasChange_Qualitylv = False #灵根品级是否有变更
lingGenQualityAttrList = [{} for _ in range(4)]
for pointAttrID, pointFuncInfo in pointValueInfo.items():
pointValue = pointFuncInfo[0](curPlayer)
befPQLV = pointFuncInfo[2](curPlayer)
pointFuncInfo[1](curPlayer, 0)
if not pointValue:
+ if 0 != befPQLV:
+ hasChange_Qualitylv = True
continue
ipyData = IpyGameDataPY.GetIpyGameData("RolePoint", pointAttrID)
if not ipyData:
@@ -4173,6 +4176,8 @@
else:
break
pointFuncInfo[1](curPlayer, curPQLV)
+ if curPQLV != befPQLV:
+ hasChange_Qualitylv = True
if not curPQLV:
continue
pqAttrInfoDict = ipyData.GetPointQualityAttrDict().get(str(curPlayer.GetJob()), {})
@@ -4189,7 +4194,7 @@
curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Role, pointFightPowerEx)
SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_RoleBase, allAttrList)
SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingGenQuailty, lingGenQualityAttrList)
- return
+ return hasChange_Qualitylv
#---------------------------------------------------------------------
def NotifyAllState(self, playerStateDict):
@@ -4452,7 +4457,7 @@
CalcNoLineEffect.ChangePlayerAttrInNoLineEffectList(curPlayer, baseAttrNolineDict)
# 功能有加基础属性值,这里再重新刷新一下基础属性, 基础属性会影响战斗属性, 每次都刷新角色基础属性
- self.CalcRoleBaseAttr(curPlayer)
+ hasChange_Qualitylv = self.CalcRoleBaseAttr(curPlayer)
roleBaseAttrInfo, roleInsidePerAttrDict = GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_RoleBase)
lingGenQualityAttrList, lingGenQualityInsidePerAttrDict = GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingGenQuailty)
funcAttrInfoList[ChConfig.Def_CalcAttrFunc_RoleBase] = roleBaseAttrInfo
@@ -4629,6 +4634,10 @@
if beforePointList[i] != afterPointList[i]:
diffPointAttrList.append(attrID)
SkillShell.RefreshElementSkillByAttr(curPlayer, diffPointAttrList)
+ if hasChange_Qualitylv:
+ #灵根品级变化处理
+ ChEquip.ChangeEquipfacadeByLingGen(curPlayer)
+
# 更新开服活动灵根数据
OpenServerCampaign.UpdOpenServerCampaignLingGenData(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
index 7db2e30..972f097 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -41,7 +41,7 @@
import GameMap
import collections
import PassiveBuffEffMng
-import EffGetSet
+import ChEquip
import SkillShell
import FBCommon
import IpyGameDataPY
@@ -2134,6 +2134,7 @@
return
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementID % mainSkillID, selectSkillID)
+ ChEquip.ChangeEquipfacadeByLingGen(curPlayer)
if curElementSkillID and curElementSkillID != selectSkillID:
#原技能删除
skillManager.DeleteSkillBySkillTypeID(curElementSkillID)
@@ -2192,6 +2193,7 @@
ipyData = IpyGameDataPY.GetIpyGameData('SkillElement', skillTypeID)
mainSkillID = ipyData.GetMainSkillID()
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementID % mainSkillID, 0)
+ ChEquip.ChangeEquipfacadeByLingGen(curPlayer)
isNotify = True
else:
for _ in xrange(updSkillLV-curSkillLV):
--
Gitblit v1.8.0