From d7f44d8d871a90c818bdb3ffe9a60af875b7100a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 30 九月 2025 10:12:23 +0800
Subject: [PATCH] 135 【挑战】战锤秘境-服务端(白骨盈野;副本基础;副本扫荡;广告奖励支持;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py | 81 -
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py | 31
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py | 42
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 79 --
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 601 +++++++---------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py | 108 --
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 23
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py | 566 +++++---------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py | 72 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py | 8
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 93 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetFBStar.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 93 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 54
PySysDB/PySysDBPY.h | 46
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 24
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 22
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 201 ----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFuncTeam.py | 8
23 files changed, 847 insertions(+), 1,320 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 89399d8..f89fdb0 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1218,22 +1218,14 @@
//副本总表
-struct tagFBFunc
+struct FBFunc
{
DWORD _DataMapID; //数据地图ID
- BYTE DayTimes; //每日可挑战次数, 0为不限制
- BYTE DayResetType; //每日次数重置类型; 0-不重置,1-0点,2-5点
- BYTE WeekTimes; //每周可挑战次数, 0为不限制
- BYTE WeekResetType; //每周次数重置类型; 0-不重置,1-0点,2-5点
- list RewardRate; //评级奖励比例
- DWORD BuyTimesVIPPriID; //购买次数VIP权限ID
- DWORD ExtraTimesVIPPriID; //额外次数VIP权限ID
- DWORD ExtraTimesMWPriID; //额外次数法宝权限ID
- BYTE GuardPick; //该地图守护是否能拾取
- WORD OfflineTime; //离线多久退出副本(秒)
- WORD FBPoint; //副本过关仙缘币
- WORD HelpPoint; //助战仙缘币(0代表不可助战)
- BYTE DayHelpCountMax; //每日手动助战获得仙缘币次数(非镜像)
+ BYTE DayTimes; //每日免费次数, 0为不限制
+ BYTE PayCntMax; //额外付费次数
+ BYTE PayMoneyType; //消耗货币类型
+ list PayMoneyValues; //消耗货币值列表
+
};
//副本功能线路表
@@ -1242,20 +1234,20 @@
{
DWORD _DataMapID; //数据地图ID
BYTE _LineID; //功能线路ID
- DWORD MapID; //场景地图ID
WORD LVLimitMin; //最低等级限制, 0为不限制
- WORD LVLimitMax; //最高等级限制, 0为不限制
- DWORD TicketID; //门票ID
- list TicketCostCnt; //门票消耗数信息
- WORD TicketPrice; //门票单价(不能用钱抵的配0)
- WORD SweepLVLimit; //扫荡等级限制, 0为不限制
- DWORD SweepItemID; //扫荡所需道具ID
- BYTE SweepCostCnt; //扫荡所需道具个数
- eval EnterPosInfo; //进入坐标信息
- eval StepTime; //阶段时间
- eval RefreshNPC; //标试点刷怪配置
- eval GradeInfo; //评级规则
- eval RewardInfo; //奖励信息
+ list PassAwardList; //过关奖励
+ list SweepAwardList; //扫荡奖励
+ list LineupIDList; //阵容ID列表
+};
+
+//广告奖励表
+
+struct ADAward
+{
+ DWORD _ADID;
+ BYTE ADCntMax; //每日次数
+ list ADAwardItemList; //广告奖励物品列表
+ DWORD ADMapID; //对应副本ID,默认给该副本1次次数
};
//副本通用养成表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index be34ac8..60b6c7d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -22,9 +22,9 @@
PacketSubCMD_3=0x23
PacketCallFunc_3=OnUseItems
-PacketCMD_4=0xA3
-PacketSubCMD_4=0x12
-PacketCallFunc_4=OnGuardPickupItem
+PacketCMD_4=
+PacketSubCMD_4=
+PacketCallFunc_4=
PacketCMD_5=0xA3
PacketSubCMD_5=0x07
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
index 06c2a8d..8491e7f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -36,6 +36,7 @@
import TurnPassive
import TurnSkill
import TurnBuff
+import FBCommon
import CommFunc
import ObjPool
import FBLogic
@@ -862,6 +863,15 @@
GameWorld.DebugLog("回合制战斗请求: mapID=%s,funcLineID=%s,tagType=%s,tagID=%s,valueList=%s"
% (mapID, funcLineID, tagType, tagID, valueList), curPlayer.GetPlayerID())
+ fbIpyData = FBCommon.GetFBIpyData(mapID)
+ fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, funcLineID, False)
+ if fbIpyData:
+ if not fbLineIpyData:
+ GameWorld.DebugLog("不存在该副本功能线路! mapID=%s,funcLineID=%s" % (mapID, funcLineID))
+ return
+ if FBCommon.CheckCanEnterFBComm(curPlayer, mapID, funcLineID, fbIpyData, fbLineIpyData) != ShareDefine.EntFBAskRet_OK:
+ return
+
reqRet = FBLogic.OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList)
if not reqRet:
return
@@ -877,10 +887,15 @@
# NPC
else:
- ret = FBLogic.GetFBNPCLineupInfo(curPlayer, mapID, funcLineID)
- if not ret:
- return
- npcLineupIDList, strongerLV, difficulty = ret
+ npcLineupIDList, strongerLV, difficulty = [], 0, 0
+ if fbLineIpyData:
+ npcLineupIDList = fbLineIpyData.GetLineupIDList()
+
+ if not npcLineupIDList:
+ ret = FBLogic.GetFBNPCLineupInfo(curPlayer, mapID, funcLineID)
+ if not ret:
+ return
+ npcLineupIDList, strongerLV, difficulty = ret
OnTurnFightVSNPC(curPlayer, mapID, funcLineID, atkLineupID, npcLineupIDList, strongerLV, difficulty)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 9381d4a..7480422 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -1912,152 +1912,41 @@
Def_FBMapID_MainBoss = 2 # 主线Boss
Def_FBMapID_ArenaBattle = 3 # 演武场
-#创角新手村地图ID列表
-Def_CreatRoleMapIDList = [10000]
-#PK周赛
-Def_FBMapID_WeedPK = 12040
-#战盟副本-异界入侵、守卫人皇
-Def_FBMapID_FamilyInvade = 31170
+Def_FBMapID_Zhanchui = 30010 # 白骨盈野/战锤秘境
+Def_FBMapID_Tianzi = 30020 # 天子考验
-# 战盟boss副本
-Def_FBMapID_FamilyBossMap = 31210
-# 仙盟联赛
-Def_FBMapID_FamilyWar = 31220
-
-# 百战之地
-Def_FBMapID_BZZD = 31080
-
-#试炼之塔(符印塔)
-Def_FBMapID_TrialTower = 31130
-
-#除魔卫道
-Def_FBMapID_ClearDevil = 31040
-#新手副本
-#Def_FBMapID_ClearDevil2 = 31090
-#法宝副本
-Def_FBMapID_MagicWeapon = 41110
-
-#BOSS之家
-Def_FBMapID_BossHome = 31270 #31020地图ID修改,不使用副本类型
-
-#古神禁地
-Def_FBMapID_GodArea = 31150
-
-#冰晶矿脉
-Def_FBMapID_IceLode = 31140
-
-#渡劫副本
-Def_FBMapID_DuJie = 31110
-
-#麒麟之府
-Def_FBMapID_KirinHome = 311900
-
-#个人BOSS
-Def_FBMapID_PersonalBoss = 31240
-
-#仙盟宴会
-Def_FBMapID_FamilyParty = 31230
-
-#宗门试炼
-Def_FBMapID_MunekadoTrial = 60010
-
-#混乱妖域
-Def_FBMapID_ChaosDemon = 31180
-
-#讨伐妖魔
-Def_FBMapID_KillDevil = 31280
-
-#娲皇遗迹
-Def_FBMapID_QueenRelics = 51010
-
-#上古战场
-Def_FBMapID_ElderBattlefield = 31160
-
-#守护副本
-Def_FBMapID_Guard = 31250
-
-#封魔坛
-Def_FBMapID_SealDemon = 52010
-#单人封魔坛
-Def_FBMapID_SealDemonEx = 52020
-#诛仙BOSS/雷罚BOSS
-Def_FBMapID_ZhuXianBoss = 31380
-#天星塔/丹塔
-Def_FBMapID_SkyTower = 31370
-#境界塔
-Def_FBMapID_RealmTower = 31310
-#仙魔之争
-Def_FBMapID_XMZZ = 31010
-#神兽副本
-Def_FBMapID_Dogz = 21110
-#聚魂副本
-Def_FBMapID_GatherSoul = 31340
-#跨服竞技场
-Def_FBMapID_CrossRealmPK = 32010
-#跨服排位
-Def_FBMapID_CrossChampionship = 32070
-#跨服蓬莱仙境
-Def_FBMapID_CrossPenglai = 32020
-#跨服魔化之地
-Def_FBMapID_CrossDemonLand = 32080
-#跨服妖王
-Def_FBMapID_CrossDemonKing = 32030
-#本服妖王
-Def_FBMapID_DemonKing = 22030
-#多仙盟Boss
-Def_FBMapID_AllFamilyBoss = 31260
-#骑宠Boss
-Def_FBMapID_HorsePetBoss = 31200
-#缥缈宝藏
-Def_FBMapID_FairyTreasure = 31190
-#跨服灵草园
-Def_FBMapID_CrossGrasslandLing = 32040
-#跨服仙草园
-Def_FBMapID_CrossGrasslandXian = 32050
-#跨服战场
-Def_FBMapID_CrossBattlefield = 32060
-#跨服仙盟夺旗战/逐鹿万界
-Def_FBMapID_CrossFamilyFlagwar = 32090
-#情缘副本
-Def_FBMapID_Love = 31300
-#镜像切磋
-Def_FBMapID_MirrorBattle = 100
-
-#镜像PK的地图ID列表
-MirrorBattleMapIDList = []
+#线路未过关时免费的地图
+UnPassFreeMapIDList = [Def_FBMapID_ArenaBattle]
+#按星级记录过关的地图
+PassByStarMapIDList = []
#注册上传跨服服务器数据后直接进入跨服服务器的地图
-RegisterEnter_CrossServerMapIDList = [Def_FBMapID_CrossPenglai, Def_FBMapID_CrossDemonLand, Def_FBMapID_CrossDemonKing,
- Def_FBMapID_CrossGrasslandLing, Def_FBMapID_CrossGrasslandXian, Def_FBMapID_CrossBattlefield,
- Def_FBMapID_CrossChampionship, Def_FBMapID_CrossFamilyFlagwar,
- ]
+RegisterEnter_CrossServerMapIDList = []
#跨服地图
-Def_CrossMapIDList = RegisterEnter_CrossServerMapIDList + [Def_FBMapID_CrossRealmPK]
+Def_CrossMapIDList = RegisterEnter_CrossServerMapIDList + []
#跨服分区类型配置, 没配置的默认 CrossZoneComm
Def_CrossZoneTypeName = {0:"CrossZoneComm", # 特殊0,默认常规分区
- Def_FBMapID_CrossPenglai:"CrossZoneComm",
- Def_FBMapID_CrossDemonLand:"CrossZoneComm",
- Def_FBMapID_CrossRealmPK:"CrossZonePK",
- Def_FBMapID_CrossDemonKing:"CrossZonePK",
- Def_FBMapID_CrossGrasslandLing:"CrossZonePK",
- Def_FBMapID_CrossGrasslandXian:"CrossZonePK",
- Def_FBMapID_CrossBattlefield:"CrossZoneBattlefield",
- Def_FBMapID_CrossChampionship:"CrossZonePK",
- Def_FBMapID_CrossFamilyFlagwar:"CrossZoneComm",
+# Def_FBMapID_CrossPenglai:"CrossZoneComm",
+# Def_FBMapID_CrossDemonLand:"CrossZoneComm",
+# Def_FBMapID_CrossDemonKing:"CrossZonePK",
+# Def_FBMapID_CrossGrasslandLing:"CrossZonePK",
+# Def_FBMapID_CrossGrasslandXian:"CrossZonePK",
+# Def_FBMapID_CrossBattlefield:"CrossZoneBattlefield",
+# Def_FBMapID_CrossChampionship:"CrossZonePK",
+# Def_FBMapID_CrossFamilyFlagwar:"CrossZoneComm",
}
#跨服分区对应地图配置表名 - 仅适用于固定地图及虚拟分线的跨服玩法
-Def_CrossZoneMapTableName = {Def_FBMapID_CrossPenglai:"CrossPenglaiZoneMap",
- Def_FBMapID_CrossDemonLand:"CrossDemonLandZoneMap",
- Def_FBMapID_CrossFamilyFlagwar:"CrossFamilyFlagwarZoneMap",
+Def_CrossZoneMapTableName = {
+ #Def_FBMapID_CrossPenglai:"CrossPenglaiZoneMap",
+ #Def_FBMapID_CrossDemonLand:"CrossDemonLandZoneMap",
+ #Def_FBMapID_CrossFamilyFlagwar:"CrossFamilyFlagwarZoneMap",
}
#需要动态分配线路的跨服地图
-Def_CrossDynamicLineMap = [Def_FBMapID_CrossDemonKing, Def_FBMapID_CrossGrasslandLing, Def_FBMapID_CrossGrasslandXian, Def_FBMapID_CrossBattlefield, Def_FBMapID_CrossChampionship]
+Def_CrossDynamicLineMap = []
#副本关闭时未拾取的物品邮件发放给玩家
#这里只有需要的副本才配置,不做默认逻辑,防止某些副本实际不能给导致刷物品,如麒麟之府
-Def_SendUnPickItemMailMapIDList = [Def_FBMapID_IceLode, Def_FBMapID_PersonalBoss, Def_FBMapID_MunekadoTrial,
- Def_FBMapID_SealDemon, Def_FBMapID_SealDemonEx, Def_FBMapID_ZhuXianBoss,
- Def_FBMapID_DemonKing, Def_FBMapID_CrossDemonKing, Def_FBMapID_KillDevil]
+Def_SendUnPickItemMailMapIDList = []
#金钱不掉物品直接给玩家的地图
Def_GiveMoneyMapIDList = []
@@ -2065,29 +1954,15 @@
# 副本中玩家下线就被踢出
Def_DisconnectExit_FBID = []
#会有阵营的地图
-Def_MapID_NeedCamp = [Def_FBMapID_FamilyWar, Def_FBMapID_GatherSoul, Def_FBMapID_CrossBattlefield] + MirrorBattleMapIDList
+Def_MapID_NeedCamp = []
# 进入副本需要根据请求lineID动态分配虚拟分线属性的地图
-Def_MapID_LineIDToPropertyID = [Def_FBMapID_ElderBattlefield]
-
-# 进入副本需要发送到GameServer的地图
-Def_MapID_SendToGameServer = [Def_FBMapID_HorsePetBoss, Def_FBMapID_FamilyInvade, Def_FBMapID_SealDemon, Def_FBMapID_DemonKing,
- Def_FBMapID_FamilyWar, Def_FBMapID_ZhuXianBoss, Def_FBMapID_AllFamilyBoss] + \
- Def_MapID_LineIDToPropertyID + [Def_FBMapID_CrossChampionship] + MirrorBattleMapIDList
-
-# 刷新标识点在无玩家的情况下也需要刷新的地图
-Def_NoPlayerNeedProcessRefreshPointMap = [Def_FBMapID_HorsePetBoss, Def_FBMapID_SealDemon, Def_FBMapID_GodArea, Def_FBMapID_BossHome, Def_FBMapID_GatherSoul, Def_FBMapID_ZhuXianBoss, Def_FBMapID_AllFamilyBoss]
-
-# 可重复进的副本
-Def_NoLimitEnterCntMap = [Def_FBMapID_AllFamilyBoss, Def_FBMapID_FamilyParty, Def_FBMapID_FamilyWar, Def_FBMapID_FamilyInvade, Def_FBMapID_ElderBattlefield, Def_FBMapID_SealDemon]
+Def_MapID_LineIDToPropertyID = []
# 无玩家时不自动关闭的自伸缩副本
-Def_NoPlayerNotCloseAutoSizeMap = [Def_FBMapID_FamilyInvade, Def_FBMapID_GatherSoul]
+Def_NoPlayerNotCloseAutoSizeMap = []
# 无玩家时自动关闭的非自伸缩副本
-Def_NoPlayerCloseNotAutoSizeMap = [Def_FBMapID_ZhuXianBoss]
-
-# 不可切换PK模式的地图
-Def_CanNotChangeAtkModelMap = []
+Def_NoPlayerCloseNotAutoSizeMap = []
# 从副本退出时,可以返回进入前的副本ID
Def_CanBackFBMap = []
@@ -2115,6 +1990,8 @@
'MainLevel':[Def_FBMapID_Main], # 主线关卡
'MainLevelBoss':[Def_FBMapID_MainBoss], # 主线关卡boss
'Arena':[Def_FBMapID_ArenaBattle],
+ 'Zhanchui':[Def_FBMapID_Zhanchui],
+ 'Tianzi':[Def_FBMapID_Tianzi],
}
#特殊副本ID, 由系统分配, 进入时候不验证IsMapCopyFull
@@ -3402,16 +3279,12 @@
Def_Player_Dict_TeamFBPlayerCnt = "TeamFBPlayerCnt" # 请求进入的组队副本玩家个数, 临时用,进入副本设置完后删除
Def_Player_Dict_ReqFBMissionID = "ReqFBMissionID" # 请求进入副本的任务ID
Def_Player_Dict_ReqFBMissionType = "ReqFBMissionType" # 请求进入副本的任务类型
-Def_Player_Dict_PlayerFBStar_MapId = "FBStar_%s_%s" # 副本星级星级信息, 参数为[mapID, key编号], 按位存储每个lineID对应的星级
+Def_Player_Dict_FBStar = "FBStar_%s_%s" # 副本星级星级信息, 参数为[mapID, key编号], 按位存储每个lineID对应的星级
Def_Player_Dict_FBPassLineID = "FBPassLineID_%s" # 副本已过关到的lineID, 参数为副本ID
-Def_Player_Dict_EnterFbCntTotal = "EnterFbCntTotal_%s" # 进入副本总累计次数, 参数为副本ID
-Def_Player_Dict_EnterFbCntDay = "EnterFbCntDay_%s" # 今日进入副本次数, 参数为副本ID
-Def_Player_Dict_BuyFbCntDay = "BuyFbCntDay_%s" # 今日购买副本进入次数, 参数为副本ID
-Def_Player_Dict_ItemAddFbCnt = "ItemAddFbCnt_%s" # 使用物品增加的副本次数, 参数为副本ID
-Def_Player_Dict_EnterFbCntWeek = "EnterFbCntWeek_%s" # 本周进入副本次数, 参数为副本ID
-Def_Player_Dict_FBHistoryMaxLine = "FBHistoryMaxLine_%s" # 副本历史最高通关, 参数为副本ID
-Def_Player_Dict_IceLoadLineID = "IceLoadLineID_%s" # 副本星级星级信息, 参数为[key编号], 按位存储每个lineID是否选中
-Def_Player_Dict_RefurbishGoodBookPlayerLv = "RefurbishGoodBookPlayerLv_97" # 刷新天书任务时的玩家等级
+Def_Player_Dict_FbEnterCnt = "FbEnterCnt_%s" # 今日进入副本次数(获得奖励次数), 参数为副本ID
+Def_Player_Dict_FBBuyCnt = "FBBuyCnt_%s" # 今日购买副本进入次数, 参数为副本ID
+Def_Player_Dict_FBItemCnt = "FBItemCnt_%s" # 今日使用物品增加的副本次数, 参数为副本ID
+Def_Player_Dict_FBADCnt = "FBADCnt_%s" # 今日已通过广告获得的次数, 参数为副本ID
Def_Player_Dict_GameFuncFirstTouch = "GameFuncFirstTouch_%s" # 服务端功能首次触发开启状态; 参数, key编号
Def_Player_Dict_GameFuncAwardState = "GameFuncAwardState_%s" # 服务端功能开启领奖状态; 参数, key编号
Def_Player_Dict_MissionFinish = "MissionFinish_%s" # 任务是否完成; 参数, 任务ID, 只会记录部分需要记录的任务ID
@@ -3483,6 +3356,7 @@
Def_PDict_GoodGameAwardState = "GoodGameAwardState" # 游戏好评领奖记录
Def_PDict_LikeGameAwardState = "LikeGameAwardState" # 游戏点赞领奖记录
Def_PDict_RechargeDayAward = "RechargeDayAward" # 累充每日奖励
+Def_PDict_ADCnt = "ADCnt_%s" # 今日已领取广告奖励次数,参数(广告ID)
Def_PDict_EquipViewCacheState = "EquipViewCacheState" # 本次上线是否同步过装备缓存
Def_PDict_PackDataSyncState = "PackDataSyncState" # 本次上线打包数据同步状态,按位存储是否同步 0-本服,1-跨服
Def_PDict_PackDataSyncFightPower = "PackDataSyncFightPower" # 本次上线打包数据同步时的战力,用于对比,只对比求余亿部分即可
@@ -4147,12 +4021,7 @@
FuncNoLinearAttrDict = {}
# 指定地图生效的非线性属性配置
-MapAttrInfoDict_Noline = {
- Def_FBMapID_FamilyWar:{
- TYPE_Calc_FamilyWarAtkPer:[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax],
- TYPE_Calc_FamilyWarHPPer:[TYPE_Calc_AttrMaxHP],
- }
- }
+MapAttrInfoDict_Noline = {}
#属性线性索引
CalcAttrIndexList = (
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index fd626dc..27276cc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -3372,73 +3372,6 @@
#------------------------------------------------------
-# A3 12 守护拾取物品 #tagCMGuardPickupItem
-
-class tagCMGuardPickupItem(Structure):
- Head = tagHead()
- ItemCount = 0 #(WORD ItemCount)
- MapItemID = list() #(vector<WORD> MapItemID)//size = ItemCount
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xA3
- self.Head.SubCmd = 0x12
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
- for i in range(self.ItemCount):
- value,_pos=CommFunc.ReadWORD(_lpData,_pos)
- self.MapItemID.append(value)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xA3
- self.Head.SubCmd = 0x12
- self.ItemCount = 0
- self.MapItemID = list()
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 2
- length += 2 * self.ItemCount
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteWORD(data, self.ItemCount)
- for i in range(self.ItemCount):
- data = CommFunc.WriteWORD(data, self.MapItemID[i])
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- ItemCount:%d,
- MapItemID:%s
- '''\
- %(
- self.Head.OutputString(),
- self.ItemCount,
- "..."
- )
- return DumpString
-
-
-m_NAtagCMGuardPickupItem=tagCMGuardPickupItem()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGuardPickupItem.Head.Cmd,m_NAtagCMGuardPickupItem.Head.SubCmd))] = m_NAtagCMGuardPickupItem
-
-
-#------------------------------------------------------
# A3 13 物品拆解 #tagCMItemDecompound
class tagCMItemDecompound(Structure):
@@ -5120,9 +5053,7 @@
("MapID", c_int),
("LineID", c_ushort),
("Cnt", c_ubyte), # 扫荡次数
- ("IsFinish", c_ubyte), # 是否立即完成; 0-否;1-花钱立即完成;2-客户端自行倒计时间到后发送2代表领取扫荡完成奖励
("DataEx", c_int), #附带信息
- ("IsLittleHelper", c_ubyte), # 是否小助手扫荡
]
def __init__(self):
@@ -5142,9 +5073,7 @@
self.MapID = 0
self.LineID = 0
self.Cnt = 0
- self.IsFinish = 0
self.DataEx = 0
- self.IsLittleHelper = 0
return
def GetLength(self):
@@ -5160,9 +5089,7 @@
MapID:%d,
LineID:%d,
Cnt:%d,
- IsFinish:%d,
- DataEx:%d,
- IsLittleHelper:%d
+ DataEx:%d
'''\
%(
self.Cmd,
@@ -5170,9 +5097,7 @@
self.MapID,
self.LineID,
self.Cnt,
- self.IsFinish,
- self.DataEx,
- self.IsLittleHelper
+ self.DataEx
)
return DumpString
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 45da1bb..dafb1ce 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -3849,114 +3849,6 @@
#------------------------------------------------------
-# A3 BD 通知玩家购买副本进入次数 #tagMCBuyEnterInfo
-
-class tagMCBuyInfo(Structure):
- _pack_ = 1
- _fields_ = [
- ("FBID", c_int), # 副本ID
- ("BuyCount", c_ubyte), # 已购买次数
- ]
-
- 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.FBID = 0
- self.BuyCount = 0
- return
-
- def GetLength(self):
- return sizeof(tagMCBuyInfo)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''// A3 BD 通知玩家购买副本进入次数 //tagMCBuyEnterInfo:
- FBID:%d,
- BuyCount:%d
- '''\
- %(
- self.FBID,
- self.BuyCount
- )
- return DumpString
-
-
-class tagMCBuyEnterInfo(Structure):
- Head = tagHead()
- FBCount = 0 #(BYTE FBCount)// 副本个数
- FBInfo = list() #(vector<tagMCBuyInfo> FBInfo)// 副本信息
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xA3
- self.Head.SubCmd = 0xBD
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.FBCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- for i in range(self.FBCount):
- temFBInfo = tagMCBuyInfo()
- _pos = temFBInfo.ReadData(_lpData, _pos)
- self.FBInfo.append(temFBInfo)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xA3
- self.Head.SubCmd = 0xBD
- self.FBCount = 0
- self.FBInfo = list()
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 1
- for i in range(self.FBCount):
- length += self.FBInfo[i].GetLength()
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteBYTE(data, self.FBCount)
- for i in range(self.FBCount):
- data = CommFunc.WriteString(data, self.FBInfo[i].GetLength(), self.FBInfo[i].GetBuffer())
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- FBCount:%d,
- FBInfo:%s
- '''\
- %(
- self.Head.OutputString(),
- self.FBCount,
- "..."
- )
- return DumpString
-
-
-m_NAtagMCBuyEnterInfo=tagMCBuyEnterInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBuyEnterInfo.Head.Cmd,m_NAtagMCBuyEnterInfo.Head.SubCmd))] = m_NAtagMCBuyEnterInfo
-
-
-#------------------------------------------------------
# A3 B0 玩家购买魔魂铜钱经验额外奖励信息 #tagMCBuySomethingReward
class tagMCBuySomethingReward(Structure):
@@ -5367,6 +5259,165 @@
m_NAtagMCFaQiInfo=tagMCFaQiInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFaQiInfo.Cmd,m_NAtagMCFaQiInfo.SubCmd))] = m_NAtagMCFaQiInfo
+
+
+#------------------------------------------------------
+# A3 20 玩家副本相关信息 #tagSCFBInfoList
+
+class tagSCFBInfo(Structure):
+ MapID = 0 #(DWORD MapID)
+ EnterCnt = 0 #(WORD EnterCnt)//今日累计进入次数
+ ADAddCnt = 0 #(BYTE ADAddCnt)//广告增加次数
+ BuyAddCnt = 0 #(BYTE BuyAddCnt)//购买增加次数
+ ItemAddCnt = 0 #(WORD ItemAddCnt)//物品增加次数
+ PassLineID = 0 #(DWORD PassLineID)//已过关到的lineID
+ PassGradeCnt = 0 #(BYTE PassGradeCnt)//星级值对应个数, 每个key存9个lineID
+ PassGrade = list() #(vector<DWORD> PassGrade)//副本线路对应星级值列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.EnterCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ADAddCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.BuyAddCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ItemAddCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.PassLineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.PassGradeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.PassGradeCnt):
+ value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+ self.PassGrade.append(value)
+ return _pos
+
+ def Clear(self):
+ self.MapID = 0
+ self.EnterCnt = 0
+ self.ADAddCnt = 0
+ self.BuyAddCnt = 0
+ self.ItemAddCnt = 0
+ self.PassLineID = 0
+ self.PassGradeCnt = 0
+ self.PassGrade = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 4
+ length += 2
+ length += 1
+ length += 1
+ length += 2
+ length += 4
+ length += 1
+ length += 4 * self.PassGradeCnt
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteDWORD(data, self.MapID)
+ data = CommFunc.WriteWORD(data, self.EnterCnt)
+ data = CommFunc.WriteBYTE(data, self.ADAddCnt)
+ data = CommFunc.WriteBYTE(data, self.BuyAddCnt)
+ data = CommFunc.WriteWORD(data, self.ItemAddCnt)
+ data = CommFunc.WriteDWORD(data, self.PassLineID)
+ data = CommFunc.WriteBYTE(data, self.PassGradeCnt)
+ for i in range(self.PassGradeCnt):
+ data = CommFunc.WriteDWORD(data, self.PassGrade[i])
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ MapID:%d,
+ EnterCnt:%d,
+ ADAddCnt:%d,
+ BuyAddCnt:%d,
+ ItemAddCnt:%d,
+ PassLineID:%d,
+ PassGradeCnt:%d,
+ PassGrade:%s
+ '''\
+ %(
+ self.MapID,
+ self.EnterCnt,
+ self.ADAddCnt,
+ self.BuyAddCnt,
+ self.ItemAddCnt,
+ self.PassLineID,
+ self.PassGradeCnt,
+ "..."
+ )
+ return DumpString
+
+
+class tagSCFBInfoList(Structure):
+ Head = tagHead()
+ FBDataCnt = 0 #(BYTE FBDataCnt)// 副本数据个数
+ FBDataList = list() #(vector<tagSCFBInfo> FBDataList)// 副本数据列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA3
+ self.Head.SubCmd = 0x20
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.FBDataCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.FBDataCnt):
+ temFBDataList = tagSCFBInfo()
+ _pos = temFBDataList.ReadData(_lpData, _pos)
+ self.FBDataList.append(temFBDataList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA3
+ self.Head.SubCmd = 0x20
+ self.FBDataCnt = 0
+ self.FBDataList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ for i in range(self.FBDataCnt):
+ length += self.FBDataList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.FBDataCnt)
+ for i in range(self.FBDataCnt):
+ data = CommFunc.WriteString(data, self.FBDataList[i].GetLength(), self.FBDataList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ FBDataCnt:%d,
+ FBDataList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.FBDataCnt,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagSCFBInfoList=tagSCFBInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCFBInfoList.Head.Cmd,m_NAtagSCFBInfoList.Head.SubCmd))] = m_NAtagSCFBInfoList
#------------------------------------------------------
@@ -8186,165 +8237,6 @@
m_NAtagMCPackDownloadRecord=tagMCPackDownloadRecord()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPackDownloadRecord.Cmd,m_NAtagMCPackDownloadRecord.SubCmd))] = m_NAtagMCPackDownloadRecord
-
-
-#------------------------------------------------------
-# A3 20 玩家副本相关信息 #tagMCPlayerFBInfoData
-
-class tagMCFBInfo(Structure):
- FBID = 0 #(DWORD FBID)//fbId
- EnterCnt = 0 #(WORD EnterCnt)//当日进入次数
- RecoverCnt = 0 #(WORD RecoverCnt)//找回次数
- ItemAddCnt = 0 #(WORD ItemAddCnt)//物品增加次数
- PassGradeCnt = 0 #(BYTE PassGradeCnt)//星级值对应个数, 每个key存9个lineID
- PassGrade = list() #(vector<DWORD> PassGrade)//副本线路对应星级值列表
- EnterCntTotal = 0 #(DWORD EnterCntTotal)//累计进入次数
- PassLineID = 0 #(DWORD PassLineID)//已过关到的lineID
- data = None
-
- def __init__(self):
- self.Clear()
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- self.FBID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.EnterCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.RecoverCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.ItemAddCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.PassGradeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- for i in range(self.PassGradeCnt):
- value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
- self.PassGrade.append(value)
- self.EnterCntTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.PassLineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- return _pos
-
- def Clear(self):
- self.FBID = 0
- self.EnterCnt = 0
- self.RecoverCnt = 0
- self.ItemAddCnt = 0
- self.PassGradeCnt = 0
- self.PassGrade = list()
- self.EnterCntTotal = 0
- self.PassLineID = 0
- return
-
- def GetLength(self):
- length = 0
- length += 4
- length += 2
- length += 2
- length += 2
- length += 1
- length += 4 * self.PassGradeCnt
- length += 4
- length += 4
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteDWORD(data, self.FBID)
- data = CommFunc.WriteWORD(data, self.EnterCnt)
- data = CommFunc.WriteWORD(data, self.RecoverCnt)
- data = CommFunc.WriteWORD(data, self.ItemAddCnt)
- data = CommFunc.WriteBYTE(data, self.PassGradeCnt)
- for i in range(self.PassGradeCnt):
- data = CommFunc.WriteDWORD(data, self.PassGrade[i])
- data = CommFunc.WriteDWORD(data, self.EnterCntTotal)
- data = CommFunc.WriteDWORD(data, self.PassLineID)
- return data
-
- def OutputString(self):
- DumpString = '''
- FBID:%d,
- EnterCnt:%d,
- RecoverCnt:%d,
- ItemAddCnt:%d,
- PassGradeCnt:%d,
- PassGrade:%s,
- EnterCntTotal:%d,
- PassLineID:%d
- '''\
- %(
- self.FBID,
- self.EnterCnt,
- self.RecoverCnt,
- self.ItemAddCnt,
- self.PassGradeCnt,
- "...",
- self.EnterCntTotal,
- self.PassLineID
- )
- return DumpString
-
-
-class tagMCPlayerFBInfoData(Structure):
- Head = tagHead()
- FBDataCnt = 0 #(BYTE FBDataCnt)// 副本数据个数
- FBDataList = list() #(vector<tagMCFBInfo> FBDataList)// 副本数据列表
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xA3
- self.Head.SubCmd = 0x20
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.FBDataCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- for i in range(self.FBDataCnt):
- temFBDataList = tagMCFBInfo()
- _pos = temFBDataList.ReadData(_lpData, _pos)
- self.FBDataList.append(temFBDataList)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xA3
- self.Head.SubCmd = 0x20
- self.FBDataCnt = 0
- self.FBDataList = list()
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 1
- for i in range(self.FBDataCnt):
- length += self.FBDataList[i].GetLength()
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteBYTE(data, self.FBDataCnt)
- for i in range(self.FBDataCnt):
- data = CommFunc.WriteString(data, self.FBDataList[i].GetLength(), self.FBDataList[i].GetBuffer())
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- FBDataCnt:%d,
- FBDataList:%s
- '''\
- %(
- self.Head.OutputString(),
- self.FBDataCnt,
- "..."
- )
- return DumpString
-
-
-m_NAtagMCPlayerFBInfoData=tagMCPlayerFBInfoData()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerFBInfoData.Head.Cmd,m_NAtagMCPlayerFBInfoData.Head.SubCmd))] = m_NAtagMCPlayerFBInfoData
#------------------------------------------------------
@@ -15327,6 +15219,114 @@
#------------------------------------------------------
+# A7 22 广告信息列表 #tagSCADInfoList
+
+class tagSCADInfo(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("ADID", c_ushort), #广告ID
+ ("ADCnt", c_ubyte), #今日已领取广告奖励次数
+ ]
+
+ 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.ADID = 0
+ self.ADCnt = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagSCADInfo)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A7 22 广告信息列表 //tagSCADInfoList:
+ ADID:%d,
+ ADCnt:%d
+ '''\
+ %(
+ self.ADID,
+ self.ADCnt
+ )
+ return DumpString
+
+
+class tagSCADInfoList(Structure):
+ Head = tagHead()
+ Count = 0 #(BYTE Count)
+ ADInfoList = list() #(vector<tagSCADInfo> ADInfoList)
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA7
+ self.Head.SubCmd = 0x22
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temADInfoList = tagSCADInfo()
+ _pos = temADInfoList.ReadData(_lpData, _pos)
+ self.ADInfoList.append(temADInfoList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA7
+ self.Head.SubCmd = 0x22
+ self.Count = 0
+ self.ADInfoList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ for i in range(self.Count):
+ length += self.ADInfoList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.ADInfoList[i].GetLength(), self.ADInfoList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ Count:%d,
+ ADInfoList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagSCADInfoList=tagSCADInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCADInfoList.Head.Cmd,m_NAtagSCADInfoList.Head.SubCmd))] = m_NAtagSCADInfoList
+
+
+#------------------------------------------------------
# A7 04 通知世界Boss伤血列表 #tagMCBossHurtList
class tagMCHurtPlayer(Structure):
@@ -17392,73 +17392,6 @@
m_NAtagMCGiveAwardInfo=tagMCGiveAwardInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGiveAwardInfo.Head.Cmd,m_NAtagMCGiveAwardInfo.Head.SubCmd))] = m_NAtagMCGiveAwardInfo
-
-
-#------------------------------------------------------
-# A8 12 守护成功拾取物品 #tagMCGuradPickupItemSucc
-
-class tagMCGuradPickupItemSucc(Structure):
- Head = tagHead()
- ItemCount = 0 #(WORD ItemCount)
- MapItemID = list() #(vector<WORD> MapItemID)//size = ItemCount
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xA8
- self.Head.SubCmd = 0x12
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
- for i in range(self.ItemCount):
- value,_pos=CommFunc.ReadWORD(_lpData,_pos)
- self.MapItemID.append(value)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xA8
- self.Head.SubCmd = 0x12
- self.ItemCount = 0
- self.MapItemID = list()
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 2
- length += 2 * self.ItemCount
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteWORD(data, self.ItemCount)
- for i in range(self.ItemCount):
- data = CommFunc.WriteWORD(data, self.MapItemID[i])
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- ItemCount:%d,
- MapItemID:%s
- '''\
- %(
- self.Head.OutputString(),
- self.ItemCount,
- "..."
- )
- return DumpString
-
-
-m_NAtagMCGuradPickupItemSucc=tagMCGuradPickupItemSucc()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGuradPickupItemSucc.Head.Cmd,m_NAtagMCGuradPickupItemSucc.Head.SubCmd))] = m_NAtagMCGuradPickupItemSucc
#------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetFBStar.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetFBStar.py
index 206232d..29e8412 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetFBStar.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetFBStar.py
@@ -35,11 +35,11 @@
# if mapID not in allMapIDList:
# GameWorld.DebugAnswer(curPlayer, "该地图ID不可设置!")
# return
- GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, star, False, [mapID])
+ GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_FBStar, lineID, star, False, [mapID])
elif len(paramList) == 1:
mapID = paramList[0]
for keyNum in range(ChConfig.Def_FBStar_MaxKeyCnt):
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId % (mapID, keyNum), 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBStar % (mapID, keyNum), 0)
else:
#GameWorld.DebugAnswer(curPlayer, "重置所有副本星级: SetFBStar 0")
GameWorld.DebugAnswer(curPlayer, "设置指定副本lineID星级: SetFBStar 副本ID lineID 星级")
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
index 01e4c7f..a993db4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
@@ -498,7 +498,7 @@
playerZoneID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqCrossFBZoneID)
playerFuncLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqCrossFBFuncLine)
# 跨服排位分区与玩家分区可能不一样
- if (fbZoneID != playerZoneID or fbFuncLineID != playerFuncLineID) and mapID not in [ChConfig.Def_FBMapID_CrossChampionship]:
+ if (fbZoneID != playerZoneID or fbFuncLineID != playerFuncLineID) and mapID not in []:
GameWorld.ErrLog("DoEnterFB 玩家与当前副本线路所属分区或功能分线不同,踢出玩家!fbZoneID=%s,playerZoneID=%s,fbFuncLineID=%s,playerFuncLineID=%s"
% (fbZoneID, playerZoneID, fbFuncLineID, playerFuncLineID), curPlayerID)
CrossRealmPlayer.PlayerExitCrossServer(curPlayer)
@@ -1069,13 +1069,6 @@
for key, mapIDList in ChConfig.Def_FB_MapID.items():
if not mapIDList:
continue
- mapID = mapIDList[0]
- ipyData = FBCommon.GetFBIpyData(mapID)
- if ipyData and ipyData.GetDayResetType():
- if onDayType != ipyData.GetDayResetType():
- continue
- elif onDayType != ShareDefine.Def_OnEventTypeEx:
- continue
callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (key, "OnFBPlayerOnDay"))
if callFunc:
callFunc(curPlayer)
@@ -1531,19 +1524,18 @@
return callFunc(curPlayer, addExp, expViewType)
## 副本扫荡询问
-def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, cnt, isFinish, dataEx):
+def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, cnt, dataEx):
do_FBLogic_ID = __GetFBLogic_MapID(mapID)
callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnPlayerFBSweepAsk"))
- # 没有额外条件判断默认返回True
if callFunc == None:
- return True
+ return
- return callFunc(curPlayer, mapID, lineID, cnt, isFinish, dataEx)
+ return callFunc(curPlayer, mapID, lineID, cnt, dataEx)
## 副本扫荡结果
-def OnPlayerFBSweepResult(curPlayer, mapID, lineID, cnt, isFinish, dataEx):
+def OnPlayerFBSweepResult(curPlayer, mapID, lineID, cnt, dataEx):
do_FBLogic_ID = __GetFBLogic_MapID(mapID)
callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnPlayerFBSweepResult"))
@@ -1551,7 +1543,7 @@
if callFunc == None:
return False
- return callFunc(curPlayer, mapID, lineID, cnt, isFinish, dataEx)
+ return callFunc(curPlayer, mapID, lineID, cnt, dataEx)
## 开始公共CD副本扫荡
def OnStartPubCDFBSweep(curPlayer, mapID, lineID, cnt, dataEx):
@@ -2249,17 +2241,6 @@
if callFunc == None:
return
return callFunc()
-
-## 是否需要做进入副本通用检查条件逻辑,默认需要检查
-def OnNeedCheckCanEnterFBComm(curPlayer, mapID, lineID):
- do_FBLogic_ID = __GetFBLogic_MapID(mapID)
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnNeedCheckCanEnterFBComm"))
-
- if callFunc == None:
- return True
-
- return callFunc(curPlayer, mapID, lineID)
def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
## 回合战斗请求 - 地图验证
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
index 1f898d3..51b29fe 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
@@ -16,34 +16,22 @@
import IPY_GameWorld
import PlayerControl
import ItemCommon
-import GameMap
import NPCCommon
import ReadChConfig
-import BuffSkill
import ChPyNetSendPack
import NetPackCommon
-import SkillCommon
import IpyGameDataPY
-import PlayerFB
import ShareDefine
-import EventReport
-import PlayerFamily
-import PlayerActivity
-import ItemControler
-import PlayerSuccess
-import GameFuncComm
import PyGameData
import GameObj
import FBLogic
import ChConfig
import PlayerGoldInvest
+import ObjPool
-import datetime
import random
import json
import math
-import time
-import copy
#---------------------------------------------------------------------
#全局变量
Def_VSFB_CanEnter = 'VSFB_CanEnter' #可以进入
@@ -125,29 +113,25 @@
def GetFBLineEnterPosInfo(mapID, lineID, fbLineIpyData=None):
# 坐标信息
+ return [10,10]
+def GetPassAwardList(mapID, lineID):
+ # 过关奖励
+ fbLineIpyData = GetFBLineIpyData(mapID, lineID)
+ return [] if not fbLineIpyData else fbLineIpyData.GetPassAwardList()
+def GetSweepAwardList(mapID, lineID, sweepCnt):
+ # 扫荡奖励
+ fbLineIpyData = GetFBLineIpyData(mapID, lineID)
if not fbLineIpyData:
- fbLineIpyData = GetFBLineIpyData(mapID, lineID)
- return None if not fbLineIpyData else fbLineIpyData.GetEnterPosInfo()
-def GetFBLineStepTime(mapID, lineID=0):
- # 阶段时间信息
- fbLineIpyData = GetFBLineIpyData(mapID, lineID)
- return None if not fbLineIpyData else fbLineIpyData.GetStepTime()
-def GetFBLineRefreshNPC(mapID, lineID=0):
- # 刷怪信息
- fbLineIpyData = GetFBLineIpyData(mapID, lineID)
- return None if not fbLineIpyData else fbLineIpyData.GetRefreshNPC()
-def GetFBLineGrade(mapID, lineID=0):
- # 评级规则信息
- fbLineIpyData = GetFBLineIpyData(mapID, lineID)
- return None if not fbLineIpyData else fbLineIpyData.GetGradeInfo()
-def GetFBLineReward(mapID, lineID):
- # 奖励信息;支持扫荡取奖励
- fbLineIpyData = GetFBLineIpyData(mapID, lineID)
- return None if not fbLineIpyData else fbLineIpyData.GetRewardInfo()
-
-def GetFBGradeRewardRateList(mapID):
- fbIpyData = GetFBIpyData(mapID)
- return [] if not fbIpyData else fbIpyData.GetRewardRate()
+ return []
+ awardItemList = fbLineIpyData.GetSweepAwardList()
+ if not awardItemList:
+ awardItemList = fbLineIpyData.GetPassAwardList()
+
+ sweepItemList = []
+ for itemInfo in awardItemList:
+ itemID, itemCount = itemInfo[:2]
+ sweepItemList.append([itemID, itemCount * sweepCnt])
+ return sweepItemList
def GetFBFuncOpenState(dataMapID):
## 获取副本开启状态 @return: 0-关闭;1-开启
@@ -165,38 +149,40 @@
def IsFBPass(curPlayer, mapID, lineID):
## 副本线路是否已过关
- passLineID = 0
if mapID == ChConfig.Def_FBMapID_Main:
return PlayerControl.IsMainLevelPass(curPlayer, lineID)
- ipyData = IpyGameDataPY.GetIpyGameDataNotLog('FBGeneralTrain', mapID, lineID)
- if ipyData:
- passLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBPassLineID % mapID)
- else:
- grade = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID])
+ if mapID in ChConfig.PassByStarMapIDList:
+ grade = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_FBStar, lineID, False, [mapID])
if grade:
return True
-
- if passLineID >= lineID:
- return True
-
+ else:
+ passLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBPassLineID % mapID)
+ if passLineID >= lineID:
+ return True
+
return False
+
+def SetFBPass(curPlayer, mapID, funcLineID, isNotify=True):
+ passLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBPassLineID % mapID)
+ if funcLineID > passLineID:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBPassLineID % mapID, funcLineID)
+ if isNotify:
+ Sync_FBPlayerFBInfoData(curPlayer, mapID)
+ return
def CheckCanEnterFBComm(curPlayer, mapID, lineID, fbIpyData, fbLineIpyData, reqEnterCnt=1, isNotify=True, isTeamAsk=False):
# 可否进入副本通用检查, 扫荡通用
playerID = curPlayer.GetPlayerID()
- if not FBLogic.OnNeedCheckCanEnterFBComm(curPlayer, mapID, lineID):
- return ShareDefine.EntFBAskRet_OK
-
# 总表通用检查
if fbIpyData:
#开服天开放检查
- if not GetFBFuncOpenState(mapID):
- GameWorld.Log("当前时间未开放该副本!mapID=%s" % (mapID), playerID)
- if isNotify:
- PlayerControl.NotifyCode(curPlayer, "FBIsNotOpen")
- return ShareDefine.EntFBAskRet_FBClose
+ #if not GetFBFuncOpenState(mapID):
+ # GameWorld.Log("当前时间未开放该副本!mapID=%s" % (mapID), playerID)
+ # if isNotify:
+ # PlayerControl.NotifyCode(curPlayer, "FBIsNotOpen")
+ # return ShareDefine.EntFBAskRet_FBClose
#进入次数判断
canEnter, notifyMark = __CheckCanEnterFBByTime(curPlayer, mapID, lineID, fbIpyData, reqEnterCnt, isTeamAsk)
@@ -210,25 +196,18 @@
#等级判断
curLV = curPlayer.GetLV()
lvLimitMin = fbLineIpyData.GetLVLimitMin()
- lvLimitMax = fbLineIpyData.GetLVLimitMax()
if lvLimitMin and curLV < lvLimitMin:
GameWorld.Log("玩家等级不足, 无法进入副本!mapID=%s,lineID=%s,curLV(%s) < lvLimitMin(%s)"
% (mapID, lineID, curLV, lvLimitMin), playerID)
if isNotify:
PlayerControl.NotifyCode(curPlayer, "FbLV", [mapID])
return ShareDefine.EntFBAskRet_LVLimit
- if lvLimitMax and curLV > lvLimitMax:
- GameWorld.Log("玩家等级超过, 无法进入副本!mapID=%s,lineID=%s,curLV(%s) > lvLimitMax(%s)"
- % (mapID, lineID, curLV, lvLimitMax), playerID)
- if isNotify:
- PlayerControl.NotifyCode(curPlayer, "FbLV", [mapID])
- return ShareDefine.EntFBAskRet_LVLimit
#门票判断
- if not GetFBEnterTicket(curPlayer, mapID, lineID, fbLineIpyData, reqEnterCnt, isTeamAsk)[0]:
- if isNotify:
- PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_157069", [mapID])
- return ShareDefine.EntFBAskRet_NoTicket
+ #if not GetFBEnterTicket(curPlayer, mapID, lineID, fbLineIpyData, reqEnterCnt, isTeamAsk)[0]:
+ # if isNotify:
+ # PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_157069", [mapID])
+ # return ShareDefine.EntFBAskRet_NoTicket
return ShareDefine.EntFBAskRet_OK
@@ -239,42 +218,39 @@
return True, ""
#playerID = curPlayer.GetPlayerID()
- enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % mapID)
+ enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbEnterCnt % mapID)
maxCnt = GetEnterFBMaxCnt(curPlayer, mapID)
if enterCnt + reqEnterCnt <= maxCnt:
return True, ""
- ### 以下是到达次数上限后的处理
- fbType = GameWorld.GetMap().GetMapFBTypeByMapID(mapID)
+ if mapID in ChConfig.UnPassFreeMapIDList and not IsFBPass(curPlayer, mapID, lineID):
+ return True, ""
- # 单人副本达到次数后不可再进入
- if fbType == IPY_GameWorld.fbtSingle:
- #GameWorld.Log("已达到当日最大进入次数!单人副本 mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s"
- # % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
- return False, "GeRen_chenxin_268121"
+# ### 以下是到达次数上限后的处理
+# fbType = GameWorld.GetMap().GetMapFBTypeByMapID(mapID)
+#
+# # 单人副本达到次数后不可再进入
+# if fbType == IPY_GameWorld.fbtSingle:
+# #GameWorld.Log("已达到当日最大进入次数!单人副本 mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s"
+# # % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
+# return False, "GeRen_chenxin_268121"
+#
+# # 组队副本
+# if fbType == IPY_GameWorld.fbtTeam:
+# # 可助战的不可单人进入助战,可发起匹配
+# if not isTeamAsk and (not curPlayer.GetTeamID() or curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TeamMemCount) <= 1):
+# #GameWorld.Log("已达到当日最大进入次数!组队副本不可单人助战! mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s"
+# # % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
+# return False, "TeamSingleEnter"
+#
+# if mapID not in ChConfig.Def_NoLimitEnterCntMap:
+# #GameWorld.Log("已达到当日最大进入次数! mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s"
+# # % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
+# return False, "GeRen_chenxin_268121"
- # 组队副本
- if fbType == IPY_GameWorld.fbtTeam:
- # 无助战的不可再进入
- if not fbIpyData.GetHelpPoint():
- #GameWorld.Log("已达到当日最大进入次数!组队副本 mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s"
- # % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
- return False, "GeRen_chenxin_268121"
-
- # 可助战的不可单人进入助战,可发起匹配
- if not isTeamAsk and (not curPlayer.GetTeamID() or curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TeamMemCount) <= 1):
- #GameWorld.Log("已达到当日最大进入次数!组队副本不可单人助战! mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s"
- # % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
- return False, "TeamSingleEnter"
-
- elif mapID not in ChConfig.Def_NoLimitEnterCntMap:
- #GameWorld.Log("已达到当日最大进入次数! mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s"
- # % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
- return False, "GeRen_chenxin_268121"
-
- # 周进入次数暂不做,待扩展...
-
- return True, ""
+ GameWorld.DebugLog("可进入次数不足: mapID=%s, lineID=%s, enterCnt(%s) + reqEnterCnt(%s) <= maxCnt=%s"
+ % (mapID, lineID, enterCnt, reqEnterCnt, maxCnt))
+ return False, "GeRen_chenxin_268121"
## 获取副本进入门票信息
# @param curPlayer 玩家实例
@@ -283,38 +259,39 @@
# @return [是否可进, [[门票索引列表, delCnt], ...], 删除个数, 是否有绑定, 扣钱信息]
def GetFBEnterTicket(curPlayer, mapID, lineID=0, fbLineIpyData=None, reqEnterCnt=1, isTeamAsk=False):
#门票判断
- if not fbLineIpyData:
- fbLineIpyData = GetFBLineIpyData(mapID, lineID)
-
- ticketID = fbLineIpyData.GetTicketID()
- if not ticketID:
- return True, [], 0, False, []
-
- ticketCostCntList = fbLineIpyData.GetTicketCostCnt()
- if not ticketCostCntList:
- GameWorld.ErrLog("没有配置门票消耗!mapID=%s,lineID=%s" % (mapID, lineID), curPlayer.GetPlayerID())
- return False, [], 0, False, []
-
- enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % mapID)
- costCnt = ticketCostCntList[-1] if enterCnt >= len(ticketCostCntList) else ticketCostCntList[enterCnt]
- totalCostCnt = costCnt*reqEnterCnt
- if not totalCostCnt:
- GameWorld.ErrLog("没有配置门票消耗!mapID=%s,lineID=%s" % (mapID, lineID), curPlayer.GetPlayerID())
- return False, [], 0, False, []
-
- itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
- enough, indexList, hasBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(ticketID, itemPack, totalCostCnt)
- if not enough:
- ticketPrice = fbLineIpyData.GetTicketPrice()
- if ticketPrice and not isTeamAsk: #组队进组队副本时必须要有门票道具
- costMoney = ticketPrice * lackCnt
- costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, costMoney)
- return bool(costMoneyList), indexList, totalCostCnt, hasBind, costMoneyList
- GameWorld.DebugLog("门票不足, 无法进入副本!mapID=%s,lineID=%s,ticketID=%s,reqEnterCnt=%s,totalCostCnt=%s"
- % (mapID, lineID, ticketID, reqEnterCnt, totalCostCnt), curPlayer.GetPlayerID())
- return False, [], 0, False, []
-
- return enough, indexList, totalCostCnt, hasBind, []
+ return True, [], 0, False, []
+# if not fbLineIpyData:
+# fbLineIpyData = GetFBLineIpyData(mapID, lineID)
+#
+# ticketID = fbLineIpyData.GetTicketID()
+# if not ticketID:
+# return True, [], 0, False, []
+#
+# ticketCostCntList = fbLineIpyData.GetTicketCostCnt()
+# if not ticketCostCntList:
+# GameWorld.ErrLog("没有配置门票消耗!mapID=%s,lineID=%s" % (mapID, lineID), curPlayer.GetPlayerID())
+# return False, [], 0, False, []
+#
+# enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbEnterCnt % mapID)
+# costCnt = ticketCostCntList[-1] if enterCnt >= len(ticketCostCntList) else ticketCostCntList[enterCnt]
+# totalCostCnt = costCnt*reqEnterCnt
+# if not totalCostCnt:
+# GameWorld.ErrLog("没有配置门票消耗!mapID=%s,lineID=%s" % (mapID, lineID), curPlayer.GetPlayerID())
+# return False, [], 0, False, []
+#
+# itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+# enough, indexList, hasBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(ticketID, itemPack, totalCostCnt)
+# if not enough:
+# ticketPrice = fbLineIpyData.GetTicketPrice()
+# if ticketPrice and not isTeamAsk: #组队进组队副本时必须要有门票道具
+# costMoney = ticketPrice * lackCnt
+# costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, costMoney)
+# return bool(costMoneyList), indexList, totalCostCnt, hasBind, costMoneyList
+# GameWorld.DebugLog("门票不足, 无法进入副本!mapID=%s,lineID=%s,ticketID=%s,reqEnterCnt=%s,totalCostCnt=%s"
+# % (mapID, lineID, ticketID, reqEnterCnt, totalCostCnt), curPlayer.GetPlayerID())
+# return False, [], 0, False, []
+#
+# return enough, indexList, totalCostCnt, hasBind, []
## 获取副本进入门票信息
# @param curPlayer 玩家实例
@@ -1522,28 +1499,22 @@
## ---------------------------------- TD ---------------------------------------
def GetEnterFBMaxCnt(curPlayer, mapID):
- ## 获取副本最大可进入次数: 基本次数 + 时间已恢复次数 + VIP额外次数 + 购买次数 + 找回次数 + 使用道具增加次数
+ ## 获取副本最大可进入次数: 基本次数 + 广告次数 + 购买次数 + 使用道具增加次数 + 其他
fbIpyData = GetFBIpyData(mapID)
if not fbIpyData:
return 0
maxTimes = fbIpyData.GetDayTimes()
-
- mwAddCnt = 0#wmpIpyData.GetEffectValue() if wmpIpyData else 0
- extraCnt = 0
- buyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_BuyFbCntDay % mapID)
- itemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ItemAddFbCnt % mapID)
- regainFbCnt = 0
+ adCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBADCnt % mapID)
+ buyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBBuyCnt % mapID)
+ itemCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBItemCnt % mapID)
investFBCnt = PlayerGoldInvest.GetAddFBCnt(curPlayer, mapID)
- maxCnt = maxTimes + regainFbCnt + extraCnt + buyCnt + mwAddCnt + itemAddCnt + investFBCnt
+ maxCnt = maxTimes + adCnt + buyCnt + itemCnt + investFBCnt
return maxCnt
-## 玩家进入副本次数
-# @param curPlayer 玩家实例
-# @param fbID 副本id
-# @return bool
def GetEnterFBCount(curPlayer, fbID, lineBit=-1):
+ ## 玩家进入副本次数
fbID = GetRecordMapID(fbID)
- enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % fbID)
+ enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbEnterCnt % fbID)
if lineBit >= 0:
return GameWorld.GetDataByDigitPlace(enterCnt, lineBit)
return enterCnt
@@ -1551,23 +1522,19 @@
def AddFBCntByItem(curPlayer, itemID, mapID, addCnt):
## 物品增加副本次数
mapID = GetRecordMapID(mapID)
- itemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ItemAddFbCnt % mapID)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ItemAddFbCnt % mapID, itemAddCnt + addCnt)
+ itemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBItemCnt % mapID)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBItemCnt % mapID, itemAddCnt + addCnt)
Sync_FBPlayerFBInfoData(curPlayer, mapID)
PlayerControl.NotifyCode(curPlayer, 'AddActivityCount_1', [itemID, mapID, addCnt])
return
-## 增加玩家进入副本次数
-# @param curPlayer 玩家实例
-# @param fbID 副本id
-# @param addCount 增加次数
-# @return 返回值无意义
def AddEnterFBCount(curPlayer, fbID, addCount=1, lineBit=-1, isFree=False):
+ ## 增加玩家进入副本次数
## @param isFree: 是否免费进入的,免费的不增加实际进入次数,但需要触发进入次数额外处理,如活跃、成就等
- addCountEx = addCount
+ #addCountEx = addCount
addCount = 0 if isFree else addCount
fbID = GetRecordMapID(fbID)
- enterCntKey = ChConfig.Def_Player_Dict_EnterFbCntDay % fbID
+ enterCntKey = ChConfig.Def_Player_Dict_FbEnterCnt % fbID
enterCnt = curPlayer.NomalDictGetProperty(enterCntKey)
if lineBit >= 0:
curLineEnterCnt = GameWorld.GetDataByDigitPlace(enterCnt, lineBit)
@@ -1582,48 +1549,21 @@
addCount = updCnt-enterCnt
PlayerControl.NomalDictSetProperty(curPlayer, enterCntKey, updCnt)
- PlayerActivity.OnEnterFBActivity(curPlayer, fbID, updCnt, addCountEx)
- PlayerSuccess.AddEnterFBSuccess(curPlayer, fbID, addCountEx)
+ #PlayerActivity.OnEnterFBActivity(curPlayer, fbID, updCnt, addCountEx)
+ #PlayerSuccess.AddEnterFBSuccess(curPlayer, fbID, addCountEx)
updValue = updCnt
- enterCntTotalKey = ChConfig.Def_Player_Dict_EnterFbCntTotal % fbID
- enterCntTotal = min(curPlayer.NomalDictGetProperty(enterCntTotalKey) + addCount, ChConfig.Def_UpperLimit_DWord)
- PlayerControl.NomalDictSetProperty(curPlayer, enterCntTotalKey, enterCntTotal)
- GameWorld.DebugLog(" AddEnterFBCount fbID=%s, addCount=%s, lineBit=%s, enterCnt=%s,updValue=%s,enterCntTotal=%s"
- % (fbID, addCount, lineBit, enterCnt, updValue, enterCntTotal), curPlayer.GetPlayerID())
+ GameWorld.DebugLog(" AddEnterFBCount fbID=%s, addCount=%s, lineBit=%s, enterCnt=%s,updValue=%s"
+ % (fbID, addCount, lineBit, enterCnt, updValue), curPlayer.GetPlayerID())
Sync_FBPlayerFBInfoData(curPlayer, fbID)
return True
def FBOnWeek(curPlayer, onWeekType):
-
- mapIDInfo = []
- ipyDataMgr = IpyGameDataPY.IPY_Data()
- for i in xrange(ipyDataMgr.GetFBFuncCount()):
- ipyData = ipyDataMgr.GetFBFuncByIndex(i)
- mapID = ipyData.GetDataMapID()
- weekTimes = ipyData.GetWeekTimes()
- # 没有周次数限制的不处理
- if not weekTimes:
- continue
- # 重置类型不同的不处理
- if ipyData.GetWeekResetType() != onWeekType:
- continue
-
- # 重置周次数
- enterCntWeekKey = ChConfig.Def_Player_Dict_EnterFbCntWeek % mapID
- if curPlayer.NomalDictGetProperty(enterCntWeekKey):
- PlayerControl.NomalDictSetProperty(curPlayer, enterCntWeekKey, 0)
- mapIDInfo.append(mapID)
-
- if mapIDInfo:
- Sync_FBPlayerFBInfoData(curPlayer, mapIDInfo)
-
return
-## 玩家通用副本OnDay处理
-# @param curPlayer: 玩家实例
-# @return: None
def FBOnDay(curPlayer, onDayType):
GameWorld.Log("副本过天处理,FBOnDay...", curPlayer.GetPlayerID())
+ if onDayType != ShareDefine.Def_OnEventType:
+ return
FBLogic.OnFBPlayerOnDay(curPlayer, onDayType) # 在重置次数之前,可用于处理资源找回
mapIDInfo = []
@@ -1631,44 +1571,18 @@
for i in xrange(ipyDataMgr.GetFBFuncCount()):
ipyData = ipyDataMgr.GetFBFuncByIndex(i)
mapID = ipyData.GetDataMapID()
-
- dayTimes = ipyData.GetDayTimes()
+ enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbEnterCnt % mapID)
# 没有日次数限制的不处理
- if not dayTimes and not ipyData.GetBuyTimesVIPPriID() and not ipyData.GetExtraTimesVIPPriID() and not ipyData.GetExtraTimesMWPriID():
- #GameWorld.DebugLog(" 不需要重置的副本,mapID=%s,dayTimes=%s,vipBuyPriID=%s,vipExtraTime=%s"
- # % (mapID, dayTimes, ipyData.GetBuyTimesVIPPriID(), ipyData.GetExtraTimesVIPPriID()))
+ if not enterCnt and not ipyData.GetDayTimes() and not ipyData.GetPayCntMax():
continue
-
- # 重置类型不同的不处理
- if ipyData.GetDayResetType() != onDayType:
- #GameWorld.DebugLog(" 重置时间点不同,不处理,mapID=%s" % mapID)
- continue
-
- maxCnt = GetEnterFBMaxCnt(curPlayer, mapID)
-
- # 进入次数
- enterCntKey = ChConfig.Def_Player_Dict_EnterFbCntDay % mapID
- enterCnt = curPlayer.NomalDictGetProperty(enterCntKey)
- PlayerControl.NomalDictSetProperty(curPlayer, enterCntKey, 0)
-
- # 购买次数
- buyCntKey = ChConfig.Def_Player_Dict_BuyFbCntDay % mapID
- buyCnt = curPlayer.NomalDictGetProperty(buyCntKey)
- PlayerControl.NomalDictSetProperty(curPlayer, buyCntKey, 0)
-
- # 物品增加次数
- itemAddCntKey = ChConfig.Def_Player_Dict_ItemAddFbCnt % mapID
- itemAddCnt = curPlayer.NomalDictGetProperty(itemAddCntKey)
- PlayerControl.NomalDictSetProperty(curPlayer, itemAddCntKey, 0)
-
- GameWorld.DebugLog(" 重置:mapID=%s,dayTimes=%s,buyCnt=%s,itemAddCnt=%s,maxCnt=%s,enterCnt=%s"
- % (mapID, dayTimes, buyCnt, itemAddCnt, maxCnt, enterCnt))
-
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FbEnterCnt % mapID, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBADCnt % mapID, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBBuyCnt % mapID, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBItemCnt % mapID, 0)
mapIDInfo.append(mapID)
if mapIDInfo:
Sync_FBPlayerFBInfoData(curPlayer, mapIDInfo)
- Sync_FBPlayerFBBuyCount(curPlayer, mapIDInfo)
return
@@ -1678,7 +1592,6 @@
def FBOnLogin(curPlayer):
FBLogic.OnFBPlayerOnLogin(curPlayer)
Sync_FBPlayerFBInfoData(curPlayer)
- Sync_FBPlayerFBBuyCount(curPlayer)
return
#//A5 75 购买副本进入次数#tagCMBuyEnterCount
@@ -1688,63 +1601,38 @@
# tagHead Head;
# DWORD FBID; // 副本ID
#};
-
def BuyFBEnterCount(playerIndex, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
mapID = clientData.FBID
- if mapID == ChConfig.Def_FBMapID_Love:
- coupleID = PlayerControl.GetCoupleID(curPlayer)
- if not coupleID:
- GameWorld.DebugLog("没有伴侣无法购买情缘副本次数!")
- return
ipyData = GetFBIpyData(mapID)
if not ipyData:
return
- canBuyCnt = 0
+ canBuyCnt = ipyData.GetPayCntMax()
canBuyCnt += PlayerGoldInvest.GetAddFBBuyCnt(curPlayer, mapID)
- GameWorld.DebugLog("购买副本进入次数: mapID=%s,canBuyCnt=%s" % (mapID, canBuyCnt))
- if canBuyCnt <= 0:
- GameWorld.DebugLog("mapID:%s 不可以购买进入次数"%mapID)
- return
-
- hasBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_BuyFbCntDay % mapID)
- maxDayTimes = ipyData.GetDayTimes()
- maxCnt = GetEnterFBMaxCnt(curPlayer, mapID)
- enterCnt = GetEnterFBCount(curPlayer, mapID)
- if mapID == ChConfig.Def_FBMapID_SealDemon and maxDayTimes and maxCnt - enterCnt >= maxDayTimes:
- GameWorld.DebugLog('当前次数已满,无需购买。。')
- return
-
+ hasBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBBuyCnt % mapID)
+ GameWorld.DebugLog("购买副本进入次数: mapID=%s,canBuyCnt=%s,hasBuyCnt=%s" % (mapID, canBuyCnt, hasBuyCnt))
if hasBuyCnt >= canBuyCnt:
- GameWorld.DebugLog("购买次数已经用完mapID=%s,hasBuyCnt=%s >= canBuyCnt=%s" % (mapID, hasBuyCnt, canBuyCnt))
+ GameWorld.DebugLog("副本购买次数已经用完! mapID=%s,hasBuyCnt=%s >= canBuyCnt=%s" % (mapID, hasBuyCnt, canBuyCnt))
return
- costGoldDict = IpyGameDataPY.GetFuncEvalCfg('BuyFBCntCost', 1, {})
- costGold = costGoldDict.get(str(mapID), '0')
- costGold = eval(costGold)
- costMoneyTypeInfo = IpyGameDataPY.GetFuncEvalCfg('BuyFBCntCost', 2, {})
- costType = costMoneyTypeInfo.get(str(mapID), ShareDefine.TYPE_Price_Gold_Paper_Money)
- if costGold <= 0:
- GameWorld.DebugLog("没有配置购买副本次数消耗货币数! mapID=%s,costType=%s,costGold=%s" % (mapID, costType, costGold))
+ costType = ipyData.GetPayMoneyType()
+ payMoneyList = ipyData.GetPayMoneyValues()
+ if not costType or not payMoneyList:
+ GameWorld.DebugLog("没有配置购买副本次数消耗货币数! mapID=%s,costType=%s,payMoneyList=%s" % (mapID, costType, payMoneyList))
return
- costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, costType, costGold)
- #GameWorld.Log('costMoneyList=%s,costGold=%s'%(costMoneyList,costGold))
- if not costMoneyList:
+ costMoney = payMoneyList[hasBuyCnt] if len(payMoneyList) > hasBuyCnt else payMoneyList[-1]
+ if not PlayerControl.PayMoney(curPlayer, costType, costMoney, ChConfig.Def_Cost_BuyFBCnt, {"MapID":mapID}):
return
- infoDict = {"MapID":mapID}
-
- for moneyType, moneyNum in costMoneyList:
- if not PlayerControl.PayMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_Cost_BuyFBCnt, infoDict):
- GameWorld.DebugLog("仙玉不足!costGold=%s" % costGold)
- return
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_BuyFbCntDay % mapID, hasBuyCnt + 1)
- Sync_FBPlayerFBBuyCount(curPlayer, [mapID])
- PlayerControl.NotifyCode(curPlayer, 'FBEnterTimeBuy', [mapID])
- if mapID == ChConfig.Def_FBMapID_Love:
- coupleID = PlayerControl.GetCoupleID(curPlayer)
- if coupleID:
- addItemList = IpyGameDataPY.GetFuncEvalCfg("LoveFB", 3)
- paramList = [curPlayer.GetPlayerName()]
- PlayerControl.SendMailByKey("BuyLoveFBCntCoupleMail", [coupleID], addItemList, paramList)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBBuyCnt % mapID, hasBuyCnt + 1)
+ Sync_FBPlayerFBInfoData(curPlayer, mapID)
+ return
+
+def AddFBADCnt(curPlayer, mapID):
+ fbIpyData = GetFBIpyData(mapID)
+ if not fbIpyData:
+ return
+ adCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBADCnt % mapID)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBADCnt % mapID, adCnt + 1)
+ Sync_FBPlayerFBInfoData(curPlayer, mapID)
return
## 获取记录值的mapID
@@ -1752,42 +1640,42 @@
# @return
# @remarks 一般用于几张地图公用一份存储记录,如组队副本进入次数,CD时间等数据需共享
def GetRecordMapID(mapID):
- DataMapIDDict = IpyGameDataPY.GetConfigEx("DataMapIDDict")
- if not DataMapIDDict:
- mIDToDataMapIDDict = {} # 场景ID对应功能地图ID
- dMapIDDict = {}
- ipyDataMgr = IpyGameDataPY.IPY_Data()
- for i in xrange(ipyDataMgr.GetFBLineCount()):
- ipyData = ipyDataMgr.GetFBLineByIndex(i)
- dMapID = ipyData.GetDataMapID()
- mID = ipyData.GetMapID()
- mIDList= dMapIDDict.get(dMapID, [])
- if mID not in mIDList:
- mIDList.append(mID)
- dMapIDDict[dMapID] = mIDList
-
- dMIDList= mIDToDataMapIDDict.get(mID, [])
- if dMapID not in dMIDList:
- dMIDList.append(dMapID)
- mIDToDataMapIDDict[mID] = dMIDList
-
- unMIDList = []
- for mID, dMIDList in mIDToDataMapIDDict.items():
- if len(dMIDList) > 1:
- unMIDList.append(mID)
- #GameWorld.DebugLog("----------- 同个场景对应到多个功能地图的,视为无意义的地图! mID=%s, to dMIDList=%s" % (mID, dMIDList))
- for dMapID, mIDList in dMapIDDict.items():
- for unMID in unMIDList:
- if unMID in mIDList:
- mIDList.remove(unMID)
- if len(mIDList) <= 1:
- dMapIDDict.pop(dMapID)
- DataMapIDDict = IpyGameDataPY.SetConfigEx("DataMapIDDict", dMapIDDict)
- #GameWorld.Log("加载DataMapIDDict=%s" % DataMapIDDict)
-
- for dataMapID, mapIDList in DataMapIDDict.items():
- if mapID in mapIDList:
- return dataMapID
+# DataMapIDDict = IpyGameDataPY.GetConfigEx("DataMapIDDict")
+# if not DataMapIDDict:
+# mIDToDataMapIDDict = {} # 场景ID对应功能地图ID
+# dMapIDDict = {}
+# ipyDataMgr = IpyGameDataPY.IPY_Data()
+# for i in xrange(ipyDataMgr.GetFBLineCount()):
+# ipyData = ipyDataMgr.GetFBLineByIndex(i)
+# dMapID = ipyData.GetDataMapID()
+# mID = ipyData.GetMapID()
+# mIDList= dMapIDDict.get(dMapID, [])
+# if mID not in mIDList:
+# mIDList.append(mID)
+# dMapIDDict[dMapID] = mIDList
+#
+# dMIDList= mIDToDataMapIDDict.get(mID, [])
+# if dMapID not in dMIDList:
+# dMIDList.append(dMapID)
+# mIDToDataMapIDDict[mID] = dMIDList
+#
+# unMIDList = []
+# for mID, dMIDList in mIDToDataMapIDDict.items():
+# if len(dMIDList) > 1:
+# unMIDList.append(mID)
+# #GameWorld.DebugLog("----------- 同个场景对应到多个功能地图的,视为无意义的地图! mID=%s, to dMIDList=%s" % (mID, dMIDList))
+# for dMapID, mIDList in dMapIDDict.items():
+# for unMID in unMIDList:
+# if unMID in mIDList:
+# mIDList.remove(unMID)
+# if len(mIDList) <= 1:
+# dMapIDDict.pop(dMapID)
+# DataMapIDDict = IpyGameDataPY.SetConfigEx("DataMapIDDict", dMapIDDict)
+# #GameWorld.Log("加载DataMapIDDict=%s" % DataMapIDDict)
+#
+# for dataMapID, mapIDList in DataMapIDDict.items():
+# if mapID in mapIDList:
+# return dataMapID
return mapID
def GetGeneralTrainMapIDList():
@@ -1806,11 +1694,8 @@
return GeneralTrainMapIDList
-## 通知个人通用副本信息
-# @param curPlayer: 玩家实例
-# @param runTime: 已经进行时间
-# @return: None
def Sync_FBPlayerFBInfoData(curPlayer, mapIDInfo=None):
+ ## 通知个人通用副本信息
if not mapIDInfo:
ipyDataMgr = IpyGameDataPY.IPY_Data()
mapIDList = [ipyDataMgr.GetFBFuncByIndex(i).GetDataMapID() for i in xrange(ipyDataMgr.GetFBFuncCount())]
@@ -1819,74 +1704,25 @@
return
mapIDList = [mapIDInfo] if type(mapIDInfo) == int else mapIDInfo
- fbInfoData = ChPyNetSendPack.tagMCPlayerFBInfoData()
- fbInfoData.Clear()
- fbInfoData.FBDataCnt = len(mapIDList)
- fbInfoData.FBDataList = []
+ clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCFBInfoList)
+ clientPack.FBDataList = []
- for mID in mapIDList:
- mapInfo = ChPyNetSendPack.tagMCFBInfo()
- mapInfo.Clear()
- mapInfo.FBID = mID
- mapInfo.EnterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % mID)
- mapInfo.EnterCntTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntTotal % mID)
- mapInfo.RecoverCnt = 0
- mapInfo.ItemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ItemAddFbCnt % mID)
- mapInfo.PassLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBPassLineID % mID)
-
+ for mapID in mapIDList:
+ fbInfo = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCFBInfo)
+ fbInfo.MapID = mapID
+ fbInfo.EnterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbEnterCnt % mapID)
+ fbInfo.ADAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBADCnt % mapID)
+ fbInfo.BuyAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBBuyCnt % mapID)
+ fbInfo.ItemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBItemCnt % mapID)
+ fbInfo.PassLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBPassLineID % mapID)
for keyNum in range(ChConfig.Def_FBStar_MaxKeyCnt):
- gradeValue = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_PlayerFBStar_MapId % (mID, keyNum))
- mapInfo.PassGrade.append(gradeValue)
- mapInfo.PassGradeCnt = len(mapInfo.PassGrade)
- #GameWorld.DebugLog("FBID:%s---:%s"%(mapInfo.FBID,mapInfo.EnterCnt))
- fbInfoData.FBDataList.append(mapInfo)
+ gradeValue = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBStar % (mapID, keyNum))
+ fbInfo.PassGrade.append(gradeValue)
+ fbInfo.PassGradeCnt = len(fbInfo.PassGrade)
+ clientPack.FBDataList.append(fbInfo)
- NetPackCommon.SendFakePack(curPlayer, fbInfoData)
- return
-
-#// A3 BD 通知玩家购买副本进入次数 #tagMCBuyEnterInfo
-#
-#struct tagMCBuyEnterInfo
-#{
-# tagHead Head;
-# BYTE FBCount; // 副本个数
-# DWORD tagMCFBInfo[FBCount]; // 副本信息
-#};
-#
-#struct tagMCBuyInfo
-#{
-# tagHead Head;
-# DWORD FBID; // 副本ID
-# BYTE BuyCount; // 已购买次数
-#};
-## 通知个人购买副本次数信息
-# @param curPlayer: 玩家实例
-# @param runTime: 已经进行时间
-# @return: None
-def Sync_FBPlayerFBBuyCount(curPlayer, mapIDList=[]):
- if not mapIDList:
- mapIDList = []
- ipyDataMgr = IpyGameDataPY.IPY_Data()
- for i in xrange(ipyDataMgr.GetFBFuncCount()):
- ipyData = ipyDataMgr.GetFBFuncByIndex(i)
- if not ipyData.GetBuyTimesVIPPriID():
- continue
- mapIDList.append(ipyData.GetDataMapID())
-
-
- fbInfoData = ChPyNetSendPack.tagMCBuyEnterInfo()
- fbInfoData.Clear()
- fbInfoData.FBInfo = []
- for mID in mapIDList:
- mapInfo = ChPyNetSendPack.tagMCBuyInfo()
- mapInfo.Clear()
- mapInfo.FBID = mID
- mapInfo.BuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_BuyFbCntDay % mID)
- fbInfoData.FBInfo.append(mapInfo)
- #GameWorld.DebugLog("FBID:%s---BuyCount:%s"%(mapInfo.FBID,mapInfo.BuyCount))
- fbInfoData.FBCount = len(fbInfoData.FBInfo)
- if fbInfoData.FBCount > 0:
- NetPackCommon.SendFakePack(curPlayer, fbInfoData)
+ clientPack.FBDataCnt = len(clientPack.FBDataList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
return
## 根据人数分组
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py
new file mode 100644
index 0000000..151f780
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py
@@ -0,0 +1,72 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GameWorldLogic.FBProcess.GameLogic_Zhanchui
+#
+# @todo:白骨盈野/战锤秘境
+# @author hxp
+# @date 2025-09-30
+# @version 1.0
+#
+# 详细描述: 白骨盈野/战锤秘境
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-09-30 10:30"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import ItemControler
+import FBCommon
+
+def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
+ ## 回合战斗请求
+
+ if FBCommon.IsFBPass(curPlayer, mapID, funcLineID):
+ GameWorld.DebugLog("已过关的不能不重复挑战! mapID=%s,funcLineID=%s" % (mapID, funcLineID))
+ return
+
+ return True
+
+def OnTurnFightOver(curPlayer, turnFight, mapID, funcLineID, overMsg):
+ ## 回合战斗结束
+
+ if not curPlayer:
+ return
+
+ isWin = turnFight.isWin
+
+ if not isWin:
+ return
+
+ if FBCommon.IsFBPass(curPlayer, mapID, funcLineID):
+ GameWorld.DebugLog("已过关的不重复获得过关奖励! mapID=%s,funcLineID=%s" % (mapID, funcLineID))
+ return
+
+ itemList = FBCommon.GetPassAwardList(mapID, funcLineID)
+ GameWorld.DebugLog("过关奖励: mapID=%s,funcLineID=%s,itemList=%s" % (mapID, funcLineID, itemList))
+ # 首通不扣次数
+ FBCommon.SetFBPass(curPlayer, mapID, funcLineID)
+ ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["Zhanchui", False, {}], isNotifyAward=False)
+ overMsg.update({FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(itemList)})
+
+ return
+
+def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, sweepCnt, dataEx):
+ ## 可否扫荡
+
+ return True
+
+def OnPlayerFBSweepResult(curPlayer, mapID, lineID, sweepCnt, dataEx):
+ ## 扫荡结果,次数消耗已在外层处理扣除
+
+ itemList = FBCommon.GetSweepAwardList(mapID, lineID, sweepCnt)
+ GameWorld.DebugLog("白骨盈野扫荡: mapID=%s,lineID=%s,sweepCnt=%s" % (mapID, lineID, sweepCnt))
+
+ ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["Zhanchui", False, {}], isNotifyAward=False)
+
+ isPass = 1
+ overDict = {FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(itemList), FBCommon.Over_isSweep:1}
+ FBCommon.NotifyFBOver(curPlayer, mapID, lineID, isPass, overDict)
+
+ return True
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 377d290..77feefe 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -997,37 +997,25 @@
"FBFunc":(
("DWORD", "DataMapID", 1),
("BYTE", "DayTimes", 0),
- ("BYTE", "DayResetType", 0),
- ("BYTE", "WeekTimes", 0),
- ("BYTE", "WeekResetType", 0),
- ("list", "RewardRate", 0),
- ("DWORD", "BuyTimesVIPPriID", 0),
- ("DWORD", "ExtraTimesVIPPriID", 0),
- ("DWORD", "ExtraTimesMWPriID", 0),
- ("BYTE", "GuardPick", 0),
- ("WORD", "OfflineTime", 0),
- ("WORD", "FBPoint", 0),
- ("WORD", "HelpPoint", 0),
- ("BYTE", "DayHelpCountMax", 0),
+ ("BYTE", "PayCntMax", 0),
+ ("BYTE", "PayMoneyType", 0),
+ ("list", "PayMoneyValues", 0),
),
"FBLine":(
("DWORD", "DataMapID", 1),
("BYTE", "LineID", 1),
- ("DWORD", "MapID", 0),
("WORD", "LVLimitMin", 0),
- ("WORD", "LVLimitMax", 0),
- ("DWORD", "TicketID", 0),
- ("list", "TicketCostCnt", 0),
- ("WORD", "TicketPrice", 0),
- ("WORD", "SweepLVLimit", 0),
- ("DWORD", "SweepItemID", 0),
- ("BYTE", "SweepCostCnt", 0),
- ("eval", "EnterPosInfo", 0),
- ("eval", "StepTime", 0),
- ("eval", "RefreshNPC", 0),
- ("eval", "GradeInfo", 0),
- ("eval", "RewardInfo", 0),
+ ("list", "PassAwardList", 0),
+ ("list", "SweepAwardList", 0),
+ ("list", "LineupIDList", 0),
+ ),
+
+ "ADAward":(
+ ("DWORD", "ADID", 1),
+ ("BYTE", "ADCntMax", 0),
+ ("list", "ADAwardItemList", 0),
+ ("DWORD", "ADMapID", 0),
),
"FBGeneralTrain":(
@@ -3978,19 +3966,10 @@
return
def GetDataMapID(self): return self.attrTuple[0] # 数据地图ID DWORD
- def GetDayTimes(self): return self.attrTuple[1] # 每日可挑战次数, 0为不限制 BYTE
- def GetDayResetType(self): return self.attrTuple[2] # 每日次数重置类型; 0-不重置,1-0点,2-5点 BYTE
- def GetWeekTimes(self): return self.attrTuple[3] # 每周可挑战次数, 0为不限制 BYTE
- def GetWeekResetType(self): return self.attrTuple[4] # 每周次数重置类型; 0-不重置,1-0点,2-5点 BYTE
- def GetRewardRate(self): return self.attrTuple[5] # 评级奖励比例 list
- def GetBuyTimesVIPPriID(self): return self.attrTuple[6] # 购买次数VIP权限ID DWORD
- def GetExtraTimesVIPPriID(self): return self.attrTuple[7] # 额外次数VIP权限ID DWORD
- def GetExtraTimesMWPriID(self): return self.attrTuple[8] # 额外次数法宝权限ID DWORD
- def GetGuardPick(self): return self.attrTuple[9] # 该地图守护是否能拾取 BYTE
- def GetOfflineTime(self): return self.attrTuple[10] # 离线多久退出副本(秒) WORD
- def GetFBPoint(self): return self.attrTuple[11] # 副本过关仙缘币 WORD
- def GetHelpPoint(self): return self.attrTuple[12] # 助战仙缘币(0代表不可助战) WORD
- def GetDayHelpCountMax(self): return self.attrTuple[13] # 每日手动助战获得仙缘币次数(非镜像) BYTE
+ def GetDayTimes(self): return self.attrTuple[1] # 每日免费次数, 0为不限制 BYTE
+ def GetPayCntMax(self): return self.attrTuple[2] # 额外付费次数 BYTE
+ def GetPayMoneyType(self): return self.attrTuple[3] # 消耗货币类型 BYTE
+ def GetPayMoneyValues(self): return self.attrTuple[4] # 消耗货币值列表 list
# 副本功能线路表
class IPY_FBLine():
@@ -4001,20 +3980,22 @@
def GetDataMapID(self): return self.attrTuple[0] # 数据地图ID DWORD
def GetLineID(self): return self.attrTuple[1] # 功能线路ID BYTE
- def GetMapID(self): return self.attrTuple[2] # 场景地图ID DWORD
- def GetLVLimitMin(self): return self.attrTuple[3] # 最低等级限制, 0为不限制 WORD
- def GetLVLimitMax(self): return self.attrTuple[4] # 最高等级限制, 0为不限制 WORD
- def GetTicketID(self): return self.attrTuple[5] # 门票ID DWORD
- def GetTicketCostCnt(self): return self.attrTuple[6] # 门票消耗数信息 list
- def GetTicketPrice(self): return self.attrTuple[7] # 门票单价(不能用钱抵的配0) WORD
- def GetSweepLVLimit(self): return self.attrTuple[8] # 扫荡等级限制, 0为不限制 WORD
- def GetSweepItemID(self): return self.attrTuple[9] # 扫荡所需道具ID DWORD
- def GetSweepCostCnt(self): return self.attrTuple[10] # 扫荡所需道具个数 BYTE
- def GetEnterPosInfo(self): return self.attrTuple[11] # 进入坐标信息 eval
- def GetStepTime(self): return self.attrTuple[12] # 阶段时间 eval
- def GetRefreshNPC(self): return self.attrTuple[13] # 标试点刷怪配置 eval
- def GetGradeInfo(self): return self.attrTuple[14] # 评级规则 eval
- def GetRewardInfo(self): return self.attrTuple[15] # 奖励信息 eval
+ def GetLVLimitMin(self): return self.attrTuple[2] # 最低等级限制, 0为不限制 WORD
+ def GetPassAwardList(self): return self.attrTuple[3] # 过关奖励 list
+ def GetSweepAwardList(self): return self.attrTuple[4] # 扫荡奖励 list
+ def GetLineupIDList(self): return self.attrTuple[5] # 阵容ID列表 list
+
+# 广告奖励表
+class IPY_ADAward():
+
+ def __init__(self):
+ self.attrTuple = None
+ return
+
+ def GetADID(self): return self.attrTuple[0] # DWORD
+ def GetADCntMax(self): return self.attrTuple[1] # 每日次数 BYTE
+ def GetADAwardItemList(self): return self.attrTuple[2] # 广告奖励物品列表 list
+ def GetADMapID(self): return self.attrTuple[3] # 对应副本ID,默认给该副本1次次数 DWORD
# 副本通用养成表
class IPY_FBGeneralTrain():
@@ -6517,6 +6498,7 @@
self.__LoadFileData("ChinMap", onlyCheck)
self.__LoadFileData("FBFunc", onlyCheck)
self.__LoadFileData("FBLine", onlyCheck)
+ self.__LoadFileData("ADAward", onlyCheck)
self.__LoadFileData("FBGeneralTrain", onlyCheck)
self.__LoadFileData("DailyAction", onlyCheck)
self.__LoadFileData("EquipGSParam", onlyCheck)
@@ -7544,6 +7526,13 @@
self.CheckLoadData("FBLine")
return self.ipyFBLineCache[index]
+ def GetADAwardCount(self):
+ self.CheckLoadData("ADAward")
+ return self.ipyADAwardLen
+ def GetADAwardByIndex(self, index):
+ self.CheckLoadData("ADAward")
+ return self.ipyADAwardCache[index]
+
def GetFBGeneralTrainCount(self):
self.CheckLoadData("FBGeneralTrain")
return self.ipyFBGeneralTrainLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
index 36d166c..3d49a93 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -147,7 +147,7 @@
# @param tick 当前时间
# @return None or True
# @remarks 函数详细说明.
-def __DoPickup(curPlayer, mapItemID, tick, isGuard):
+def __DoPickup(curPlayer, mapItemID, tick):
playerID = curPlayer.GetPlayerID()
mapItemManager = GameWorld.GetMapItemManager()
@@ -165,7 +165,7 @@
posX, posY, itemPosX, itemPosY = curPlayer.GetPosX(), curPlayer.GetPosY(), mapItem.GetPosX(), mapItem.GetPosY()
pickDist = GameWorld.GetDist(posX, posY, itemPosX, itemPosY)
# 守护拾取不验证拾取范围
- if not isGuard and pickDist > curPlayer.GetPickupDist():
+ if pickDist > curPlayer.GetPickupDist():
#距离过远, 不能捡起
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_805889")
GameWorld.Log("当前距离过远, mapItemID=%s,dropItemNPCID=%s,玩家(%d,%d)-物品(%d,%d),pickDist=%s > playerPickupDist=%s"
@@ -257,8 +257,8 @@
mapID = GameWorld.GetGameWorld().GetMapID()
lineID = 0 if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull else PlayerControl.GetFBFuncLineID(curPlayer)
#合并地图的,使用前端lineID,即 FBID
- if mapID in [ChConfig.Def_FBMapID_BossHome]:
- lineID = curPlayer.GetClientLineID()
+ #if mapID in [ChConfig.Def_FBMapID_BossHome]:
+ # lineID = curPlayer.GetClientLineID()
NPCCommon.SendGameServerGoodItemRecord(curPlayer, mapID, lineID, dropItemNPCID, curItemID, equipInfo)
# 不需要队伍提示
@@ -299,20 +299,6 @@
return
#---------------------------------------------------------------------
-#// A3 12 守护拾取物品 #tagCMGuardPickupItem
-#
-#struct tagCMGuardPickupItem
-#{
-# tagHead Head;
-# WORD ItemCount;
-# WORD MapItemID[ItemCount]; //size = ItemCount
-#};
-def OnGuardPickupItem(index, clientData, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- mapItemIDList = clientData.MapItemID
- __DoPickupItem(curPlayer, mapItemIDList, tick, True)
- return
-
## 玩家拾取物品(封包参数)
# @param index 当前玩家索引
# @param tick 当前时间
@@ -323,103 +309,23 @@
#玩家捡起物品
pickPack = IPY_GameWorld.IPY_PickUpItem()
mapItemID = pickPack.GetMapItemID()
- __DoPickupItem(curPlayer, [mapItemID], tick, False)
+ __DoPickupItem(curPlayer, [mapItemID], tick)
return
-def __DoPickupItem(curPlayer, mapItemIDList, tick, isGuard):
- # @param isGuard: 是否守护拾取
-
- if isGuard and GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull:
- mapID = curPlayer.GetMapID()
- fbIpyData = FBCommon.GetFBIpyData(mapID)
- if fbIpyData and not fbIpyData.GetGuardPick():
- GameWorld.Log("该地图守护无法拾取物品! mapID=%s" % mapID, curPlayer.GetPlayerID())
- return
-
-# #单人副本一键拾取
-# if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtSingle:
-# SingleFBTPickUP(curPlayer, mapItemID, tick)
-# return
-
+def __DoPickupItem(curPlayer, mapItemIDList, tick):
if not mapItemIDList:
GameWorld.ErrLog("没有指定要拾取的地图物品ID!", curPlayer.GetPlayerID())
return
succMapItemIDList = [] # 成功拾取的地图物品
for mapItemID in mapItemIDList:
- if __DoPickup(curPlayer, mapItemID, tick, isGuard):
+ if __DoPickup(curPlayer, mapItemID, tick):
succMapItemIDList.append(mapItemID)
if succMapItemIDList:
GameWorld.Log("成功拾取地图物品, succMapItemIDList=%s" % (succMapItemIDList), curPlayer.GetPlayerID())
-
- # 守护拾取的,附加同步守护拾取结果
- if isGuard and succMapItemIDList:
- guradPickupSucc = ChPyNetSendPack.tagMCGuradPickupItemSucc()
- guradPickupSucc.MapItemID = succMapItemIDList
- guradPickupSucc.ItemCount = len(guradPickupSucc.MapItemID)
- NetPackCommon.SendFakePack(curPlayer, guradPickupSucc)
-
-# 玩家拾取结果目前客户端暂时无用,不通知
-# if not __DoPickup(curPlayer, mapItemID, tick):
-# curPlayer.Notify_PickupItemResult(mapItemID, 0)
-# else:
-# curPlayer.Notify_PickupItemResult(mapItemID, 1)
return
-
-###单人副本一键拾取
-## @param curPlayer mapItemID
-## @return None
-#def SingleFBTPickUP(curPlayer, mapItemID, tick):
-# mapItemManager = GameWorld.GetMapItemManager()
-# curMapItem = mapItemManager.GetItemByID(mapItemID)
-# if curMapItem == None or curMapItem.IsEmpty():
-# return
-#
-# posX = curPlayer.GetPosX()
-# posY = curPlayer.GetPosY()
-# itemPosX = curMapItem.GetPosX()
-# itemPosY = curMapItem.GetPosY()
-#
-# pickDist = GameWorld.GetDist(posX, posY, itemPosX, itemPosY)
-#
-# if pickDist > curPlayer.GetPickupDist():
-# #距离过远, 不能捡起
-# PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_805889")
-# return
-#
-# mapItemIDList = [curMapItem.GetID()]
-# #拾取当前格子周围的物品
-# mapItemManager = GameWorld.GetMapItemManager()
-# for index in range(mapItemManager.GetMapItemCount()):
-# mapItem = mapItemManager.GetMapItemByIndex(index)
-# if not mapItem or mapItem.IsEmpty():
-# continue
-#
-# mapItemObjID = mapItem.GetID()
-# if mapItemObjID in mapItemIDList:
-# continue
-#
-# curItem = mapItem.GetItem()
-# # 只一键拾取金钱
-# if curItem.GetType() != ChConfig.Def_ItemType_Money:
-# continue
-#
-# pickDist = GameWorld.GetDist(posX, posY, mapItem.GetPosX(), mapItem.GetPosY())
-#
-# if pickDist > curPlayer.GetPickupDist():
-# continue
-#
-# mapItemIDList.append(mapItemObjID)
-#
-# for mapItemID in mapItemIDList:
-# if not __DoPickup(curPlayer, mapItemID, tick):
-# curPlayer.Notify_PickupItemResult(mapItemID, 0)
-# else:
-# curPlayer.Notify_PickupItemResult(mapItemID, 1)
-#
-# return
#---------------------------------------------------------------------
## 玩家使用物品 ->自身效果(封包参数)
# @param index 当前玩家索引
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
index 748ffee..c6ba2cc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -825,12 +825,12 @@
# 暗金boss
if ChConfig.IsGameBoss(curNPC):
# 通知GameServer boss状态 封魔坛在副本里单独处理
- ipyData = IpyGameDataPY.GetIpyGameDataNotLog('BOSSInfo', npcid)
- if ipyData and ipyData.GetMapID() not in [ChConfig.Def_FBMapID_SealDemon, ChConfig.Def_FBMapID_ZhuXianBoss]:
- GameServe_GameWorldBossState(npcid, 0)
- #GameWorld.GetGameWorld().SetGameWorldDict(ChConfig.Map_NPC_WorldBossDeadTick % npcid, GameWorld.GetGameWorld().GetTick())
- #因为存在boss分流,所以用gameFB字典,但是存活状态还是用GameWorld字典
- GameWorld.GetGameFB().SetGameFBDict(ChConfig.Map_NPC_WorldBossDeadTick % npcid, GameWorld.GetGameWorld().GetTick())
+ #ipyData = IpyGameDataPY.GetIpyGameDataNotLog('BOSSInfo', npcid)
+ #if ipyData and ipyData.GetMapID() not in [ChConfig.Def_FBMapID_SealDemon, ChConfig.Def_FBMapID_ZhuXianBoss]:
+ # GameServe_GameWorldBossState(npcid, 0)
+ # #GameWorld.GetGameWorld().SetGameWorldDict(ChConfig.Map_NPC_WorldBossDeadTick % npcid, GameWorld.GetGameWorld().GetTick())
+ # #因为存在boss分流,所以用gameFB字典,但是存活状态还是用GameWorld字典
+ # GameWorld.GetGameFB().SetGameFBDict(ChConfig.Map_NPC_WorldBossDeadTick % npcid, GameWorld.GetGameWorld().GetTick())
ChNPC.OnNPCSetDead(curNPC)
@@ -956,20 +956,20 @@
PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_BossHome, 1)
PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_BossHome, 1)
- if mapID == ChConfig.Def_FBMapID_CrossPenglai:
- #跨服蓬莱仙境
- PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossPenglai)
- PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillCrossPenglaiBoss, 1)
- PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_KillCrossPenglaiBoss, 1)
- PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_CrossPenglaiBoss, 1)
- elif mapID == ChConfig.Def_FBMapID_CrossDemonLand:
- #跨服魔化之地
- PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossDemonLand)
- PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillCrossDemonLandBoss, 1)
- PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_KillCrossDemonLandBoss, 1)
- PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_CrossDemonLandBoss, 1)
- if mapID in [ChConfig.Def_FBMapID_CrossPenglai, ChConfig.Def_FBMapID_CrossDemonLand]:
- PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_CrossBoss, 1)
+# if mapID == ChConfig.Def_FBMapID_CrossPenglai:
+# #跨服蓬莱仙境
+# PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossPenglai)
+# PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillCrossPenglaiBoss, 1)
+# PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_KillCrossPenglaiBoss, 1)
+# PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_CrossPenglaiBoss, 1)
+# elif mapID == ChConfig.Def_FBMapID_CrossDemonLand:
+# #跨服魔化之地
+# PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossDemonLand)
+# PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillCrossDemonLandBoss, 1)
+# PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_KillCrossDemonLandBoss, 1)
+# PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_CrossDemonLandBoss, 1)
+# if mapID in [ChConfig.Def_FBMapID_CrossPenglai, ChConfig.Def_FBMapID_CrossDemonLand]:
+# PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_CrossBoss, 1)
# 个人首杀记录
ipyData = IpyGameDataPY.GetIpyGameDataNotLog("BOSSFirstKill", npcID)
@@ -2490,13 +2490,13 @@
#杀死NPC, 触发任务
self.__EventKillNpc()
- mapID = GameWorld.GetMap().GetMapID()
- killerName = "" if not self.__Killer else self.__Killer.GetPlayerName()
- # 记录boss击杀信息的NPC
- bossIpyData = IpyGameDataPY.GetIpyGameDataListNotLog('BOSSInfo', npcID)
- if bossIpyData and mapID not in [ChConfig.Def_FBMapID_ZhuXianBoss, ChConfig.Def_FBMapID_SealDemon]:
- killerIDList = [player.GetPlayerID() for player in self.__ownerPlayerList]
- GameServer_KillGameWorldBoss(curNPC.GetNPCID(), killerName, 0, True, killerIDList)
+ #mapID = GameWorld.GetMap().GetMapID()
+ #killerName = "" if not self.__Killer else self.__Killer.GetPlayerName()
+ ## 记录boss击杀信息的NPC
+ #bossIpyData = IpyGameDataPY.GetIpyGameDataListNotLog('BOSSInfo', npcID)
+ #if bossIpyData and mapID not in [ChConfig.Def_FBMapID_ZhuXianBoss, ChConfig.Def_FBMapID_SealDemon]:
+ # killerIDList = [player.GetPlayerID() for player in self.__ownerPlayerList]
+ # GameServer_KillGameWorldBoss(curNPC.GetNPCID(), killerName, 0, True, killerIDList)
if npcID == IpyGameDataPY.GetFuncCfg("BossRebornServerBoss", 3):
PlayerControl.WorldNotify(0, "BossRebornBossKilled", [curNPC.GetNPCID()])
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 4fef199..4cb1330 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -139,6 +139,7 @@
import PlayerHero
import PlayerOnline
import TurnAttack
+import ObjPool
import datetime
import time
@@ -758,6 +759,7 @@
PlayerGoldRush.OnPlayerLogin(curPlayer)
PlayerActFamilyGCZ.OnPlayerLogin(curPlayer)
PlayerTalk.OnPlayerLogin(curPlayer)
+ SyncADCntInfo(curPlayer)
# 上线查询一次充值订单
curPlayer.SendDBQueryRecharge()
@@ -3226,6 +3228,30 @@
NetPackCommon.SendFakePack(curPlayer, awardReceiveState)
return
+def PlayerOnDay(curPlayer):
+ #玩法前瞻奖励
+ gameNoticeAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GameNoticeAwardState)
+ if gameNoticeAwardState:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GameNoticeAwardState, 0)
+ Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_GameNotice, 0)
+ #每日分享奖励重置
+ shareGameAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShareGameAwardState)
+ if shareGameAwardState:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ShareGameAwardState, 0)
+ Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_ShareGame, 0)
+ #开服每日奖励
+ awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OpenSererDailyAward)
+ if awardState:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OpenSererDailyAward, 0)
+ Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_OpenServerDailyAward, 0)
+ #开服每日奖励
+ awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeDayAward)
+ if awardState:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeDayAward, 0)
+ Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_RechargeDayAward, 0)
+ ADCntOnDay(curPlayer)
+ return
+
#//A5 04 玩家领取奖励 #tagCMPlayerGetReward
#
#struct tagCMPlayerGetReward
@@ -3256,6 +3282,9 @@
# 仙树免费减时
elif rewardType == ChConfig.Def_RewardType_TreeFreeTime:
PlayerTree.FreeReduceTreeLVTime(curPlayer)
+ # 广告奖励
+ elif rewardType == ChConfig.Def_RewardType_ADAward:
+ OnGetADAward(curPlayer, dataEx)
# 每日免费直购礼包
elif rewardType == ChConfig.Def_RewardType_DayFreeGoldGift:
PlayerDailyGiftbag.OnGetDailyFreeGiftbag(curPlayer)
@@ -3404,7 +3433,71 @@
elif rewardType == ChConfig.Def_RewardType_RechargeDayAward:
OnGetRechargeDayAward(curPlayer, rewardType)
return
+
+def OnGetADAward(curPlayer, adID):
+ ipyData = IpyGameDataPY.GetIpyGameData("ADAward", adID)
+ if not ipyData:
+ return
+ adCntMax = ipyData.GetADCntMax()
+ adCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ADCnt % adID)
+ if adCnt >= adCntMax:
+ GameWorld.DebugLog("今日该广告奖励已达上限! adID=%s,adCnt=%s > %s" % (adID, adCnt, adCntMax))
+ return
+ adCnt += 1
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ADCnt % adID, adCnt)
+ awardItemList = ipyData.GetADAwardItemList()
+ adMapID = ipyData.GetADMapID()
+ GameWorld.DebugLog("领取广告奖励! adID=%s,adCnt=%s,adMapID=%s,awardItemList=%s" % (adID, adCnt, adMapID, awardItemList))
+ SyncADCntInfo(curPlayer, [adID])
+ if adMapID:
+ FBCommon.AddFBADCnt(curPlayer, adMapID)
+
+ if awardItemList:
+ ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["ADAward", False, {}])
+
+ return
+
+def ADCntOnDay(curPlayer):
+ syncADIDList = []
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in xrange(ipyDataMgr.GetADAwardCount()):
+ ipyData = ipyDataMgr.GetADAwardByIndex(index)
+ adID = ipyData.GetADID()
+ if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ADCnt % adID):
+ continue
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ADCnt % adID, 0)
+ syncADIDList.append(adID)
+ if syncADIDList:
+ SyncADCntInfo(curPlayer, syncADIDList)
+ return
+
+def SyncADCntInfo(curPlayer, syncADIDList=None):
+ if not syncADIDList:
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ adIDList = [ipyDataMgr.GetADAwardByIndex(i).GetADID() for i in xrange(ipyDataMgr.GetADAwardCount())]
+ else:
+ adIDList = syncADIDList
+
+ adInfoList = []
+ for adID in adIDList:
+ adCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ADCnt % adID)
+ if not adCnt and syncADIDList == None:
+ continue
+ adInfo = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCADInfo)
+ adInfo.ADID = adID
+ adInfo.ADCnt = adCnt
+ adInfoList.append(adInfo)
+
+ if not adInfoList:
+ return
+
+ clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCADInfoList)
+ clientPack.ADInfoList = adInfoList[:255]
+ clientPack.Count = len(clientPack.ADInfoList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
+
def OnGetRechargeDayAward(curPlayer, rewardType):
## 领取累充每日奖励,取最高档
realTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGRealTotal)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py
index a78b1b6..8b8ae0a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py
@@ -211,7 +211,7 @@
return
# 不需要处理的跨服地图
- if crossMapID in [ChConfig.Def_FBMapID_CrossRealmPK]:
+ if crossMapID in []:
return
if not IpyGameDataPY.GetFuncCfg("CrossSyncPlayerData", 1):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 1dd5d6a..4537a3c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -1402,7 +1402,7 @@
#进入副本通用检查
fbIpyData = FBCommon.GetFBIpyData(mapID)
fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, lineID)
- sceneMapID = mapID if not fbLineIpyData else fbLineIpyData.GetMapID()
+ sceneMapID = mapID #if not fbLineIpyData else fbLineIpyData.GetMapID()
#过滤封包地图ID
if not GameWorld.GetMap().IsMapIDExist(sceneMapID):
GameWorld.ErrLog('###非法地图数据,sceneMapID: %s' % (sceneMapID), curPlayer.GetID())
@@ -1431,15 +1431,14 @@
GameWorld.Log("非队长,无法发起进入组队副本请求!", curPlayer.GetPlayerID())
return
isSendToGameServer = True
- if isSendToGameServer or mapID in ChConfig.Def_MapID_SendToGameServer \
- or mapID in ReadChConfig.GetEvalChConfig("MapID_SendToGameServer"):
+ if isSendToGameServer:
extendParamList = []
if mapID in ChConfig.Def_MapID_LineIDToPropertyID:
- enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % mapID)
+ enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbEnterCnt % mapID)
extendParamList = [enterCnt]
- elif mapID in ChConfig.MirrorBattleMapIDList:
- reqInfoEx["sceneMapID"] = sceneMapID
- extendParamList = [reqInfoEx]
+ #elif mapID in ChConfig.MirrorBattleMapIDList:
+ # reqInfoEx["sceneMapID"] = sceneMapID
+ # extendParamList = [reqInfoEx]
SendToGameServerEnterFB(curPlayer, mapID, lineID, tick, extendParamList)
return
@@ -1663,8 +1662,7 @@
curPlayer.SetDict(ChConfig.Def_PlayerKey_TransTick, tick)
mapID = FBCommon.GetRecordMapID(mapID)
- fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, funcLineID)
- sceneMapID = mapID if not fbLineIpyData else fbLineIpyData.GetMapID()
+ sceneMapID = mapID #if not fbLineIpyData else fbLineIpyData.GetMapID()
# 地图分流, 减少单地图压力
FBMapShuntDict = ReadChConfig.GetEvalChConfig("FBMapShunt")
@@ -1824,8 +1822,8 @@
return tagLineID
tagLinePlayerCountDict = PyGameData.g_commMapLinePlayerCountDict[tagMapID] # 此分线包含所有分线,含未开放的及活动分线
- if bossID and tagMapID != ChConfig.Def_FBMapID_BossHome:
- tagLineID = 0 # Boss的话未分流前先强制1线,即为0
+ #if bossID and tagMapID != ChConfig.Def_FBMapID_BossHome:
+ # tagLineID = 0 # Boss的话未分流前先强制1线,即为0
playerID = curPlayer.GetPlayerID()
playChangeLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_PlayChangeLineID)
funcChangeLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FuncChangeLineID)
@@ -4202,8 +4200,8 @@
if actExpIpyData and curPlayer.GetLV() >= actExpIpyData.GetLVLimit():
fightExpRate += actExpIpyData.GetAddExpRate()
- if curPlayer.GetMapID() not in [ChConfig.Def_FBMapID_FamilyInvade]: #守卫人皇不加组队加成
- fightExpRate += curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TeamExpRate) # 组队
+ #if curPlayer.GetMapID() not in [ChConfig.Def_FBMapID_FamilyInvade]: #守卫人皇不加组队加成
+ # fightExpRate += curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TeamExpRate) # 组队
#地图多倍经验加成,默认是1倍不加成
mapExpAddMultiple = 0
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 91f1cd6..bc2b1ed 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -288,26 +288,8 @@
#仙宫
PlayerXiangong.PlayerOnDay(curPlayer)
PlayerControl.PayCoinOnDay(curPlayer)
- #玩法前瞻奖励
- gameNoticeAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GameNoticeAwardState)
- if gameNoticeAwardState:
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GameNoticeAwardState, 0)
- ChPlayer.Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_GameNotice, 0)
- #每日分享奖励重置
- shareGameAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShareGameAwardState)
- if shareGameAwardState:
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ShareGameAwardState, 0)
- ChPlayer.Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_ShareGame, 0)
- #开服每日奖励
- awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OpenSererDailyAward)
- if awardState:
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OpenSererDailyAward, 0)
- ChPlayer.Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_OpenServerDailyAward, 0)
- #开服每日奖励
- awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeDayAward)
- if awardState:
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeDayAward, 0)
- ChPlayer.Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_RechargeDayAward, 0)
+ ChPlayer.PlayerOnDay(curPlayer)
+
# 特殊时间点X点过天
elif onEventType == ShareDefine.Def_OnEventTypeEx:
PlayerHero.PlayerOnDay(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
index 16b8dcb..fce4034 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
@@ -23,17 +23,12 @@
#------------------------------------------------------------------------------
#"""Version = 2016-12-02 11:00"""
#------------------------------------------------------------------------------
-import IPY_GameWorld
import PlayerControl
import GameWorld
import FBCommon
-import ChConfig
import FBLogic
-import PlayerSuccess
-import ItemCommon
import IpyGameDataPY
import ShareDefine
-import GameFuncComm
import NPCCommon
#---------------------------------------------------------------------
@@ -60,100 +55,48 @@
# DWORD MapID;
# WORD LineID;
# BYTE Cnt; // 扫荡次数
-# BYTE IsFinish; // 是否立即完成; 0-否;1-花钱立即完成;2-客户端自行倒计时间到后发送2代表领取扫荡完成奖励
# DWORD DataEx; //附带信息
-# BYTE IsLittleHelper; // 是否小助手扫荡
#};
def OnPlayerFBWipeOut(playerIndex, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
- #if not GameWorld.CheckPlayerTick(curPlayer, ChConfig.TYPE_Player_Tick_BeginFBWipeOut, tick):
- # GameWorld.DebugLog("玩家副本扫荡请求CD中...", curPlayer.GetPlayerID())
- # return
-
mapID = clientData.MapID
lineID = clientData.LineID
cnt = clientData.Cnt
- #isFinish = clientData.IsFinish
- isFinish = 1 # 暂时默认1,之后有需要扫荡等待的再说
dataEx = clientData.DataEx
- isLittleHelper = clientData.IsLittleHelper
- if isLittleHelper:
- if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_LittleHelper):
- GameWorld.DebugLog("玩家没有小助手功能权限!", curPlayer.GetPlayerID())
- return
if cnt <= 0:
return
fbIpyData = FBCommon.GetFBIpyData(mapID)
- if FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID()) == FBCommon.GetRecordMapID(mapID):
- if fbIpyData and fbIpyData.GetDayTimes():#没有限制进入次数的不限制在目标地图扫荡
- GameWorld.DebugLog("玩家在扫荡目标地图中,无法扫荡!mapID=%s" % mapID)
- return
+ fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, lineID, False)
+ if not fbIpyData or not fbLineIpyData:
+ GameWorld.DebugLog("不存在该副本或线路无法扫荡!mapID=%s, lineID=%s" % (mapID, lineID))
+ return
-
- fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, lineID)
- if not fbLineIpyData:
- GameWorld.DebugLog("找不到该副本线路,无法扫荡!mapID=%s, lineID=%s" % (mapID, lineID))
+ if not FBCommon.IsFBPass(curPlayer, mapID, lineID):
+ GameWorld.DebugLog("未过关无法扫荡!mapID=%s, lineID=%s" % (mapID, lineID))
return
if FBCommon.CheckCanEnterFBComm(curPlayer, mapID, lineID, fbIpyData, fbLineIpyData, cnt) != ShareDefine.EntFBAskRet_OK:
return
- costMoneyList = []
- sweepCostindexList = []
- sweepCostCnt = 0
- itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-
- if fbLineIpyData:
- #扫荡等级判断
- sweepLVLimit = fbLineIpyData.GetSweepLVLimit()
- if sweepLVLimit and curPlayer.GetLV() < sweepLVLimit:
- GameWorld.DebugLog('玩家副本扫荡,等级不足!mapID=%s, lineID=%s, playerLV=%s, sweepLVLimit=%s'
- % (mapID, lineID, curPlayer.GetLV(), sweepLVLimit), curPlayer.GetPlayerID())
- return
-
- #扫荡道具判断,小助手不消耗扫荡道具
- sweepItemID = fbLineIpyData.GetSweepItemID()
- if sweepItemID and not isLittleHelper:
- sweepItemCnt = fbLineIpyData.GetSweepCostCnt()
- sweepCostCnt = sweepItemCnt * cnt
- #isEnough, sweepCostindexList = ItemCommon.GetItem_FromPack_ByID(sweepItemID, itemPack, sweepCostCnt)
- isEnough, sweepCostindexList, hasBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(sweepItemID, itemPack, sweepCostCnt)
- if not isEnough:
- itemPrice = ItemCommon.GetShopItemPrice(sweepItemID, IPY_GameWorld.TYPE_Price_Gold_Money)
- if itemPrice:
- costMoney = itemPrice * lackCnt
- costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, costMoney)
- if not costMoneyList:
- GameWorld.DebugLog("扫荡消耗道具不足, mapID=%s,lineID=%s,sweepItemID=%s,sweepCostCnt=%s"
- % (mapID, lineID, sweepItemID, sweepCostCnt), curPlayer.GetPlayerID())
- return
# 副本是否可扫荡, 这里只判断副本自身的特殊条件, 公共条件上面已经判断
- if not FBLogic.OnPlayerFBSweepAsk(curPlayer, mapID, lineID, cnt, isFinish, dataEx):
+ if not FBLogic.OnPlayerFBSweepAsk(curPlayer, mapID, lineID, cnt, dataEx):
+ GameWorld.DebugLog("该副本当前无法扫荡!mapID=%s, lineID=%s" % (mapID, lineID))
return
- PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_FBSweep, 1, [mapID])
-
- #扣除扫荡道具
- if sweepCostindexList and sweepCostCnt:
- ItemCommon.ReduceItem(curPlayer, itemPack, sweepCostindexList, sweepCostCnt, False, 'FBSweepCostItem')
- if costMoneyList:
- infoDict = {"MapID":mapID, "LineID":lineID, 'SweepCount':cnt}
- for moneyType, moneyNum in costMoneyList:
- if not PlayerControl.PayMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_Cost_FBSweep, infoDict):
- return False, hasBind
+ #PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_FBSweep, 1, [mapID])
#需先扣除门票, 再增加次数, 否则可能导致扣除的数量错误
- FBCommon.DelFBEnterTicket(curPlayer, mapID, lineID, cnt)
-
+ #FBCommon.DelFBEnterTicket(curPlayer, mapID, lineID, cnt)
+
#增加副本进入次数
if fbIpyData and fbIpyData.GetDayTimes():
FBCommon.AddEnterFBCount(curPlayer, mapID, cnt)
#扫荡结果给奖励等
- FBLogic.OnPlayerFBSweepResult(curPlayer, mapID, lineID, cnt, isFinish, dataEx)
+ FBLogic.OnPlayerFBSweepResult(curPlayer, mapID, lineID, cnt, dataEx)
return
#// B1 08 快速一键过关副本 #tagCMFBQuickPass
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFuncTeam.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFuncTeam.py
index 2c811dc..e49429c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFuncTeam.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFuncTeam.py
@@ -473,8 +473,8 @@
canCreate, notifyMark = CheckCanCreateFuncTeam(playerID, teamInfo, zoneID)
# 某些功能创建前检查
- if funcMapID == ChConfig.Def_FBMapID_CrossBattlefield:
- pass
+ #if funcMapID == ChConfig.Def_FBMapID_CrossBattlefield:
+ # pass
newTeam = None
teamID = 0
@@ -489,8 +489,8 @@
newTeamInfo = newTeam.GetSyncDict(True)
# 某些功能创建后处理
- if funcMapID == ChConfig.Def_FBMapID_CrossBattlefield:
- pass
+ #if funcMapID == ChConfig.Def_FBMapID_CrossBattlefield:
+ # pass
else:
if not notifyMark:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py
index 9550af1..0b2fd4e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py
@@ -163,7 +163,7 @@
# GameWorld.DebugLog(" 创建新战盟家园: tagFamilyID=%s,tagFamilyHomeLV=%s,resultLineID=%s"
# % (tagFamilyID, tagFamilyHomeLV, resultLineID))
#===================================================================================================
- elif tagMapID in [ChConfig.Def_FBMapID_HorsePetBoss, ChConfig.Def_FBMapID_SealDemon, ChConfig.Def_FBMapID_ZhuXianBoss, ChConfig.Def_FBMapID_AllFamilyBoss, ChConfig.Def_FBMapID_DemonKing]:
+ elif tagMapID in []:
tagMapPropertyID = tagMapLineID + 1 # 因为PropertyID默认是0,所以使用时从1开始
resultLineID = -1 # 结果lineID
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 35ac305..64df0b4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -859,7 +859,6 @@
GameFuncID_GodWeapon = -1 # 神器 20
GameFuncID_OSSail = -1 # 开服特惠 132
GameFuncID_AddPoint = -1 # 加点功能/灵根功能 145
-GameFuncID_LittleHelper = -1 # 小助手 146
#家族悬赏任务完成状态记录位标识
Def_ArrestOverState_BitDic = {
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
index 875dd0d..9ba2bb3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
@@ -40,13 +40,7 @@
if curObj == None:
# 避免配表错误导致报错
return False
-
- if GameWorld.GetMap().GetMapID() == ChConfig.Def_FBMapID_GatherSoul and curObj.GetGameObjType() == IPY_GameWorld.gotNPC:
- if curSkill.GetSkillTypeID() != 23052:
- #GameWorld.DebugLog('聚魂副本玩家不能对怪物上buff curSkill=%s,buffOwner=%s'%(curSkill.GetSkillTypeID(),buffOwner.GetID()))
- return True
- #GameWorld.DebugLog('聚魂副本对怪物上buff curSkill=%s,buffOwner=%s'%(curSkill.GetSkillTypeID(),buffOwner.GetID()))
-
+
if curObj.GetGameObjType() == IPY_GameWorld.gotNPC and curObj.GetIsBoss() not in ChConfig.Def_SkillAttack_NPCIsBoss \
and SkillCommon.GetSkillBattleType(curSkill) == ChConfig.Def_BattleRelationType_CommNoBoss and SkillShell.IsNPCSkillResist(curObj):
# 释放后 对指定BOSS无效的技能
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
index 6a298b6..84f9426 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -708,29 +708,29 @@
continue
npcObj.StopMove()
npcObj.ChangePos(npcPos.PosX, npcPos.PosY)
- BeatBackMove(curPlayer, npcObj)
+ #BeatBackMove(curPlayer, npcObj)
return
-# 针对NPC被推出远距离一直卡墙角问题,法宝挑战副本特殊处理为超过4米 NPC自动回退一些
-def BeatBackMove(curPlayer, npcObj):
- if GameWorld.GetMap().GetMapID() != ChConfig.Def_FBMapID_MagicWeapon:
- return
- if npcObj.GetCurAction() == IPY_GameWorld.laNPCSkillWarning:
- return
-
- posMap = npcObj.GetRefreshPosAt(npcObj.GetCurRefreshPointIndex())
- if not posMap:
- return
- #范围校验
- posMapX = posMap.GetPosX()
- posMapY = posMap.GetPosY()
- if GameWorld.GetDist(npcObj.GetPosX(), npcObj.GetPosY(), posMapX, posMapY) < 8:
- # 单次位移不超过5米
- return
- npcControl = NPCCommon.NPCControl(npcObj)
- moveDestX, moveDestY = npcControl.GetMoveNearPosEx(posMapX, posMapY, 5)
- npcObj.Move(moveDestX, moveDestY)
- return
+## 针对NPC被推出远距离一直卡墙角问题,法宝挑战副本特殊处理为超过4米 NPC自动回退一些
+#def BeatBackMove(curPlayer, npcObj):
+# if GameWorld.GetMap().GetMapID() != ChConfig.Def_FBMapID_MagicWeapon:
+# return
+# if npcObj.GetCurAction() == IPY_GameWorld.laNPCSkillWarning:
+# return
+#
+# posMap = npcObj.GetRefreshPosAt(npcObj.GetCurRefreshPointIndex())
+# if not posMap:
+# return
+# #范围校验
+# posMapX = posMap.GetPosX()
+# posMapY = posMap.GetPosY()
+# if GameWorld.GetDist(npcObj.GetPosX(), npcObj.GetPosY(), posMapX, posMapY) < 8:
+# # 单次位移不超过5米
+# return
+# npcControl = NPCCommon.NPCControl(npcObj)
+# moveDestX, moveDestY = npcControl.GetMoveNearPosEx(posMapX, posMapY, 5)
+# npcObj.Move(moveDestX, moveDestY)
+# return
#===============================================================================
# //B4 03 吸引NPC仇恨 #tagNPCAttention
--
Gitblit v1.8.0