From 2cf5365a5e409b38bba122f9bd1b0a6bd217c1c0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 03 七月 2025 17:57:30 +0800
Subject: [PATCH] 16 卡牌服务端(删除无用的GY_Query_Offline_xxx命令)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py |   96 +++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 90 insertions(+), 6 deletions(-)

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 d75bf5e..2ea5c7d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -41,6 +41,7 @@
 import PyGameData
 import PlayerVip
 import ChEquip
+import PlayerHero
 
 import math
 import time
@@ -1346,6 +1347,10 @@
                 if isNeedRecord:
                     itemNoteDict = ItemCommon.GetItemNoteDict(item, curItemCount, packItemCount, GetItemCount(item))
                     ItemCommon.DR_GetItem(curPlayer, packIndex, eventName, itemNoteDict, addDict)
+                    
+                if item.GetType() == ChConfig.Def_ItemType_Hero:
+                    PlayerHero.OnGiveHeroItem(curPlayer, item)
+                    
                 break
                                                 
         #放入东西
@@ -1656,14 +1661,21 @@
     if endIndex == 0:
         endIndex = curPack.GetCount() - 1
     #检查是否能整理
-    for i in range(0, curPack.GetCount()):
-        curItem = curPack.GetAt(i)
-        if curItem.GetIsLocked():
-            #GameWorld.Log("物品有锁, 不允许重整")
-            return
+    #for i in range(0, curPack.GetCount()):
+    #    curItem = curPack.GetAt(i)
+    #    if curItem.GetIsLocked():
+    #        #GameWorld.Log("物品有锁, 不允许重整")
+    #        return
     
     # 整理方式不同区分
-    if packIndex == IPY_GameWorld.rptWarehouse:
+    if packIndex == ShareDefine.rptHero:
+        if tick - curPlayer.GetResetItemTick() <= ChConfig.Def_ItemPackResetInterval:
+            #GameWorld.DebugLog("重整背包时间间隔太短")
+            return
+        curPlayer.SetResetItemTick(tick)
+        ResetHeroPack(curPlayer, curPack, beingIndex, endIndex)
+        
+    elif packIndex == IPY_GameWorld.rptWarehouse:
         #验证间隔
         if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_WareHouseSort) < \
                 ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_WareHouseSort]:
@@ -1968,7 +1980,75 @@
  
     return
 
+def ResetHeroPack(curPlayer, curPack, beingIndex, endIndex):
+    itemList = []
+    for i in range(beingIndex, endIndex + 1):
+        curRoleItem = curPack.GetAt(i)
+        if curRoleItem.IsEmpty():
+            continue
+        curItem = curRoleItem.GetItem() 
+        itemList.append(curItem)
+    itemList.sort(__CmpHeroPack)
+    
+    curPack.WipePack(beingIndex, endIndex)
+    putPlace = beingIndex
+    for item in itemList:
+        curPack.GetAt(putPlace).AssignItem(item, False)
+        putPlace += 1
+        
+    return
 
+def __CmpHeroPack(item1, item2):
+    '''排序规则:上阵武将排前,未上阵武将排后,再各自按照以下规则排序
+    武将等级>突破等级>武将星级>武将品质>武将ID
+    '''
+    
+    posNum1, posNum2 = 0, 0
+    for lpIndex in range(item1.GetUserAttrCount(ShareDefine.Def_IudetHeroLineup)):
+        lineupValue = item1.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
+        lineupID = lineupValue / 10000
+        if lineupID != ShareDefine.Lineup_Main:
+            continue
+        posNum1 = lineupValue % 100
+        break
+        
+    for lpIndex in range(item2.GetUserAttrCount(ShareDefine.Def_IudetHeroLineup)):
+        lineupValue = item2.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
+        lineupID = lineupValue / 10000
+        if lineupID != ShareDefine.Lineup_Main:
+            continue
+        posNum2 = lineupValue % 100
+        break
+    
+    if (posNum1 and posNum2) or (not posNum1 and not posNum2):
+        lv1 = item1.GetUserAttr(ShareDefine.Def_IudetHeroLV)
+        lv2 = item2.GetUserAttr(ShareDefine.Def_IudetHeroLV)
+        if lv1 == lv2:
+            bLV1 = item1.GetUserAttr(ShareDefine.Def_IudetHeroBreakLV)
+            bLV2 = item2.GetUserAttr(ShareDefine.Def_IudetHeroBreakLV)
+            if bLV1 == bLV2:
+                star1 = item1.GetUserAttr(ShareDefine.Def_IudetHeroStar)
+                star2 = item2.GetUserAttr(ShareDefine.Def_IudetHeroStar)
+                if star1 == star2:
+                    heroID1 = item1.GetItemTypeID()
+                    heroID2 = item2.GetItemTypeID()
+                    ipyData1 = IpyGameDataPY.GetIpyGameData("Hero", heroID1)
+                    ipyData2 = IpyGameDataPY.GetIpyGameData("Hero", heroID2)
+                    quality1 = ipyData1.GetQuality() if ipyData1 else 0
+                    quality2 = ipyData2.GetQuality() if ipyData2 else 0
+                    if quality1 == quality2:
+                        return cmp(heroID1, heroID2)
+                    return -cmp(quality1, quality2)
+                return -cmp(star1, star2)
+            return -cmp(bLV1, bLV2)
+        return -cmp(lv1, lv2)
+    elif posNum1:
+        return -1
+    elif posNum2:
+        return 1
+    else:
+        return cmp(item1.GetItemTypeID(), item2.GetItemTypeID())
+    
 #===============================================================================
 #Python 版重整物品
 # def ResetItem(curPlayer, curPackIndex, tick):
@@ -2575,6 +2655,10 @@
         GameWorld.ErrLog("产出物品异常,无法创建物品 = %s" % (itemID))
         return
     
+    # 英雄
+    if curItem.GetType() == ChConfig.Def_ItemType_Hero:
+        return curItem
+    
     # 非装备,无需设置属性
     if not ItemCommon.CheckItemIsEquip(curItem):
         return curItem

--
Gitblit v1.8.0