#!/usr/bin/python
# -*- coding: GBK -*-
#---------------------------------------------------------------------
#
#---------------------------------------------------------------------
##@package PlayerShopItem
# @todo: Íæ¼Ò°Ú̯Âß¼´¦Àí
#
# @author: panwei
# @date 2010-04-28
# @version 1.9
#
# @note: Íæ¼Ò°Ú̯Âß¼´¦Àí
#---------------------------------------------------------------------
# @change: "2010-05-12 18:30" zhengyang Ìí¼Ó×¢ÊÍ
# @change: "2010-06-21 15:54" panwei »Ö¸´°Ú̯¹¦ÄÜ
# @change: "2010-07-16 09:45" panwei °Ú̯ÐÂÔöÑéÖ¤, ÒÆ¶¯Öв»ÄܰÚ̯
# @change: "2011-09-15 16:00" chenxuewei ɾ³ýÎïÆ·Á÷Ïò¼Ç¼Ôö¼ÓÎïÆ·ÊÇ·ñ°ó¶¨
# @change: "2012-06-27 15:30" whx Ôö¼ÓsetCount´íÎóoss¼Ç¼
# @change: "2012-08-10 15:00" zhangxi ÐÞ¸ÄOSS¼Ç¼
# @change: "2013-11-27 20:30" hxp ÐÞ¸ÄÆæ¼£°Ú̯
# @change: "2013-12-10 14:00" hxp Ôö¼ÓÍ˳ö²é¿´°Ú̯Âß¼
# @change: "2015-07-03 16:00" zqx È¥³ýGMÏÞÖÆ
#---------------------------------------------------------------------
"""Version = 2015-07-03 16:00"""
#------------------------------------------------------------------------------
import IPY_GameWorld
import GameWorld
import ChConfig
import PlayerControl
import ItemControler
import PlayerTrade
import ItemCommon
import ReadChConfig
import EventShell
#---------------------------------------------------------------------
#---------------------------------------------------------------------
## 14 01 ¿ªÊ¼°Ú̯#tagCBeginShop
## ·â°ü´¥·¢ ¿ªÊ¼°Ú̯
#  @param index Íæ¼ÒË÷Òý
#  @param tick µ±Ç°Ê±¼ä
#  @return None
#  @remarks º¯ÊýÏêϸ˵Ã÷.
def BeginShopItem(index, tick):
#===============================================================================
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
#    
#    #¼ì²âÍæ¼Ò״̬
#    if not __CheckBeginShopItemPlayerState(curPlayer):
#        #PlayerShop_Lost ¶Ô²»Æð,µ±Ç°×´Ì¬ÎÞ·¨°Ú̯,²Ù×÷ÎÞЧ
#        PlayerControl.NotifyCode(curPlayer , "PlayerShop_Lost")
#        return
#    
#    #GMÎÞ·¨°Ú̯
# #    if GameWorld.IsGM(curPlayer):
# #        PlayerControl.NotifyCode(curPlayer, "GeRen_admin_59724")
# #        return
#    
#    playerShop = curPlayer.GetPlayerShop()
#    
#    if playerShop.GetIsStartShop():
#        #GameWorld.Log("ÒѾÔÚ°Ú̯״̬ÖÐ,Çë½áÊøºóÔÚ¿ªÊ¼")
#        return
#    
# #    if not curPlayer.GetMapBuff().FindBuff(ChConfig.Def_SkillID_ShopItem):
# #        PlayerControl.NotifyCode(curPlayer, "PlayerShop_Lost_AreaError")
# #        #GameWorld.Log("ÎÞ°Ú̯Buff,°Ú̯¿ªÊ¼Ê§°Ü")
# #        return
# 
#    # °Ú̯µØÍ¼ÅжÏ
#    mapID = GameWorld.GetGameWorld().GetMapID()
#    if mapID not in [10000]:
#        PlayerControl.NotifyCode(curPlayer, "GeRen_admin_840854")
#        return
#    
#    # ÅжϰÚ̯µÈ¼¶
#    if not __CheckShopPlayerLV(curPlayer):
#        return
#    
#    sendPack = IPY_GameWorld.IPY_CBeginShop()
#    shopLV = sendPack.GetShopLV()
#    shopName = sendPack.GetShopName()
#    
#    if shopName == '':
#        GameWorld.ErrLog("°Ú̯Ãû×ÖΪ¿Õ" , curPlayer.GetPlayerID())
#        return
#    
# # Ææ¼£²»ÐèÒª°Ú̯ʯ
# #    #»ñµÃÍæ¼Ò×°±¸µÄ
#    itemManager = curPlayer.GetItemManager()
# #    equipPack = itemManager.GetPack(IPY_GameWorld.rptEquip)
# #    shopItem = equipPack.GetAt(IPY_GameWorld.retShopping)
# #    #Èç¹û°Ú̯µÈ¼¶²»Îª1,ÐèÒªÅжÏÊÇ·ñÓаÚ̯ÔöÖµÎïÆ·
# #    if not __CheckShopItem(curPlayer, shopItem, shopLV):
# #        return
#    
# # Ææ¼£²»ÐèÒª°Ú̯µÈ¼¶ÏÞÖÆ°Ú̯¸öÊý
# #    #µ±Ç°Ì¯Î»¿ÉÒÔ°Ú̯µÄ×î´óÊýÁ¿
# #    canShopItemMaxCount = 0
# #    #¼ì²é°Ú̯µÈ¼¶
# #    if ChConfig.Def_ShopItem_Count.has_key(shopLV):
# #        #¿ÉÒÔ°Ú̯µÄÊýÁ¿
# #        canShopItemMaxCount = ChConfig.Def_ShopItem_Count.get(shopLV)
# #    else:
# #        GameWorld.ErrLog("°Ú̯µÈ¼¶´íÎó,shopLV = %s" % (shopLV) , curPlayer.GetPlayerID())
# #        return
#    
#    canShopItemMaxCount = 12 # Ôݶ¨12¸ñ£¬ÏÈдËÀ
#    #»ñµÃ°Ú̯ÎïÆ·µÄÏúÊÛÊýÁ¿
#    shopItemCount = sendPack.GetSellCount()
#    
#    if shopItemCount <= 0 or shopItemCount > canShopItemMaxCount:
#        GameWorld.ErrLog("°Ú̯ÊýÁ¿,·â°üÒì³£ = %s,maxCount = %s" % (shopItemCount, canShopItemMaxCount) , curPlayer.GetPlayerID())
#        return
#    
#    #Íæ¼Ò±³°ü×î´óÊýÁ¿
#    itemPack = itemManager.GetPack(IPY_GameWorld.rptItem)
#    itemIndexList = []
#    
#    curItemDict = {}
#    for i in range(shopItemCount):
#        sendPackItem = sendPack.GetSellItemIndex(i)
#        
#        if sendPackItem == None:
#            GameWorld.ErrLog("°Ú̯·â°üÎïÆ·Îª¿Õ,itemIndex = %s" % (i) , curPlayer.GetPlayerID())
#            return
#            
#        itemIndex = sendPackItem.GetItemIndex()
#        item = itemPack.GetAt(itemIndex)
#        
#        if not PlayerTrade.CheckTradeItem(curPlayer, item):
#            GameWorld.ErrLog("°Ú̯ÎïÆ·´íÎó,itemIndex = %s" % (itemIndex) , curPlayer.GetPlayerID())
#            return
#        
#        silver = sendPackItem.GetSilver()
#        
#        if silver < 1:
#            GameWorld.ErrLog("°Ú̯ÎïÆ·ÊÛ¼Û, index = %s, silver = %s" % (itemIndex, silver) , curPlayer.GetPlayerID())
#            return
#        
#        if curItemDict.has_key(itemIndex):
#            GameWorld.ErrLog("°Ú̯ÎïÆ·´íÎó, ÓÐÖØ¸´ÎïÆ·, itemIndex = %s" % (itemIndex) , curPlayer.GetPlayerID())
#            return
#        
#        curItemDict[itemIndex] = silver
#        itemIndexList.append([itemIndex, silver])
#    
#    for i in range(len(itemIndexList)):
#        # int itemIndex, DWORD    Gold,DWORD    GoldPaper, DWORD    Silver,DWORD    SilverPaper
#        playerShop.AddSellItem(itemIndexList[i][0], 0, 0, itemIndexList[i][1], 0)
#        #½«±³°üÖÐ,¶ÔÓ¦µÄÎïÆ·Ëø¶¨
#        #GameWorld.Log('½«±³°üÖÐ,¶ÔÓ¦µÄÎïÆ·Ëø¶¨ %d'%itemIndexList[i][0])
#        item = itemPack.GetAt(itemIndexList[i][0])
#        item.SetIsEventLocked(True)
#        
#    #¿Û°Ú̯ʯÄ;Ã(¸ÄΪ½áÊøÊ±ºò¿ÛÄ;Ã)
#    #__ReduceShopItem(curPlayer, shopItem, shopLV)
#        
#    playerShop.SetShopName(shopName)
#    playerShop.SetShopLV(shopLV)
#    playerShop.SetIsStartShop(True)
#    #Ëø×¡Íæ¼Ò
#    #curPlayer.BeginEvent()
#    #¿ªÊ¼°Ú̯
#    curPlayer.View_StartShop()
#    #Âò¼ÒµêÆÌË¢ÐÂ
#    curPlayer.Sync_ShopItem()
#    PlayerControl.NotifyCode(curPlayer, "GeRen_admin_293296")
#    GameWorld.Log("¿ªÊ¼°Ú̯³É¹¦" , curPlayer.GetPlayerID())
#===============================================================================
    return
