#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # #------------------------------------------------------------------------------- # ##@package Player.PlayerLuckyTreasure # # @todo:ÐÒÔ˼ø±¦ # @author xdh # @date 2019-2-12 19:50 # @version 1.0 # # # ÏêϸÃèÊö: ÐÒÔ˼ø±¦ # #--------------------------------------------------------------------- """Version = 2019-2-12 19:50""" #--------------------------------------------------------------------- import IPY_GameWorld import GameWorld import ChConfig import IpyGameDataPY import PlayerControl import ChPyNetSendPack import NetPackCommon import ShareDefine import PyGameData import ItemControler import ItemCommon def OnLogin(curPlayer): isReset = __CheckPlayerLuckyTreasureAction(curPlayer) if not isReset: actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_LuckyTreasure, {}) # »î¶¯ÖÐͬ²½»î¶¯ÐÅÏ¢ if actCostRebateInfo.get(ShareDefine.ActKey_State): SyncLuckyTreasureInfo(curPlayer) SyncLuckyTreasureResultInfo(curPlayer) return def RefreshLuckyTreasureAction(): __InitLuckyTreasureRateList() playerManager = GameWorld.GetPlayerManager() for i in xrange(playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(i) if not GameWorld.IsNormalPlayer(curPlayer): continue __CheckPlayerLuckyTreasureAction(curPlayer) return def __CheckPlayerLuckyTreasureAction(curPlayer): ## ¼ì²éÍæ¼ÒÐÒÔ˼ø±¦»î¶¯Êý¾ÝÐÅÏ¢ global g_randomWellDict playerID = curPlayer.GetPlayerID() actLuckyTreasureInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_LuckyTreasure, {}) LuckyTreasureID = actLuckyTreasureInfo.get(ShareDefine.ActKey_ID, 0) state = actLuckyTreasureInfo.get(ShareDefine.ActKey_State, 0) #cfgID = actLuckyTreasureInfo.get(ShareDefine.ActKey_CfgID, 0) worldLV = actLuckyTreasureInfo.get(ShareDefine.ActKey_WorldLV, 0) playerLuckyTreasureID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyTreasureID) # Íæ¼ÒÉíÉϵĻID # »î¶¯ID ÏàͬµÄ»°²»´¦Àí if LuckyTreasureID == playerLuckyTreasureID: #GameWorld.DebugLog("ÐÒÔ˼ø±¦»î¶¯ID²»±ä£¬²»´¦Àí£¡", curPlayer.GetPlayerID()) return msgStr = str([ShareDefine.Def_UniversalGameRecType_LuckyTreasure, 2]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'DelUniversalGameRec', msgStr, len(msgStr)) GameWorld.DebugLog("ÐÒÔ˼ø±¦ÖØÖÃ! LuckyTreasureID=%s,playerLuckyTreasureID=%s,state=%s,worldLv=%s" % (LuckyTreasureID, playerLuckyTreasureID, state, worldLV), playerID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasureID, LuckyTreasureID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasureFree, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasurePoint, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasureCnt, 0) SyncLuckyTreasureInfo(curPlayer) SyncLuckyTreasureResultInfo(curPlayer) return True def __InitLuckyTreasureRateList(): global g_itemRateList actLuckyTreasureInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_LuckyTreasure, {}) state = actLuckyTreasureInfo.get(ShareDefine.ActKey_State, 0) cfgID = actLuckyTreasureInfo.get(ShareDefine.ActKey_CfgID, 0) worldLV = actLuckyTreasureInfo.get(ShareDefine.ActKey_WorldLV, 0) if not cfgID or not worldLV or not state: return actIpyData = IpyGameDataPY.GetIpyGameData("ActLuckyTreasure", cfgID) if not actIpyData: return templateID = actIpyData.GetTemplateID() ipyDataList = IpyGameDataPY.GetIpyGameDataList('LuckyTreasureTemplate', templateID) if not ipyDataList: return tWeight = 0 g_itemRateList = [] for ipyData in ipyDataList: worldLVLimit = ipyData.GetWorldLVLimit() if worldLV < worldLVLimit[0] or worldLV > worldLVLimit[1]: continue itemID = ipyData.GetItemID() itemCnt = ipyData.GetItemCnt() isBind = ipyData.GetIsBind() weight = ipyData.GetWeight() tWeight += weight g_itemRateList.append([tWeight, [itemID, itemCnt, isBind]]) return def __GetRandomRateList(): if not g_itemRateList: __InitLuckyTreasureRateList() return g_itemRateList #// AA 08 ¿ªÊ¼ÐÒÔ˼ø±¦ #tagCMStartLuckyTreasure #struct tagCMStartLuckyTreasure #{ # tagHead Head; #}; def OnStartLuckyTreasure(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) actBossRebornInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_LuckyTreasure, {}) state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0) cfgID = actBossRebornInfo.get(ShareDefine.ActKey_CfgID, 0) if not state or not cfgID: return actIpyData = IpyGameDataPY.GetIpyGameData("ActLuckyTreasure", cfgID) if not actIpyData: return hasFree = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyTreasureFree) if hasFree: costMoney = IpyGameDataPY.GetFuncCfg('LuckyAppraisal') if not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costMoney): return # ¼ì²é±³°ü needSpace = 1 packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace) if needSpace > packSpace: PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371") return randomRateList = __GetRandomRateList() if not randomRateList: return greatItem = randomRateList[-1][1] curLuckyPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyTreasurePoint) curLuckyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyTreasureCnt) maxLuckyPoint = actIpyData.GetLuckyPoint() singlePoint = IpyGameDataPY.GetFuncCfg('LuckyAppraisal', 2) if curLuckyPoint + singlePoint >= maxLuckyPoint: giveItem = greatItem newLuckyPoint = 0 else: if curLuckyCnt < IpyGameDataPY.GetFuncCfg('LuckyAppraisal', 3): #ǰX´Î¼ø±¦²»Äܳö´ó½± randomResultList = GameWorld.GetResultByRandomListEx(randomRateList[:-1], 1, []) else: randomResultList = GameWorld.GetResultByRandomListEx(randomRateList, 1, []) if len(randomResultList) != 1: GameWorld.DebugLog(' ¿ªÊ¼ÐÒÔ˼ø±¦ Ëæ»ú¿â½á¹û »ñÈ¡´íÎó £¡') return giveItem = randomResultList[0] if giveItem == greatItem: newLuckyPoint = 0 playerName = curPlayer.GetName() PlayerControl.WorldNotify(0, 'LuckyAppraisal_1', [playerName, greatItem[0]]) msgStr = str([ShareDefine.Def_UniversalGameRecType_LuckyTreasure, [], [curPlayer.GetName()], 2, 0]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'AddUniversalGameRec', msgStr, len(msgStr)) else: newLuckyPoint = curLuckyPoint + singlePoint if hasFree: PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costMoney, ChConfig.Def_Cost_LuckyTreasure) else: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasureFree, 1) #¸üÐÂÐÒÔËÖµ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasurePoint, newLuckyPoint) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasureCnt, curLuckyCnt + 1) for itemID, itemCount, isBind in [giveItem]: ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem], event=[ChConfig.ItemGive_LuckyTreasure, False, {"isFree":not hasFree}]) SyncLuckyTreasureResultInfo(curPlayer, giveItem) return def SyncLuckyTreasureInfo(curPlayer): ##ͬ²½ÐÒÔ˼ø±¦»î¶¯ÐÅÏ¢ actBossRebornInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_LuckyTreasure, {}) state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0) cfgID = actBossRebornInfo.get(ShareDefine.ActKey_CfgID, 0) if not state or not cfgID: return actIpyData = IpyGameDataPY.GetIpyGameData("ActLuckyTreasure", cfgID) if not actIpyData: return startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(actIpyData) actInfo = ChPyNetSendPack.tagMCLuckyTreasureInfo() actInfo.Clear() actInfo.StartDate = startDateStr actInfo.EndtDate = endDateStr actInfo.ResetType = actIpyData.GetResetType() actInfo.LimitLV = actIpyData.GetLVLimit() actInfo.LuckyPoint = actIpyData.GetLuckyPoint() actInfo.ItemList = [] randomItemList = __GetRandomRateList() for itemInfo in randomItemList: itemID, itemCnt, isBind = itemInfo[1] wellItemInfo = ChPyNetSendPack.tagMCLuckyTreasureItem() wellItemInfo.ItemID = itemID wellItemInfo.ItemCnt = itemCnt wellItemInfo.IsBind = isBind actInfo.ItemList.append(wellItemInfo) actInfo.Count = len(actInfo.ItemList) NetPackCommon.SendFakePack(curPlayer, actInfo) return def SyncLuckyTreasureResultInfo(curPlayer, itemInfo=[]): ##ͬ²½ÐÒÔ˼ø±¦Íæ¼ÒÐÅÏ¢ packInfo = ChPyNetSendPack.tagMCLuckyTreasureResultInfo() packInfo.Clear() packInfo.LuckyPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyTreasurePoint) packInfo.HasFree = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyTreasureFree) if itemInfo: packInfo.ItemID = itemInfo[0] packInfo.ItemCnt = itemInfo[1] packInfo.IsBind = itemInfo[2] NetPackCommon.SendFakePack(curPlayer, packInfo) return