9818 【BT10】新增古宝特效效果
# Conflicts:
# ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyFlagwar.py
| | |
| | | struct tagCoat
|
| | | {
|
| | | DWORD _CoatID; //时装编号
|
| | | BYTE CostQuality; //时装品质 0-普通;1-稀有;2-传说
|
| | | list EquipItemID; //装备物品ID(按职业顺序)
|
| | | DWORD UnlockItemID; //材料物品ID
|
| | | DWORD MaxLV; //最大星级
|
| | |
| | | # 通知子服更新玩家总伤害
|
| | | if syncPlayerHurtInfo:
|
| | | serverGroupIDList = []
|
| | | sendMsg = {"syncPlayerHurtInfo":syncPlayerHurtInfo}
|
| | | sendMsg = {"syncPlayerHurtInfo":syncPlayerHurtInfo, "killBoss":1}
|
| | | CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossYaomoBossHurtInfo, sendMsg, serverGroupIDList)
|
| | |
|
| | | return
|
| | |
| | | #zoneID = msgData["zoneID"]
|
| | | #npcID = msgData["npcID"]
|
| | | syncPlayerHurtInfo = msgData["syncPlayerHurtInfo"]
|
| | | isKillBoss = msgData.get("killBoss") == 1
|
| | |
|
| | | for playerID, hurtInfo in syncPlayerHurtInfo.items():
|
| | | if not PlayerControl.GetDBPlayerAccIDByID(playerID):
|
| | |
| | | continue
|
| | | Sync_CrossYaomoBossPlayerHurtInfo(curPlayer)
|
| | |
|
| | | if awardIndex == None:
|
| | | continue
|
| | | |
| | | if awardIndex != None:
|
| | | # 通知地图发放奖励
|
| | | msgInfo = ["HurtValueAward", [awardIndex, awardItemList]]
|
| | | CrossRealmPlayer.MapServer_QueryCrossPlayerResult(playerID, "CrossYaomoBoss", msgInfo)
|
| | | |
| | | if isKillBoss:
|
| | | # 通知地图击杀妖魔boss
|
| | | msgInfo = ["KillYaomoBoss", hurtInfo]
|
| | | CrossRealmPlayer.MapServer_QueryCrossPlayerResult(playerID, "CrossYaomoBoss", msgInfo)
|
| | | |
| | | return
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | |
| | | import SkillCommon
|
| | | import PlayerWeekParty
|
| | | import PlayerTongTianLing
|
| | | import PlayerGubao
|
| | |
|
| | | import random
|
| | | import time
|
| | |
| | | EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_ElderBattlefield, 0, ChConfig.CME_Log_Start)
|
| | | PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_ElderBattlefield, 1)
|
| | | PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_ElderBattlefield, 1)
|
| | | PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_ElderBattlefield, 1)
|
| | | else:
|
| | | rebornBuffLV = GameWorld.GetGameFB().GetPlayerGameFBDictByKey(playerID, FBPlayerDict_RebornBuffLV)
|
| | | __DoAddRebornBuff(curPlayer, rebornBuffLV, tick)
|
| | |
| | | import NetPackCommon
|
| | | import SkillCommon
|
| | | import EventReport
|
| | | import PlayerGubao
|
| | | import ItemCommon
|
| | | import BuffSkill
|
| | | import AICommon
|
| | |
| | | FBCommon.SetHadDelTicket(curPlayer)
|
| | | FBCommon.AddEnterFBCount(curPlayer, ChConfig.Def_FBMapID_FamilyWar)
|
| | | PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_FamilyWar, 1)
|
| | | PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_FamilyWar, 1)
|
| | | isFinalMatch = gameFB.GetGameFBDictByKey(GameFBDict_IsFinalMatch)
|
| | | roundNum = gameFB.GetGameFBDictByKey(GameFBDict_RoundNum)
|
| | | groupID = gameFB.GetGameFBDictByKey(GameFBDict_GroupID)
|
| | |
| | |
|
| | | "Coat":(
|
| | | ("DWORD", "CoatID", 1),
|
| | | ("BYTE", "CostQuality", 0),
|
| | | ("list", "EquipItemID", 0),
|
| | | ("DWORD", "UnlockItemID", 0),
|
| | | ("DWORD", "MaxLV", 0),
|
| | |
| | | |
| | | def __init__(self): |
| | | self.CoatID = 0
|
| | | self.CostQuality = 0
|
| | | self.EquipItemID = []
|
| | | self.UnlockItemID = 0
|
| | | self.MaxLV = 0
|
| | |
| | | return |
| | | |
| | | def GetCoatID(self): return self.CoatID # 时装编号
|
| | | def GetCostQuality(self): return self.CostQuality # 时装品质 0-普通;1-稀有;2-传说
|
| | | def GetEquipItemID(self): return self.EquipItemID # 装备物品ID(按职业顺序)
|
| | | def GetUnlockItemID(self): return self.UnlockItemID # 材料物品ID
|
| | | def GetMaxLV(self): return self.MaxLV # 最大星级
|
| | |
| | | Sync_ClothesCoatSkinInfo(curPlayer, coatID)
|
| | | return
|
| | |
|
| | | def GetCoatQualityLVInfo(curPlayer):
|
| | | costQualityLVDict = {}
|
| | | ipyMgr = IpyGameDataPY.IPY_Data()
|
| | | for i in xrange(ipyMgr.GetCoatCount()):
|
| | | ipyData = ipyMgr.GetCoatByIndex(i)
|
| | | coatID = ipyData.GetCoatID()
|
| | | costQuality = ipyData.GetCostQuality()
|
| | | skinLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ClothesSkinLV % coatID)
|
| | | if not skinLV:
|
| | | continue
|
| | | costQualityLVDict[costQuality] = costQualityLVDict.get(costQuality, 0) + skinLV
|
| | | return costQualityLVDict
|
| | |
|
| | | ## 计算时装属性
|
| | | # @param curPlayer 玩家
|
| | | # @param allAttrList 属性列表
|
| | |
| | | import ItemControler
|
| | | import PlayerActivity
|
| | | import PlayerSuccess
|
| | | import PlayerGubao
|
| | |
|
| | |
|
| | | def DoPlayerLogin(curPlayer):
|
| | |
| | | PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossBattlefield, addCnt)
|
| | |
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Battlefield_HighScoreToday, highScoreToday)
|
| | | PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_CrossBattlefield, 1)
|
| | |
|
| | | if isSameWeek:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Battlefield_EnterCountWeek, enterCountWeek)
|
| | |
| | | import ShareDefine
|
| | | import ItemCommon
|
| | | import ChConfig
|
| | | import PlayerGubao
|
| | |
|
| | | def OnYaomoBossStateChange(state, tick):
|
| | | ## 活动状态变更
|
| | |
| | | if msgType == "HurtValueAward":
|
| | | __DoGiveCrossYaomoBossHurtAward(curPlayer, dataMsg)
|
| | |
|
| | | ## 参与击杀妖魔boss
|
| | | if msgType == "KillYaomoBoss":
|
| | | PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_CrossYaomoBoss, 1)
|
| | | |
| | | return
|
| | |
|
| | | def __DoGiveCrossYaomoBossHurtAward(curPlayer, dataMsg):
|
| | |
| | | titleActiveList.append(curGradID)
|
| | | return titleActiveList
|
| | |
|
| | | def GetDienstgradActiveTypeCountInfo(curPlayer):
|
| | | activeTypeCountDict = {}
|
| | | dienstgradManager = curPlayer.GetDienstgradManager()
|
| | | gradCnt = dienstgradManager.GetCount()
|
| | | for i in xrange(gradCnt):
|
| | | curGradID = dienstgradManager.AtGradID(i)
|
| | | if curGradID == 0:
|
| | | continue
|
| | | curDienstgradData = GetDienstgradData(curGradID)
|
| | | if curDienstgradData == None:
|
| | | continue
|
| | | curType = curDienstgradData.GetType()
|
| | | activeTypeCountDict[curType] = activeTypeCountDict.get(curType, 0) + 1
|
| | | return activeTypeCountDict
|
| | |
|
| | | def CalcAllDienstgradAttr(curPlayer):
|
| | | # 计算全部称号属性
|
| | | allAttrList = [{} for i in range(4)]
|
| | |
| | | return
|
| | |
|
| | | allAttrList = [{} for _ in range(4)]
|
| | | customAttrDictFaQi = {}
|
| | | faQiAllAttrInfo = {}
|
| | |
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in xrange(ipyDataMgr.GetFaQiLVUpCount()):
|
| | |
| | | lvAttrValueList = lvupIpyData.GetLVAttrValue()
|
| | | for i, attrID in enumerate(lvAttrTypeList):
|
| | | attrValue = lvAttrValueList[i]
|
| | | faQiAllAttrInfo[attrID] = faQiAllAttrInfo.get(attrID, 0) + attrValue
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
|
| | |
|
| | | # 培养丹增加属性
|
| | |
| | | attrMultiple = upItemCount / upItemPerCount
|
| | | for i, attrID in enumerate(upItemAttrTypeList):
|
| | | attrValue = upItemAttrValueList[i]
|
| | | faQiAllAttrInfo[attrID] = faQiAllAttrInfo.get(attrID, 0) + attrValue
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, allAttrList)
|
| | |
|
| | | customAttrDictFaQi["faQiAllAttrInfo"] = faQiAllAttrInfo
|
| | | # 保存计算值
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FaQi, allAttrList)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FaQi, allAttrList, customAttrDict=customAttrDictFaQi)
|
| | | return
|
| | |
|
| | | def Sync_FaQiLVInfo(curPlayer):
|
| | |
| | | import PlayerPet
|
| | | import ChConfig
|
| | | import ItemControler
|
| | | import PlayerDienstgrad
|
| | | import PlayerCoat
|
| | |
|
| | | GubaoEffType_FamilyWar = 48 # 参与仙盟联赛每X次+XXX属性 x次
|
| | | GubaoEffType_ElderBattlefield = 49 # 参与上古战场每X次+XXX属性 x次
|
| | | GubaoEffType_CrossBattlefield = 50 # 参与古神战场每X次+XXX属性 x次
|
| | | GubaoEffType_CrossYaomoBoss = 51 # 参与魔王入侵每X次+XXX属性 x次
|
| | | GubaoEffType_CrossFamilyFlagwar = 52 # 参与逐鹿万界每X次+XXX属性 x次
|
| | |
|
| | | GubaoEffAttrIypeList = [GubaoEffType_FamilyWar, GubaoEffType_ElderBattlefield, GubaoEffType_CrossBattlefield, |
| | | GubaoEffType_CrossYaomoBoss, GubaoEffType_CrossFamilyFlagwar]
|
| | |
|
| | | GubaoEffType_ActivityPlace = 33 # 活跃修炼x次可领取物品 x次
|
| | | GubaoEffType_Arena = 34 # 竞技场挑战x次可领取物品 x次
|
| | |
| | | effAttrInfo = {}
|
| | | #GameWorld.DebugLog("GubaoStar属性: gubaoID=%s,star=%s,starEffIDList=%s" % (gubaoID, star, starEffIDList))
|
| | | for effID in starEffIDList:
|
| | | __calcStarEffAttrByID(curPlayer, effID, effAttrInfo)
|
| | | __calcStarEffAttrByID(curPlayer, gubaoID, effID, effAttrInfo)
|
| | | #GameWorld.DebugLog(" effID=%s,effAttrInfo=%s" % (effID, effAttrInfo))
|
| | | for attrID, attrValue in effAttrInfo.items():
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
|
| | |
|
| | | # 保存计算值
|
| | | #GameWorld.DebugLog("古宝属性: %s" % allAttrList)
|
| | | GameWorld.DebugLog("古宝属性: %s" % allAttrList)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Gubao, allAttrList)
|
| | | return
|
| | |
|
| | | def __calcStarEffAttrByID(curPlayer, effID, effAttrInfo):
|
| | | def __calcStarEffAttrByID(curPlayer, gubaoID, effID, effAttrInfo):
|
| | | ''' 计算古宝特殊效果ID对应提升属性
|
| | | '''
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("GubaoEffAttr", effID)
|
| | |
| | | if attrID > 0 and addAttrValue > 0:
|
| | | effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
| | |
|
| | | #41 x类型神兵每X级+X属性 x类型 x级
|
| | | elif effType == 41:
|
| | | gwType = effCond
|
| | | gwLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % gwType)
|
| | | addAttrValue = int(gwLV / effCond2 * effAttrValue)
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,gwType=%s,gwLV=%s,effCond2=%s,attrID=%s,addAttrValue=%s" % (effID, effType, gwType, gwLV, effCond2, attrID, addAttrValue))
|
| | | if attrID > 0 and addAttrValue > 0:
|
| | | effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
| | | |
| | | #42 法器每X阶+X%法器总属性 x阶
|
| | | elif effType == 42:
|
| | | customAttrDictFaQi = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FaQi)[2]
|
| | | faQiAllAttrInfo = customAttrDictFaQi.get("faQiAllAttrInfo", {})
|
| | | faQiLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiLV)
|
| | | addPer = int(faQiLV / effCond * effAttrValue)
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,faQiLV=%s,addPer=%s,faQiAllAttrInfo=%s" % (effID, effType, faQiLV, addPer, faQiAllAttrInfo))
|
| | | __addStarEffFuncAttr(ipyData, effAttrInfo, faQiAllAttrInfo, addPer)
|
| | | |
| | | #43 每拥有X个X类型的称号+X属性 x类型 x个
|
| | | elif effType == 43:
|
| | | activeTypeCountDict = PlayerDienstgrad.GetDienstgradActiveTypeCountInfo(curPlayer)
|
| | | dType = effCond
|
| | | activeCount = activeTypeCountDict.get(dType, 0)
|
| | | addAttrValue = int(activeCount / effCond2 * effAttrValue)
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,dType=%s,activeTypeCountDict=%s,effCond2=%s,attrID=%s,addAttrValue=%s" % (effID, effType, dType, activeTypeCountDict, effCond2, attrID, addAttrValue))
|
| | | if attrID > 0 and addAttrValue > 0:
|
| | | effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
| | | |
| | | |
| | | #44 X品质时装总星数每X星+X属性 x类型 x星
|
| | | elif effType == 44:
|
| | | costQualityLVDict = PlayerCoat.GetCoatQualityLVInfo(curPlayer)
|
| | | quality = effCond
|
| | | lvTotal = costQualityLVDict.get(quality, 0)
|
| | | addAttrValue = int(lvTotal / effCond2 * effAttrValue)
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,quality=%s,costQualityLVDict=%s,effCond2=%s,attrID=%s,addAttrValue=%s" % (effID, effType, quality, costQualityLVDict, effCond2, attrID, addAttrValue))
|
| | | if attrID > 0 and addAttrValue > 0:
|
| | | effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
| | | |
| | | #45 每X级魅力等级+X属性 x级
|
| | | elif effType == 45:
|
| | | charmLV = PlayerControl.GetCharmLV(curPlayer)
|
| | | addAttrValue = int(charmLV / effCond * effAttrValue)
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,charmLV=%s,effCond=%s,attrID=%s,addAttrValue=%s" % (effID, effType, charmLV, effCond, attrID, addAttrValue))
|
| | | if attrID > 0 and addAttrValue > 0:
|
| | | effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
| | | |
| | | #46 每拥有X个神通技能+X属性 x个
|
| | | elif effType == 46:
|
| | | customAttrDictShentong = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong)[2]
|
| | | shentongSkillInfo = customAttrDictShentong.get("shentongSkillInfo", {})
|
| | | skillCount = len(shentongSkillInfo)
|
| | | addAttrValue = int(skillCount / effCond * effAttrValue)
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,skillCount=%s,effCond=%s,attrID=%s,addAttrValue=%s,shentongSkillInfo=%s" % (effID, effType, skillCount, effCond, attrID, addAttrValue, shentongSkillInfo))
|
| | | if attrID > 0 and addAttrValue > 0:
|
| | | effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
| | | |
| | | #47 神通技能总等级每X级+X属性 x级
|
| | | elif effType == 47:
|
| | | customAttrDictShentong = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong)[2]
|
| | | shentongSkillInfo = customAttrDictShentong.get("shentongSkillInfo", {})
|
| | | skillLVTotal = sum(shentongSkillInfo.values())
|
| | | addAttrValue = int(skillLVTotal / effCond * effAttrValue)
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,skillLVTotal=%s,effCond=%s,attrID=%s,addAttrValue=%s,shentongSkillInfo=%s" % (effID, effType, skillLVTotal, effCond, attrID, addAttrValue, shentongSkillInfo))
|
| | | if attrID > 0 and addAttrValue > 0:
|
| | | effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
| | | |
| | | #48 参与仙盟联赛每X次+XXX属性 x次
|
| | | #49 参与上古战场每X次+XXX属性 x次
|
| | | #50 参与古神战场每X次+XXX属性 x次
|
| | | #51 参与魔王入侵每X次+XXX属性 x次
|
| | | #52 参与逐鹿万界每X次+XXX属性 x次
|
| | | elif effType in GubaoEffAttrIypeList:
|
| | | effValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType))
|
| | | addAttrValue = int(effValue / effCond * effAttrValue)
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,effValue=%s,effCond=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effValue, effCond, attrID, addAttrValue))
|
| | | if attrID > 0 and addAttrValue > 0:
|
| | | effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
| | | |
| | | return
|
| | |
|
| | | def __addStarEffFuncAttr(ipyData, effAttrInfo, funcAttrInfo, effAttrValue):
|
| | |
| | | return
|
| | |
|
| | | def AddGubaoItemEffValue(curPlayer, effType, addCnt):
|
| | | if effType not in GubaoEffTtemIypeList:
|
| | | if effType not in GubaoEffTtemIypeList and effType not in GubaoEffAttrIypeList:
|
| | | return
|
| | | isAttr = False
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in xrange(ipyDataMgr.GetGubaoCount()):
|
| | | ipyData = ipyDataMgr.GetGubaoByIndex(index)
|
| | |
| | | GameWorld.DebugLog("更新古宝物品效果类型进度值: gubaoID=%s,effID=%s,effType=%s,effValue=%s,addCnt=%s,updValue=%s"
|
| | | % (gubaoID, effID, effType, effValue, addCnt, updValue), curPlayer.GetPlayerID())
|
| | | Sync_GubaoItemEffInfo(curPlayer, gubaoID, effType, True)
|
| | | if effType in GubaoEffAttrIypeList:
|
| | | isAttr = True
|
| | | |
| | | if isAttr:
|
| | | RefreshGubaoAttr(curPlayer)
|
| | | return
|
| | |
|
| | | def GetGubaoItemEffAward(curPlayer, gubaoID, effIDStr):
|
| | |
| | | |
| | | def CalcShentongAttr(curPlayer): |
| | | |
| | | customAttrDictShentong = {} |
| | | fightPowerEx = 0 |
| | | allAttrList = [{} for _ in range(4)] |
| | | |
| | | shentongSkillInfo = {} |
| | | ipyDataMgr = IpyGameDataPY.IPY_Data() |
| | | for index in xrange(ipyDataMgr.GetShentongCount()): |
| | | ipyData = ipyDataMgr.GetShentongByIndex(index) |
| | |
| | | if lvIpyData.GetFightPowerEx(): |
| | | fightPowerEx += lvIpyData.GetFightPowerEx() |
| | | |
| | | LVSkillID = lvIpyData.GetLVSkillID() |
| | | if LVSkillID: |
| | | skillData = GameWorld.GetGameData().GetSkillBySkillID(LVSkillID) |
| | | if skillData: |
| | | skillTypeID = skillData.GetSkillTypeID() |
| | | skillLV = skillData.GetSkillLV() |
| | | shentongSkillInfo[skillTypeID] = skillLV |
| | | |
| | | customAttrDictShentong["shentongSkillInfo"] = shentongSkillInfo |
| | | # 附加战力 |
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Shentong, fightPowerEx) |
| | | # 保存计算值 |
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong, allAttrList) |
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong, allAttrList, customAttrDict=customAttrDictShentong) |
| | | return |
| | | |
| | | def Sync_ShentongLVInfo(curPlayer, shentongIDList=None): |