#---------------------------------------------------------------------
##¼ì²âÍæ¼Òµ±Ç°×´Ì¬ÊÇ·ñ¿ÉÒÔ°Ú̯
# @param curPlayer Íæ¼ÒʵÀý
# @return ²¼¶ûÖµ
# @remarks ¼ì²âÍæ¼Òµ±Ç°×´Ì¬ÊÇ·ñ¿ÉÒÔ°Ú̯
def __CheckBeginShopItemPlayerState(curPlayer):
    
    if curPlayer.GetPlayerAction() not in ChConfig.Def_ShopItem_PlayerState:
        return False
# Ææ¼£Åܶ¯ÖлòÆï×øÆïÒà¿É°Ú̯
#    if curPlayer.GetPlayerVehicle() != IPY_GameWorld.pvNull:
#        return False
#    
#    if curPlayer.IsMoving():
#        return False
    
    return True
#---------------------------------------------------------------------
## ½áÊø°Ú̯
#  @param index Íæ¼ÒË÷Òý
#  @param tick µ±Ç°Ê±¼ä
#  @return None
#  @remarks º¯ÊýÏêϸ˵Ã÷.
def EndShop(index, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    #sendPack = IPY_GameWorld.IPY_CEndShop()
    playerShop = curPlayer.GetPlayerShop()
    
    if not playerShop.GetIsStartShop():
        GameWorld.ErrLog("EndShop -> ²»ÔÚ°Ú̯״̬" , curPlayer.GetPlayerID())
        return
    
    DoExitShop(curPlayer , playerShop)
    #Ö÷¶¯½áÊøÊ¼þ
    curPlayer.ExitEvent()
    #Çå¿ÕÒÆ¶¯´ÎÊý
    GameWorld.ClearPlayerPosCount(curPlayer)
    return
#---------------------------------------------------------------------
## 14 03 ²é¿´Ì¯Î»#tagCWatchShop
## ²é¿´Ì¯Î»
#  @param index Íæ¼ÒË÷Òý
#  @param tick µ±Ç°Ê±¼ä
#  @return None
#  @remarks º¯ÊýÏêϸ˵Ã÷.
def WatchShop(index, tick):
    watchPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    watchPlayerShop = watchPlayer.GetPlayerShop()
    
# Ææ¼£ÈκÎʱºò¶¼Äܲ鿴̯λ    
#    if watchPlayer.GetPlayerAction() not in ChConfig.Def_ShopItem_PlayerState:
#        #GameWorld.Log("Ö»ÓпÕÏÐ״̬²ÅÄܲ鿴")
#        return
    
    #GMÎÞ·¨¹ºÂòÎïÆ·
#    if GameWorld.IsGM(watchPlayer):
#        PlayerControl.NotifyCode(watchPlayer, "GeRen_admin_59724")
#        return
    
    sendPack = IPY_GameWorld.IPY_CWatchShop()
    playerID = sendPack.GetPlayerID()
    
    # Í˳ö²é¿´°Ú̯
    if playerID <= 0:
        EventShell.ExitWatchShopItem(watchPlayer)
        return
    
    openShopPlayer = GameWorld.GetObj(playerID, IPY_GameWorld.gotPlayer)
    
    if openShopPlayer == None:
        return
    
    # ÅжÏÍæ¼Ò¼ä¾àÀë
    if not __CheckShopItemDist(watchPlayer, openShopPlayer):
        GameWorld.DebugLog("WatchShop dist error: shopPlayID=%s" % playerID, watchPlayer.GetPlayerID())
        return
    
    playerShop = openShopPlayer.GetPlayerShop()
    
    if not __CheckopenShopPlayer(watchPlayer, openShopPlayer, playerShop):
        return
    
    #Ìí¼Ó²é¿´Õâ¸ö̯λµÄÍæ¼Ò
    playerShop.AddWatchPlayer(watchPlayer)
    #Ìí¼Ó²é¿´¶ÔÏó
    watchPlayer.SetActionObj(openShopPlayer)
    #Ëø×¡Íæ¼Ò
    watchPlayer.BeginEvent()
    #ÉèÖÃÍæ¼Òµ±Ç°×´Ì¬Îª²é¿´Ì¯Î»×´Ì¬
    watchPlayerShop.SetIsWatchingShop(1)
    #¸æËß̯λÐÅÏ¢
    watchPlayer.Sync_WatchShop(openShopPlayer)
    return
#---------------------------------------------------------------------
## 14 04 ¹ºÂòÎïÆ·#tagCBuyItem
## ¹ºÂòÎïÆ·
#  @param index Íæ¼ÒË÷Òý
#  @param tick µ±Ç°Ê±¼ä
#  @return None
#  @remarks º¯ÊýÏêϸ˵Ã÷.
def BuyItem(index, tick):
    watchPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    
    # ÅжϹºÂòµÈ¼¶
    if not __CheckShopPlayerLV(watchPlayer):
        PlayerControl.NotifyCode(watchPlayer, "GeRen_chenxin_93493")
        return
    
    watchPlayerShop = watchPlayer.GetPlayerShop()
    #²»Ôڲ鿴״̬
    if not watchPlayerShop.GetIsWatchingShop():
        GameWorld.Log("BuyItem error: watchPlayer is not in watch state!", watchPlayer.GetPlayerID())
        return
    
    if ItemControler.GetItemPackSpace(watchPlayer, IPY_GameWorld.rptItem) < 1:
        #Task_WinLost_RoomLack02 ÄúµÄ±³°ü¿Õ¼ä²»×ã,ÇëÕûÀí±³°üºóÔÙÀ´
        PlayerControl.NotifyCode(watchPlayer, "Task_WinLost_RoomLack02")
        return
    
    sendPack = IPY_GameWorld.IPY_CBuyItem()
    shopItemIndex = sendPack.GetItemIndex()
    openShopPlayer = watchPlayer.GetActionPlayer()
    
    if openShopPlayer == None :
        GameWorld.Log("BuyItem -> ÎÞ¶ÔÏó" , watchPlayer.GetPlayerID())
        return
    
    # ÅжÏÂòÂôË«·½¾àÀë
    if not __CheckShopItemDist(watchPlayer, openShopPlayer):
        GameWorld.Log("BuyItem dist error: shopPlayID=%s" % openShopPlayer.GetPlayerID(), watchPlayer.GetPlayerID())
        return
    
    playerShop = openShopPlayer.GetPlayerShop()
    
    if not playerShop.GetIsStartShop():
        GameWorld.Log("BuyItem ->Ä¿±ê²»ÔÚ°Ú̯״̬" , watchPlayer.GetPlayerID())
        return
    
    openShopPlayerPack = openShopPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
        
    shopItem = playerShop.GetSellItemAt(shopItemIndex)
    
    if shopItem == None:
        GameWorld.Log("BuyItem ->Î޴˰Ú̯ÎïÆ· = %s" % (shopItemIndex) , watchPlayer.GetPlayerID())
        return
    
    buyItem = openShopPlayerPack.GetAt(shopItem.GetItemIndex())
    
    buyCount = sendPack.GetItemCount()
    
    buyItemMaxCount = buyItem.GetCount()
    
    # ¼ì²é¹ºÂòÎïÆ·ÊýÁ¿
    if not __CheckBuyItem(watchPlayer, buyItem, buyCount, buyItemMaxCount):
        return
    
    costMoney = shopItem.GetSilver() * buyCount
    payType = IPY_GameWorld.TYPE_Price_Silver_Money
    
    # Åж϶Է½½ðÇ®ÉÏÏÞ
    if PlayerControl.GetSilver(openShopPlayer) + costMoney > ChConfig.Def_PlayerTotalMoney_Silver:
        # ¶Ô²»Æð£¬ÄúЯ´øµÄ½ðÇ®ÒѾ´ïÉÏÏÞ,²Ù×÷ÎÞЧ
        # PlayerControl.NotifyCode(openShopPlayer, "GeRen_chenxin_609765")
        #GeRen_admin_917284 ¶Ô²»Æð£¬Ä¿±êÉíÉÏЯ´øµÄ½ðÇ®ÒѾ´ïÉÏÏÞ,²Ù×÷ÎÞЧ 
        PlayerControl.NotifyCode(watchPlayer, "GeRen_admin_917284")
        return
    
    #¸¶Ç®
    infoDict = {ChConfig.Def_Cost_Reason_SonKey:buyItem.GetItemTypeID()}
    if not PlayerControl.PayMoney(watchPlayer, payType, costMoney, ChConfig.Def_Cost_BuyStallItem, infoDict):
        GameWorld.ErrLog("BuyItem money not enough!!" , watchPlayer.GetPlayerID())
        return
    
    #ÊÕÇ®
    addDataDict = {ChConfig.Def_Give_Reason_SonKey:buyItem.GetItemTypeID()}
    PlayerControl.GiveMoney(openShopPlayer, payType, costMoney, ChConfig.Def_GiveMoney_StallItem, addDataDict)
    
    watchPlayerID = watchPlayer.GetPlayerID()
    openShopPlayerID = openShopPlayer.GetPlayerID()
    
    #-------------------------------¼ì²éÍê±Ï, Âß¼¿ªÊ¼, ÒѾ¸¶Ç®
    #¹ã²¥²é¿´Õâ¸ö̯λµÄÍæ¼ÒÐÅÏ¢
    openShopPlayer.View_BuyShopItemToAllShopBuyer(watchPlayer.GetPlayerID(),
                                                      shopItemIndex, buyCount)
    
    watchPlayerIC = ItemControler.PlayerItemControler(watchPlayer)
    buyItemTypeID = buyItem.GetItemTypeID()
    
    #È«²¿Âò×ß
    if buyCount == buyItemMaxCount:
        #½«Ö÷½ÇÎïÆ·,ת»»Îªµ¥¶ÀÎïÆ·
        singItem = buyItem.GetItem()
        singItemID = singItem.GetItemTypeID()
        singItemGUID = singItem.GetGUID()
        singItemCount = singItem.GetCount()
        
        #Ïêϸ¼Ç¼װ±¸ÐÅÏ¢
        equipNote = ItemCommon.GetItemNoteDict(singItem)
        #µêÆÌɾ³ýÕâ¸öÎïÆ·
        playerShop.DeleteShopItem(shopItemIndex)
        #ɾ³ýÍæ¼ÒÕâ¸ö¸ñ×ӵĶ«Î÷
        buyItem.Wipe()
        #Êä³öϵͳÌáʾ
        #LostRes ÄúʧȥÁË{%S2%}¸ö
        PlayerControl.NotifyCode(openShopPlayer, "LostRes", [singItemID, buyCount])
        #ObtainRes01 Äú»ñµÃÁË{%S2%}¸ö
        PlayerControl.NotifyCode(watchPlayer, "ObtainRes01", [singItemID, buyCount])
        
        if not watchPlayerIC.PutInItem(IPY_GameWorld.rptItem, singItem):
            GameWorld.Log("###Òì³£ÐÅÏ¢,·ÅÈëÍæ¼Ò±³°üʧ°Ü playerID = %s" % (watchPlayerID) , openShopPlayerID , watchPlayerID)
            return False
        
    #Âò²¿·Ö
    else:
        #´´½¨Ò»¸öÎïÆ··ÅÈë
        newItem = ItemCommon.CreateSingleItem(buyItemTypeID)
        
        if newItem == None:
            GameWorld.Log("###Òì³£ÐÅÏ¢,Íæ¼Ò = %sÉÌµê ´´½¨ÎïÆ·Ê§°Ü = %s" % (openShopPlayerID , buyItemTypeID), openShopPlayerID , watchPlayerID)
            return
        
        ItemControler.SetItemCount(buyItem, buyItemMaxCount - buyCount,
                                   openShopPlayer.GetPlayerID(), openShopPlayer.GetAccID(),
                                   openShopPlayer.GetPlayerName())
        singItem = buyItem.GetItem()
        #Ïêϸװ±¸ÐÅÏ¢
        newEquipNote = ItemCommon.GetItemNoteDict(newItem)
        
        #Êä³öϵͳÌáʾ
        #LostRes ÄúʧȥÁË{%S2%}¸ö
        PlayerControl.NotifyCode(openShopPlayer, "LostRes", [buyItemTypeID, buyCount])
        #ObtainRes01 Äú»ñµÃÁË{%S2%}¸ö
        PlayerControl.NotifyCode(watchPlayer, "ObtainRes01", [buyItemTypeID, buyCount])
        ItemControler.SetItemCount(newItem, buyCount,
                                   watchPlayer.GetPlayerID(), watchPlayer.GetAccID(),
                                   watchPlayer.GetPlayerName())
        watchPlayerIC.PutInItem(IPY_GameWorld.rptItem, newItem)
    
    PlayerControl.NotifyCode(openShopPlayer, "GeRen_admin_367906", [buyItemTypeID])
    #Âò¼ÒµêÆÌË¢ÐÂ
    openShopPlayer.Sync_ShopItem()
    return
#---------------------------------------------------------------------
## ¼ì²éÊÇ·ñ¿ÉÒÔ¹ºÂò£¬ÊýÁ¿ÊÇ·ñÒì³£
#  @param curPlayer µ±Ç°Íæ¼Ò
#  @param sellItem ³öÊÛµÄÎïÆ· 
#  @param buyCount ¹ºÂòÊýÁ¿
#  @param buyItemMaxCount ÄܹºÂò×î´óÊýÁ¿
#  @return None or True
#  @remarks º¯ÊýÏêϸ˵Ã÷.
def __CheckBuyItem(curPlayer, sellItem, buyCount, buyItemMaxCount):
    if sellItem == None or sellItem.IsEmpty():
        #GameWorld.Log("Î޴˹ºÂòÎïÆ·")
        return
    
    if buyCount <= 0 or buyCount > buyItemMaxCount:
        #GeRen_admin_774664    ¶Ô²»Æð,ÄúÐèÒª¹ºÂòÎïÊýÁ¿²»×ã,²Ù×÷ÎÞЧ£¡   25  -   -
        PlayerControl.NotifyCode(curPlayer, "GeRen_admin_774664")
        #GameWorld.Log("¹ºÂòÊýÁ¿Òì³£ count = %s"%buyCount)
        return
    
    return True
#---------------------------------------------------------------------
## ¼ì²âÊÇ·ñÓÐÕâ¸öÂô¼Ò
#  @param watchPlayer ¹Û²ìÕߣ¨Ã»Óõ½£©
#  @param openShopPlayer  ³öÊÛÕß
#  @param playerShop 
#  @return None or True
#  @remarks º¯ÊýÏêϸ˵Ã÷.
def __CheckopenShopPlayer(watchPlayer, openShopPlayer , playerShop):
    if openShopPlayer == None:
        GameWorld.DebugLog("²éÎ޴˰ÚÌ¯Íæ¼Ò:shopPlayerID=%s" % openShopPlayer.GetPlayerID(), watchPlayer.GetPlayerID())
        return
    
    if not playerShop.GetIsStartShop():
        GameWorld.DebugLog("°ÚÌ¯Íæ¼Òδ°Ú̯:shopPlayerID=%s" % openShopPlayer.GetPlayerID(), watchPlayer.GetPlayerID())
        return
    
    return True
#---------------------------------------------------------------------
## ¼ì²â°Ú̯ʯ»¹Äܲ»ÄÜÓÃ
#  @param curPlayer µ±Ç°Íæ¼Ò
#  @param shopItem °Ú̯ʯ
#  @param shopLV É̵êµÈ¼¶
#  @return None or True
#  @remarks º¯ÊýÏêϸ˵Ã÷.
def __CheckShopItem(curPlayer, shopItem, shopLV):
    if shopLV == 1:
        return True
    
    if shopItem.IsEmpty():
        #GameWorld.Log("ÎÞ°Ú̯ʯ")
        return
    
    #===========================================================================
    # if shopItem.GetCurDurg() <= 0:
    #    #GameWorld.Log("°Ú̯ʯ,ÎÞÄ;Ã")
    #    return
    #===========================================================================
    
    effIndex = shopItem.GetEffectByIndex(0)
    
    if effIndex.GetEffectID() != ChConfig.Def_Item_Effect_ShopItem or effIndex.GetEffectValue(0) != shopLV:
        #GameWorld.Log("°Ú̯ʯ²»·ûºÏÒªÇó,µÈ¼¶´íÎó")
        return
    
    return True
#---------------------------------------------------------------------
## ÈËÎïµ½É̵êµÄ¾àÀë ÊÇ·ñÔڹ涨¾àÀëÄÚ
#  @param curPlayer
#  @param curTagPlayer
#  @return True or False
#  @remarks º¯ÊýÏêϸ˵Ã÷.
def __CheckShopItemDist(curPlayer, curTagPlayer):
    dist = GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(),
                             curTagPlayer.GetPosX(), curTagPlayer.GetPosY())
    return ChConfig.Def_ShopItem_Dist > dist 
