#!/usr/bin/python # -*- coding: GBK -*- # ##@package E:/GameSVN/U3DGame/ProjectSServer/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py # @todo: # # @author: Alee # @date 2017-10-24 ÏÂÎç07:49:45 # @version 1.0 # # @note: # #--------------------------------------------------------------------- import ShareDefine import ChConfig import IPY_GameWorld import IpyGameDataPY import SkillCommon import PlayerControl import ChNetSendPack import TurnAttack # ¹ØÓÚѪÁ¿µÄº¯ÊýÕâÀïÖ»°ü×°×î¼òµ¥µÄ³¬DWORD´¦Àí def GetMaxHP(gameObj): return gameObj.GetMaxHPEx() * ShareDefine.Def_PerPointValue + gameObj.GetMaxHP() def SetMaxHP(gameObj, value): gameObj.SetMaxHP(value % ShareDefine.Def_PerPointValue, value / ShareDefine.Def_PerPointValue) return def GetHP(gameObj): return gameObj.GetHPEx() * ShareDefine.Def_PerPointValue + gameObj.GetHP() def SetHP(gameObj, value, isNotify=None, isByTime=False): if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: if isNotify == None: isNotify = True else: if isNotify == None: isNotify = False if gameObj.GetGameObjType() == IPY_GameWorld.gotNPC: npcID = gameObj.GetNPCID() if IpyGameDataPY.GetIpyGameDataNotLog("NPCTimeLostHP", npcID) and not isByTime and value not in [GetMaxHP(gameObj), 0]: #GameWorld.DebugLog("²»ÄÜÉèÖð´Ê±¼äµôѪµÄ¹ÖÎïѪÁ¿! id=%s,npciD=%s,value=%s,isByTime=%s" % (gameObj.GetID(), gameObj.GetNPCID(), value, isByTime)) return gameObj.SetHP(value % ShareDefine.Def_PerPointValue, value / ShareDefine.Def_PerPointValue, False) if isNotify: NotifyObjInfoRefresh(gameObj, IPY_GameWorld.CDBPlayerRefresh_HP, value) return def SetHPFull(gameObj, isNotify=True): SetHP(gameObj, GetMaxHP(gameObj), isNotify) return def SetBaseMaxHP(gameObj, value): gameObj.SetBaseMaxHP(value % ShareDefine.Def_PerPointValue, value / ShareDefine.Def_PerPointValue) return def GetXP(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrXP) def SetXP(gameObj, value, isNotify=True): ## XPÖµ£¬ÓÃ×÷Å­ÆøÖµ gameObj.SetDict(ChConfig.Def_PlayerKey_AttrXP, value) if isNotify: NotifyObjInfoRefresh(gameObj, IPY_GameWorld.CDBPlayerRefresh_XP, value) return def GetAngryValue(curAngry): return curAngry.GetAngryValue() + curAngry.GetAngryValueEx() * ShareDefine.Def_PerPointValue def SetAngryValue(curAngry, value): curAngry.SetAngryValue(value % ShareDefine.Def_PerPointValue, value / ShareDefine.Def_PerPointValue) return ## ÉèÖÃbuff״̬(½Å±¾×Ô¶¨Òåö¾Ù) # @param pyState ״̬ # @param isTrue ÊÇ·ñÉèÖøÃ״̬ # @return None def SetPyPlayerState(gameObj, pyState, isAdd): if pyState == 0: return if pyState not in ChConfig.Def_PlayerStateList: return curState = gameObj.GetDictByKey(ChConfig.Def_PlayerKey_CurState) if isAdd: # Ôö¼Ó updState = curState | pow(2, pyState) else: # ɾ³ý if curState & pow(2, pyState) == 0: return else: updState = curState ^ pow(2, pyState) #GameWorld.DebugLog("SetPyPlayerState (%s - %s), curState=%s,updState=%s" # % (pyState, isAdd, curState, updState)) gameObj.SetDict(ChConfig.Def_PlayerKey_CurState, updState) return ## »ñÈ¡buff״̬(½Å±¾×Ô¶¨Òåö¾Ù) # @param pyState ״̬ # @return ÊÇ·ñ¸Ã״̬ # @remarks ¸Ã״̬Ϊbuff¶ÔÓ¦µÄ×Ô¶¨Òå״̬Ч¹û #=============================================================================== # ´ËÎÊÌâÔÚ4012 Ïûʧʱ´¦Àí # # Ŀǰµ±Ä¿±êÉíÉ϶à¸öbuff¶¼ÓÐͬһЧ¹ûʱ(È綨Éí)£¬ÔÚÒ»¸öbuffÏûʧʱ»á½â³ý¸Ã״̬ # # ¹Ê¸Ã״̬±ê¼Ç½öΪһ¸ö·Ç¾«È·µÄ±ê¼Ç£¬Ó¦ÓÃÖÐÇë×¢Ò⣡£¡£¡(µ±ÇÒ½öµ±¶à¸öbuffÓÐͬһ¸öЧ¹ûʱ»áÌáǰ½áÊø¸Ã״̬) #=============================================================================== def GetPyPlayerState(gameObj, pyState, ownerID=0, ownerType=0): if not gameObj: return False if pyState == 0: # 0²»ÐèÒªÅÐ¶Ï return True curState = gameObj.GetDictByKey(ChConfig.Def_PlayerKey_CurState) state = curState & pow(2, pyState) if state and ownerID: # ½øÒ»²½ÅжÏÊÇ·ñÊÍ·ÅÕß return True if IsInStateEffectByOwner(gameObj, ChConfig.Def_Skill_Effect_BuffState, pyState, ownerID, ownerType) else False return state # ´óÓÚµÈÓÚ2¸ö״̬ Ôò²»ÇåÀí״̬ def IsInStateEffectByOwner(curObj, effectID, stateType, ownerID, ownerType): for buffType in xrange(IPY_GameWorld.bfBuff, IPY_GameWorld.btBufMax): if buffType in ChConfig.Def_BuffType_OnlyPlayer: continue buffTuple = SkillCommon.GetBuffManagerByBuffType(curObj, buffType) #ͨ¹ýÀàÐÍ»ñȡĿ±êµÄbuff¹ÜÀíÆ÷Ϊ¿Õ£¬ÔòÌø³ö if buffTuple == (): continue buffManager = buffTuple[0] for i in range(buffManager.GetEffectCount()): effect = buffManager.GetEffect(i) if not effect: continue if effect.GetEffectID() != effectID: continue if effect.GetEffectValue(0) != stateType: continue if buffManager.GetEffectOwnerID(i) != ownerID: continue if buffManager.GetEffectOwnerType(i) != ownerType: continue return True return False def ClearPyPlayerState(gameObj): gameObj.SetDict(ChConfig.Def_PlayerKey_CurState, 0) return def GetLastHurtValue(gameObj): ## ×îºóÒ»»÷É˺¦Öµ hurt = gameObj.GetDictByKey(ChConfig.Def_PlayerKey_LastHurtValue) hurtEx = gameObj.GetDictByKey(ChConfig.Def_PlayerKey_LastHurtValueEx) return hurtEx * ShareDefine.Def_PerPointValue + hurt def SetLastHurtValue(gameObj, value): gameObj.SetDict(ChConfig.Def_PlayerKey_LastHurtValue, value % ShareDefine.Def_PerPointValue) gameObj.SetDict(ChConfig.Def_PlayerKey_LastHurtValueEx, value / ShareDefine.Def_PerPointValue) return def GetLastBeHurtValue(gameObj): ## ×îºóÒ»´ÎÊÜÉËÖµ return 0 #hurt = gameObj.GetDictByKey(ChConfig.Def_PlayerKey_LastBeHurtValue) #hurtEx = gameObj.GetDictByKey(ChConfig.Def_PlayerKey_LastBeHurtValueEx) #return hurtEx * ShareDefine.Def_PerPointValue + hurt def SetLastBeHurtValue(gameObj, value): #gameObj.SetDict(ChConfig.Def_PlayerKey_LastBeHurtValue, value % ShareDefine.Def_PerPointValue) #gameObj.SetDict(ChConfig.Def_PlayerKey_LastBeHurtValueEx, value / ShareDefine.Def_PerPointValue) return def GetBloodShiledHurt(gameObj): ## É˺¦ÖµÓÃÓÚѪ¶ÜµÖÏû hurt = gameObj.GetDictByKey(ChConfig.Def_PlayerKey_BloodShiledHurt) hurtEx = gameObj.GetDictByKey(ChConfig.Def_PlayerKey_BloodShiledHurtEx) return hurtEx * ShareDefine.Def_PerPointValue + hurt def SetBloodShiledHurt(gameObj, value): gameObj.SetDict(ChConfig.Def_PlayerKey_BloodShiledHurt, value % ShareDefine.Def_PerPointValue) gameObj.SetDict(ChConfig.Def_PlayerKey_BloodShiledHurtEx, value / ShareDefine.Def_PerPointValue) return ## --------------------------------------------------------- def ClearBattleEffect(gameObj): gameObj.ClearBattleEffect() # ÆäËûpy²ã×Ô¶¨ÒåÕ½¶·ÊôÐÔ£¬ÓÉÓÚEffGetSetÖв»ÊÇËùÓÐÊôÐÔ½Ó¿Ú¾ùͨÓ㬹ÌÕâÀïÏÈÊÖ¶¯µ÷Óà SetPetDamPer(gameObj, 0) SetFinalHurtPer(gameObj, 0) SetFinalHurtReducePer(gameObj, 0) SetAtkSpeed(gameObj, 0) SetSuperHitRateReduce(gameObj, 0) SetSuperHitReduce(gameObj, 0) SetFaintRate(gameObj, 0) SetFaintDefRate(gameObj, 0) SetComboRate(gameObj, 0) SetComboDefRate(gameObj, 0) SetComboDamPer(gameObj, 0) SetAtkBackRate(gameObj, 0) SetAtkBackDefRate(gameObj, 0) SetSuckHPPer(gameObj, 0) SetSuckHPDefPer(gameObj, 0) SetAtkBackHP(gameObj, 0) SetCurePer(gameObj, 0) SetCureDefPer(gameObj, 0) SetPetStrengthenPer(gameObj, 0) SetPetWeakenPer(gameObj, 0) SetDamageBackRate(gameObj, 0) SetSuperHitHurtPer(gameObj, 0) SetSuperHitHurtDefPer(gameObj, 0) return def GetPetDamPer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetDamPer) def SetPetDamPer(gameObj, value): gameObj.SetDict(ChConfig.Def_PlayerKey_AttrPetDamPer, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_PetDamPer, value) return def GetFinalHurtPer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurtPer) def SetFinalHurtPer(gameObj, value): ## ×îÖÕÉ˺¦°Ù·Ö±È gameObj.SetDict(ChConfig.Def_PlayerKey_FinalHurtPer, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_FinalHurtPer, value) return def GetFinalHurtReducePer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurtReducePer) def SetFinalHurtReducePer(gameObj, value): ## ×îÖÕÉ˺¦¼õÃâ°Ù·Ö±È gameObj.SetDict(ChConfig.Def_PlayerKey_FinalHurtReducePer, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_FinalHurtReducePer, value) return def GetFaction(gameObj): faction = gameObj.GetDictByKey(ChConfig.Def_Obj_Dict_Faction) if faction: return faction if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: return gameObj.GetFaction() return gameObj.GetCountry() def SetFaction(gameObj, value): gameObj.SetDict(ChConfig.Def_Obj_Dict_Faction, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: gameObj.SetFaction(value) return def GetAtkSpeed(gameObj): if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: return gameObj.GetBattleValEx1() return gameObj.GetDictByKey(ChConfig.AttrName_AtkSpeed) def SetAtkSpeed(gameObj, value): ## ¹¥»÷ËÙ¶È if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: gameObj.SetBattleValEx1(value, True) else: gameObj.SetDict(ChConfig.AttrName_AtkSpeed, value) return def GetMissRate(gameObj): return gameObj.GetMiss() def SetMissRate(gameObj, value): ## ÉÁ±Ü¸ÅÂÊ gameObj.SetMiss(value) return def GetMissDefRate(gameObj): return gameObj.GetHit() def SetMissDefRate(gameObj, value): ## ¿¹ÉÁ±ÜÂÊ = ÃüÖÐ gameObj.SetHit(value) return def GetSuperHitRate(gameObj): return gameObj.GetSuperHitRate() def SetSuperHitRate(gameObj, value): ## ±©»÷¸ÅÂÊ gameObj.SetSuperHitRate(value) return def GetSuperHitRateReduce(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_SuperHitRateReduce) def SetSuperHitRateReduce(gameObj, value): ## ¿¹±©»÷¸ÅÂÊ gameObj.SetDict(ChConfig.Def_PlayerKey_SuperHitRateReduce, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitRateReduce, value) return def GetSuperHitReduce(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_SuperHitReduce) def SetSuperHitReduce(gameObj, value): ## ±©»÷¹Ì¶¨É˺¦¼õÃâ - ±©»÷ʱ¸½¼Ó¹Ì¶¨É˺¦¼õÃ⣬Óë atkObj.GetSuperHit() Ïà¶Ô gameObj.SetDict(ChConfig.Def_PlayerKey_SuperHitReduce, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitReduce, value) return def GetSuperHitHurtPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuperHitHurtPer) def SetSuperHitHurtPer(gameObj, value): ## Ç¿»¯±©ÉË - ±©»÷ʱµÄ×ÜÉ˺¦¼Ó³É£¬Óë SuperHitHurtDefPer Ïà¶Ô£¬×¢ÒâÓ뱩»÷¹Ì¶¨É˺¦Çø·Ö gameObj.SetDict(ChConfig.AttrName_SuperHitHurtPer, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitHurtPer, value) return def GetSuperHitHurtDefPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuperHitHurtDefPer) def SetSuperHitHurtDefPer(gameObj, value): ## Èõ»¯±©ÉË - ±©»÷ʱµÄ×ÜÉ˺¦¼õÃâ gameObj.SetDict(ChConfig.AttrName_SuperHitHurtDefPer, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitHurtDefPer, value) return def GetFaintRate(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrFaintRate) def SetFaintRate(gameObj, value): ## »÷ÔθÅÂÊ gameObj.SetDict(ChConfig.Def_PlayerKey_AttrFaintRate, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_FaintRate, value) return def GetFaintDefRate(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrFaintDefRate) def SetFaintDefRate(gameObj, value): ## ¿¹»÷ÔθÅÂÊ gameObj.SetDict(ChConfig.Def_PlayerKey_AttrFaintDefRate, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_FaintDefRate, value) return def GetComboRate(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrComboRate) def SetComboRate(gameObj, value): ## Á¬»÷¸ÅÂÊ gameObj.SetDict(ChConfig.Def_PlayerKey_AttrComboRate, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_ComboRate, value) return def GetComboDefRate(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_ComboDefRate) def SetComboDefRate(gameObj, value): ## ¿¹Á¬»÷¸ÅÂÊ gameObj.SetDict(ChConfig.AttrName_ComboDefRate, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_ComboDefRate, value) return def GetComboDamPer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrComboDamPer) def SetComboDamPer(gameObj, value): ## Á¬»÷É˺¦ gameObj.SetDict(ChConfig.Def_PlayerKey_AttrComboDamPer, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_ComboDamPer, value) return def GetAtkBackRate(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_AtkBackRate) def SetAtkBackRate(gameObj, value): ## ·´»÷¸ÅÂÊ gameObj.SetDict(ChConfig.AttrName_AtkBackRate, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_AtkBackRate, value) return def GetAtkBackDefRate(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_AtkBackDefRate) def SetAtkBackDefRate(gameObj, value): ## ¿¹·´»÷¸ÅÂÊ gameObj.SetDict(ChConfig.AttrName_AtkBackDefRate, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_AtkBackDefRate, value) return def GetSuckHPPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuckHPPer) def SetSuckHPPer(gameObj, value): ## ÎüѪ±ÈÂÊ gameObj.SetDict(ChConfig.AttrName_SuckHPPer, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuckHPPer, value) return def GetSuckHPDefPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuckHPDefPer) def SetSuckHPDefPer(gameObj, value): ## ¿¹ÎüѪ±ÈÂÊ gameObj.SetDict(ChConfig.AttrName_SuckHPDefPer, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuckHPDefPer, value) return def GetAtkBackHP(gameObj): if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: return gameObj.GetBattleValEx2() return gameObj.GetDictByKey(ChConfig.AttrName_AtkBackHP) def SetAtkBackHP(gameObj, value): ## ÎüѪ¹Ì¶¨Öµ if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: gameObj.SetBattleValEx2(value) else: gameObj.SetDict(ChConfig.AttrName_AtkBackHP, value) return def GetCurePer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_CurePer) def SetCurePer(gameObj, value): ## Ç¿»¯ÖÎÁÆ gameObj.SetDict(ChConfig.AttrName_CurePer, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_CurePer, value) return def GetCureDefPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_CureDefPer) def SetCureDefPer(gameObj, value): ## Èõ»¯ÖÎÁÆ gameObj.SetDict(ChConfig.AttrName_CureDefPer, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_CureDefPer, value) return def GetPetStrengthenPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_PetStrengthenPer) def SetPetStrengthenPer(gameObj, value): ## Ç¿»¯ÁéÊÞ gameObj.SetDict(ChConfig.AttrName_PetStrengthenPer, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_PetStrengthenPer, value) return def GetPetWeakenPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_PetWeakenPer) def SetPetWeakenPer(gameObj, value): ## Èõ»¯ÁéÊÞ gameObj.SetDict(ChConfig.AttrName_PetWeakenPer, value) if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_PetWeakenPer, value) return def GetDamageBackRate(gameObj): if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: return gameObj.GetDamageBackRate() return gameObj.GetDictByKey(ChConfig.AttrName_DamBackPer) def SetDamageBackRate(gameObj, value): ## ·´µ¯É˺¦ if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer: gameObj.SetDamageBackRate(value) else: gameObj.SetDict(ChConfig.AttrName_DamBackPer, value) return def NotifyObjInfoRefresh(gameObj, refreshType, value): ##0418֪ͨ¶ÔÏóÊôÐÔˢРsendPack = ChNetSendPack.tagObjInfoRefresh() sendPack.Clear() sendPack.ObjID = gameObj.GetID() sendPack.ObjType = gameObj.GetGameObjType() sendPack.RefreshType = refreshType sendPack.Value = value % ShareDefine.Def_PerPointValue sendPack.ValueEx = value / ShareDefine.Def_PerPointValue turnFight = TurnAttack.GetTurnFightMgr().getNPCTurnFight(gameObj.GetID()) if turnFight: turnFight.addBatPack(sendPack) return gameObj.NotifyAll(sendPack.GetBuffer(), sendPack.GetLength()) return