7803 【2.0.200】【后端】灵根升品显示特效
| | |
| | | WORD NeedLV; //要求等级
|
| | | DWORD FightPower; //推荐战力
|
| | | BYTE IsNotify; //是否广播
|
| | | };
|
| | |
|
| | | //灵根特效表
|
| | |
|
| | | struct tagLingGenEffect
|
| | | {
|
| | | DWORD ID; //ΨһID
|
| | | DWORD _PointID; //灵根ID
|
| | | BYTE _QualityLV; //品级
|
| | | }; |
| | |
| | | ("DWORD", "FightPower", 0),
|
| | | ("BYTE", "IsNotify", 0),
|
| | | ),
|
| | |
|
| | | "LingGenEffect":(
|
| | | ("DWORD", "ID", 0),
|
| | | ("DWORD", "PointID", 1),
|
| | | ("BYTE", "QualityLV", 1),
|
| | | ),
|
| | | }
|
| | |
|
| | | |
| | |
| | | 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):
|
| | |
| | | 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
|
| | |
| | | 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
|
| | |
| | | #===============================================================================
|
| | | # #//03 2F 请求装备显隐#tagRequestEquipShowHide
|
| | | # //装备显示开关
|
| | | # int GetEquipShowSwitch(); 第几套*10+是否有套装
|
| | | # int GetEquipShowSwitch(); 灵根特效表key * 1000+第几套*10+是否有套装
|
| | | #===============================================================================
|
| | | ##请求装备显隐. (设置显示哪套装备外观)
|
| | | # @param index 玩家索引
|
| | |
| | | return
|
| | |
|
| | | def ChangeEquipfacadeByClassLV(curPlayer, classLV):
|
| | | ##变更第X套装备外观
|
| | | ##变更第X套装备外观 灵根特效表key * 1000+第几套*10+是否有套装
|
| | | oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()
|
| | | realSuit=1
|
| | | equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
|
| | |
| | | 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
|
| | |
|
| | |
| | | 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:
|
| | |
| | | else:
|
| | | break
|
| | | pointFuncInfo[1](curPlayer, curPQLV)
|
| | | if curPQLV != befPQLV:
|
| | | hasChange_Qualitylv = True
|
| | | if not curPQLV:
|
| | | continue
|
| | | pqAttrInfoDict = ipyData.GetPointQualityAttrDict().get(str(curPlayer.GetJob()), {})
|
| | |
| | | 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):
|
| | |
| | | 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
|
| | |
| | | if beforePointList[i] != afterPointList[i]:
|
| | | diffPointAttrList.append(attrID)
|
| | | SkillShell.RefreshElementSkillByAttr(curPlayer, diffPointAttrList)
|
| | | if hasChange_Qualitylv:
|
| | | #灵根品级变化处理
|
| | | ChEquip.ChangeEquipfacadeByLingGen(curPlayer)
|
| | | |
| | | # 更新开服活动灵根数据
|
| | | OpenServerCampaign.UpdOpenServerCampaignLingGenData(curPlayer)
|
| | |
|
| | |
| | | import GameMap
|
| | | import collections
|
| | | import PassiveBuffEffMng
|
| | | import EffGetSet
|
| | | import ChEquip
|
| | | import SkillShell
|
| | | import FBCommon
|
| | | import IpyGameDataPY
|
| | |
| | | return
|
| | |
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementID % mainSkillID, selectSkillID)
|
| | | ChEquip.ChangeEquipfacadeByLingGen(curPlayer)
|
| | | if curElementSkillID and curElementSkillID != selectSkillID:
|
| | | #原技能删除
|
| | | skillManager.DeleteSkillBySkillTypeID(curElementSkillID)
|
| | |
| | | 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):
|