ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -213,7 +213,7 @@
        singItem.Clear()
    #===============================================================================================
    # # (跨服掉落功勋物品, 不给实际物品,转化为功勋值)
    # elif curEffID == ChConfig.Def_Effect_ItemGiveGongXun and GameWorld.IsMergeServer():
    # elif curEffID == ChConfig.Def_Effect_ItemGiveGongXun and GameWorld.IsCrossServer():
    #    #=======================================================================
    #    # # 不需要队伍提示
    #    # if not isTeamNotify:
@@ -266,9 +266,10 @@
            return
        if dropItemNPCID:
            serverGroupID = PlayerControl.GetPlayerServerGroupID(curPlayer)
            mapID = GameWorld.GetGameWorld().GetMapID()
            NPCCommon.SendGameServerGoodItemRecord(mapID, dropItemNPCID, curPlayer.GetName(), 
                                                   curPlayer.GetPlayerID(), curItemID, equipInfo)
                                                   curPlayer.GetPlayerID(), curItemID, equipInfo, serverGroupID)
            
        # 不需要队伍提示
        #=======================================================================
@@ -344,7 +345,7 @@
        mapID = curPlayer.GetMapID()
        fbIpyData = FBCommon.GetFBIpyData(mapID)
        if fbIpyData and not fbIpyData.GetGuardPick():
            GameWorld.DebugLog("该地图守护无法拾取物品! mapID=%s" % mapID, curPlayer.GetPlayerID())
            GameWorld.Log("该地图守护无法拾取物品! mapID=%s" % mapID, curPlayer.GetPlayerID())
            return
        
#    #单人副本一键拾取
@@ -352,15 +353,18 @@
#        SingleFBTPickUP(curPlayer, mapItemID, tick)
#        return
    
    GameWorld.DebugLog("请求拾取物品, isGuard=%s,mapItemIDList=%s" % (isGuard, mapItemIDList), curPlayer.GetPlayerID())
    if not mapItemIDList:
        GameWorld.ErrLog("没有指定要拾取的地图物品ID!", curPlayer.GetPlayerID())
        return
    
    succMapItemIDList = [] # 成功拾取的地图物品
    for mapItemID in mapItemIDList:
        if __DoPickup(curPlayer, mapItemID, tick, isGuard):
            succMapItemIDList.append(mapItemID)
            
    GameWorld.DebugLog("    成功拾取物品, succMapItemIDList=%s" % (succMapItemIDList), curPlayer.GetPlayerID())
    if succMapItemIDList:
        GameWorld.Log("成功拾取地图物品, succMapItemIDList=%s" % (succMapItemIDList), curPlayer.GetPlayerID())
    # 守护拾取的,附加同步守护拾取结果
    if isGuard and succMapItemIDList:
        guradPickupSucc = ChPyNetSendPack.tagMCGuradPickupItemSucc()
@@ -567,13 +571,20 @@
    maxCnt = ItemCommon.GetCanUseCountDaily(curItem)
    if maxCnt <= 0:
        return -1
    curItemID = curItem.GetItemTypeID()
    useCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ItemUseCntToday % curItemID)
    for itemIDList in IpyGameDataPY.GetFuncEvalCfg('ShareUseCntItem'):
        if curItemID not in itemIDList:
            continue
        for itemID in itemIDList:
            if itemID == curItemID:
                continue
            useCnt += curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ItemUseCntToday % itemID)
    
    itemID = curItem.GetItemTypeID()
    useCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ItemUseCntToday % itemID)
    canUseCnt = max(0, maxCnt - useCnt)
    
    if canUseCnt <= 0:
        GameWorld.DebugLog("已达到今日使用次数上限!itemID=%s,useCnt=%s,maxCnt=%s" % (itemID, useCnt, maxCnt))
        GameWorld.DebugLog("已达到今日使用次数上限!itemID=%s,useCnt=%s,maxCnt=%s" % (curItemID, useCnt, maxCnt))
        #PlayerControl.NotifyCode(curPlayer, notifyMark, [itemID])
        
    #GameWorld.DebugLog("物品ID(%s)今日已使用次数(%s), maxCnt=%s" % (itemID, useCnt, maxCnt))
