hxp
2020-01-03 866ce280c4c931a34cedd06d86b81019018d4160
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAuctionHouse.py
@@ -20,11 +20,14 @@
import DataRecordPack
import PlayerControl
import ItemControler
import Operate_EquipStar
import ItemCommon
import ChConfig
import ShareDefine
import ChItem
import PlayerActivity
import NPCCommon
import random
import time
#// B5 13 拍卖行上架拍品 #tagCMSellAuctionItem
@@ -43,7 +46,7 @@
    curItem = playerPack.GetAt(itemIndex)
    if curItem.IsEmpty():
        return
    if not curItem.GetIsBind():
    if not ItemControler.GetIsAuctionItem(curItem):
        GameWorld.Log("非拍品,绑定无法上架!", playerID)
        return
    itemGUID = curItem.GetGUID()
@@ -58,7 +61,7 @@
    curTime = int(time.time())
    if curTime - auctionItemCreateTime > IpyGameDataPY.GetFuncCfg("AuctionItem", 1) * 3600:
        GameWorld.DebugLog("拍品已过期,无法上架!auctionItemCreateTime=%s" % (GameWorld.ChangeTimeNumToStr(auctionItemCreateTime)), playerID)
        ChItem.DoLogic_PlayerUseAuctionItem(curPlayer, curItem)
        ItemControler.SetIsAuctionItem(curItem, False, curPlayer)
        return
    
    QueryGameServer_AuctionHouse(playerID, "AddAuctionItemQuery", [itemIndex, itemGUID, itemID])
@@ -77,7 +80,7 @@
    playerID = curPlayer.GetPlayerID()
    itemGUID = clientData.ItemGUID
    biddingPrice = clientData.BiddingPrice
    if not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, biddingPrice):
    if not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, biddingPrice):
        return
    QueryGameServer_AuctionHouse(playerID, "BidAuctionItemQuery", [itemGUID, biddingPrice])
    return
@@ -106,6 +109,9 @@
        itemID = result[0]
        __DoPlayerBidAuctionItem(curPlayer, itemGUID, biddingPrice, itemID)
    
    elif queryType == "EquipStarAutoBuy":
        Operate_EquipStar.GameServer_EquipStarAutoBuy(curPlayer, result)
    return
def __DoPlayerBidAuctionItem(curPlayer, itemGUID, biddingPrice, itemID):
@@ -113,12 +119,14 @@
    
    # 地图只处理扣除竞价价格
    infoDict = {"ItemID":itemID, "ItemGUID":itemGUID, "BiddingPrice":biddingPrice}
    if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, biddingPrice, ChConfig.Def_Cost_AuctionBid, infoDict):
    if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, biddingPrice, ChConfig.Def_Cost_AuctionBid, infoDict):
        return
    
    DR_AuctionHouse(curPlayer, "PlayerPayBid", infoDict)
    playerID = curPlayer.GetPlayerID()
    QueryGameServer_AuctionHouse(playerID, "BidAuctionItem", [itemGUID, biddingPrice])
    PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_AuctionItem, 1)
    return
def __DoPlayerSellAuctionItem(curPlayer, itemIndex, itemGUID, itemID):
@@ -128,7 +136,7 @@
    curItem = playerPack.GetAt(itemIndex)
    if curItem.IsEmpty():
        return
    if not curItem.GetIsBind():
    if not ItemControler.GetIsAuctionItem(curItem):
        GameWorld.Log("非拍品,无法上架!", playerID)
        return
    curItemGUID = curItem.GetGUID()
@@ -185,7 +193,7 @@
        if curPlayer and not familyID:
            ItemCommon.DelItem(curPlayer, curItem, curItem.GetCount())
        else:
            if not curItem.GetIsBind():
            if not ItemControler.GetIsAuctionItem(curItem):
                GameWorld.Log("非拍品,绑定无法上架!", playerID)
                curItem.Clear()
                continue
@@ -198,6 +206,71 @@
        GameWorld.DebugLog("上架拍品: playerID=%s,familyID=%s,%s" % (playerID, familyID, drDict), playerID)
        
    QueryGameServer_AuctionHouse(playerID, "AddAuctionItem", addAuctionItemList)
    if curPlayer:
        PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_AuctionItem, 1)
    return
def DoAddSystemAuctionItem(sysAuctionItemList):
    ''' 上架系统拍品
    @param sysAuctionItemList: [物品ID, [阶,颜色,[部位, ...],是否套装,星级,[可选参数职业, ...]], ...]
    '''
    GameWorld.Log("上架系统拍品: %s" % sysAuctionItemList)
    isAuctionItem = True
    auctionItemList = []
    for sysAuctionItemInfo in sysAuctionItemList:
        itemCount = 1 # 系统拍品,默认上架一个
        if type(sysAuctionItemInfo) == int:
            itemID = sysAuctionItemInfo
        elif type(sysAuctionItemInfo) == list and len(sysAuctionItemInfo) == 2:
            itemID, itemCount = sysAuctionItemInfo
        elif type(sysAuctionItemInfo) == list and len(sysAuctionItemInfo) >= 5:
            classLV, color, placeList, isSuit, star = sysAuctionItemInfo[:5]
            if star:
                # 有星级的代表非境界装备,暂不处理,之后有需要扩展
                randEquipIDList = []
            else:
                itemJobList = sysAuctionItemInfo[5] if len(sysAuctionItemInfo) > 5 else []
                randEquipIDList = NPCCommon.__GetEquipIDList(0, classLV, color, isSuit, placeList, itemJobList, findType="SystemAuctionItem")
            if not randEquipIDList:
                GameWorld.ErrLog("系统拍品找不到可上架的装备! %s" % str(sysAuctionItemInfo))
                continue
            itemID = random.choice(randEquipIDList)
        else:
            GameWorld.ErrLog("系统拍品格式错误,无法上架! %s" % str(sysAuctionItemInfo))
            continue
        ipyData = IpyGameDataPY.GetIpyGameData("AuctionItem", itemID)
        if not ipyData:
            GameWorld.ErrLog("非拍卖物品,无法上架系统拍品! itemID=%s" % (itemID))
            continue
        curItem = ItemControler.GetOutPutItemObj(itemID, itemCount, isAuctionItem)
        if not curItem:
            continue
        auctionItemList.append([curItem])
    if not auctionItemList:
        return
    __DoAddAuctionItem(None, auctionItemList)
    return
#// B5 15 拍卖行下架拍品 #tagCMUnsellAuctionItem
#
#struct    tagCMUnsellAuctionItem
#{
#    tagHead    Head;
#    char    ItemGUID[40];
#};
def OnUnsellAuctionItem(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    playerID = curPlayer.GetPlayerID()
    itemGUID = clientData.ItemGUID
    # 直接发邮件,这里就不验证背包了
#    #验证背包空间
#    if not ItemCommon.CheckPackHasSpace(curPlayer, IPY_GameWorld.rptItem):
#        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
#        return
    QueryGameServer_AuctionHouse(playerID, "UnsellAuctionItem", [itemGUID])
    return
def DR_AuctionHouse(curPlayer, eventName, drDict):