#!/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 GetSuperHitHurtPer(gameObj): return 0 def SetSuperHitHurtPer(gameObj, value): return def GetSuperHitHurtDefPer(gameObj): return 0 def SetSuperHitHurtDefPer(gameObj, value): return def GetComboDefRate(gameObj): return 0 def SetComboDefRate(gameObj, value): return def GetAtkBackRate(gameObj): return 0 def SetAtkBackRate(gameObj, value): return def GetAtkBackDefRate(gameObj): return 0 def SetAtkBackDefRate(gameObj, value): return def GetSuckHPPer(gameObj): return 0 def SetSuckHPPer(gameObj, value): return def GetSuckHPDefPer(gameObj): return 0 def SetSuckHPDefPer(gameObj, value): return def GetCureDefPer(gameObj): return 0 def SetCureDefPer(gameObj, value): return def GetPetStrengthenPer(gameObj): return 0 def SetPetStrengthenPer(gameObj, value): return def GetPetWeakenPer(gameObj): return 0 def SetPetWeakenPer(gameObj, value): return