From a7ab0247c7b8eff06ad104bee39bc035384ca43e Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 23 七月 2025 12:08:22 +0800 Subject: [PATCH] 80 【常规】背包-服务端(增加背包购买格子;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py | 306 +++++++++++++++++++++++++------------------------- 1 files changed, 152 insertions(+), 154 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py index 0fddd13..512cd75 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py @@ -30,13 +30,10 @@ 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 @@ -507,8 +504,7 @@ 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() @@ -872,160 +868,162 @@ # @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): ## 登录处理 -- Gitblit v1.8.0