3414 【后端】骑宠争夺对boss伤害衰减buff
| | |
| | | #守卫人皇
|
| | | elif dictName == ShareDefine.Def_Notify_WorldKey_FBFuncState % ChConfig.Def_FBMapID_FamilyInvade:
|
| | | PlayerFamilySWRH.OnSWRHStateChange(dictName, isOpen)
|
| | | #骑宠争夺
|
| | | elif dictName == ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_FamilyRobBoss:
|
| | | GameWorldBoss.OnHorsePetRobBossActionChange(isOpen)
|
| | | return
|
| | |
|
| | | #------------------------------------------------------------------------------
|
| | |
| | | isMapNeedShunt = IsMapNeedBossShunt(mapID)
|
| | | isAlive = __GetIsAlive(bossID)
|
| | |
|
| | | GameWorld.DebugLog("击杀世界boss DoGameWorldBossOnKilled...bossID=%s,hurtValue=%s,mapID=%s,tick=%s,isMapNeedShunt=%s,isAlive=%s" |
| | | % (bossID, hurtValue, mapID, tick, isMapNeedShunt, isAlive))
|
| | | GameWorld.Log("击杀世界boss DoGameWorldBossOnKilled...bossID=%s,hurtValue=%s,mapID=%s,tick=%s,isMapNeedShunt=%s,isAlive=%s" |
| | | % (bossID, hurtValue, mapID, tick, isMapNeedShunt, isAlive))
|
| | | if isMapNeedShunt and not isAlive:
|
| | | GameWorld.DebugLog("需要分流的地图boss被击杀,但是当前boss全局状态为死亡状态,不再更新boss击杀信息!")
|
| | | return
|
| | |
| | | # 全服广播世界boss变更信息
|
| | | Sync_BossInfo(None, [bossID])
|
| | | SendMapServerBossKilledCnt(bossID)
|
| | |
|
| | | |
| | | horsePetRobBossIDList = IpyGameDataPY.GetFuncEvalCfg("FairyGrabBossID", 1)
|
| | | if bossID in horsePetRobBossIDList:
|
| | | OnFamilyKillHorsePetRobBoss(killPlayerName)
|
| | | return
|
| | |
|
| | | def __UpdateBossRefreshList(bossID, killedTime=0, refreshTime=0):
|
| | |
| | | bossID = IpyGameDataPY.GetFuncCfg('DogzFBRefreshCfg', 2)
|
| | | onlineCnt = __GetBossOnlineHeroCnt(bossID)[0]
|
| | | GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_BossOnlineHeroCnt % bossID, onlineCnt)
|
| | | |
| | | #仙盟击杀骑宠boss数
|
| | | if PyGameData.g_familyKillHorsePetRobBossCntDict:
|
| | | GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FamilyKillHorsePetRobBossCnt, PyGameData.g_familyKillHorsePetRobBossCntDict)
|
| | | return
|
| | |
|
| | |
|
| | |
| | |
|
| | | ## -----------------------------------------------------------------------------------------------
|
| | |
|
| | | def OnFamilyKillHorsePetRobBoss(killFamilyName):
|
| | | ## 仙盟击杀骑宠boss
|
| | | |
| | | family = GameWorld.GetFamilyManager().FindFamilyByName(killFamilyName)
|
| | | if not family:
|
| | | GameWorld.ErrLog("找不到该仙盟名: killFamilyName=%s" % killFamilyName)
|
| | | return
|
| | | |
| | | familyID = family.GetID()
|
| | | PyGameData.g_familyKillHorsePetRobBossCntDict[familyID] = PyGameData.g_familyKillHorsePetRobBossCntDict.get(familyID, 0) + 1
|
| | | GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FamilyKillHorsePetRobBossCnt, PyGameData.g_familyKillHorsePetRobBossCntDict)
|
| | | GameWorld.Log("骑宠争夺仙盟击杀Boss数统计: %s" % PyGameData.g_familyKillHorsePetRobBossCntDict)
|
| | | return
|
| | |
|
| | | def OnHorsePetRobBossActionChange(isOpen):
|
| | | ## 骑宠争夺活动状态变更
|
| | | |
| | | # 无论开关都重置, 服务器活动中维护暂时不处理
|
| | | PyGameData.g_familyKillHorsePetRobBossCntDict = {}
|
| | | GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FamilyKillHorsePetRobBossCnt, PyGameData.g_familyKillHorsePetRobBossCntDict)
|
| | | |
| | | |
| | | return
|
| | |
|
| | | def MapServer_HorsePetRobBossHurtPlayer(msgInfo):
|
| | | ## 骑宠争夺boss伤血玩家同步
|
| | | GameWorld.Log("骑宠争夺boss伤血玩家同步: %s" % str(msgInfo))
|
| | |
| | |
|
| | | g_familyOwnerBossInfo = {} # 地图同步上来的仙盟归属boss信息 {bossID:[curHp, maxHP, ownerFamilyID, ownerFamilyName], ...}
|
| | | g_horsePetRobBossHurtPlayerIDInfo = {} # 骑宠争夺有对boss伤血过的玩家ID信息 {bossID:{familyID:[playerID, ...], ...}, ...}
|
| | | g_familyKillHorsePetRobBossCntDict = {} # 骑宠争夺仙盟已击杀boss数 {familyID:击杀数, ...}
|
| | |
|
| | | g_todayPlayerLVDict = {} #今日玩家等级字典 {playerID:lv,..}
|
| | | g_yesterdayPlayerLVDict = {} #昨日玩家等级字典{playerID:lv,..}
|
| | |
| | | Def_Notify_WorldKey_BossShuntPlayer = 'BossShuntPlayer' # boss分流玩家信息
|
| | | Def_Notify_WorldKey_BossShuntDeadLine = 'BossShuntDeadLine' # boss分流线路已死亡的线路
|
| | | Def_Notify_WorldKey_BossOnlineHeroCnt = 'BossOnlineHeroCnt_%s' # boss刷新时间用的在线人数, 参数为NPCID
|
| | | Def_Notify_WorldKey_FamilyKillHorsePetRobBossCnt = 'FamilyKillHorsePetRobBossCnt' # boss分流线路已死亡的线路
|
| | |
|
| | | Def_Notify_WorldKey_FamilyActivityDayState = "FamilyActivityDayState" #战盟相关活动今日开启状态, 按位存储代表今日是否开启过
|
| | |
|
| | |
| | |
|
| | | aNPCHurtAddPer = PlayerControl.GetNPCHurtAddPer(atkObj) # PVE伤害加成
|
| | | aDamagePerPVP = PlayerControl.GetDamagePerPVP(atkObj) # 外层PVP伤害加成
|
| | | aFinalHurtPer = PlayerControl.GetFinalHurtPer(atkObj) # 最外层伤害加成
|
| | | aFinalHurtPer = PlayerControl.GetFinalHurtPer(atkObj) # 最外层伤害加成, 可能为负值
|
| | | aFinalHurt = PlayerControl.GetFinalHurt(atkObj) # 最终固定伤害
|
| | | # 被动增加最终伤害
|
| | | aFinalHurt += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddFinalValue)
|
| | |
| | | aNPCHurtAddPer = 0 # PVE伤害加成
|
| | | aDamagePer = 0 # 外层伤害加成
|
| | | aDamagePerPVP = 0 # 外层PVP伤害加成
|
| | | aFinalHurtPer = 0 # 最外层伤害加成
|
| | | aFinalHurtPer = 0 # 最外层伤害加成, 可能为负值
|
| | | aFinalHurt = NPCCommon.GetFinalHurt(atkObj) # 最终固定伤害
|
| | | aFightPower = NPCCommon.GetSuppressFightPower(atkObj)
|
| | |
|
| | |
| | | if suppressFormulaKeyRealm in hurtDist:
|
| | | SuppressValueRealmRate = int(eval(FormulaControl.GetCompileFormula(suppressFormulaKeyRealm, hurtDist[suppressFormulaKeyRealm])))
|
| | |
|
| | |
|
| | | # 骑宠争夺最终伤害衰减 |
| | | if FamilyRobBoss.IsHorsePetRobBoss(defObj.GetNPCID()):
|
| | | findBuff = SkillCommon.FindBuffByID(atkObj, ChConfig.Def_SkillID_HorsePetRobBossKillCntBuff)[0]
|
| | | if findBuff:
|
| | | reduceFinalHurtPer = findBuff.GetSkill().GetEffect(0).GetEffectValue(0)
|
| | | aFinalHurtPer -= reduceFinalHurtPer
|
| | | |
| | | atkStateMark = GetObjAtkStateMark(atkObj)
|
| | | defStateMark = GetObjAtkStateMark(defObj)
|
| | | hurtFormulaKey = "%sV%s_%s" % (atkStateMark, defStateMark, atkType)
|
| | |
| | | Def_SkillID_DropOwnerBuff = 20040 # 掉落归属buff
|
| | | Def_SkillID_PetSignDay = 47111 # 灵宠签到属性技能, 单次签到的加成
|
| | | Def_SkillID_LFZ = 47100 # 龙凤镯技能(打怪概率经验加成)
|
| | | Def_SkillID_HorsePetRobBossKillCntBuff = 21020 # 骑宠的怨念buff
|
| | |
|
| | |
|
| | | Def_SkillID_FamilyWar_CWinBuff = 22101 # 仙盟联赛 - 连胜buff, 由连胜次数决定等级
|
| | |
| | | import PlayerActivity
|
| | | import PlayerControl
|
| | | import IpyGameDataPY
|
| | | import SkillCommon
|
| | | import PyGameData
|
| | | import BuffSkill
|
| | | import PlayerTJG
|
| | | import NPCCommon
|
| | | import ChConfig
|
| | | import GameObj
|
| | |
| | | if not g_familyOwnerBossHurt:
|
| | | g_familyOwnerBossHurt = FamilyOwnerBossHurt()
|
| | | return g_familyOwnerBossHurt
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | | if GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_FamilyRobBoss):
|
| | | __DoCheckHorsePetRobBossKillCntBuff(curPlayer, GameWorld.GetGameWorld().GetTick())
|
| | | return
|
| | |
|
| | | def IsHorsePetRobBoss(bossID):
|
| | | ## 是否骑宠争夺bossID
|
| | |
| | | return hurtPack
|
| | |
|
| | |
|
| | | def OnFamilyKillHorsePetRobBossCntChange(tick):
|
| | | ## 仙盟击杀骑宠boss个数变更
|
| | | |
| | | playerManager = GameWorld.GetPlayerManager()
|
| | | for i in xrange(playerManager.OnlineCount()):
|
| | | curPlayer = playerManager.OnlineAt(i)
|
| | | if curPlayer.IsEmpty():
|
| | | continue
|
| | | __DoCheckHorsePetRobBossKillCntBuff(curPlayer, tick)
|
| | | |
| | | return
|
| | |
|
| | | def __DoCheckHorsePetRobBossKillCntBuff(curPlayer, tick):
|
| | | familyID = curPlayer.GetFamilyID()
|
| | | if not familyID:
|
| | | return
|
| | | |
| | | if PlayerTJG.GetIsTJG(curPlayer):
|
| | | return
|
| | | |
| | | killCount = PyGameData.g_familyKillHorsePetRobBossCntDict.get(familyID, 0)
|
| | | skillTypeID = ChConfig.Def_SkillID_HorsePetRobBossKillCntBuff
|
| | | |
| | | skillInfo = SkillCommon.FindBuffByID(curPlayer, skillTypeID)
|
| | | findBuff, buffManager, buffType, findSkill = skillInfo
|
| | | if not findSkill:
|
| | | return
|
| | | killLV = min(killCount, findSkill.GetSkillMaxLV())
|
| | | |
| | | if findBuff:
|
| | | buffSkill = findBuff.GetSkill()
|
| | | if not buffSkill:
|
| | | return
|
| | | curBuffLV = buffSkill.GetSkillLV()
|
| | | if curBuffLV == killLV:
|
| | | #GameWorld.DebugLog("骑宠怨念buff等级不变: familyID=%s,killLV=%s,curBuffLV=%s" % (familyID, killLV, curBuffLV), curPlayer.GetPlayerID())
|
| | | return
|
| | | |
| | | elif not killLV:
|
| | | #GameWorld.DebugLog("无骑宠怨念buff: familyID=%s,killLV=%s" % (familyID, killLV), curPlayer.GetPlayerID())
|
| | | return
|
| | | |
| | | if not killLV:
|
| | | #GameWorld.DebugLog("删除骑宠怨念buff: familyID=%s,killLV=%s" % (familyID, killLV), curPlayer.GetPlayerID())
|
| | | BuffSkill.DelBuffBySkillID(curPlayer, skillTypeID, tick)
|
| | | else:
|
| | | #GameWorld.DebugLog("变更骑宠怨念buff等级: familyID=%s,killLV=%s" % (familyID, killLV), curPlayer.GetPlayerID())
|
| | | curSkill = GameWorld.GetGameData().FindSkillByType(skillTypeID, killLV)
|
| | | BuffSkill.AddBuffNoRefreshState(curPlayer, buffType, curSkill, tick, [], curPlayer)
|
| | | |
| | | return
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
| | | import PlayerSpringSale
|
| | | import PlayerFairyCeremony
|
| | | import ChNetSendPack
|
| | | import FamilyRobBoss
|
| | | import PyGameData
|
| | | import PlayerCoin
|
| | | import PlayerGeTui
|
| | |
| | | SyncPackDownloadAward(curPlayer)
|
| | | # 登录触发功能开启(老号处理)
|
| | | GameFuncComm.DoFuncOpenLogic(curPlayer)
|
| | | # 神兽
|
| | | # 神兽
|
| | | PlayerDogz.OnPlayerLogin(curPlayer)
|
| | | # 神兽副本
|
| | | # 神兽副本
|
| | | GameLogic_Dogz.SyncNPCRefreshTime(curPlayer.GetID())
|
| | |
|
| | | # 骑宠
|
| | | FamilyRobBoss.OnPlayerLogin(curPlayer)
|
| | | |
| | | # 上线查询一次充值订单
|
| | | curPlayer.SendDBQueryRecharge()
|
| | |
|
| | |
| | | import PlayerVip
|
| | | import PlayerDiceEx
|
| | | import IpyGameDataPY
|
| | | import FamilyRobBoss
|
| | | import QuestManager
|
| | | import PyGameData
|
| | | import PlayerTJG
|
| | |
| | | PyGameData.g_bossShuntDeadLine = eval(msgValue)
|
| | | return
|
| | |
|
| | | if key == ShareDefine.Def_Notify_WorldKey_FamilyKillHorsePetRobBossCnt:
|
| | | PyGameData.g_familyKillHorsePetRobBossCntDict = eval(msgValue)
|
| | | FamilyRobBoss.OnFamilyKillHorsePetRobBossCntChange(tick)
|
| | | return
|
| | | |
| | | if key == ShareDefine.Def_Notify_WorldKey_FBEnterTimeLimiitMapID:
|
| | | PyGameData.FBEnterTimeLimiitMapID = eval(msgValue)
|
| | | return
|
| | |
| | | VSFamilyInfo = [] # 仙盟联赛开启的副本信息 [是否最终决赛场次, roundNum, groupID, [familyIDA, failyIDB], [familyNameA, familyNameB], [familyRankA, familyRankB]]
|
| | | g_familyBossOpenCountDict = {} # 仙盟boss开启次数 {familyID:次数, ...}
|
| | | g_familyBossPlayer = {} # 仙盟boss参与玩家 {familyID:[playerID, ...], ...}
|
| | | g_familyKillHorsePetRobBossCntDict = {} # 骑宠争夺仙盟已击杀boss数 {familyID:击杀数, ...}
|
| | |
|
| | | g_PassiveEffManager = None # 被动技能(效果)单例
|
| | |
|
| | |
| | | Def_Notify_WorldKey_BossShuntPlayer = 'BossShuntPlayer' # boss分流玩家信息
|
| | | Def_Notify_WorldKey_BossShuntDeadLine = 'BossShuntDeadLine' # boss分流线路已死亡的线路
|
| | | Def_Notify_WorldKey_BossOnlineHeroCnt = 'BossOnlineHeroCnt_%s' # boss刷新时间用的在线人数, 参数为NPCID
|
| | | Def_Notify_WorldKey_FamilyKillHorsePetRobBossCnt = 'FamilyKillHorsePetRobBossCnt' # boss分流线路已死亡的线路
|
| | |
|
| | | Def_Notify_WorldKey_FamilyActivityDayState = "FamilyActivityDayState" #战盟相关活动今日开启状态, 按位存储代表今日是否开启过
|
| | |
|