| | |
| | | import ShareDefine
|
| | | import ItemCommon
|
| | | import GameWorld
|
| | | import time
|
| | |
|
| | | # 聚宝盆默认最大进度
|
| | | MineTreasureProgressMax = 100
|
| | |
|
| | | # 刷新类型列表
|
| | | RefreshTypeList = (
|
| | | RefreshType_Comm, # 自己物品普通刷新 0
|
| | | RefreshType_Super, # 自己物品超级刷新 1
|
| | | RefreshType_Rob, # 抢劫周围玩家刷新 2
|
| | | ) = range(3)
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | | freeWorkerCount = 0
|
| | |
| | | def PlayerOnDay(curPlayer):
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineHelpAwardCount, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineWorkerEnergyUsed, 0)
|
| | | for refreshType in [0, 1]:
|
| | | for refreshType in RefreshTypeList:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineRefreshCount % refreshType, 0)
|
| | | SyncPlayerMineAreaInfo(curPlayer)
|
| | | return
|
| | |
| | | #
|
| | | #{
|
| | | # tagHead Head;
|
| | | # BYTE IsSuper; // 是否超级刷新
|
| | | # BYTE RefreshType; // 刷新类型:0-自己物品普通刷新;1-自己物品超级刷新;2-周围福地玩家列表刷新
|
| | | #};
|
| | | def OnMineItemRefresh(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | isSuper = clientData.IsSuper
|
| | | refreshType = clientData.RefreshType
|
| | |
|
| | | refreshType = str(1 if isSuper else 0)
|
| | | |
| | | moneyType, moneyValue = 0, 0
|
| | | moneyDict = IpyGameDataPY.GetFuncEvalCfg("MineAreaRefresh", 1, {})
|
| | | if refreshType not in moneyDict:
|
| | | return
|
| | | moneyType, moneyValue = moneyDict[refreshType]
|
| | | if not PlayerControl.HaveMoney(curPlayer, moneyType, moneyValue):
|
| | | return
|
| | | |
| | | if str(refreshType) in moneyDict:
|
| | | moneyType, moneyValue = moneyDict[str(refreshType)]
|
| | | if not PlayerControl.HaveMoney(curPlayer, moneyType, moneyValue):
|
| | | return
|
| | | |
| | | costItemID, costItemCount = 0, 0
|
| | | refreshMaxDict = IpyGameDataPY.GetFuncEvalCfg("MineAreaRefresh", 2, {})
|
| | | refreshCountMax = refreshMaxDict.get(refreshType, 0)
|
| | | refreshCountMax = refreshMaxDict.get(str(refreshType), 0)
|
| | | refreshCountNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineRefreshCount % refreshType)
|
| | | if refreshCountMax and refreshCountNow >= refreshCountMax:
|
| | | GameWorld.DebugLog("福地物品刷新次数已达今日上限! isSuper=%s,refreshCountNow=%s >= %s" % (isSuper, refreshCountNow, refreshCountMax), playerID)
|
| | | return
|
| | | |
| | | PlayerControl.PayMoney(curPlayer, moneyType, moneyValue, "MineItemRefresh")
|
| | | if refreshCountMax:
|
| | | if refreshType == RefreshType_Super:
|
| | | employCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerCount)
|
| | | employMax = len(IpyGameDataPY.GetFuncEvalCfg("MineAreaWorker", 3))
|
| | | if employCount < employMax:
|
| | | GameWorld.DebugLog("福地雇佣工人数未达到上限,不能使用雇佣道具进行超级刷新! employCount=%s < %s" % (employCount, employMax), playerID)
|
| | | return
|
| | | costItemID = IpyGameDataPY.GetFuncCfg("MineAreaWorker", 2)
|
| | | costItemCount = IpyGameDataPY.GetFuncCfg("MineAreaRefresh", 3)
|
| | | costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount)
|
| | | lackCnt = costItemCount - bindCnt - unBindCnt
|
| | | if lackCnt > 0:
|
| | | GameWorld.DebugLog("福地雇佣工人道具不足,无法超级刷新! costItemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s" |
| | | % (costItemID, costItemCount, bindCnt, unBindCnt, lackCnt))
|
| | | return
|
| | | else:
|
| | | GameWorld.DebugLog("福地物品刷新次数已达今日上限! refreshType=%s,refreshCountNow=%s >= %s" % (refreshType, refreshCountNow, refreshCountMax), playerID)
|
| | | return
|
| | | |
| | | GameWorld.DebugLog("福地刷新: refreshType=%s,refreshCountNow=%s,moneyType=%s,moneyValue=%s,costItemID=%s,costItemCount=%s" |
| | | % (refreshType, refreshCountNow, moneyType, moneyValue, costItemID, costItemCount), playerID)
|
| | | if moneyType and moneyValue:
|
| | | PlayerControl.PayMoney(curPlayer, moneyType, moneyValue, "MineItemRefresh")
|
| | | |
| | | if costItemID and costItemCount:
|
| | | delCnt = costItemCount
|
| | | ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, "MineItemRefresh")
|
| | | |
| | | if refreshCountMax and refreshCountNow < refreshCountMax:
|
| | | refreshCountUpd = refreshCountNow + 1
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineRefreshCount % refreshType, refreshCountUpd) |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineRefreshCount % refreshType, refreshCountUpd)
|
| | | SyncPlayerMineAreaInfo(curPlayer)
|
| | |
|
| | | SendToGameServer_MineArea(curPlayer, "MineItemRefresh", [playerID, isSuper])
|
| | | if refreshType == RefreshType_Rob:
|
| | | SendToGameServer_MineArea(curPlayer, "MineRobRefresh", [])
|
| | | else:
|
| | | isSuper = 1 if refreshType == RefreshType_Super else 0
|
| | | SendToGameServer_MineArea(curPlayer, "MineItemRefresh", [playerID, isSuper])
|
| | | return
|
| | |
|
| | | #// B0 32 福地工人雇佣 #tagCMMineWorkerEmploy
|
| | |
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_MineAreaEndOther)
|
| | | return
|
| | |
|
| | | #// B0 35 福地管家免费试用 #tagCMMineHouseKeeperFreeUse
|
| | | #
|
| | | #struct tagCMMineHouseKeeperFreeUse
|
| | | #{
|
| | | # tagHead Head;
|
| | | #};
|
| | | def OnMineHouseKeeperFreeUse(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | OnActMineHousekeeper(curPlayer, 0)
|
| | | return
|
| | |
|
| | | def OnMineTreasureByCTGID(curPlayer, ctgID):
|
| | | ## 充值激活聚宝盆
|
| | | treasureCTGIDList = IpyGameDataPY.GetFuncEvalCfg("MineAreaTreasure", 1)
|
| | |
| | | GameWorld.Log("激活福地聚宝盆: treasureType=%s,updState=%s" % (treasureType, updState), curPlayer.GetPlayerID())
|
| | | break
|
| | |
|
| | | keeperCTGIDList = IpyGameDataPY.GetFuncEvalCfg("MineAreaHousekeeper", 3)
|
| | | for keeperIndex, ctgIDList in enumerate(keeperCTGIDList, 1):
|
| | | if ctgID in ctgIDList:
|
| | | OnActMineHousekeeper(curPlayer, keeperIndex)
|
| | | break
|
| | | |
| | | return
|
| | |
|
| | | def OnAddMineTreasureProgress(curPlayer, robCount, isNotify=True):
|
| | |
| | | GameWorld.DebugLog("福地聚宝盆领奖! treasureType=%s,updAward=%s,awardItemList=%s" % (treasureType, updAward, awardItemList), playerID)
|
| | | return
|
| | |
|
| | | def OnActMineHousekeeper(curPlayer, keeperIndex):
|
| | | ## 激活/增加自动管家时长
|
| | | # @param keeperIndex: 管家档位索引,0-免费,>0-付费档
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | endTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineHousekeeperEndTime)
|
| | | if keeperIndex == 0:
|
| | | if endTime:
|
| | | GameWorld.DebugLog("福地免费管家已领取过!", playerID)
|
| | | return
|
| | | |
| | | openServerDayLimit = IpyGameDataPY.GetFuncCfg("MineAreaHousekeeper", 1)
|
| | | if openServerDayLimit:
|
| | | openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
|
| | | if openServerDay <= openServerDayLimit:
|
| | | GameWorld.ErrLog("开服天未到,无法使用福地管家! keeperIndex=%s,openServerDay=%s <= %s" |
| | | % (keeperIndex, openServerDay, openServerDayLimit), playerID)
|
| | | return
|
| | | |
| | | keeperDaysList = IpyGameDataPY.GetFuncEvalCfg("MineAreaHousekeeper", 2)
|
| | | if keeperIndex < 0 or keeperIndex >= len(keeperDaysList):
|
| | | return
|
| | | addDays = keeperDaysList[keeperIndex]
|
| | | addSeconds = addDays * 24 * 3600
|
| | | curTime = int(time.time())
|
| | | |
| | | endTimeStr = GameWorld.ChangeTimeNumToStr(endTime) if endTime else ""
|
| | | GameWorld.DebugLog("激活福地管家: keeperIndex=%s,addDays=%s(%s)" % (keeperIndex, addDays, addSeconds), playerID)
|
| | | GameWorld.DebugLog(" 管家到期时间: endTime=%s, %s" % (endTime, endTimeStr), playerID)
|
| | | if not endTime:
|
| | | updEndTime = curTime + addSeconds
|
| | | GameWorld.DebugLog(" 激活管家", playerID)
|
| | | elif curTime >= endTime:
|
| | | updEndTime = curTime + addSeconds |
| | | GameWorld.DebugLog(" 已过期,重新激活管家", playerID)
|
| | | else:
|
| | | updEndTime = endTime + addSeconds
|
| | | GameWorld.DebugLog(" 续费管家时长", playerID)
|
| | | |
| | | GameWorld.DebugLog(" 更新管家时长: updEndTime=%s, %s" % (updEndTime, GameWorld.ChangeTimeNumToStr(updEndTime)), playerID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineHousekeeperEndTime, updEndTime)
|
| | | SyncPlayerMineAreaInfo(curPlayer)
|
| | | return
|
| | |
|
| | | def SyncPlayerMineAreaInfo(curPlayer):
|
| | | clientPack = ChPyNetSendPack.tagMCPlayerMineAreaInfo()
|
| | | clientPack.WorkerCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerCount)
|
| | | clientPack.EnergyUsed = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerEnergyUsed)
|
| | | clientPack.HousekeeperEndTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineHousekeeperEndTime)
|
| | | clientPack.HelpAwardCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineHelpAwardCount)
|
| | | clientPack.RefreshCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineRefreshCount % 0)
|
| | | clientPack.RefreshCountSuper = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineRefreshCount % 1)
|
| | | clientPack.RefreshCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineRefreshCount % RefreshType_Comm)
|
| | | clientPack.RefreshCountSuper = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineRefreshCount % RefreshType_Super)
|
| | | clientPack.RefreshCountRob = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineRefreshCount % RefreshType_Rob)
|
| | |
|
| | | treasureState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureState)
|
| | | treasureAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureAward)
|