#!/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 ÄúʧȥÁË<Info Type="Item" Name="Name" ID="{%S1%}"/>{%S2%}¸ö  
 | 
        PlayerControl.NotifyCode(openShopPlayer, "LostRes", [singItemID, buyCount])  
 | 
        #ObtainRes01 Äú»ñµÃÁË<Info Type="Item" Name="Name" ID="{%S1%}"/>{%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 ÄúʧȥÁË<Info Type="Item" Name="Name" ID="{%S1%}"/>{%S2%}¸ö  
 | 
        PlayerControl.NotifyCode(openShopPlayer, "LostRes", [buyItemTypeID, buyCount])  
 | 
        #ObtainRes01 Äú»ñµÃÁË<Info Type="Item" Name="Name" ID="{%S1%}"/>{%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    <n color="255,255,0">¶Ô²»Æð,ÄúÐèÒª¹ºÂòÎïÊýÁ¿²»×ã,²Ù×÷ÎÞЧ£¡</n>   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  
 |