ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
@@ -18,6 +18,8 @@
import IpyGameDataPY
import SkillCommon
import PlayerControl
import ChNetSendPack
import TurnAttack
# 关于血量的函数这里只包装最简单的超DWORD处理
@@ -35,7 +37,6 @@
    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
@@ -44,17 +45,28 @@
            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)
    gameObj.SetHP(value % ShareDefine.Def_PerPointValue, value / ShareDefine.Def_PerPointValue, False)
    if isNotify:
        NotifyObjInfoRefresh(gameObj, IPY_GameWorld.CDBPlayerRefresh_HP, value)
    return
def SetHPFull(gameObj):
    SetHP(gameObj, GetMaxHP(gameObj))
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):
@@ -152,13 +164,6 @@
    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)
@@ -167,6 +172,17 @@
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):
@@ -179,28 +195,262 @@
    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 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 GetComboDefRate(gameObj): return 0
def SetComboDefRate(gameObj, value): 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 GetAtkBackRate(gameObj): return 0
def SetAtkBackRate(gameObj, value): return
def GetAtkBackDefRate(gameObj): return 0
def SetAtkBackDefRate(gameObj, 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 GetSuckHPPer(gameObj): return 0
def SetSuckHPPer(gameObj, value): return
def GetSuckHPDefPer(gameObj): return 0
def SetSuckHPDefPer(gameObj, 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 GetCureDefPer(gameObj): return 0
def SetCureDefPer(gameObj, 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 GetPetStrengthenPer(gameObj): return 0
def SetPetStrengthenPer(gameObj, value): return
def GetPetWeakenPer(gameObj): return 0
def SetPetWeakenPer(gameObj, 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