@@ -694,7 +705,8 @@
                           ChConfig.Def_ItemType_GiveMoney:"Item_GiveMoney",         # 给人物金钱
                           ChConfig.Def_ItemType_AddLimitBuff:"Item_Add_LimitingBuff",         # 给限时buff物品
                           ChConfig.Def_ItemType_AddExpBuff:"Item_Add_LimitingBuff",         # 给限时buff物品
                           ChConfig.Def_ItemType_ResetAttrPoint:"Item_ResetAttrPoint"    #单个属性点重置
                           ChConfig.Def_ItemType_ResetAttrPoint:"Item_ResetAttrPoint",    #单个属性点重置
                           ChConfig.Def_ItemType_AddCrossRealmPKCnt:"Item_AddCrossRealmPKCnt"    #增加跨服PK次数
                           } 
    
    #根据物品效果使用{物品效果ID:call的py名}
@@ -709,7 +721,10 @@
                            ChConfig.Def_Effect_ResetBossKillCnt:"Item_ResetBossKillCnt", # 重置boss击杀疲劳
                            ChConfig.Def_Effect_AddFBCnt:"Item_AddFBCnt", # 增加副本可进入次数
                            ChConfig.Def_Effect_AddKillBossCnt:"Item_AddKillBossCnt", # 增加BOSS可击杀次数
                            #ChConfig.Def_PhoneVip_EffID:"Item_AddPhoneVip", # 手机VIP物品卡
                            ChConfig.Def_Effect_AddMagicWeaponUpExp:"Item_AddMagicWeaponUpExp", # 增加法宝升星经验
                            ChConfig.Def_Effect_ChatBubbleBox:"Item_ChatBubbleBox", # 激活聊天气泡框
                            ChConfig.Def_Effect_ItemGiveWeekPartyPoint:"Item_WeekPartyPoint", # 增加活动巡礼积分
                            ChConfig.Def_Effect_ItemGiveWeekPartyPoint1:"Item_WeekPartyPoint", # 增加活动巡礼积分
                            #ChConfig.Def_Effect_AddZhenQiByTimes:"Item_AddZhenQiByTimes", # 增加真气按一天使用次数减少
                            #ChConfig.Def_Effect_AddPrestige:"Item_AddPrestige",  # 给人物威望
                            #ChConfig.Def_Effect_FamilyImpeach:"Item_FamilyImpeach",  # 弹劾符
@@ -1515,12 +1530,45 @@
        GameWorld.DebugLog("    物品无法使用!")
        return
    
    # 使用拍品
    if not curItem.GetIsBind():
        DoLogic_PlayerUseAuctionItem(curPlayer, curItem)
        return
    if useCnt <= 0:
        useCnt = curItem.GetCount()
        GameWorld.DebugLog("    没指定使用个数,默认使用全部=%s" % useCnt)
        
    __DoLogic_PlayerUseItemSelf(curPlayer, itemIndex, tick, useCnt, exData)
    return
def DoLogic_PlayerUseAuctionItem(curPlayer, curItem):
    ## 玩家使用拍品
    playerID = curPlayer.GetPlayerID()
    itemID = curItem.GetItemTypeID()
    curItem.SetIsBind(1) # 设置为非拍品
    curItem.ClearUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime)
    GameWorld.DebugLog("玩家使用拍品: itemID=%s" % (itemID), playerID)
    if ItemCommon.GetIsEquip(curItem):
        # 生成传奇属性
        legendAttrInfo = ItemControler.GetAddEquipLegendAttr(curItem, curPlayer)
        if not legendAttrInfo:
            GameWorld.ErrLog("使用装备拍品没有传奇属性!itemID=%s" % (itemID), playerID)
            return
        attrIDList, attrValueList = legendAttrInfo
        # 传奇属性
        if attrIDList and attrValueList and len(attrIDList) == len(attrValueList):
            curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrID)
            curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValue)
            for i, attrID in enumerate(attrIDList):
                value = attrValueList[i]
                curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrID, attrID)
                curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValue, value)
        ItemCommon.MakeEquipGS(curItem)
    return
