From afea2d9d4b9cb6d0982c02a775e8198fc2421c53 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 08 十二月 2023 18:21:28 +0800
Subject: [PATCH] 10019 【砍树】回合战斗(增加抗连击、反击、抗反击、吸血、抗吸血属性,玩家及NPC属性接口通用;连击、反击属性效果支持;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 13 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 157 +++++++++++++++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTJG.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py | 17 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4075.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 44 ++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py | 10
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 61 +++---
PySysDB/PySysDBPY.h | 12 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py | 90 ++++++++++
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 13 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 41 ----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 32 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py | 15 +
15 files changed, 395 insertions(+), 118 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 1def995..af055a8 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -631,6 +631,16 @@
DWORD _NPCID; //NPCID
BYTE FightPowerLackAtkLimit; //战力不足限制攻击
DWORD SuppressFightPower; //推荐/压制战力
+ DWORD AtkSpeed; //攻击速度
+ DWORD SuperHitRateReduce; //抗暴击概率
+ DWORD FaintRate; //击晕概率
+ DWORD FaintDefRate; //抗击晕概率
+ DWORD ComboRate; //连击概率
+ DWORD ComboDefRate; //抗连击概率
+ DWORD AtkBackRate; //反击概率
+ DWORD AtkBackDefRate; //抗反击概率
+ DWORD SuckHPPer; //吸血比率
+ DWORD SuckHPDefPer; //抗吸血比率
};
//成长型境界怪物表
@@ -887,6 +897,8 @@
DWORD _DataMapID; //数据地图ID
WORD _LineID; //功能线路ID
DWORD NPCID; //NPCID
+ DWORD SummerNPCID; //召唤兽ID
+ list AwardItemList; //过关奖励列表,[[物品ID,个数,是否拍品], ...]
};
//副本助战表
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 1e462d0..acec481 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -694,6 +694,12 @@
Def_Effect_FamilyWarAtkPer = 164 # 仙盟联赛攻击加成
Def_Effect_FamilySitExpPer = 165 # 仙盟打坐经验加成
+Def_Effect_ComboDefRate = 210 # 抗连击概率
+Def_Effect_AtkBackRate = 211 # 反击概率
+Def_Effect_AtkBackDefRate = 212 # 抗反击概率
+Def_Effect_SuckHPPer = 213 # 吸血比率
+Def_Effect_SuckHPDefPer = 214 # 抗吸血比率
+
#增加%d物理伤害值,其中a值为伤害值
Def_Effect_AddAtk = 1005
#增加%d魔法伤害值,其中a值为伤害值
@@ -1060,7 +1066,12 @@
CDBPlayerRefresh_JiYuan, # 机缘币 245
CDBPlayerRefresh_BTGMYuE, # BTGM余额 246
CDBPlayerRefresh_SuccessScore, # 成就积分 247
-) = range(146, 248)
+CDBPlayerRefresh_ComboDefRate, # 抗连击概率 248
+CDBPlayerRefresh_AtkBackRate, # 反击概率 249
+CDBPlayerRefresh_AtkBackDefRate, # 抗反击概率 250
+CDBPlayerRefresh_SuckHPPer, # 吸血比率 251
+CDBPlayerRefresh_SuckHPDefPer, # 抗吸血比率 252
+) = range(146, 253)
TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
index 73768b3..7c17195 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -1425,7 +1425,7 @@
return True, atkObj.GetSuperHit(), PlayerControl.GetSuperHitReduce(defObj)
aSuperHitRate = atkObj.GetSuperHitRate()
- dSuperHitRateReduce = PlayerControl.GetSuperHitRateReduce(defObj)
+ dSuperHitRateReduce = GameObj.GetSuperHitRateReduce(defObj)
superHitRate = eval(ReadChConfig.GetChConfig("CalcSuperHitRate"))
superHitRate += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill,
ChConfig.TriggerType_Buff_AddSuperHitRate)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
index 7963bd4..072738d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
@@ -1363,6 +1363,9 @@
# @return None
# @remarks 函数详细说明.
def __Sync_AttackResult(attacker, defender, curSkill):
+ battleType = AttackCommon.GetBattleType(attacker, curSkill)
+ turnBattleType = attacker.GetDictByKey(ChConfig.Def_Obj_Dict_TurnBattleType)
+ battleType = turnBattleType * 10 + battleType # 通知的battle修改: 回合攻击战斗类型*10+原战斗类型
#普通攻击
if not curSkill:
#GameWorld.Log("玩家普通攻击成功")
@@ -1373,7 +1376,7 @@
else:
curHurt = g_skillHurtList.GetHurtAt(0)
attacker.BaseAttack(curHurt.GetObjID(), curHurt.GetObjType(),
- AttackCommon.GetBattleType(attacker, curSkill),
+ battleType,
curHurt.GetAttackType(), curHurt.GetHurtHP(), curHurt.GetHurtHPEx(), curHurt.GetCurHP(), curHurt.GetCurHPEx())
#//返回值无意义
@@ -1384,7 +1387,6 @@
changeSkillID = PassiveBuffEffMng.GetPassiveSkillValueByTriggerTypeEx(attacker, None, curSkill, ChConfig.TriggerType_ChangeSkillEff)
if changeSkillID:
skillID = changeSkillID
- battleType = AttackCommon.GetBattleType(attacker, curSkill)
#无目标类技能
if not defender:
#玩家处理
@@ -1698,7 +1700,7 @@
if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer:
return
- faintRate = PlayerControl.GetFaintRate(attacker)
+ faintRate = GameObj.GetFaintRate(attacker)
if not faintRate:
#GameWorld.DebugLog("没有击晕概率!", attacker.GetID())
return
@@ -1724,7 +1726,7 @@
if GameObj.GetHP(defender) <= 0:
return
- tagFaintRate = PlayerControl.GetFaintDefRate(defender) if defender.GetGameObjType() == IPY_GameWorld.gotPlayer else 0
+ tagFaintRate = GameObj.GetFaintDefRate(defender) if defender.GetGameObjType() == IPY_GameWorld.gotPlayer else 0
# 添加最高60%击晕效果
maxRate = IpyGameDataPY.GetFuncCfg("PassiveSkillFaint", 1)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
index 7f2d67d..375d744 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -97,7 +97,7 @@
curPet = curPlayer.GetPetMgr().GetFightPet()
tagPet = None
- GameWorld.DebugLog("执行回合制战斗: mapID=%s,funcLineID=%s,tagPlayerID=%s,tagObjID=%s"
+ GameWorld.DebugLog("===== 执行回合制战斗: mapID=%s,funcLineID=%s,tagPlayerID=%s,tagObjID=%s"
% (mapID, funcLineID, tagPlayerID, tagObj.GetID()), playerID)
GameWorld.DebugLog("curPlayer.GetSightLevel=%s,tagObj.GetSightLevel=%s"
% (curPlayer.GetSightLevel(), tagObj.GetSightLevel()), playerID)
@@ -117,16 +117,23 @@
for gameObj in objList:
TurnFightObjStartInit(gameObj)
- curSpeed = 0
- tagSpeed = 0
- orderList = [1, 2] if curSpeed >= tagSpeed else [2, 1]
- GameWorld.DebugLog("playerHP=%s,tagHP=%s,curSpeed=%s,tagSpeed=%s"
- % (GameObj.GetHP(curPlayer), GameObj.GetHP(tagObj), curSpeed, tagSpeed), playerID)
+ curAtkSpeed = GameObj.GetAtkSpeed(curPlayer)
+ tagAtkSpeed = GameObj.GetAtkSpeed(tagObj)
+ orderList = [1, 2] if curAtkSpeed >= tagAtkSpeed else [2, 1]
+ GameWorld.DebugLog("playerHP=%s,tagHP=%s,curAtkSpeed=%s,tagAtkSpeed=%s"
+ % (GameObj.GetHP(curPlayer), GameObj.GetHP(tagObj), curAtkSpeed, tagAtkSpeed), playerID)
isWin = None
for turnNum in range(1, turnMax + 1):
- GameWorld.DebugLog("回合制战斗轮次: %s" % turnNum, playerID)
+ GameWorld.DebugLog("----- 回合制战斗轮次: %s -----" % turnNum, playerID)
SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, FightState_Fighting, turnNum, turnMax)
+
+ # 回合开始: 做一些每回合重置逻辑或者某些根据回合触发的效果等
+ for objList in factionObjDict.values():
+ for gameObj in objList:
+ TurnFightObjTurnStart(gameObj, turnNum)
+
+ # 回合战斗: 轮流依次攻击
for index in range(factionObjMax):
for faction in orderList:
objList = factionObjDict[faction]
@@ -135,7 +142,7 @@
gameObj = objList[index]
if not gameObj:
continue
- gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnFightNum, turnNum)
+
tagGameObj = tagObj if faction == 1 else curPlayer
objType = gameObj.GetGameObjType()
objID = gameObj.GetID()
@@ -144,17 +151,13 @@
GameWorld.DebugLog(" 行动: turnNum=%s,index=%s,faction=%s,objType=%s,objID=%s,tagObjType=%s,tagObjID=%s"
% (turnNum, index, faction, objType, objID, tagObjType, tagObjID), playerID)
- if objType == IPY_GameWorld.gotPlayer:
- PlayerAttack(gameObj, tagGameObj, tick)
- else:
- NPCAttack(gameObj, tagGameObj, tick)
-
+ DoAttack(gameObj, tagGameObj, tick)
+
if tagGameObj and GameObj.GetHP(tagGameObj) > 0:
- GameWorld.DebugLog(" playerHP=%s,tagHP=%s" % (GameObj.GetHP(curPlayer), GameObj.GetHP(tagObj)), playerID)
continue
isWin = faction == 1
- GameWorld.DebugLog(" tagObjType=%s,tagObjID=%s,被击杀,结束战斗: isWin=%s" % (tagObjType, tagObjID, isWin), playerID)
+ GameWorld.DebugLog(" tagObjType=%s,tagObjID=%s,被击杀,结束战斗: isWin=%s" % (tagObjType, tagObjID, isWin))
break
if isWin != None:
@@ -170,7 +173,7 @@
for gameObj in objList:
TurnFightObjOverReset(gameObj)
- GameWorld.DebugLog("回合制战斗结束: mapID=%s,funcLineID=%s,tagPlayerID=%s,isWin=%s,overState=%s"
+ GameWorld.DebugLog("===== 回合制战斗结束: mapID=%s,funcLineID=%s,tagPlayerID=%s,isWin=%s,overState=%s"
% (mapID, funcLineID, tagPlayerID, isWin, overState), playerID)
return
@@ -195,11 +198,31 @@
pass
return
+def TurnFightObjTurnStart(gameObj, turnNum):
+ ## 回合制战斗实例 - 每回合开始时处理
+ if not gameObj:
+ return
+
+ gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnFightNum, turnNum)
+ # 重置连击、反击数
+ gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnComboNum, 0)
+ gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnAtkBackNum, 0)
+
+ objType = gameObj.GetGameObjType()
+ if objType == IPY_GameWorld.gotPlayer:
+ pass
+
+ elif objType == IPY_GameWorld.gotNPC:
+ pass
+
+ return
+
def TurnFightObjOverReset(gameObj):
## 回合制战斗实例结束重置
if not gameObj:
return
gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnFightNum, 0)
+ gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnBattleType, 0)
objType = gameObj.GetGameObjType()
if objType == IPY_GameWorld.gotPlayer:
@@ -212,17 +235,107 @@
return
+def DoAttack(curObj, tagObj, tick):
+ curID = curObj.GetID()
+ tagID = tagObj.GetID()
+ if curObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
+ atkRet = PlayerAttack(curObj, tagObj, tick)
+ else:
+ atkRet = NPCAttack(curObj, tagObj, tick)
+
+ turnBattleType = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnBattleType)
+ curObj.SetDict(ChConfig.Def_Obj_Dict_TurnBattleType, 0) # 无论攻击成功与否都重置战斗类型
+
+ if not atkRet:
+ return
+
+ if turnBattleType == ChConfig.TurnBattleType_Combo:
+ comboNum = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnComboNum) + 1
+ curObj.SetDict(ChConfig.Def_Obj_Dict_TurnComboNum, comboNum)
+ GameWorld.DebugLog(" 连击: comboID=%s,comboNum=%s" % (curID, comboNum))
+ elif turnBattleType == ChConfig.TurnBattleType_AtkBack:
+ atkBackNum = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnAtkBackNum) + 1
+ curObj.SetDict(ChConfig.Def_Obj_Dict_TurnAtkBackNum, atkBackNum)
+ GameWorld.DebugLog(" 反击: atkBackID=%s,atkBackNum=%s" % (curID, atkBackNum))
+
+ GameWorld.DebugLog(" curID-HP=(%s-%s),tagID-HP=(%s-%s)" % (curID, GameObj.GetHP(curObj), tagID, GameObj.GetHP(tagObj)))
+
+ # 反击,反击可打断连击,所以优先判断
+ if CanAtkBack(curObj, tagObj):
+ DoAttack(tagObj, curObj, tick)
+ return
+
+ # 连击
+ if CanCombo(curObj, tagObj):
+ DoAttack(curObj, tagObj, tick)
+
+ return
+
+def CanAtkBack(atkObj, defObj):
+ ## 可否反击
+
+ defAtkBackRate = GameObj.GetAtkBackRate(defObj) # 防方反击率
+ atkBackNum = defObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnAtkBackNum) # 已反击次数
+ if atkBackNum > 10:
+ # 内置最高反击数防范
+ return False
+ if atkBackNum > 0:
+ validPerList = IpyGameDataPY.GetFuncEvalCfg("TurnFight", 4)
+ vaildPer = validPerList[atkBackNum - 1] if len(validPerList) >= atkBackNum else 0
+ defAtkBackRate = int(defAtkBackRate * vaildPer / 100.0)
+
+ atkAtkBackDefRate = GameObj.GetAtkBackDefRate(atkObj) # 攻方抵抗反击率
+ atkBackRate = max(0, defAtkBackRate - atkAtkBackDefRate)
+ if atkBackRate <= 0 or not GameWorld.CanHappen(atkBackRate):
+ GameWorld.DebugLog(" 无法反击: defID=%s,atkBackNum=%s,atkBackRate=%s=(defAtkBackRate=%s - atkAtkBackDefRate=%s)"
+ % (defObj.GetID(), atkBackNum, atkBackRate, defAtkBackRate, atkAtkBackDefRate))
+ return False
+ GameWorld.DebugLog(" 可以反击: defID=%s,atkBackNum=%s,atkBackRate=%s=(defAtkBackRate=%s - atkAtkBackDefRate=%s)"
+ % (defObj.GetID(), atkBackNum, atkBackRate, defAtkBackRate, atkAtkBackDefRate))
+ defObj.SetDict(ChConfig.Def_Obj_Dict_TurnBattleType, ChConfig.TurnBattleType_AtkBack)
+ return True
+
+def CanCombo(atkObj, defObj):
+ ## 可否连击
+
+ atkComboRate = GameObj.GetComboRate(atkObj) # 攻方连击率
+ comboNum = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnComboNum) # 已连击次数
+ if comboNum > 10:
+ # 内置最高连击数防范
+ return False
+ if comboNum > 0:
+ validPerList = IpyGameDataPY.GetFuncEvalCfg("TurnFight", 3)
+ vaildPer = validPerList[comboNum - 1] if len(validPerList) >= comboNum else 0
+ atkComboRate = int(atkComboRate * vaildPer / 100.0)
+
+ defComboReduce = GameObj.GetComboDefRate(defObj) # 防方抵抗连击率
+ comboRate = max(0, atkComboRate - defComboReduce)
+ if comboRate <= 0 or not GameWorld.CanHappen(comboRate):
+ GameWorld.DebugLog(" 无法连击: atkID=%s,comboNum=%s,comboRate=%s=(atkComboRate=%s - defComboReduce=%s)"
+ % (atkObj.GetID(), comboNum, comboRate, atkComboRate, defComboReduce))
+ return False
+ GameWorld.DebugLog(" 可以连击: atkID=%s,comboNum=%s,comboRate=%s=(atkComboRate=%s - defComboReduce=%s)"
+ % (atkObj.GetID(), comboNum, comboRate, atkComboRate, defComboReduce))
+ atkObj.SetDict(ChConfig.Def_Obj_Dict_TurnBattleType, ChConfig.TurnBattleType_Combo)
+ return True
+
def NPCAttack(curObj, tagObj, tick):
## NPC攻击
if not curObj:
return
tagDist = 0
+ atkRet = AICommon.DoAutoUseSkill(curObj, tagObj, tagDist, tick)
#---优先释放技能---
- if not AICommon.DoAutoUseSkill(curObj, tagObj, tagDist, tick):
+ if not atkRet:
#普通攻击
- isOK = BaseAttack.Attack(curObj, tagObj, None, tick)
- GameWorld.DebugLog(" NPC普通攻击: curID=%s,tagID=%s,isOK=%s" % (curObj.GetID(), tagObj.GetID(), isOK))
- return
+ atkRet = BaseAttack.Attack(curObj, tagObj, None, tick)
+ if atkRet:
+ GameWorld.DebugLog(" NPC普通攻击: curID=%s,tagID=%s,atkRet=%s" % (curObj.GetID(), tagObj.GetID(), atkRet))
+ else:
+ GameWorld.DebugLog(" NPC攻击失败: curID=%s,tagID=%s,atkRet=%s" % (curObj.GetID(), tagObj.GetID(), atkRet))
+ else:
+ GameWorld.DebugLog(" NPC技能攻击: curID=%s,tagID=%s,atkRet=%s" % (curObj.GetID(), tagObj.GetID(), atkRet))
+ return atkRet
def PlayerAttack(curPlayer, tagObj, tick):
## 玩家攻击, 参考技能使用 #def UseSkillEx(index, clientData, tick):
@@ -246,6 +359,7 @@
#PlayerControl.SetIsNeedProcess(curPlayer, True)
#PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paAttack)
+ useSkillResult = False
skillMgr = curPlayer.GetSkillManager()
for skillID in skillList:
curSkill = skillMgr.FindSkillBySkillID(skillID)
@@ -265,12 +379,13 @@
if not PlayerState.__DoClientUseSkillEx(curPlayer, useSkillData, tick):
GameWorld.DebugLog(" 技能攻击失败%s" % skillID, playerID)
continue
+ useSkillResult = True
GameWorld.DebugLog(" 技能攻击成功%s" % skillID, playerID)
break
curPlayer.ClearUseSkillRec()
- return
+ return useSkillResult
def SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, state, turnNum=0, turnMax=0):
clientPack = ChPyNetSendPack.tagMCTurnFightState()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 4ad6a4e..be5f30c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -74,7 +74,7 @@
Def_BuffValue_Count = 3 # buff记录的value个数
#游戏对象属性--------------------------------------------
-Def_Calc_AllAttrType_MAX = 166
+Def_Calc_AllAttrType_MAX = 171
#基本属性BUFF计算,顺序与 ObjProperty_AttrByIndex 对应,同时也为buff效果ID同步通知策划
TYPE_Calc_AttrList = (
TYPE_Calc_Metal, # 金 1
@@ -254,6 +254,11 @@
TYPE_Calc_FamilyWarHPPer, # 仙盟联赛生命加成
TYPE_Calc_FamilyWarAtkPer, # 仙盟联赛攻击加成
TYPE_Calc_FamilySitExpPer, # 仙盟打坐经验加成 165
+TYPE_Calc_ComboDefRate, # 抗连击概率
+TYPE_Calc_AtkBackRate, # 反击概率
+TYPE_Calc_AtkBackDefRate, # 抗反击概率
+TYPE_Calc_SuckHPPer, # 吸血比率
+TYPE_Calc_SuckHPDefPer, # 抗吸血比率 170
) = range(1, Def_Calc_AllAttrType_MAX)
## 支持大数值属性,超过20E
@@ -3047,8 +3052,18 @@
Def_ShopType_LongSale, #远程贩售
) = range(1, 2+1)
+# 回合攻击战斗类型
+(
+TurnBattleType_Normal, # 普通
+TurnBattleType_Combo, # 连击
+TurnBattleType_AtkBack, # 反击
+) = range(3)
+
#---Obj字典-------
Def_Obj_Dict_TurnFightNum = 'TurnFightNum' # 回合制战斗当前轮次
+Def_Obj_Dict_TurnComboNum = 'TurnComboNum' # 本回合已累计连击次数
+Def_Obj_Dict_TurnAtkBackNum = 'TurnAtkBackNum' # 本回合已累计反击次数
+Def_Obj_Dict_TurnBattleType = 'TurnBattleType' # 本次攻击战斗类型:TurnBattleType_xxx
#---NPC字典-------
#每道龙卷风最终坐标
@@ -4475,6 +4490,11 @@
AttrName_PetAtk = "PetAtk" # 灵宠攻击
AttrName_PetSkillAtkRate = "PetSkillAtkRate" # 灵宠技能
AttrName_PetDamPer = "PetDamPer" # 灵宠伤害增加
+AttrName_ComboDefRate = "ComboDefRate" # 抗连击概率
+AttrName_AtkBackRate = "AtkBackRate" # 反击概率
+AttrName_AtkBackDefRate = "AtkBackDefRate" # 抗反击概率
+AttrName_SuckHPPer = "SuckHPPer" # 吸血比率
+AttrName_SuckHPDefPer = "SuckHPDefPer" # 抗吸血比率
#物品效果(ID或指定类型)对应的属性计算信息 {效果(ID/指定类型):[[属性索引, ...], 是否基础属性,(非)线性]}
#对应 Def_Calc_AllAttrType_MAX
@@ -4663,6 +4683,16 @@
ShareDefine.Def_Effect_FamilyWarHPPer:[[TYPE_Calc_FamilyWarHPPer], False, TYPE_Linear],
ShareDefine.Def_Effect_FamilyWarAtkPer:[[TYPE_Calc_FamilyWarAtkPer], False, TYPE_Linear],
ShareDefine.Def_Effect_FamilySitExpPer:[[TYPE_Calc_FamilySitExpPer], False, TYPE_Linear],
+ ShareDefine.Def_Effect_ComboDefRate:[[TYPE_Calc_ComboDefRate], False, TYPE_Linear],
+ AttrName_ComboDefRate:[[TYPE_Calc_ComboDefRate], False, TYPE_Linear],
+ ShareDefine.Def_Effect_AtkBackRate:[[TYPE_Calc_AtkBackRate], False, TYPE_Linear],
+ AttrName_AtkBackRate:[[TYPE_Calc_AtkBackRate], False, TYPE_Linear],
+ ShareDefine.Def_Effect_AtkBackDefRate:[[TYPE_Calc_AtkBackDefRate], False, TYPE_Linear],
+ AttrName_AtkBackDefRate:[[TYPE_Calc_AtkBackDefRate], False, TYPE_Linear],
+ ShareDefine.Def_Effect_SuckHPPer:[[TYPE_Calc_SuckHPPer], False, TYPE_Linear],
+ AttrName_SuckHPPer:[[TYPE_Calc_SuckHPPer], False, TYPE_Linear],
+ ShareDefine.Def_Effect_SuckHPDefPer:[[TYPE_Calc_SuckHPDefPer], False, TYPE_Linear],
+ AttrName_SuckHPDefPer:[[TYPE_Calc_SuckHPDefPer], False, TYPE_Linear],
#战斗非线性
ShareDefine.Def_Effect_SuperHitPer:[[TYPE_Calc_SuperHit], False, TYPE_NoLinear],
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
index 4d4d88d..78078e5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
@@ -178,3 +178,93 @@
gameObj.SetDict(ChConfig.Def_PlayerKey_BloodShiledHurt, value % ShareDefine.Def_PerPointValue)
gameObj.SetDict(ChConfig.Def_PlayerKey_BloodShiledHurtEx, value / ShareDefine.Def_PerPointValue)
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
+
+
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index f72d89f..bf88d17 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -511,6 +511,16 @@
("DWORD", "NPCID", 1),
("BYTE", "FightPowerLackAtkLimit", 0),
("DWORD", "SuppressFightPower", 0),
+ ("DWORD", "AtkSpeed", 0),
+ ("DWORD", "SuperHitRateReduce", 0),
+ ("DWORD", "FaintRate", 0),
+ ("DWORD", "FaintDefRate", 0),
+ ("DWORD", "ComboRate", 0),
+ ("DWORD", "ComboDefRate", 0),
+ ("DWORD", "AtkBackRate", 0),
+ ("DWORD", "AtkBackDefRate", 0),
+ ("DWORD", "SuckHPPer", 0),
+ ("DWORD", "SuckHPDefPer", 0),
),
"NPCRealmStrengthen":(
@@ -724,6 +734,8 @@
("DWORD", "DataMapID", 1),
("WORD", "LineID", 1),
("DWORD", "NPCID", 0),
+ ("DWORD", "SummerNPCID", 0),
+ ("list", "AwardItemList", 0),
),
"FBHelpBattle":(
@@ -3224,12 +3236,32 @@
def __init__(self):
self.NPCID = 0
self.FightPowerLackAtkLimit = 0
- self.SuppressFightPower = 0
+ self.SuppressFightPower = 0
+ self.AtkSpeed = 0
+ self.SuperHitRateReduce = 0
+ self.FaintRate = 0
+ self.FaintDefRate = 0
+ self.ComboRate = 0
+ self.ComboDefRate = 0
+ self.AtkBackRate = 0
+ self.AtkBackDefRate = 0
+ self.SuckHPPer = 0
+ self.SuckHPDefPer = 0
return
def GetNPCID(self): return self.NPCID # NPCID
def GetFightPowerLackAtkLimit(self): return self.FightPowerLackAtkLimit # 战力不足限制攻击
- def GetSuppressFightPower(self): return self.SuppressFightPower # 推荐/压制战力
+ def GetSuppressFightPower(self): return self.SuppressFightPower # 推荐/压制战力
+ def GetAtkSpeed(self): return self.AtkSpeed # 攻击速度
+ def GetSuperHitRateReduce(self): return self.SuperHitRateReduce # 抗暴击概率
+ def GetFaintRate(self): return self.FaintRate # 击晕概率
+ def GetFaintDefRate(self): return self.FaintDefRate # 抗击晕概率
+ def GetComboRate(self): return self.ComboRate # 连击概率
+ def GetComboDefRate(self): return self.ComboDefRate # 抗连击概率
+ def GetAtkBackRate(self): return self.AtkBackRate # 反击概率
+ def GetAtkBackDefRate(self): return self.AtkBackDefRate # 抗反击概率
+ def GetSuckHPPer(self): return self.SuckHPPer # 吸血比率
+ def GetSuckHPDefPer(self): return self.SuckHPDefPer # 抗吸血比率
# 成长型境界怪物表
class IPY_NPCRealmStrengthen():
@@ -3664,12 +3696,16 @@
def __init__(self):
self.DataMapID = 0
self.LineID = 0
- self.NPCID = 0
+ self.NPCID = 0
+ self.SummerNPCID = 0
+ self.AwardItemList = []
return
def GetDataMapID(self): return self.DataMapID # 数据地图ID
def GetLineID(self): return self.LineID # 功能线路ID
- def GetNPCID(self): return self.NPCID # NPCID
+ def GetNPCID(self): return self.NPCID # NPCID
+ def GetSummerNPCID(self): return self.SummerNPCID # 召唤兽ID
+ def GetAwardItemList(self): return self.AwardItemList # 过关奖励列表,[[物品ID,个数,是否拍品], ...]
# 副本助战表
class IPY_FBHelpBattle():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
index 42d8693..b517a41 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -4048,7 +4048,21 @@
#初始化状态
curNPC.SetSpeed(curNPC.GetOrgSpeed())
curNPC.SetAtkInterval(curNPC.GetBaseAtkInterval())
-
+
+ #扩展属性
+ npcDataEx = GetNPCDataEx(curNPC.GetNPCID())
+ if npcDataEx:
+ GameObj.SetAtkSpeed(curNPC, npcDataEx.GetAtkSpeed())
+ GameObj.SetSuperHitRateReduce(curNPC, npcDataEx.GetSuperHitRateReduce())
+ GameObj.SetFaintRate(curNPC, npcDataEx.GetFaintRate())
+ GameObj.SetFaintDefRate(curNPC, npcDataEx.GetFaintDefRate())
+ GameObj.SetComboRate(curNPC, npcDataEx.GetComboRate())
+ GameObj.SetComboDefRate(curNPC, npcDataEx.GetComboDefRate())
+ GameObj.SetAtkBackRate(curNPC, npcDataEx.GetAtkBackRate())
+ GameObj.SetAtkBackDefRate(curNPC, npcDataEx.GetAtkBackDefRate())
+ GameObj.SetSuckHPPer(curNPC, npcDataEx.GetSuckHPPer())
+ GameObj.SetSuckHPDefPer(curNPC, npcDataEx.GetSuckHPDefPer())
+
# #先清空异常
# if curNPC.GetAbnormalState() != IPY_GameWorld.sctInvalid:
# curNPC.SetAbnormalState(IPY_GameWorld.sctInvalid)
@@ -4090,38 +4104,21 @@
GameObj.SetMaxHP(curNPC, PropDict["MaxHP"])
curNPC.SetHit(PropDict["Hit"])
curNPC.SetMiss(PropDict["Miss"])
+ GameObj.SetAtkSpeed(curNPC, PropDict.get("AtkSpeed", 0))
-# curPlayerPropDict["SkillAtkRate"] = curPlayer.GetSkillAtkRate() # 技能攻击比例加成
-# curPlayerPropDict["SkillAtkRateReduce"] = PlayerControl.GetSkillAtkRateReduce(curPlayer) # 技能攻击比例减少
-# curPlayerPropDict["LuckyHitRate"] = curPlayer.GetLuckyHitRate() # 会心一击几率
-# curPlayerPropDict["LuckyHitVal"] = curPlayer.GetLuckyHitVal() # 会心一击伤害固定值
-# curPlayerPropDict["LuckyHitRateReduce"] = PlayerControl.GetLuckyHitRateReduce(curPlayer) # 会心一击概率抗性
-# curPlayerPropDict["LuckyHitReduce"] = PlayerControl.GetLuckyHitReduce(curPlayer) # 会心一击伤害减免固定值
-# curPlayerPropDict["SuperHitRate"] = curPlayer.GetSuperHitRate() # 暴击概率
-# curPlayerPropDict["SuperHit"] = curPlayer.GetSuperHit() # 暴击伤害固定值
-# curPlayerPropDict["SuperHitRateReduce"] = PlayerControl.GetSuperHitRateReduce(curPlayer) # 暴击概率抗性
-# curPlayerPropDict["SuperHitReduce"] = PlayerControl.GetSuperHitReduce(curPlayer) # 暴击伤害抗性固定值
-# curPlayerPropDict["IceAtk"] = curPlayer.GetIceAtk() # 真实伤害 固定值
-# curPlayerPropDict["IceDef"] = curPlayer.GetIceDef() # 真实伤害防御 固定值
-# curPlayerPropDict["IgnoreDefRate"] = curPlayer.GetIgnoreDefRate() # 无视防御几率
-# curPlayerPropDict["IgnoreDefRateReduce"] = PlayerControl.GetIgnoreDefRateReduce(curPlayer) # 无视防御概率抗性
-# curPlayerPropDict["IgnoreDefReducePer"] = PlayerControl.GetIgnoreDefReducePer(curPlayer) # 无视防御伤害减免
-# curPlayerPropDict["DamagePVE"] = PlayerControl.GetDamagePVE(curPlayer) # 伤害输出计算固定值PVE
-# curPlayerPropDict["DamagePerPVP"] = PlayerControl.GetDamagePerPVP(curPlayer) # 伤害输出计算百分比PVP
-# curPlayerPropDict["DamagePerPVPReduce"] = PlayerControl.GetDamagePerPVPReduce(curPlayer) # 伤害输出计算百分比PVP减少
-# curPlayerPropDict["DamagePVP"] = PlayerControl.GetDamagePVP(curPlayer) # PVP固定伤害
-# curPlayerPropDict["DamagePVPReduce"] = PlayerControl.GetDamagePVPReduce(curPlayer) # PVP固定减伤
-# curPlayerPropDict["FinalHurt"] = PlayerControl.GetFinalHurt(curPlayer) # 最终固定伤害增加
-# curPlayerPropDict["FinalHurtReduce"] = PlayerControl.GetFinalHurtReduce(curPlayer) # 最终固定伤害减少
-# curPlayerPropDict["FinalHurtPer"] = PlayerControl.GetFinalHurtPer(curPlayer) # 最终伤害百分比
-# curPlayerPropDict["FinalHurtReducePer"] = PlayerControl.GetFinalHurtReducePer(curPlayer) # 最终伤害减少百分比
-# curPlayerPropDict["OnlyFinalHurt"] = PlayerControl.GetOnlyFinalHurt(curPlayer) # 额外输出伤害
-# curPlayerPropDict["DamChanceDef"] = PlayerControl.GetDamChanceDef(curPlayer) # 20%的概率抵御伤害比率
-# curPlayerPropDict["NPCHurtAddPer"] = PlayerControl.GetNPCHurtAddPer(curPlayer) # 对怪物伤害加成
-# curPlayerPropDict["AtkBackHPPer"] = PlayerControl.GetAtkBackHPPer(curPlayer) # 攻击回复血量固定值
-# curPlayerPropDict["PVPAtkBackHP"] = PlayerControl.GetPVPAtkBackHP(curPlayer) # PVP攻击回血
-# curPlayerPropDict["FaintRate"] = PlayerControl.GetFaintRate(curPlayer) # 触发击晕
-# curPlayerPropDict["FaintDefRate"] = PlayerControl.GetFaintDefRate(curPlayer) # 击晕抵抗
+ curNPC.SetSuperHitRate(PropDict["SuperHitRate"])
+ GameObj.SetSuperHitRateReduce(curNPC, PropDict["SuperHitRateReduce"])
+ GameObj.SetFaintRate(curNPC, PropDict["FaintRate"])
+ GameObj.SetFaintDefRate(curNPC, PropDict["FaintDefRate"])
+ GameObj.SetComboRate(curNPC, PropDict.get("ComboRate", 0)) # 后面加的属性做兼容
+ GameObj.SetComboDefRate(curNPC, PropDict.get("ComboDefRate", 0))
+ GameObj.SetAtkBackRate(curNPC, PropDict.get("AtkBackRate", 0))
+ GameObj.SetAtkBackDefRate(curNPC, PropDict.get("AtkBackDefRate", 0))
+ GameObj.SetSuckHPPer(curNPC, PropDict.get("SuckHPPer", 0))
+ GameObj.SetSuckHPDefPer(curNPC, PropDict.get("SuckHPDefPer", 0))
+
+ GameWorld.DebugLog("SetPVPNPCPlayerAttr: objID=%s,NPCID=%s,pvpPlayerID=%s,maxHP=%s"
+ % (curNPC.GetID(), curNPC.GetNPCID(), pvpPlayerID, GameObj.GetMaxHP(curNPC)))
return
def SetHelpBattleRobotRebornAttr(self, fightPower):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index eb86a44..790fbfe 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -5362,7 +5362,7 @@
def __SetAtkInterval(self):
curPlayer = self.__Player
- atkSpeed = GetAtkSpeed(curPlayer)
+ atkSpeed = GameObj.GetAtkSpeed(curPlayer)
formula = IpyGameDataPY.GetFuncCfg("AtkInterval")
atkInterval = 0 if not formula else eval(FormulaControl.GetCompileFormula("AtkInterval", formula))
@@ -6834,18 +6834,6 @@
def SetSpeedValue(curPlayer, value):
curPlayer.SetDict(ChConfig.Def_PlayerKey_SpeedValue, value)
SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_SpeedValue, value, True) # 移动速度值暂定广播周围玩家
-
-##获取玩家攻击速度,用于计算攻击间隔
-# @param curPlayer 玩家实例
-# @return 玩家攻击速度
-def GetAtkSpeed(curPlayer):
- return curPlayer.GetBattleValEx1()
-
-##设置玩家攻击速度,用于计算攻击间隔
-# @param curPlayer 玩家实例
-# @return None
-def SetAtkSpeed(curPlayer, value):
- curPlayer.SetBattleValEx1(value, True)
#---攻击回复血量比率----
## 获取玩家攻击回复血量比率
@@ -6935,11 +6923,6 @@
## 抗卓越一击概率
def GetGreatHitRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_GreatHitRateReduce)
def SetGreatHitRateReduce(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_GreatHitRateReduce, value)
-## 抗暴击概率
-def GetSuperHitRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SuperHitRateReduce)
-def SetSuperHitRateReduce(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_SuperHitRateReduce, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_SuperHitRateReduce, value)
## 抗无视防御概率
def GetIgnoreDefRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_IgnoreDefRateReduce)
def SetIgnoreDefRateReduce(curPlayer, value):
@@ -7155,17 +7138,6 @@
def SetReduceBackHPPer(curPlayer, value):
curPlayer.SetDict(ChConfig.Def_PlayerKey_ReduceBackHPPer, value)
-#---触发击晕----
-def GetFaintRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrFaintRate)
-def SetFaintRate(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrFaintRate, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_FaintRate, value)
-#---击晕抵抗----
-def GetFaintDefRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrFaintDefRate)
-def SetFaintDefRate(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrFaintDefRate, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_FaintDefRate, value)
-
#---触发定身----
def GetAtkerFreezed(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrAtkerFreezed)
def SetAtkerFreezed(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrAtkerFreezed, value)
@@ -7174,17 +7146,6 @@
def GetAddAngry(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrAddAngry)
def SetAddAngry(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrAddAngry, value)
-#---连击几率----
-def GetComboRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrComboRate)
-def SetComboRate(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrComboRate, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ComboRate, value)
-#---连击伤害----
-def GetComboDamPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrComboDamPer)
-def SetComboDamPer(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrComboDamPer, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ComboDamPer, value)
-
#---技能攻击比例减少----
def GetSkillAtkRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAtkRateReduce)
def SetSkillAtkRateReduce(curPlayer, value):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTJG.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTJG.py
index 65abdbd..b94a061 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTJG.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTJG.py
@@ -316,7 +316,7 @@
petMinAtk = PlayerControl.GetPetMinAtk(curPlayer) #灵宠最小攻击
petMaxAtk = PlayerControl.GetPetMaxAtk(curPlayer) #灵宠最大攻击
petDamPer = GameObj.GetPetDamPer(curPlayer) #灵宠增加伤害
- atkSpeed = PlayerControl.GetAtkSpeed(curPlayer) # 攻击速度
+ atkSpeed = GameObj.GetAtkSpeed(curPlayer) # 攻击速度
aIgnoreDefRate = curPlayer.GetIgnoreDefRate() # 无视防御比率
aLuckyHit = curPlayer.GetLuckyHitVal() # 会心一击固定值
aLuckyHitRate = curPlayer.GetLuckyHitRate() # 会心一击概率
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
index eaa2a5f..8d9d4b7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
@@ -185,6 +185,7 @@
curPlayerPropDict["MaxHP"] = GameObj.GetMaxHP(curPlayer)
curPlayerPropDict["Hit"] = curPlayer.GetHit()
curPlayerPropDict["Miss"] = curPlayer.GetMiss()
+ curPlayerPropDict["AtkSpeed"] = GameObj.GetAtkSpeed(curPlayer)
curPlayerPropDict["SkillAtkRate"] = curPlayer.GetSkillAtkRate() # 技能攻击比例加成
curPlayerPropDict["SkillAtkRateReduce"] = PlayerControl.GetSkillAtkRateReduce(curPlayer) # 技能攻击比例减少
curPlayerPropDict["LuckyHitRate"] = curPlayer.GetLuckyHitRate() # 会心一击几率
@@ -193,7 +194,7 @@
curPlayerPropDict["LuckyHitReduce"] = PlayerControl.GetLuckyHitReduce(curPlayer) # 会心一击伤害减免固定值
curPlayerPropDict["SuperHitRate"] = curPlayer.GetSuperHitRate() # 暴击概率
curPlayerPropDict["SuperHit"] = curPlayer.GetSuperHit() # 暴击伤害固定值
- curPlayerPropDict["SuperHitRateReduce"] = PlayerControl.GetSuperHitRateReduce(curPlayer) # 暴击概率抗性
+ curPlayerPropDict["SuperHitRateReduce"] = GameObj.GetSuperHitRateReduce(curPlayer) # 暴击概率抗性
curPlayerPropDict["SuperHitReduce"] = PlayerControl.GetSuperHitReduce(curPlayer) # 暴击伤害抗性固定值
curPlayerPropDict["IceAtk"] = curPlayer.GetIceAtk() # 真实伤害 固定值
curPlayerPropDict["IceDef"] = curPlayer.GetIceDef() # 真实伤害防御 固定值
@@ -214,8 +215,14 @@
curPlayerPropDict["NPCHurtAddPer"] = PlayerControl.GetNPCHurtAddPer(curPlayer) # 对怪物伤害加成
curPlayerPropDict["AtkBackHPPer"] = PlayerControl.GetAtkBackHPPer(curPlayer) # 攻击回复血量固定值
curPlayerPropDict["PVPAtkBackHP"] = PlayerControl.GetPVPAtkBackHP(curPlayer) # PVP攻击回血
- curPlayerPropDict["FaintRate"] = PlayerControl.GetFaintRate(curPlayer) # 触发击晕
- curPlayerPropDict["FaintDefRate"] = PlayerControl.GetFaintDefRate(curPlayer) # 击晕抵抗
+ curPlayerPropDict["FaintRate"] = GameObj.GetFaintRate(curPlayer) # 触发击晕
+ curPlayerPropDict["FaintDefRate"] = GameObj.GetFaintDefRate(curPlayer) # 击晕抵抗
+ curPlayerPropDict["ComboRate"] = GameObj.GetComboRate(curPlayer) # 连击
+ curPlayerPropDict["ComboDefRate"] = GameObj.GetComboDefRate(curPlayer) # 抗连击
+ curPlayerPropDict["AtkBackRate"] = GameObj.GetAtkBackRate(curPlayer) # 反击
+ curPlayerPropDict["AtkBackDefRate"] = GameObj.GetAtkBackDefRate(curPlayer) # 抗反击
+ curPlayerPropDict["SuckHPPer"] = GameObj.GetSuckHPPer(curPlayer) # 吸血比率
+ curPlayerPropDict["SuckHPDefPer"] = GameObj.GetSuckHPDefPer(curPlayer) # 抗吸血比率
#推送提醒
curPlayerPropDict[ChConfig.Def_PDict_GeTuiSet] = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GeTuiSet)
@@ -320,7 +327,7 @@
petClassLVList.append({"id":petNPCID, 'lv':classLV})
petInfo["PetLV"] = petClassLVList
- petInfo["AtkSpeed"] = PlayerControl.GetAtkSpeed(curPlayer)
+ petInfo["AtkSpeed"] = GameObj.GetAtkSpeed(curPlayer)
return petInfo
## 坐骑信息
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 1e462d0..acec481 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -694,6 +694,12 @@
Def_Effect_FamilyWarAtkPer = 164 # 仙盟联赛攻击加成
Def_Effect_FamilySitExpPer = 165 # 仙盟打坐经验加成
+Def_Effect_ComboDefRate = 210 # 抗连击概率
+Def_Effect_AtkBackRate = 211 # 反击概率
+Def_Effect_AtkBackDefRate = 212 # 抗反击概率
+Def_Effect_SuckHPPer = 213 # 吸血比率
+Def_Effect_SuckHPDefPer = 214 # 抗吸血比率
+
#增加%d物理伤害值,其中a值为伤害值
Def_Effect_AddAtk = 1005
#增加%d魔法伤害值,其中a值为伤害值
@@ -1060,7 +1066,12 @@
CDBPlayerRefresh_JiYuan, # 机缘币 245
CDBPlayerRefresh_BTGMYuE, # BTGM余额 246
CDBPlayerRefresh_SuccessScore, # 成就积分 247
-) = range(146, 248)
+CDBPlayerRefresh_ComboDefRate, # 抗连击概率 248
+CDBPlayerRefresh_AtkBackRate, # 反击概率 249
+CDBPlayerRefresh_AtkBackDefRate, # 抗反击概率 250
+CDBPlayerRefresh_SuckHPPer, # 吸血比率 251
+CDBPlayerRefresh_SuckHPDefPer, # 抗吸血比率 252
+) = range(146, 253)
TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
index c03979f..61b5aca 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
@@ -45,11 +45,11 @@
#[lambda curObj:curObj.GetMAtkMin(), lambda curObj, value:curObj.SetMAtkMin(value), IPY_PlayerDefine.CDBPlayerRefresh_MAtkMin, 0, 0], # 最小魔攻
#[lambda curObj:curObj.GetMAtkMax(), lambda curObj, value:curObj.SetMAtkMax(value), IPY_PlayerDefine.CDBPlayerRefresh_MAtkMax, 0, 0], # 最大魔攻
[lambda curObj:PlayerControl.GetSpeedNotBuff(curObj), lambda curObj, value:PlayerControl.SetSpeedNotBuff(curObj, value), 0, 0, 0], # 移动速度
- [lambda curObj:PlayerControl.GetAtkSpeed(curObj), lambda curObj, value:PlayerControl.SetAtkSpeed(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_BattleValEx1, 1, 1], # 攻击速度
+ [lambda curObj:GameObj.GetAtkSpeed(curObj), lambda curObj, value:GameObj.SetAtkSpeed(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_BattleValEx1, 1, 1], # 攻击速度
[lambda curObj:curObj.GetSuperHitRate(), lambda curObj, value:curObj.SetSuperHitRate(value), IPY_PlayerDefine.CDBPlayerRefresh_SuperHitRate, 1, 0], # 暴击概率
[lambda curObj:curObj.GetSuperHit(), lambda curObj, value:curObj.SetSuperHit(value), IPY_PlayerDefine.CDBPlayerRefresh_SuperHit, 1, 0], # 暴击伤害固定值
- [lambda curObj:PlayerControl.GetSuperHitRateReduce(curObj), lambda curObj, value:PlayerControl.SetSuperHitRateReduce(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitRateReduce, 1, 0],# 暴击概率抗性
+ [lambda curObj:GameObj.GetSuperHitRateReduce(curObj), lambda curObj, value:GameObj.SetSuperHitRateReduce(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitRateReduce, 1, 0],# 暴击概率抗性
[lambda curObj:PlayerControl.GetSuperHitReduce(curObj), lambda curObj, value:PlayerControl.SetSuperHitReduce(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitReduce, 1, 0], # 暴击伤害抗性固定值
[lambda curObj:curObj.GetGreatHitRate(), lambda curObj, value:curObj.SetGreatHitRate(value), 0, 0, 0], # 卓越一击几率
@@ -94,12 +94,12 @@
[lambda curObj:curObj.GetDamageBackRate(), lambda curObj, value:curObj.SetDamageBackRate(value), IPY_PlayerDefine.CDBPlayerRefresh_DamageBackRate, 1, 0], # 反伤百分比
[lambda curObj:PlayerControl.GetDamChanceDef(curObj), lambda curObj, value:PlayerControl.SetDamChanceDef(curObj, value), ShareDefine.CDBPlayerRefresh_DamChanceDef, 1, 0], # 20%的概率抵御伤害比率
[lambda curObj:PlayerControl.GetShieldMPCostRate(curObj), lambda curObj, value:PlayerControl.SetShieldMPCostRate(curObj, value), 0, 0, 0], # 魔法盾伤害吸收蓝耗比率
- [lambda curObj:PlayerControl.GetFaintRate(curObj), lambda curObj, value:PlayerControl.SetFaintRate(curObj, value), ShareDefine.CDBPlayerRefresh_FaintRate, 1, 0], # 触发击晕
- [lambda curObj:PlayerControl.GetFaintDefRate(curObj), lambda curObj, value:PlayerControl.SetFaintDefRate(curObj, value), ShareDefine.CDBPlayerRefresh_FaintDefRate, 1, 0], # 击晕抵抗
+ [lambda curObj:GameObj.GetFaintRate(curObj), lambda curObj, value:GameObj.SetFaintRate(curObj, value), ShareDefine.CDBPlayerRefresh_FaintRate, 1, 0], # 触发击晕
+ [lambda curObj:GameObj.GetFaintDefRate(curObj), lambda curObj, value:GameObj.SetFaintDefRate(curObj, value), ShareDefine.CDBPlayerRefresh_FaintDefRate, 1, 0], # 击晕抵抗
[lambda curObj:PlayerControl.GetAtkerFreezed(curObj), lambda curObj, value:PlayerControl.SetAtkerFreezed(curObj, value), 0, 0, 0], # 触发定身
[lambda curObj:PlayerControl.GetAddAngry(curObj), lambda curObj, value:PlayerControl.SetAddAngry(curObj, value), 0, 0, 0], # 攻击增加额外仇恨
- [lambda curObj:PlayerControl.GetComboRate(curObj), lambda curObj, value:PlayerControl.SetComboRate(curObj, value), ShareDefine.CDBPlayerRefresh_ComboRate, 0, 0], # 连击几率
- [lambda curObj:PlayerControl.GetComboDamPer(curObj), lambda curObj, value:PlayerControl.SetComboDamPer(curObj, value), ShareDefine.CDBPlayerRefresh_ComboDamPer, 0, 0], # 连击伤害
+ [lambda curObj:GameObj.GetComboRate(curObj), lambda curObj, value:GameObj.SetComboRate(curObj, value), ShareDefine.CDBPlayerRefresh_ComboRate, 0, 0], # 连击几率
+ [lambda curObj:GameObj.GetComboDamPer(curObj), lambda curObj, value:GameObj.SetComboDamPer(curObj, value), ShareDefine.CDBPlayerRefresh_ComboDamPer, 0, 0], # 连击伤害
[lambda curObj:curObj.GetHPRestorePer(), lambda curObj, value:curObj.SetHPRestorePer(value), IPY_PlayerDefine.CDBPlayerRefresh_HPRestorePer, 1, 0], # 自动回复生命
[lambda curObj:curObj.GetKillBackHP(), lambda curObj, value:curObj.SetKillBackHP(value), 0, 0, 0], # 击杀回血
@@ -205,6 +205,11 @@
[lambda curObj:PlayerControl.GetFamilyWarHPPer(curObj), lambda curObj, value:PlayerControl.SetFamilyWarHPPer(curObj, value), 0, 0, 0], # 仙盟联赛生命加成
[lambda curObj:PlayerControl.GetFamilyWarAtkPer(curObj), lambda curObj, value:PlayerControl.SetFamilyWarAtkPer(curObj, value), 0, 0, 0], # 仙盟联赛攻击加成
[lambda curObj:PlayerControl.GetFamilySitExpPer(curObj), lambda curObj, value:PlayerControl.SetFamilySitExpPer(curObj, value), 0, 0, 0], # 仙盟打坐经验加成
+ [lambda curObj:GameObj.GetComboDefRate(curObj), lambda curObj, value:GameObj.SetComboDefRate(curObj, value), ShareDefine.CDBPlayerRefresh_ComboDefRate, 1, 0], # 抗连击概率
+ [lambda curObj:GameObj.GetAtkBackRate(curObj), lambda curObj, value:GameObj.SetAtkBackRate(curObj, value), ShareDefine.CDBPlayerRefresh_AtkBackRate, 1, 0], # 反击概率
+ [lambda curObj:GameObj.GetAtkBackDefRate(curObj), lambda curObj, value:GameObj.SetAtkBackDefRate(curObj, value), ShareDefine.CDBPlayerRefresh_AtkBackDefRate, 1, 0], # 抗反击概率
+ [lambda curObj:GameObj.GetSuckHPPer(curObj), lambda curObj, value:GameObj.SetSuckHPPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuckHPPer, 1, 0], # 吸血比率
+ [lambda curObj:GameObj.GetSuckHPDefPer(curObj), lambda curObj, value:GameObj.SetSuckHPDefPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuckHPDefPer, 1, 0], # 抗吸血比率
]
## 通过索引获得属性值
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4075.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4075.py
index b70950c..2accc52 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4075.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4075.py
@@ -13,7 +13,7 @@
#
#---------------------------------------------------------------------
-import PlayerControl
+import GameObj
import AttackCommon
def CheckCanHappen(attacker, defender, effect, curSkill):
@@ -25,5 +25,5 @@
def GetValue(attacker, defender, effect):
- return max(PlayerControl.GetAtkSpeed(attacker) - 10000, 0)/100*effect.GetEffectValue(0)
+ return max(GameObj.GetAtkSpeed(attacker) - 10000, 0)/100*effect.GetEffectValue(0)
--
Gitblit v1.8.0