From d0f5f9922f17f5bff4288173f18a9ed827d95db8 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 22 六月 2019 15:00:13 +0800
Subject: [PATCH] 1 装备评分增加装备掉率参数固定值 DropEquipPer

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py |  272 +++++++++++++++++++++++------------------------------
 1 files changed, 119 insertions(+), 153 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
index 619d28c..a7ba98e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -45,7 +45,6 @@
 import ShareDefine
 import PlayerAttrFruit
 import DataRecordPack
-import PyMapTable
 import ChPyNetSendPack
 import NetPackCommon
 import IpyGameDataPY
@@ -54,6 +53,7 @@
 import NPCCommon
 import FBCommon
 
+import random
 import json
 #---------------------------------------------------------------------
 #导入
@@ -240,14 +240,14 @@
         
         curItemCount = singItem.GetCount()
         curItemID = singItem.GetItemTypeID()
-        curItemIsBind = singItem.GetIsBind()
+        curItemIsAuctionItem = ItemControler.GetIsAuctionItem(singItem)
         
         isPutInTemp = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PickupItemPutInTemp)
         packIndex = ShareDefine.rptTempItem if isPutInTemp else IPY_GameWorld.rptItem
         packIndex = ChConfig.GetItemPackType(singItem.GetType(), packIndex)
         
         # 是否可放入
-        if not itemControl.CanPutInItem(packIndex, curItemID, curItemCount, curItemIsBind):
+        if not itemControl.CanPutInItem(packIndex, curItemID, curItemCount, curItemIsAuctionItem):
             PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [packIndex])
             GameWorld.Log("拾取物品无法放入背包!mapItemID=%s,dropItemNPCID=%s,curItemID=%s,packIndex=%s" 
                           % (mapItemID, dropItemNPCID, curItemID, packIndex), curPlayer.GetPlayerID())
@@ -257,7 +257,7 @@
         FBLogic.OnFBPickUpItem(curPlayer, singItem, tick)
         
         equipInfo = [singItem.GetEquipPlace(), ItemCommon.GetItemClassLV(singItem), singItem.GetItemColor(), 
-                     singItem.GetItemQuality(), singItem.GetUserData()]
+                     singItem.GetSuiteID(), singItem.GetUserData()]
         if not itemControl.PutInItem(packIndex, singItem, event=[ChConfig.ItemGive_Pickup, False, {"NPCID":dropItemNPCID}]):
             #物品不能放入
             #PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [packIndex])
@@ -266,10 +266,9 @@
             return
 
         if dropItemNPCID:
-            serverGroupID = PlayerControl.GetPlayerServerGroupID(curPlayer)
             mapID = GameWorld.GetGameWorld().GetMapID()
-            NPCCommon.SendGameServerGoodItemRecord(mapID, dropItemNPCID, curPlayer.GetName(), 
-                                                   curPlayer.GetPlayerID(), curItemID, equipInfo, serverGroupID)
+            lineID = 0 if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull else PlayerControl.GetFBFuncLineID(curPlayer)
+            NPCCommon.SendGameServerGoodItemRecord(curPlayer, mapID, lineID, dropItemNPCID, curItemID, equipInfo)
             
         # 不需要队伍提示
         #=======================================================================
@@ -544,7 +543,7 @@
 #  @remarks 
 def CheckPlayerUseItemSelf(curPlayer, curItem, tick):
     #----------------------检查非法物品属性
-    if not ItemCommon.CheckItemCanUse(curItem):
+    if not ItemCommon.CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_644055")
         return False
     
@@ -571,13 +570,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))
@@ -698,7 +704,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名}
@@ -715,9 +722,10 @@
                             ChConfig.Def_Effect_AddKillBossCnt:"Item_AddKillBossCnt", # 增加BOSS可击杀次数
                             ChConfig.Def_Effect_AddMagicWeaponUpExp:"Item_AddMagicWeaponUpExp", # 增加法宝升星经验
                             ChConfig.Def_Effect_ChatBubbleBox:"Item_ChatBubbleBox", # 激活聊天气泡框
