From 275ef806a444880883a5725d7c87f433537da02f Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期三, 24 四月 2019 10:07:53 +0800
Subject: [PATCH] 6597 【后端】【2.0】缥缈仙域事件刷新类型做限制
---
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 23 ++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 4
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py | 5 +
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py | 1
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFairyDomain.py | 109 +++++++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py | 63 +++++++++++-
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 10 +
PySysDB/PySysDBPY.h | 2
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 13 ++
PySysDB/PySysDBG.h | 9 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 1
14 files changed, 240 insertions(+), 12 deletions(-)
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index 1faa9dc..236de96 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -624,4 +624,13 @@
dict NotifyInfoEnd; //全服提示信息 - 相对结束时间
list NotifyInfoLoop; //全服提示信息 - 循环广播[间隔分钟, 广播key]
WORD LVLimit; //限制等级
+};
+
+//缥缈仙域表
+
+struct tagFairyDomain
+{
+ WORD _ID; //事件编号
+ DWORD HourCntPubLimit; //全服每小时次数限制
+ DWORD DayCntPubLimit; //全服每天次数限制
};
\ No newline at end of file
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index bae0253..45204f8 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1851,6 +1851,8 @@
BYTE NeedAlchemyLV; //出现的炼丹等级要求
list NeedLV; //出现的玩家等级要求
DWORD Weight; //权重
+ DWORD HourCntPriLimit; //个人每小时次数限制
+ DWORD DayCntPriLimit; //个人每天次数限制
};
//缥缈奇遇表
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
index a0ece2e..5dd62fb 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
@@ -93,6 +93,7 @@
import CrossRealmPlayer
import PlayerFBHelpBattle
import PlayerFamilyRedPacket
+import PlayerFairyDomain
import IpyGameDataPY
import PlayerFamilyParty
import GameWorldFamilyWar
@@ -1413,7 +1414,8 @@
SendMapCommMapLinePlayerCount(True) # 同步一次普通地图线路人数信息
#随机假仙盟
PlayerFamily.RandomFakeFamily()
-
+ #缥缈仙域
+ PlayerFairyDomain.OnMapServerInitOK()
# 记录服务器是否正常开启完毕
getUrl = ReadChConfig.GetPyMongoConfig("EventReport", "OpenStateUrl") + "?Type=MapInit&MapCount=%s"%GameWorld.GetGameWorld().GetGameMapManager().GetCount()
GameWorld.GetGameWorld().EventReport_EventReport("", "", "", "", 0, getUrl)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 6e1fa95..4c2fa49 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -519,6 +519,12 @@
("list", "NotifyInfoLoop", 0),
("WORD", "LVLimit", 0),
),
+
+ "FairyDomain":(
+ ("WORD", "ID", 1),
+ ("DWORD", "HourCntPubLimit", 0),
+ ("DWORD", "DayCntPubLimit", 0),
+ ),
}
@@ -1543,6 +1549,19 @@
def GetNotifyInfoEnd(self): return self.NotifyInfoEnd # 全服提示信息 - 相对结束时间
def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key]
def GetLVLimit(self): return self.LVLimit # 限制等级
+
+# 缥缈仙域表
+class IPY_FairyDomain():
+
+ def __init__(self):
+ self.ID = 0
+ self.HourCntPubLimit = 0
+ self.DayCntPubLimit = 0
+ return
+
+ def GetID(self): return self.ID # 事件编号
+ def GetHourCntPubLimit(self): return self.HourCntPubLimit # 全服每小时次数限制
+ def GetDayCntPubLimit(self): return self.DayCntPubLimit # 全服每天次数限制
def Log(msg, playerID=0, par=0):
@@ -1660,6 +1679,8 @@
self.ipyNewUniquenessArriveLen = len(self.ipyNewUniquenessArriveCache)
self.ipyActLuckyTreasureCache = self.__LoadFileData("ActLuckyTreasure", IPY_ActLuckyTreasure)
self.ipyActLuckyTreasureLen = len(self.ipyActLuckyTreasureCache)
+ self.ipyFairyDomainCache = self.__LoadFileData("FairyDomain", IPY_FairyDomain)
+ self.ipyFairyDomainLen = len(self.ipyFairyDomainCache)
Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
Log("IPY_DataMgr InitOK!")
return
@@ -1918,6 +1939,8 @@
def GetNewUniquenessArriveByIndex(self, index): return self.ipyNewUniquenessArriveCache[index]
def GetActLuckyTreasureCount(self): return self.ipyActLuckyTreasureLen
def GetActLuckyTreasureByIndex(self, index): return self.ipyActLuckyTreasureCache[index]
+ def GetFairyDomainCount(self): return self.ipyFairyDomainLen
+ def GetFairyDomainByIndex(self, index): return self.ipyFairyDomainCache[index]
IPYData = IPY_DataMgr()
def IPY_Data(): return IPYData
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py
index 39ea12e..4294f66 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py
@@ -26,6 +26,7 @@
import PlayerDBGSEvent
import GameWorldActionControl
import PlayerFBHelpBattle
+import PlayerFairyDomain
import ChPyNetSendPack
import NetPackCommon
import PlayerDuJie
@@ -39,6 +40,7 @@
def DoLogic_GameServer_OnHour(tick):
#处理这个小时发出的邮件
#GameWorld.GetMailManager().ProcessAllMail()
+ PlayerFairyDomain.OnHour()
return
## 处理玩家每日响应
@@ -75,6 +77,8 @@
PlayerDuJie.OnDayEx()
#副本助战
PlayerFBHelpBattle.HelpBattleOnDay()
+ #缥缈OnDay
+ PlayerFairyDomain.OnDayEx()
playerManager = GameWorld.GetPlayerManager()
for i in xrange(playerManager.GetPlayerCount()):
curPlayer = playerManager.GetPlayerByIndex(i)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFairyDomain.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFairyDomain.py
new file mode 100644
index 0000000..30b8ac2
--- /dev/null
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFairyDomain.py
@@ -0,0 +1,109 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+#-------------------------------------------------------------------------------
+#
+##@package PlayerFairyDomain
+#
+# @todo:缥缈仙域
+# @author xdh
+# @date 2019-04-23
+# @version 1.0
+#
+#
+# 详细描述: 缥缈仙域
+#
+#---------------------------------------------------------------------
+"""Version = 2019-04-23 17:00"""
+
+import GameWorld
+import ShareDefine
+import IpyGameDataPY
+'''
+Value1:事件ID
+Value2:小时段出现次数
+Value3:今日出现次数
+'''
+RecType = ShareDefine.Def_UniversalGameRecType_FairyDomain
+
+
+def AddFairyDomainEvent(fdEventIDList):
+ fdEventLimitDict = {}
+ for fdEventID in fdEventIDList:
+ ipyData = IpyGameDataPY.GetIpyGameDataNotLog('FairyDomain', fdEventID)
+ if not ipyData:
+ continue
+ hourCntLimit, dayCntLimit = ipyData.GetHourCntPubLimit(), ipyData.GetDayCntPubLimit()
+ if not hourCntLimit and not dayCntLimit:
+ continue
+ fdEventLimitDict[fdEventID] = [hourCntLimit, dayCntLimit]
+ if not fdEventLimitDict:
+ return
+ addfdRecList = fdEventLimitDict.keys()
+ universalRecMgr = GameWorld.GetUniversalRecMgr()
+ recTypeListData = universalRecMgr.GetTypeList(RecType)
+
+ addFDEventList = []
+ for index in xrange(recTypeListData.Count()):
+ recData = recTypeListData.At(index)
+ curID = recData.GetValue1()
+ if curID in fdEventLimitDict:
+ addfdRecList.remove(curID)
+ curHourAppearCnt = recData.GetValue2()
+ curDayAppearCnt = recData.GetValue3()
+ hourCntLimit, dayCntLimit = fdEventLimitDict[curID]
+ if curHourAppearCnt >= hourCntLimit or curDayAppearCnt >= dayCntLimit:
+ continue
+ recData.SetValue2(curHourAppearCnt +1)
+ recData.SetValue3(curDayAppearCnt + 1)
+ if curHourAppearCnt +1 >= hourCntLimit or curDayAppearCnt + 1 >= dayCntLimit:
+ addFDEventList.append(curID)
+ for fdid in addfdRecList:
+ recData = recTypeListData.AddRec()
+ recData.SetValue1(fdid)
+ recData.SetValue2(1)
+ recData.SetValue3(1)
+ hourCntLimit, dayCntLimit = fdEventLimitDict[fdid]
+ if 1 >= hourCntLimit or 1 >= dayCntLimit:
+ addFDEventList.append(fdid)
+ if addFDEventList:
+ #同步地图
+ GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FairyDomainLimit, [1, addFDEventList])
+
+ return
+
+def OnHour():
+ __ResetFairyDomainCnt(1)
+ return
+
+def OnDayEx():
+ __ResetFairyDomainCnt(2)
+ return
+
+def OnMapServerInitOK():
+ __ResetFairyDomainCnt(0)
+ return
+
+def __ResetFairyDomainCnt(resetType):
+ curLimitEventIDList = []
+ universalRecMgr = GameWorld.GetUniversalRecMgr()
+ recTypeListData = universalRecMgr.GetTypeList(RecType)
+ for index in xrange(recTypeListData.Count()):
+ recData = recTypeListData.At(index)
+ if resetType == 1:
+ recData.SetValue2(0)
+ elif resetType == 2:
+ recData.SetValue3(0)
+ curID = recData.GetValue1()
+ hourAppearCnt = recData.GetValue2()
+ dayAppearCnt = recData.GetValue3()
+ ipyData = IpyGameDataPY.GetIpyGameDataNotLog('FairyDomain', curID)
+ if not ipyData:
+ continue
+ hourCntLimit, dayCntLimit = ipyData.GetHourCntPubLimit(), ipyData.GetDayCntPubLimit()
+ if hourAppearCnt >= hourCntLimit or dayAppearCnt >= dayCntLimit:
+ curLimitEventIDList.append(curID)
+ #同步地图
+ GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FairyDomainLimit, [0, curLimitEventIDList])
+ return
\ No newline at end of file
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
index 34ceaf6..5f7136e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
@@ -72,6 +72,7 @@
import ChPyNetSendPack
import NetPackCommon
import AuctionHouse
+import PlayerFairyDomain
import time
import datetime
@@ -839,6 +840,10 @@
if callName =="HorsePetBossOver":
PlayerHorsePetBoss.HorsePetBossKilled(int(resultName))
return
+ #缥缈仙域事件出现
+ if callName =="AddFairyDomainEvent":
+ PlayerFairyDomain.AddFairyDomainEvent(eval(resultName))
+ return
#---return分割线-----------------------------------------------------------------
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 752f8ea..e5e748e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -190,7 +190,7 @@
Def_Notify_WorldKey_RedPacketOutput = 'RedPacketOutput' # 红包产出信息
Def_Notify_WorldKey_HurtLog = 'HurtLog' # 战斗伤害日志
-
+Def_Notify_WorldKey_FairyDomainLimit = "FairyDomainLimit" # 缥缈仙域限制事件
#运营活动表名定义
OperationActionName_ExpRate = "ActExpRate" # 多倍经验活动
OperationActionName_CostRebate = "ActCostRebate" # 消费返利活动
@@ -1022,7 +1022,7 @@
Def_UniversalGameRecType_FBHelpBattleRecord, #助战未同步记录10
Def_UniversalGameRecType_ZhuXianBossRecord, #诛仙BOSS结算记录11
Def_UniversalGameRecType_LuckyTreasure, #幸运鉴宝大奖记录12
- Def_UniversalGameRecType_13,
+ Def_UniversalGameRecType_FairyDomain, #缥缈仙域事件次数记录13
Def_UniversalGameRecType_Reward, # 通用奖励表(TopBar)14
Def_UniversalGameRecType_15,
Def_UniversalGameRecType_16,
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 7d0fbd6..811c79f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3890,6 +3890,7 @@
Def_PDict_FairyDomainEnergy = "FairyDomainEnergy" #体力值
Def_PDict_FairyDomainVisitCnt = "FairyDomainVisitCnt" #寻访总次数
Def_PDict_FairyAdventuresData = "FairyAdventuresData_%s" #奇遇数值 唯一ID*100+档位 参数事件ID
+Def_PDict_FairyDomainEventAppearCnt = "FDEventAppearCnt%s" #事件出现次数 参数事件ID AAABBB BBB:小时段出现次数 AAA:今日出现次数
#-------------------------------------------------------------------------------
#可以从07 41封包购买的背包类型,和对应字典{背包类型:[字典key, 默认格子数]}
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 567b7ec..24c3df0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1430,6 +1430,8 @@
("BYTE", "NeedAlchemyLV", 0),
("list", "NeedLV", 0),
("DWORD", "Weight", 0),
+ ("DWORD", "HourCntPriLimit", 0),
+ ("DWORD", "DayCntPriLimit", 0),
),
"FairyAdventures":(
@@ -4388,7 +4390,9 @@
self.CostEnergy = 0
self.NeedAlchemyLV = 0
self.NeedLV = []
- self.Weight = 0
+ self.Weight = 0
+ self.HourCntPriLimit = 0
+ self.DayCntPriLimit = 0
return
def GetID(self): return self.ID # 事件编号
@@ -4399,7 +4403,9 @@
def GetCostEnergy(self): return self.CostEnergy # 消耗体力
def GetNeedAlchemyLV(self): return self.NeedAlchemyLV # 出现的炼丹等级要求
def GetNeedLV(self): return self.NeedLV # 出现的玩家等级要求
- def GetWeight(self): return self.Weight # 权重
+ def GetWeight(self): return self.Weight # 权重
+ def GetHourCntPriLimit(self): return self.HourCntPriLimit # 个人每小时次数限制
+ def GetDayCntPriLimit(self): return self.DayCntPriLimit # 个人每天次数限制
# 缥缈奇遇表
class IPY_FairyAdventures():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index dac01df..80f6d40 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -89,6 +89,7 @@
import PlayerRefineStove
import PlayerFlashSale
import PlayerWishingWell
+import PlayerFairyDomain
import PlayerVip
import PlayerDiceEx
import IpyGameDataPY
@@ -545,6 +546,8 @@
FBHelpBattle.DoPlayerOnDay(curPlayer)
#跨服竞技场
PlayerCrossRealmPK.DoPlayerOnDay(curPlayer)
+ #缥缈仙域
+ PlayerFairyDomain.OnDay(curPlayer)
PlayerTJG.TJGOnDay(curPlayer, onEventType)
# 以下为支持两种重置模式切换配置的
@@ -802,6 +805,8 @@
#触发每小时任务重置脚本
EventShell.EventResponse_OnHour(curPlayer)
+ #缥缈仙域
+ PlayerFairyDomain.OnHour(curPlayer)
return
#---------------------------------------------------------------------
@@ -1276,6 +1281,14 @@
PyGameData.g_familyPartyInfo = eval(msgValue)
return
+ if key == ShareDefine.Def_Notify_WorldKey_FairyDomainLimit:
+ isAdd, limitList = eval(msgValue)
+ if isAdd:
+ PyGameData.g_fairyDomainLimit += limitList
+ else:
+ PyGameData.g_fairyDomainLimit = limitList
+ return
+
if key.startswith(ShareDefine.Def_Notify_WorldKey_OperationActionInfo[:-2]):
keyHead = ShareDefine.Def_Notify_WorldKey_OperationActionInfo[:-2]
actionName = key[len(keyHead):]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
index 3ca5ad2..74a3504 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
@@ -26,6 +26,7 @@
import IpyGameDataPY
import PlayerActivity
import ItemControler
+import PyGameData
import EventShell
import copy
@@ -60,6 +61,36 @@
def OnLogin(curPlayer):
NotifyVisitFairyDomainInfo(curPlayer)
NotifyFairyAdventuresInfo(curPlayer)
+ return
+
+
+def OnHour(curPlayer):
+ __ResetFairyDomainCntLimit(curPlayer, 1)
+ return
+
+
+def OnDay(curPlayer):
+ __ResetFairyDomainCntLimit(curPlayer, 2)
+ return
+
+
+def __ResetFairyDomainCntLimit(curPlayer, resetType):
+ ## 重置个人缥缈事件出现次数记录
+ ipyMgr = IpyGameDataPY.IPY_Data()
+ for i in xrange(ipyMgr.GetFairyDomainCount()):
+ ipyData = ipyMgr.GetFairyDomainByIndex(i)
+ eventID = ipyData.GetID()
+ appearCntInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventAppearCnt % eventID)
+ if not appearCntInfo:
+ continue
+ hourAppearCntPri, dayAppearCntPri = appearCntInfo % 1000, appearCntInfo / 1000
+ if resetType == 1:
+ updAppearCntInfo = dayAppearCntPri * 1000
+ elif resetType == 2:
+ updAppearCntInfo = hourAppearCntPri
+ else:
+ return
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventAppearCnt % eventID, updAppearCntInfo)
return
@@ -135,7 +166,15 @@
if not randomList:
continue
fdEventIDList += randomList
-
+ #更新个人出现次数
+ for fdEventID in fdEventIDList:
+ appearCntInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventAppearCnt % fdEventID)
+ hourAppearCntPri, dayAppearCntPri = appearCntInfo % 1000, appearCntInfo / 1000
+ updAppearCntInfo = (dayAppearCntPri + 1) * 1000 + (hourAppearCntPri + 1)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventAppearCnt % fdEventID, updAppearCntInfo)
+ #更新全服出现次数
+ msgStr = str(fdEventIDList)
+ GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'AddFairyDomainEvent', msgStr, len(msgStr))
#奇遇事件 随机档位数据
openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
for fdEventID in fdEventIDList:
@@ -175,6 +214,7 @@
NotifyFairyAdventuresInfo(curPlayer)
return
+
def EndFairyDomain(curPlayer):
##结束寻访
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainState, 0)
@@ -187,6 +227,7 @@
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventState % fdEventID, 0)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyAdventuresData % fdEventID, 0)
return
+
def __RandomFDEventByType(curPlayer, eventType, cnt):
##根据事件类型随机事件
@@ -206,15 +247,25 @@
if lvLimit and not (lvLimit[0] <= curLV <= lvLimit[1]):
#等级范围不满足
continue
-
+ eventID = ipyData.GetID()
+ appearCntInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventAppearCnt % eventID)
+ hourAppearCntPri, dayAppearCntPri = appearCntInfo % 1000, appearCntInfo / 1000
+ if hourAppearCntPri >= ipyData.GetHourCntPriLimit() or dayAppearCntPri >= ipyData.GetDayCntPriLimit():
+ #超过今日或本小时个人可出现次数上限
+ continue
+ if eventID in PyGameData.g_fairyDomainLimit:
+ #超过全服可出现次数
+ continue
rate += ipyData.GetWeight()
randomRateList.append([rate, ipyData.GetID()])
if not randomRateList:
- GameWorld.DebugLog(' 缥缈仙域刷新池 随机库获取错误 !eventType=%s' % eventType, curPlayer.GetID())
+ GameWorld.DebugLog(' 缥缈仙域刷新池 该类型没有符合条件的事件!eventType=%s' % eventType, curPlayer.GetID())
return []
- randomResultList = GameWorld.GetResultByRandomListEx(randomRateList, cnt, [])
-
+ realCnt = min(len(randomRateList), cnt)
+ randomResultList = GameWorld.GetResultByRandomListEx(randomRateList, realCnt, [])
+ GameWorld.DebugLog('eventType=%s, cnt=%s,randomRateList=%s,randomResultList=%s' % (eventType, cnt, randomRateList, randomResultList))
return randomResultList
+
def GetFairyDomainFBEventState(curPlayer, mapID, lineID):
## 获取缥缈相关副本寻访状态
@@ -225,6 +276,7 @@
curState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventState % fdeventID)
return curState
+
def SetFairyDomainFBEventState(curPlayer, mapID, lineID, state):
## 设置缥缈相关副本寻访状态
ipyData = IpyGameDataPY.GetIpyGameDataByCondition("FairyDomain", {"MapID":mapID, "LineID":lineID})
@@ -233,6 +285,7 @@
fdeventID = ipyData.GetID()
return SetFairyDomainEventState(curPlayer, fdeventID, state)
+
def SetFairyDomainEventState(curPlayer, fdeventID, state):
## 设置缥缈事件状态, return 是否成功
if state not in [FDEventState_Visiting, FDEventState_Visited]: # 1-未拜访 2-拜访中 3-已拜访
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
index 9d9fbee..9aa10d5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -105,3 +105,4 @@
g_crossFuncLineDataCache = {} # 动态分配的跨服虚拟分线数据缓存 {(mapID, copyMapID):funcLineDataCache, ...}
g_crossPlayerServerGroupIDInfo = {} #跨服玩家服务器组ID缓存,副本线路关闭时才释放,所以支持离线跨服玩家 {copyMapID:{playerID:serverGroupID, ...}, ...}
g_fbBuyBuffTimeDict = {} # 副本购买buff时间缓存{playerID:{moneyCnt:time}}
+g_fairyDomainLimit = [] #全服已限制的缥缈仙域事件
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 752f8ea..e5e748e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -190,7 +190,7 @@
Def_Notify_WorldKey_RedPacketOutput = 'RedPacketOutput' # 红包产出信息
Def_Notify_WorldKey_HurtLog = 'HurtLog' # 战斗伤害日志
-
+Def_Notify_WorldKey_FairyDomainLimit = "FairyDomainLimit" # 缥缈仙域限制事件
#运营活动表名定义
OperationActionName_ExpRate = "ActExpRate" # 多倍经验活动
OperationActionName_CostRebate = "ActCostRebate" # 消费返利活动
@@ -1022,7 +1022,7 @@
Def_UniversalGameRecType_FBHelpBattleRecord, #助战未同步记录10
Def_UniversalGameRecType_ZhuXianBossRecord, #诛仙BOSS结算记录11
Def_UniversalGameRecType_LuckyTreasure, #幸运鉴宝大奖记录12
- Def_UniversalGameRecType_13,
+ Def_UniversalGameRecType_FairyDomain, #缥缈仙域事件次数记录13
Def_UniversalGameRecType_Reward, # 通用奖励表(TopBar)14
Def_UniversalGameRecType_15,
Def_UniversalGameRecType_16,
--
Gitblit v1.8.0