From 7addbe94218179036af49b5845e3635b9b3796cf Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期六, 10 十一月 2018 20:54:02 +0800
Subject: [PATCH] 4359 子 【1.2.0】背包物品排序修改 / 【后端】背包物品排序修改
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py | 16 +++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py | 69 ++++++++++++++++-------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Func_6.py | 46 ++++++++-------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 11 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 10 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py | 9 ++
6 files changed, 104 insertions(+), 57 deletions(-)
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 b776166..b4089f6 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
@@ -1507,7 +1507,7 @@
# 理论伤害一致, 多加点预算伤害避免计算误差
#hurtValue = min(ShareDefine.Def_UpperLimit_DWord, hurtValue+10)
#atkObj.SetDict(ChConfig.Def_PlayerKey_ClientMaxHurtValue, int(hurtValue*1.2))
- hurtValue = atkObj.GetMaxAtk()*atkSkillPer*10 + atkObj.GetSuperHit() # 加入被动计算不准确改成估算
+ hurtValue = atkObj.GetMaxAtk()*atkSkillPer*20 # 加入被动计算不准确改成估算
clientValue, hurtType = SkillShell.GetClientHurtByObj(defObj.GetID(), defObjType)
if clientValue <= hurtValue:
@@ -1531,15 +1531,16 @@
if absorbHurt <= defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldMax):
maxValue = min(absorbHurt + absortValue, defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldMax))
defObj.SetDict(ChConfig.Def_PlayerKey_AbsorbShield, maxValue) # 记录护盾吸收的伤害用于爆炸
-
+
# buff减少伤害百分比
reducePer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
+
# 被攻击被动技能特殊减免 受到单次伤害超过生命上限10%时候,减免50%伤害,CD10秒
defObj.SetDict(ChConfig.Def_PlayerKey_curHurtValue, hurtValue)
reducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
hurtValue = int(hurtValue*(max(ChConfig.Def_MaxRateValue - reducePer, 0))*1.0/ChConfig.Def_MaxRateValue)
-
+
# 斩杀,濒死等情况的处理
if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackKill):
# 斩杀
@@ -1562,7 +1563,6 @@
remainHP = min(dMaxHP, max(0, dHP - hurtValue)) # 剩余血量
remainHP = int(remainHP) #防范
-
if defObjType == IPY_GameWorld.gotPlayer:
GameObj.SetHP(defObj, remainHP, False)
@@ -1895,7 +1895,7 @@
return 0, ChConfig.Def_HurtType_Miss
hurtFormula = hurtDist[hurtFormulaKey]
hurtValue = int(eval(FormulaControl.GetCompileFormula(hurtFormulaKey, hurtFormula)))
-
+
if hurtType == ChConfig.Def_HurtType_Normal and SuppressValueRealmRate > 10000:
# 存在压制
return hurtValue, ChConfig.Def_HurtType_RealmSupress
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Func_6.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Func_6.py
index 9fd1e04..9f4a2d3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Func_6.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Func_6.py
@@ -398,28 +398,30 @@
# @return 返回值无意义
# @remarks 客户端封包响应 //0C 07 客户端发送仓库密码#tagSendWarehousePsw
def SendWarehousePsw(curPlayer, tick):
- #玩家当前状态不是输入密码状态
- if curPlayer.GetWarehouseState() != IPY_GameWorld.wsEnterPsw:
- return
-
- #获得客户端封包
- sendPack = IPY_GameWorld.IPY_SendWarehousePsw()
- curPsw = sendPack.GetPsw()
- oldPsw = curPlayer.GetWarehousePsw()
-
- #这里是调用c++的过滤空格,可以过滤全角空格, python不能
- curPsw = GameWorld.GetGameWorld().GetCharTrim(curPsw)
-
- #密码不正确
- if curPsw != oldPsw:
- curPlayer.Frm_WarehouseMsg(IPY_GameWorld.whmPswError)
- EventShell.DoExitEvent(curPlayer)
-
- PlayerControl.NotifyCode(curPlayer, "GeRen_pan_59781")
- return
-
- #密码正确
- ShowWarehouse(curPlayer)
+ #===========================================================================
+ # #玩家当前状态不是输入密码状态
+ # if curPlayer.GetWarehouseState() != IPY_GameWorld.wsEnterPsw:
+ # return
+ #
+ # #获得客户端封包
+ # sendPack = IPY_GameWorld.IPY_SendWarehousePsw()
+ # curPsw = sendPack.GetPsw()
+ # oldPsw = curPlayer.GetWarehousePsw()
+ #
+ # #这里是调用c++的过滤空格,可以过滤全角空格, python不能
+ # curPsw = GameWorld.GetGameWorld().GetCharTrim(curPsw)
+ #
+ # #密码不正确
+ # if curPsw != oldPsw:
+ # curPlayer.Frm_WarehouseMsg(IPY_GameWorld.whmPswError)
+ # EventShell.DoExitEvent(curPlayer)
+ #
+ # PlayerControl.NotifyCode(curPlayer, "GeRen_pan_59781")
+ # return
+ #
+ # #密码正确
+ # ShowWarehouse(curPlayer)
+ #===========================================================================
return
#---------------------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
index 2e000e9..81ffcec 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -1737,31 +1737,58 @@
def __CmpRolePack(item1, item2):
# 装备评分高 评分0 评分低,外层分列表
- # 颜色-星数 - 装备类型 - ID,内层比较 暂时不做时间判断
-
- if item1.GetItemColor() == item2.GetItemColor():
- if item1.GetItemQuality() == item2.GetItemQuality():
- itemType1 = item1.GetType()
- itemType2 = item2.GetType()
- if itemType1 == itemType2:
+ #===========================================================================
+ # # 颜色-星数 - 装备类型 - ID,内层比较 暂时不做时间判断
+ #
+ # if item1.GetItemColor() == item2.GetItemColor():
+ # if item1.GetItemQuality() == item2.GetItemQuality():
+ # itemType1 = item1.GetType()
+ # itemType2 = item2.GetType()
+ # if itemType1 == itemType2:
+ # return cmp(item1.GetItemTypeID(), item2.GetItemTypeID())
+ # else:
+ # #类型有定义配置顺序
+ # typeList = IpyGameDataPY.GetFuncEvalCfg("PackageSortPriority", 1)
+ # if itemType1 in typeList and itemType2 in typeList:
+ # return cmp(typeList.index(item1.GetType()), typeList.index(item2.GetType()))
+ # elif itemType1 in typeList:
+ # #排在前面
+ # return -1
+ # elif itemType2 in typeList:
+ # return 1
+ # else:
+ # return cmp(itemType1, itemType2)
+ # else:
+ # return cmp(0-item1.GetItemQuality(), 0-item2.GetItemQuality())
+ # else:
+ # return cmp(0-item1.GetItemColor(), 0-item2.GetItemColor())
+ #===========================================================================
+
+ # 装备类型-颜色-星数 - ID,内层比较 暂时不做时间判断
+ itemType1 = item1.GetType()
+ itemType2 = item2.GetType()
+ if itemType1 == itemType2:
+ if item1.GetItemColor() == item2.GetItemColor():
+ if item1.GetItemQuality() == item2.GetItemQuality():
return cmp(item1.GetItemTypeID(), item2.GetItemTypeID())
else:
- #类型有定义配置顺序
- typeList = IpyGameDataPY.GetFuncEvalCfg("PackageSortPriority", 1)
- if itemType1 in typeList and itemType2 in typeList:
- return cmp(typeList.index(item1.GetType()), typeList.index(item2.GetType()))
- elif itemType1 in typeList:
- #排在前面
- return -1
- elif itemType2 in typeList:
- return 1
- else:
- return cmp(itemType1, itemType2)
+ return cmp(0-item1.GetItemQuality(), 0-item2.GetItemQuality())
else:
- return cmp(0-item1.GetItemQuality(), 0-item2.GetItemQuality())
+ return cmp(0-item1.GetItemColor(), 0-item2.GetItemColor())
else:
- return cmp(0-item1.GetItemColor(), 0-item2.GetItemColor())
-
+ #类型有定义配置顺序
+ typeList = IpyGameDataPY.GetFuncEvalCfg("PackageSortPriority", 1)
+ if itemType1 in typeList and itemType2 in typeList:
+ return cmp(typeList.index(item1.GetType()), typeList.index(item2.GetType()))
+ elif itemType1 in typeList:
+ #排在前面
+ return -1
+ elif itemType2 in typeList:
+ return 1
+ else:
+ return cmp(itemType1, itemType2)
+
+
def __ResetItem_AddItemInList(curList, addItem):
#把物品放到列表中, 要判断叠加
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 4ee7cda..2b811f9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -5098,6 +5098,7 @@
index = 0
buffSkillIDList = []
+ passiveEff = PassiveBuffEffMng.GetPassiveEffManager().GetPassiveEff(curPlayer)
while index < buffState.GetBuffCount():
curBuff = buffState.GetBuff(index)
#异常
@@ -5112,10 +5113,16 @@
continue
#BuffSkill.DoBuffDisApper(curPlayer, curBuff, tick)
- buffSkillIDList.append([curBuff.GetSkill().GetSkillID(), curBuff.GetOwnerID(), curBuff.GetOwnerType()])
+ #buffSkillIDList.append([curBuff.GetSkill().GetSkillID(), curBuff.GetOwnerID(), curBuff.GetOwnerType()])
+ buffSkillIDList.append(curBuff.GetSkill().GetSkillID())
+ #GameWorld.DebugLog("死亡清理-----%s"%curBuff.GetSkill().GetSkillID())
+ if passiveEff:
+ passiveEff.DelBuffInfo(curBuff.GetSkill())
+
#删除这个buff
buffState.DeleteBuffByIndex(index)
-
+
+
SkillShell.ClearBuffEffectBySkillIDList(curPlayer, buffState, buffSkillIDList)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py
index a4d4399..36f7e3f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py
@@ -14,20 +14,25 @@
import ChConfig
import GameWorld
import GameObj
-import PlayerControl
-
+import SkillCommon
def CheckCanHappen(attacker, defender, effect, curSkill):
result = GameWorld.CanHappen(effect.GetEffectValue(0))
if result:
GameObj.SetHP(attacker, 1) # 为了避免生命为0时,屏蔽过多逻辑
+ # 提前触发CD, 不然外层无法触发技能的话就不进入CD, 如和平模式
+ if curSkill.GetCoolDownTime():
+ SkillCommon.SetSkillRemainTime(curSkill, 0, GameWorld.GetGameWorld().GetTick(), attacker)
return True
if effect.GetEffectValue(1):
#不死血量1,但不触发技能
if GameWorld.CanHappen(effect.GetEffectValue(1)):
GameObj.SetHP(attacker, 1)
+ # 提前触发CD, 不然外层无法触发技能的话就不进入CD, 如和平模式
+ if curSkill.GetCoolDownTime():
+ SkillCommon.SetSkillRemainTime(curSkill, 0, GameWorld.GetGameWorld().GetTick(), attacker)
return False
return False
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 1fbe500..775ab34 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -2587,7 +2587,7 @@
buffState.DeleteEffectByIndex(i)
-# 通过技能ID列表删除buff对应的效果ID
+# 通过技能ID列表删除buff对应的效果ID, 死亡调用
def ClearBuffEffectBySkillIDList(curObj, buffState, skillIDList):
effectIndexList = []
@@ -2597,11 +2597,17 @@
if curEffectID == 0:
continue
- # [技能ID, 来源对象ID,对象类型]
- if [buffState.GetEffectFromSkillID(i),
- buffState.GetEffectOwnerID(i),
- buffState.GetEffectOwnerType(i)] not in skillIDList:
+ #=======================================================================
+ # # [技能ID, 来源对象ID,对象类型]
+ # if [buffState.GetEffectFromSkillID(i),
+ # buffState.GetEffectOwnerID(i),
+ # buffState.GetEffectOwnerType(i)] not in skillIDList:
+ # continue
+ #=======================================================================
+ # 改成只判断技能ID
+ if buffState.GetEffectFromSkillID(i) not in skillIDList:
continue
+
effectIndexList.append(i)
# 倒序删除
--
Gitblit v1.8.0