-                            #ChConfig.Def_PhoneVip_EffID:"Item_AddPhoneVip", # 手机VIP物品卡
-                            #ChConfig.Def_Effect_AddZhenQiByTimes:"Item_AddZhenQiByTimes", # 增加真气按一天使用次数减少
-                            #ChConfig.Def_Effect_AddPrestige:"Item_AddPrestige",  # 给人物威望
+                            ChConfig.Def_Effect_ItemGiveWeekPartyPoint:"Item_WeekPartyPoint", # 增加活动巡礼积分
+                            ChConfig.Def_Effect_ItemGiveWeekPartyPoint1:"Item_WeekPartyPoint", # 增加活动巡礼积分
+                            ChConfig.Def_Effect_AddRealmExpRate:"Item_AddRealmExpRate", # 增加聚灵效率
+                            ChConfig.Def_Effect_TouchMission:"Item_TouchMission",  # 触发任务接口
                             #ChConfig.Def_Effect_FamilyImpeach:"Item_FamilyImpeach",  # 弹劾符
                             #ChConfig.Def_Effect_ClothesCoatSkin:"Item_ClothesCoatSkin", #激活时装皮肤
                             #ChConfig.Def_Effect_AddOfficialExp:"Item_AddOfficialExp", # 增加爵位经验
@@ -948,17 +956,12 @@
 #        return
     
     #职业限制
-    if not ItemCommon.JobUseable(curPlayer, curItem):
+    if not ItemCommon.CheckJob(curPlayer, curItem):
         PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_31379")
         return
     
     #物品使用等级检查
     if not ItemControler.CheckItemUseLV(curPlayer, curItem):
-        return
-
-    #使用物品检查是否满足属性
-    if not ItemControler.CheckItemAttrLimit(curPlayer, curItem):
-        PlayerControl.NotifyCode(curPlayer, "itemuse_andyshao_671654")
         return
     
 #===============================================================================
@@ -994,7 +997,7 @@
         PlayerControl.NotifyCode(curPlayer, "UseResLost10")
         return False
     
-    #绑定物品不可掉落
+    #绑定物品不可丢弃
     if curItem.GetIsBind():
         PlayerControl.NotifyCode(curPlayer, "UseResLost10")
         return False
@@ -1050,7 +1053,7 @@
     curItem = curPack.GetAt(itemIndex)
     
     #物品不存在
-    if not ItemCommon.CheckItemCanUse(curItem):
+    if not ItemCommon.CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
         return
 
     #检查物品可否丢弃
@@ -1521,6 +1524,12 @@
         GameWorld.DebugLog("    物品无法使用!")
         return
     
+    # 使用拍品
+    if ItemControler.GetIsAuctionItem(curItem):
+        GameWorld.DebugLog("玩家使用拍品: itemID=%s" % (curItem.GetItemTypeID()), curPlayer.GetPlayerID())
+        ItemControler.SetIsAuctionItem(curItem, False, curPlayer)
+        return
+    
     if useCnt <= 0:
         useCnt = curItem.GetCount()
         GameWorld.DebugLog("    没指定使用个数,默认使用全部=%s" % useCnt)
@@ -1771,6 +1780,54 @@
     return
 
 #---------------------------------------------------------------------
+
+def DoMapDropItem(curPlayer, itemList, npcID, dropPosX, dropPosY, isOnlySelfSee=True, isDropDisperse=True):
+    if not itemList:
+        return
+    if isDropDisperse:
+        dropItemList = []
+        for itemInfo in itemList:
+            if isinstance(itemInfo, list):
+                itemID, itemCount, isAuctionItem = itemInfo
+                # 拍品不拆
+                if isAuctionItem:
+                    dropItemList.append(itemInfo)
+                    continue
+                for _ in xrange(itemCount):
+                    dropItemList.append([itemID, 1, isAuctionItem])
+            else:
+                dropItemList.append(itemInfo)
+    else:
+        dropItemList = itemList
+        
+    random.shuffle(dropItemList) # 打乱顺序
+    index = 0
+    playerID = curPlayer.GetPlayerID()
+    gameMap = GameWorld.GetMap()
+    for posX, posY in ChConfig.Def_DropItemAreaMatrix:
+        resultX = dropPosX + posX
+        resultY = dropPosY + posY
+        
+        if not gameMap.CanMove(resultX, resultY):
+            #玩家不可移动这个点
+            continue
+        
+        if index > len(dropItemList) - 1:
+            break
+        
+        curItem = dropItemList[index]
+        index += 1
+        if isinstance(curItem, list):
+            itemID, itemCount, isAuctionItem = curItem
+            curItem = ItemControler.GetOutPutItemObj(itemID, itemCount, isAuctionItem, curPlayer=curPlayer)
+            
+        if not curItem:
+            continue
+        
+        AddMapDropItem(resultX, resultY, curItem, ownerInfo=[ChConfig.Def_NPCHurtTypePlayer, playerID], 
+                       dropNPCID=npcID, isOnlySelfSee=isOnlySelfSee)    
+    return
+
 ## 在地上添加物品(统一接口)
 #  @param itemPosX 位置x
 #  @param itemPosY 位置y
