From cd1c6abe4db4c87fbd7dcd827d2af58a36496cb0 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 26 四月 2019 22:58:25 +0800
Subject: [PATCH] 6613 子 【开发】【2.0】增加重击字体战斗飘字 / 【后端】【2.0】增加重击属性
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4086.py | 32 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4084.py | 19
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py | 21
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_900.py | 50 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4088.py | 28 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 126 ++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4528.py | 36 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4082.py | 33 +
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 126 ++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py | 73 ++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py | 20
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4526.py | 35 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py | 76 ++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1314.py | 13
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4090.py | 23 +
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 10
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4085.py | 22 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4083.py | 29 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4087.py | 25 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4089.py | 28 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerYinji.py | 61 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4529.py | 37 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4081.py | 27 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 106 +++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py | 56 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4527.py | 32 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4091.py | 28 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 24
31 files changed, 1,067 insertions(+), 138 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index af4daca..c85c0c1 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -20334,6 +20334,84 @@
#------------------------------------------------------
+# A7 19 查询玩家境界阶装备信息结果 #tagSCPlayerEquipCacheResult
+
+class tagSCPlayerEquipCacheResult(Structure):
+ Head = tagHead()
+ PlayerID = 0 #(DWORD PlayerID)//玩家ID
+ EquipClassLV = 0 #(BYTE EquipClassLV)
+ ItemDataSize = 0 #(WORD ItemDataSize)
+ ItemData = "" #(String ItemData)//物品记录
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA7
+ self.Head.SubCmd = 0x19
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.EquipClassLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ItemDataSize,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA7
+ self.Head.SubCmd = 0x19
+ self.PlayerID = 0
+ self.EquipClassLV = 0
+ self.ItemDataSize = 0
+ self.ItemData = ""
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 4
+ length += 1
+ length += 2
+ length += len(self.ItemData)
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteDWORD(data, self.PlayerID)
+ data = CommFunc.WriteBYTE(data, self.EquipClassLV)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize)
+ data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ PlayerID:%d,
+ EquipClassLV:%d,
+ ItemDataSize:%d,
+ ItemData:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.PlayerID,
+ self.EquipClassLV,
+ self.ItemDataSize,
+ self.ItemData
+ )
+ return DumpString
+
+
+m_NAtagSCPlayerEquipCacheResult=tagSCPlayerEquipCacheResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCPlayerEquipCacheResult.Head.Cmd,m_NAtagSCPlayerEquipCacheResult.Head.SubCmd))] = m_NAtagSCPlayerEquipCacheResult
+
+
+#------------------------------------------------------
# A7 07 通知玩家自定义聊天 #tagMCPyTalk
class tagMCPyTalk(Structure):
@@ -28040,6 +28118,54 @@
#------------------------------------------------------
+#B1 08 开始印记流失时间 #tagMCYinjiStartTime
+
+class tagMCYinjiStartTime(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB1
+ self.SubCmd = 0x08
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xB1
+ self.SubCmd = 0x08
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCYinjiStartTime)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''//B1 08 开始印记流失时间 //tagMCYinjiStartTime:
+ Cmd:%s,
+ SubCmd:%s
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd
+ )
+ return DumpString
+
+
+m_NAtagMCYinjiStartTime=tagMCYinjiStartTime()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCYinjiStartTime.Cmd,m_NAtagMCYinjiStartTime.SubCmd))] = m_NAtagMCYinjiStartTime
+
+
+#------------------------------------------------------
# B2 08 获得仙缘币信息 #tagMCAddXianyuanCoinMsg
class tagMCAddXianyuanCoinMsg(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index e5e748e..7d0604f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -544,6 +544,7 @@
Def_Effect_DamagePVE = 141 # PVE固定伤害
Def_Effect_FinalHurtPer = 142 # 最终伤害万分率
Def_Effect_FinalHurtReducePer = 143 # 最终伤害减少万分
+Def_Effect_YinjiTime = 144 # 每X毫秒自动消失一个印记
#增加%d物理伤害值,其中a值为伤害值
Def_Effect_AddAtk = 1005
@@ -854,7 +855,8 @@
CDBPlayerRefresh_SuperHitRateReduce, # 暴击概率抗性 210
CDBPlayerRefresh_LuckyHitReduce, # 会心伤害减免固定值
CDBPlayerRefresh_FinalHurtReducePer, # 最终伤害减少百分比
-) = range(146, 213)
+CDBPlayerRefresh_YinjiTime, # 每X秒减少印记时间,毫秒
+) = range(146, 214)
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 37e2c0f..b6c4339 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
@@ -1293,7 +1293,10 @@
def IsHappenStateByType(happenState, cmpType):
return happenState & cmpType
-def CalcHurtTypeResult(atkObj, defObj, atkObjType, defObjType, happenState):
+
+# 表现形式 致命一击>(重击>暴击)>会心>格挡>境界压制
+# 重击定义:当触发重击时,则增加双倍暴击固定值伤害(重击与暴击互斥,优先判断重击,当重击触发时,暴击不触发)
+def CalcHurtTypeResult(atkObj, defObj, atkObjType, defObjType, happenState, curSkill):
''' 获取伤害类型结果
支持多种伤害类型同时触发, 飘字表现以最终表现伤害类型为主
@return: 最终表现伤害类型, {伤害类型:[是否触发, 伤害计算值, 触发时防守方的伤害减免值], ...}
@@ -1306,12 +1309,14 @@
ChConfig.Def_HurtType_Parry:[False, 0, 0],
ChConfig.Def_HurtType_Zhuxian:[False, 0, 0],
ChConfig.Def_HurtType_DeadlyHit:[False, 0, 0],
+ ChConfig.Def_HurtType_ThumpHit:[False, 0, 0],
}
calcTypeList = []
if atkObjType == IPY_GameWorld.gotPlayer:
calcTypeList += [ChConfig.Def_HurtType_LuckyHit, ChConfig.Def_HurtType_SuperHit,
- ChConfig.Def_HurtType_Zhuxian, ChConfig.Def_HurtType_DeadlyHit]
+ ChConfig.Def_HurtType_Zhuxian, ChConfig.Def_HurtType_DeadlyHit,
+ ChConfig.Def_HurtType_ThumpHit]
if defObjType == IPY_GameWorld.gotPlayer:
calcTypeList += [ChConfig.Def_HurtType_Parry]
# 暂时只计算玩家
@@ -1321,11 +1326,12 @@
# 优先级列表, 互斥列表
priorityList, mutexList = ReadChConfig.GetEvalChConfig("CalcHurtTypeInfo")
happenFunc = {
- ChConfig.Def_HurtType_LuckyHit:lambda aObj, dObj, hState:__HurtTypeHappen_LuckyHit(aObj, dObj, hState),
- ChConfig.Def_HurtType_SuperHit:lambda aObj, dObj, hState:__HurtTypeHappen_SuperHit(aObj, dObj, hState),
- ChConfig.Def_HurtType_Parry:lambda aObj, dObj, hState:__HurtTypeHappen_Parry(aObj, dObj, hState),
- #ChConfig.Def_HurtType_Zhuxian:lambda aObj, dObj, hState:__HurtTypeHappen_Zhuxian(aObj, dObj, hState),
- ChConfig.Def_HurtType_DeadlyHit:lambda aObj, dObj, hState:__HurtTypeHappen_Deadly(aObj, dObj, hState),
+ ChConfig.Def_HurtType_LuckyHit:__HurtTypeHappen_LuckyHit,
+ ChConfig.Def_HurtType_SuperHit:__HurtTypeHappen_SuperHit,
+ ChConfig.Def_HurtType_Parry:__HurtTypeHappen_Parry,
+ #ChConfig.Def_HurtType_Zhuxian:__HurtTypeHappen_Zhuxian,
+ ChConfig.Def_HurtType_DeadlyHit:__HurtTypeHappen_Deadly,
+ ChConfig.Def_HurtType_ThumpHit:__HurtTypeHappen_ThumpHit,
}
hadCheckList = [] # 已经处理过的伤害类型列表
@@ -1342,7 +1348,7 @@
if curMHHappen:
# 只要其中一个已触发的则后面的均为默认不触发
continue
- result = happenFunc[hType](atkObj, defObj, happenState)
+ result = happenFunc[hType](atkObj, defObj, happenState, curSkill)
if result: # 如果触发,更新相关数值
hurtTypeResultDict[hType] = result
curMHHappen = True
@@ -1353,7 +1359,7 @@
continue
if hType not in hadCheckList:
hadCheckList.append(hType)
- result = happenFunc[hType](atkObj, defObj, happenState)
+ result = happenFunc[hType](atkObj, defObj, happenState, curSkill)
if result: # 如果触发,更新相关数值
hurtTypeResultDict[hType] = result
@@ -1364,7 +1370,7 @@
return hurtType, hurtTypeResultDict
-def __HurtTypeHappen_LuckyHit(atkObj, defObj, happenState):
+def __HurtTypeHappen_LuckyHit(atkObj, defObj, happenState, curSkill):
''' 判断伤害类型是否发生 - 会心一击
@return: 是否触发, 触发时伤害计算固定值, 触发时防守方的伤害减免固定值
'''
@@ -1382,7 +1388,7 @@
return True, atkObj.GetLuckyHitVal(), PlayerControl.GetLuckyHitReduce(defObj)
return
-def __HurtTypeHappen_SuperHit(atkObj, defObj, happenState):
+def __HurtTypeHappen_SuperHit(atkObj, defObj, happenState, curSkill):
''' 判断伤害类型是否发生 - 暴击
@return: 是否触发, 触发时伤害计算固定值, 触发时防守方的伤害减免固定值
'''
@@ -1401,7 +1407,7 @@
return True, atkObj.GetSuperHit(), PlayerControl.GetSuperHitReduce(defObj)
return
-def __HurtTypeHappen_Parry(atkObj, defObj, happenState):
+def __HurtTypeHappen_Parry(atkObj, defObj, happenState, curSkill):
''' 判断伤害类型是否发生 - 防守方抵御
@return: 是否触发, 触发时伤害计算值, 触发时防守方的伤害减免值
'''
@@ -1412,7 +1418,7 @@
return True, 0, chanceDefPer
return
-#def __HurtTypeHappen_Zhuxian(atkObj, defObj, happenState):
+#def __HurtTypeHappen_Zhuxian(atkObj, defObj, happenState, curSkill):
# """诛仙一击"""
# rate = PlayerControl.GetZhuXianRate(atkObj)
# if not rate:
@@ -1423,11 +1429,27 @@
# return
# 致命一击
-def __HurtTypeHappen_Deadly(atkObj, defObj, happenState):
+def __HurtTypeHappen_Deadly(atkObj, defObj, happenState, curSkill):
if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, None, ChConfig.TriggerType_IsDealy):
return True, 0, 0
return
+#重击定义:当触发重击时,则增加双倍暴击固定值伤害(重击与暴击互斥,优先判断重击,当重击触发时,暴击不触发)
+def __HurtTypeHappen_ThumpHit(atkObj, defObj, happenState, curSkill):
+
+ if IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_ThumpHit):
+ return True, atkObj.GetSuperHit()*2, PlayerControl.GetSuperHitReduce(defObj)
+
+ thumpHitRate = 0
+ thumpHitRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill,
+ ChConfig.TriggerType_AddThumpHitRate)
+ thumpHitRate += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill,
+ ChConfig.TriggerType_AddThumpHitRate)
+ if thumpHitRate <= 0:
+ return
+ if GameWorld.CanHappen(thumpHitRate):
+ return True, atkObj.GetSuperHit()*2, PlayerControl.GetSuperHitReduce(defObj)
+ return
def ChangeSkillHurtPer(atkObj, defObj, curSkill, skillPer):
@@ -1602,6 +1624,36 @@
PassiveBuffEffMng.OnPassiveSkillTrigger(defObj, atkObj, None, ChConfig.TriggerType_ProDefValue, tick)
return hurtValue - absortValue
+
+# 设置玩家一次主动型攻击中的第一个防御者
+def SetFirstDefender(attacker, defObj, curSkill):
+ if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer:
+ return
+
+ if curSkill and curSkill.GetFuncType() not in [ChConfig.Def_SkillFuncType_FbSkill,
+ ChConfig.Def_SkillFuncType_NormalAttack]:
+ return
+
+ if attacker.GetDictByKey(ChConfig.Def_PlayerKey_FirstDefender):
+ return
+
+ attacker.SetDict(ChConfig.Def_PlayerKey_FirstDefender, defObj.GetID())
+
+ return
+
+# 清除第一目标
+def ClearFirstDefender(attacker):
+ if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer:
+ return
+ attacker.SetDict(ChConfig.Def_PlayerKey_FirstDefender, 0)
+
+ return
+
+def GetFirstDefenderID(attacker):
+ return attacker.GetDictByKey(ChConfig.Def_PlayerKey_FirstDefender)
+
+
+
## 计算伤血值
# @param atkObj 攻击者
# @param defObj 防御者
@@ -1615,6 +1667,9 @@
# @remarks 函数详细说明.
def GetHurtHP(attacker, defObj, curSkill, atkSkillValue, atkSkillPer, tick):
atkObj = ElfChangeAttacker(attacker) # Elf灵为替身攻击,要取玩家的属性
+
+ #设置第一个防御者
+ SetFirstDefender(atkObj, defObj, curSkill)
resultHurtType = HurtType()
atkObjType = attacker.GetGameObjType()
@@ -1749,13 +1804,7 @@
WriteHurtLog(attacker, defObj, curSkill, resultHurtType.LostHP, resultHurtType.HurtType, "最终扣血")
- #攻击触发事件, 该代码应该放在DoAttack函数中处理逻辑比较清晰,也不会破坏GetHurtHP函数
- #因为DoAttack修改点比较多,暂不迁移,相关攻击事件逻辑,就往此函数中添加
AttackEventTrigger(atkObj, defObj, curSkill, resultHurtType, tick)
- #===========================================================================
- # if atkObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- # GameWorld.DebugAnswer(atkObj, "--%s剩余血量 %s"%(defObj.GetID(), defObj.GetHP()))
- #===========================================================================
return resultHurtType
@@ -2008,10 +2057,21 @@
return 0, ChConfig.Def_HurtType_Miss
- hurtType, hurtTypeResultDict = CalcHurtTypeResult(atkObj, defObj, atkObjType, defObjType, happenState)
+ hurtType, hurtTypeResultDict = CalcHurtTypeResult(atkObj, defObj, atkObjType, defObjType, happenState, curSkill)
#GameWorld.DebugLog("GetHurtHP hurtType=%s, hurtTypeResultDict=%s" % (hurtType, hurtTypeResultDict))
isLuckyHit, aLuckyHit, dLuckyHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_LuckyHit] # 幸运一击
- isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_SuperHit] # 暴击
+
+ # 重击和暴击互斥,并且使用同一个参数
+ isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_ThumpHit]
+ if not isSuperHit:
+ isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_SuperHit]
+ else:
+ # 重击加成
+ thumpPer = 0
+ thumpPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddThumpHitPer)
+ thumpPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddThumpHitPer)
+ aSuperHit = aSuperHit*(thumpPer + 10000)/10000
+
dDamChanceDef = hurtTypeResultDict[ChConfig.Def_HurtType_Parry][2] # 抵御, 大于0代表触发抵御效果
isZhuxianHit, aZhuxianHurtPer, dZhuxianReducePer = hurtTypeResultDict[ChConfig.Def_HurtType_Zhuxian] # 诛仙一击
isDeadlyHit = hurtTypeResultDict[ChConfig.Def_HurtType_DeadlyHit][0] # 致命一击
@@ -2424,7 +2484,7 @@
#PVP 攻击回血
atkBackHP += PlayerControl.GetPVPAtkBackHP(atkObj)
# 百分比吸血
- atkBackHPPer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, None, ChConfig.TriggerType_Buff_SuckBloodPer)
+ atkBackHPPer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
atkBackHP += int(hurtValue * atkBackHPPer*1.0 / ChConfig.Def_MaxRateValue)
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 fc48a11..907b37a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
@@ -217,6 +217,7 @@
# 触发型技能根据伤血类型触发被动技能,群攻只触发一次,放在伤血列表被清之前
# 只处理 isEnhanceSkill的情况,对应 OnHurtTypeTriggerSkill
def OnHurtTypeTriggerPassiveSkill(attacker, target, curSkill, tick):
+ AttackCommon.ClearFirstDefender(attacker)
skillHurtLists = [] # 内部触发清除g_skillHurtList
for i in xrange(g_skillHurtList.GetHurtCount()):
@@ -225,6 +226,10 @@
continue
skillHurtLists.append([hurtObj.GetObjID(), hurtObj.GetObjType(), hurtObj.GetAttackType()])
+
+ #只对第一目标造成某伤害类型时触发技能, 需先存储 skillHurtLists
+ OnHurtTypeTriggerSkillFirstObj(attacker, curSkill, tick)
+
for hurtList in skillHurtLists:
defender = GameWorld.GetObj(hurtList[0], hurtList[1])
@@ -1471,6 +1476,8 @@
OnHurtTypeTriggerPassiveSkill(curPlayer, target, curSkill, tick)
return True
+ AttackCommon.ClearFirstDefender(curPlayer)
+
#玩家进入战斗状态
#技能是光环, 不进入战斗状态 ,无对象,不进入战斗状态
if (curSkill == None \
@@ -1543,10 +1550,29 @@
return True
return False
+
+#只对第一目标造成某伤害类型时触发技能
+def OnHurtTypeTriggerSkillFirstObj(attacker, curSkill, tick):
+ if g_skillHurtList.GetHurtCount() == 0:
+ return
+
+ hurtObj = g_skillHurtList.GetHurtAt(0)
+ if not hurtObj:
+ return
+
+ objID, objType, hurtType = hurtObj.GetObjID(), hurtObj.GetObjType(), hurtObj.GetAttackType()
+
+ defender = GameWorld.GetObj(objID, objType)
+ if not defender:
+ return
+ if hurtType == ChConfig.Def_HurtType_SuperHit:
+ PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill, ChConfig.TriggerType_SuperHit, tick)
+ elif hurtType == ChConfig.Def_HurtType_ThumpHit:
+ PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill, ChConfig.TriggerType_ThumpHit, tick)
+ return
# 根据伤血类型触发技能,群攻只触发一次,放在伤血列表被清之前
def OnHurtTypeTriggerSkill(attacker, target, curSkill, tick):
- isSuperHit = False
usePassiveSkillResult = True # 第一次判断不能调用,即代表都不可用无需循环
usePassiveSkillResultOnSuperHit = True # 暴击对象1V1触发,第一次判断不能调用,即代表都不可用无需循环
@@ -1558,27 +1584,26 @@
skillHurtLists.append([hurtObj.GetObjID(), hurtObj.GetObjType(), hurtObj.GetAttackType()])
+ #只对第一目标造成某伤害类型时触发技能, 需先存储 skillHurtLists
+ OnHurtTypeTriggerSkillFirstObj(attacker, curSkill, tick)
+
skillIDSet = set()
for hurtList in skillHurtLists:
- if not isSuperHit and hurtList[2] == ChConfig.Def_HurtType_SuperHit:
- # 暴击只对主目标做处理
- PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, target, curSkill, ChConfig.TriggerType_SuperHit, tick)
- isSuperHit = True
-
- defender = GameWorld.GetObj(hurtList[0], hurtList[1])
+ objID, objType, hurtType = hurtList
+ defender = GameWorld.GetObj(objID, objType)
if not defender:
continue
if GameObj.GetHP(defender) <= 0:
- if hurtList[1] == IPY_GameWorld.gotPlayer:
- if hurtList[2] == ChConfig.Def_HurtType_Zhansha:
+ if objType == IPY_GameWorld.gotPlayer:
+ if hurtType == ChConfig.Def_HurtType_Zhansha:
defender.SetDict(ChConfig.Def_PlayerKey_Zhansha, 1)
- elif hurtList[2] == ChConfig.Def_HurtType_ZhognjiZhansha:
+ elif hurtType == ChConfig.Def_HurtType_ZhognjiZhansha:
defender.SetDict(ChConfig.Def_PlayerKey_Zhansha, 2)
# 濒死状态触发技能, 不能在GetHurtHP内部触发技能,否则会导致原技能的伤血列表异常
PassiveBuffEffMng.OnPassiveSkillTrigger(defender, attacker, None, ChConfig.TriggerType_WillDead, tick)
PassiveBuffEffMng.OnPassiveBuffTrigger(defender, attacker, None, ChConfig.TriggerType_WillDead, tick)
- if hurtList[2] in [ChConfig.Def_HurtType_Zhansha, ChConfig.Def_HurtType_ZhognjiZhansha]:
+ if hurtType in [ChConfig.Def_HurtType_Zhansha, ChConfig.Def_HurtType_ZhognjiZhansha]:
defender.SetDict(ChConfig.Def_PlayerKey_Zhansha, 0)
continue
@@ -1586,20 +1611,20 @@
usePassiveSkillResult = PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill,
ChConfig.TriggerType_HurtObjAddBuff, tick, skillIDSet=skillIDSet)
- if usePassiveSkillResultOnSuperHit and hurtList[2] == ChConfig.Def_HurtType_SuperHit:
+ if usePassiveSkillResultOnSuperHit and hurtType == ChConfig.Def_HurtType_SuperHit:
# 暴击对目标一一触发被动
usePassiveSkillResultOnSuperHit = PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill,
ChConfig.TriggerType_SuperHitOneByOne, tick, skillIDSet=skillIDSet)
- if hurtList[2] == ChConfig.Def_HurtType_SuperHit:
+ if hurtType == ChConfig.Def_HurtType_SuperHit:
#被暴击触发技能
PassiveBuffEffMng.OnPassiveSkillTrigger(defender, attacker, None, ChConfig.TriggerType_BeSuperHit, tick)
PassiveBuffEffMng.OnPetPassiveSkillTrigger(defender, attacker, None, ChConfig.TriggerType_BeSuperHit, tick)
- elif hurtList[2] == ChConfig.Def_HurtType_Miss:
+ elif hurtType == ChConfig.Def_HurtType_Miss:
PassiveBuffEffMng.OnPassiveSkillTrigger(defender, attacker, None, ChConfig.TriggerType_MissSkill, tick)
- elif hurtList[2] == ChConfig.Def_HurtType_LuckyHit:
+ elif hurtType == ChConfig.Def_HurtType_LuckyHit:
PassiveBuffEffMng.OnPetPassiveSkillTrigger(defender, attacker, None, ChConfig.TriggerType_BeLuckyHit, tick)
- if hurtList[2] in ChConfig.Def_RealAttack_Type:
+ if hurtType in ChConfig.Def_RealAttack_Type:
# 被攻击处理层级
PassiveBuffEffMng.OnPassiveBuffTrigger(defender, attacker, None, ChConfig.TriggerType_Buff_BeAttackSubLayer, tick)
@@ -2389,14 +2414,17 @@
isEnhanceSkill=False, skillIDSet=skillIDSet)
DoLogic_AttackResult(attacker, defObj, curSkill, tick)
- skillEffect = SkillCommon.GetSkillEffectByEffectID(curSkill, ChConfig.Def_Skill_Effect_ProcessAttack)
- if skillEffect:
- skillID = skillEffect.GetEffectValue(2)
- if skillID != 0:
- triggerSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
- if not triggerSkill:
- continue
- SkillShell.UsePassiveTriggerSkill(attacker, triggerSkill, defObj, tick)
+ #=======================================================================
+ # #受攻击对象1V1触发技能,本技能效果自身附带,非被动,非触发技能
+ # skillEffect = SkillCommon.GetSkillEffectByEffectID(curSkill, ChConfig.Def_Skill_Effect_ProcessAttack)
+ # if skillEffect:
+ # skillID = skillEffect.GetEffectValue(2)
+ # if skillID != 0:
+ # triggerSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
+ # if not triggerSkill:
+ # continue
+ # SkillShell.UsePassiveTriggerSkill(attacker, triggerSkill, defObj, tick)
+ #=======================================================================
# 一一触发技能需要在最后设置CD
for skillTypeID in skillIDSet:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index f1b5855..de283ea 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -68,7 +68,7 @@
Def_BuffValue_Count = 3 # buff记录的value个数
#游戏对象属性--------------------------------------------
-Def_Calc_AllAttrType_MAX = 130
+Def_Calc_AllAttrType_MAX = 131
#基本属性BUFF计算,顺序与 ObjProperty_AttrByIndex 对应,同时也为buff效果ID同步通知策划
TYPE_Calc_AttrList = (
TYPE_Calc_Metal, # 金 1
@@ -212,6 +212,7 @@
TYPE_Calc_FabaoHurt, # 法宝技能增伤
TYPE_Calc_FabaoHurtPer, # 法宝技能加成
TYPE_Calc_FinalHurtReducePer, # 最终伤害减少百分比
+TYPE_Calc_YinjiTime, # 每X秒自动消失一个印记
) = range(1, Def_Calc_AllAttrType_MAX)
@@ -751,7 +752,8 @@
Def_HurtType_Zhuxian, # 诛仙一击 13
Def_HurtType_ZhognjiZhansha, # 终极斩杀 14
Def_HurtType_DeadlyHit, # 致命一击 15
-) = range(1, 16)
+Def_HurtType_ThumpHit, # 重击 16
+) = range(1, 17)
#Def_HurtType_SuckBlood, # 吸血
(
@@ -778,6 +780,10 @@
Def_HurtType_SuperHit, # 暴击 7
Def_HurtType_LuckyHit, # 会心一击伤害 8
Def_HurtType_RealmSupress, # 境界压制 11
+
+ Def_HurtType_Zhuxian, # 诛仙一击 13
+ Def_HurtType_DeadlyHit, # 致命一击 15
+ Def_HurtType_ThumpHit, # 重击 16
]
#---------------------------------------------------------------------
@@ -1147,6 +1153,7 @@
Def_Skill_HappenState_HitOn = 0x0001 # 必命中
Def_Skill_HappenState_SuperHit = 0x0002 # 必暴击
Def_Skill_HappenState_LuckyHit = 0x0004 # 必会心一击
+Def_Skill_HappenState_ThumpHit = 0x0008 # 必重击
#技能施法目标
@@ -3004,13 +3011,18 @@
Def_PlayerState_LoseBlood3, # 职业3持续掉血状态 15
Def_PlayerState_MissSneerAtk, # 对嘲讽攻击免疫表现为miss 16
Def_PlayerState_BeInAir, # 浮空(做法同眩晕类) 17
-) = range(18)
+ Def_PlayerState_zqdlj, # 紫气东来金灵根技能状态 18
+) = range(19)
#---SetDict 含NPC字典KEY,不存于数据库---
Def_GameObjKey_InheritOwner = "InheritOwner" # 类暴风雪计算时用主人属性
#---SetDict 玩家字典KEY,不存于数据库---
# key的长度不能超过29个字节
+Def_PlayerKey_LostYinjiTime = "LostYinjiTime" # 每X秒自动消失一个印记
+Def_PlayerKey_1314HurtCount = "1314cnt" # 类剑刃风暴技能的1314效果,伤害次数处理
+Def_PlayerKey_FirstDefender = "FDID" # 第一个防守者,只用于比较
+Def_PlayerKey_SelectObjID = "selectID" # 锁定模式选中,不用SetActionObj
Def_PlayerKey_SelectObjID = "selectID" # 锁定模式选中,不用SetActionObj
Def_PlayerKey_SelectObjType = "selectType" # 锁定模式选中
Def_PlayerKey_NormalHurt = "NormalHurt" # 属性普通攻击增伤:普通攻击附加的固定值伤害
@@ -4177,6 +4189,7 @@
ShareDefine.Def_Effect_DamagePVE:[[TYPE_Calc_DamagePVE], False, TYPE_Linear], # PVE固定伤害
ShareDefine.Def_Effect_FinalHurtPer:[[TYPE_Calc_FinalHurtPer], False, TYPE_Linear], # 最终伤害万分率
ShareDefine.Def_Effect_FinalHurtReducePer:[[TYPE_Calc_FinalHurtReducePer], False, TYPE_Linear], # 最终伤害减少万分
+ ShareDefine.Def_Effect_YinjiTime:[[TYPE_Calc_YinjiTime], False, TYPE_Linear], # 每X秒自动消失一个印记
#战斗非线性
ShareDefine.Def_Effect_SuperHitPer:[[TYPE_Calc_SuperHit], False, TYPE_NoLinear],
@@ -4432,7 +4445,10 @@
TriggerType_4074PerValue, # 特殊效果的加成 70
TriggerType_dFinalHurtReducePer, # 防守方的最终伤害减少百分比 71
TriggerType_IsDealy, # 是否触发致命一击 72 暂且理解为和概率是独立,有新概念产生则重定义
-) = range(1, 73)
+TriggerType_AddThumpHitRate, # 提高重击概率 73
+TriggerType_ThumpHit, # 重击时 触发技能74
+TriggerType_AddThumpHitPer, # 重击时 增加重击百分比 75
+) = range(1, 76)
#不可以佩戴翅膀的地图
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index af4daca..c85c0c1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -20334,6 +20334,84 @@
#------------------------------------------------------
+# A7 19 查询玩家境界阶装备信息结果 #tagSCPlayerEquipCacheResult
+
+class tagSCPlayerEquipCacheResult(Structure):
+ Head = tagHead()
+ PlayerID = 0 #(DWORD PlayerID)//玩家ID
+ EquipClassLV = 0 #(BYTE EquipClassLV)
+ ItemDataSize = 0 #(WORD ItemDataSize)
+ ItemData = "" #(String ItemData)//物品记录
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA7
+ self.Head.SubCmd = 0x19
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.EquipClassLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ItemDataSize,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA7
+ self.Head.SubCmd = 0x19
+ self.PlayerID = 0
+ self.EquipClassLV = 0
+ self.ItemDataSize = 0
+ self.ItemData = ""
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 4
+ length += 1
+ length += 2
+ length += len(self.ItemData)
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteDWORD(data, self.PlayerID)
+ data = CommFunc.WriteBYTE(data, self.EquipClassLV)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize)
+ data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ PlayerID:%d,
+ EquipClassLV:%d,
+ ItemDataSize:%d,
+ ItemData:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.PlayerID,
+ self.EquipClassLV,
+ self.ItemDataSize,
+ self.ItemData
+ )
+ return DumpString
+
+
+m_NAtagSCPlayerEquipCacheResult=tagSCPlayerEquipCacheResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCPlayerEquipCacheResult.Head.Cmd,m_NAtagSCPlayerEquipCacheResult.Head.SubCmd))] = m_NAtagSCPlayerEquipCacheResult
+
+
+#------------------------------------------------------
# A7 07 通知玩家自定义聊天 #tagMCPyTalk
class tagMCPyTalk(Structure):
@@ -28040,6 +28118,54 @@
#------------------------------------------------------
+#B1 08 开始印记流失时间 #tagMCYinjiStartTime
+
+class tagMCYinjiStartTime(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB1
+ self.SubCmd = 0x08
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xB1
+ self.SubCmd = 0x08
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCYinjiStartTime)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''//B1 08 开始印记流失时间 //tagMCYinjiStartTime:
+ Cmd:%s,
+ SubCmd:%s
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd
+ )
+ return DumpString
+
+
+m_NAtagMCYinjiStartTime=tagMCYinjiStartTime()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCYinjiStartTime.Cmd,m_NAtagMCYinjiStartTime.SubCmd))] = m_NAtagMCYinjiStartTime
+
+
+#------------------------------------------------------
# B2 08 获得仙缘币信息 #tagMCAddXianyuanCoinMsg
class tagMCAddXianyuanCoinMsg(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py
index 6638a45..52791c5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py
@@ -1414,15 +1414,17 @@
def DoType_Add_Player_Xp(curPlayer, curMission, curActionNode):
#增加玩家相关值<Add_Player_XP value="玩家xp值"/>
- xpValue = curActionNode.GetAttribute("value")
-
- if xpValue != "":
- #设置玩家xp值
- openLV, addXPValue, maxXPValue = ReadChConfig.GetEvalChConfig('PlayerXP')
- curXp = min(int(xpValue), maxXPValue)
- curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, curXp)
- curPlayer.SetXP(curXp)
-
+ #===========================================================================
+ # xpValue = curActionNode.GetAttribute("value")
+ #
+ # if xpValue != "":
+ # #设置玩家xp值
+ # openLV, addXPValue, maxXPValue = ReadChConfig.GetEvalChConfig('PlayerXP')
+ # curXp = min(int(xpValue), maxXPValue)
+ # curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, curXp)
+ # curPlayer.SetXP(curXp)
+ #
+ #===========================================================================
return
#---------------------------------------------------------------------
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 edf4546..5f798dc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -3936,7 +3936,7 @@
maxLV = IpyGameDataPY.GetFuncCfg("PlayerMaxLV", 1)
curPlayer.BeginRefreshState()
- befXP = curPlayer.GetXP()
+ #befXP = curPlayer.GetXP()
befLV = curPlayer.GetLV()
befFreePoint = curPlayer.GetFreePoint()
befBaseSTR = curPlayer.GetBaseSTR()
@@ -5010,7 +5010,7 @@
ChConfig.TYPE_Calc_AttrPetExpRate:GameWorld.GetGameWorld().GetExpRate(),
ChConfig.TYPE_Calc_HitSucessRate:ChConfig.Def_MaxRateValue,
ChConfig.TYPE_Calc_CurePer:ChConfig.Def_MaxRateValue,
-
+ ChConfig.TYPE_Calc_YinjiTime:IpyGameDataPY.GetFuncCfg('Yinji', 1), # 每X秒自动消失一个印记
}
for i in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
@@ -6668,6 +6668,12 @@
def GetFabaoHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FabaoHurtPer)
def SetFabaoHurtPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FabaoHurtPer, value)
+# 每X秒自动消失一个印记, 毫秒记录
+def GetLostYinjiTime(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LostYinjiTime)
+def SetLostYinjiTime(curPlayer, value):
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_LostYinjiTime, value)
+ curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_YinjiTime, value, False)
+
## 计算功能背包物品属性
# @param curPlayer 当前玩家
# @param packType 背包类型
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
index 81a9ade..eab101b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -56,6 +56,7 @@
import PlayerFlashSale
import PlayerWing
import ChEquip
+import PlayerYinji
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -840,31 +841,34 @@
# @return None
# @remarks 玩家自动回复XP值
def ProcessAddXP(curPlayer, tick):
- #开放等级增加多少XP值, 最大XP值
- openLV, addXPValue, maxXPValue = ReadChConfig.GetEvalChConfig('PlayerXP')
- #还没到开放等级
- if openLV > curPlayer.GetLV():
- return
- lastTick = curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_AddXPTick)
- if not CommonCheckTick(curPlayer, tick, ChConfig.TYPE_Player_Tick_AddXPTick):
- #首次登陆,将当前的XP值记录到字典中
- if lastTick <= 0:
- curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, curPlayer.GetXP())
- return
-
- #从字典中获取当前的XP值
- curXPValue = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RecordXPValue)
- #当前XP值已经是最大值了,不做处理
- if curXPValue == maxXPValue:
- return
- xpRestorePer = PlayerControl.GetXPRestorePer(curPlayer)
- addXPValue = int(addXPValue * xpRestorePer/float(ChConfig.Def_MaxRateValue))
- nextXPValue = min(curXPValue + addXPValue, maxXPValue)
- curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, nextXPValue)
- #已经达到最大的XP值了,通知客户端
- if nextXPValue == maxXPValue:
- #这里进行设置的时候,将会通知客户端
- curPlayer.SetXP(nextXPValue)
+ return
+ #===========================================================================
+ # #开放等级增加多少XP值, 最大XP值
+ # openLV, addXPValue, maxXPValue = ReadChConfig.GetEvalChConfig('PlayerXP')
+ # #还没到开放等级
+ # if openLV > curPlayer.GetLV():
+ # return
+ # lastTick = curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_AddXPTick)
+ # if not CommonCheckTick(curPlayer, tick, ChConfig.TYPE_Player_Tick_AddXPTick):
+ # #首次登陆,将当前的XP值记录到字典中
+ # if lastTick <= 0:
+ # curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, curPlayer.GetXP())
+ # return
+ #
+ # #从字典中获取当前的XP值
+ # curXPValue = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RecordXPValue)
+ # #当前XP值已经是最大值了,不做处理
+ # if curXPValue == maxXPValue:
+ # return
+ # xpRestorePer = PlayerControl.GetXPRestorePer(curPlayer)
+ # addXPValue = int(addXPValue * xpRestorePer/float(ChConfig.Def_MaxRateValue))
+ # nextXPValue = min(curXPValue + addXPValue, maxXPValue)
+ # curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, nextXPValue)
+ # #已经达到最大的XP值了,通知客户端
+ # if nextXPValue == maxXPValue:
+ # #这里进行设置的时候,将会通知客户端
+ # curPlayer.SetXP(nextXPValue)
+ #===========================================================================
#---------------------------------------------------------------------
@@ -1235,6 +1239,8 @@
#回血回魔状态处理
ProcessHPMPState(curPlayer, tick)
+ PlayerYinji.ProcessPlayerYinji(curPlayer, tick)
+
#刷新组队状态
#ProcessTeamState(curPlayer, tick)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerYinji.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerYinji.py
new file mode 100644
index 0000000..a6cc28f
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerYinji.py
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 印记为玩家选择战士木灵根后会获得的能量点,SP技能会附带加成或者消耗印记点
+#
+# @author: Alee
+# @date 2019-4-26 下午03:05:54
+# @version 1.0
+#
+# @note: 用XP接口记录
+#
+#---------------------------------------------------------------------
+
+import IpyGameDataPY
+import PlayerControl
+import GameWorld
+import ChPyNetSendPack
+import NetPackCommon
+
+Def_LastYinji_Tick = "lastyjtick" # 上一次印记消失时间
+
+#CDBPlayerRefresh_XP
+def AddYinji(curPlayer, cnt):
+ beforeCnt = GetYinjiCnt(curPlayer)
+ #上限 X个
+ curPlayer.SetXP(min(beforeCnt + cnt, IpyGameDataPY.GetFuncCfg('Yinji', 2)))
+
+ if beforeCnt == 0:
+ # 第一次加印记需重计时
+ StartYinjiTick(curPlayer)
+
+ return
+
+def SubYinji(curPlayer, cnt):
+ curPlayer.SetXP(max(curPlayer.GetXP() - cnt, 0))
+ return
+
+def GetYinjiCnt(curPlayer):
+ return curPlayer.GetXP()
+
+
+# 每X秒自动减少1个印记
+def ProcessPlayerYinji(curPlayer, tick):
+ if GetYinjiCnt(curPlayer) == 0:
+ return
+
+ if tick - curPlayer.GetDictByKey(Def_LastYinji_Tick) < PlayerControl.GetLostYinjiTime(curPlayer):
+ return
+
+ StartYinjiTick(curPlayer)
+
+ SubYinji(curPlayer, 1)
+
+
+def StartYinjiTick(curPlayer):
+ curPlayer.SetDict(Def_LastYinji_Tick, GameWorld.GetGameWorld().GetTick())
+ pack = ChPyNetSendPack.tagMCYinjiStartTime()
+
+ NetPackCommon.SendFakePack(curPlayer, pack)
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index e5e748e..7d0604f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -544,6 +544,7 @@
Def_Effect_DamagePVE = 141 # PVE固定伤害
Def_Effect_FinalHurtPer = 142 # 最终伤害万分率
Def_Effect_FinalHurtReducePer = 143 # 最终伤害减少万分
+Def_Effect_YinjiTime = 144 # 每X毫秒自动消失一个印记
#增加%d物理伤害值,其中a值为伤害值
Def_Effect_AddAtk = 1005
@@ -854,7 +855,8 @@
CDBPlayerRefresh_SuperHitRateReduce, # 暴击概率抗性 210
CDBPlayerRefresh_LuckyHitReduce, # 会心伤害减免固定值
CDBPlayerRefresh_FinalHurtReducePer, # 最终伤害减少百分比
-) = range(146, 213)
+CDBPlayerRefresh_YinjiTime, # 每X秒减少印记时间,毫秒
+) = range(146, 214)
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 79e2178..e814874 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
@@ -169,6 +169,7 @@
[lambda curObj:PlayerControl.GetFabaoHurt(curObj), lambda curObj, value:PlayerControl.SetFabaoHurt(curObj, value), ShareDefine.CDBPlayerRefresh_FabaoHurt, 1, 0], # 属性法宝技能增伤
[lambda curObj:PlayerControl.GetFabaoHurtPer(curObj), lambda curObj, value:PlayerControl.SetFabaoHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_FabaoHurtPer, 1, 0], # 属性法宝技能加成
[lambda curObj:PlayerControl.GetFinalHurtReducePer(curObj), lambda curObj, value:PlayerControl.SetFinalHurtReducePer(curObj, value), ShareDefine.CDBPlayerRefresh_FinalHurtReducePer, 1, 0], # 最终伤害减少百分比
+ [lambda curObj:PlayerControl.GetLostYinjiTime(curObj), lambda curObj, value:PlayerControl.SetLostYinjiTime(curObj, value), ShareDefine.CDBPlayerRefresh_YinjiTime, 1, 0], # 每X秒自动消失一个印记 毫秒
]
## 通过索引获得属性值
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1314.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1314.py
index 33d1369..414b0c1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1314.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1314.py
@@ -72,13 +72,20 @@
#攻击次数处理,配置为0的说明是以持续时间为主
# SwordStormAttack 可能因被动导致自己死亡,所以不能在攻击后处理
curBuff.SetValue(max(curBuff.GetValue() - 1, 0))
-
BaseAttack.SwordStormAttack(tagObj, srcPosX, srcPosY, curSkill, skillPer,
skillEnhance, skillMatrix, tick)
-
-
+ if GameObj.GetHP(tagObj) > 0:
+ if tagObj.GetDictByKey(ChConfig.Def_PlayerKey_1314HurtCount):
+ # 需要时间配合,不然会导致伤害还没计算完毕 buff提前消失了
+ curBuff.SetValue(curBuff.GetValue() + 1)
+ tagObj.SetDict(ChConfig.Def_PlayerKey_1314HurtCount, 0)
+
+ if curBuff.GetValue() == 0:
+ # 让下一次循环取消buff,客户端退出旋转
+ curBuff.SetRemainTime(1)
+
#buffvalue第一个值为攻击次数, 第二个值为被动增强
def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_900.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_900.py
new file mode 100644
index 0000000..6ab1447
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_900.py
@@ -0,0 +1,50 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 根据印记增加属性值-线性
+#
+# @author: Alee
+# @date 2019-4-26 下午07:29:19
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+#导入
+import PlayerYinji
+import ChConfig
+#---------------------------------------------------------------------
+
+## buff线性增加属性
+# @param defender Buff承受者
+# @param curEffect 技能效果
+# @param calcDict 技能效果累加总表
+# @return None
+def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
+ attrType = curEffect.GetEffectValue(0)
+
+ calcDict[attrType] = calcDict.get(attrType, 0) + curEffect.GetEffectValue(1)*min(curBuff.GetValue(), curEffect.GetEffectValue(2))
+ return
+
+
+## 返回buff类型,线性与否
+# @param
+# @return None
+# @remarks 函数详细说明.
+def GetCalcType():
+ return ChConfig.TYPE_Linear
+
+
+##计算增强值
+# @param attacker 攻击者实例
+# @param curSkill 技能实例
+# @param curEffect 当前技能效果1
+# @return 总值
+def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
+
+ return [PlayerYinji.GetYinjiCnt(defender)]
+
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4526.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4526.py
new file mode 100644
index 0000000..5f9aff7
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4526.py
@@ -0,0 +1,35 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: buff中提高重击概率 ,可附加条件是否针对第一目标
+#
+# @author: Alee
+# @date 2019-4-25 下午02:49:27
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import AttackCommon
+
+def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
+ useSkill = skillkwargs.get("useSkill", None)
+ # 主动型技能才有效
+ if passiveEffect.GetEffectValue(2) and useSkill:
+ if useSkill.GetFuncType() not in [ChConfig.Def_SkillFuncType_FbSkill,
+ ChConfig.Def_SkillFuncType_NormalAttack]:
+ return False
+
+ if passiveEffect.GetEffectValue(1):
+ if AttackCommon.GetFirstDefenderID(attacker) != defender.GetID():
+ return False
+ return True
+
+
+def GetValue(attacker, defender, passiveEffect):
+ return passiveEffect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4527.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4527.py
new file mode 100644
index 0000000..baeedc5
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4527.py
@@ -0,0 +1,32 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: buff中提高普通攻击的重击概率
+#
+# @author: Alee
+# @date 2019-4-25 下午03:52:01
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import SkillCommon
+import BuffSkill
+
+def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
+ useSkill = skillkwargs.get("useSkill", None)
+ if not useSkill:
+ # 普攻:无技能,技能型普攻
+ return True
+ if useSkill.GetFuncType() != ChConfig.Def_SkillFuncType_NormalAttack:
+ return False
+ return True
+
+
+def GetValue(attacker, defender, passiveEffect):
+ return passiveEffect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4528.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4528.py
new file mode 100644
index 0000000..1f7a3ec
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4528.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: buff中增加重击伤害加成(重击下) ,可附加条件是否针对第一目标
+#
+# @author: Alee
+# @date 2019-4-25 下午02:49:27
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import AttackCommon
+
+def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
+ useSkill = skillkwargs.get("useSkill", None)
+ # 主动型技能才有效
+ if passiveEffect.GetEffectValue(2) and useSkill:
+ if useSkill.GetFuncType() not in [ChConfig.Def_SkillFuncType_FbSkill,
+ ChConfig.Def_SkillFuncType_NormalAttack]:
+ return False
+
+ if passiveEffect.GetEffectValue(1):
+ # 只针对第一目标
+ if AttackCommon.GetFirstDefenderID(attacker) != defender.GetID():
+ return False
+ return True
+
+
+def GetValue(attacker, defender, passiveEffect):
+ return passiveEffect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4529.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4529.py
new file mode 100644
index 0000000..4dd58f4
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4529.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: buff中普通攻击回血百分比 是否针对第一目标
+#
+# @author: Alee
+# @date 2019-4-26 下午02:25:50
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import AttackCommon
+
+def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
+ useSkill = skillkwargs.get("useSkill", None)
+ if not useSkill:
+ return
+
+
+ if useSkill.GetFuncType() != ChConfig.Def_SkillFuncType_NormalAttack:
+ return
+
+ if passiveEffect.GetEffectValue(1):
+ # 只针对第一目标
+ if AttackCommon.GetFirstDefenderID(attacker) != defender.GetID():
+ return False
+ return True
+
+
+def GetValue(attacker, defender, passiveEffect):
+ return passiveEffect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4081.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4081.py
new file mode 100644
index 0000000..d32845b
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4081.py
@@ -0,0 +1,27 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 提高重击概率
+#
+# @author: Alee
+# @date 2019-4-24 下午03:46:50
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+import AttackCommon
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ if effect.GetEffectValue(1):
+ # 只针对第一目标
+ if AttackCommon.GetFirstDefenderID(attacker) != defender.GetID():
+ return False
+ return True
+
+
+def GetValue(attacker, defender, effect):
+ return effect.GetEffectValue(0)
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4082.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4082.py
new file mode 100644
index 0000000..c88d538
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4082.py
@@ -0,0 +1,33 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 对第一目标重击触发技能 --特殊效果转为附加效果触发,且需主效果不使被动技能进入CD才可触发
+#
+# @author: Alee
+# @date 2019-4-25 下午01:57:16
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+import GameWorld
+import SkillShell
+import GameObj
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ if effect.GetEffectValue(1):
+ # 转为附加效果触发,且需主效果不使被动技能进入CD才可触发
+ useSkill = GameWorld.GetGameData().GetSkillBySkillID(effect.GetEffectValue(1))
+ if not useSkill:
+ return False
+ SkillShell.UsePassiveTriggerSkill(attacker, useSkill, defender, GameWorld.GetGameWorld().GetTick(), True)
+
+ return False
+
+ if not GameObj.GetPyPlayerState(attacker, effect.GetEffectValue(1)):
+ #GameWorld.DebugLog("状态触发----%s"%effect.GetEffectValue(1))
+ return False
+
+ return GameWorld.CanHappen(effect.GetEffectValue(0))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4083.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4083.py
new file mode 100644
index 0000000..ae282b5
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4083.py
@@ -0,0 +1,29 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 增加重击伤害加成(重击下)
+#
+# @author: Alee
+# @date 2019-4-25 下午10:14:25
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+
+import AttackCommon
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ if effect.GetEffectValue(1):
+ # 只针对第一目标
+ if AttackCommon.GetFirstDefenderID(attacker) != defender.GetID():
+ return False
+
+ return True
+
+
+def GetValue(attacker, defender, effect):
+ return effect.GetEffectValue(0)
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4084.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4084.py
new file mode 100644
index 0000000..37ed246
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4084.py
@@ -0,0 +1,19 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 类剑刃风暴每次攻击对第一目标重击触发多一次伤害(旋转)
+#
+# @author: Alee
+# @date 2019-4-26 下午12:31:37
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+import ChConfig
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ attacker.SetDict(ChConfig.Def_PlayerKey_1314HurtCount, 1)
+ return False
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4085.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4085.py
new file mode 100644
index 0000000..9737451
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4085.py
@@ -0,0 +1,22 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 使用技能后印记数量
+#
+# @author: Alee
+# @date 2019-4-26 下午05:52:27
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+
+import PlayerYinji
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+
+ PlayerYinji.AddYinji(attacker, effect.GetEffectValue(0))
+ return False
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4086.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4086.py
new file mode 100644
index 0000000..e0e3f95
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4086.py
@@ -0,0 +1,32 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 根据印记来增加攻击(技能)伤害
+#
+# @author: Alee
+# @date 2019-4-26 下午05:58:01
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import AttackCommon
+import PlayerYinji
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ if effect.GetEffectValue(1):
+ # 只针对第一目标
+ if AttackCommon.GetFirstDefenderID(attacker) != defender.GetID():
+ return False
+
+
+ return True if PlayerYinji.GetYinjiCnt(attacker) else False
+
+
+def GetValue(attacker, defender, effect):
+ return float(effect.GetEffectValue(0)*min(PlayerYinji.GetYinjiCnt(attacker), effect.GetEffectValue(1)))/ChConfig.Def_MaxRateValue
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4087.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4087.py
new file mode 100644
index 0000000..09763de
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4087.py
@@ -0,0 +1,25 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 印记达到X以上才增加技能伤害
+#
+# @author: Alee
+# @date 2019-4-26 下午07:46:07
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+import ChConfig
+import PlayerYinji
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+
+ return True if PlayerYinji.GetYinjiCnt(attacker) >= effect.GetEffectValue(1) else False
+
+
+def GetValue(attacker, defender, effect):
+ return float(effect.GetEffectValue(0))/ChConfig.Def_MaxRateValue
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4088.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4088.py
new file mode 100644
index 0000000..102a2c9
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4088.py
@@ -0,0 +1,28 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 消耗固定印记数量增加技能伤害
+#
+# @author: Alee
+# @date 2019-4-26 下午07:46:07
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+import ChConfig
+import PlayerYinji
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ if PlayerYinji.GetYinjiCnt(attacker) < effect.GetEffectValue(1):
+ return False
+
+ PlayerYinji.SubYinji(attacker, effect.GetEffectValue(1))
+ return True
+
+
+def GetValue(attacker, defender, effect):
+ return float(effect.GetEffectValue(0))/ChConfig.Def_MaxRateValue
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4089.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4089.py
new file mode 100644
index 0000000..732c6b1
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4089.py
@@ -0,0 +1,28 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 消耗XX个印记数量增加技能伤害,并根据印记数加成
+#
+# @author: Alee
+# @date 2019-4-26 下午07:46:07
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+import ChConfig
+import PlayerYinji
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ if not PlayerYinji.GetYinjiCnt(attacker):
+ return False
+
+ PlayerYinji.SubYinji(attacker, min(PlayerYinji.GetYinjiCnt(attacker), effect.GetEffectValue(1)))
+ return True
+
+
+def GetValue(attacker, defender, effect):
+ return float(effect.GetEffectValue(0)*min(PlayerYinji.GetYinjiCnt(attacker), effect.GetEffectValue(1)))/ChConfig.Def_MaxRateValue
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4090.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4090.py
new file mode 100644
index 0000000..8538ca1
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4090.py
@@ -0,0 +1,23 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 攻击后根据指定印记倍数触发技能
+#
+# @author: Alee
+# @date 2019-4-26 下午08:03:44
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+import PlayerYinji
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ cnt = PlayerYinji.GetYinjiCnt(attacker)
+ if cnt == 0:
+ return False
+
+ return True if cnt%effect.GetEffectValue(0) == 0 else False
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4091.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4091.py
new file mode 100644
index 0000000..896627e
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4091.py
@@ -0,0 +1,28 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 使用非攻击类技能后增加印记数, 可增加增益buff数的印记数
+#
+# @author: Alee
+# @date 2019-4-26 下午08:20:09
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+
+import PlayerYinji
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ addCnt = effect.GetEffectValue(0)
+ if effect.GetEffectValue(1):
+ addCnt = min(attacker.GetBuffState().GetBuffCount(), effect.GetEffectValue(0))
+
+ if not addCnt:
+ return False
+
+ PlayerYinji.AddYinji(attacker, addCnt)
+
+ return False
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
index 828226c..145dde6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
@@ -121,7 +121,7 @@
# 刷被动效果和属性
page = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GFPassivePage, 0, ChConfig.Def_PDictType_GFPassive)
if clientData.Page == page:
- GetPassiveEffManager().RegistPassiveEffSet(curPlayer)
+ GetPassiveEffManager().RegistPassiveEffSet(curPlayer, True)
PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
EventShell.EventRespons_PassiveSet(curPlayer)
@@ -157,7 +157,7 @@
NetPackCommon.SendFakePack(curPlayer, sendPack)
# 刷被动效果和属性
- GetPassiveEffManager().RegistPassiveEffSet(curPlayer)
+ GetPassiveEffManager().RegistPassiveEffSet(curPlayer, True)
PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
return
@@ -362,6 +362,17 @@
4078:ChConfig.TriggerType_AttackOver, # 攻击(对敌技能)后被动技能被触发 4
4079:ChConfig.TriggerType_IsDealy, # 是否触发致命一击 72
4080:ChConfig.TriggerType_BounceHPPer, # 反弹伤害百分比值17,
+ 4081:ChConfig.TriggerType_AddThumpHitRate, # 提高重击概率 73
+ 4082:ChConfig.TriggerType_ThumpHit, # 对第一目标重击触发技能
+ 4083:ChConfig.TriggerType_AddThumpHitPer, # 增加重击伤害百分比
+ 4084:ChConfig.TriggerType_ThumpHit, # 对第一目标重击触发技能
+ 4085:ChConfig.TriggerType_AttackOver,
+ 4086:ChConfig.TriggerType_AttackAddSkillPer, # 所有攻击伤害(SkillPer)增加,含普攻,计算时 5
+ 4087:ChConfig.TriggerType_AttackAddSkillPer, # 所有攻击伤害(SkillPer)增加,含普攻,计算时 5
+ 4088:ChConfig.TriggerType_AttackAddSkillPer, # 所有攻击伤害(SkillPer)增加,含普攻,计算时 5
+ 4089:ChConfig.TriggerType_AttackAddSkillPer, # 所有攻击伤害(SkillPer)增加,含普攻,计算时 5
+ 4090:ChConfig.TriggerType_AttackOver, # 攻击(对敌技能)后被动技能被触发 4
+ 4091:ChConfig.TriggerType_SkillOverNoAttack, # 技能释放后 与TriggerType_AttackOver相反19,
}
return tdict.get(effectID, -1)
#===========================================================================
@@ -403,6 +414,10 @@
4523:ChConfig.TriggerType_SuperHitSkillPer, # 暴击时,增加技能伤害 10
4524:ChConfig.TriggerType_SuperHitSubLayer, # 暴击减层 67
4525:ChConfig.TriggerType_SuperHitSkipCD, # 暴击无冷却 68
+ 4526:ChConfig.TriggerType_AddThumpHitRate, # 增加重击概率
+ 4527:ChConfig.TriggerType_AddThumpHitRate, # 增加重击概率
+ 4528:ChConfig.TriggerType_AddThumpHitPer, # 重击时 增加重击百分比 75
+ 4529:ChConfig.TriggerType_Buff_SuckBloodPer, # BUFF类: 百分比吸血, 此处非属性类
803:ChConfig.TriggerType_BloodShield, # 血盾
806:ChConfig.TriggerType_BloodShield, # 血盾
@@ -551,15 +566,21 @@
# 重刷可装备的被动技能
- def RefreshPassiveSkillSet(self):
+ def RefreshPassiveSkillSet(self, isCD=False):
self.AffectPassiveSkillSetDict = {}
skillManager = self.gameObj.GetSkillManager()
skills = FindUsePassiveSkills(self.gameObj)
+
+ tick = GameWorld.GetGameWorld().GetTick()
for skillID in skills:
curSkill = skillManager.FindSkillBySkillID(skillID)
if not curSkill:
continue
+
+ if isCD:
+ # 重切需进入CD
+ SkillCommon.SetSkillRemainTime(curSkill, PlayerControl.GetReduceSkillCDPer(self.gameObj), tick, self.gameObj)
skillTypeID = curSkill.GetSkillTypeID()
connSkillID = SkillShell.GetConnectSkillID(curSkill) # 关联技能ID, 0代表不限技能
@@ -650,7 +671,8 @@
return self.AffectSkillDict
- def GetPassiveSkillsByTriggerType(self, triggerType, connSkillID=0):
+ def GetPassiveSkillsByTriggerType(self, triggerType, connSkill=None):
+ connSkillID = connSkill.GetSkillTypeID() if connSkill else 0
skillList = []
## bug:2018-03-15
## skillList=self.AffectSkillDict.get((triggerType, connSkillID), [])再用extend会导致AffectSkillDict无限增长
@@ -658,6 +680,18 @@
skillList.extend(self.AffectPassiveSkillSetDict.get((triggerType, connSkillID), []))
skillList.extend(self.AffectDogzSkillDict.get((triggerType, connSkillID), []))
skillList.extend(self.AffectSuperEquipSkillDict.get((triggerType, connSkillID), []))
+
+ # 指定特殊类型可触发
+ if connSkill and connSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_FbSkill, ChConfig.Def_SkillFuncType_NormalAttack]:
+ funcType = connSkill.GetFuncType()
+ skillList.extend(self.AffectSkillDict.get((triggerType, funcType), []))
+ skillList.extend(self.AffectPassiveSkillSetDict.get((triggerType, funcType), []))
+ skillList.extend(self.AffectDogzSkillDict.get((triggerType, funcType), []))
+ skillList.extend(self.AffectSuperEquipSkillDict.get((triggerType, funcType), []))
+
+ # 被动再触发被动限制为指定
+ if connSkill and SkillCommon.isPassiveSkill(connSkill):
+ return skillList
if connSkillID != 0 and connSkillID != ChConfig.Def_SkillID_Somersault:
skillList.extend(self.AffectSkillDict.get((triggerType, 0), []))
@@ -713,16 +747,16 @@
return
# 人物需同步注册被动技能
- def RegistPassiveEffSet(self, gameObj):
+ def RegistPassiveEffSet(self, gameObj, isCD=False):
passiveEff = self.GetPassiveEff(gameObj)
if not passiveEff:
# 强制刷新所有被动技能
passiveEff = PassiveEff(gameObj)
- if not passiveEff.RefreshPassiveSkillSet():
+ if not passiveEff.RefreshPassiveSkillSet(isCD):
return
self.AddPassiveEff(gameObj, passiveEff)
else:
- passiveEff.RefreshPassiveSkillSet()
+ passiveEff.RefreshPassiveSkillSet(isCD)
return
@@ -859,7 +893,7 @@
return 0, 0
connSkillID = connSkill.GetSkillTypeID() if connSkill else 0
- skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkillID)
+ skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkill)
if not skills:
return 0, 0
@@ -993,28 +1027,17 @@
if not attacker:
return False
- stopPassiveSkill = False # 被动技能不能再触发被动技能,但可以触发天赋技能
if connSkill:
if not connSkill.GetFuncType():
# 非功能类技能,避免死循环
return False
- if SkillCommon.isPassiveSkill(connSkill):
- #GameWorld.DebugLog("被动技能不能再次触发被动技能")
- #return False
- stopPassiveSkill = True
- if SkillCommon.GetUsingPassiveSkill(attacker) and triggerType != ChConfig.TriggerType_BuffState:
- # 防范被动技能触发的 非被动技能
- #GameWorld.DebugLog("被动技能释放中不能再次触发被动技能---%s"%triggerType)
- #return
- stopPassiveSkill = True
-
passiveEff = GetPassiveEffManager().GetPassiveEff(attacker)
if not passiveEff:
return False
connSkillID = connSkill.GetSkillTypeID() if connSkill else 0
- skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkillID)
+ skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkill)
if not skills:
return False
@@ -1033,10 +1056,6 @@
if not IsValidPassiveSkill(curSkill):
continue
-
- if stopPassiveSkill and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_GiftSkill:
- # 只有天赋才可以再次被触发
- continue
effect = SkillCommon.GetSkillEffectByEffectID(curSkill, effectID)
if not effect:
@@ -1114,7 +1133,7 @@
if not passiveEff:
return 0
connSkillID = connSkill.GetSkillTypeID() if connSkill else 0
- skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkillID)
+ skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkill)
if not skills:
return 0
@@ -1179,7 +1198,7 @@
if not passiveEff:
return []
connSkillID = connSkill.GetSkillTypeID() if connSkill else 0
- skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkillID)
+ skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkill)
if not skills:
return []
@@ -1228,7 +1247,7 @@
if not passiveEff:
return
connSkillID = connSkill.GetSkillTypeID() if connSkill else 0
- skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkillID)
+ skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkill)
if not skills:
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
index d298435..38c0e1d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -2867,19 +2867,6 @@
OperControlManager.SetObjActState(curObj, buffSkill)
-# 非属性技能算属性 特殊处理
-# 法宝SP技能 如1-4级为增加属性,第5级为伤害效果,第6-10级就要包含属性和伤害效果
-def CalcFabaoSPSkillAttr(curPlayer, curPlayerSkill, allAttrList):
- if curPlayerSkill.GetFuncType() != ChConfig.Def_SkillFuncType_FbSPSkill:
- return
-
- value = GetMaxHPAttrValue(curPlayerSkill)
- if value == 0:
- return
-
- PlayerControl.CalcAttrDict_Type(ShareDefine.Def_Effect_MaxHP, value, allAttrList)
- return
-
# 计算属性类技能的属性,同buff层不算战力
def CalcPassiveAttr_Effect(curPlayer, allAttrList):
@@ -2889,7 +2876,6 @@
if curPlayerSkill == None:
continue
- CalcFabaoSPSkillAttr(curPlayer, curPlayerSkill, allAttrList)
if not SkillCommon.isPassiveAttr(curPlayerSkill):
continue
@@ -3469,7 +3455,6 @@
def GetAddBuffValue(attacker, curSkill, defender):
#验证该技能效果1的ID,提取公式
curEffect = curSkill.GetEffect(0)
- effectID = curEffect.GetEffectID()
moduleSuffix = GetBuffModuleSuffix(curEffect)
@@ -3586,7 +3571,7 @@
return
#---------------------------------------------------------------------
-# 获得关联技能
+# 获得关联技能,0 全部 1是主动型技能(法宝,普攻) 其他技能ID
def GetConnectSkillID(curSkill):
return curSkill.GetExAttr1()
@@ -3623,9 +3608,7 @@
def GetUpLVCostItemNum(curSkill):
return curSkill.GetExAttr5()
-# 技能特殊增加属性配置,目前只支持生命,潜力技能专用
-def GetMaxHPAttrValue(curSkill):
- return curSkill.GetMP()
+
##获得当前技能升级消耗的真气值
# @param curSkill 当前技能技能
--
Gitblit v1.8.0