80 【常规】背包-服务端(优化背包格子初始化,屏蔽无用背包;支持绑定货币数量展示的背包物品;背包物品优化叠加上限20亿支持;)
8个文件已修改
174 ■■■■■ 已修改文件
PySysDB/PySysDBPY.h 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/MapServerConfig.ini 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;    //升级所需经验
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
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,
                                    ]
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 主干取消拍品有效时长设定
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))
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)
@@ -1483,60 +1481,65 @@
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.SetCount(curPack.GetMaxCount())
    #设置装备实际个数
    curPack = itemManager.GetPack(IPY_GameWorld.rptEquip)
    curPack.SetCount(ItemCommon.GetPackInitCount(IPY_GameWorld.rptEquip))
    #初始化寻宝背包
    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
#---------------------------------------------------------------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -3064,6 +3064,7 @@
        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):
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  # 物品来源