| #!/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  | 
|   | 
| # ¹ØÓÚѪÁ¿µÄº¯ÊýÕâÀïÖ»°ü×°×î¼òµ¥µÄ³¬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  | 
|         gameObj.SetHP(value % ShareDefine.Def_PerPointValue, value / ShareDefine.Def_PerPointValue, isNotify)  | 
|     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, isNotify)  | 
|     return  | 
|   | 
| def SetHPFull(gameObj):  | 
|     SetHP(gameObj, GetMaxHP(gameObj))  | 
|     return  | 
|   | 
| def SetBaseMaxHP(gameObj, value):  | 
|     gameObj.SetBaseMaxHP(value % ShareDefine.Def_PerPointValue, value / ShareDefine.Def_PerPointValue)  | 
|     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 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 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 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 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  | 
|   | 
| #---±©»÷¸ÅÂÊ---- ¶¼ÊÇÓàgameObj.GetSuperHitRate() gameObj.SetSuperHitRate()  | 
| 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 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  | 
|   | 
|      |