#---------------------------------------------------------------------
## °Ú̯Õ߹رհÚ̯
#  @param curPlayer °Ú̯Õß
#  @param playerShop Íæ¼ÒµÄ̯λ
#  @return None
#  @remarks º¯ÊýÏêϸ˵Ã÷.
def DoExitShop(curPlayer , playerShop):
#===============================================================================
#    GameWorld.Log("DoExitShop -> ½áÊø°Ú̯" , curPlayer.GetPlayerID())
#    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
#    
#    #½«»¹ÔÚÏúÊÛÀ¸Öб³°ü¶ÔÓ¦µÄÎïÆ·½ÓËø
#    for i in range(playerShop.GetSellCount()):
#        sellItem = playerShop.GetSellItemAt(i)
#        
#        if sellItem == None:
#            GameWorld.ErrLog("½áÊø°Ú̯Òì³£,Î޴˰Ú̯ÎïÆ· , index = %s" % i , curPlayer.GetPlayerID())
#            continue
#        
#        roleItemIndex = sellItem.GetItemIndex()
#        roleItem = itemPack.GetAt(roleItemIndex)
#        #Ò»¶¨ÓÐÎïÆ·
#        if roleItem == None or roleItem.IsEmpty():
#            GameWorld.ErrLog("½áÊø°Ú̯Òì³£,Íæ¼Ò½âËøÎïÆ·±³°üindex = %s" % (roleItemIndex) , curPlayer.GetPlayerID())
#            continue
#        
#        roleItem.SetIsEventLocked(False)
#    
#    #½â¿ª²é¿´µ±Ç°Ì¯Î»µÄÍæ¼Ò
#    for i in range(playerShop.GetWatchPlayersCount()):
#        watchPlayer = playerShop.GetWatchPlayersAt(i)
#        
#        if watchPlayer == None:
#            GameWorld.ErrLog("½áÊø°Ú̯Òì³£,²é¿´°ÚÌ¯Íæ¼Ò,ÎÞ´ËÍæ¼Ò,index = %s" % i , curPlayer.GetPlayerID())
#            continue
#        
#        watchPlayer.ExitEvent()
#        
# # Ææ¼£²»ÐèÒª°Ú̯ʯ 
# #    shopItem = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip).GetAt(IPY_GameWorld.retShopping)
# #    #°Ú̯ʯ¿ÛÄ;Ã
# #    __ReduceShopItem(curPlayer, shopItem , playerShop.GetShopLV())
# 
#    #Íæ¼Ò¹ã²¥½áÊø°Ú̯
#    curPlayer.View_CloseShop()
#    #Çå¿Õ²é¿´Õâ¸ö̯λµÄÍæ¼ÒÐÅÏ¢
#    playerShop.ClearWatchPlayer()
#    #Çå¿ÕÉ̵ê
#    playerShop.Clear()
#===============================================================================
    return
