| | |
| | | import ShareDefine
|
| | | import SkillCommon
|
| | | import PetControl
|
| | | import EventShell
|
| | | import GameWorld
|
| | | import IpyGameDataPY
|
| | | import PlayerAttrFruit
|
| | | import GameMap
|
| | | import OpenServerCampaign
|
| | | import PlayerMagicWeapon
|
| | | import PlayerWeekParty
|
| | | import CalcNoLineEffect
|
| | | import PassiveBuffEffMng
|
| | |
| | | return
|
| | |
|
| | | ItemCommon.ReduceItem(curPlayer, itemPack, itemList, needItemCnt, False, ChConfig.ItemDel_Pet)
|
| | | |
| | | EventShell.EventRespons_OnActivatePet(curPlayer, petNPCID)
|
| | | |
| | | sysMark = ipyData.GetUnlockSys() or 'GetPet'
|
| | | PlayerControl.WorldNotify(0, sysMark, [curPlayer.GetName(), petNPCID])
|
| | | rolePet = curPlayer.GetPetMgr().GetFightPet()
|
| | |
| | | # @param curPlayer 玩家
|
| | | # @return None
|
| | | def CalcPetItemAddPlayerAttr(curPlayer):
|
| | | allAttrListPet = [{} for _ in range(4)]
|
| | | allAttrListPetSign = [{} for _ in range(4)] # 属性含 特殊的技能属性(因为签到技能属性成长,战力也是成长的,所以不能放技能中算战力,暂时放魂石中)
|
| | | allAttrListPetSoul = [{} for _ in range(4)]
|
| | | skillAttrList = [{} for _ in range(4)]
|
| | | allAttrListPetSkin = [{} for _ in range(4)]
|
| | | allAttrListTrain = [{} for _ in range(4)]
|
| | | allAttrListStar = [{} for _ in range(4)]
|
| | | customAttrDictPet = {}
|
| | | totalMinAtk, totalMaxAtk, qualityAttrInfo = GetPetAtkValue(curPlayer)
|
| | | customAttrDictPet["petQualityAttrInfo"] = qualityAttrInfo
|
| | | PlayerControl.CalcAttrDict_Type(ShareDefine.Def_Effect_PetMinAtk, totalMinAtk, allAttrListPet)
|
| | | PlayerControl.CalcAttrDict_Type(ShareDefine.Def_Effect_PetMaxAtk, totalMaxAtk, allAttrListPet)
|
| | | totalSignNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalSignNum) # 总签到天数
|
| | | # 果实给人物加属性, 魂石果实算附加属性层,单独计算
|
| | | fightPowerEx = PlayerAttrFruit.CalcAttrFruitAddAtrr(curPlayer, allAttrListPetSoul, ShareDefine.Def_AttrFruitFunc_Pet)
|
| | | PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_PetSoul, fightPowerEx)
|
| | | |
| | | #灵兽技能给人物加的属性
|
| | | learnSkillList, passiveSkillList = GetPetLearnSkill(curPlayer)
|
| | | #GameWorld.DebugLog("1刷技能属性: %s" % allAttrList)
|
| | | for skillID in passiveSkillList:
|
| | | curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
| | | if not curSkill:
|
| | | continue
|
| | | # 灵宠签到技能特殊处理
|
| | | if curSkill.GetSkillTypeID() == ChConfig.Def_SkillID_PetSignDay:
|
| | | for effectIndex in xrange(curSkill.GetEffectCount()):
|
| | | curEffect = curSkill.GetEffect(effectIndex)
|
| | | effID = curEffect.GetEffectID()
|
| | | effValue = curEffect.GetEffectValue(0)
|
| | | PlayerControl.CalcAttrDict_Type(effID, effValue * totalSignNum, allAttrListPetSign)
|
| | | |
| | | continue
|
| | | for effectIndex in xrange(curSkill.GetEffectCount()):
|
| | | curEffect = curSkill.GetEffect(effectIndex)
|
| | | if curEffect.GetEffectID() in ChConfig.Def_SkillEffs_Pet:
|
| | | # 给宠物加的不处理
|
| | | continue
|
| | | SkillShell.CalcBuffEffAttr(curPlayer, curEffect, skillAttrList)
|
| | | |
| | | # 新培养属性
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in xrange(ipyDataMgr.GetPetTrainCount()):
|
| | | trainIpyData = ipyDataMgr.GetPetTrainByIndex(index)
|
| | | trainType = trainIpyData.GetTrainType()
|
| | | dataTrainLV = trainIpyData.GetTrainLV()
|
| | | trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PetTrainLV % trainType)
|
| | | |
| | | if dataTrainLV > trainLV:
|
| | | continue
|
| | | elif dataTrainLV == trainLV:
|
| | | trainItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PetTrainItemCount % trainType)
|
| | | else:
|
| | | trainItemCount = trainIpyData.GetEatCntTotal()
|
| | | |
| | | # 等阶额外属性
|
| | | lvAttrTypeList = trainIpyData.GetLVAttrTypeList()
|
| | | lvAttrValueList = trainIpyData.GetLVAttrValueList()
|
| | | for i, attrID in enumerate(lvAttrTypeList):
|
| | | attrValue = lvAttrValueList[i]
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListTrain)
|
| | | |
| | | # 培养丹增加属性
|
| | | eatCntEverytime = trainIpyData.GetEatCntEverytime()
|
| | | if trainItemCount and eatCntEverytime:
|
| | | eatItemAttrTypeList = trainIpyData.GetEatItemAttrTypeList()
|
| | | eatItemAttrValueList = trainIpyData.GetEatItemAttrValueList()
|
| | | attrMultiple = trainItemCount / eatCntEverytime
|
| | | for i, attrID in enumerate(eatItemAttrTypeList):
|
| | | attrValue = eatItemAttrValueList[i]
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, allAttrListTrain)
|
| | | |
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetTarin, allAttrListTrain)
|
| | | |
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Pet, allAttrListPet, customAttrDict=customAttrDictPet)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSoul, allAttrListPetSoul)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSign, allAttrListPetSign)
|
| | | |
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSkill, skillAttrList)
|
| | | |
| | | #初始战力
|
| | | fpExTotal = 0
|
| | | petPackIndex = ShareDefine.rptPet
|
| | | petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
|
| | | for i in range(petPack.GetCount()):
|
| | | petItem = petPack.GetAt(i)
|
| | | if petItem.IsEmpty():
|
| | | continue
|
| | | # 物品上的技能战力,主人上的另算
|
| | | for i in range(petItem.GetUserAttrCount(ShareDefine.Def_IudetPet_Skill)):
|
| | | skillID = petItem.GetUserAttrByIndex(ShareDefine.Def_IudetPet_Skill, i)
|
| | | curSkilData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
| | | if not curSkilData:
|
| | | continue
|
| | | fpExTotal += curSkilData.GetFightPower()
|
| | | petItemNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
|
| | | petIpyData = GetPetIpydata(petItemNPCID)
|
| | | if not petIpyData:
|
| | | continue
|
| | | fpExTotal += petIpyData.GetInitFightPower() # 初始战力
|
| | | #觉醒战力
|
| | | skinData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorsePetSkinData % (2, petItemNPCID), 0)
|
| | | skinIpyData = IpyGameDataPY.GetIpyGameDataNotLog('HorsePetSkin', 2, petItemNPCID, skinData/100)
|
| | | if skinIpyData:
|
| | | for attrID, attrValue in skinIpyData.GetAttrInfo().items():
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListPetSkin)
|
| | | |
| | | #星级
|
| | | curStar = petItem.GetUserAttr(ShareDefine.Def_IudetPet_Star)
|
| | | starIpyData = IpyGameDataPY.GetIpyGameDataNotLog("PetStarUp", petItemNPCID, curStar)
|
| | | if starIpyData:
|
| | | starAttrType = starIpyData.GetStarAttrType()
|
| | | starAttrValue = starIpyData.GetStarAttrValue()
|
| | | for i, attrID in enumerate(starAttrType):
|
| | | attrValue = starAttrValue[i]
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar)
|
| | | |
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSkin, allAttrListPetSkin)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetStar, allAttrListStar)
|
| | | PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Pet, fpExTotal)
|
| | | # GameWorld.DebugLog("宠物榜NPCID: %s, petDict=%s" % (billPetNPCID, str(billPetDict)))
|
| | | return
|
| | | # allAttrListPet = [{} for _ in range(4)]
|
| | | # allAttrListPetSign = [{} for _ in range(4)] # 属性含 特殊的技能属性(因为签到技能属性成长,战力也是成长的,所以不能放技能中算战力,暂时放魂石中)
|
| | | # allAttrListPetSoul = [{} for _ in range(4)]
|
| | | # skillAttrList = [{} for _ in range(4)]
|
| | | # allAttrListPetSkin = [{} for _ in range(4)]
|
| | | # allAttrListTrain = [{} for _ in range(4)]
|
| | | # allAttrListStar = [{} for _ in range(4)]
|
| | | # customAttrDictPet = {}
|
| | | # totalMinAtk, totalMaxAtk, qualityAttrInfo = GetPetAtkValue(curPlayer)
|
| | | # customAttrDictPet["petQualityAttrInfo"] = qualityAttrInfo
|
| | | # PlayerControl.CalcAttrDict_Type(ShareDefine.Def_Effect_PetMinAtk, totalMinAtk, allAttrListPet)
|
| | | # PlayerControl.CalcAttrDict_Type(ShareDefine.Def_Effect_PetMaxAtk, totalMaxAtk, allAttrListPet)
|
| | | # totalSignNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalSignNum) # 总签到天数
|
| | | # # 果实给人物加属性, 魂石果实算附加属性层,单独计算
|
| | | # fightPowerEx = PlayerAttrFruit.CalcAttrFruitAddAtrr(curPlayer, allAttrListPetSoul, ShareDefine.Def_AttrFruitFunc_Pet)
|
| | | # PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_PetSoul, fightPowerEx)
|
| | | # |
| | | # #灵兽技能给人物加的属性
|
| | | # learnSkillList, passiveSkillList = GetPetLearnSkill(curPlayer)
|
| | | # #GameWorld.DebugLog("1刷技能属性: %s" % allAttrList)
|
| | | # for skillID in passiveSkillList:
|
| | | # curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
| | | # if not curSkill:
|
| | | # continue
|
| | | # # 灵宠签到技能特殊处理
|
| | | # if curSkill.GetSkillTypeID() == ChConfig.Def_SkillID_PetSignDay:
|
| | | # for effectIndex in xrange(curSkill.GetEffectCount()):
|
| | | # curEffect = curSkill.GetEffect(effectIndex)
|
| | | # effID = curEffect.GetEffectID()
|
| | | # effValue = curEffect.GetEffectValue(0)
|
| | | # PlayerControl.CalcAttrDict_Type(effID, effValue * totalSignNum, allAttrListPetSign)
|
| | | # |
| | | # continue
|
| | | # for effectIndex in xrange(curSkill.GetEffectCount()):
|
| | | # curEffect = curSkill.GetEffect(effectIndex)
|
| | | # if curEffect.GetEffectID() in ChConfig.Def_SkillEffs_Pet:
|
| | | # # 给宠物加的不处理
|
| | | # continue
|
| | | # SkillShell.CalcBuffEffAttr(curPlayer, curEffect, skillAttrList)
|
| | | # |
| | | # # 新培养属性
|
| | | # ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | # for index in xrange(ipyDataMgr.GetPetTrainCount()):
|
| | | # trainIpyData = ipyDataMgr.GetPetTrainByIndex(index)
|
| | | # trainType = trainIpyData.GetTrainType()
|
| | | # dataTrainLV = trainIpyData.GetTrainLV()
|
| | | # trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PetTrainLV % trainType)
|
| | | # |
| | | # if dataTrainLV > trainLV:
|
| | | # continue
|
| | | # elif dataTrainLV == trainLV:
|
| | | # trainItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PetTrainItemCount % trainType)
|
| | | # else:
|
| | | # trainItemCount = trainIpyData.GetEatCntTotal()
|
| | | # |
| | | # # 等阶额外属性
|
| | | # lvAttrTypeList = trainIpyData.GetLVAttrTypeList()
|
| | | # lvAttrValueList = trainIpyData.GetLVAttrValueList()
|
| | | # for i, attrID in enumerate(lvAttrTypeList):
|
| | | # attrValue = lvAttrValueList[i]
|
| | | # PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListTrain)
|
| | | # |
| | | # # 培养丹增加属性
|
| | | # eatCntEverytime = trainIpyData.GetEatCntEverytime()
|
| | | # if trainItemCount and eatCntEverytime:
|
| | | # eatItemAttrTypeList = trainIpyData.GetEatItemAttrTypeList()
|
| | | # eatItemAttrValueList = trainIpyData.GetEatItemAttrValueList()
|
| | | # attrMultiple = trainItemCount / eatCntEverytime
|
| | | # for i, attrID in enumerate(eatItemAttrTypeList):
|
| | | # attrValue = eatItemAttrValueList[i]
|
| | | # PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, allAttrListTrain)
|
| | | # |
| | | # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetTarin, allAttrListTrain)
|
| | | # |
| | | # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Pet, allAttrListPet, customAttrDict=customAttrDictPet)
|
| | | # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSoul, allAttrListPetSoul)
|
| | | # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSign, allAttrListPetSign)
|
| | | # |
| | | # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSkill, skillAttrList)
|
| | | # |
| | | # #初始战力
|
| | | # fpExTotal = 0
|
| | | # petPackIndex = ShareDefine.rptPet
|
| | | # petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
|
| | | # for i in range(petPack.GetCount()):
|
| | | # petItem = petPack.GetAt(i)
|
| | | # if petItem.IsEmpty():
|
| | | # continue
|
| | | # # 物品上的技能战力,主人上的另算
|
| | | # for i in range(petItem.GetUserAttrCount(ShareDefine.Def_IudetPet_Skill)):
|
| | | # skillID = petItem.GetUserAttrByIndex(ShareDefine.Def_IudetPet_Skill, i)
|
| | | # curSkilData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
| | | # if not curSkilData:
|
| | | # continue
|
| | | # fpExTotal += curSkilData.GetFightPower()
|
| | | # petItemNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
|
| | | # petIpyData = GetPetIpydata(petItemNPCID)
|
| | | # if not petIpyData:
|
| | | # continue
|
| | | # fpExTotal += petIpyData.GetInitFightPower() # 初始战力
|
| | | # #觉醒战力
|
| | | # skinData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorsePetSkinData % (2, petItemNPCID), 0)
|
| | | # skinIpyData = IpyGameDataPY.GetIpyGameDataNotLog('HorsePetSkin', 2, petItemNPCID, skinData/100)
|
| | | # if skinIpyData:
|
| | | # for attrID, attrValue in skinIpyData.GetAttrInfo().items():
|
| | | # PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListPetSkin)
|
| | | # |
| | | # #星级
|
| | | # curStar = petItem.GetUserAttr(ShareDefine.Def_IudetPet_Star)
|
| | | # starIpyData = IpyGameDataPY.GetIpyGameDataNotLog("PetStarUp", petItemNPCID, curStar)
|
| | | # if starIpyData:
|
| | | # starAttrType = starIpyData.GetStarAttrType()
|
| | | # starAttrValue = starIpyData.GetStarAttrValue()
|
| | | # for i, attrID in enumerate(starAttrType):
|
| | | # attrValue = starAttrValue[i]
|
| | | # PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar)
|
| | | # |
| | | # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSkin, allAttrListPetSkin)
|
| | | # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetStar, allAttrListStar)
|
| | | # PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Pet, fpExTotal)
|
| | | ## GameWorld.DebugLog("宠物榜NPCID: %s, petDict=%s" % (billPetNPCID, str(billPetDict)))
|
| | | # return
|
| | |
|
| | | ## 获取灵兽出战时的攻击力
|
| | | def GetPetAtkValue(curPlayer):
|
| | | qualityAttrInfo = {}
|
| | | if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Pet):
|
| | | #GameWorld.DebugLog(' 宠物功能未开启')
|
| | | return 0, 0, qualityAttrInfo
|
| | | |
| | | classAddAtk = 0
|
| | | petPackIndex = ShareDefine.rptPet
|
| | | petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
|
| | | for i in range(petPack.GetCount()):
|
| | | packItem = petPack.GetAt(i)
|
| | | if packItem.IsEmpty():
|
| | | continue
|
| | | petItemNPCID = packItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
|
| | | classlv = packItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV)
|
| | | classIpyData = IpyGameDataPY.GetIpyGameData("PetClassCost", petItemNPCID, classlv + 1)
|
| | | atkAdd = classIpyData.GetAtkAdd() if classIpyData else 0
|
| | | classAddAtk += atkAdd
|
| | | |
| | | petIpyData = GetPetIpydata(petItemNPCID)
|
| | | if petIpyData:
|
| | | quality = petIpyData.GetQuality()
|
| | | if quality not in qualityAttrInfo:
|
| | | qualityAttrInfo[quality] = {}
|
| | | qualityAttrDict = qualityAttrInfo[quality]
|
| | | qualityAttrDict[ShareDefine.Def_Effect_PetAtk] = qualityAttrDict.get(ShareDefine.Def_Effect_PetAtk, 0) + atkAdd
|
| | | |
| | | totalMinAtk = classAddAtk
|
| | | totalMaxAtk = classAddAtk
|
| | | return totalMinAtk, totalMaxAtk, qualityAttrInfo
|
| | | return 0, 0, qualityAttrInfo
|
| | | # if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Pet):
|
| | | # #GameWorld.DebugLog(' 宠物功能未开启')
|
| | | # return 0, 0, qualityAttrInfo
|
| | | # |
| | | # classAddAtk = 0
|
| | | # petPackIndex = ShareDefine.rptPet
|
| | | # petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
|
| | | # for i in range(petPack.GetCount()):
|
| | | # packItem = petPack.GetAt(i)
|
| | | # if packItem.IsEmpty():
|
| | | # continue
|
| | | # petItemNPCID = packItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
|
| | | # classlv = packItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV)
|
| | | # classIpyData = IpyGameDataPY.GetIpyGameData("PetClassCost", petItemNPCID, classlv + 1)
|
| | | # atkAdd = classIpyData.GetAtkAdd() if classIpyData else 0
|
| | | # classAddAtk += atkAdd
|
| | | # |
| | | # petIpyData = GetPetIpydata(petItemNPCID)
|
| | | # if petIpyData:
|
| | | # quality = petIpyData.GetQuality()
|
| | | # if quality not in qualityAttrInfo:
|
| | | # qualityAttrInfo[quality] = {}
|
| | | # qualityAttrDict = qualityAttrInfo[quality]
|
| | | # qualityAttrDict[ShareDefine.Def_Effect_PetAtk] = qualityAttrDict.get(ShareDefine.Def_Effect_PetAtk, 0) + atkAdd
|
| | | # |
| | | # totalMinAtk = classAddAtk
|
| | | # totalMaxAtk = classAddAtk
|
| | | # return totalMinAtk, totalMaxAtk, qualityAttrInfo
|
| | |
|
| | | def OnPlayerPetLogin(curPlayer):
|
| | | ## 登录处理
|