From 49038c57437f730ac77154eb1969d46be614416d Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期一, 08 四月 2019 16:32:44 +0800
Subject: [PATCH] 6457 【后端】【2.0】缥缈仙域开发单(随机玩法、购买次数)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py | 157 ++++++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 108 ++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 130 +++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 108 ++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_HorsePetBoss.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py | 217 ++++++++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 130 +++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 26 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 47 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 4
PySysDB/PySysDBPY.h | 17 +
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 13
14 files changed, 919 insertions(+), 46 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 60713c1..9fa306a 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -600,6 +600,10 @@
{
DWORD _DailyID; //活动ID
DWORD DayTimes; //每日次数, 0为不限制
+ DWORD DayBuyTimes; //每日可购买次数
+ DWORD BuyNeedMoney; //购买次数需要仙玉
+ DWORD DayItemAddTimes; //每日可用物品增加次数
+ DWORD DayItemID; //增加次数的物品ID
BYTE DayResetType; //每日次数重置类型; 0-不重置,1-0点,2-5点
DWORD WeekTimes; //每周次数, 0为不限制
BYTE WeekResetType; //每周次数重置类型; 0-不重置,1-0点,2-5点
@@ -1780,4 +1784,17 @@
list Rank; //排名
list Award1; //奖励 [[独立概率万分率,[物品ID,数量,是否拍品]],..]
dict Award2; //饼图奖励{随机次数:[(概率,[物品ID,数量,是否拍品]),..]}
+};
+
+//缥缈仙域表
+
+struct tagFairyDomain
+{
+ WORD _ID; //事件编号
+ BYTE EventType; //事件类型
+ DWORD MapID; //副本id
+ BYTE LineID; //副本线路id
+ BYTE CostEnergy; //消耗体力
+ BYTE NeedAlchemyLV; //出现的炼丹等级要求
+ DWORD Weight; //权重
};
\ No newline at end of file
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index c6fc84e..ac28fe5 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -7998,6 +7998,62 @@
#------------------------------------------------------
+# A5 25 购买日常活动次数 #tagCMBuyDailyActionCnt
+
+class tagCMBuyDailyActionCnt(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("ActionID", c_int), # ID
+ ("AddType", c_ubyte), # 0-花仙玉 1-用物品
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA5
+ self.SubCmd = 0x25
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xA5
+ self.SubCmd = 0x25
+ self.ActionID = 0
+ self.AddType = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMBuyDailyActionCnt)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A5 25 购买日常活动次数 //tagCMBuyDailyActionCnt:
+ Cmd:%s,
+ SubCmd:%s,
+ ActionID:%d,
+ AddType:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.ActionID,
+ self.AddType
+ )
+ return DumpString
+
+
+m_NAtagCMBuyDailyActionCnt=tagCMBuyDailyActionCnt()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyDailyActionCnt.Cmd,m_NAtagCMBuyDailyActionCnt.SubCmd))] = m_NAtagCMBuyDailyActionCnt
+
+
+#------------------------------------------------------
#A5 75 购买副本进入次数#tagCMBuyEnterCount
class tagCMBuyEnterCount(Structure):
@@ -11074,6 +11130,58 @@
#------------------------------------------------------
+# A5 26 寻访仙域 #tagCMVisitFairyDomain
+
+class tagCMVisitFairyDomain(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("Type", c_ubyte), #0-开始寻访 1-结束寻访
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA5
+ self.SubCmd = 0x26
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xA5
+ self.SubCmd = 0x26
+ self.Type = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMVisitFairyDomain)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A5 26 寻访仙域 //tagCMVisitFairyDomain:
+ Cmd:%s,
+ SubCmd:%s,
+ Type:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.Type
+ )
+ return DumpString
+
+
+m_NAtagCMVisitFairyDomain=tagCMVisitFairyDomain()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMVisitFairyDomain.Cmd,m_NAtagCMVisitFairyDomain.SubCmd))] = m_NAtagCMVisitFairyDomain
+
+
+#------------------------------------------------------
# A5 1D 法宝佩戴 #tagCMWearMagicWeapon
class tagCMWearMagicWeapon(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index c27ff9e..06afc43 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -13019,6 +13019,8 @@
_fields_ = [
("ActionID", c_int), # ID
("DayFinishCnt", c_ushort), # 今日已完成次数
+ ("DayBuyTimes", c_ubyte), # 今日购买次数
+ ("DayItemTimes", c_ubyte), # 今日物品增加次数
("WeekFinishCnt", c_int), # 本周已完成次数
]
@@ -13034,6 +13036,8 @@
def Clear(self):
self.ActionID = 0
self.DayFinishCnt = 0
+ self.DayBuyTimes = 0
+ self.DayItemTimes = 0
self.WeekFinishCnt = 0
return
@@ -13047,11 +13051,15 @@
DumpString = '''// A3 15 日常活动次数通知 //tagMCDailyActionCnt:
ActionID:%d,
DayFinishCnt:%d,
+ DayBuyTimes:%d,
+ DayItemTimes:%d,
WeekFinishCnt:%d
'''\
%(
self.ActionID,
self.DayFinishCnt,
+ self.DayBuyTimes,
+ self.DayItemTimes,
self.WeekFinishCnt
)
return DumpString
@@ -13740,6 +13748,128 @@
#------------------------------------------------------
+# A3 06 缥缈仙域信息 #tagMCFairyDomainInfo
+
+class tagMCFairyDomainEvent(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("EventID", c_ushort), #事件ID
+ ("EventState", c_ubyte), #事件状态 1-可拜访 2-拜访中 3-已拜访
+ ]
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.EventID = 0
+ self.EventState = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCFairyDomainEvent)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A3 06 缥缈仙域信息 //tagMCFairyDomainInfo:
+ EventID:%d,
+ EventState:%d
+ '''\
+ %(
+ self.EventID,
+ self.EventState
+ )
+ return DumpString
+
+
+class tagMCFairyDomainInfo(Structure):
+ Head = tagHead()
+ State = 0 #(BYTE State)//是否寻访中
+ Energy = 0 #(WORD Energy)//体力
+ Count = 0 #(BYTE Count)// 信息个数
+ InfoList = list() #(vector<tagMCFairyDomainEvent> InfoList)// 信息列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA3
+ self.Head.SubCmd = 0x06
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Energy,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temInfoList = tagMCFairyDomainEvent()
+ _pos = temInfoList.ReadData(_lpData, _pos)
+ self.InfoList.append(temInfoList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA3
+ self.Head.SubCmd = 0x06
+ self.State = 0
+ self.Energy = 0
+ self.Count = 0
+ self.InfoList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ length += 2
+ length += 1
+ for i in range(self.Count):
+ length += self.InfoList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.State)
+ data = CommFunc.WriteWORD(data, self.Energy)
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ State:%d,
+ Energy:%d,
+ Count:%d,
+ InfoList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.State,
+ self.Energy,
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCFairyDomainInfo=tagMCFairyDomainInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFairyDomainInfo.Head.Cmd,m_NAtagMCFairyDomainInfo.Head.SubCmd))] = m_NAtagMCFairyDomainInfo
+
+
+#------------------------------------------------------
# A3 16 仙盟活跃信息通知 #tagMCFamilyActivityInfo
class tagMCFamilyActionCnt(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 5ffca38..627f1c6 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1427,7 +1427,8 @@
DailyActionID_FamilyBoss1, # 仙盟BOSS第一场 22
DailyActionID_FamilyBoss2, # 仙盟BOSS第二场 23
DailyActionID_HorsePetBoss, # 骑宠BOSS 24
-) = range(1, 24 + 1)
+DailyActionID_FairyDomain, # 缥缈仙域 25
+) = range(1, 25 + 1)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 6167b17..b3ad929 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -1332,4 +1332,28 @@
PacketCMD_1=0xA5
PacketSubCMD_1=0xC5
-PacketCallFunc_1=OnEquipPartStarUp
\ No newline at end of file
+PacketCallFunc_1=OnEquipPartStarUp
+
+;日常活动
+[PlayerActivity]
+ScriptName = Player\PlayerActivity.py
+Writer = xdh
+Releaser = xdh
+RegType = 0
+RegisterPackCount = 1
+
+PacketCMD_1=0xA5
+PacketSubCMD_1=0x25
+PacketCallFunc_1=OnDailyActionBuyCnt
+
+;缥缈仙域
+[PlayerFairyDomain]
+ScriptName = Player\PlayerFairyDomain.py
+Writer = xdh
+Releaser = xdh
+RegType = 0
+RegisterPackCount = 1
+
+PacketCMD_1=0xA5
+PacketSubCMD_1=0x26
+PacketCallFunc_1=OnVisitFairyDomain
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 3661e71..750ec3f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3719,6 +3719,8 @@
Def_PDict_Activity_ExtraRealmPoint = "Activity_ExtraRealmPoint" # 多倍活动额外获得的修行点
# 每日活动
Def_PDict_DailyActionDayTimes = "DailyActionDayTimes_%s" # 每日活动今日完成次数 参数每日活动ID
+Def_PDict_DailyActionDayBuyTimes = "DADayBuyTimes_%s" # 每日活动今日购买次数 参数每日活动ID
+Def_PDict_DailyActionDayItemTimes = "DADayItemTimes_%s" # 每日活动今日物品增加次数 参数每日活动ID
Def_PDict_DailyActionWeekTimes = "DailyActionWeekTimes_%s" # 每日活动本周完成次数 参数每日活动ID
#仙盟活跃
Def_PDict_FamilyActivityFinishCnt = "FamilyActivityFinishCnt%s" # 已完成次数
@@ -3840,7 +3842,12 @@
#装备部位星数
Def_PDict_EquipPartStar = "EQPartStar_%s" #装备部位星数 参数 装备背包格子索引
-
+#缥缈仙域
+Def_PDict_FairyDomainState = "FairyDomainState" #是否寻访中
+Def_PDict_FairyDomainEventState = "FairyDomainEventState%s" #单个事件状态1-未拜访 2-拜访中 3-已拜访 参数事件ID
+Def_PDict_FairyDomainEventID = "FairyDomainEventID%s" #事件ID 参数第n个事件
+Def_PDict_FairyDomainEnergy = "FairyDomainEnergy" #体力值
+Def_PDict_FairyDomainVisitCnt = "FairyDomainVisitCnt" #寻访总次数
#-------------------------------------------------------------------------------
#可以从07 41封包购买的背包类型,和对应字典{背包类型:[字典key, 默认格子数]}
@@ -4475,6 +4482,7 @@
Def_Cost_LuckyTreasure, #幸运鉴宝
Def_Cost_MysteryShopRefresh, # 神秘商店刷新
Def_Cost_AuctionBid, # 拍卖行竞价
+Def_Cost_BuyDailyActionCnt, # 购买活动次数
#-----------以下为暂时没用的,先不删除,如有新增消费点则放在这些之前------------
Def_Cost_RefreshArrestTask, # 刷新悬赏任务
Def_Cost_OffLineExp, # 兑换离线经验
@@ -4487,7 +4495,7 @@
Def_Cost_Trade, # 交易
Def_Cost_Rename, # 改名
Def_Cost_SkillLvUp, # 技能升级
-) = range(2000, 2000 + 56)
+) = range(2000, 2000 + 57)
Def_Cost_Reason_SonKey = "reason_name_son" # 消费点原因子类说明key
@@ -4565,6 +4573,7 @@
Def_Cost_LuckyTreasure:"LuckyTreasure",
Def_Cost_MysteryShopRefresh:"MysteryShopRefresh",
Def_Cost_AuctionBid:"AuctionBid",
+Def_Cost_BuyDailyActionCnt:"BuyDailyActionCnt",
}
## -----------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index c6fc84e..ac28fe5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -7998,6 +7998,62 @@
#------------------------------------------------------
+# A5 25 购买日常活动次数 #tagCMBuyDailyActionCnt
+
+class tagCMBuyDailyActionCnt(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("ActionID", c_int), # ID
+ ("AddType", c_ubyte), # 0-花仙玉 1-用物品
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA5
+ self.SubCmd = 0x25
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xA5
+ self.SubCmd = 0x25
+ self.ActionID = 0
+ self.AddType = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMBuyDailyActionCnt)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A5 25 购买日常活动次数 //tagCMBuyDailyActionCnt:
+ Cmd:%s,
+ SubCmd:%s,
+ ActionID:%d,
+ AddType:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.ActionID,
+ self.AddType
+ )
+ return DumpString
+
+
+m_NAtagCMBuyDailyActionCnt=tagCMBuyDailyActionCnt()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyDailyActionCnt.Cmd,m_NAtagCMBuyDailyActionCnt.SubCmd))] = m_NAtagCMBuyDailyActionCnt
+
+
+#------------------------------------------------------
#A5 75 购买副本进入次数#tagCMBuyEnterCount
class tagCMBuyEnterCount(Structure):
@@ -11074,6 +11130,58 @@
#------------------------------------------------------
+# A5 26 寻访仙域 #tagCMVisitFairyDomain
+
+class tagCMVisitFairyDomain(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("Type", c_ubyte), #0-开始寻访 1-结束寻访
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA5
+ self.SubCmd = 0x26
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xA5
+ self.SubCmd = 0x26
+ self.Type = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMVisitFairyDomain)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A5 26 寻访仙域 //tagCMVisitFairyDomain:
+ Cmd:%s,
+ SubCmd:%s,
+ Type:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.Type
+ )
+ return DumpString
+
+
+m_NAtagCMVisitFairyDomain=tagCMVisitFairyDomain()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMVisitFairyDomain.Cmd,m_NAtagCMVisitFairyDomain.SubCmd))] = m_NAtagCMVisitFairyDomain
+
+
+#------------------------------------------------------
# A5 1D 法宝佩戴 #tagCMWearMagicWeapon
class tagCMWearMagicWeapon(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index c27ff9e..06afc43 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -13019,6 +13019,8 @@
_fields_ = [
("ActionID", c_int), # ID
("DayFinishCnt", c_ushort), # 今日已完成次数
+ ("DayBuyTimes", c_ubyte), # 今日购买次数
+ ("DayItemTimes", c_ubyte), # 今日物品增加次数
("WeekFinishCnt", c_int), # 本周已完成次数
]
@@ -13034,6 +13036,8 @@
def Clear(self):
self.ActionID = 0
self.DayFinishCnt = 0
+ self.DayBuyTimes = 0
+ self.DayItemTimes = 0
self.WeekFinishCnt = 0
return
@@ -13047,11 +13051,15 @@
DumpString = '''// A3 15 日常活动次数通知 //tagMCDailyActionCnt:
ActionID:%d,
DayFinishCnt:%d,
+ DayBuyTimes:%d,
+ DayItemTimes:%d,
WeekFinishCnt:%d
'''\
%(
self.ActionID,
self.DayFinishCnt,
+ self.DayBuyTimes,
+ self.DayItemTimes,
self.WeekFinishCnt
)
return DumpString
@@ -13740,6 +13748,128 @@
#------------------------------------------------------
+# A3 06 缥缈仙域信息 #tagMCFairyDomainInfo
+
+class tagMCFairyDomainEvent(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("EventID", c_ushort), #事件ID
+ ("EventState", c_ubyte), #事件状态 1-可拜访 2-拜访中 3-已拜访
+ ]
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.EventID = 0
+ self.EventState = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCFairyDomainEvent)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A3 06 缥缈仙域信息 //tagMCFairyDomainInfo:
+ EventID:%d,
+ EventState:%d
+ '''\
+ %(
+ self.EventID,
+ self.EventState
+ )
+ return DumpString
+
+
+class tagMCFairyDomainInfo(Structure):
+ Head = tagHead()
+ State = 0 #(BYTE State)//是否寻访中
+ Energy = 0 #(WORD Energy)//体力
+ Count = 0 #(BYTE Count)// 信息个数
+ InfoList = list() #(vector<tagMCFairyDomainEvent> InfoList)// 信息列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA3
+ self.Head.SubCmd = 0x06
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Energy,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temInfoList = tagMCFairyDomainEvent()
+ _pos = temInfoList.ReadData(_lpData, _pos)
+ self.InfoList.append(temInfoList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA3
+ self.Head.SubCmd = 0x06
+ self.State = 0
+ self.Energy = 0
+ self.Count = 0
+ self.InfoList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ length += 2
+ length += 1
+ for i in range(self.Count):
+ length += self.InfoList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.State)
+ data = CommFunc.WriteWORD(data, self.Energy)
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ State:%d,
+ Energy:%d,
+ Count:%d,
+ InfoList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.State,
+ self.Energy,
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCFairyDomainInfo=tagMCFairyDomainInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFairyDomainInfo.Head.Cmd,m_NAtagMCFairyDomainInfo.Head.SubCmd))] = m_NAtagMCFairyDomainInfo
+
+
+#------------------------------------------------------
# A3 16 仙盟活跃信息通知 #tagMCFamilyActivityInfo
class tagMCFamilyActionCnt(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_HorsePetBoss.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_HorsePetBoss.py
index b009ff5..ba16d96 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_HorsePetBoss.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_HorsePetBoss.py
@@ -173,7 +173,7 @@
gameWorld.SetGameWorldDict(FBDict_StartTick % lineID, 0)
gameWorld.SetGameWorldDict(FBDict_Speed % lineID, 0)
gameWorld.SetGameWorldDict(FBDict_RemainHP % lineID, 0)
-
+ PyGameData.g_horsePetBossPlayerHurtDict[lineID] = {}
gameWorld.SetPropertyID(0)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 6eb9f28..42ada9e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -501,6 +501,10 @@
"DailyAction":(
("DWORD", "DailyID", 1),
("DWORD", "DayTimes", 0),
+ ("DWORD", "DayBuyTimes", 0),
+ ("DWORD", "BuyNeedMoney", 0),
+ ("DWORD", "DayItemAddTimes", 0),
+ ("DWORD", "DayItemID", 0),
("BYTE", "DayResetType", 0),
("DWORD", "WeekTimes", 0),
("BYTE", "WeekResetType", 0),
@@ -1375,6 +1379,16 @@
("list", "Rank", 0),
("list", "Award1", 0),
("dict", "Award2", 0),
+ ),
+
+ "FairyDomain":(
+ ("WORD", "ID", 1),
+ ("BYTE", "EventType", 0),
+ ("DWORD", "MapID", 0),
+ ("BYTE", "LineID", 0),
+ ("BYTE", "CostEnergy", 0),
+ ("BYTE", "NeedAlchemyLV", 0),
+ ("DWORD", "Weight", 0),
),
}
@@ -2356,6 +2370,10 @@
def __init__(self):
self.DailyID = 0
self.DayTimes = 0
+ self.DayBuyTimes = 0
+ self.BuyNeedMoney = 0
+ self.DayItemAddTimes = 0
+ self.DayItemID = 0
self.DayResetType = 0
self.WeekTimes = 0
self.WeekResetType = 0
@@ -2363,6 +2381,10 @@
def GetDailyID(self): return self.DailyID # 活动ID
def GetDayTimes(self): return self.DayTimes # 每日次数, 0为不限制
+ def GetDayBuyTimes(self): return self.DayBuyTimes # 每日可购买次数
+ def GetBuyNeedMoney(self): return self.BuyNeedMoney # 购买次数需要仙玉
+ def GetDayItemAddTimes(self): return self.DayItemAddTimes # 每日可用物品增加次数
+ def GetDayItemID(self): return self.DayItemID # 增加次数的物品ID
def GetDayResetType(self): return self.DayResetType # 每日次数重置类型; 0-不重置,1-0点,2-5点
def GetWeekTimes(self): return self.WeekTimes # 每周次数, 0为不限制
def GetWeekResetType(self): return self.WeekResetType # 每周次数重置类型; 0-不重置,1-0点,2-5点
@@ -4208,6 +4230,27 @@
def GetRank(self): return self.Rank # 排名
def GetAward1(self): return self.Award1 # 奖励 [[独立概率万分率,[物品ID,数量,是否拍品]],..]
def GetAward2(self): return self.Award2 # 饼图奖励{随机次数:[(概率,[物品ID,数量,是否拍品]),..]}
+
+# 缥缈仙域表
+class IPY_FairyDomain():
+
+ def __init__(self):
+ self.ID = 0
+ self.EventType = 0
+ self.MapID = 0
+ self.LineID = 0
+ self.CostEnergy = 0
+ self.NeedAlchemyLV = 0
+ self.Weight = 0
+ return
+
+ def GetID(self): return self.ID # 事件编号
+ def GetEventType(self): return self.EventType # 事件类型
+ def GetMapID(self): return self.MapID # 副本id
+ def GetLineID(self): return self.LineID # 副本线路id
+ def GetCostEnergy(self): return self.CostEnergy # 消耗体力
+ def GetNeedAlchemyLV(self): return self.NeedAlchemyLV # 出现的炼丹等级要求
+ def GetWeight(self): return self.Weight # 权重
def Log(msg, playerID=0, par=0):
@@ -4513,6 +4556,8 @@
self.ipyItemWashMaxLen = len(self.ipyItemWashMaxCache)
self.ipyHorsePetBossAwardCache = self.__LoadFileData("HorsePetBossAward", IPY_HorsePetBossAward)
self.ipyHorsePetBossAwardLen = len(self.ipyHorsePetBossAwardCache)
+ 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
@@ -4959,6 +5004,8 @@
def GetItemWashMaxByIndex(self, index): return self.ipyItemWashMaxCache[index]
def GetHorsePetBossAwardCount(self): return self.ipyHorsePetBossAwardLen
def GetHorsePetBossAwardByIndex(self, index): return self.ipyHorsePetBossAwardCache[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/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 06c7130..9c942fa 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -70,6 +70,7 @@
import PlayerEquipDecompose
import PlayerGreatMaster
import PlayerGatherSoul
+import PlayerFairyDomain
import PlayerCrossRealmPK
import GameFuncComm
import PlayerMagicWeapon
@@ -744,6 +745,9 @@
FBHelpBattle.DoPlayerLogin(curPlayer)
# 聚魂
PlayerGatherSoul.PlayerLogin(curPlayer)
+ #缥缈仙域
+ PlayerFairyDomain.OnLogin(curPlayer)
+
curPlayer.SetState(0) # 脱机挂恢复为正常上线
curPlayer.SetFacePic(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线
tjgTime = PlayerTJG.GetTJGTime(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py
index 3c2f580..e61e075 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py
@@ -29,13 +29,11 @@
import PyGameData
import GameFuncComm
-
#关联类型
(
-RelatedType_1, # 1关联日常活动表
-RelatedType_2, # 2关联副本总表
+RelatedType_1, # 1关联日常活动表
+RelatedType_2, # 2关联副本总表
) = range(1, 3)
-
def OnWeek(curPlayer, onWeekType):
@@ -49,7 +47,7 @@
# 重置类型不同的不处理
if ipyData.GetWeekResetType() != onWeekType:
continue
- key = ChConfig.Def_PDict_DailyActionWeekTimes%ipyData.GetDailyID()
+ key = ChConfig.Def_PDict_DailyActionWeekTimes % ipyData.GetDailyID()
__SetPDictValue(curPlayer, key, 0)
actionIDInfo.append(ipyData.GetDailyID())
@@ -72,7 +70,7 @@
ipyData = ipyDataMgr.GetDailyQuestByIndex(i)
key = ChConfig.Def_PDict_Activity_FinishCnt % ipyData.GetID()
- curPBCnt = __GetPDictValue(curPlayer, key) #单次进度值
+ curPBCnt = __GetPDictValue(curPlayer, key) #单次进度值
if curPBCnt:
__SetPDictValue(curPlayer, key, 0)
#总活跃度重置
@@ -98,42 +96,47 @@
actionIDInfo = []
for i in xrange(ipyDataMgr.GetDailyActionCount()):
ipyData = ipyDataMgr.GetDailyActionByIndex(i)
- dayTimesLimit = GetMaxDayTimes(ipyData)#ipyData.GetDayTimes()
+ dayTimesLimit = GetMaxDayTimes(ipyData) #ipyData.GetDayTimes()
if not dayTimesLimit:
continue
# 重置类型不同的不处理
if ipyData.GetDayResetType() != onEventType:
continue
- key = ChConfig.Def_PDict_DailyActionDayTimes%ipyData.GetDailyID()
- __SetPDictValue(curPlayer, key, 0)
+ dailyID = ipyData.GetDailyID()
+ __SetPDictValue(curPlayer, ChConfig.Def_PDict_DailyActionDayTimes % dailyID, 0)
+ __SetPDictValue(curPlayer, ChConfig.Def_PDict_DailyActionDayBuyTimes % dailyID, 0)
+ __SetPDictValue(curPlayer, ChConfig.Def_PDict_DailyActionDayItemTimes % dailyID, 0)
+
actionIDInfo.append(ipyData.GetDailyID())
if actionIDInfo:
SyncDailyActionInfo(curPlayer, actionIDInfo)
return
+
def SendDayActionMail(curPlayer):
##发送每日活动邮件
- if curPlayer.GetLV()>= IpyGameDataPY.GetFuncCfg('DailyQuestMailLvLimit'):
+ if curPlayer.GetLV() >= IpyGameDataPY.GetFuncCfg('DailyQuestMailLvLimit'):
PlayerControl.SendMailByKey('TodayDailyTask', [curPlayer.GetID()], [])
return
#重新计算奖励阶段
def __CalcAwardStage(curPlayer):
- realmLV= curPlayer.GetOfficialRank()
+ realmLV = curPlayer.GetOfficialRank()
ipyData = IpyGameDataPY.IPY_Data().GetDailyLivenessRewardByIndex(0)
if not ipyData:
return
stageLVList = ipyData.GetStageLV()
curStage = 0
for i, lv in enumerate(stageLVList):
- if realmLV <lv:
+ if realmLV < lv:
break
if realmLV >= lv:
curStage = i
__SetPDictValue(curPlayer, ChConfig.Def_PDict_Activity_AwardStage, curStage)
- GameWorld.DebugLog(' 重新计算活跃奖励阶段 curStage=%s,realmLV=%s'%(curStage, realmLV))
+ GameWorld.DebugLog(' 重新计算活跃奖励阶段 curStage=%s,realmLV=%s' % (curStage, realmLV))
return
+
## OnLogin
# @param curPlayer 玩家实例
@@ -153,6 +156,7 @@
# @return
def __GetPDictValue(curPlayer, key, defaultValue=0):
return curPlayer.NomalDictGetProperty(key, defaultValue)
+
## 设置活跃度玩家数据库字典信息值
# @param curPlayer 玩家实例
@@ -180,7 +184,6 @@
return
-
## 摸NPC获得活跃度
# @param atkObj
# @param curNPC
@@ -201,6 +204,7 @@
return
+
## 增加完成活跃度次数
# @param curPlayer 玩家实例
# @param activityNum 活跃度编号
@@ -218,15 +222,15 @@
onceActivityTime = dailyQuestData.GetOnceActivityTime()
if not onceActivity:
return
- if maxActiveValue and finishCnt > maxActiveValue/onceActivity*onceActivityTime:
+ if maxActiveValue and finishCnt > maxActiveValue / onceActivity * onceActivityTime:
#GameWorld.DebugLog("活跃度可完成次数已达到上限,activityNum=%s" % (activityNum))
return
key = ChConfig.Def_PDict_Activity_FinishCnt % activityNum
- curPBCnt = __GetPDictValue(curPlayer, key) #单次进度值
+ curPBCnt = __GetPDictValue(curPlayer, key) #单次进度值
- addValue = (addCnt+curPBCnt)/onceActivityTime * onceActivity #增加的活跃度
- addPbCnt = (addCnt+curPBCnt) % onceActivityTime
+ addValue = (addCnt + curPBCnt) / onceActivityTime * onceActivity #增加的活跃度
+ addPbCnt = (addCnt + curPBCnt) % onceActivityTime
__SetPDictValue(curPlayer, key, addPbCnt)
@@ -235,11 +239,11 @@
if addValue:
multiple, extraPointLimit = __GetActionAddPer(curPlayer)
curExtraPoint = __GetPDictValue(curPlayer, ChConfig.Def_PDict_Activity_ExtraRealmPoint)
- addExtraPoint = max(0, min(addValue*(multiple-1),extraPointLimit-curExtraPoint)) if extraPointLimit else addValue*(multiple-1)
- __SetPDictValue(curPlayer, ChConfig.Def_PDict_Activity_ExtraRealmPoint, curExtraPoint+addExtraPoint)
+ addExtraPoint = max(0, min(addValue * (multiple - 1), extraPointLimit - curExtraPoint)) if extraPointLimit else addValue * (multiple - 1)
+ __SetPDictValue(curPlayer, ChConfig.Def_PDict_Activity_ExtraRealmPoint, curExtraPoint + addExtraPoint)
addValue = addValue + addExtraPoint
curTotalPoint = __GetPDictValue(curPlayer, ChConfig.Def_PDict_Activity_TotalPoint)
- __SetPDictValue(curPlayer, ChConfig.Def_PDict_Activity_TotalPoint, curTotalPoint+addValue)
+ __SetPDictValue(curPlayer, ChConfig.Def_PDict_Activity_TotalPoint, curTotalPoint + addValue)
#realmPoint = __GetPDictValue(curPlayer, ChConfig.Def_PDict_Activity_RealmPoint)
#__SetPDictValue(curPlayer, ChConfig.Def_PDict_Activity_RealmPoint, realmPoint+addValue)
SyncDailyActivityInfo(curPlayer)
@@ -248,9 +252,10 @@
% (activityNum, addPbCnt, addValue, multiple, addExtraPoint, curExtraPoint), curPlayer.GetPlayerID())
return
+
def __GetActionAddPer(curPlayer):
- multiple, extraPointLimit = 1, 0 #倍数、额外可获得修行点上限
- actRealmPointInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RealmPoint, {})# 多倍修行点活动
+ multiple, extraPointLimit = 1, 0 #倍数、额外可获得修行点上限
+ actRealmPointInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RealmPoint, {}) # 多倍修行点活动
if not actRealmPointInfo:
return multiple, extraPointLimit
if not actRealmPointInfo.get(ShareDefine.ActKey_State):
@@ -261,6 +266,7 @@
if curPlayer.GetLV() < actRealmPointIpyData.GetLVLimit():
return multiple, extraPointLimit
return actRealmPointIpyData.GetMultiple(), actRealmPointIpyData.GetPointLimit()
+
## 同步活跃度信息
# @param curPlayer
@@ -276,7 +282,6 @@
sendPack.ExtraPoint = __GetPDictValue(curPlayer, ChConfig.Def_PDict_Activity_ExtraRealmPoint)
NetPackCommon.SendFakePack(curPlayer, sendPack)
return
-
## 领取活跃度奖励
@@ -312,7 +317,7 @@
itemIDList = ipyData.GetItemID()
itemCntList = ipyData.GetItemCount()
itemIsBindList = ipyData.GetItemBind()
- if awardStage >=len(itemIDList) or awardStage >= len(itemCntList) or awardStage >= len(itemIsBindList):
+ if awardStage >= len(itemIDList) or awardStage >= len(itemCntList) or awardStage >= len(itemIsBindList):
return
itemID = itemIDList[awardStage]
@@ -333,10 +338,9 @@
SyncDailyActivityInfo(curPlayer)
GameWorld.DebugLog("领取活跃度奖励OK!awardStage=%s, index=%s,needActivity=%s,totalActivity=%s,awardRecord=%s"
% (awardStage, awardIndex, needActivity, totalActivity, updAwardRecord))
-
-
return
+
def GetRealmPointAward(curPlayer):
#领取活跃修行点
@@ -350,14 +354,16 @@
SyncDailyActivityInfo(curPlayer)
return
+
def GetActivityNum(relatedType, relatedID):
## 获取日常任务ID(活跃ID)
- ipyData = IpyGameDataPY.GetIpyGameDataByCondition('DailyQuest', {"RelatedID":relatedID,"RelatedType":relatedType}, False, False)
+ ipyData = IpyGameDataPY.GetIpyGameDataByCondition('DailyQuest', {"RelatedID":relatedID, "RelatedType":relatedType}, False, False)
if not ipyData:
return 0
return ipyData.GetID()
#########################################日常活动###########################################
+
def AddDailyActionFinishCnt(curPlayer, dailyID, addCnt=1):
##增加日常活动完成次数
@@ -375,7 +381,7 @@
GameWorld.DebugLog("日常活动未开启!dailyID=%s" % dailyID)
return
- dayTimesLimit = GetMaxDayTimes(ipyData)#ipyData.GetDayTimes()
+ dayTimesLimit = GetMaxDayTimes(ipyData) #ipyData.GetDayTimes()
weekTimesLimit = ipyData.GetWeekTimes()
if not dayTimesLimit and not weekTimesLimit:
return
@@ -389,24 +395,26 @@
updDayTimes = 0
if dayTimesLimit:
- key = ChConfig.Def_PDict_DailyActionDayTimes%dailyID
+ key = ChConfig.Def_PDict_DailyActionDayTimes % dailyID
curDayTimes = curPlayer.NomalDictGetProperty(key)
- if not unLimitCnt and curDayTimes >= dayTimesLimit:
+ curDayBuyTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyActionDayBuyTimes % dailyID)
+ curDayItemTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyActionDayItemTimes % dailyID)
+ if not unLimitCnt and curDayTimes >= dayTimesLimit + curDayBuyTimes + curDayItemTimes:
return
- updDayTimes = curDayTimes+addCnt if unLimitCnt else min(dayTimesLimit, curDayTimes+addCnt)
+ updDayTimes = curDayTimes + addCnt if unLimitCnt else min(dayTimesLimit + curDayBuyTimes + curDayItemTimes, curDayTimes + addCnt)
addCnt = updDayTimes - curDayTimes
PlayerControl.NomalDictSetProperty(curPlayer, key, updDayTimes)
- GameWorld.DebugLog('增加日常活动完成次数 dailyID=%s, curDayTimes=%s, updDayTimes=%s'%(dailyID, curDayTimes, updDayTimes))
+ GameWorld.DebugLog('增加日常活动完成次数 dailyID=%s, curDayTimes=%s, updDayTimes=%s' % (dailyID, curDayTimes, updDayTimes))
updWeekTimes = 0
if weekTimesLimit:
- key = ChConfig.Def_PDict_DailyActionWeekTimes%dailyID
+ key = ChConfig.Def_PDict_DailyActionWeekTimes % dailyID
curWeekTimes = curPlayer.NomalDictGetProperty(key)
if not unLimitCnt and curWeekTimes >= weekTimesLimit:
return
- updWeekTimes = curWeekTimes+addCnt if unLimitCnt else min(weekTimesLimit, curWeekTimes+addCnt)
+ updWeekTimes = curWeekTimes + addCnt if unLimitCnt else min(weekTimesLimit, curWeekTimes + addCnt)
addCnt = updWeekTimes - curWeekTimes
PlayerControl.NomalDictSetProperty(curPlayer, key, updWeekTimes)
- GameWorld.DebugLog('增加日常活动完成次数 dailyID=%s, curWeekTimes=%s, updWeekTimes=%s'%(dailyID, curWeekTimes, updWeekTimes))
+ GameWorld.DebugLog('增加日常活动完成次数 dailyID=%s, curWeekTimes=%s, updWeekTimes=%s' % (dailyID, curWeekTimes, updWeekTimes))
SyncDailyActionInfo(curPlayer, [dailyID])
@@ -416,14 +424,24 @@
AddActivityFinishCnt(curPlayer, activityNum, updTimes, addCnt)
return True
+
def GetDailyActionFinishCnt(curPlayer, dailyID):
- key = ChConfig.Def_PDict_DailyActionDayTimes%dailyID
+ key = ChConfig.Def_PDict_DailyActionDayTimes % dailyID
curDayTimes = __GetPDictValue(curPlayer, key)
ipyData = IpyGameDataPY.GetIpyGameData('DailyAction', dailyID)
if not ipyData:
return 0, 0
- dayTimesLimit = GetMaxDayTimes(ipyData)#ipyData.GetDayTimes()
+ dayTimesLimit = GetMaxDayTimes(ipyData) #ipyData.GetDayTimes()
return curDayTimes, dayTimesLimit
+
+def GetDailyActionrRemainCnt(curPlayer, dailyID):
+ ##获取活动剩余次数
+ curDayTimes = __GetPDictValue(curPlayer, ChConfig.Def_PDict_DailyActionDayTimes % dailyID)
+ curDayBuyTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyActionDayBuyTimes % dailyID)
+ curDayItemTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyActionDayItemTimes % dailyID)
+ ipyData = IpyGameDataPY.GetIpyGameData('DailyAction', dailyID)
+ dayTimesLimit = GetMaxDayTimes(ipyData)
+ return max(0, dayTimesLimit+curDayBuyTimes+curDayItemTimes-curDayTimes)
def GetMaxDayTimes(ipyData):
dayTimesLimit = ipyData.GetDayTimes()
@@ -431,11 +449,67 @@
dayTimesLimit += IpyGameDataPY.GetFuncCfg('RuneTowerSweepBuy')
return dayTimesLimit
+
+#// A5 25 购买日常活动次数 #tagCMBuyDailyActionCnt
+#
+#struct tagCMBuyDailyActionCnt
+#{
+# tagHead Head;
+# DWORD ActionID; // ID
+# BYTE AddType; // 0-花仙玉 1-用物品
+#};
+def OnDailyActionBuyCnt(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ dailyID = clientData.ActionID
+ addType = clientData.AddType #0花仙玉 1使用物品
+ ipyData = IpyGameDataPY.GetIpyGameData('DailyAction', dailyID)
+ if not ipyData:
+ return
+ curDayTimes = __GetPDictValue(curPlayer, ChConfig.Def_PDict_DailyActionDayTimes % dailyID)
+ curDayBuyTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyActionDayBuyTimes % dailyID)
+ curDayItemTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyActionDayItemTimes % dailyID)
+ if curDayBuyTimes + curDayItemTimes - curDayTimes >= 0:
+ GameWorld.DebugLog('剩余次数已达上限,不可增加!')
+ return
+
+ if addType == 0:
+ dayBuyTimesLimit = ipyData.GetDayBuyTimes()
+ buyNeedMoney = ipyData.GetBuyNeedMoney()
+ if not dayBuyTimesLimit or not buyNeedMoney:
+ return
+ if curDayBuyTimes >= dayBuyTimesLimit:
+ GameWorld.DebugLog('今日购买次数已达上限,不可增加!')
+ return
+ if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, buyNeedMoney, ChConfig.Def_Cost_BuyDailyActionCnt, {'dailyID':dailyID, 'curDayBuyTimes':curDayBuyTimes}):
+ return
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyActionDayBuyTimes % dailyID, curDayBuyTimes + 1)
+
+ elif addType == 1:
+ dayItemAddTimesLimit = ipyData.GetDayItemAddTimes()
+ dayItemID = ipyData.GetDayItemID()
+ if not dayItemAddTimesLimit or not dayItemID:
+ return
+ if curDayItemTimes >= dayItemAddTimesLimit:
+ GameWorld.DebugLog('今日使用物品增加次数已达上限,不可增加!')
+ return
+ itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+ enough, indexList, hasBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(dayItemID, itemPack, 1)
+ if not enough:
+ return
+ ItemCommon.ReduceItem(curPlayer, itemPack, indexList, 1, False, "DailyActionCnt")
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyActionDayItemTimes % dailyID, curDayItemTimes + 1)
+
+ else:
+ return
+ SyncDailyActionInfo(curPlayer, [dailyID])
+ return
+
+
## 同步活跃度信息
# @param curPlayer
# @param syncNum 默认-1时全部同步
# @return None
-def SyncDailyActionInfo(curPlayer, syncNumList= []):
+def SyncDailyActionInfo(curPlayer, syncNumList=[]):
sendPack = ChPyNetSendPack.tagMCDailyActionCnt()
sendPack.Clear()
sendPack.ActionInfo = []
@@ -446,12 +520,15 @@
activityInfo.Clear()
activityInfo.ActionID = activityNum
activityInfo.DayFinishCnt = __GetPDictValue(curPlayer, ChConfig.Def_PDict_DailyActionDayTimes % activityNum)
+ activityInfo.DayBuyTimes = __GetPDictValue(curPlayer, ChConfig.Def_PDict_DailyActionDayBuyTimes % activityNum)
+ activityInfo.DayItemTimes = __GetPDictValue(curPlayer, ChConfig.Def_PDict_DailyActionDayItemTimes % activityNum)
activityInfo.WeekFinishCnt = __GetPDictValue(curPlayer, ChConfig.Def_PDict_DailyActionWeekTimes % activityNum)
sendPack.ActionInfo.append(activityInfo)
sendPack.Count = len(sendPack.ActionInfo)
NetPackCommon.SendFakePack(curPlayer, sendPack)
return
+
##################################副本类增加活跃##########################################
## 参加副本获得活跃度
@@ -462,4 +539,4 @@
activityNum = GetActivityNum(RelatedType_2, mapID)
if activityNum:
AddActivityFinishCnt(curPlayer, activityNum, curDayTimes, addCount)
- return
\ No newline at end of file
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
new file mode 100644
index 0000000..3142c2f
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
@@ -0,0 +1,217 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+#-------------------------------------------------------------------------------
+#
+##@package Player.PlayerFairyDomain
+#
+# @todo:缥缈仙域
+# @author xdh
+# @date 2019-04-04
+# @version 1.0
+#
+# 详细描述: 缥缈仙域
+#---------------------------------------------------------------------
+#"""Version = 2019-04-04"""
+#---------------------------------------------------------------------
+
+import ChConfig
+import ChPyNetSendPack
+import NetPackCommon
+import ShareDefine
+import GameWorld
+import PlayerControl
+import IpyGameDataPY
+import PlayerActivity
+
+import copy
+
+#0-奇遇 1-宝藏 2-仙草 3-妖王 4-灵草
+(
+FDEventType0,
+FDEventType1,
+FDEventType2,
+FDEventType3,
+FDEventType4,
+) = range(5)
+
+(
+FDEventState_No, #不可拜访0
+FDEventState_CanVisit, #可拜访1
+FDEventState_Visiting, #拜访中2
+FDEventState_Visited, #已拜访3
+) = range(4)
+
+
+def OnLogin(curPlayer):
+ NotifyVisitFairyDomainInfo(curPlayer)
+ return
+
+
+#// A5 26 寻访仙域 #tagCMVisitFairyDomain
+#
+#struct tagCMVisitFairyDomain
+#{
+# tagHead Head;
+# BYTE Type; //0-开始寻访 1-结束寻访
+#};
+def OnVisitFairyDomain(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ dailyID = ShareDefine.DailyActionID_FairyDomain
+ hasOpen = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_DailyActionState % dailyID)
+ if not hasOpen:
+ GameWorld.DebugLog(" 寻访仙域活动未开启!")
+ return
+ otherCntRateList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 2)
+ maxEventCnt = max([info[1] for info in otherCntRateList]) + 1 #最大可出现事件个数
+
+ if clientData.Type == 1: #结束寻访
+ if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainState):
+ GameWorld.DebugLog(" 未开始寻访仙域, 无法结束")
+ return
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainState, 0)
+ for i in xrange(maxEventCnt):
+ fdEventID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventID % i)
+ if fdEventID:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventID%i, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventState%fdEventID, 0)
+
+ NotifyVisitFairyDomainInfo(curPlayer)
+ return
+
+ #是否寻访中
+ if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainState):
+ GameWorld.DebugLog(" 正在寻访仙域中!请先退出寻访")
+ return
+
+ if not PlayerActivity.AddDailyActionFinishCnt(curPlayer, dailyID):
+ GameWorld.DebugLog(" 寻访仙域次数不足!")
+ return
+
+ #随机事件 重置事件状态
+ visitCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainVisitCnt)
+ specialVisitDict = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 5, {})
+ maxSpecialCnt = max(specialVisitDict) if specialVisitDict else 0
+ if visitCnt + 1 in specialVisitDict:
+ fdEventIDList = specialVisitDict[visitCnt + 1]
+ else:
+ fdEventTypeDict = {}
+ #先随机奇遇事件
+ fortuitousEventRate = IpyGameDataPY.GetFuncCfg('ImmortalDomain')
+ if GameWorld.CanHappen(fortuitousEventRate):
+ fdEventTypeDict[FDEventType0] = 1
+
+ otherCnt = GameWorld.GetResultByRandomList(otherCntRateList, 0)
+ if otherCnt:
+ otherEventRateList = copy.deepcopy(IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 3))
+ unRepeatTypeList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 4)
+ for _ in xrange(otherCnt):
+ otherEventType = GameWorld.GetResultByRandomList(otherEventRateList, 0)
+ if not otherEventType:
+ continue
+ if otherEventType in unRepeatTypeList:
+ for index, info in enumerate(otherEventRateList):
+ if otherEventType == info[1]:
+ otherEventRateList = GameWorld.ResetRiseList(otherEventRateList, index)
+ break
+ fdEventTypeDict[otherEventType] = fdEventTypeDict.get(otherEventType, 0) + 1
+
+ fdEventIDList = []
+ for eventType, cnt in fdEventTypeDict.items():
+ fdEventIDList += __RandomFDEventByType(curPlayer, eventType, cnt)
+ if not fdEventIDList:
+ GameWorld.Log('寻访仙域, 没有随机出事件!!')
+ return
+
+ if visitCnt < maxSpecialCnt:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainVisitCnt, visitCnt + 1)
+ #设置事件
+ for i in xrange(maxEventCnt):
+ fdEventID = fdEventIDList[i] if i < len(fdEventIDList) else 0
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventID % i, fdEventID)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventState % fdEventID, FDEventState_CanVisit)
+ #设置寻访中
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainState, 1)
+ #设置初始体力
+ initEnergy = IpyGameDataPY.GetFuncCfg('ImmortalDomainStrength')
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEnergy, initEnergy)
+ GameWorld.DebugLog('寻访仙域 随机结果 fdEventIDList=%s, visitCnt=%s' % (fdEventIDList, visitCnt))
+ #通知
+ NotifyVisitFairyDomainInfo(curPlayer, fdEventIDList)
+ return
+
+
+def __RandomFDEventByType(curPlayer, eventType, cnt):
+ ##根据事件类型随机事件
+ ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('FairyDomain', {'EventType':eventType}, True)
+ if not ipyDataList:
+ return []
+ randomRateList = []
+ rate = 0
+ for ipyData in ipyDataList:
+ needAlchemyLV = ipyData.GetNeedAlchemyLV()
+ curAlchemyLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyLV)
+ if curAlchemyLV < needAlchemyLV - 1:
+ #丹炉等级不足
+ continue
+ rate += ipyData.GetWeight()
+ randomRateList.append([rate, ipyData.GetID()])
+ if not randomRateList:
+ GameWorld.DebugLog(' 缥缈仙域刷新池 随机库获取错误 !eventType=%s' % eventType, curPlayer.GetID())
+ return []
+ randomResultList = GameWorld.GetResultByRandomListEx(randomRateList, cnt, [])
+
+ return randomResultList
+
+
+def SetFairyDomainEventState(curPlayer, fdeventID, state):
+ ## 设置缥缈事件状态, return 是否成功
+ if state not in [FDEventState_Visiting, FDEventState_Visited]: # 1-未拜访 2-拜访中 3-已拜访
+ GameWorld.Log('缥缈仙域事件状态设置错误,state=%s' % state)
+ return
+ curState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventState % fdeventID)
+ if state == FDEventState_Visiting:
+ if curState != FDEventState_CanVisit:
+ GameWorld.Log('缥缈仙域事件状态设置错误,fdeventID=%s, state=%s, curState=%s' % (fdeventID, state, curState))
+ return
+ ipyData = IpyGameDataPY.GetIpyGameData('FairyDomain', fdeventID)
+ if not ipyData:
+ return
+ costEnergy = ipyData.GetCostEnergy()
+ curEnergy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEnergy)
+ if curEnergy < costEnergy:
+ GameWorld.Log('缥缈仙域事件状态设置,体力不足!,fdeventID=%s, costEnergy=%s, curEnergy=%s' % (fdeventID, costEnergy, curEnergy))
+ return
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEnergy, curEnergy - costEnergy)
+ elif state == FDEventState_Visited:
+ if curState != FDEventState_Visiting:
+ GameWorld.Log('缥缈仙域事件状态设置错误,fdeventID=%s, state=%s, curState=%s' % (fdeventID, state, curState))
+ return
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventState % fdeventID, state)
+ NotifyVisitFairyDomainInfo(curPlayer, fdeventID)
+ return True
+
+
+def NotifyVisitFairyDomainInfo(curPlayer, fdEventList=[]):
+ if not fdEventList:
+ otherCntRateList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 2)
+ maxEventCnt = max([info[1] for info in otherCntRateList]) + 1 #最大可出现事件个数
+ for i in xrange(maxEventCnt):
+ fdEventID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventID % i)
+ if fdEventID:
+ fdEventList.append(fdEventID)
+
+ packData = ChPyNetSendPack.tagMCFairyDomainInfo()
+ packData.State = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainState)
+ packData.Energy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEnergy)
+ packData.InfoList = []
+ for fdeventID in fdEventList:
+ fdeventData = ChPyNetSendPack.tagMCFairyDomainEvent()
+ fdeventData.EventID = fdeventID
+ fdeventData.EventState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventState % fdeventID)
+ packData.InfoList.append(fdeventData)
+ packData.Count = len(packData.InfoList)
+ NetPackCommon.SendFakePack(curPlayer, packData)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 5ffca38..627f1c6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1427,7 +1427,8 @@
DailyActionID_FamilyBoss1, # 仙盟BOSS第一场 22
DailyActionID_FamilyBoss2, # 仙盟BOSS第二场 23
DailyActionID_HorsePetBoss, # 骑宠BOSS 24
-) = range(1, 24 + 1)
+DailyActionID_FairyDomain, # 缥缈仙域 25
+) = range(1, 25 + 1)
--
Gitblit v1.8.0