| | |
| | | import ItemControler
|
| | | import ItemCommon
|
| | | import ShareDefine
|
| | | import DataRecordPack
|
| | | import PlayerCoat
|
| | | import PlayerGatherSoul
|
| | | import PlayerRune
|
| | | import IpyGameDataPY
|
| | | import NPCCommon
|
| | |
| | | #@remarks 远程执行NPC功能
|
| | | def FuncDirectCall(curPlayer, responseType, funcAnswer, tick, clientData=None):
|
| | | #远程事件,状态统一判断
|
| | | if not FunctionNPCCommon.CheckPlayerCanStateEvent(curPlayer):
|
| | | #退出回包
|
| | | SyncMakeItemRefuse(curPlayer, funcAnswer)
|
| | | return
|
| | | #if not FunctionNPCCommon.CheckPlayerCanStateEvent(curPlayer):
|
| | | # #退出回包
|
| | | # SyncMakeItemRefuse(curPlayer, funcAnswer)
|
| | | # return
|
| | |
|
| | | callFunc = GameWorld.GetExecFunc(EventSrc, "%s.%s"%(responseType, funcAnswer))
|
| | |
|
| | |
| | | return GameWorld.GetPsycoFunc(callFunc)(curPlayer, tick)
|
| | |
|
| | | #===============================================================================
|
| | | # //08 03 玩家购买物品#tagCBuyItemList
|
| | | # tagCBuyItemList * GettagCBuyItemList();
|
| | | # |
| | | # class IPY_CBuyItemList
|
| | | # {
|
| | | # public:
|
| | | # |
| | | # int GetBuyItemIndex();
|
| | | # //购买数量
|
| | | # int GetBuyCount();
|
| | | # };
|
| | | #===============================================================================
|
| | | ##客户端封包响应//08 03 玩家购买物品#tagCBuyItemList
|
| | | #@param index 玩家索引
|
| | | #@param tick 时间戳
|
| | | #@return 返回值无意义
|
| | | #@remarks 客户端封包响应//08 03 玩家购买物品#tagCBuyItemList
|
| | | def BuyItem(index, tick):
|
| | | #得到玩家的对象
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | |
|
| | | result = FuncDirectCall(curPlayer, "FunctionNPCCommon", "BuyItem", tick)
|
| | |
|
| | | if result:
|
| | | PlayerControl.NotifyCode(curPlayer, "BuyResSucceed")
|
| | | |
| | | return
|
| | |
|
| | |
|
| | | #===============================================================================
|
| | | # //A2 03 回购物品 #tagCMBuyItemBack
|
| | | #
|
| | | # struct tagCMBuyItemBack
|
| | |
| | | # @return None
|
| | | def BuyItemBack(index, clientPack, tick):
|
| | | #得到玩家的对象
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | FunctionNPCCommon.BuyItemBack(curPlayer, clientPack, tick)
|
| | | return
|
| | |
|
| | | #===============================================================================
|
| | | # //08 06 卖物品#tagCPlayerSellItem
|
| | | # tagCPlayerSellItem * GettagCPlayerSellItem();
|
| | | # |
| | | # class IPY_CPlayerSellItem
|
| | | # {
|
| | | # public:
|
| | | # //背包类型
|
| | | # int GetPackType();
|
| | | # //物品索引
|
| | | # int GetItemIndex();
|
| | | # };
|
| | | #===============================================================================
|
| | | ##客户端封包响应//08 06 卖物品#tagCPlayerSellItem
|
| | | #@param index 玩家索引
|
| | | #@param tick 时间戳
|
| | | #@return 返回值无意义
|
| | | #@remarks 客户端封包响应//08 06 卖物品#tagCPlayerSellItem
|
| | | def SellItem(index, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | FuncDirectCall(curPlayer, "FunctionNPCCommon", "SellItem", tick)
|
| | | #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | #FunctionNPCCommon.BuyItemBack(curPlayer, clientPack, tick)
|
| | | return
|
| | |
|
| | | #===============================================================================
|
| | |
| | | # @return 无返回值
|
| | | # @remarks 07 3C通用背包操作#tagCBackpackOperate
|
| | | def BackpackOperate(index, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | sendPack = IPY_GameWorld.IPY_CBackpackOperate()
|
| | | pack_SrcBackpack = sendPack.GetSrcBackpack()
|
| | | pack_DesBackPack = sendPack.GetDesBackPack()
|
| | | pack_SrcIndex = sendPack.GetSrcIndex()
|
| | | pack_DestIndex = sendPack.GetDestIndex()
|
| | | pack_ItemCount = sendPack.GetCount()
|
| | | |
| | | FunctionNPCCommon.BackpackOperate(curPlayer, pack_SrcBackpack, pack_DesBackPack, |
| | | pack_SrcIndex, pack_DestIndex, pack_ItemCount, tick)
|
| | | # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | # sendPack = IPY_GameWorld.IPY_CBackpackOperate()
|
| | | # pack_SrcBackpack = sendPack.GetSrcBackpack()
|
| | | # pack_DesBackPack = sendPack.GetDesBackPack()
|
| | | # pack_SrcIndex = sendPack.GetSrcIndex()
|
| | | # pack_DestIndex = sendPack.GetDestIndex()
|
| | | # pack_ItemCount = sendPack.GetCount()
|
| | | # |
| | | # FunctionNPCCommon.BackpackOperate(curPlayer, pack_SrcBackpack, pack_DesBackPack, |
| | | # pack_SrcIndex, pack_DestIndex, pack_ItemCount, tick)
|
| | | return
|
| | | #---------------------------------------------------------------------
|
| | | #===============================================================================
|
| | |
| | | # 符印交换
|
| | | if PlayerRune.SwitchRune(curPlayer, pack_SrcBackpack, pack_DesBackPack, pack_SrcIndex, pack_DestIndex):
|
| | | return
|
| | | # 聚魂交换
|
| | | if PlayerGatherSoul.SwitchGatherSoul(curPlayer, pack_SrcBackpack, pack_DesBackPack, pack_SrcIndex, pack_DestIndex):
|
| | | return
|
| | |
|
| | | #ʱװ
|
| | | if PlayerCoat.SwitchCoat(curPlayer, pack_SrcBackpack, pack_DesBackPack, pack_SrcIndex, pack_DestIndex):
|
| | | return
|
| | |
|
| | | FunctionNPCCommon.PackItemExchange(curPlayer, pack_SrcBackpack, pack_DesBackPack, |
| | | pack_SrcIndex, pack_DestIndex, tick)
|
| | | #FunctionNPCCommon.PackItemExchange(curPlayer, pack_SrcBackpack, pack_DesBackPack, |
| | | # pack_SrcIndex, pack_DestIndex, tick)
|
| | | return
|
| | |
|
| | | #===============================================================================
|
| | |
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | pack = IPY_GameWorld.IPY_COpenPackCount()
|
| | | packType = pack.GetPackType()
|
| | | if packType not in ChConfig.Def_Type_CanBuyPack_PlayerDict.keys():
|
| | | return
|
| | | |
| | | buyCount = pack.GetCount()
|
| | | #buyCount = pack.GetCount()
|
| | | __DoOpenPackCount(curPlayer, packType)
|
| | | return
|
| | |
|
| | | #已购买格子数
|
| | | keyName = ChConfig.Def_Type_CanBuyPack_PlayerDict[packType][ChConfig.Def_PlayerPackDict_Index_Key]
|
| | | curGridCnt = curPlayer.NomalDictGetProperty(keyName) |
| | | |
| | | #默认格子数
|
| | | initCnt = ItemCommon.GetPackInitCount(packType)
|
| | | def __DoOpenPackCount(curPlayer, packType):
|
| | | costMoneyTypeDict = IpyGameDataPY.GetFuncEvalCfg("OpenPack", 1, {})
|
| | | costMoneyValueDict = IpyGameDataPY.GetFuncEvalCfg("OpenPack", 2, {})
|
| | | openGridListDict = IpyGameDataPY.GetFuncEvalCfg("OpenPack", 3, {})
|
| | | if str(packType) not in costMoneyTypeDict or str(packType) not in costMoneyValueDict or str(packType) not in openGridListDict:
|
| | | GameWorld.ErrLog("该背包不可购买! packType=%s" % packType)
|
| | | return
|
| | | moneyType = costMoneyTypeDict[str(packType)]
|
| | | costValueList = costMoneyValueDict[str(packType)]
|
| | | openGridList = openGridListDict[str(packType)]
|
| | |
|
| | | curPack = curPlayer.GetItemManager().GetPack(packType)
|
| | | curPackMaxCnt = curPack.GetMaxCount()
|
| | | openAnonCnt = initCnt + curGridCnt + buyCount
|
| | | initCnt = ItemCommon.GetPackInitCount(packType)
|
| | | alreadyOpenCnt = ItemCommon.GetPackOpenItemCnt(curPlayer, packType)
|
| | | canOpenGridCnt = curPackMaxCnt - initCnt - alreadyOpenCnt
|
| | |
|
| | | if curPackMaxCnt < openAnonCnt:
|
| | | nextBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_PackBuyCnt % packType) + 1
|
| | | nextOpenCnt = openGridList[nextBuyCnt - 1] if len(openGridList) >= nextBuyCnt else openGridList[-1]
|
| | | moneyCnt = costValueList[nextBuyCnt - 1] if len(costValueList) >= nextBuyCnt else costValueList[-1]
|
| | | |
| | | if canOpenGridCnt < nextOpenCnt:
|
| | | #数量超过最大格子数
|
| | | GameWorld.DebugLog("购买背包格子,数量超过最大格子数!packType=%s,buyCount=%s" % (packType, buyCount))
|
| | | return
|
| | | |
| | | isBuyOK, costMoneyList = DoOpenGrid(curPlayer, curGridCnt, packType, buyCount)
|
| | | if not isBuyOK:
|
| | | GameWorld.DebugLog("购买背包格子,数量超过最大格子数!packType=%s,initCnt=%s,alreadyOpenCnt=%s,已购买次数=%s,curPackMaxCnt=%s,canOpenGridCnt=%s < %s" |
| | | % (packType, initCnt, alreadyOpenCnt, nextBuyCnt - 1, curPackMaxCnt, canOpenGridCnt, nextOpenCnt))
|
| | | return
|
| | |
|
| | | #fromIndex, toIndex = curGridCnt + 1, curGridCnt + buyCount |
| | | # GameWorld.Log("fromIndex=%s toIndex=%s"%(fromIndex, toIndex))
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, keyName, curGridCnt + buyCount)
|
| | | infoDict = {"BuyCount":nextBuyCnt, ChConfig.Def_Cost_Reason_SonKey:packType}
|
| | | if not PlayerControl.PayMoney(curPlayer, moneyType, moneyCnt, ChConfig.Def_Cost_BuyPack, infoDict, 1):
|
| | | return
|
| | |
|
| | | if packType == IPY_GameWorld.rptItem:
|
| | | #背包刷新
|
| | | PlayerControl.Init_ItemPack(curPlayer)
|
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_671654")
|
| | | #PlayerControl.SyncOnLineTimeTotal(curPlayer)
|
| | | #PlayerControl.SyncOnLineTimeLastOpenPack(curPlayer, packType)
|
| | | |
| | | |
| | | elif packType == IPY_GameWorld.rptWarehouse:
|
| | | #仓库刷新
|
| | | PlayerControl.Init_Warehouse(curPlayer)
|
| | | |
| | | else:
|
| | | #收纳柜刷新
|
| | | PlayerControl.Init_CabinetCountByType(curPlayer, packType)
|
| | | |
| | | DataRecordPack.DR_OpenPackCount(curPlayer, packType, buyCount, curPlayer.NomalDictGetProperty(keyName))
|
| | | |
| | | if costMoneyList:
|
| | | #消费记录
|
| | | for moneyType, money in costMoneyList:
|
| | | GameWorld.Login_Interface_GoldRec(curPlayer, 0, 1, 'BuyPackGrid', moneyType, money)
|
| | |
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_PackBuyCnt % packType, nextBuyCnt)
|
| | | PlayerControl.Init_PackCount(curPlayer, packType)
|
| | | ItemCommon.SyncPackBuyCnt(curPlayer, packType)
|
| | | return
|
| | |
|
| | | ##开启格子扣道具钻石
|
| | | # @param curPlayer 玩家对象
|
| | | # @param buyMoney 钻石消耗
|
| | | # @param packType 背包类型
|
| | | # @param curPack 物品管理器
|
| | | # @param buyPackMoneyType 货币类型
|
| | | # @param buyCount 购买格子数
|
| | | # @return None 是否购买成功, 玩家是否有钱款
|
| | | def DoOpenGrid(curPlayer, curGridCnt, packType, buyCount):
|
| | | curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
| | | |
| | | itemId = IpyGameDataPY.GetFuncCfg('OpenBagItem')
|
| | | itemCntFormula = IpyGameDataPY.GetFuncCompileCfg('OpenBagItem', 2)
|
| | | buyMoney = IpyGameDataPY.GetFuncCfg('OpenBagItem', 3)
|
| | | totalItemCnt = 0
|
| | | for index in range(curGridCnt+1, curGridCnt + buyCount+1):
|
| | | itemcnt = eval(itemCntFormula)
|
| | | totalItemCnt += itemcnt
|
| | | |
| | | hasEnough, indexList, findItemIsBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(itemId, curPack, totalItemCnt)
|
| | | |
| | | needMoney = lackCnt * buyMoney if not hasEnough else 0
|
| | | |
| | |
|
| | | # 需要付钱
|
| | | costMoneyList = []
|
| | | if needMoney > 0:
|
| | | costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, needMoney)
|
| | | if costMoneyList == []:
|
| | | #金钱不足
|
| | | return False, costMoneyList
|
| | | |
| | | #付款
|
| | | for moneyType, moneyCnt in costMoneyList:
|
| | | infoDict = {"BuyCount":buyCount, ChConfig.Def_Cost_Reason_SonKey:packType}
|
| | | if not PlayerControl.PayMoney(curPlayer, moneyType, moneyCnt, ChConfig.Def_Cost_BuyPack, infoDict, 1):
|
| | | return False, costMoneyList
|
| | | |
| | | # 扣道具
|
| | | delCnt = max(0, totalItemCnt - lackCnt) # 实际扣除的个数
|
| | | if indexList:
|
| | | ItemCommon.ReduceItem(curPlayer, curPack, indexList, delCnt, True)
|
| | | |
| | | return True, costMoneyList
|
| | |
|
| | | #===============================================================================
|
| | | #//A2 04 请求打开远程仓库 #tagCMOpenLongWarehouse
|