From 9ec66731c8a551035958aebe1fa974a140b99cf1 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 02 七月 2025 17:34:10 +0800 Subject: [PATCH] 129 【战斗】战斗系统-服务端(初版战斗,支持基础的三维属性战斗,支持简单的普攻技能、怒气技能、回血技能;主线章节关卡过关支持;阵容保存支持多阵容;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py | 314 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 282 insertions(+), 32 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py index 715dbb1..06009e9 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py +++ b/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 -- Gitblit v1.8.0