ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -37,7 +37,6 @@
import UseItem
import ItemCommon
import ChConfig
import EventShell
import PlayerControl
import FBLogic
import ReadChConfig
@@ -111,7 +110,7 @@
#===============================================================================
def __Func_InitItem(tick):
    #初始化物品掉落保护
    MapItemProtectTime = IpyGameDataPY.GetFuncCfg("MapItemProtectTime")
    MapItemProtectTime = 120000 #IpyGameDataPY.GetFuncCfg("MapItemProtectTime")
    GameWorld.GetMapItemManager().SetProtectTime(MapItemProtectTime)
    
    #===============================================================================================
@@ -158,12 +157,6 @@
        GameWorld.Log("当前物品不存在或已经被回收,玩家拾取失败,mapItemID=%s" % mapItemID, playerID)
        return
    dropItemNPCID = GetMapItemUserDataValue(mapItem, ShareDefine.Def_MapItemInfo_NPCID)
    #镖车中,无法拾取
    if not isGuard and curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvTruck:
        PlayerControl.NotifyCode(curPlayer, "Old_hgg_21675")
        GameWorld.Log("使用交通工具时,无法拾取物品!mapItemID=%s,dropItemNPCID=%s" % (mapItemID, dropItemNPCID), playerID)
        return
    
    if GameObj.GetHP(curPlayer) == 0:
        #玩家已经死亡
@@ -284,8 +277,6 @@
        #    PickupItemSysNotify(curPlayer, isTeamNotify, itemMsgList, isEquip)
        #=======================================================================
        
        #响应事件
        EventShell.EventRespons_OnGet(curPlayer, mapItemTypeID)
        #成就
        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_PickUpItem, curItemCount, [curItemID])
    
@@ -657,15 +648,6 @@
        #这个物品不是一般物品, 直接返回结果
        return useSpecialItemResult
    
    #---特殊装备不验证装备属性, 普通物品要验证装备属性---
    itemControler = ItemControler.PlayerItemControler(curPlayer)
    #装备无法使用
    if itemControler.PlayerCanEquipItem(curItem, False):
        #这个物品是装备
        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_774045")
        return
    #物品类型ID
    itemTypeID = curItem.GetItemTypeID()
    
@@ -723,7 +705,6 @@
                            ChConfig.Def_Effect_Face:"Item_Face",
                            ChConfig.Def_Effect_FacePic:"Item_Face",
                            ChConfig.Def_Effect_ItemAddLV:"Item_AddLV", #升级道具
                            ChConfig.Def_Effect_TJGAddTime:"Item_TJGAddTime", #增加脱机挂时间
                            ChConfig.Def_Effect_GuajiAward:"Item_GuajiAward", #直接给挂机收益
                            ChConfig.Def_Effect_CleanGuilt:"Item_CleanGuilt", # 洗红名
                            ChConfig.Def_Effect_PrizeCoin:"Item_PrizeCoin", # 奖励充值点券
@@ -744,6 +725,7 @@
                            ChConfig.Def_Effect_ItemGiveWeekPartyPoint1:"Item_WeekPartyPoint", # 增加活动巡礼积分
                            ChConfig.Def_Effect_AddRealmExpRate:"Item_AddRealmExpRate", # 增加聚灵效率
                            ChConfig.Def_Effect_TouchMission:"Item_TouchMission",  # 触发任务接口
                            ChConfig.Def_Effect_HeroSkin:"Item_HeroSkin",  # 武将皮肤
                            #ChConfig.Def_Effect_FamilyImpeach:"Item_FamilyImpeach",  # 弹劾符
                            #ChConfig.Def_Effect_ClothesCoatSkin:"Item_ClothesCoatSkin", #激活时装皮肤
                            #ChConfig.Def_Effect_AddOfficialExp:"Item_AddOfficialExp", # 增加爵位经验
@@ -920,11 +902,6 @@
                                        ):
        return False
    
    #在镖车中, 不可使用物品
    if curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvTruck :
        PlayerControl.NotifyCode(curPlayer, "Old_hgg_0")
        return False
    #交易状态, 不可使用物品
    if curPlayer.GetPlayerAction() == IPY_GameWorld.paTrade:
        PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_372238")
@@ -982,11 +959,6 @@
    
    if ItemControler.IsEventItem(curItem):
        PlayerControl.NotifyCode(curPlayer, "itemuse_chenxin_31379")
        return
    #玩家在镖车中,不能使用物品
    if curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvTruck:
        PlayerControl.NotifyCode(curPlayer, "Old_hgg_0")
        return
    
#    #玩家事件中, 不能使用物品
@@ -1409,96 +1381,6 @@
def GetBackItemInFabao(index , tick):
    return
