| | |
| | | import ChConfig
|
| | | import IPY_GameWorld
|
| | | import IpyGameDataPY
|
| | | import SkillCommon
|
| | | import PlayerControl
|
| | |
|
| | | # 关于血量的函数这里只包装最简单的超DWORD处理
|
| | |
|
| | | def GetMaxHP(gameObj):
|
| | | if not hasattr(gameObj, "GetMaxHPEx"):
|
| | | return gameObj.GetMaxHP()
|
| | | |
| | | else:
|
| | | return gameObj.GetMaxHPEx()*ShareDefine.Def_PerPointValue + gameObj.GetMaxHP()
|
| | |
|
| | | return gameObj.GetMaxHPEx() * ShareDefine.Def_PerPointValue + gameObj.GetMaxHP()
|
| | |
|
| | | def SetMaxHP(gameObj, value):
|
| | | if not hasattr(gameObj, "SetMaxHPEx"):
|
| | | gameObj.SetMaxHP(value)
|
| | | |
| | | else:
|
| | | gameObj.SetMaxHPEx(value/ShareDefine.Def_PerPointValue)
|
| | | gameObj.SetMaxHP(value%ShareDefine.Def_PerPointValue)
|
| | |
|
| | | gameObj.SetMaxHP(value % ShareDefine.Def_PerPointValue, value / ShareDefine.Def_PerPointValue)
|
| | | return
|
| | |
|
| | | def GetHP(gameObj):
|
| | | if not hasattr(gameObj, "GetHPEx"):
|
| | | return gameObj.GetHP()
|
| | | |
| | | else:
|
| | | return gameObj.GetHPEx()*ShareDefine.Def_PerPointValue + gameObj.GetHP()
|
| | | return gameObj.GetHPEx() * ShareDefine.Def_PerPointValue + gameObj.GetHP()
|
| | |
|
| | |
|
| | | def SetHP(gameObj, value, isNotify=True, isByTime=False):
|
| | | def SetHP(gameObj, value, isNotify=None, isByTime=False):
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | gameObj.SetHP(value, isNotify)
|
| | | 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.SetHPEx(value/ShareDefine.Def_PerPointValue)
|
| | | gameObj.SetHP(value%ShareDefine.Def_PerPointValue)
|
| | | |
| | | |
| | | 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
|
| | |
|
| | |
| | | # @param pyState ״̬
|
| | | # @return 是否该状态
|
| | | # @remarks 该状态为buff对应的自定义状态效果
|
| | | # 目前当目标身上多个buff都有同一效果时(如定身),在一个buff消失时会解除该状态
|
| | | # 故该状态标记仅为一个非精确的标记,应用中请注意!!!(当且仅当多个buff有同一个效果时会提前结束该状态)
|
| | | def GetPyPlayerState(gameObj, pyState):
|
| | |
|
| | | #===============================================================================
|
| | | # 此问题在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:
|
| | | gameObj.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_PetDamPer, value, False)
|
| | | 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
|