#---------------------------------------------------------------------
@@ -1782,8 +1830,10 @@
        curMapItem.SetOwnerType(ownerType)
        curMapItem.SetOwnerID(ownerID)
        
    #GameWorld.DebugLog("AddMapDropItem ID=%s,ownerType=%s,ownerID=%s,GetDropTick=%s,isBind=%s"
    #                   % (curMapItem.GetID(), ownerType, ownerID, curMapItem.GetDropTick(), curItem.GetIsBind()))
    if dropNPCID:
        itemNoteDict = ItemCommon.GetItemNoteDict(curItem, curItem.GetCount())
        GameWorld.Log("AddMapDropItem mapItemID=%s,ownerType=%s,ownerID=%s,mapItemDataStr=%s,itemNoteDict=%s"
                      % (curMapItem.GetID(), curMapItem.GetOwnerType(), curMapItem.GetOwnerID(), itemDataStr, itemNoteDict))
    return curMapItem
def GetMapDropItemDataStr(curItem, effIndex=0, ownerInfo=[], dropNPCID=0, isOnlySelfSee=False):
@@ -1858,10 +1908,10 @@
    #===========================================================================
           
    # 套装
    if equipData.isSuite:
        curItem.SetIsSuite(equipData.isSuite)
    if equipData.suiteLV:
        curItem.SetUserAttr(ShareDefine.Def_IudetSuiteLV, equipData.suiteLV)
    #if equipData.isSuite:
    #    curItem.SetIsSuite(equipData.isSuite)
    #if equipData.suiteLV:
    #    curItem.SetUserAttr(ShareDefine.Def_IudetSuiteLV, equipData.suiteLV)
    # 物品来源
    if equipData.source:
        curItem.SetUserAttr(ShareDefine.Def_IudetSource, equipData.source)
@@ -1994,14 +2044,12 @@
#            makeItemID = int(itemDictData['ItemID'])
#            itemCount = 1
#            itemDictData['IsBind'] = isBind
#            if not ItemControler.GivePlayerEquip(curPlayer, itemDictData, False,
#                                                 [IPY_GameWorld.rptItem]):
#            if not ItemControler.GivePlayerEquip(curPlayer, itemDictData):
#                GameWorld.ErrLog("使用特殊运营物品 给予定制物品失败")
#                return
#        else:
#            #给予物品
#            if not ItemControler.GivePlayerItem(curPlayer, newItemId, itemCount, isBind,
#                                         [IPY_GameWorld.rptItem], False):
#            if not ItemControler.GivePlayerItem(curPlayer, newItemId, itemCount, 0, [IPY_GameWorld.rptItem]):
#                GameWorld.ErrLog("使用特殊运营物品 给予普通物品失败")
#                return
#        #PlayerControl.NotifyCode(curPlayer, "ObtainRes01", [makeItemID, itemCount])
@@ -2059,6 +2107,18 @@
        return
    #先删原物品再给新物品
    ItemCommon.DelItem(curPlayer, timeOutItem, 1, False, "RenewItem")
    ItemControler.GivePlayerItem(curPlayer, changeItemID, 1, True, [IPY_GameWorld.rptItem])
    ItemControler.GivePlayerItem(curPlayer, changeItemID, 1, 0, [IPY_GameWorld.rptItem])
    PlayerControl.NotifyCode(curPlayer, 'Guardian_ContinuePay')
    return
    return
#// A3 08 物品过期 #tagCMItemTimeout
#
#struct    tagCMItemTimeout
#
#{
#    tagHead        Head;
#    BYTE        PackType;        //背包类型
#    BYTE        ItemIndex;        //物品在背包中索引
#};
def OnItemTimeout(index, clientData, tick):
    return