##===============================================================================
##07 24   tagCDingDianTransport
#
### 定点(城市)传送 和 洞穴传送 (收包参数)
##  @param index 玩家索引
##  @param tick 当前时间
##  @return None
##  @remarks 函数详细说明.
#def PointTransport(index, tick):
#    return
#    packUseItem = IPY_GameWorld.IPY_CDingDianTransport()
#    useItemIndex = packUseItem.GetItemIndex()
#    transportIndex = packUseItem.GetTransportIndex()
#
#    #获得玩家使用的物品
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
#    backPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
#    curItem = backPack.GetAt(useItemIndex)
#
#    #检查玩家状态和物品
#    if not CheckUseTransformItem(curPlayer, curItem, tick):
#        return
#
#    #判断属于哪种传送
#    effIndex = curItem.GetEffectByIndex(0)
#    curEffID = effIndex.GetEffectID()
#
#    #CD验证
#    if (tick - curPlayer.GetItemCDStartTime(curEffID)) < curItem.GetCDTime():
#        #CD冷却时间未到
#        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_749572")
#        return
#
#    #判断并执行传送
#    if not __DoTransport(curPlayer, curItem, curEffID, transportIndex, useItemIndex, tick):
#        return
#
### 执行传送
##  @param curPlayer 当前玩家
##  @param curItem 使用物品
##  @param curEffID 当前效果
##  @param transportIndex 传送点索引
##  @param useItemIndex 使用的物品索引
##  @param tick 当前时间
##  @return None
##  @remarks 函数详细说明.
#def __DoTransport(curPlayer, curItem, curEffID, transportIndex, useItemIndex, tick):
#    #定点列表
#    cityPosList = ReadChConfig.GetEvalChConfig('Def_List_City_Pos')
#    #山洞列表
#    cavePosList = ReadChConfig.GetEvalChConfig('Def_List_Cave_Pos')
#
#    #定点
#    if curEffID == ChConfig.Def_Item_150_Effect:
#        posList = cityPosList
#    #山洞
#    elif curEffID == ChConfig.Def_Item_152_Effect:
#        posList = cavePosList
#    else:
#        GameWorld.Log('###非法使用物品,效果值%s'%(curEffID,), curPlayer.GetPlayerID())
#        return
#
#    #检查越界
#    if transportIndex < 0 or transportIndex >= len(posList):
#        GameWorld.Log('###定点传送越界--%s'%(transportIndex))
#        return
#
#    #目标地图判断
#    if not PlayerControl.CheckTagCountry(curPlayer, posList[transportIndex][0]):
#        return
#
#    itemID = curItem.GetItemTypeID()
#
#
#    #使用xx一个
#    PlayerControl.NotifyCode(curPlayer, "LostRes", [itemID, 1])
#    #通知客户端
#    curPlayer.Sync_UseItem(itemID, useItemIndex)
#    curPlayer.SetItemCD(curItem.GetCDType(), tick)
#
#    #扣除物品(先记录再删除,避免底层已经删除此物品)
#    curItem.SetCount(curItem.GetCount() - 1)
#
#    #判断成功,进行传送
#    PlayerControl.PlayerResetWorldPos(curPlayer, posList[transportIndex][0], posList[transportIndex][1], posList[transportIndex][2], False)
#
#    #传送XX地点提示
#    PlayerControl.NotifyCode(curPlayer, "Map_Deliver_Succeed", [posList[transportIndex][0]])
#---------------------------------------------------------------------
#===============================================================================
# //07 26 有对象的使用物品#tagCUseItemTag
# tagCUseItemTag       *   GettagCUseItemTag();
@@ -1650,100 +1532,6 @@
        return
    return
#---------------------------------------------------------------------
#===============================================================================
# //07 33 使用五行卷#tagCUseWuXingJuan
# tagCUseWuXingJuan       *   GettagCUseWuXingJuan();
#
# class   IPY_CUseWuXingJuan
# {
# public:
#    //物品Index
#    int      GetItemIndex();
#    //新的五行
#    int      GetNewWuXing();
# };
#===============================================================================
## 使用五行卷轴(封包参数)
#  @param index 玩家索引
#  @param tick 当前时间
#  @return None or False
#  @remarks 函数详细说明.
def UseWuXingJuan(index , tick):
    return
