From a515aa2d1043e20dba19ae0124f7777227c12753 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 11 七月 2025 11:17:39 +0800
Subject: [PATCH] 80 【常规】背包-服务端(优化背包格子初始化,屏蔽无用背包;支持绑定货币数量展示的背包物品;背包物品优化叠加上限20亿支持;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py | 50 +++++++++++++---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py | 4 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 69 ++++++++++++-----------
PySysDB/PySysDBPY.h | 8 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 8 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/MapServerConfig.ini | 14 ++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 23 +++----
8 files changed, 106 insertions(+), 72 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 47c8602..907256c 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -285,7 +285,7 @@
//任务表
-struct tagTask
+struct Task
{
WORD _TaskID; //任务ID
BYTE TaskGroup; //任务组别 0-主线
@@ -379,9 +379,9 @@
char Numerical5; //数据5
};
-//等级开启功能 #tagFuncOpenLV
+//等级开启功能
-struct tagFuncOpenLV
+struct FuncOpenLV
{
DWORD _FuncId; //功能标识
DWORD LimitLV; //开启等级
@@ -863,7 +863,7 @@
//玩家等级表
-struct tagPlayerLV
+struct PlayerLV
{
WORD _LV; //玩家等级
DWORD Exp; //升级所需经验
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/MapServerConfig.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/MapServerConfig.ini
index 79707d2..54f95df 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/MapServerConfig.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/MapServerConfig.ini
@@ -10,11 +10,11 @@
;物品rptItem
PackCnt02=100
;垃圾桶(回收站)rptRecycle
-PackCnt03=6
+PackCnt03=0
;拆解物品栏rptBreakItem
PackCnt04=0
;仓库rptWarehouse
-PackCnt05=100
+PackCnt05=0
;称号背包rptTitle
PackCnt06=0
;合成背包rptCompose
@@ -30,7 +30,7 @@
;坐骑背包rptHorse
PackCnt12=0
;万能背包rptAnyWhere
-PackCnt13=8
+PackCnt13=0
;法宝背包rptFabao
PackCnt14=0
;坐骑装备背包rptHorseEquip
@@ -66,12 +66,12 @@
;寻宝背包
PackCnt30=100
;宠物背包
-PackCnt31=50
+PackCnt31=0
;神兽物品背包
-PackCnt32=100
+PackCnt32=0
;神兽装备背包
-PackCnt33=150
+PackCnt33=0
;垃圾分类背包
-PackCnt34=30
+PackCnt34=0
;武将英雄背包
PackCnt35=500
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index df636c6..5c4acdc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -324,6 +324,7 @@
Def_PetBaseEffectList = range(5000, 5007 + 1)
#---------------------------------------------------------------------------
+Def_ItemCount_Max = 2000000000 # 物品最大叠加上限
#写死的物品ID都放这边
Def_ItemID_PetSoul = -1 #宠物满魂
Def_ItemID_PetDoubleExp = -1 #宠物双倍
@@ -470,8 +471,8 @@
#虚拟背包最大格子数 功能配置表对应的key
Def_VPackCnt_Dict = {
- ShareDefine.rptRune:'RunePackageNum',
- ShareDefine.rptGatherSoul:'GatherSoulPackCount',
+ #ShareDefine.rptRune:'RunePackageNum',
+ #ShareDefine.rptGatherSoul:'GatherSoulPackCount',
}
def GetItemPackType(itemData, defaultPack=IPY_GameWorld.rptItem):
@@ -923,12 +924,6 @@
Def_PackCnt_Fashion = 1
#登陆初始武器时装格子数
Def_PackCnt_WeaponCoat = 8
-#初始化回收站
-Def_PackCnt_Recycle = 6
-#初始化临时交换背包格子数
-Def_PackCnt_TempSwap = 1
-#初始化临时存放背包格子数
-Def_PackCnt_TempItem = 10
#玩家脱离战斗状态时间(6秒)
Def_PlayerLeaveBattleTick = 3000
#玩家PK多杀间隔
@@ -1143,11 +1138,11 @@
#玩家登陆需要初始化的背包索引
Def_PlayerLoginInitPackIndexList = [#主角背包
- IPY_GameWorld.rptRecycle,
+ #IPY_GameWorld.rptRecycle,
IPY_GameWorld.rptEquip,
IPY_GameWorld.rptItem,
#IPY_GameWorld.rptFineSoulSlot,
- IPY_GameWorld.rptAnyWhere,
+ #IPY_GameWorld.rptAnyWhere,
IPY_GameWorld.rptIdentify,
#时装背包
#IPY_GameWorld.rptCabinetWeaponCoat,
@@ -1156,10 +1151,10 @@
#IPY_GameWorld.rptHorseEquip,
ShareDefine.rptTempItem,
ShareDefine.rptTreasure,
- ShareDefine.rptPet,
- ShareDefine.rptDogzItem,
- ShareDefine.rptDogzEquip,
- ShareDefine.rptGarbage,
+ #ShareDefine.rptPet,
+ #ShareDefine.rptDogzItem,
+ #ShareDefine.rptDogzEquip,
+ #ShareDefine.rptGarbage,
ShareDefine.rptHero,
]
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 b519ecf..3d0c00b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -1069,7 +1069,7 @@
def DoTransformItem(self, curPlayer, tagItem, event=["", False, {}]):
## 将特殊物品转化为对应数值
itemID = tagItem.GetItemTypeID()
- itemCount = max(tagItem.GetUserAttr(ShareDefine.Def_IudetItemCount), tagItem.GetCount())
+ itemCount = tagItem.GetCount()
eventName, isForceEvent, addDict = event
if isForceEvent:
pass
@@ -2264,6 +2264,40 @@
return
+def CheckGiveBindMoneyTypeItem(curPlayer, checkMoneyType=None):
+ ## 检查给绑定货币的展示物品
+ bindMoneyItemInfo = IpyGameDataPY.GetFuncEvalCfg("PutInItemPack", 2, {})
+
+ needMoneyItemDict = {}
+ for itemIDStr, moneyType in bindMoneyItemInfo.items():
+ if checkMoneyType != None and moneyType != checkMoneyType:
+ continue
+ if PlayerControl.GetMoney(curPlayer, moneyType): # 有货币时才需要
+ needMoneyItemDict[int(itemIDStr)] = moneyType
+
+ if not needMoneyItemDict:
+ #GameWorld.DebugLog("绑定货币显示物品已经都有了")
+ return
+
+ curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+ for i in xrange(curPack.GetCount()):
+ curItem = curPack.GetAt(i)
+ if not curItem or curItem.IsEmpty():
+ continue
+ itemID = curItem.GetItemTypeID()
+ if itemID in needMoneyItemDict:
+ needMoneyItemDict.pop(itemID)
+ if not needMoneyItemDict:
+ break
+
+ # 还有没给的物品补给,后端只负责给物品,不处理个数,前端对该类物品默认绑定货币对应的值来显示个数
+ for itemID, moneyType in needMoneyItemDict.items():
+ if not GivePlayerItem(curPlayer, itemID, 1, False, [IPY_GameWorld.rptItem]):
+ break
+ GameWorld.DebugLog("给绑定货币显示物品: moneyType=%s,itemID=%s" % (moneyType, itemID))
+
+ return
+
def GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, packIndexList=None, event=["", False, {}], setAttrDict=None):
'''给玩家物品
@param isAuctionItem: 是否拍品
@@ -2312,7 +2346,7 @@
#常规物品
isOK = False
- for _ in range(itemCount/65535 + 1):
+ for _ in range(itemCount/ChConfig.Def_ItemCount_Max + 1):
if itemCount <= 0:
break
giveItem = GetOutPutItemObj(itemID, itemCount, isAuctionItem, curPlayer=curPlayer, setAttrDict=setAttrDict)
@@ -2331,7 +2365,7 @@
# @return: 给成功总数,0代表给失败了
giveOKCount = 0
- for _ in range(itemCount/65535 + 1):
+ for _ in range(itemCount/ChConfig.Def_ItemCount_Max + 1):
if giveOKCount >= itemCount:
break
giveItem = GetOutPutItemObj(itemID, itemCount - giveOKCount, isAuctionItem, curPlayer=curPlayer)
@@ -2444,10 +2478,7 @@
# @return None
def SetItemCount(item, cnt, playerID=0, accID=0, playerName=""):
if not item.IsEmpty():
- if cnt > 0 and IsPutinAutoTransformItem(item):
- item.SetUserAttr(ShareDefine.Def_IudetItemCount, min(cnt, ChConfig.Def_UpperLimit_DWord))
- else:
- item.SetCount(min(cnt, 65535))
+ item.SetCount(min(cnt, ChConfig.Def_ItemCount_Max))
else:
try:
1 / 0
@@ -2456,10 +2487,7 @@
GameWorld.ErrLog(errorInfo + str(traceback.extract_stack()) + "\n" + traceback.format_exc())
raise
-def GetItemCount(item):
- if IsPutinAutoTransformItem(item):
- return item.GetUserAttr(ShareDefine.Def_IudetItemCount)
- return item.GetCount()
+def GetItemCount(item): return item.GetCount()
def GetItemNeedPackCount(packType, itemData, itemCount, isAuctionItem=0):
# 20201223 主干取消拍品有效时长设定
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
index a9f3756..850d19e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
@@ -950,6 +950,7 @@
def GetPackInitCount(packType):
## 获取背包类型对应初始格子数
+ initCount = 0
if packType == IPY_GameWorld.rptItem:
initCount = IpyGameDataPY.GetFuncCfg("InitBagCellCount", 1)
elif packType == IPY_GameWorld.rptWarehouse:
@@ -960,7 +961,8 @@
initCount = IpyGameDataPY.GetFuncCfg("DogzPack", 1)
elif packType == ShareDefine.rptDogzEquip:
initCount = IpyGameDataPY.GetFuncCfg("DogzPack", 2)
- else:
+
+ if not initCount:
bagInitCntDict = IpyGameDataPY.GetFuncEvalCfg("InitBagCellCount", 2, {})
initCount = bagInitCntDict.get(str(packType), 0)
GameWorld.DebugLog("背包类型初始格子数: packType=%s,initCount=%s" % (packType, initCount))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 1b2a70b..9c84d58 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -483,8 +483,6 @@
curPlayer.SetLoginTime(GameWorld.GetCurrentDataTimeStr())
#初始化玩家背包
InitPlayerPack(curPlayer)
- #通知玩家物品信息
- __Sync_PackDetel(curPlayer)
if GameWorld.IsCrossServer():
SkillCommon.PlayerLoginMergeServerSkillLogic(curPlayer, tick)
@@ -1482,61 +1480,66 @@
#@remarks 初始化玩家背包
def InitPlayerPack(curPlayer) :
itemManager = curPlayer.GetItemManager()
+
+ #设置装备实际个数,默认最大个数
+ curPack = itemManager.GetPack(IPY_GameWorld.rptEquip)
+ curPack.SetCount(curPack.GetMaxCount())
#初始化玩家背包
PlayerControl.Init_ItemPack(curPlayer)
#初始化玩家仓库
- PlayerControl.Init_Warehouse(curPlayer)
+ #PlayerControl.Init_Warehouse(curPlayer)
- #初始化寻宝背包
- PlayerControl.Init_TreasurePack(curPlayer)
-
- #初始化鉴定背包
+ #初始化鉴定背包,默认最大个数用于存放主线掉落
curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptIdentify)
- curPack.SetCount(ItemCommon.GetPackInitCount(IPY_GameWorld.rptIdentify))
+ curPack.SetCount(curPack.GetMaxCount())
curPack.Sync_PackCanUseCount()
#初始化英雄背包
PlayerControl.Init_HeroPack(curPlayer)
- #初始化神兽物品背包
- curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem)
- curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzItem))
- curPack.Sync_PackCanUseCount()
- #初始化神兽装备背包
- curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
- curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzEquip))
- curPack.Sync_PackCanUseCount()
- #初始化垃圾分类背包
- curPack = itemManager.GetPack(ShareDefine.rptGarbage)
- curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptGarbage))
- curPack.Sync_PackCanUseCount()
-
- #初始化临时交换背包
+ #初始化临时交换背包,默认最大个数
curPack = itemManager.GetPack(ShareDefine.rptTempSwap)
- curPack.SetCount(ChConfig.Def_PackCnt_TempSwap)
+ curPack.SetCount(curPack.GetMaxCount())
- #初始化临时存放背包
+ #初始化临时存放背包,默认最大个数
curPack = itemManager.GetPack(ShareDefine.rptTempItem)
- curPack.SetCount(ChConfig.Def_PackCnt_TempItem)
-
- #设置装备实际个数
- curPack = itemManager.GetPack(IPY_GameWorld.rptEquip)
- curPack.SetCount(ItemCommon.GetPackInitCount(IPY_GameWorld.rptEquip))
+ curPack.SetCount(curPack.GetMaxCount())
+
+ #初始化寻宝背包
+ PlayerControl.Init_TreasurePack(curPlayer)
+
+ #初始化神兽物品背包
+ #curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem)
+ #curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzItem))
+ #curPack.Sync_PackCanUseCount()
+ #初始化神兽装备背包
+ #curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
+ #curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzEquip))
+ #curPack.Sync_PackCanUseCount()
+ #初始化垃圾分类背包
+ #curPack = itemManager.GetPack(ShareDefine.rptGarbage)
+ #curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptGarbage))
+ #curPack.Sync_PackCanUseCount()
#初始化垃圾桶
#curPack = itemManager.GetPack(IPY_GameWorld.rptRecycle)
#curPack.SetCount(ChConfig.Def_PackCnt_Recycle)
#初始化万能背包
- curPack = itemManager.GetPack(IPY_GameWorld.rptAnyWhere)
- curPack.SetCount(IPY_GameWorld.Def_AnyWherePackCount)
+ #curPack = itemManager.GetPack(IPY_GameWorld.rptAnyWhere)
+ #curPack.SetCount(IPY_GameWorld.Def_AnyWherePackCount)
#初始化宠物背包
- curPack = itemManager.GetPack(ShareDefine.rptPet)
- curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptPet))
+ #curPack = itemManager.GetPack(ShareDefine.rptPet)
+ #curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptPet))
#curPack.Sync_PackCanUseCount()
+
+ #通知玩家物品信息
+ __Sync_PackDetel(curPlayer)
+
+ ItemControler.CheckGiveBindMoneyTypeItem(curPlayer)
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 020ef1f..623a240 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -3063,7 +3063,8 @@
msgInfo = {"PlayerID":curPlayer.GetPlayerID(), "MoneyType":priceType, "Value":value, "GiveType":giveType, "AddDataDict":addDataDict}
GameWorld.SendMsgToClientServer(ShareDefine.CrossServerMsg_GiveMoney, msgInfo, [serverGroupID])
return True
-
+
+ befMoney = GetMoney(curPlayer, priceType)
if priceType == IPY_GameWorld.TYPE_Price_Gold_Money:
updPlayerGold = GetMoneyReal(curPlayer, priceType) + value
if updPlayerGold > ChConfig.Def_PlayerTotalMoney_Gold:
@@ -3130,6 +3131,11 @@
NotifyCode(curPlayer, "GetMoney", [priceType, value])
__GiveMoneyAfter(curPlayer, priceType, value, giveType, addDataDict)
+ if befMoney == 0:
+ aftMoney = GetMoney(curPlayer, priceType)
+ if aftMoney > 0:
+ ItemControler.CheckGiveBindMoneyTypeItem(curPlayer, priceType)
+
return True
def __GiveMoneyAfter(curPlayer, priceType, value, giveType, addDataDict):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 96f5f8b..dc071ed 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1780,7 +1780,7 @@
Def_IudetHeroLineup = 81 # 所在阵容信息列表 [阵容类型*10000+阵型类型*100+位置编号, ...]
Def_IudetItemColor = 16 # 物品颜色,如果该值没有就取物品
-Def_IudetItemCount = 18 # 物品个数,支持20亿,目前仅特殊转化物品会用到
+#Def_IudetItemCount = 18 # 物品个数,支持20亿,目前仅特殊转化物品会用到
Def_IudetCancelUseLimit = 20 # 物品取消使用限制
Def_IudetItemLV = 22 # 物品等级,适用于动态物品等级(非物品表配置的固定等级)
Def_IudetSource = 24 # 物品来源
--
Gitblit v1.8.0