#---------------------------------------------------------------------
## °Ú̯ʯ¼õÄ;Ã
#  @param curPlayer Íæ¼Ò
#  @param shopItem °Ú̯ʯ
#  @param shopLV É̵êµÈ¼¶
#  @return None
#  @remarks º¯ÊýÏêϸ˵Ã÷.
#===============================================================================
# def __ReduceShopItem(curPlayer, shopItem , shopLV):
#    if not __CheckShopItem(curPlayer, shopItem, shopLV):
#        GameWorld.Log('###°Ú̯ʯ¿Û³ýÄ;Ãʧ°Ü,ÎÞ·¨²éÕÒ°Ú̯ʯ = %s' % (shopLV) , curPlayer.GetPlayerID())
#        return
#    
#    shopItem.SetCurDurg(shopItem.GetCurDurg() - ChConfig.Def_Endure_Transform)
#    if shopItem.GetCurDurg() == 0 and shopItem.GetNoEndureDisappear():
#        shopItem.Clear()
#        
#    return
#===============================================================================
## ¼ì²é°Ú̯µÈ¼¶
#  @param curPlayer Íæ¼Ò
#  @return None
#  @remarks º¯ÊýÏêϸ˵Ã÷.
def __CheckShopPlayerLV(curPlayer):
    tradeLVLimit = ReadChConfig.GetEvalChConfig("TradeLVLimit")
    if curPlayer.GetLV() < tradeLVLimit:
        return False
    return True