## 检测物品是否是五行卷轴
#  @param curItem 等待检测的物品
#  @return 布尔值
#  @remarks 函数详细说明.
#===============================================================================
# def CheckWuXingJuan(curItem):
#    if not ItemCommon.CheckItemCanUse(curItem):
#        return False
#
#    #这个物品不是五行转换卷轴
#    if curItem.GetEffectByIndex(0).GetEffectID() != ChConfig.Def_Effect_ItemWuXingJuan:
#        return False
#
#    return True
#===============================================================================
## 使用回城
#  @param curPlayer 当前玩家
#  @return None or True
#  @remarks 函数详细说明.
def UseTownPortal(curPlayer):
    #检查是否是回城卷
    itemIndex = curPlayer.GetDictByKey(ChConfig.Def_Use_Item_303_Index)
    curItem = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem).GetAt(itemIndex)
    #物品不存在,不是回城卷不处理
    if not ItemCommon.CheckItemCanUse(curItem) or curItem.GetItemTypeID() != 303:
        #不能获得物品ID只能写死,否则玩家移动将找不到物品,或ID不匹配
        PlayerControl.NotifyCode(curPlayer, "B66BA2D6-0B3C-4177-B3FE66153B638DD0", [303, 303])
        return
    useCount = 1
    itemID = curItem.GetItemTypeID()
    guID = curItem.GetGUID()
    dataDict = {"ItemID":itemID, "ItemCount":useCount, "IsBind":curItem.GetIsBind(),"ItemGUID":guID}
    DataRecordPack.DR_DeleteItem(curPlayer, 'UseTownPortal', dataDict)
    #物品使用减少
    if curItem.GetCount() > useCount:
        ItemControler.SetItemCount(curItem, curItem.GetCount() - useCount,
                                   curPlayer.GetID(), curPlayer.GetAccID(), curPlayer.GetPlayerName())
    else:
        curItem.Clear()
    #PlayerControl.NotifyCode(curPlayer, "LostRes", [itemID, useCount])
    playerControl = PlayerControl.PlayerControl(curPlayer)
    #把人物设置回重生点
    playerControl.SetToBornPlace()
    return True
#===============================================================================
# 07 39 使用指定数量的物品 tagCUseItemCount
# struct    tagCUseItemCount
# {
#     tagHead        Head;
#     BYTE        Type;    //物品类型
#     DWORD        Count;       //物品数量
# }
#===============================================================================
## 07 39封包 使用指定数量的物品
#  @param index 玩家索引
#  @param tick 当前时间
#  @return 无
#  @remarks 和客户端约定的类型来取得指定物品,目前用于离线挂机,扣乾坤珠
def UseOfflineTime(index, tick):
    return
#===============================================================================
# struct   tagCPetUseItemByIndex
# {
@@ -1946,80 +1734,6 @@
        infoDict[ShareDefine.Def_MapItemInfo_IsSuite] = 1
           
    return infoDict
# 特别设定:卓越物品必带武器技能增强效果,使用者请特别注意
## 装备动态属性,只用于未设置属性的singleItem,roleItem使用多次发背包刷新包
#  @param curItem 玩家实例
#  @param equipData
#  @return
def EquipAddAdditionEx(curItem, equipData):
    # 绑定
    #if equipData.isBind:
    #    ItemControler.SetItemIsBind(curItem, equipData.isBind)
    if not ItemCommon.CheckItemIsEquip(curItem):
        return
    #===========================================================================
    # # 强化等级
    # if equipData.starLV:
    #    curItem.SetItemStarLV(equipData.starLV)
    # # 打孔
    # if 0 < equipData.holeCnt <= curItem.GetMaxHoleCount():
    #    curItem.SetCanPlaceStoneCount(equipData.holeCnt)
    #
    # # 给镶嵌宝石
    # for i, stoneID in enumerate(equipData.stoneData):
    #    if i > equipData.holeCnt - 1:
    #        break
    #
    #    if stoneID <= 0:
    #        continue
    #
    #    curItem.SetStone(i, stoneID)
    #===========================================================================
    # 套装
    #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)
    # 传奇属性
    if equipData.legendAttrIDList and equipData.legendAttrValueList:
        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrID)
        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValue)
        for i in xrange(len(equipData.legendAttrIDList)):
            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrID, equipData.legendAttrIDList[i])
            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValue, equipData.legendAttrValueList[i])
    # 传奇属性 - 神
    if equipData.legendAttrIDListShen and equipData.legendAttrValueListShen:
        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDShen)
        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueShen)
        for i in xrange(len(equipData.legendAttrIDListShen)):
            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDShen, equipData.legendAttrIDListShen[i])
            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueShen, equipData.legendAttrValueListShen[i])
    # 传奇属性 - 仙
    if equipData.legendAttrIDListXian and equipData.legendAttrValueListXian:
        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDXian)
        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueXian)
        for i in xrange(len(equipData.legendAttrIDListXian)):
            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDXian, equipData.legendAttrIDListXian[i])
            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueXian, equipData.legendAttrValueListXian[i])
    # 传奇属性 - 极
    if equipData.legendAttrIDListJi and equipData.legendAttrValueListJi:
        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDJi)
        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueJi)
        for i in xrange(len(equipData.legendAttrIDListJi)):
            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDJi, equipData.legendAttrIDListJi[i])
            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueJi, equipData.legendAttrValueListJi[i])
    ItemCommon.MakeEquipGS(curItem)
    return
## 判断装备是否是可加强装备
#  @param curItem 物品实例