@@ -1840,8 +1897,8 @@
 #  @return 
 def EquipAddAdditionEx(curItem, equipData):
     # 绑定
-    if equipData.isBind:
-        ItemControler.SetItemIsBind(curItem, equipData.isBind)
+    #if equipData.isBind:
+    #    ItemControler.SetItemIsBind(curItem, equipData.isBind)
     
     if not ItemCommon.CheckItemIsEquip(curItem):
         return
@@ -1866,10 +1923,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)
@@ -1881,14 +1938,6 @@
         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.OutOfPrintAttrIDList and equipData.OutOfPrintAttrValueList:
-        curItem.ClearUserAttr(ShareDefine.Def_IudetOutOfPrintAttrID)
-        curItem.ClearUserAttr(ShareDefine.Def_IudetOutOfPrintAttrValue)
-        for i in xrange(len(equipData.OutOfPrintAttrIDList)):
-            curItem.AddUserAttr(ShareDefine.Def_IudetOutOfPrintAttrID, equipData.OutOfPrintAttrIDList[i])
-            curItem.AddUserAttr(ShareDefine.Def_IudetOutOfPrintAttrValue, equipData.OutOfPrintAttrValueList[i])
             
     ItemCommon.MakeEquipGS(curItem) 
     return
@@ -1909,120 +1958,6 @@
     Def_Discount_ItemType,    #折扣卡物品类型
     Def_SelectMore_ItemType   #多选礼包物品类型
 ) = range(2)
