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