From 7d3e1b11373f664833362b3887dfe96e44dbf0da Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期五, 25 一月 2019 16:07:51 +0800 Subject: [PATCH] 2954 【1.5.100】【1.5.0】跨服竞技场地图报错 -- 男号技能极光琉璃的减攻速buff 被敌方反弹导致报错问题 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py | 102 ++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 81 insertions(+), 21 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 6308b40..bafdac8 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py @@ -35,9 +35,11 @@ import IpyGameDataPY import PlayerAttrFruit import GameMap +import OpenServerCampaign import PlayerMagicWeapon -import PassiveBuffEffMng +import PlayerWeekParty import CalcNoLineEffect +import CrossPlayerData import CalcLineEffect import random @@ -235,15 +237,16 @@ # 当前状态处理 if curState == ShareDefine.Def_PetState_Fight: - curPet = curPlayer.GetPetMgr().GetFightPet() - if curPet: - #已是出战状态, C++召唤坐标和人重叠 - resultPos = GameMap.GetEmptyPlaceInArea(curPlayer.GetPosX(), curPlayer.GetPosY(), ChConfig.Def_SummonAppearDist) - curPet.ResetPos(resultPos.GetPosX(), resultPos.GetPosY()) - PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPet) - PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveBuff(curPet) - return - #PetControl.ReCallFightPet(curPlayer) +# curPet = curPlayer.GetPetMgr().GetFightPet() +# if curPet: +# #已是出战状态, C++召唤坐标和人重叠 +# resultPos = GameMap.GetEmptyPlaceInArea(curPlayer.GetPosX(), curPlayer.GetPosY(), ChConfig.Def_SummonAppearDist) +# curPet.ResetPos(resultPos.GetPosX(), resultPos.GetPosY()) +# PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPet) +# PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveBuff(curPet) +# return + #18/10/15 因为某种未知原因宠物物品的状态是出战(实际场景中未出战),导致该宠物无法出战,故再次发包出战时,此处不拦! + PetControl.ReCallFightPet(curPlayer) else: pass @@ -264,8 +267,39 @@ # petItem.SetUserAttr(ShareDefine.Def_IudetPet_State, tagState) # GameWorld.DebugLog("切换宠物状态异常防范! curState=%s,tagState=%s" % (curState, tagState)) + if not GameWorld.IsCrossServer(): + dataList = [petNPCID, curClasslv, tagState] + CrossPlayerData.SendDataToCrossServer(curPlayer, CrossPlayerData.CrossData_PetState, dataList) + return +def CrossServer_DoChangePetState(curPlayer, dataList): + ## 跨服处理 宠物战斗状态变更 + petNPCID, curClasslv, tagState = dataList + petItem = GetPetDataItemByNPCID(curPlayer, petNPCID) + if not petItem: + newPetItem = GetNewPetDataItem(curPlayer, petNPCID) + if not newPetItem: + return + if not ItemControler.PlayerItemControler(curPlayer).PutInItem(ShareDefine.rptPet, newPetItem): + return + petItem = GetPetDataItemByNPCID(curPlayer, petNPCID) + if not petItem: + return + + curItemClasslv = petItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV) + # 处理技能问题,暂不处理 + if curClasslv > curItemClasslv: + pass + + curState = petItem.GetUserAttr(ShareDefine.Def_IudetPet_State) # 当前状态 + if curState == ShareDefine.Def_PetState_Fight: + PetControl.ReCallFightPet(curPlayer) + + if tagState == ShareDefine.Def_PetState_Fight: + __DoPetGoOutToFight(curPlayer, petItem) + + return ## 执行宠物出战逻辑 @@ -303,22 +337,22 @@ PetControl.DoLogic_PlayerPetLearnSkillList(rolePet, learnSkillList) #---刷新属性(不通知)--- - #GameWorld.DebugLog("刷前: petID=%s,playerID=%s,npcID=%s,BindType=%s,AIMode=%s,PetIndex=%s,petFinalHurtPer=%s,grade=%s,qualLV=%s," + #GameWorld.DebugLog("刷前: petID=%s,playerID=%s,npcID=%s,BindType=%s,AIMode=%s,PetIndex=%s,grade=%s,qualLV=%s," # % (petStruct.PetID, petStruct.PlayerID, petStruct.NPCID, petStruct.BindType, petStruct.AIMode, petStruct.PetIndex, - # rolePet.GetBattleValEx5(), rolePet.GetGrade(), rolePet.GetQualityLV())) + # rolePet.GetGrade(), rolePet.GetQualityLV())) petControl = NPCCommon.NPCControl(rolePet) petControl.RefreshNPCState(canSyncClient=False) - #GameWorld.DebugLog("刷后: petID=%s,playerID=%s,npcID=%s,BindType=%s,AIMode=%s,PetIndex=%s,petFinalHurtPer=%s,grade=%s,qualLV=%s," + #GameWorld.DebugLog("刷后: petID=%s,playerID=%s,npcID=%s,BindType=%s,AIMode=%s,PetIndex=%s,grade=%s,qualLV=%s," # % (petStruct.PetID, petStruct.PlayerID, petStruct.NPCID, petStruct.BindType, petStruct.AIMode, petStruct.PetIndex, - # rolePet.GetBattleValEx5(), rolePet.GetGrade(), rolePet.GetQualityLV())) + # rolePet.GetGrade(), rolePet.GetQualityLV())) #当前血量(不通知) PetControl.SetPetHP(rolePet, rolePet.GetMaxHP(), False) #---通知客户端--- - rolePet.Sync_PetInfo() + #rolePet.Sync_PetInfo() #刷新技能栏 - rolePet.Sync_SkillList() + #rolePet.Sync_SkillList() #---收到"宠物出战"请求--- #检查是否可出战 @@ -455,7 +489,8 @@ ItemCommon.ReduceItem(curPlayer, itemPack, itemList, needItemCnt, False, ChConfig.ItemDel_Pet) EventShell.EventRespons_OnActivatePet(curPlayer, petNPCID) - PlayerControl.WorldNotify(0, 'GetPet', [curPlayer.GetName(), petNPCID]) + sysMark = ipyData.GetUnlockSys() or 'GetPet' + PlayerControl.WorldNotify(0, sysMark, [curPlayer.GetName(), petNPCID]) rolePet = curPlayer.GetPetMgr().GetFightPet() if not rolePet: petItemIndex = GetPetDataItemIndexByNPCID(curPlayer, petNPCID) @@ -468,6 +503,10 @@ PetControl.DoLogic_PlayerPetLearnSkillList(rolePet, learnSkillList) RefreshPetItemAddAttr(curPlayer, True) SetPetSkillFightPower(curPlayer) # 技能战力重算 + + # 开服活动数据 + OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_PetLV, GetTotalPetLV(curPlayer)) + PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Pet, petNPCID, False) return True @@ -653,6 +692,7 @@ petIpyData = GetPetIpydata(petNPCID) petSkillList = petIpyData.GetSkillID() petSkillUnLockList = petIpyData.GetSkillUnLock() + sysMarkList = petIpyData.GetSkillUnLockSys() learnSkillList = [] for i, skillid in enumerate(petSkillList): limitPetClassLV = petSkillUnLockList[i] # 学习此技能所需宠物阶级 @@ -668,7 +708,8 @@ #被动技能不学 learnSkillList.append(skillid) #广播 - PlayerControl.WorldNotify(0, 'PetUpLv', [playerName, petNPCID, limitPetClassLV, skillid]) + sysMark = sysMarkList[i] if i < len(sysMarkList) else 'PetUpLv' + PlayerControl.WorldNotify(0, sysMark, [playerName, petNPCID, limitPetClassLV, skillid]) if not learnSkillList and updClassLV + 1 == maxClassLV: PlayerControl.WorldNotify(0, 'PetUpLvMax', [playerName, petNPCID]) @@ -679,16 +720,34 @@ SetPetSkillFightPower(curPlayer) # 技能战力重算 RefreshPetItemAddAttr(curPlayer, True) - + + # 开服活动数据 + OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_PetLV, GetTotalPetLV(curPlayer)) + PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_PetClassLV, 1, [petNPCID, updClassLV + 1]) extraInfoDict = {"petItemIndex":PetItemIndex, "petNPCID":petNPCID} extraInfoDict.update(eval(petDataItem.GetUserData())) DataRecordPack.DR_ClassUpSystem(curPlayer, "PetClassUp", updClassLV, extraInfoDict) #EventReport.WriteEvent_pet_class(curPlayer, petNpcData.GetName(), classLV, petClassExp, updClassLV, newClassExp) + return - +def GetTotalPetLV(curPlayer): + totalPetLV = 0 + petPackIndex = ShareDefine.rptPet + petPack = curPlayer.GetItemManager().GetPack(petPackIndex) + for i in range(petPack.GetCount()): + petItem = petPack.GetAt(i) + if petItem.IsEmpty(): + continue + petItemNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID) + classLV = petItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV) + 1 + petIpyData = GetPetIpydata(petItemNPCID) + if not petIpyData: + continue + totalPetLV += classLV + return totalPetLV ## 刷新宠物数据物品增加的属性 def RefreshPetItemAddAttr(curPlayer, isUpdBillboard): @@ -753,7 +812,8 @@ PlayerControl.CalcAttrDict_Type(ShareDefine.Def_Effect_PetMaxAtk, totalMaxAtk, allAttrListPet) totalSignNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalSignNum) # 总签到天数 # 果实给人物加属性, 魂石果实算附加属性层,单独计算 - PlayerAttrFruit.CalcAttrFruitAddAtrr(curPlayer, allAttrListPetSoul, ShareDefine.Def_AttrFruitFunc_Pet) + fightPowerEx = PlayerAttrFruit.CalcAttrFruitAddAtrr(curPlayer, allAttrListPetSoul, ShareDefine.Def_AttrFruitFunc_Pet) + curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_PetSoul, fightPowerEx) #灵兽技能给人物加的属性 learnSkillList, passiveSkillList = GetPetLearnSkill(curPlayer) -- Gitblit v1.8.0