-
-#//A3 21 使用特殊运营物品 #tagCMUseSpecialItem
-#
-#struct tagCMUseSpecialItem
-#{
-#    tagHead        Head;
-#    BYTE        SpeicalItemType;   //特殊运营物品类型,0打折卡,1多选礼包
-#    int        ItemID;                  //物品ID
-#    BYTE        ItemIndex;            //物品在背包中的索引位置
-#    BYTE        Select;                 //选择,只对多选礼包有用    
-#};
-## 使用特殊运营物品(封包参数)    
-#  @param index 玩家索引
-#  @param packData 接收到的封包数据
-#  @param tick 当前时间
-#  @return None
-def OnUseSpecialItem(index, packData, tick):
-#    #GameWorld.Log("OnUseSpecialItem")
-#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-#    specialItemType = packData.SpeicalItemType
-#    itemID = packData.ItemID
-#    itemIndex = packData.ItemIndex
-#    selectIndex = packData.Select
-#    
-#    curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-#    curItem = curPack.GetAt(itemIndex)
-#    if curItem.GetItemTypeID() != itemID:
-#        GameWorld.Log("使用特殊运营物品失败,物品ID不一致")
-#        return
-#    isBind = curItem.GetIsBind()#继承被使用物品的绑定属性,先记录
-#    itemName = curItem.GetName()
-#    
-#    needGold = 0  #需要消耗多少钻石
-#    itemInfoList = []
-#    useMoneyInfo = ""
-#    #如果是打折卡类型
-#    if specialItemType == Def_Discount_ItemType:
-#        #GameWorld.Log("处理打折卡物品类型")
-#        discountItem = ReadChConfig.GetEvalChConfig("DiscountItem")
-#        #GameWorld.Log("读取到的打折卡物品配置信息=%s"%discountItem)
-#        itemSetInfo = discountItem.get(itemID, None)
-#        if not itemSetInfo:
-#            GameWorld.ErrLog("折扣卡,没有找到对应物品的配置信息,物品ID:%s"%itemID)
-#            return
-#        needGold, itemInfo = itemSetInfo
-#        itemInfoList.append(itemInfo)
-#        useMoneyInfo = "UseSpecialItem_Discount"
-#    else:
-#        #GameWorld.Log("处理多选礼包物品类型")
-#        selectMoreItem = ReadChConfig.GetEvalChConfig("SelectMoreItem")
-#        #GameWorld.Log("读取到的多选礼包物品配置信息=%s"%selectMoreItem)
-#        itemSetInfo = selectMoreItem.get(itemID, None)
-#        if not itemSetInfo:
-#            GameWorld.ErrLog("多选礼包,没有找到对应物品的配置信息,物品ID:%s"%itemID)
-#            return
-#        if selectIndex < 0 or selectIndex >= len(itemSetInfo):
-#            GameWorld.ErrLog("多选礼包,选择索引越界,物品ID:%s 选择索引:%s"%(itemID, selectIndex))
-#            return
-#        itemSetInfo = itemSetInfo[selectIndex]
-#        needGold, itemInfoList = itemSetInfo
-#        useMoneyInfo = "UseSpecialItem_SelectMore"
-#    #GameWorld.Log("needGold=%s  itemInfoList=%s"%(needGold, itemInfoList))
-#    
-#    #钻石不足
-#    if not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needGold):
-#        GameWorld.ErrLog("钻石不足")
-#        return
-#    #背包剩余空间
-#    packSpace = ItemControler.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)
-#    if packSpace < len(itemInfoList):
-#        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
-#        GameWorld.ErrLog("背包空间不足")
-#        return
-#    #给物品
-#    for itemInfo in itemInfoList:
-#        newItemId, itemCount, bind, isAppoint = itemInfo
-#        makeItemID = newItemId
-#        #是定制物品
-#        if isAppoint:
-#            appointItemList = PyMapTable.GetPyMapTable("AppointItemList")   #定制物品列表
-#            itemData = appointItemList.GetRecord("ItemIndex", str(newItemId))
-#            if not itemData:
-#                GameWorld.ErrLog("使用特殊运营物品 找不到定制物品数据, itemID = %s"%newItemId)
-#                return False
-#            
-#            if len(itemData) != 1:
-#                GameWorld.ErrLog("使用特殊运营物品 定制表配置的数据有误, itemID = %s"%newItemId)
-#                return False
-#            
-#            itemDictData = itemData[0]
-#            makeItemID = int(itemDictData['ItemID'])
-#            itemCount = 1
-#            itemDictData['IsBind'] = isBind
-#            if not ItemControler.GivePlayerEquip(curPlayer, itemDictData, False, 
-#                                                 [IPY_GameWorld.rptItem]):
-#                GameWorld.ErrLog("使用特殊运营物品 给予定制物品失败")
-#                return
-#        else:
-#            #给予物品
-#            if not ItemControler.GivePlayerItem(curPlayer, newItemId, itemCount, isBind, 
-#                                         [IPY_GameWorld.rptItem], False):
-#                GameWorld.ErrLog("使用特殊运营物品 给予普通物品失败")
-#                return
-#        #PlayerControl.NotifyCode(curPlayer, "ObtainRes01", [makeItemID, itemCount])
-#    
-#    #扣除物品
-#    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-#    #扣除物品
-#    ItemCommon.ReduceItem(curPlayer, itemPack, [itemIndex], 1, False)
-#    
-#    #扣金钱
-#    addDataDict = {"SpecialItemType":specialItemType, "UseItemID":itemID, "SelectIndex":selectIndex, ChConfig.Def_Cost_Reason_SonKey:itemName}
-#    PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needGold, ChConfig.Def_Cost_GiftBag, addDataDict)
-    return
 
 #// A3 07 过期物品续费 #tagCMItemRenew
 #
@@ -2067,6 +2002,37 @@
         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
\ No newline at end of file
+    return
+
+#// A3 08 物品过期 #tagCMItemTimeout
+#
+#struct    tagCMItemTimeout
+#
+#{
+#    tagHead        Head;
+#    BYTE        PackType;        //背包类型
+#    BYTE        ItemIndex;        //物品在背包中索引
+#};
+def OnItemTimeout(index, clientData, tick):
+    packType = clientData.PackType
+    itemIndex = clientData.ItemIndex
+    
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    backPack = curPlayer.GetItemManager().GetPack(packType)
+    if not backPack:
+        return
+    curItem = backPack.GetAt(itemIndex)
+    if not ItemCommon.CheckItemCanUse(curItem):
+        GameWorld.DebugLog("物品不存在!")
+        return
+    
+    # 拍品
+    if ItemControler.GetIsAuctionItem(curItem):
+        GameWorld.DebugLog("玩家拍品过期: itemID=%s" % (curItem.GetItemTypeID()), curPlayer.GetPlayerID())
+        ItemControler.SetIsAuctionItem(curItem, False, curPlayer)
+        return
+    
+    
+    return

--
Gitblit v1.8.0