From ac36bdcfa7db1557790a5b912c3248b22625841f Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 26 十一月 2025 18:49:17 +0800
Subject: [PATCH] Merge branch 'master' of http://mobile.secondworld.net.cn:10010/r/Project_SG_ServerCode
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTask.py | 41
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py | 72
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Travel.py | 56
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 633 ++----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 2177 +++-------------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/FBPass.py | 40
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py | 14
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Arena.py | 19
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Beauty.py | 110 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Task.py | 10
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py | 12
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 322 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldRush.py | 25
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/OpenFunc.py | 6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 64
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py | 2
PySysDB/PySysDBPY.h | 125
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6014.py | 14
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/UpdatePlayerName.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 7
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Arena.py | 7
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerChatBox.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTravel.py | 504 +++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTalk.py | 6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py | 10
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 8
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py | 626 ++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py | 45
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 103
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Tianzi.py | 2
/dev/null | 312 ---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevelBoss.py | 7
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py | 33
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py | 29
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 48
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFace.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5003.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py | 8
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 7
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 72
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHJG.py | 4
47 files changed, 2,645 insertions(+), 2,960 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index a62f192..139a4a8 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -249,6 +249,8 @@
DWORD _Quality; //品质
DWORD _HeroLV; //武将等级
list UPCostItem; // 升级到下级消耗道具
+ list AttrIDList; // 武将属性ID列表
+ list AttrValueList; // 累计总属性值列表
};
//推荐阵容表
@@ -955,6 +957,74 @@
list LVUPNeedItemInfo; //升级所需物品 [[物品ID,个数], ...]
};
+//红颜表
+
+struct Beauty
+{
+ WORD _BeautyID; //红颜ID
+ BYTE BeautyQuality; //品质
+ BYTE UnlockWay; //解锁方式
+ DWORD UnlockValue; //解锁方式值
+ BYTE UnlockNeedCnt; //解锁所需个数
+ list TalentAttrIDList; //天赋属性ID列表
+ list TalentAttrValueList; //天赋属性初始值
+ list TalentPerLVAddList; //天赋属性每级成长
+ BYTE EffType; //天赋效果类型
+ BYTE EffTypeValue; //效果类型值
+ BYTE EffValue; //效果初始值
+ DWORD EffPerLVAdd; //天赋效果每级成长
+};
+
+//红颜品质升级表
+
+struct BeautyQualityLV
+{
+ BYTE _BeautyQuality;
+ WORD _BeautyLV;
+ WORD LVNeedExp; //升到本级所需经验
+ list AttrIDList; //本级属性ID列表
+ list AttrValueList; //本级属性值列表
+ list AwardItemList; //本级奖励
+};
+
+//红颜时装表
+
+struct BeautySkin
+{
+ WORD SkinID; //时装ID
+ WORD _BeautyID;
+ BYTE UnlockWay; //解锁方式
+ DWORD UnlockValue; //解锁方式值
+ BYTE UnlockNeedCnt; //解锁所需个数
+ BYTE UpNeedCnt; //升级所需个数
+ BYTE StarMax; //最高星级
+ list AttrIDList; //属性ID列表
+ list InitAttrValueList; //初始属性值列表
+ list AttrPerStarAddList; //每星加成值列表
+};
+
+//游历事件表
+
+struct TravelEvent
+{
+ WORD _EventID;
+ DWORD EventWeight; //事件权重
+ DWORD AwardItemID; //奖励物品ID
+ DWORD AwardItemCnt; //奖励物品数量
+};
+
+//游历景观奖励表
+
+struct TravelScenery
+{
+ BYTE _SceneryType; //景观类型
+ BYTE AwardQuality; //景观品质
+ DWORD UpRate; //升下个品质概率
+ list AwardItemRandCntList; //奖励物品随机个数列表 [[物品ID, 随机数量A, 到B], ...]
+ list AwardItemExWeightList; //额外奖励物品权重 [[权重,物品ID,个数], ...]
+ BYTE AwardItemExCnt; //额外奖励物品数
+};
+
//玩家等级表
struct PlayerLV
@@ -1460,19 +1530,6 @@
dict Reward; //奖励 {"职业":[[物品ID,个数],...], ...}
BYTE VIPLimit; //需要VIP几
list VIPAward; //vip奖励[[物品ID,个数],...]
-};
-
-//仙宝寻主表
-
-struct tagXBXZ
-{
- DWORD _ID; //ID
- BYTE Type; //类型
- DWORD NeedCnt; //需要数量
- list Condition; //条件
- WORD MWID; //法宝ID
- list AwardItem; //奖励物品列表
- list Money; //金钱
};
//寻宝设定表
@@ -2385,39 +2442,6 @@
char WorldNotifyKey; //全服广播key,参数(玩家名, 物品ID, 物品数据, 个数,)
};
-//节日游历时间表
-
-struct tagActFeastTravel
-{
- DWORD _CfgID; //配置ID
- char StartDate; //开启日期
- char EndDate; //结束日期
- WORD LVLimit; //限制等级
- BYTE ResetType; //重置类型,0-0点重置;1-5点重置
- dict TemplateIDInfo; //模板信息 {(世界等级A,B):模板编号, ...}
-};
-
-//节日游历任务表
-
-struct tagActFeastTravelTask
-{
- BYTE _TraveTasklD; //游历ID
- WORD FinishNeedValue; //完成所需进度值
- WORD FinishTimeMax; //总可完成次数,0不限
- BYTE AddTravelPoint; //完成次数获得游历值
-};
-
-//节日游历奖励表
-
-struct tagActFeastTravelAward
-{
- BYTE _TemplatelD; //奖励模板ID
- BYTE RecordIndex; //奖励记录索引
- WORD NeedTravelPoint; //领奖所需游历值
- BYTE AwardCountMax; //可领取次数,0代表不限
- list TravelAwardInfo; //游历奖励 [[物品ID,个数,是否拍品], ...]
-};
-
//节日巡礼活动时间表
struct tagActFeastWeekParty
@@ -2701,15 +2725,6 @@
DWORD NeedExp; //升级需要经验
dict AttrInfo; //属性
BYTE SkinIndex; //外观
-};
-
-//协助感谢礼盒表
-
-struct tagAssistThanksGift
-{
- DWORD _GiftID; //礼盒物品ID
- list RequestPlayerAward; // 发布奖励物品 物品ID|个数
- list AssistPlayerAward; // 协助奖励物品 物品ID|个数
};
//功能特权奖励表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index a461166..54f27c9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -394,13 +394,13 @@
PacketSubCMD_3=0x11
PacketCallFunc_3=OnQueryBossHurtList
-PacketCMD_4=0xB0
-PacketSubCMD_4=0x24
-PacketCallFunc_4=ReceiveFamilyArrestAward
+PacketCMD_4=
+PacketSubCMD_4=
+PacketCallFunc_4=
-PacketCMD_5=0xB0
-PacketSubCMD_5=0x26
-PacketCallFunc_5=QueryFamilyArrestAwardReceiveState
+PacketCMD_5=
+PacketSubCMD_5=
+PacketCallFunc_5=
PacketCMD_6=0xB4
PacketSubCMD_6=0x0B
@@ -1132,6 +1132,42 @@
PacketSubCMD_3=0x18
PacketCallFunc_3=OnGubaoLVUp
+;红颜
+[PlayerBeauty]
+ScriptName = Player\PlayerBeauty.py
+Writer = hxp
+Releaser = hxp
+RegType = 0
+RegisterPackCount = 3
+
+PacketCMD_1=0xB2
+PacketSubCMD_1=0x19
+PacketCallFunc_1=OnBeautyActivate
+
+PacketCMD_2=0xB2
+PacketSubCMD_2=0x20
+PacketCallFunc_2=OnBeautyLVUP
+
+PacketCMD_3=0xB2
+PacketSubCMD_3=0x21
+PacketCallFunc_3=OnBeautySkinOP
+
+;游历
+[PlayerTravel]
+ScriptName = Player\PlayerTravel.py
+Writer = hxp
+Releaser = hxp
+RegType = 0
+RegisterPackCount = 2
+
+PacketCMD_1=0xB0
+PacketSubCMD_1=0x40
+PacketCallFunc_1=OnTravelClick
+
+PacketCMD_2=0xB0
+PacketSubCMD_2=0x41
+PacketCallFunc_2=OnTravelSceneryUP
+
;主线战斗
[GameLogic_MainLevel]
ScriptName = GameWorldLogic\FBProcess\GameLogic_MainLevel.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 0bf8cb5..368e745 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -219,7 +219,8 @@
Def_CalcAttr_Gubao, # 古宝 4
Def_CalcAttr_HJG, # 幻境阁 5
Def_CalcAttr_Horse, # 坐骑 6
-) = range(7)
+Def_CalcAttr_Beauty, # 红颜 7
+) = range(8)
CalcAttrName = {
Def_CalcAttr_LV:"主公等级",
@@ -229,6 +230,7 @@
Def_CalcAttr_Gubao:"古宝",
Def_CalcAttr_HJG:"幻境阁",
Def_CalcAttr_Horse:"坐骑",
+ Def_CalcAttr_Beauty:"红颜",
}
##-----------------------------------------------------------------------------------------------
@@ -1352,7 +1354,8 @@
SkillTagAffect_AtkHighest, # 攻击力最高 5
SkillTagAffect_Burn, # 灼烧/玄火目标优先 6
SkillTagAffect_PoisonCure, # 仅焚血(毒奶)目标 7
-) = range(8)
+SkillTagAffect_DamShield, # 承伤盾目标优先 8
+) = range(9)
#技能施法目标
Def_UseSkillAim_Type = 3
@@ -3511,6 +3514,20 @@
Def_PDict_EmojiPackState = "EmojiPackState_%s" # 表情包状态,参数(key编号)
Def_PDict_EmojiPackEndTime = "EmojiPackEndTime_%s" # 到期时间戳,0为永久,参数(表情包ID)
+#红颜
+Def_PDict_BeautyLVInfo = "BeautyLVInfo_%s" # 红颜等级信息,参数(红颜ID) 经验*10000+等级*10+是否已激活
+Def_PDict_BeautyAwardLV = "BeautyAwardLV_%s" # 红颜已领取到的奖励等级,参数(红颜ID)
+Def_PDict_BeautySkinInfo = "BeautySkinInfo_%s" # 红颜时装信息,参数(时装ID) 星级*100+是否使用+是否已激活
+
+#游历
+Def_PDict_TravelEnergy = "TravelEnergy" # 剩余体力
+Def_PDict_TravelEnergyTime = "TravelEnergyTime" # 上次恢复体力时间戳
+Def_PDict_TravelCnt = "TravelCnt" # 累计游历次数
+Def_PDict_TravelScenery = "TravelScenery" # 景观信息,景观左上角所在格子索引 * 10 + 景观类型
+Def_PDict_TravelSceneryLVInfo = "TravelSceneryLVInfo" # 景观等级信息,个位数-第1次升级成功与否,1-成功,2-失败;十位-第2次 ...
+Def_PDict_TravelGridInfo = "TravelGridInfo_%s_%s" # 格子信息,参数(行, 列) 事件ID*100+是否双倍*10+开启状态
+Def_PDict_TravelState = "TravelState" # 本盘游历记录,1-已领取景观奖励
+
#周狂欢
Def_PDict_WeekPartyActID = "WeekPartyActID" # 玩家身上的活动ID,唯一标识,取活动开始日期time值
Def_PDict_WeekPartyID = "WeekPartyID" # 玩家身上的活动ID,配置ID,用于补发上次活动用
@@ -3549,13 +3566,6 @@
Def_PDict_FeastWishTemplateID = "FeastWishTemplateID" # 玩家身上的模板ID
Def_PDict_FeastWishBottleValue = "FeastWishBottleValue_%s" # 祝福瓶当前祝福值,参数(瓶子编号)
Def_PDict_FeastWishBottleGetState = "FeastWishBottleGetState_%s" # 祝福瓶已领取记录,参数(瓶子编号),按记录索引二进制位存储是否已领取
-
-#节日游历活动
-Def_PDict_FeastTravelID = "FeastTravelID" # 玩家身上的活动ID,唯一标识,取活动开始日期time值
-Def_PDict_FeastTravelPoint = "FeastTravelPoint" # 当前总游历点数
-Def_PDict_FeastTravelValue = "FeastTravelValue_%s" # 游历任务总进度值,参数(任务ID)
-Def_PDict_FeastTravelCount = "FeastTravelCount_%s" # 游历任务已完成次数,参数(任务ID)
-Def_PDict_FeastTravelAwardCount = "FeastTravelAwardCount_%s" # 游历已领奖次数,参数(奖励索引)
#多日连充活动
Def_PDict_ManyDayRechargeID = "ManyDayRechargeID_%s" # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
@@ -3763,6 +3773,7 @@
#竞技场
Def_PDict_ArenaScore = "ArenaScore" # 当前积分
+Def_PDict_ArenaWinCnt = "ArenaWinCnt" # 累计胜利次数
#功能系统特权
Def_PDict_FuncSysPrivilegeActTime = "FuncSysPrivilegeActTime_%s" # 系统功能特权激活时间戳,参数(系统功能ID)
@@ -3837,6 +3848,7 @@
Def_PDict_UnXiantaoCntBooty = "UnXiantaoCntBooty_%s" # 累计未结算战利品掉落的战锤数,参数(itemID)
Def_PDict_BootyDropToday = "BootyDropToday_%s" # 今日已累计掉落战利品数量,参数(itemID)
Def_PDict_AppointDropEquipCnt = "AppointDropEquipCnt" # 定制掉落装备掉落第x次,只记录到配置的最高次数
+Def_PDict_ChallengeLVID = "ChallengeLVID" # 最后一次挑战的关卡ID,无论胜负
#天子考验
Def_PDict_TianziHisHurt = "TianziHisHurt_%s" # 历史最高伤害,求余亿部分,参数(bossID)
@@ -4035,6 +4047,7 @@
SkillEff_AngerSkillNoXP = 7007 # 无论多少怒气均可释放该怒气技能
SkillEff_UseSkillHarmSelf = 7008 # 释放技能时自残(先扣血)
SkillEff_SkillUseCntLimit = 7009 # 限制技能最多触发次数
+SkillEff_UseSkillStealBuff = 7010 # 释放技能前偷取buff
(
TriggerType_BeSuperHit, # 被暴击触发技能 1
@@ -4767,7 +4780,7 @@
Def_RewardType_FamilyTaofaBox, # 公会讨伐领取宝箱奖励 3
Def_RewardType_LineupRecommend, # 阵容推荐奖励 4
Def_RewardType_LVAward, # 玩家等级奖励5
-Def_RewardType_XBXZ, # 仙宝寻主奖励6
+Def_RewardType_BeautyLVAward, # 红颜等级奖励 6
Def_RewardType_DayRealmPoint, # 每日任务修行点奖励7
Def_RewardType_FirstCharge, # 首充礼包奖励8
Def_RewardType_MWSoulAward, # 法宝之魂奖励9 -废弃
@@ -4799,7 +4812,7 @@
Def_RewardType_GoodGame, #游戏好评奖励35
Def_RewardType_CACTGBillboardDabiao, #跨服充值排行活动达标奖励36
Def_RewardType_FeastLogin, #节日登录奖励37
-Def_RewardType_FeastTravel, #节日游历奖励38
+Def_RewardType_38,
Def_RewardType_DailyRecharge, #永久每日累充奖励39
Def_RewardType_RechargeGold30, #1元送30倍充值券每日奖励40
Def_RewardType_ManyDayRecharge, #多日连充41
@@ -4887,30 +4900,6 @@
Def_PPAct_FairyDomain, #缥缈仙域 16
Def_PPAct_JSTreasure, #绝世寻宝 17
) = range(1, 17+1)
-
-#节日游历活动任务定义
-FeastTravelTaskIDList = (
-Def_FeastTravel_1,
-Def_FeastTravel_Treasure, #极品寻宝 2
-Def_FeastTravel_RuneTreasure, #符印寻宝 3
-Def_FeastTravel_4,
-Def_FeastTravel_XJMJ, #仙界秘境 5
-Def_FeastTravel_6,
-Def_FeastTravel_WorldBoss, #世界BOSS 7
-Def_FeastTravel_FMT, #封魔坛 8
-Def_FeastTravel_FamilyParty, #仙盟宴会 9
-Def_FeastTravel_10,
-Def_FeastTravel_Pray, #祈愿 11
-Def_FeastTravel_BossHome, #boss之家 12
-Def_FeastTravel_VIPBoss, #vipBOSS 13
-Def_FeastTravel_RunFamilyTask, #仙盟任务 14
-Def_FeastTravel_FamilyBoss, #仙盟Boss 15
-Def_FeastTravel_FairyDomain, #缥缈仙域 16
-Def_FeastTravel_UseGold, #累计消费X仙玉 17
-Def_FeastTravel_CTGExp, #累计充值X仙玉,直接使用充值转化的经验 18
-Def_FeastTravel_JSTreasure, #绝世寻宝 19
-Def_FeastTravel_Arena, #竞技场 20
-) = range(1, 1 + 20)
#周狂欢活动定义(七天巡礼)
WeekPartyActIDList = (
@@ -5116,7 +5105,18 @@
TaskType_KillNPC, # 击败X只怪物 7
TaskType_GetMoney, # 累计获得xx货币 8
TaskType_EquipColor, # 穿戴x件x品质及以上装备 9
-) = range(1, 1 + 9)
+TaskType_MainLevelChallenge, # 主线挑战xxx 10
+TaskType_ArenaBattle, # 演武场战斗x次 11
+TaskType_HorseLVUP, # 坐骑升级x次 12
+TaskType_FBZhanchui, # 白骨盈野击败xx 13
+TaskType_HeroLVUP, # 武将升级X次 14
+TaskType_HeroStarUP, # 武将升星x次 15
+TaskType_GoldRush, # 淘金采集x次 16
+TaskType_GoldRushWorkers, # 拥有x名监工 17
+TaskType_ReqOrJoinFamily, # 创建或者申请加入公会 18
+TaskType_FBTianzi, # 挑战天子的考验x次 19
+TaskType_Rename, # 改名 20
+) = range(1, 1 + 20)
# 任务分组
TaskGroupList = (
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index c67123e..470ff06 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -10601,115 +10601,6 @@
#------------------------------------------------------
-# B0 13 取消协助Boss #tagCGCancelAssistBoss
-
-class tagCGCancelAssistBoss(Structure):
- Head = tagHead()
- AssistGUID = "" #(char AssistGUID[40])//协助GUID
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x13
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x13
- self.AssistGUID = ""
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 40
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteString(data, 40, self.AssistGUID)
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- AssistGUID:%s
- '''\
- %(
- self.Head.OutputString(),
- self.AssistGUID
- )
- return DumpString
-
-
-m_NAtagCGCancelAssistBoss=tagCGCancelAssistBoss()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCancelAssistBoss.Head.Cmd,m_NAtagCGCancelAssistBoss.Head.SubCmd))] = m_NAtagCGCancelAssistBoss
-
-
-#------------------------------------------------------
-# B0 15 接收协助感谢礼物 #tagCGGetAssistThanksGift
-
-class tagCGGetAssistThanksGift(Structure):
- _pack_ = 1
- _fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("IsPreview", c_ubyte), #是否预览,非预览即确认领取,无额外奖励确认时也需要回复领取包代表已读
- ]
-
- def __init__(self):
- self.Clear()
- self.Cmd = 0xB0
- self.SubCmd = 0x15
- return
-
- def ReadData(self, stringData, _pos=0, _len=0):
- self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
-
- def Clear(self):
- self.Cmd = 0xB0
- self.SubCmd = 0x15
- self.IsPreview = 0
- return
-
- def GetLength(self):
- return sizeof(tagCGGetAssistThanksGift)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''// B0 15 接收协助感谢礼物 //tagCGGetAssistThanksGift:
- Cmd:%s,
- SubCmd:%s,
- IsPreview:%d
- '''\
- %(
- self.Cmd,
- self.SubCmd,
- self.IsPreview
- )
- return DumpString
-
-
-m_NAtagCGGetAssistThanksGift=tagCGGetAssistThanksGift()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGetAssistThanksGift.Cmd,m_NAtagCGGetAssistThanksGift.SubCmd))] = m_NAtagCGGetAssistThanksGift
-
-
-#------------------------------------------------------
# B0 39 自动淘金免费使用 #tagCSGoldRushAutoFreeUse
class tagCSGoldRushAutoFreeUse(Structure):
@@ -10930,19 +10821,21 @@
#------------------------------------------------------
-#B0 26 请求家族悬赏奖励领取情况 #tagQueryFamilyArrestAwardReceiveState
+# B0 40 游历点击 #tagCSTravelClick
-class tagQueryFamilyArrestAwardReceiveState(Structure):
+class tagCSTravelClick(Structure):
_pack_ = 1
_fields_ = [
("Cmd", c_ubyte),
("SubCmd", c_ubyte),
+ ("Row", c_ubyte), #行,从1开始
+ ("Col", c_ubyte), #列,从1开始
]
def __init__(self):
self.Clear()
self.Cmd = 0xB0
- self.SubCmd = 0x26
+ self.SubCmd = 0x40
return
def ReadData(self, stringData, _pos=0, _len=0):
@@ -10952,17 +10845,71 @@
def Clear(self):
self.Cmd = 0xB0
- self.SubCmd = 0x26
+ self.SubCmd = 0x40
+ self.Row = 0
+ self.Col = 0
return
def GetLength(self):
- return sizeof(tagQueryFamilyArrestAwardReceiveState)
+ return sizeof(tagCSTravelClick)
def GetBuffer(self):
return string_at(addressof(self), self.GetLength())
def OutputString(self):
- DumpString = '''//B0 26 请求家族悬赏奖励领取情况 //tagQueryFamilyArrestAwardReceiveState:
+ DumpString = '''// B0 40 游历点击 //tagCSTravelClick:
+ Cmd:%s,
+ SubCmd:%s,
+ Row:%d,
+ Col:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.Row,
+ self.Col
+ )
+ return DumpString
+
+
+m_NAtagCSTravelClick=tagCSTravelClick()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSTravelClick.Cmd,m_NAtagCSTravelClick.SubCmd))] = m_NAtagCSTravelClick
+
+
+#------------------------------------------------------
+# B0 41 游历景观升级 #tagCSTravelSceneryUP
+
+class tagCSTravelSceneryUP(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB0
+ self.SubCmd = 0x41
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xB0
+ self.SubCmd = 0x41
+ return
+
+ def GetLength(self):
+ return sizeof(tagCSTravelSceneryUP)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B0 41 游历景观升级 //tagCSTravelSceneryUP:
Cmd:%s,
SubCmd:%s
'''\
@@ -10973,221 +10920,8 @@
return DumpString
-m_NAtagQueryFamilyArrestAwardReceiveState=tagQueryFamilyArrestAwardReceiveState()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagQueryFamilyArrestAwardReceiveState.Cmd,m_NAtagQueryFamilyArrestAwardReceiveState.SubCmd))] = m_NAtagQueryFamilyArrestAwardReceiveState
-
-
-#------------------------------------------------------
-#B0 25 请求家族悬赏任务完成情况 #tagQueryFamilyArrestOverState
-
-class tagQueryFamilyArrestOverState(Structure):
- _pack_ = 1
- _fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ]
-
- def __init__(self):
- self.Clear()
- self.Cmd = 0xB0
- self.SubCmd = 0x25
- return
-
- def ReadData(self, stringData, _pos=0, _len=0):
- self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
-
- def Clear(self):
- self.Cmd = 0xB0
- self.SubCmd = 0x25
- return
-
- def GetLength(self):
- return sizeof(tagQueryFamilyArrestOverState)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''//B0 25 请求家族悬赏任务完成情况 //tagQueryFamilyArrestOverState:
- Cmd:%s,
- SubCmd:%s
- '''\
- %(
- self.Cmd,
- self.SubCmd
- )
- return DumpString
-
-
-m_NAtagQueryFamilyArrestOverState=tagQueryFamilyArrestOverState()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagQueryFamilyArrestOverState.Cmd,m_NAtagQueryFamilyArrestOverState.SubCmd))] = m_NAtagQueryFamilyArrestOverState
-
-
-#------------------------------------------------------
-#B0 24 领取家族悬赏奖励 #tagReceiveFamilyArrestAward
-
-class tagReceiveFamilyArrestAward(Structure):
- _pack_ = 1
- _fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("ArrestID", c_int), #悬赏任务ID
- ]
-
- def __init__(self):
- self.Clear()
- self.Cmd = 0xB0
- self.SubCmd = 0x24
- return
-
- def ReadData(self, stringData, _pos=0, _len=0):
- self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
-
- def Clear(self):
- self.Cmd = 0xB0
- self.SubCmd = 0x24
- self.ArrestID = 0
- return
-
- def GetLength(self):
- return sizeof(tagReceiveFamilyArrestAward)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''//B0 24 领取家族悬赏奖励 //tagReceiveFamilyArrestAward:
- Cmd:%s,
- SubCmd:%s,
- ArrestID:%d
- '''\
- %(
- self.Cmd,
- self.SubCmd,
- self.ArrestID
- )
- return DumpString
-
-
-m_NAtagReceiveFamilyArrestAward=tagReceiveFamilyArrestAward()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagReceiveFamilyArrestAward.Cmd,m_NAtagReceiveFamilyArrestAward.SubCmd))] = m_NAtagReceiveFamilyArrestAward
-
-
-#------------------------------------------------------
-# B0 12 开始协助Boss #tagCGStartAssistBoss
-
-class tagCGStartAssistBoss(Structure):
- Head = tagHead()
- AssistGUID = "" #(char AssistGUID[40])//协助GUID
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x12
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x12
- self.AssistGUID = ""
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 40
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteString(data, 40, self.AssistGUID)
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- AssistGUID:%s
- '''\
- %(
- self.Head.OutputString(),
- self.AssistGUID
- )
- return DumpString
-
-
-m_NAtagCGStartAssistBoss=tagCGStartAssistBoss()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGStartAssistBoss.Head.Cmd,m_NAtagCGStartAssistBoss.Head.SubCmd))] = m_NAtagCGStartAssistBoss
-
-
-#------------------------------------------------------
-# B0 14 使用协助感谢礼盒 #tagCGUseAssistThanksGift
-
-class tagCGUseAssistThanksGift(Structure):
- _pack_ = 1
- _fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("ItemID", c_int),
- ("IsPreview", c_ubyte), #是否预览,非预览即确认使用
- ]
-
- def __init__(self):
- self.Clear()
- self.Cmd = 0xB0
- self.SubCmd = 0x14
- return
-
- def ReadData(self, stringData, _pos=0, _len=0):
- self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
-
- def Clear(self):
- self.Cmd = 0xB0
- self.SubCmd = 0x14
- self.ItemID = 0
- self.IsPreview = 0
- return
-
- def GetLength(self):
- return sizeof(tagCGUseAssistThanksGift)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''// B0 14 使用协助感谢礼盒 //tagCGUseAssistThanksGift:
- Cmd:%s,
- SubCmd:%s,
- ItemID:%d,
- IsPreview:%d
- '''\
- %(
- self.Cmd,
- self.SubCmd,
- self.ItemID,
- self.IsPreview
- )
- return DumpString
-
-
-m_NAtagCGUseAssistThanksGift=tagCGUseAssistThanksGift()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGUseAssistThanksGift.Cmd,m_NAtagCGUseAssistThanksGift.SubCmd))] = m_NAtagCGUseAssistThanksGift
+m_NAtagCSTravelSceneryUP=tagCSTravelSceneryUP()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSTravelSceneryUP.Cmd,m_NAtagCSTravelSceneryUP.SubCmd))] = m_NAtagCSTravelSceneryUP
#------------------------------------------------------
@@ -11260,66 +10994,6 @@
m_NAtagCMWorldTransfer=tagCMWorldTransfer()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMWorldTransfer.Cmd,m_NAtagCMWorldTransfer.SubCmd))] = m_NAtagCMWorldTransfer
-
-
-#------------------------------------------------------
-# B0 20 请求膜拜玩家 #tagCGWorship
-
-class tagCGWorship(Structure):
- _pack_ = 1
- _fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("PlayerID", c_int), # 目标玩家ID
- ("WorshipType", c_ubyte), # 膜拜类型
- ("WorshipValue", c_int), # 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义
- ]
-
- def __init__(self):
- self.Clear()
- self.Cmd = 0xB0
- self.SubCmd = 0x20
- return
-
- def ReadData(self, stringData, _pos=0, _len=0):
- self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
-
- def Clear(self):
- self.Cmd = 0xB0
- self.SubCmd = 0x20
- self.PlayerID = 0
- self.WorshipType = 0
- self.WorshipValue = 0
- return
-
- def GetLength(self):
- return sizeof(tagCGWorship)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''// B0 20 请求膜拜玩家 //tagCGWorship:
- Cmd:%s,
- SubCmd:%s,
- PlayerID:%d,
- WorshipType:%d,
- WorshipValue:%d
- '''\
- %(
- self.Cmd,
- self.SubCmd,
- self.PlayerID,
- self.WorshipType,
- self.WorshipValue
- )
- return DumpString
-
-
-m_NAtagCGWorship=tagCGWorship()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGWorship.Cmd,m_NAtagCGWorship.SubCmd))] = m_NAtagCGWorship
#------------------------------------------------------
@@ -11572,6 +11246,178 @@
m_NAtagCSArenaMatch=tagCSArenaMatch()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSArenaMatch.Cmd,m_NAtagCSArenaMatch.SubCmd))] = m_NAtagCSArenaMatch
+
+
+#------------------------------------------------------
+# B2 19 红颜激活 #tagCSBeautyActivate
+
+class tagCSBeautyActivate(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("BeautyID", c_ushort), #红颜ID
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB2
+ self.SubCmd = 0x19
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xB2
+ self.SubCmd = 0x19
+ self.BeautyID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCSBeautyActivate)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B2 19 红颜激活 //tagCSBeautyActivate:
+ Cmd:%s,
+ SubCmd:%s,
+ BeautyID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.BeautyID
+ )
+ return DumpString
+
+
+m_NAtagCSBeautyActivate=tagCSBeautyActivate()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSBeautyActivate.Cmd,m_NAtagCSBeautyActivate.SubCmd))] = m_NAtagCSBeautyActivate
+
+
+#------------------------------------------------------
+# B2 20 红颜好感度升级 #tagCSBeautyLVUP
+
+class tagCSBeautyLVUP(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("BeautyID", c_ushort), #红颜ID
+ ("ItemID", c_int), #使用物品ID
+ ("IsQuick", c_ubyte), # 是否快速升级,0-只消耗1个道具;1-消耗升1级的道具
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB2
+ self.SubCmd = 0x20
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xB2
+ self.SubCmd = 0x20
+ self.BeautyID = 0
+ self.ItemID = 0
+ self.IsQuick = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCSBeautyLVUP)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B2 20 红颜好感度升级 //tagCSBeautyLVUP:
+ Cmd:%s,
+ SubCmd:%s,
+ BeautyID:%d,
+ ItemID:%d,
+ IsQuick:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.BeautyID,
+ self.ItemID,
+ self.IsQuick
+ )
+ return DumpString
+
+
+m_NAtagCSBeautyLVUP=tagCSBeautyLVUP()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSBeautyLVUP.Cmd,m_NAtagCSBeautyLVUP.SubCmd))] = m_NAtagCSBeautyLVUP
+
+
+#------------------------------------------------------
+# B2 21 红颜时装操作 #tagCSBeautySkinOP
+
+class tagCSBeautySkinOP(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("BeautyID", c_ushort), #红颜ID
+ ("SkinID", c_ushort), #时装ID
+ ("OPType", c_ubyte), #操作 1-激活;2-佩戴;3-升星
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB2
+ self.SubCmd = 0x21
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xB2
+ self.SubCmd = 0x21
+ self.BeautyID = 0
+ self.SkinID = 0
+ self.OPType = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCSBeautySkinOP)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B2 21 红颜时装操作 //tagCSBeautySkinOP:
+ Cmd:%s,
+ SubCmd:%s,
+ BeautyID:%d,
+ SkinID:%d,
+ OPType:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.BeautyID,
+ self.SkinID,
+ self.OPType
+ )
+ return DumpString
+
+
+m_NAtagCSBeautySkinOP=tagCSBeautySkinOP()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSBeautySkinOP.Cmd,m_NAtagCSBeautySkinOP.SubCmd))] = m_NAtagCSBeautySkinOP
#------------------------------------------------------
@@ -13723,9 +13569,9 @@
#------------------------------------------------------
-# B3 20 聊天 #tagCMTalk
+# B3 20 聊天 #tagCSTalk
-class tagCMPyTalk(Structure):
+class tagCSTalk(Structure):
Head = tagHead()
ChannelType = 0 #(BYTE ChannelType)// 频道
Len = 0 #(WORD Len)
@@ -13789,6 +13635,9 @@
return DumpString
+m_NAtagCSTalk=tagCSTalk()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSTalk.Head.Cmd,m_NAtagCSTalk.Head.SubCmd))] = m_NAtagCSTalk
+
#------------------------------------------------------
# B4 12 战斗阵容保存 #tagCSHeroLineupSave
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 8adb7ac..6986c21 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -8964,114 +8964,6 @@
#------------------------------------------------------
-# A3 48 仙宝寻主领奖记录 #tagMCXBXZAwardRecordList
-
-class tagMCXBXZAwardRecord(Structure):
- _pack_ = 1
- _fields_ = [
- ("RecordIndex", c_ushort), #第几个记录值 每个key存31个id 0-30为0, 31-61为1..
- ("Record", c_int), #对应是否领取值
- ]
-
- 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.RecordIndex = 0
- self.Record = 0
- return
-
- def GetLength(self):
- return sizeof(tagMCXBXZAwardRecord)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''// A3 48 仙宝寻主领奖记录 //tagMCXBXZAwardRecordList:
- RecordIndex:%d,
- Record:%d
- '''\
- %(
- self.RecordIndex,
- self.Record
- )
- return DumpString
-
-
-class tagMCXBXZAwardRecordList(Structure):
- Head = tagHead()
- RecordCnt = 0 #(WORD RecordCnt)//记录个数
- RecordList = list() #(vector<tagMCXBXZAwardRecord> RecordList)//记录列表
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xA3
- self.Head.SubCmd = 0x48
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.RecordCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
- for i in range(self.RecordCnt):
- temRecordList = tagMCXBXZAwardRecord()
- _pos = temRecordList.ReadData(_lpData, _pos)
- self.RecordList.append(temRecordList)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xA3
- self.Head.SubCmd = 0x48
- self.RecordCnt = 0
- self.RecordList = list()
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 2
- for i in range(self.RecordCnt):
- length += self.RecordList[i].GetLength()
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteWORD(data, self.RecordCnt)
- for i in range(self.RecordCnt):
- data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer())
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- RecordCnt:%d,
- RecordList:%s
- '''\
- %(
- self.Head.OutputString(),
- self.RecordCnt,
- "..."
- )
- return DumpString
-
-
-m_NAtagMCXBXZAwardRecordList=tagMCXBXZAwardRecordList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCXBXZAwardRecordList.Head.Cmd,m_NAtagMCXBXZAwardRecordList.Head.SubCmd))] = m_NAtagMCXBXZAwardRecordList
-
-
-#------------------------------------------------------
# A4 11 传功邀请信息 #tagGCChuangongInviteInfo
class tagGCChuangongInviteInfo(Structure):
@@ -15003,6 +14895,7 @@
("Cmd", c_ubyte),
("SubCmd", c_ubyte),
("Score", c_int), #当前积分
+ ("WinCnt", c_int), #累计胜利次数
]
def __init__(self):
@@ -15020,6 +14913,7 @@
self.Cmd = 0xA9
self.SubCmd = 0x23
self.Score = 0
+ self.WinCnt = 0
return
def GetLength(self):
@@ -15032,12 +14926,14 @@
DumpString = '''// A9 23 演武场玩家信息 //tagSCArenaPlayerInfo:
Cmd:%s,
SubCmd:%s,
- Score:%d
+ Score:%d,
+ WinCnt:%d
'''\
%(
self.Cmd,
self.SubCmd,
- self.Score
+ self.Score,
+ self.WinCnt
)
return DumpString
@@ -25469,460 +25365,6 @@
#------------------------------------------------------
-# AA 46 节日游历活动信息 #tagMCFeastTravelInfo
-
-class tagMCFeastTravelAwardItem(Structure):
- _pack_ = 1
- _fields_ = [
- ("ItemID", c_int),
- ("ItemCount", c_ushort),
- ("IsBind", 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.ItemID = 0
- self.ItemCount = 0
- self.IsBind = 0
- return
-
- def GetLength(self):
- return sizeof(tagMCFeastTravelAwardItem)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''// AA 46 节日游历活动信息 //tagMCFeastTravelInfo:
- ItemID:%d,
- ItemCount:%d,
- IsBind:%d
- '''\
- %(
- self.ItemID,
- self.ItemCount,
- self.IsBind
- )
- return DumpString
-
-
-class tagMCFeastTravelAward(Structure):
- AwardIndex = 0 #(BYTE AwardIndex)//游历奖励索引
- NeedTravelPoint = 0 #(WORD NeedTravelPoint)//单次领奖所需游历值
- AwardCountMax = 0 #(WORD AwardCountMax)//最大可领取次数,0代表不限
- AwardItemCount = 0 #(BYTE AwardItemCount)//奖励物品数
- AwardItemList = list() #(vector<tagMCFeastTravelAwardItem> AwardItemList)//奖励物品列表
- data = None
-
- def __init__(self):
- self.Clear()
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.NeedTravelPoint,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.AwardCountMax,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- for i in range(self.AwardItemCount):
- temAwardItemList = tagMCFeastTravelAwardItem()
- _pos = temAwardItemList.ReadData(_lpData, _pos)
- self.AwardItemList.append(temAwardItemList)
- return _pos
-
- def Clear(self):
- self.AwardIndex = 0
- self.NeedTravelPoint = 0
- self.AwardCountMax = 0
- self.AwardItemCount = 0
- self.AwardItemList = list()
- return
-
- def GetLength(self):
- length = 0
- length += 1
- length += 2
- length += 2
- length += 1
- for i in range(self.AwardItemCount):
- length += self.AwardItemList[i].GetLength()
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteBYTE(data, self.AwardIndex)
- data = CommFunc.WriteWORD(data, self.NeedTravelPoint)
- data = CommFunc.WriteWORD(data, self.AwardCountMax)
- data = CommFunc.WriteBYTE(data, self.AwardItemCount)
- for i in range(self.AwardItemCount):
- data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
- return data
-
- def OutputString(self):
- DumpString = '''
- AwardIndex:%d,
- NeedTravelPoint:%d,
- AwardCountMax:%d,
- AwardItemCount:%d,
- AwardItemList:%s
- '''\
- %(
- self.AwardIndex,
- self.NeedTravelPoint,
- self.AwardCountMax,
- self.AwardItemCount,
- "..."
- )
- return DumpString
-
-
-class tagMCFeastTravelTask(Structure):
- _pack_ = 1
- _fields_ = [
- ("TravelTaskID", c_ubyte), #游历任务ID
- ("FinishNeedValue", c_ushort), #单次完成所需进度
- ("FinishTimeMax", c_ushort), #最大可完成次数,0代表不限
- ("AddTravelPoint", c_ushort), #单次完成获得游历值
- ]
-
- 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.TravelTaskID = 0
- self.FinishNeedValue = 0
- self.FinishTimeMax = 0
- self.AddTravelPoint = 0
- return
-
- def GetLength(self):
- return sizeof(tagMCFeastTravelTask)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''// AA 46 节日游历活动信息 //tagMCFeastTravelInfo:
- TravelTaskID:%d,
- FinishNeedValue:%d,
- FinishTimeMax:%d,
- AddTravelPoint:%d
- '''\
- %(
- self.TravelTaskID,
- self.FinishNeedValue,
- self.FinishTimeMax,
- self.AddTravelPoint
- )
- return DumpString
-
-
-class tagMCFeastTravelInfo(Structure):
- Head = tagHead()
- StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
- EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
- LimitLV = 0 #(WORD LimitLV)// 限制等级
- ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置
- TravelTaskCount = 0 #(BYTE TravelTaskCount)// 游历任务数
- TravelTaskList = list() #(vector<tagMCFeastTravelTask> TravelTaskList)//游历任务信息列表
- TravelAwardCount = 0 #(BYTE TravelAwardCount)// 游历奖励数
- TravelAwardList = list() #(vector<tagMCFeastTravelAward> TravelAwardList)//游历奖励信息列表
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xAA
- self.Head.SubCmd = 0x46
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
- self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
- self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.TravelTaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- for i in range(self.TravelTaskCount):
- temTravelTaskList = tagMCFeastTravelTask()
- _pos = temTravelTaskList.ReadData(_lpData, _pos)
- self.TravelTaskList.append(temTravelTaskList)
- self.TravelAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- for i in range(self.TravelAwardCount):
- temTravelAwardList = tagMCFeastTravelAward()
- _pos = temTravelAwardList.ReadData(_lpData, _pos)
- self.TravelAwardList.append(temTravelAwardList)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xAA
- self.Head.SubCmd = 0x46
- self.StartDate = ""
- self.EndtDate = ""
- self.LimitLV = 0
- self.ResetType = 0
- self.TravelTaskCount = 0
- self.TravelTaskList = list()
- self.TravelAwardCount = 0
- self.TravelAwardList = list()
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 10
- length += 10
- length += 2
- length += 1
- length += 1
- for i in range(self.TravelTaskCount):
- length += self.TravelTaskList[i].GetLength()
- length += 1
- for i in range(self.TravelAwardCount):
- length += self.TravelAwardList[i].GetLength()
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteString(data, 10, self.StartDate)
- data = CommFunc.WriteString(data, 10, self.EndtDate)
- data = CommFunc.WriteWORD(data, self.LimitLV)
- data = CommFunc.WriteBYTE(data, self.ResetType)
- data = CommFunc.WriteBYTE(data, self.TravelTaskCount)
- for i in range(self.TravelTaskCount):
- data = CommFunc.WriteString(data, self.TravelTaskList[i].GetLength(), self.TravelTaskList[i].GetBuffer())
- data = CommFunc.WriteBYTE(data, self.TravelAwardCount)
- for i in range(self.TravelAwardCount):
- data = CommFunc.WriteString(data, self.TravelAwardList[i].GetLength(), self.TravelAwardList[i].GetBuffer())
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- StartDate:%s,
- EndtDate:%s,
- LimitLV:%d,
- ResetType:%d,
- TravelTaskCount:%d,
- TravelTaskList:%s,
- TravelAwardCount:%d,
- TravelAwardList:%s
- '''\
- %(
- self.Head.OutputString(),
- self.StartDate,
- self.EndtDate,
- self.LimitLV,
- self.ResetType,
- self.TravelTaskCount,
- "...",
- self.TravelAwardCount,
- "..."
- )
- return DumpString
-
-
-m_NAtagMCFeastTravelInfo=tagMCFeastTravelInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastTravelInfo.Head.Cmd,m_NAtagMCFeastTravelInfo.Head.SubCmd))] = m_NAtagMCFeastTravelInfo
-
-
-#------------------------------------------------------
-# AA 47 节日游历活动玩家信息 #tagMCFeastTravelPlayerInfo
-
-class tagMCFeastTravelPlayerAward(Structure):
- _pack_ = 1
- _fields_ = [
- ("AwardIndex", c_ubyte), #游历奖励索引
- ("GetAwardCount", c_int), #已领取次数;前端判断是否可领取: 总游历值 >= (已领取次数 + 1) * 单次所需游历值
- ]
-
- 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.AwardIndex = 0
- self.GetAwardCount = 0
- return
-
- def GetLength(self):
- return sizeof(tagMCFeastTravelPlayerAward)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''// AA 47 节日游历活动玩家信息 //tagMCFeastTravelPlayerInfo:
- AwardIndex:%d,
- GetAwardCount:%d
- '''\
- %(
- self.AwardIndex,
- self.GetAwardCount
- )
- return DumpString
-
-
-class tagMCFeastTravelPlayerTask(Structure):
- _pack_ = 1
- _fields_ = [
- ("TravelTaskID", c_ubyte), #游历任务ID
- ("TravelValue", c_int), #当前进度值,一直累加
- ("FinishCount", c_ubyte), #当前已完成次数; 前端计算未完成次数的进度值=max(0, 当前进度值 - (完成次数 * 单次所需进度))
- ]
-
- 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.TravelTaskID = 0
- self.TravelValue = 0
- self.FinishCount = 0
- return
-
- def GetLength(self):
- return sizeof(tagMCFeastTravelPlayerTask)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''// AA 47 节日游历活动玩家信息 //tagMCFeastTravelPlayerInfo:
- TravelTaskID:%d,
- TravelValue:%d,
- FinishCount:%d
- '''\
- %(
- self.TravelTaskID,
- self.TravelValue,
- self.FinishCount
- )
- return DumpString
-
-
-class tagMCFeastTravelPlayerInfo(Structure):
- Head = tagHead()
- TravelPoint = 0 #(DWORD TravelPoint)//当前总游历值,一直累加,不会扣的
- TravelPlayerTaskCount = 0 #(BYTE TravelPlayerTaskCount)// 游历任务数,不一定有同步,有同步数据则替换即可
- TravelPlayerTaskList = list() #(vector<tagMCFeastTravelPlayerTask> TravelPlayerTaskList)//游历任务信息列表
- TravelPlayerAwardCount = 0 #(BYTE TravelPlayerAwardCount)// 游历奖励数,不一定有同步,有同步数据则替换即可
- TravelPlayerAwardList = list() #(vector<tagMCFeastTravelPlayerAward> TravelPlayerAwardList)//游历奖励信息列表
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xAA
- self.Head.SubCmd = 0x47
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.TravelPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.TravelPlayerTaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- for i in range(self.TravelPlayerTaskCount):
- temTravelPlayerTaskList = tagMCFeastTravelPlayerTask()
- _pos = temTravelPlayerTaskList.ReadData(_lpData, _pos)
- self.TravelPlayerTaskList.append(temTravelPlayerTaskList)
- self.TravelPlayerAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- for i in range(self.TravelPlayerAwardCount):
- temTravelPlayerAwardList = tagMCFeastTravelPlayerAward()
- _pos = temTravelPlayerAwardList.ReadData(_lpData, _pos)
- self.TravelPlayerAwardList.append(temTravelPlayerAwardList)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xAA
- self.Head.SubCmd = 0x47
- self.TravelPoint = 0
- self.TravelPlayerTaskCount = 0
- self.TravelPlayerTaskList = list()
- self.TravelPlayerAwardCount = 0
- self.TravelPlayerAwardList = list()
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 4
- length += 1
- for i in range(self.TravelPlayerTaskCount):
- length += self.TravelPlayerTaskList[i].GetLength()
- length += 1
- for i in range(self.TravelPlayerAwardCount):
- length += self.TravelPlayerAwardList[i].GetLength()
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteDWORD(data, self.TravelPoint)
- data = CommFunc.WriteBYTE(data, self.TravelPlayerTaskCount)
- for i in range(self.TravelPlayerTaskCount):
- data = CommFunc.WriteString(data, self.TravelPlayerTaskList[i].GetLength(), self.TravelPlayerTaskList[i].GetBuffer())
- data = CommFunc.WriteBYTE(data, self.TravelPlayerAwardCount)
- for i in range(self.TravelPlayerAwardCount):
- data = CommFunc.WriteString(data, self.TravelPlayerAwardList[i].GetLength(), self.TravelPlayerAwardList[i].GetBuffer())
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- TravelPoint:%d,
- TravelPlayerTaskCount:%d,
- TravelPlayerTaskList:%s,
- TravelPlayerAwardCount:%d,
- TravelPlayerAwardList:%s
- '''\
- %(
- self.Head.OutputString(),
- self.TravelPoint,
- self.TravelPlayerTaskCount,
- "...",
- self.TravelPlayerAwardCount,
- "..."
- )
- return DumpString
-
-
-m_NAtagMCFeastTravelPlayerInfo=tagMCFeastTravelPlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastTravelPlayerInfo.Head.Cmd,m_NAtagMCFeastTravelPlayerInfo.Head.SubCmd))] = m_NAtagMCFeastTravelPlayerInfo
-
-
-#------------------------------------------------------
# AA 20 节日巡礼活动信息 #tagMCFeastWeekPartyInfo
class tagMCFeastWeekPartyItem(Structure):
@@ -30751,896 +30193,6 @@
#------------------------------------------------------
-# B0 27 活跃放置信息 #tagMCActivityPlaceInfo
-
-class tagMCActivityPlaceInfo(Structure):
- Head = tagHead()
- StartTime = 0 #(DWORD StartTime)// 开始探索time时间戳,完成一次探索会自动下一次探索并更新该时间
- PlaceCount = 0 #(BYTE PlaceCount)// 剩余未完成探索次数
- RewardCount = 0 #(BYTE RewardCount)// 累计未领取探索奖励次数
- RewardLen = 0 #(BYTE RewardLen)
- RewardInfo = "" #(String RewardInfo)//累计未领取探索奖励 [[itemID, count], ...]
- TodayExp = 0 #(DWORD TodayExp)
- TodayExpPoint = 0 #(DWORD TodayExpPoint)
- YestordayExp = 0 #(DWORD YestordayExp)
- YestordayExpPoint = 0 #(DWORD YestordayExpPoint)
- TotalCount = 0 #(DWORD TotalCount)// 累计活跃放置次数
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x27
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.StartTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.PlaceCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.RewardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.RewardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.RewardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.RewardLen)
- self.TodayExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.TodayExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.YestordayExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.YestordayExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.TotalCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x27
- self.StartTime = 0
- self.PlaceCount = 0
- self.RewardCount = 0
- self.RewardLen = 0
- self.RewardInfo = ""
- self.TodayExp = 0
- self.TodayExpPoint = 0
- self.YestordayExp = 0
- self.YestordayExpPoint = 0
- self.TotalCount = 0
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 4
- length += 1
- length += 1
- length += 1
- length += len(self.RewardInfo)
- length += 4
- length += 4
- length += 4
- length += 4
- length += 4
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteDWORD(data, self.StartTime)
- data = CommFunc.WriteBYTE(data, self.PlaceCount)
- data = CommFunc.WriteBYTE(data, self.RewardCount)
- data = CommFunc.WriteBYTE(data, self.RewardLen)
- data = CommFunc.WriteString(data, self.RewardLen, self.RewardInfo)
- data = CommFunc.WriteDWORD(data, self.TodayExp)
- data = CommFunc.WriteDWORD(data, self.TodayExpPoint)
- data = CommFunc.WriteDWORD(data, self.YestordayExp)
- data = CommFunc.WriteDWORD(data, self.YestordayExpPoint)
- data = CommFunc.WriteDWORD(data, self.TotalCount)
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- StartTime:%d,
- PlaceCount:%d,
- RewardCount:%d,
- RewardLen:%d,
- RewardInfo:%s,
- TodayExp:%d,
- TodayExpPoint:%d,
- YestordayExp:%d,
- YestordayExpPoint:%d,
- TotalCount:%d
- '''\
- %(
- self.Head.OutputString(),
- self.StartTime,
- self.PlaceCount,
- self.RewardCount,
- self.RewardLen,
- self.RewardInfo,
- self.TodayExp,
- self.TodayExpPoint,
- self.YestordayExp,
- self.YestordayExpPoint,
- self.TotalCount
- )
- return DumpString
-
-
-m_NAtagMCActivityPlaceInfo=tagMCActivityPlaceInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActivityPlaceInfo.Head.Cmd,m_NAtagMCActivityPlaceInfo.Head.SubCmd))] = m_NAtagMCActivityPlaceInfo
-
-
-#------------------------------------------------------
-# B0 01 新增协助 #tagGCAssistInfoList
-
-class tagGCAssistInfo(Structure):
- AssistGUID = "" #(char AssistGUID[40])//协助GUID
- PlayerID = 0 #(DWORD PlayerID)
- PlayerName = "" #(char PlayerName[33])
- Job = 0 #(BYTE Job)
- LV = 0 #(WORD LV)//等级
- RealmLV = 0 #(BYTE RealmLV)//境界
- Face = 0 #(DWORD Face)//基本脸型
- FacePic = 0 #(DWORD FacePic)//头像框
- MapID = 0 #(DWORD MapID)
- LineID = 0 #(DWORD LineID)
- NPCID = 0 #(DWORD NPCID)
- ExDataLen = 0 #(WORD ExDataLen)
- ExData = "" #(String ExData)//其他自定义数据
- data = None
-
- def __init__(self):
- self.Clear()
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
- self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
- self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
- return _pos
-
- def Clear(self):
- self.AssistGUID = ""
- self.PlayerID = 0
- self.PlayerName = ""
- self.Job = 0
- self.LV = 0
- self.RealmLV = 0
- self.Face = 0
- self.FacePic = 0
- self.MapID = 0
- self.LineID = 0
- self.NPCID = 0
- self.ExDataLen = 0
- self.ExData = ""
- return
-
- def GetLength(self):
- length = 0
- length += 40
- length += 4
- length += 33
- length += 1
- length += 2
- length += 1
- length += 4
- length += 4
- length += 4
- length += 4
- length += 4
- length += 2
- length += len(self.ExData)
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, 40, self.AssistGUID)
- data = CommFunc.WriteDWORD(data, self.PlayerID)
- data = CommFunc.WriteString(data, 33, self.PlayerName)
- data = CommFunc.WriteBYTE(data, self.Job)
- data = CommFunc.WriteWORD(data, self.LV)
- data = CommFunc.WriteBYTE(data, self.RealmLV)
- data = CommFunc.WriteDWORD(data, self.Face)
- data = CommFunc.WriteDWORD(data, self.FacePic)
- data = CommFunc.WriteDWORD(data, self.MapID)
- data = CommFunc.WriteDWORD(data, self.LineID)
- data = CommFunc.WriteDWORD(data, self.NPCID)
- data = CommFunc.WriteWORD(data, self.ExDataLen)
- data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
- return data
-
- def OutputString(self):
- DumpString = '''
- AssistGUID:%s,
- PlayerID:%d,
- PlayerName:%s,
- Job:%d,
- LV:%d,
- RealmLV:%d,
- Face:%d,
- FacePic:%d,
- MapID:%d,
- LineID:%d,
- NPCID:%d,
- ExDataLen:%d,
- ExData:%s
- '''\
- %(
- self.AssistGUID,
- self.PlayerID,
- self.PlayerName,
- self.Job,
- self.LV,
- self.RealmLV,
- self.Face,
- self.FacePic,
- self.MapID,
- self.LineID,
- self.NPCID,
- self.ExDataLen,
- self.ExData
- )
- return DumpString
-
-
-class tagGCAssistInfoList(Structure):
- Head = tagHead()
- Count = 0 #(BYTE Count)
- AssistInfoList = list() #(vector<tagGCAssistInfo> AssistInfoList)
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x01
- 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):
- temAssistInfoList = tagGCAssistInfo()
- _pos = temAssistInfoList.ReadData(_lpData, _pos)
- self.AssistInfoList.append(temAssistInfoList)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x01
- self.Count = 0
- self.AssistInfoList = list()
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 1
- for i in range(self.Count):
- length += self.AssistInfoList[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.AssistInfoList[i].GetLength(), self.AssistInfoList[i].GetBuffer())
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- Count:%d,
- AssistInfoList:%s
- '''\
- %(
- self.Head.OutputString(),
- self.Count,
- "..."
- )
- return DumpString
-
-
-m_NAtagGCAssistInfoList=tagGCAssistInfoList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistInfoList.Head.Cmd,m_NAtagGCAssistInfoList.Head.SubCmd))] = m_NAtagGCAssistInfoList
-
-
-#------------------------------------------------------
-# B0 03 正在进行中的协助 #tagGCAssistingInfo
-
-class tagGCAssistingInfo(Structure):
- Head = tagHead()
- AssistGUID = "" #(char AssistGUID[40])//协助GUID
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x03
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x03
- self.AssistGUID = ""
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 40
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteString(data, 40, self.AssistGUID)
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- AssistGUID:%s
- '''\
- %(
- self.Head.OutputString(),
- self.AssistGUID
- )
- return DumpString
-
-
-m_NAtagGCAssistingInfo=tagGCAssistingInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistingInfo.Head.Cmd,m_NAtagGCAssistingInfo.Head.SubCmd))] = m_NAtagGCAssistingInfo
-
-
-#------------------------------------------------------
-# B0 08 协助结束 #tagGCAssistOver
-
-class tagGCAssistOver(Structure):
- Head = tagHead()
- IsTagPlayerReason = 0 #(BYTE IsTagPlayerReason)//是否发布方原因
- ReasonLen = 0 #(BYTE ReasonLen)
- Reason = "" #(String Reason)//原因
- AssistGUID = "" #(char AssistGUID[40])//协助GUID
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x08
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.IsTagPlayerReason,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.ReasonLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.Reason,_pos = CommFunc.ReadString(_lpData, _pos,self.ReasonLen)
- self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x08
- self.IsTagPlayerReason = 0
- self.ReasonLen = 0
- self.Reason = ""
- self.AssistGUID = ""
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 1
- length += 1
- length += len(self.Reason)
- length += 40
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteBYTE(data, self.IsTagPlayerReason)
- data = CommFunc.WriteBYTE(data, self.ReasonLen)
- data = CommFunc.WriteString(data, self.ReasonLen, self.Reason)
- data = CommFunc.WriteString(data, 40, self.AssistGUID)
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- IsTagPlayerReason:%d,
- ReasonLen:%d,
- Reason:%s,
- AssistGUID:%s
- '''\
- %(
- self.Head.OutputString(),
- self.IsTagPlayerReason,
- self.ReasonLen,
- self.Reason,
- self.AssistGUID
- )
- return DumpString
-
-
-m_NAtagGCAssistOver=tagGCAssistOver()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistOver.Head.Cmd,m_NAtagGCAssistOver.Head.SubCmd))] = m_NAtagGCAssistOver
-
-
-#------------------------------------------------------
-# B0 06 可接收协助感谢礼物个数 #tagGCCanGetAssistThanksGiftCount
-
-class tagGCCanGetAssistThanksGiftCount(Structure):
- _pack_ = 1
- _fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("CanGetCount", c_ubyte),
- ]
-
- def __init__(self):
- self.Clear()
- self.Cmd = 0xB0
- self.SubCmd = 0x06
- return
-
- def ReadData(self, stringData, _pos=0, _len=0):
- self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
-
- def Clear(self):
- self.Cmd = 0xB0
- self.SubCmd = 0x06
- self.CanGetCount = 0
- return
-
- def GetLength(self):
- return sizeof(tagGCCanGetAssistThanksGiftCount)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''// B0 06 可接收协助感谢礼物个数 //tagGCCanGetAssistThanksGiftCount:
- Cmd:%s,
- SubCmd:%s,
- CanGetCount:%d
- '''\
- %(
- self.Cmd,
- self.SubCmd,
- self.CanGetCount
- )
- return DumpString
-
-
-m_NAtagGCCanGetAssistThanksGiftCount=tagGCCanGetAssistThanksGiftCount()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCanGetAssistThanksGiftCount.Cmd,m_NAtagGCCanGetAssistThanksGiftCount.SubCmd))] = m_NAtagGCCanGetAssistThanksGiftCount
-
-
-#------------------------------------------------------
-# B0 02 删除协助 #tagGCClearAssist
-
-class tagGCClearAssist(Structure):
- Head = tagHead()
- AssistGUID = "" #(char AssistGUID[40])//协助GUID
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x02
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x02
- self.AssistGUID = ""
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 40
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteString(data, 40, self.AssistGUID)
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- AssistGUID:%s
- '''\
- %(
- self.Head.OutputString(),
- self.AssistGUID
- )
- return DumpString
-
-
-m_NAtagGCClearAssist=tagGCClearAssist()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCClearAssist.Head.Cmd,m_NAtagGCClearAssist.Head.SubCmd))] = m_NAtagGCClearAssist
-
-
-#------------------------------------------------------
-#B0 25 家族悬赏任务奖励领取情况 #tagFamilyArrestAwardReceiveState
-
-class tagFamilyArrestAwardReceiveState(Structure):
- _pack_ = 1
- _fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("ReceiveState", c_int), #悬赏任务奖励领取情况
- ]
-
- def __init__(self):
- self.Clear()
- self.Cmd = 0xB0
- self.SubCmd = 0x25
- return
-
- def ReadData(self, stringData, _pos=0, _len=0):
- self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
-
- def Clear(self):
- self.Cmd = 0xB0
- self.SubCmd = 0x25
- self.ReceiveState = 0
- return
-
- def GetLength(self):
- return sizeof(tagFamilyArrestAwardReceiveState)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''//B0 25 家族悬赏任务奖励领取情况 //tagFamilyArrestAwardReceiveState:
- Cmd:%s,
- SubCmd:%s,
- ReceiveState:%d
- '''\
- %(
- self.Cmd,
- self.SubCmd,
- self.ReceiveState
- )
- return DumpString
-
-
-m_NAtagFamilyArrestAwardReceiveState=tagFamilyArrestAwardReceiveState()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagFamilyArrestAwardReceiveState.Cmd,m_NAtagFamilyArrestAwardReceiveState.SubCmd))] = m_NAtagFamilyArrestAwardReceiveState
-
-
-#------------------------------------------------------
-#B0 26 家族悬赏任务完成情况 #tagFamilyArrestOverStateInfo
-
-class tagFamilyArrestOverState(Structure):
- ID = 0 #(DWORD ID)//悬赏任务ID
- NameLen = 0 #(WORD NameLen)//名字长度
- Name = "" #(String Name)//size = NameLen
- OverState = 0 #(DWORD OverState)//任务完成情况
- data = None
-
- def __init__(self):
- self.Clear()
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.NameLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
- self.OverState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- return _pos
-
- def Clear(self):
- self.ID = 0
- self.NameLen = 0
- self.Name = ""
- self.OverState = 0
- return
-
- def GetLength(self):
- length = 0
- length += 4
- length += 2
- length += len(self.Name)
- length += 4
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteDWORD(data, self.ID)
- data = CommFunc.WriteWORD(data, self.NameLen)
- data = CommFunc.WriteString(data, self.NameLen, self.Name)
- data = CommFunc.WriteDWORD(data, self.OverState)
- return data
-
- def OutputString(self):
- DumpString = '''
- ID:%d,
- NameLen:%d,
- Name:%s,
- OverState:%d
- '''\
- %(
- self.ID,
- self.NameLen,
- self.Name,
- self.OverState
- )
- return DumpString
-
-
-class tagFamilyArrestOverStateInfo(Structure):
- Head = tagHead()
- Count = 0 #(WORD Count)
- ArrestOverStateInfo = list() #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x26
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
- for i in range(self.Count):
- temArrestOverStateInfo = tagFamilyArrestOverState()
- _pos = temArrestOverStateInfo.ReadData(_lpData, _pos)
- self.ArrestOverStateInfo.append(temArrestOverStateInfo)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x26
- self.Count = 0
- self.ArrestOverStateInfo = list()
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 2
- for i in range(self.Count):
- length += self.ArrestOverStateInfo[i].GetLength()
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteWORD(data, self.Count)
- for i in range(self.Count):
- data = CommFunc.WriteString(data, self.ArrestOverStateInfo[i].GetLength(), self.ArrestOverStateInfo[i].GetBuffer())
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- Count:%d,
- ArrestOverStateInfo:%s
- '''\
- %(
- self.Head.OutputString(),
- self.Count,
- "..."
- )
- return DumpString
-
-
-m_NAtagFamilyArrestOverStateInfo=tagFamilyArrestOverStateInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagFamilyArrestOverStateInfo.Head.Cmd,m_NAtagFamilyArrestOverStateInfo.Head.SubCmd))] = m_NAtagFamilyArrestOverStateInfo
-
-
-#------------------------------------------------------
-# B0 05 接收协助感谢礼物预览 #tagGCGetAssistThanksGiftPreview
-
-class tagGCGetAssistThanksGiftPreview(Structure):
- Head = tagHead()
- ItemID = 0 #(DWORD ItemID)//礼盒ID
- PlayerID = 0 #(DWORD PlayerID)//发起玩家ID
- PlayerName = "" #(char PlayerName[33])
- Job = 0 #(BYTE Job)
- LV = 0 #(WORD LV)
- RealmLV = 0 #(BYTE RealmLV)//境界
- Face = 0 #(DWORD Face)//基本脸型
- FacePic = 0 #(DWORD FacePic)//头像框
- MapID = 0 #(DWORD MapID)
- LineID = 0 #(DWORD LineID)
- NPCID = 0 #(DWORD NPCID)
- ExDataLen = 0 #(WORD ExDataLen)
- ExData = "" #(String ExData)//其他自定义数据
- TimeStr = "" #(char TimeStr[19])//协助时间yyyy-MM-dd hh:mm:ss
- ExtraAward = 0 #(BYTE ExtraAward)//是否有额外奖励
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x05
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
- self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
- self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19)
- self.ExtraAward,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x05
- self.ItemID = 0
- self.PlayerID = 0
- self.PlayerName = ""
- self.Job = 0
- self.LV = 0
- self.RealmLV = 0
- self.Face = 0
- self.FacePic = 0
- self.MapID = 0
- self.LineID = 0
- self.NPCID = 0
- self.ExDataLen = 0
- self.ExData = ""
- self.TimeStr = ""
- self.ExtraAward = 0
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 4
- length += 4
- length += 33
- length += 1
- length += 2
- length += 1
- length += 4
- length += 4
- length += 4
- length += 4
- length += 4
- length += 2
- length += len(self.ExData)
- length += 19
- length += 1
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteDWORD(data, self.ItemID)
- data = CommFunc.WriteDWORD(data, self.PlayerID)
- data = CommFunc.WriteString(data, 33, self.PlayerName)
- data = CommFunc.WriteBYTE(data, self.Job)
- data = CommFunc.WriteWORD(data, self.LV)
- data = CommFunc.WriteBYTE(data, self.RealmLV)
- data = CommFunc.WriteDWORD(data, self.Face)
- data = CommFunc.WriteDWORD(data, self.FacePic)
- data = CommFunc.WriteDWORD(data, self.MapID)
- data = CommFunc.WriteDWORD(data, self.LineID)
- data = CommFunc.WriteDWORD(data, self.NPCID)
- data = CommFunc.WriteWORD(data, self.ExDataLen)
- data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
- data = CommFunc.WriteString(data, 19, self.TimeStr)
- data = CommFunc.WriteBYTE(data, self.ExtraAward)
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- ItemID:%d,
- PlayerID:%d,
- PlayerName:%s,
- Job:%d,
- LV:%d,
- RealmLV:%d,
- Face:%d,
- FacePic:%d,
- MapID:%d,
- LineID:%d,
- NPCID:%d,
- ExDataLen:%d,
- ExData:%s,
- TimeStr:%s,
- ExtraAward:%d
- '''\
- %(
- self.Head.OutputString(),
- self.ItemID,
- self.PlayerID,
- self.PlayerName,
- self.Job,
- self.LV,
- self.RealmLV,
- self.Face,
- self.FacePic,
- self.MapID,
- self.LineID,
- self.NPCID,
- self.ExDataLen,
- self.ExData,
- self.TimeStr,
- self.ExtraAward
- )
- return DumpString
-
-
-m_NAtagGCGetAssistThanksGiftPreview=tagGCGetAssistThanksGiftPreview()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGetAssistThanksGiftPreview.Head.Cmd,m_NAtagGCGetAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCGetAssistThanksGiftPreview
-
-
-#------------------------------------------------------
# B0 37 淘金营地信息 #tagSCGoldRushCampInfo
class tagSCGoldRushCamp(Structure):
@@ -31863,21 +30415,20 @@
#------------------------------------------------------
-# B0 07 今日协助活跃令信息 #tagMCTodayAssistMoneyInfo
+# B0 40 游历信息 #tagSCTravelInfo
-class tagMCTodayAssistMoneyInfo(Structure):
+class tagSCTravelGrid(Structure):
_pack_ = 1
_fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("TodayAssistMoney", c_ushort), #今日已获得活跃令,不含社交加成
- ("SocialMoney", c_ushort), #社交额外加成
+ ("Row", c_ubyte), #行,从1开始
+ ("Col", c_ubyte), #列,从1开始
+ ("State", c_ubyte), #状态:0-未点击;1-已开启;2-裂纹
+ ("Multi", c_ubyte), #奖励倍值: 默认1倍;2-双倍;...
+ ("EventID", c_ushort), #事件ID
]
def __init__(self):
self.Clear()
- self.Cmd = 0xB0
- self.SubCmd = 0x07
return
def ReadData(self, stringData, _pos=0, _len=0):
@@ -31886,434 +30437,358 @@
return _pos + self.GetLength()
def Clear(self):
- self.Cmd = 0xB0
- self.SubCmd = 0x07
- self.TodayAssistMoney = 0
- self.SocialMoney = 0
+ self.Row = 0
+ self.Col = 0
+ self.State = 0
+ self.Multi = 0
+ self.EventID = 0
return
def GetLength(self):
- return sizeof(tagMCTodayAssistMoneyInfo)
+ return sizeof(tagSCTravelGrid)
def GetBuffer(self):
return string_at(addressof(self), self.GetLength())
def OutputString(self):
- DumpString = '''// B0 07 今日协助活跃令信息 //tagMCTodayAssistMoneyInfo:
- Cmd:%s,
- SubCmd:%s,
- TodayAssistMoney:%d,
- SocialMoney:%d
+ DumpString = '''// B0 40 游历信息 //tagSCTravelInfo:
+ Row:%d,
+ Col:%d,
+ State:%d,
+ Multi:%d,
+ EventID:%d
'''\
%(
- self.Cmd,
- self.SubCmd,
- self.TodayAssistMoney,
- self.SocialMoney
+ self.Row,
+ self.Col,
+ self.State,
+ self.Multi,
+ self.EventID
)
return DumpString
-m_NAtagMCTodayAssistMoneyInfo=tagMCTodayAssistMoneyInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTodayAssistMoneyInfo.Cmd,m_NAtagMCTodayAssistMoneyInfo.SubCmd))] = m_NAtagMCTodayAssistMoneyInfo
-
-
-#------------------------------------------------------
-# B0 04 使用协助感谢礼盒预览 #tagGCUseAssistThanksGiftPreview
-
-class tagGCAssistPlayerInfo(Structure):
- PlayerID = 0 #(DWORD PlayerID)
- PlayerName = "" #(char PlayerName[33])
- Job = 0 #(BYTE Job)
- LV = 0 #(WORD LV)
- RealmLV = 0 #(BYTE RealmLV)//境界
- Face = 0 #(DWORD Face)//基本脸型
- FacePic = 0 #(DWORD FacePic)//头像框
- data = None
-
- def __init__(self):
- self.Clear()
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
- self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- return _pos
-
- def Clear(self):
- self.PlayerID = 0
- self.PlayerName = ""
- self.Job = 0
- self.LV = 0
- self.RealmLV = 0
- self.Face = 0
- self.FacePic = 0
- return
-
- def GetLength(self):
- length = 0
- length += 4
- length += 33
- length += 1
- length += 2
- length += 1
- length += 4
- length += 4
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteDWORD(data, self.PlayerID)
- data = CommFunc.WriteString(data, 33, self.PlayerName)
- data = CommFunc.WriteBYTE(data, self.Job)
- data = CommFunc.WriteWORD(data, self.LV)
- data = CommFunc.WriteBYTE(data, self.RealmLV)
- data = CommFunc.WriteDWORD(data, self.Face)
- data = CommFunc.WriteDWORD(data, self.FacePic)
- return data
-
- def OutputString(self):
- DumpString = '''
- PlayerID:%d,
- PlayerName:%s,
- Job:%d,
- LV:%d,
- RealmLV:%d,
- Face:%d,
- FacePic:%d
- '''\
- %(
- self.PlayerID,
- self.PlayerName,
- self.Job,
- self.LV,
- self.RealmLV,
- self.Face,
- self.FacePic
- )
- return DumpString
-
-
-class tagGCUseAssistThanksGiftPreview(Structure):
+class tagSCTravelInfo(Structure):
Head = tagHead()
- ItemID = 0 #(DWORD ItemID)//礼盒ID
- MapID = 0 #(DWORD MapID)
- LineID = 0 #(DWORD LineID)
- NPCID = 0 #(DWORD NPCID)
- ExDataLen = 0 #(WORD ExDataLen)
- ExData = "" #(String ExData)//其他自定义数据
- AssistPlayerCount = 0 #(BYTE AssistPlayerCount)
- AssistPlayerList = list() #(vector<tagGCAssistPlayerInfo> AssistPlayerList)//协助玩家列表
+ Energy = 0 #(BYTE Energy)//剩余体力
+ EnergyTime = 0 #(DWORD EnergyTime)//上次恢复体力时间戳
+ TravelCnt = 0 #(DWORD TravelCnt)//累计游历次数
+ SceneryType = 0 #(BYTE SceneryType)//景观类型
+ SceneryRow = 0 #(BYTE SceneryRow)//景观左上角所在行,从1开始
+ SceneryCol = 0 #(BYTE SceneryCol)//景观左上角所在列,从1开始
+ SceneryLVInfo = 0 #(DWORD SceneryLVInfo)//景观升级信息:0-还未处理景观升级;个位数-第1次升级成功与否,1-成功,2-失败;十位-第2次 ...
+ Result = 0 #(BYTE Result)//后端处理:0-无;1-常规;2-马车炸弹;3-传送门;4-景观;5-重置开始
+ GridCnt = 0 #(BYTE GridCnt)
+ GridList = list() #(vector<tagSCTravelGrid> GridList)//格子信息列表,只同步变化的
data = None
def __init__(self):
self.Clear()
self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x04
+ self.Head.SubCmd = 0x40
return
def ReadData(self, _lpData, _pos=0, _Len=0):
self.Clear()
_pos = self.Head.ReadData(_lpData, _pos)
- self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
- self.AssistPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- for i in range(self.AssistPlayerCount):
- temAssistPlayerList = tagGCAssistPlayerInfo()
- _pos = temAssistPlayerList.ReadData(_lpData, _pos)
- self.AssistPlayerList.append(temAssistPlayerList)
+ self.Energy,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.EnergyTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.TravelCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.SceneryType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.SceneryRow,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.SceneryCol,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.SceneryLVInfo,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.Result,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.GridCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.GridCnt):
+ temGridList = tagSCTravelGrid()
+ _pos = temGridList.ReadData(_lpData, _pos)
+ self.GridList.append(temGridList)
return _pos
def Clear(self):
self.Head = tagHead()
self.Head.Clear()
self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x04
- self.ItemID = 0
- self.MapID = 0
- self.LineID = 0
- self.NPCID = 0
- self.ExDataLen = 0
- self.ExData = ""
- self.AssistPlayerCount = 0
- self.AssistPlayerList = list()
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 4
- length += 4
- length += 4
- length += 4
- length += 2
- length += len(self.ExData)
- length += 1
- for i in range(self.AssistPlayerCount):
- length += self.AssistPlayerList[i].GetLength()
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteDWORD(data, self.ItemID)
- data = CommFunc.WriteDWORD(data, self.MapID)
- data = CommFunc.WriteDWORD(data, self.LineID)
- data = CommFunc.WriteDWORD(data, self.NPCID)
- data = CommFunc.WriteWORD(data, self.ExDataLen)
- data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
- data = CommFunc.WriteBYTE(data, self.AssistPlayerCount)
- for i in range(self.AssistPlayerCount):
- data = CommFunc.WriteString(data, self.AssistPlayerList[i].GetLength(), self.AssistPlayerList[i].GetBuffer())
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- ItemID:%d,
- MapID:%d,
- LineID:%d,
- NPCID:%d,
- ExDataLen:%d,
- ExData:%s,
- AssistPlayerCount:%d,
- AssistPlayerList:%s
- '''\
- %(
- self.Head.OutputString(),
- self.ItemID,
- self.MapID,
- self.LineID,
- self.NPCID,
- self.ExDataLen,
- self.ExData,
- self.AssistPlayerCount,
- "..."
- )
- return DumpString
-
-
-m_NAtagGCUseAssistThanksGiftPreview=tagGCUseAssistThanksGiftPreview()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCUseAssistThanksGiftPreview.Head.Cmd,m_NAtagGCUseAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCUseAssistThanksGiftPreview
-
-
-#------------------------------------------------------
-# B0 20 膜拜信息列表 #tagGCWorshipInfoList
-
-class tagGCWorshipInfo(Structure):
- PlayerID = 0 #(DWORD PlayerID)// 目标玩家ID
- WorshipType = 0 #(BYTE WorshipType)// 膜拜类型
- WorshipValue = 0 #(DWORD WorshipValue)// 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义
- InfoLen = 0 #(WORD InfoLen)
- PlayerInfo = "" #(String PlayerInfo)// 玩家信息{k:v, ...}
- data = None
-
- def __init__(self):
- self.Clear()
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.WorshipType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.WorshipValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.InfoLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.PlayerInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.InfoLen)
- return _pos
-
- def Clear(self):
- self.PlayerID = 0
- self.WorshipType = 0
- self.WorshipValue = 0
- self.InfoLen = 0
- self.PlayerInfo = ""
- return
-
- def GetLength(self):
- length = 0
- length += 4
- length += 1
- length += 4
- length += 2
- length += len(self.PlayerInfo)
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteDWORD(data, self.PlayerID)
- data = CommFunc.WriteBYTE(data, self.WorshipType)
- data = CommFunc.WriteDWORD(data, self.WorshipValue)
- data = CommFunc.WriteWORD(data, self.InfoLen)
- data = CommFunc.WriteString(data, self.InfoLen, self.PlayerInfo)
- return data
-
- def OutputString(self):
- DumpString = '''
- PlayerID:%d,
- WorshipType:%d,
- WorshipValue:%d,
- InfoLen:%d,
- PlayerInfo:%s
- '''\
- %(
- self.PlayerID,
- self.WorshipType,
- self.WorshipValue,
- self.InfoLen,
- self.PlayerInfo
- )
- return DumpString
-
-
-class tagGCWorshipInfoList(Structure):
- Head = tagHead()
- WorshipCount = 0 #(BYTE WorshipCount)
- WorshipInfoList = list() #(vector<tagGCWorshipInfo> WorshipInfoList)
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x20
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.WorshipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- for i in range(self.WorshipCount):
- temWorshipInfoList = tagGCWorshipInfo()
- _pos = temWorshipInfoList.ReadData(_lpData, _pos)
- self.WorshipInfoList.append(temWorshipInfoList)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xB0
- self.Head.SubCmd = 0x20
- self.WorshipCount = 0
- self.WorshipInfoList = list()
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 1
- for i in range(self.WorshipCount):
- length += self.WorshipInfoList[i].GetLength()
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteBYTE(data, self.WorshipCount)
- for i in range(self.WorshipCount):
- data = CommFunc.WriteString(data, self.WorshipInfoList[i].GetLength(), self.WorshipInfoList[i].GetBuffer())
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- WorshipCount:%d,
- WorshipInfoList:%s
- '''\
- %(
- self.Head.OutputString(),
- self.WorshipCount,
- "..."
- )
- return DumpString
-
-
-m_NAtagGCWorshipInfoList=tagGCWorshipInfoList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipInfoList.Head.Cmd,m_NAtagGCWorshipInfoList.Head.SubCmd))] = m_NAtagGCWorshipInfoList
-
-
-#------------------------------------------------------
-# B0 21 膜拜结果 #tagGCWorshipResult
-
-class tagGCWorshipResult(Structure):
- _pack_ = 1
- _fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("PlayerID", c_int), # 目标玩家ID
- ("WorshipType", c_ubyte), # 膜拜类型
- ("WorshipValue", c_int), # 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义
- ("Result", c_ubyte), # 膜拜结果:0-成功;1-不存在该膜拜类型;2-不存在该目标膜拜;3-不能膜拜该目标;
- ("MoneyType", c_ubyte), # 货币类型
- ("MoneyValue", c_int), # 货币奖励
- ]
-
- def __init__(self):
- self.Clear()
- self.Cmd = 0xB0
- self.SubCmd = 0x21
- return
-
- def ReadData(self, stringData, _pos=0, _len=0):
- self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
-
- def Clear(self):
- self.Cmd = 0xB0
- self.SubCmd = 0x21
- self.PlayerID = 0
- self.WorshipType = 0
- self.WorshipValue = 0
+ self.Head.SubCmd = 0x40
+ self.Energy = 0
+ self.EnergyTime = 0
+ self.TravelCnt = 0
+ self.SceneryType = 0
+ self.SceneryRow = 0
+ self.SceneryCol = 0
+ self.SceneryLVInfo = 0
self.Result = 0
- self.MoneyType = 0
- self.MoneyValue = 0
+ self.GridCnt = 0
+ self.GridList = list()
return
def GetLength(self):
- return sizeof(tagGCWorshipResult)
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ length += 4
+ length += 4
+ length += 1
+ length += 1
+ length += 1
+ length += 4
+ length += 1
+ length += 1
+ for i in range(self.GridCnt):
+ length += self.GridList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.Energy)
+ data = CommFunc.WriteDWORD(data, self.EnergyTime)
+ data = CommFunc.WriteDWORD(data, self.TravelCnt)
+ data = CommFunc.WriteBYTE(data, self.SceneryType)
+ data = CommFunc.WriteBYTE(data, self.SceneryRow)
+ data = CommFunc.WriteBYTE(data, self.SceneryCol)
+ data = CommFunc.WriteDWORD(data, self.SceneryLVInfo)
+ data = CommFunc.WriteBYTE(data, self.Result)
+ data = CommFunc.WriteBYTE(data, self.GridCnt)
+ for i in range(self.GridCnt):
+ data = CommFunc.WriteString(data, self.GridList[i].GetLength(), self.GridList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ Energy:%d,
+ EnergyTime:%d,
+ TravelCnt:%d,
+ SceneryType:%d,
+ SceneryRow:%d,
+ SceneryCol:%d,
+ SceneryLVInfo:%d,
+ Result:%d,
+ GridCnt:%d,
+ GridList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.Energy,
+ self.EnergyTime,
+ self.TravelCnt,
+ self.SceneryType,
+ self.SceneryRow,
+ self.SceneryCol,
+ self.SceneryLVInfo,
+ self.Result,
+ self.GridCnt,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagSCTravelInfo=tagSCTravelInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCTravelInfo.Head.Cmd,m_NAtagSCTravelInfo.Head.SubCmd))] = m_NAtagSCTravelInfo
+
+
+#------------------------------------------------------
+# B1 30 红颜信息 #tagSCBeautyInfo
+
+class tagSCBeautySkin(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("SkinID", c_ushort), #时装ID
+ ("State", c_ubyte), #是否已激活
+ ("Used", c_ubyte), #是否已穿戴该时装,某个红颜的所有时装穿戴可能都为0,则前端取默认时装进行展示,如果有同步已穿戴的则以后端为准
+ ("Star", c_ubyte), #时装星级,激活时为0星
+ ]
+
+ 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.SkinID = 0
+ self.State = 0
+ self.Used = 0
+ self.Star = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagSCBeautySkin)
def GetBuffer(self):
return string_at(addressof(self), self.GetLength())
def OutputString(self):
- DumpString = '''// B0 21 膜拜结果 //tagGCWorshipResult:
- Cmd:%s,
- SubCmd:%s,
- PlayerID:%d,
- WorshipType:%d,
- WorshipValue:%d,
- Result:%d,
- MoneyType:%d,
- MoneyValue:%d
+ DumpString = '''// B1 30 红颜信息 //tagSCBeautyInfo:
+ SkinID:%d,
+ State:%d,
+ Used:%d,
+ Star:%d
'''\
%(
- self.Cmd,
- self.SubCmd,
- self.PlayerID,
- self.WorshipType,
- self.WorshipValue,
- self.Result,
- self.MoneyType,
- self.MoneyValue
+ self.SkinID,
+ self.State,
+ self.Used,
+ self.Star
)
return DumpString
-m_NAtagGCWorshipResult=tagGCWorshipResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipResult.Cmd,m_NAtagGCWorshipResult.SubCmd))] = m_NAtagGCWorshipResult
+class tagSCBeauty(Structure):
+ BeautyID = 0 #(WORD BeautyID)//红颜ID
+ State = 0 #(BYTE State)//是否已激活
+ LV = 0 #(WORD LV)//红颜好感等级,激活时为0级
+ Exp = 0 #(WORD Exp)//当前等级经验
+ AwardLV = 0 #(WORD AwardLV)//已经领取到的奖励等级记录
+ SkinCnt = 0 #(BYTE SkinCnt)
+ SkinList = list() #(vector<tagSCBeautySkin> SkinList)//时装皮肤列表,默认解锁的不通知,有变化的才会同步
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.BeautyID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Exp,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.AwardLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.SkinCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.SkinCnt):
+ temSkinList = tagSCBeautySkin()
+ _pos = temSkinList.ReadData(_lpData, _pos)
+ self.SkinList.append(temSkinList)
+ return _pos
+
+ def Clear(self):
+ self.BeautyID = 0
+ self.State = 0
+ self.LV = 0
+ self.Exp = 0
+ self.AwardLV = 0
+ self.SkinCnt = 0
+ self.SkinList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 2
+ length += 1
+ length += 2
+ length += 2
+ length += 2
+ length += 1
+ for i in range(self.SkinCnt):
+ length += self.SkinList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteWORD(data, self.BeautyID)
+ data = CommFunc.WriteBYTE(data, self.State)
+ data = CommFunc.WriteWORD(data, self.LV)
+ data = CommFunc.WriteWORD(data, self.Exp)
+ data = CommFunc.WriteWORD(data, self.AwardLV)
+ data = CommFunc.WriteBYTE(data, self.SkinCnt)
+ for i in range(self.SkinCnt):
+ data = CommFunc.WriteString(data, self.SkinList[i].GetLength(), self.SkinList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ BeautyID:%d,
+ State:%d,
+ LV:%d,
+ Exp:%d,
+ AwardLV:%d,
+ SkinCnt:%d,
+ SkinList:%s
+ '''\
+ %(
+ self.BeautyID,
+ self.State,
+ self.LV,
+ self.Exp,
+ self.AwardLV,
+ self.SkinCnt,
+ "..."
+ )
+ return DumpString
+
+
+class tagSCBeautyInfo(Structure):
+ Head = tagHead()
+ Count = 0 #(BYTE Count)
+ BeautyList = list() #(vector<tagSCBeauty> BeautyList)
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xB1
+ self.Head.SubCmd = 0x30
+ 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):
+ temBeautyList = tagSCBeauty()
+ _pos = temBeautyList.ReadData(_lpData, _pos)
+ self.BeautyList.append(temBeautyList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xB1
+ self.Head.SubCmd = 0x30
+ self.Count = 0
+ self.BeautyList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ for i in range(self.Count):
+ length += self.BeautyList[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.BeautyList[i].GetLength(), self.BeautyList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ Count:%d,
+ BeautyList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagSCBeautyInfo=tagSCBeautyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCBeautyInfo.Head.Cmd,m_NAtagSCBeautyInfo.Head.SubCmd))] = m_NAtagSCBeautyInfo
#------------------------------------------------------
@@ -37142,6 +35617,7 @@
RealmLV = 0 #(BYTE RealmLV)//境界
Face = 0 #(DWORD Face)//基本脸型
FacePic = 0 #(DWORD FacePic)//头像框
+ TitleID = 0 #(DWORD TitleID)//佩戴的称号
ServerID = 0 #(DWORD ServerID)//所属区服ID
data = None
@@ -37166,6 +35642,7 @@
self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.TitleID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
return _pos
@@ -37186,6 +35663,7 @@
self.RealmLV = 0
self.Face = 0
self.FacePic = 0
+ self.TitleID = 0
self.ServerID = 0
return
@@ -37202,6 +35680,7 @@
length += 2
length += 1
length += 1
+ length += 4
length += 4
length += 4
length += 4
@@ -37223,6 +35702,7 @@
data = CommFunc.WriteBYTE(data, self.RealmLV)
data = CommFunc.WriteDWORD(data, self.Face)
data = CommFunc.WriteDWORD(data, self.FacePic)
+ data = CommFunc.WriteDWORD(data, self.TitleID)
data = CommFunc.WriteDWORD(data, self.ServerID)
return data
@@ -37241,6 +35721,7 @@
RealmLV:%d,
Face:%d,
FacePic:%d,
+ TitleID:%d,
ServerID:%d
'''\
%(
@@ -37257,6 +35738,7 @@
self.RealmLV,
self.Face,
self.FacePic,
+ self.TitleID,
self.ServerID
)
return DumpString
@@ -37281,6 +35763,7 @@
RealmLV = 0 #(BYTE RealmLV)//境界
Face = 0 #(DWORD Face)//基本脸型
FacePic = 0 #(DWORD FacePic)//头像框
+ TitleID = 0 #(DWORD TitleID)//佩戴的称号
ServerID = 0 #(DWORD ServerID)//所属区服ID
TalkTime = 0 #(DWORD TalkTime)//该聊天发送时间戳
data = None
@@ -37302,6 +35785,7 @@
self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.TitleID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.TalkTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
return _pos
@@ -37318,6 +35802,7 @@
self.RealmLV = 0
self.Face = 0
self.FacePic = 0
+ self.TitleID = 0
self.ServerID = 0
self.TalkTime = 0
return
@@ -37333,6 +35818,7 @@
length += 2
length += 1
length += 1
+ length += 4
length += 4
length += 4
length += 4
@@ -37353,6 +35839,7 @@
data = CommFunc.WriteBYTE(data, self.RealmLV)
data = CommFunc.WriteDWORD(data, self.Face)
data = CommFunc.WriteDWORD(data, self.FacePic)
+ data = CommFunc.WriteDWORD(data, self.TitleID)
data = CommFunc.WriteDWORD(data, self.ServerID)
data = CommFunc.WriteDWORD(data, self.TalkTime)
return data
@@ -37370,6 +35857,7 @@
RealmLV:%d,
Face:%d,
FacePic:%d,
+ TitleID:%d,
ServerID:%d,
TalkTime:%d
'''\
@@ -37385,6 +35873,7 @@
self.RealmLV,
self.Face,
self.FacePic,
+ self.TitleID,
self.ServerID,
self.TalkTime
)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Arena.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Arena.py
index b6586ff..415b8bf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Arena.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Arena.py
@@ -32,6 +32,7 @@
GameWorld.DebugAnswer(curPlayer, "重置玩家竞技场: Arena 0")
GameWorld.DebugAnswer(curPlayer, "设置玩家榜积分: Arena 积分")
GameWorld.DebugAnswer(curPlayer, "直接匹配到目标: Arena m 对手ID 对手ID ...")
+ GameWorld.DebugAnswer(curPlayer, "设置累计胜利数: Arena w 胜利数")
GameWorld.DebugAnswer(curPlayer, "重置赛季直接用 test_OnWeek")
return
@@ -54,5 +55,11 @@
gmMatchIDList = msgList[1:]
PlayerArena.GMArenaMatch(curPlayer, gmMatchIDList)
+ elif value1 == "w":
+ winCnt = msgList[1] if len(msgList) > 1 else 0
+ GameWorld.DebugAnswer(curPlayer, "设置竞技场胜利数: %s" % winCnt)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaWinCnt, winCnt)
+ PlayerArena.Sync_ArenaInfo(curPlayer)
+
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Beauty.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Beauty.py
new file mode 100644
index 0000000..250a2ad
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Beauty.py
@@ -0,0 +1,110 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.Beauty
+#
+# @todo:红颜
+# @author hxp
+# @date 2025-11-21
+# @version 1.0
+#
+# 详细描述: 红颜
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-11-21 17:00"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import IpyGameDataPY
+import PlayerControl
+import PlayerBeauty
+import ChConfig
+
+def OnExec(curPlayer, msgList):
+
+ if not msgList:
+ GameWorld.DebugAnswer(curPlayer, "重置红颜: Beauty 0 [红颜ID]")
+ GameWorld.DebugAnswer(curPlayer, "设置红颜: Beauty 红颜ID [等级 经验 领奖等级]")
+ GameWorld.DebugAnswer(curPlayer, "红颜时装: Beauty s 时装ID [星级]")
+ GameWorld.DebugAnswer(curPlayer, "演武场胜利数: Arena w 胜利数")
+ GameWorld.DebugAnswer(curPlayer, "副本过关进度: FBPass")
+ return
+
+ beautyIDList, skinIDList = [], []
+
+ value1 = msgList[0]
+ if value1 == 0:
+ setBeautyID = msgList[1] if len(msgList) > 1 else 0
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in range(ipyDataMgr.GetBeautyCount()):
+ ipyData = ipyDataMgr.GetBeautyByIndex(index)
+ beautyID = ipyData.GetBeautyID()
+ if setBeautyID and setBeautyID != beautyID:
+ continue
+ if not PlayerBeauty.GetBeautyState(curPlayer, beautyID):
+ continue
+ beautyIDList.append(beautyID)
+
+ ipyDataList = IpyGameDataPY.GetIpyGameDataList("BeautySkin", beautyID)
+ if ipyDataList:
+ for skinIpyData in ipyDataList:
+ skinID = skinIpyData.GetSkinID()
+ if not PlayerBeauty.GetBeautySkinState(curPlayer, skinID):
+ continue
+ skinIDList.append(skinID)
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BeautySkinInfo % skinID, 0)
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BeautyLVInfo % beautyID, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BeautyAwardLV % beautyID, 0)
+
+ GameWorld.DebugAnswer(curPlayer, "重置红颜OK")
+
+ elif value1 == "s":
+ skinID = msgList[1] if len(msgList) > 1 else 0
+ star = msgList[2] if len(msgList) > 2 else 0
+ ipyData = IpyGameDataPY.GetIpyGameDataByCondition("BeautySkin", {"SkinID":skinID}, False)
+ if not ipyData:
+ GameWorld.DebugAnswer(curPlayer, "不存在红颜时装skinID:%s" % skinID)
+ return
+ beautyID = ipyData.GetBeautyID()
+ star = min(star, ipyData.GetStarMax())
+ PlayerBeauty.DoBeautyActivate(curPlayer, beautyID)
+ PlayerBeauty.SetBeautySkinState(curPlayer, skinID, 1)
+ PlayerBeauty.SetBeautySkinStar(curPlayer, skinID, star)
+ beautyIDList, skinIDList = [beautyID], [skinID]
+ GameWorld.DebugAnswer(curPlayer, "红颜ID:%s,时装ID:%s,星:%s" % (beautyID, skinID, star))
+
+ elif value1 > 0:
+ beautyID = value1
+ lv = msgList[1] if len(msgList) > 1 else None
+ exp = msgList[2] if len(msgList) > 2 else 0
+ awardLV = msgList[3] if len(msgList) > 3 else None
+ ipyData = IpyGameDataPY.GetIpyGameData("Beauty", beautyID)
+ if not ipyData:
+ GameWorld.DebugAnswer(curPlayer, "不存在红颜! %s" % beautyID)
+ return
+ quality = ipyData.GetBeautyQuality()
+
+ PlayerBeauty.DoBeautyActivate(curPlayer, beautyID)
+ if lv == None:
+ lv, exp, awardLV = 0, 0, 0
+
+ if not IpyGameDataPY.GetIpyGameData("BeautyQualityLV", quality, lv):
+ GameWorld.DebugAnswer(curPlayer, "不存在红颜等级! ID:%s,品质:%s,LV:%s" % (beautyID, quality, lv))
+ return
+ PlayerBeauty.SetBeautyLVInfo(curPlayer, beautyID, lv, exp)
+ lv, exp = PlayerBeauty.GetBeautyLVInfo(curPlayer, beautyID)
+
+ if awardLV != None:
+ awardLV = min(lv, awardLV)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BeautyAwardLV % beautyID, awardLV)
+ awardLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BeautyAwardLV % beautyID)
+
+ GameWorld.DebugAnswer(curPlayer, "红颜ID:%s, 品质:%s, LV:%s-%s, 奖励LV:%s" % (beautyID, quality, lv, exp, awardLV))
+ beautyIDList = [beautyID]
+
+ PlayerBeauty.RefreshBeautyAttr(curPlayer)
+ PlayerBeauty.SyncBeautyInfo(curPlayer, beautyIDList, skinIDList)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/FBPass.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/FBPass.py
new file mode 100644
index 0000000..08d0329
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/FBPass.py
@@ -0,0 +1,40 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.FBPass
+#
+# @todo:设置副本过关进度
+# @author hxp
+# @date 2025-11-21
+# @version 1.0
+#
+# 详细描述: 设置副本过关进度
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-11-21 17:00"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import IpyGameDataPY
+import PlayerControl
+import FBCommon
+import ChConfig
+
+def OnExec(curPlayer, paramList):
+
+ if not paramList:
+ GameWorld.DebugAnswer(curPlayer, "副本过关进度: FBPass mapID lineID")
+ return
+ mapID = paramList[0]
+ funcLineID = paramList[1] if len(paramList) > 1 else 0
+
+ if not IpyGameDataPY.GetIpyGameData("FBLine", mapID, funcLineID):
+ GameWorld.DebugAnswer(curPlayer, "不存在该副本线路:%s-%s" % (mapID, funcLineID))
+ return
+
+ GameWorld.DebugAnswer(curPlayer, "副本过关进度:%s-%s" % (mapID, funcLineID))
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBPassLineID % mapID, funcLineID)
+ FBCommon.Sync_FBPlayerFBInfoData(curPlayer, mapID)
+ return
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/FeastTravel.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/FeastTravel.py
deleted file mode 100644
index b902109..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/FeastTravel.py
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.FeastTravel
-#
-# @todo:节日游历
-# @author hxp
-# @date 2021-02-01
-# @version 1.0
-#
-# 详细描述: 节日游历
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-02-01 15:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerControl
-import PlayerFeastTravel
-import IpyGameDataPY
-import ChConfig
-
-
-def __Help(curPlayer):
- GameWorld.DebugAnswer(curPlayer, "重置所有游历: FeastTravel 0")
- GameWorld.DebugAnswer(curPlayer, "设置游历点值: FeastTravel 游历值")
- GameWorld.DebugAnswer(curPlayer, "增加游历进度: FeastTravel 任务ID 增加值")
- return
-
-## GM命令执行入口
-# @param curPlayer 当前玩家
-# @param paramList 参数列表 []
-# @return None
-# @remarks 函数详细说明.
-def OnExec(curPlayer, paramList):
-
- if not paramList:
- __Help(curPlayer)
- return
-
- if len(paramList) == 1:
- # 重置
- if paramList[0] == 0:
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastTravelPoint, 0)
-
- ipyMgr = IpyGameDataPY.IPY_Data()
- # 重置游历任务相关
- for index in xrange(ipyMgr.GetActFeastTravelTaskCount()):
- taskIpyData = ipyMgr.GetActFeastTravelTaskByIndex(index)
- taskID = taskIpyData.GetTraveTasklD()
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastTravelValue % taskID, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastTravelCount % taskID, 0)
-
- # 重置游历奖励
- for index in xrange(ipyMgr.GetActFeastTravelAwardCount()):
- awardIpyData = ipyMgr.GetActFeastTravelAwardByIndex(index)
- recordIndex = awardIpyData.GetRecordIndex()
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastTravelAwardCount % recordIndex, 0)
-
- GameWorld.DebugAnswer(curPlayer, "重置OK!")
-
- PlayerFeastTravel.Sync_FeastTravelPlayerInfo(curPlayer)
-
- # 设置游历值
- else:
- travelPoint = paramList[0]
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastTravelPoint, travelPoint)
- GameWorld.DebugAnswer(curPlayer, "设置OK!")
- PlayerFeastTravel.Sync_FeastTravelPlayerInfo(curPlayer, -1, -1)
-
- elif len(paramList) == 2:
- taskID, addValue = paramList
- if taskID not in ChConfig.FeastTravelTaskIDList:
- GameWorld.DebugAnswer(curPlayer, "游历任务ID不存在,请查看节日游历任务表!")
- return
-
- if PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, taskID, addValue):
- GameWorld.DebugAnswer(curPlayer, "成功!")
- else:
- GameWorld.DebugAnswer(curPlayer, "失败!请检查是否已达最大完成次数!")
-
- else:
- __Help(curPlayer)
- return
-
- return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/OpenFunc.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/OpenFunc.py
index 8cb4ac3..a61efa6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/OpenFunc.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/OpenFunc.py
@@ -22,6 +22,7 @@
import GameFuncComm
import ChConfig
import ShareDefine
+import PlayerOnline
## GM命令执行入口
# @param curPlayer 当前玩家
@@ -43,7 +44,8 @@
else:
openFuncID = cmdList[1] if len(cmdList) > 1 else 0
DoGMOpenFunc(curPlayer, openFuncID)
-
+ PlayerOnline.GetOnlinePlayer(curPlayer).ReCalcAllAttr()
+
PrintFuncOpenState(curPlayer)
return
@@ -121,7 +123,7 @@
GameWorld.DebugLog("GM处理任务开启功能: needMissionIDList=%s" % needMissionIDList, curPlayer.GetPlayerID())
#最后强制触发一次
- GameFuncComm.DoFuncOpenLogic(curPlayer)
+ GameFuncComm.DoFuncOpenLogic(curPlayer, checkServerDay=False)
return
def __GetOpenFuncLimit(curPlayer, openFuncIDList):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py
new file mode 100644
index 0000000..57cea70
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py
@@ -0,0 +1,72 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.ServerDay
+#
+# @todo:服务器天
+# @author hxp
+# @date 2025-11-25
+# @version 1.0
+#
+# 详细描述: 服务器天
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-11-25 19:30"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import ShareDefine
+import GameWorldEvent
+import PlayerSignDay
+import GameFuncComm
+import DBDataMgr
+import ChPlayer
+
+import time
+
+def OnExec(curPlayer, cmdList):
+
+ if not cmdList:
+ GameWorld.DebugAnswer(curPlayer, "设置开服天: ServerDay 第几天")
+ GameWorld.DebugAnswer(curPlayer, "重置开服天: ServerDay 1")
+ __printServerDay(curPlayer)
+ return
+
+ value = cmdList[0]
+
+ if value <= 1:
+ __clearOpenServerDay(curPlayer)
+ elif value > 1:
+ __setOpenServerDay(curPlayer, value)
+
+ GameFuncComm.DoFuncOpenLogic(curPlayer)
+ __printServerDay(curPlayer)
+ ChPlayer.Sync_OpenServerDay(curPlayer)
+ return True
+
+def __printServerDay(curPlayer):
+ ServerDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
+ IsMixServer = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_IsMixServer)
+ MixDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_MixServerDay) + 1
+ OpenWeekday = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_OpenServerWeekday)
+ GameWorld.DebugAnswer(curPlayer, '开服星期%s, 天数:%s 是否合服:%s, 合服天数:%s' % (OpenWeekday, ServerDay, IsMixServer, MixDay))
+ return
+
+def __clearOpenServerDay(curPlayer):
+ #重置开服天,设置非合服
+ GameWorld.DebugAnswer(curPlayer, "重置开服天")
+ DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_ServerWeek, 0)
+ DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_ServerDay, 0)
+ DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_IsMixServer, 0)
+ DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_MixServerDay, 0)
+
+ curTime = int(time.time())
+ GameWorldEvent.SetInitOpenServerTime(curTime)
+
+ PlayerSignDay.ResetDaySign(curPlayer)
+ return
+
+def __setOpenServerDay(curPlayer, serverDay):
+ DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_ServerDay, serverDay - 1)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Task.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Task.py
index c164703..f9e8542 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Task.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Task.py
@@ -44,18 +44,22 @@
PlayerTask.__giveNewTask(curPlayer, taskGroup)
return
- taskValue = paramList[1] if len(paramList) > 1 else 0
+ taskValue = paramList[1] if len(paramList) > 1 else None
ipyData = IpyGameDataPY.GetIpyGameData("Task", taskID)
if not ipyData:
GameWorld.DebugAnswer(curPlayer, "该任务ID不存在:%s" % taskID)
return
taskGroup = ipyData.GetTaskGroup()
+ taskType = ipyData.GetTaskType()
needValue = ipyData.GetNeedValue()
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskID % taskGroup, taskID)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskValue % taskGroup, taskValue)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskState % taskGroup, ChConfig.TaskState_Doing)
- PlayerTask.SetTaskValue(curPlayer, ipyData, taskValue)
-
+ if taskValue == None:
+ PlayerTask.UpdTaskValue(curPlayer, taskType)
+ else:
+ PlayerTask.SetTaskValue(curPlayer, ipyData, taskValue)
+
curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TaskValue % taskGroup)
GameWorld.DebugAnswer(curPlayer, "设置任务ID:%s 进度:%s/%s" % (taskID, curValue, needValue))
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Travel.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Travel.py
new file mode 100644
index 0000000..8a9978e
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Travel.py
@@ -0,0 +1,56 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.Travel
+#
+# @todo:游历
+# @author hxp
+# @date 2025-11-25
+# @version 1.0
+#
+# 详细描述: 游历
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-11-25 17:30"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import IpyGameDataPY
+import PlayerControl
+import PlayerTravel
+import ChConfig
+
+import time
+
+def OnExec(curPlayer, msgList):
+
+ if not msgList:
+ GameWorld.DebugAnswer(curPlayer, "重刷游历: Travel 0 [指定景观类型]")
+ GameWorld.DebugAnswer(curPlayer, "游历次数: Travel t 累计游历次数")
+ GameWorld.DebugAnswer(curPlayer, "设置体力: Travel e 体力 [差几秒可恢复体力]")
+ return
+
+ value1 = msgList[0]
+ if value1 == 0:
+ sceneryType = msgList[1] if len(msgList) > 1 else 0
+ sceneryType, randRow, randCol = PlayerTravel.ResetTravelGrid(curPlayer, sceneryType)
+ GameWorld.DebugAnswer(curPlayer, "重刷游历景观类型:%s,行:%s,列:%s" % (sceneryType, randRow, randCol))
+
+ elif value1 == "t":
+ travelCnt = msgList[1] if len(msgList) > 1 else 0
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelCnt, travelCnt)
+ GameWorld.DebugAnswer(curPlayer, "累计游历次数: %s" % travelCnt)
+ PlayerTravel.SyncTravelInfo(curPlayer)
+
+ elif value1 == "e":
+ energy = msgList[1] if len(msgList) > 1 else 0
+ remainSeconds = msgList[2] if len(msgList) > 2 else 0
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergy, energy)
+ if remainSeconds:
+ cdSeconds = IpyGameDataPY.GetFuncCfg("TravelSet", 2) * 60
+ energyTime = int(time.time()) - cdSeconds + remainSeconds
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergyTime, energyTime)
+ GameWorld.DebugAnswer(curPlayer, "设置体力: %s" % (energy))
+ PlayerTravel.SyncTravelInfo(curPlayer)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Arena.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Arena.py
index fb0c287..e0ec257 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Arena.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Arena.py
@@ -25,9 +25,11 @@
import PlayerBillboard
import PlayerZhanling
import ItemControler
+import PlayerBeauty
import PlayerArena
import PlayerGubao
import PyGameData
+import PlayerTask
import FBCommon
import ChConfig
@@ -66,6 +68,8 @@
if not PlayerControl.HaveMoney(curPlayer, ShareDefine.TYPE_Price_ArenaTicket, 1):
return
+
+ PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_ArenaBattle)
return True, funcLineID
@@ -125,7 +129,13 @@
GameWorld.DebugLog("scoreIndex=%s,winScoreInfo=%s" % (scoreIndex, winScoreInfo), playerID)
# 无论胜负,只要挑战都给固定奖励
- awardItemList = IpyGameDataPY.GetFuncEvalCfg("ArenaSet", 4)
+ awardItemList = []
+ awardItemList += IpyGameDataPY.GetFuncEvalCfg("ArenaSet", 4)
+ exItemRate, exItemID = PlayerBeauty.GetBeautyEffInfo(curPlayer, PlayerBeauty.EffType_ArenaItemEx) # 概率额外获得1个物品
+ if exItemRate and exItemID:
+ if GameWorld.CanHappen(exItemRate):
+ awardItemList.append([exItemID, 1])
+ GameWorld.DebugLog("红颜概率额外获得1个物品: exItemRate=%s, exItemID=%s, awardItemList=%s" % (exItemRate, exItemID, awardItemList))
overMsg.update({"tagPlayerID":tagPlayerID, "atkAddScore":atkAddScore, "defDecScore":defDecScore,
FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(awardItemList)})
@@ -142,6 +152,11 @@
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaScore, updScore)
GameWorld.DebugLog("score=%s,atkAddScore=%s,updScore=%s" % (score, atkAddScore, updScore), playerID)
+ if isWin:
+ winCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaWinCnt)
+ updWinCnt = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaWinCnt, winCnt + 1)
+ GameWorld.DebugLog("updWinCnt=%s" % (updWinCnt), playerID)
+
tagViewCache = turnFight.tagViewCache
gameRecMgr = DBDataMgr.GetGameRecMgr()
atkRecMgr = gameRecMgr.GetRecTypeIDMgr(ShareDefine.Def_GameRecType_ArenaRecord, playerID)
@@ -208,7 +223,7 @@
return
tagPlayerID, isWin, atkAddScore, defDecScore, awardItemList = awardData
-
+ GameWorld.DebugLog("竞技场结算奖励: tagPlayerID=%s,isWin=%s,atkAddScore=%s,defDecScore=%s,awardItemList=%s" % (tagPlayerID, isWin, atkAddScore, defDecScore, awardItemList))
if not PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_ArenaTicket, 1):
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
index 3829f22..1d50672 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
@@ -26,6 +26,7 @@
import ItemControler
import IPY_GameWorld
import NetPackCommon
+import PlayerBeauty
import PlayerArena
import PlayerLLMJ
import ItemCommon
@@ -121,12 +122,18 @@
# 其他战利品掉落
bootyDropNeedDict = IpyGameDataPY.GetFuncEvalCfg("MainBootyDrop", 1, {})
bootyDropCntDict = IpyGameDataPY.GetFuncEvalCfg("MainBootyDrop", 2, {})
- for itemID, dropUpper in DailyBootyUpperList:
+ for itemID, baseUpper in DailyBootyUpperList:
if spaceCount <= 0:
GameWorld.DebugLog("掉落背包已满!", playerID)
break
- if dropUpper <= 0:
+ if baseUpper <= 0:
continue
+ dropUpper = baseUpper
+ addPer = 0
+ addPer += PlayerBeauty.GetBeautyEffInfo(curPlayer, PlayerBeauty.EffType_BootyPer)[0] # 战利品上限提高百分比
+ if addPer:
+ dropUpper = int(baseUpper * (100 + addPer) / 100.0)
+ GameWorld.DebugLog("红颜提高战利品掉落上限: itemID=%s,baseUpper=%s,addPer=%s,dropUpper=%s" % (itemID, baseUpper, addPer, dropUpper))
todyDropCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BootyDropToday % itemID)
if todyDropCnt >= dropUpper:
GameWorld.DebugLog("战利品已达今日掉落上限! itemID=%s,todyDropCnt=%s >= %s" % (itemID, todyDropCnt, dropUpper), playerID)
@@ -152,6 +159,7 @@
curMoney = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_ArenaTicket)
storeMax = PlayerArena.GetArenaTicketStoreMax(curPlayer)
if curMoney >= storeMax:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UnXiantaoCntBooty % itemID, 0)
GameWorld.DebugLog("挑战券已达存储上限! itemID=%s,curMoney=%s >= %s" % (itemID, curMoney, storeMax), playerID)
continue
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevelBoss.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevelBoss.py
index 91b8967..52ba12f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevelBoss.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevelBoss.py
@@ -19,8 +19,9 @@
import IpyGameDataPY
import PlayerControl
import ItemControler
-
+import PlayerTask
import FBCommon
+import ChConfig
def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
## 回合战斗请求
@@ -59,6 +60,10 @@
GameWorld.DebugLog("最后一波未通过,无法挑战本关boss! passWave=%s < %s" % (wave, waveMax))
return
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ChallengeLVID, levelID)
+
+ PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_MainLevelChallenge)
+
return True, levelID
def GetFBNPCLineupInfo(curPlayer, mapID, funcLineID):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Tianzi.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Tianzi.py
index f5d9a48..1cdb7fb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Tianzi.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Tianzi.py
@@ -25,6 +25,7 @@
import NetPackCommon
import IpyGameDataPY
import ShareDefine
+import PlayerTask
import PlayerMail
import DBDataMgr
import TurnSkill
@@ -81,6 +82,7 @@
GameWorld.DebugLog("非今日天子考验! mapID=%s,funcLineID=%s != %s,bossID=%s" % (mapID, funcLineID, lineID, bossID))
return
+ PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_FBTianzi)
return True, funcLineID
def GetFBNPCInitAttr(curPlayer, turnFight, npcObj):
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
index 542529b..b88a642 100644
--- 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
@@ -17,7 +17,10 @@
import GameWorld
import ItemControler
+import PlayerBeauty
import FBCommon
+import PlayerTask
+import ChConfig
def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
## 回合战斗请求
@@ -64,6 +67,8 @@
FBCommon.AddEnterFBCount(curPlayer, mapID, isFree=True)
FBCommon.SetFBPass(curPlayer, mapID, funcLineID)
ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["Zhanchui", False, {}], isNotifyAward=False)
+
+ PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_FBZhanchui)
return
def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, sweepCnt, dataEx):
@@ -74,13 +79,35 @@
def OnPlayerFBSweepResult(curPlayer, mapID, lineID, sweepCnt, dataEx, askRet):
## 扫荡结果,次数消耗已在外层处理扣除
- itemList = FBCommon.GetSweepAwardList(mapID, lineID, sweepCnt)
- GameWorld.DebugLog("白骨盈野扫荡: mapID=%s,lineID=%s,sweepCnt=%s" % (mapID, lineID, sweepCnt))
+ itemList = []
+ itemList += FBCommon.GetSweepAwardList(mapID, lineID, sweepCnt)
+ GameWorld.DebugLog("白骨盈野扫荡: mapID=%s,lineID=%s,sweepCnt=%s,itemList=%s" % (mapID, lineID, sweepCnt, itemList))
+ addPer = PlayerBeauty.GetBeautyEffInfo(curPlayer, PlayerBeauty.EffType_FBZhanchuiAwardPer)[0] # 扫荡奖励百分比
+ if addPer:
+ GameWorld.DebugLog("红颜额外增加扫荡奖励百分比: %s, itemList=%s" % (addPer, itemList))
+ itemListEx = []
+ for itemInfo in itemList:
+ itemID = itemInfo[0]
+ itemCount = itemInfo[1]
+ addCount = int(itemCount * addPer / 100.0)
+ if addCount > 0:
+ itemListEx.append([itemID, addCount, 1]) # 标记是红颜效果额外获得的
+ itemList += itemListEx
+ GameWorld.DebugLog("itemListEx=%s,itemList=%s" % (itemListEx, itemList))
+
ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["Zhanchui", False, {}], isNotifyAward=False)
isPass = 1
- overDict = {FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(itemList), FBCommon.Over_isSweep:1}
+ jsonItemList = []
+ for itemInfo in itemList:
+ itemID = itemInfo[0]
+ itemCount = itemInfo[1]
+ itemDict = {"ItemID":itemInfo[0], "Count":itemInfo[1]}
+ if len(itemInfo) > 2:
+ itemDict['BeautyEx'] = itemInfo[2]
+ jsonItemList.append(itemDict)
+ overDict = {FBCommon.Over_itemInfo:jsonItemList, 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 c16c9d1..c408770 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -249,6 +249,8 @@
("DWORD", "Quality", 1),
("DWORD", "HeroLV", 1),
("list", "UPCostItem", 0),
+ ("list", "AttrIDList", 0),
+ ("list", "AttrValueList", 0),
),
"LineupRecommend":(
@@ -795,6 +797,59 @@
("list", "LVUPNeedItemInfo", 0),
),
+ "Beauty":(
+ ("WORD", "BeautyID", 1),
+ ("BYTE", "BeautyQuality", 0),
+ ("BYTE", "UnlockWay", 0),
+ ("DWORD", "UnlockValue", 0),
+ ("BYTE", "UnlockNeedCnt", 0),
+ ("list", "TalentAttrIDList", 0),
+ ("list", "TalentAttrValueList", 0),
+ ("list", "TalentPerLVAddList", 0),
+ ("BYTE", "EffType", 0),
+ ("BYTE", "EffTypeValue", 0),
+ ("BYTE", "EffValue", 0),
+ ("DWORD", "EffPerLVAdd", 0),
+ ),
+
+ "BeautyQualityLV":(
+ ("BYTE", "BeautyQuality", 1),
+ ("WORD", "BeautyLV", 1),
+ ("WORD", "LVNeedExp", 0),
+ ("list", "AttrIDList", 0),
+ ("list", "AttrValueList", 0),
+ ("list", "AwardItemList", 0),
+ ),
+
+ "BeautySkin":(
+ ("WORD", "SkinID", 0),
+ ("WORD", "BeautyID", 1),
+ ("BYTE", "UnlockWay", 0),
+ ("DWORD", "UnlockValue", 0),
+ ("BYTE", "UnlockNeedCnt", 0),
+ ("BYTE", "UpNeedCnt", 0),
+ ("BYTE", "StarMax", 0),
+ ("list", "AttrIDList", 0),
+ ("list", "InitAttrValueList", 0),
+ ("list", "AttrPerStarAddList", 0),
+ ),
+
+ "TravelEvent":(
+ ("WORD", "EventID", 1),
+ ("DWORD", "EventWeight", 0),
+ ("DWORD", "AwardItemID", 0),
+ ("DWORD", "AwardItemCnt", 0),
+ ),
+
+ "TravelScenery":(
+ ("BYTE", "SceneryType", 1),
+ ("BYTE", "AwardQuality", 0),
+ ("DWORD", "UpRate", 0),
+ ("list", "AwardItemRandCntList", 0),
+ ("list", "AwardItemExWeightList", 0),
+ ("BYTE", "AwardItemExCnt", 0),
+ ),
+
"PlayerLV":(
("WORD", "LV", 1),
("DWORD", "Exp", 0),
@@ -1185,16 +1240,6 @@
("dict", "Reward", 0),
("BYTE", "VIPLimit", 0),
("list", "VIPAward", 0),
- ),
-
- "XBXZ":(
- ("DWORD", "ID", 1),
- ("BYTE", "Type", 0),
- ("DWORD", "NeedCnt", 0),
- ("list", "Condition", 0),
- ("WORD", "MWID", 0),
- ("list", "AwardItem", 0),
- ("list", "Money", 0),
),
"TreasureSet":(
@@ -1884,30 +1929,6 @@
("char", "WorldNotifyKey", 0),
),
- "ActFeastTravel":(
- ("DWORD", "CfgID", 1),
- ("char", "StartDate", 0),
- ("char", "EndDate", 0),
- ("WORD", "LVLimit", 0),
- ("BYTE", "ResetType", 0),
- ("dict", "TemplateIDInfo", 0),
- ),
-
- "ActFeastTravelTask":(
- ("BYTE", "TraveTasklD", 1),
- ("WORD", "FinishNeedValue", 0),
- ("WORD", "FinishTimeMax", 0),
- ("BYTE", "AddTravelPoint", 0),
- ),
-
- "ActFeastTravelAward":(
- ("BYTE", "TemplatelD", 1),
- ("BYTE", "RecordIndex", 0),
- ("WORD", "NeedTravelPoint", 0),
- ("BYTE", "AwardCountMax", 0),
- ("list", "TravelAwardInfo", 0),
- ),
-
"ActFeastWeekParty":(
("DWORD", "CfgID", 1),
("char", "StartDate", 0),
@@ -2118,12 +2139,6 @@
("DWORD", "NeedExp", 0),
("dict", "AttrInfo", 0),
("BYTE", "SkinIndex", 0),
- ),
-
- "AssistThanksGift":(
- ("DWORD", "GiftID", 1),
- ("list", "RequestPlayerAward", 0),
- ("list", "AssistPlayerAward", 0),
),
"FuncSysPrivilege":(
@@ -2508,7 +2523,9 @@
def GetQuality(self): return self.attrTuple[0] # 品质 DWORD
def GetHeroLV(self): return self.attrTuple[1] # 武将等级 DWORD
- def GetUPCostItem(self): return self.attrTuple[2] # 升级到下级消耗道具 list
+ def GetUPCostItem(self): return self.attrTuple[2] # 升级到下级消耗道具 list
+ def GetAttrIDList(self): return self.attrTuple[3] # 武将属性ID列表 list
+ def GetAttrValueList(self): return self.attrTuple[4] # 累计总属性值列表 list
# 推荐阵容表
class IPY_LineupRecommend():
@@ -3319,6 +3336,84 @@
def GetLessEqualLV(self): return self.attrTuple[1] # 小于等于等级 BYTE
def GetLVUPNeedItemInfo(self): return self.attrTuple[2] # 升级所需物品 [[物品ID,个数], ...] list
+# 红颜表
+class IPY_Beauty():
+
+ def __init__(self):
+ self.attrTuple = None
+ return
+
+ def GetBeautyID(self): return self.attrTuple[0] # 红颜ID WORD
+ def GetBeautyQuality(self): return self.attrTuple[1] # 品质 BYTE
+ def GetUnlockWay(self): return self.attrTuple[2] # 解锁方式 BYTE
+ def GetUnlockValue(self): return self.attrTuple[3] # 解锁方式值 DWORD
+ def GetUnlockNeedCnt(self): return self.attrTuple[4] # 解锁所需个数 BYTE
+ def GetTalentAttrIDList(self): return self.attrTuple[5] # 天赋属性ID列表 list
+ def GetTalentAttrValueList(self): return self.attrTuple[6] # 天赋属性初始值 list
+ def GetTalentPerLVAddList(self): return self.attrTuple[7] # 天赋属性每级成长 list
+ def GetEffType(self): return self.attrTuple[8] # 天赋效果类型 BYTE
+ def GetEffTypeValue(self): return self.attrTuple[9] # 效果类型值 BYTE
+ def GetEffValue(self): return self.attrTuple[10] # 效果初始值 BYTE
+ def GetEffPerLVAdd(self): return self.attrTuple[11] # 天赋效果每级成长 DWORD
+
+# 红颜品质升级表
+class IPY_BeautyQualityLV():
+
+ def __init__(self):
+ self.attrTuple = None
+ return
+
+ def GetBeautyQuality(self): return self.attrTuple[0] # BYTE
+ def GetBeautyLV(self): return self.attrTuple[1] # WORD
+ def GetLVNeedExp(self): return self.attrTuple[2] # 升到本级所需经验 WORD
+ def GetAttrIDList(self): return self.attrTuple[3] # 本级属性ID列表 list
+ def GetAttrValueList(self): return self.attrTuple[4] # 本级属性值列表 list
+ def GetAwardItemList(self): return self.attrTuple[5] # 本级奖励 list
+
+# 红颜时装表
+class IPY_BeautySkin():
+
+ def __init__(self):
+ self.attrTuple = None
+ return
+
+ def GetSkinID(self): return self.attrTuple[0] # 时装ID WORD
+ def GetBeautyID(self): return self.attrTuple[1] # WORD
+ def GetUnlockWay(self): return self.attrTuple[2] # 解锁方式 BYTE
+ def GetUnlockValue(self): return self.attrTuple[3] # 解锁方式值 DWORD
+ def GetUnlockNeedCnt(self): return self.attrTuple[4] # 解锁所需个数 BYTE
+ def GetUpNeedCnt(self): return self.attrTuple[5] # 升级所需个数 BYTE
+ def GetStarMax(self): return self.attrTuple[6] # 最高星级 BYTE
+ def GetAttrIDList(self): return self.attrTuple[7] # 属性ID列表 list
+ def GetInitAttrValueList(self): return self.attrTuple[8] # 初始属性值列表 list
+ def GetAttrPerStarAddList(self): return self.attrTuple[9] # 每星加成值列表 list
+
+# 游历事件表
+class IPY_TravelEvent():
+
+ def __init__(self):
+ self.attrTuple = None
+ return
+
+ def GetEventID(self): return self.attrTuple[0] # WORD
+ def GetEventWeight(self): return self.attrTuple[1] # 事件权重 DWORD
+ def GetAwardItemID(self): return self.attrTuple[2] # 奖励物品ID DWORD
+ def GetAwardItemCnt(self): return self.attrTuple[3] # 奖励物品数量 DWORD
+
+# 游历景观奖励表
+class IPY_TravelScenery():
+
+ def __init__(self):
+ self.attrTuple = None
+ return
+
+ def GetSceneryType(self): return self.attrTuple[0] # 景观类型 BYTE
+ def GetAwardQuality(self): return self.attrTuple[1] # 景观品质 BYTE
+ def GetUpRate(self): return self.attrTuple[2] # 升下个品质概率 DWORD
+ def GetAwardItemRandCntList(self): return self.attrTuple[3] # 奖励物品随机个数列表 [[物品ID, 随机数量A, 到B], ...] list
+ def GetAwardItemExWeightList(self): return self.attrTuple[4] # 额外奖励物品权重 [[权重,物品ID,个数], ...] list
+ def GetAwardItemExCnt(self): return self.attrTuple[5] # 额外奖励物品数 BYTE
+
# 玩家等级表
class IPY_PlayerLV():
@@ -3900,21 +3995,6 @@
def GetReward(self): return self.attrTuple[3] # 奖励 {"职业":[[物品ID,个数],...], ...} dict
def GetVIPLimit(self): return self.attrTuple[4] # 需要VIP几 BYTE
def GetVIPAward(self): return self.attrTuple[5] # vip奖励[[物品ID,个数],...] list
-
-# 仙宝寻主表
-class IPY_XBXZ():
-
- def __init__(self):
- self.attrTuple = None
- return
-
- def GetID(self): return self.attrTuple[0] # ID DWORD
- def GetType(self): return self.attrTuple[1] # 类型 BYTE
- def GetNeedCnt(self): return self.attrTuple[2] # 需要数量 DWORD
- def GetCondition(self): return self.attrTuple[3] # 条件 list
- def GetMWID(self): return self.attrTuple[4] # 法宝ID WORD
- def GetAwardItem(self): return self.attrTuple[5] # 奖励物品列表 list
- def GetMoney(self): return self.attrTuple[6] # 金钱 list
# 寻宝设定表
class IPY_TreasureSet():
@@ -4973,45 +5053,6 @@
def GetGoodItemIDList(self): return self.attrTuple[3] # 需要广播的物品ID列表 [物品ID, ...] list
def GetWorldNotifyKey(self): return self.attrTuple[4] # 全服广播key,参数(玩家名, 物品ID, 物品数据, 个数,) char
-# 节日游历时间表
-class IPY_ActFeastTravel():
-
- def __init__(self):
- self.attrTuple = None
- return
-
- def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
- def GetStartDate(self): return self.attrTuple[1] # 开启日期 char
- def GetEndDate(self): return self.attrTuple[2] # 结束日期 char
- def GetLVLimit(self): return self.attrTuple[3] # 限制等级 WORD
- def GetResetType(self): return self.attrTuple[4] # 重置类型,0-0点重置;1-5点重置 BYTE
- def GetTemplateIDInfo(self): return self.attrTuple[5] # 模板信息 {(世界等级A,B):模板编号, ...} dict
-
-# 节日游历任务表
-class IPY_ActFeastTravelTask():
-
- def __init__(self):
- self.attrTuple = None
- return
-
- def GetTraveTasklD(self): return self.attrTuple[0] # 游历ID BYTE
- def GetFinishNeedValue(self): return self.attrTuple[1] # 完成所需进度值 WORD
- def GetFinishTimeMax(self): return self.attrTuple[2] # 总可完成次数,0不限 WORD
- def GetAddTravelPoint(self): return self.attrTuple[3] # 完成次数获得游历值 BYTE
-
-# 节日游历奖励表
-class IPY_ActFeastTravelAward():
-
- def __init__(self):
- self.attrTuple = None
- return
-
- def GetTemplatelD(self): return self.attrTuple[0] # 奖励模板ID BYTE
- def GetRecordIndex(self): return self.attrTuple[1] # 奖励记录索引 BYTE
- def GetNeedTravelPoint(self): return self.attrTuple[2] # 领奖所需游历值 WORD
- def GetAwardCountMax(self): return self.attrTuple[3] # 可领取次数,0代表不限 BYTE
- def GetTravelAwardInfo(self): return self.attrTuple[4] # 游历奖励 [[物品ID,个数,是否拍品], ...] list
-
# 节日巡礼活动时间表
class IPY_ActFeastWeekParty():
@@ -5354,17 +5395,6 @@
def GetAttrInfo(self): return self.attrTuple[4] # 属性 dict
def GetSkinIndex(self): return self.attrTuple[5] # 外观 BYTE
-# 协助感谢礼盒表
-class IPY_AssistThanksGift():
-
- def __init__(self):
- self.attrTuple = None
- return
-
- def GetGiftID(self): return self.attrTuple[0] # 礼盒物品ID DWORD
- def GetRequestPlayerAward(self): return self.attrTuple[1] # 发布奖励物品 物品ID|个数 list
- def GetAssistPlayerAward(self): return self.attrTuple[2] # 协助奖励物品 物品ID|个数 list
-
# 功能特权奖励表
class IPY_FuncSysPrivilege():
@@ -5631,6 +5661,11 @@
self.__LoadFileData("GubaoResonance", onlyCheck)
self.__LoadFileData("GubaoStar", onlyCheck)
self.__LoadFileData("GubaoLV", onlyCheck)
+ self.__LoadFileData("Beauty", onlyCheck)
+ self.__LoadFileData("BeautyQualityLV", onlyCheck)
+ self.__LoadFileData("BeautySkin", onlyCheck)
+ self.__LoadFileData("TravelEvent", onlyCheck)
+ self.__LoadFileData("TravelScenery", onlyCheck)
self.__LoadFileData("PlayerLV", onlyCheck)
self.__LoadFileData("SpecMapPlayerAttrFormat", onlyCheck)
self.__LoadFileData("GMAttr", onlyCheck)
@@ -5669,7 +5704,6 @@
self.__LoadFileData("CTGSelectItem", onlyCheck)
self.__LoadFileData("FirstCharge", onlyCheck)
self.__LoadFileData("LVAward", onlyCheck)
- self.__LoadFileData("XBXZ", onlyCheck)
self.__LoadFileData("TreasureSet", onlyCheck)
self.__LoadFileData("TreasureHouse", onlyCheck)
self.__LoadFileData("TreasureItemLib", onlyCheck)
@@ -5744,9 +5778,6 @@
self.__LoadFileData("ActFeastWish", onlyCheck)
self.__LoadFileData("ActFeastWishBottle", onlyCheck)
self.__LoadFileData("ActFeastWishPool", onlyCheck)
- self.__LoadFileData("ActFeastTravel", onlyCheck)
- self.__LoadFileData("ActFeastTravelTask", onlyCheck)
- self.__LoadFileData("ActFeastTravelAward", onlyCheck)
self.__LoadFileData("ActFeastWeekParty", onlyCheck)
self.__LoadFileData("FeastWeekParty", onlyCheck)
self.__LoadFileData("NewAllPeopleParty", onlyCheck)
@@ -5773,7 +5804,6 @@
self.__LoadFileData("LoveRing", onlyCheck)
self.__LoadFileData("LoveCharm", onlyCheck)
self.__LoadFileData("HorsePetSkin", onlyCheck)
- self.__LoadFileData("AssistThanksGift", onlyCheck)
self.__LoadFileData("FuncSysPrivilege", onlyCheck)
self.__LoadFileData("HistoryRechargeAward", onlyCheck)
self.__LoadFileData("CustomAward", onlyCheck)
@@ -6494,6 +6524,41 @@
self.CheckLoadData("GubaoLV")
return self.ipyGubaoLVCache[index]
+ def GetBeautyCount(self):
+ self.CheckLoadData("Beauty")
+ return self.ipyBeautyLen
+ def GetBeautyByIndex(self, index):
+ self.CheckLoadData("Beauty")
+ return self.ipyBeautyCache[index]
+
+ def GetBeautyQualityLVCount(self):
+ self.CheckLoadData("BeautyQualityLV")
+ return self.ipyBeautyQualityLVLen
+ def GetBeautyQualityLVByIndex(self, index):
+ self.CheckLoadData("BeautyQualityLV")
+ return self.ipyBeautyQualityLVCache[index]
+
+ def GetBeautySkinCount(self):
+ self.CheckLoadData("BeautySkin")
+ return self.ipyBeautySkinLen
+ def GetBeautySkinByIndex(self, index):
+ self.CheckLoadData("BeautySkin")
+ return self.ipyBeautySkinCache[index]
+
+ def GetTravelEventCount(self):
+ self.CheckLoadData("TravelEvent")
+ return self.ipyTravelEventLen
+ def GetTravelEventByIndex(self, index):
+ self.CheckLoadData("TravelEvent")
+ return self.ipyTravelEventCache[index]
+
+ def GetTravelSceneryCount(self):
+ self.CheckLoadData("TravelScenery")
+ return self.ipyTravelSceneryLen
+ def GetTravelSceneryByIndex(self, index):
+ self.CheckLoadData("TravelScenery")
+ return self.ipyTravelSceneryCache[index]
+
def GetPlayerLVCount(self):
self.CheckLoadData("PlayerLV")
return self.ipyPlayerLVLen
@@ -6759,13 +6824,6 @@
def GetLVAwardByIndex(self, index):
self.CheckLoadData("LVAward")
return self.ipyLVAwardCache[index]
-
- def GetXBXZCount(self):
- self.CheckLoadData("XBXZ")
- return self.ipyXBXZLen
- def GetXBXZByIndex(self, index):
- self.CheckLoadData("XBXZ")
- return self.ipyXBXZCache[index]
def GetTreasureSetCount(self):
self.CheckLoadData("TreasureSet")
@@ -7285,27 +7343,6 @@
self.CheckLoadData("ActFeastWishPool")
return self.ipyActFeastWishPoolCache[index]
- def GetActFeastTravelCount(self):
- self.CheckLoadData("ActFeastTravel")
- return self.ipyActFeastTravelLen
- def GetActFeastTravelByIndex(self, index):
- self.CheckLoadData("ActFeastTravel")
- return self.ipyActFeastTravelCache[index]
-
- def GetActFeastTravelTaskCount(self):
- self.CheckLoadData("ActFeastTravelTask")
- return self.ipyActFeastTravelTaskLen
- def GetActFeastTravelTaskByIndex(self, index):
- self.CheckLoadData("ActFeastTravelTask")
- return self.ipyActFeastTravelTaskCache[index]
-
- def GetActFeastTravelAwardCount(self):
- self.CheckLoadData("ActFeastTravelAward")
- return self.ipyActFeastTravelAwardLen
- def GetActFeastTravelAwardByIndex(self, index):
- self.CheckLoadData("ActFeastTravelAward")
- return self.ipyActFeastTravelAwardCache[index]
-
def GetActFeastWeekPartyCount(self):
self.CheckLoadData("ActFeastWeekParty")
return self.ipyActFeastWeekPartyLen
@@ -7487,13 +7524,6 @@
def GetHorsePetSkinByIndex(self, index):
self.CheckLoadData("HorsePetSkin")
return self.ipyHorsePetSkinCache[index]
-
- def GetAssistThanksGiftCount(self):
- self.CheckLoadData("AssistThanksGift")
- return self.ipyAssistThanksGiftLen
- def GetAssistThanksGiftByIndex(self, index):
- self.CheckLoadData("AssistThanksGift")
- return self.ipyAssistThanksGiftCache[index]
def GetFuncSysPrivilegeCount(self):
self.CheckLoadData("FuncSysPrivilege")
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
index 79539df..74383d5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -2005,11 +2005,11 @@
return False
if isAuctionItem:
- ipyData = None #IpyGameDataPY.GetIpyGameData("AuctionItem", itemID)
- if not ipyData:
- GameWorld.ErrLog("非拍卖物品,默认转为非拍品! itemID=%s,itemCount=%s,isAuctionItem=%s"
- % (itemID, itemCount, isAuctionItem), curPlayer.GetPlayerID())
- isAuctionItem = 0
+ #ipyData = None #IpyGameDataPY.GetIpyGameData("AuctionItem", itemID)
+ #if not ipyData:
+ # GameWorld.ErrLog("非拍卖物品,默认转为非拍品! itemID=%s,itemCount=%s,isAuctionItem=%s"
+ # % (itemID, itemCount, isAuctionItem), curPlayer.GetPlayerID())
+ isAuctionItem = 0
defaultPack = IPY_GameWorld.rptItem if not packIndexList else packIndexList[0]
packIndex = ChConfig.GetItemPackType(curItemData, defaultPack)
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 6add269..7cf92c1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -49,7 +49,6 @@
import PlayerTongTianLing
import CrossPlayerData
import PlayerFeastWish
-import PlayerFeastTravel
import PlayerWeekParty
import NPCRealmRefresh
import PlayerActLogin
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 cff0141..1107e1b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -56,7 +56,6 @@
import PlayerBossReborn
import PlayerWeekParty
import PlayerFeastWeekParty
-import PlayerFeastTravel
import PlayerFeastLogin
import PlayerFeastWish
import PlayerActLogin
@@ -131,6 +130,8 @@
import PlayerTalk
import PlayerHero
import PlayerOnline
+import PlayerBeauty
+import PlayerTravel
import TurnAttack
import PlayerHJG
import ObjPool
@@ -636,8 +637,6 @@
PlayerFeastLogin.OnPlayerLogin(curPlayer)
# 节日祝福活动
PlayerFeastWish.OnPlayerLogin(curPlayer)
- # 节日游历活动
- PlayerFeastTravel.OnPlayerLogin(curPlayer)
# 登录奖励活动
PlayerActLogin.OnLogin(curPlayer)
# 炼器活动
@@ -732,6 +731,8 @@
UpdatePlayerName.OnPlayerLogin(curPlayer)
PlayerActivity.OnPlayerLogin(curPlayer)
PlayerLLMJ.OnPlayerLogin(curPlayer)
+ PlayerBeauty.OnPlayerLogin(curPlayer)
+ PlayerTravel.OnPlayerLogin(curPlayer)
# 上线查询一次充值订单
curPlayer.SendDBQueryRecharge()
@@ -3113,54 +3114,6 @@
curPlayer.Syn_OfflineTimeQueryResult() # 通知客服端离线时间
return
-
-#//B0 24 领取家族悬赏奖励 #tagReceiveFamilyArrestAward
-#
-#struct tagReceiveFamilyArrestAward
-#
-#{
-# tagHead Head;
-# DWORD ArrestID; //悬赏任务ID
-#};
-## 领取家族悬赏奖励
-# @param index: 玩家索引
-# @param clientData: 封包结构体
-# @param tick: 时间戳
-# @return: None
-def ReceiveFamilyArrestAward(index, clientData, tick):
- return
-
-
-#//B0 26 请求家族悬赏奖励领取情况 #tagQueryFamilyArrestAwardReceiveState
-#
-#struct tagQueryFamilyArrestAwardReceiveState
-#
-#{
-# tagHead Head;
-#};
-## 请求家族悬赏奖励领取情况
-# @param index: 玩家索引
-# @param clientData: 封包结构体
-# @param tick: 时间戳
-# @return: None
-def QueryFamilyArrestAwardReceiveState(index, clientData, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- Sync_FamilyArrestAwardReceiveState(curPlayer)
- return
-
-
-## 通知客户端家族悬赏任务奖励领取情况
-# @param curPlayer: 玩家实例
-# @return: None
-def Sync_FamilyArrestAwardReceiveState(curPlayer):
- awardReceiveState = ChPyNetSendPack.tagFamilyArrestAwardReceiveState()
- awardReceiveState.Clear()
-
- state = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyArrestAwardState)
- awardReceiveState.ReceiveState = state
- NetPackCommon.SendFakePack(curPlayer, awardReceiveState)
- return
-
def PlayerOnDay(curPlayer):
#玩法前瞻奖励
gameNoticeAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GameNoticeAwardState)
@@ -3233,6 +3186,9 @@
# 功能开启奖励
elif rewardType == ChConfig.Def_RewardType_OpenFunc:
GameFuncComm.GetFuncOpenAward(curPlayer, dataEx)
+ # 红颜等级奖励
+ elif rewardType == ChConfig.Def_RewardType_BeautyLVAward:
+ PlayerBeauty.GetBeautyLVAward(curPlayer, dataEx)
# 每日免费直购礼包
@@ -3283,9 +3239,6 @@
# 领取节日登录奖励
elif rewardType == ChConfig.Def_RewardType_FeastLogin:
PlayerFeastLogin.GetFeastLoginAward(curPlayer, dataEx)
- # 领取节日游历奖励
- elif rewardType == ChConfig.Def_RewardType_FeastTravel:
- PlayerFeastTravel.GetFeastTravelAward(curPlayer, dataEx)
# 领取登录活动奖励
elif rewardType == ChConfig.Def_RewardType_ActLoginAwardNew:
PlayerActLoginNew.OnGetActLoginAward(curPlayer, dataEx, dataExStr)
@@ -3400,6 +3353,9 @@
elif adAwardType == 3:
treasureType = adAwardValue
PlayerTreasure.DoTreasure(curPlayer, treasureType, PlayerTreasure.CostType_ADFree)
+ # 游历体力
+ elif adAwardType == 4:
+ PlayerTravel.AddTravelEnergy(curPlayer, adAwardValue)
return
def ADCntOnDay(curPlayer):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
index cb52de0..e88407c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
@@ -31,9 +31,8 @@
import PlayerActBuyCountGift
import PlayerActLoginNew
import PlayerActTask
-import IPY_GameWorld
-import ItemCommon
import ItemControler
+import PlayerTravel
import PlayerHorse
import PlayerArena
import PlayerTask
@@ -45,11 +44,12 @@
ShareDefine.GameFuncID_Arena:lambda curObj:PlayerArena.DoArenaOpen(curObj),
ShareDefine.GameFuncID_Shop:lambda curObj:FunctionNPCCommon.DoShopOpen(curObj),
ShareDefine.GameFuncID_Horse:lambda curObj:PlayerHorse.DoHorseOpen(curObj),
+ ShareDefine.GameFuncID_Travel:lambda curObj:PlayerTravel.DoTravelOpen(curObj),
}
def GetFuncOpenLVIpyData(funcID): return IpyGameDataPY.GetIpyGameData("FuncOpenLV", funcID)
-def DoFuncOpenLogic(curPlayer):
+def DoFuncOpenLogic(curPlayer, checkServerDay=True):
'''执行触发功能开启逻辑
@param finishMissionIDList: 完成的任务ID列表
'''
@@ -87,7 +87,7 @@
continue
limitOpenDay = ipyData.GetLimitOpenDay()
- if limitOpenDay and serverDay < limitOpenDay:
+ if limitOpenDay and serverDay < limitOpenDay and checkServerDay:
continue
# 先更新值再处理开启逻辑,不能可能导致在功能开启逻辑中再开启功能引发的递归死循环
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py
index 76ecda7..92bd1af 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py
@@ -373,5 +373,6 @@
def Sync_ArenaInfo(curPlayer):
clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCArenaPlayerInfo)
clientPack.Score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaScore)
+ clientPack.WinCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaWinCnt)
NetPackCommon.SendFakePack(curPlayer, clientPack)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py
new file mode 100644
index 0000000..7c358e6
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py
@@ -0,0 +1,626 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.PlayerBeauty
+#
+# @todo:红颜
+# @author hxp
+# @date 2025-11-21
+# @version 1.0
+#
+# 详细描述: 红颜
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-11-21 17:00"""
+#-------------------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import ItemCommon
+import PlayerOnline
+import PlayerControl
+import IpyGameDataPY
+import ChPyNetSendPack
+import PlayerGoldRush
+import NetPackCommon
+import ItemControler
+import PyGameData
+import PlayerTask
+import FBCommon
+import ObjPool
+
+# 红颜解锁方式
+(
+UnlockWay_Item, # 物品解锁 1
+UnlockWay_TaskID, # 完成主线任务ID 2
+UnlockWay_ArenaWinCnt, # 演武场胜利次数 3
+UnlockWay_GoldRushWorker, # 拥有监工数量 4
+UnlockWay_FBZhanchui, # 白骨盈野过关 5
+UnlockWay_OfficialRank, # 官职达到 6
+UnlockWay_TravelCnt, # 游历次数 7
+) = range(1, 1 + 7)
+
+# 皮肤解锁方式
+UnlockWaySkin_Default = 1 # 默认解锁 1
+UnlockWaySkin_Item = 2 # 物品解锁 2
+
+# 红颜效果类型
+(
+EffType_BootyPer, # 1. 主线战利品上限提高百分比(对所有主线战利品生效) Value:百分比
+EffType_ArenaItemEx, # 2. 演武场挑战胜利,概率额外获得1个物品的概率 TypeValue:物品ID Value:概率
+EffType_TravelEnergy, # 3.游历体力上限增加 Value:增加上限
+EffType_FBZhanchuiAwardPer, # 4.白骨盈野扫荡奖励增加百分比 Value:百分比
+) = range(1, 1 + 4)
+
+def OnPlayerLogin(curPlayer):
+ SyncBeautyInfo(curPlayer)
+ return
+
+## Def_PDict_BeautyLVInfo 经验*10000+等级*10+是否已激活
+def GetBeautyState(curPlayer, beautyID):
+ ## 红颜激活状态
+ return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BeautyLVInfo % beautyID) % 10
+def SetBeautyState(curPlayer, beautyID, state):
+ ## 设置红颜激活状态
+ lvInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BeautyLVInfo % beautyID)
+ lvInfo = lvInfo / 10 * 10 + min(1, state)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BeautyLVInfo % beautyID, lvInfo)
+ return lvInfo
+def GetBeautyLVInfo(curPlayer, beautyID):
+ ## 获取红颜等级经验
+ lvInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BeautyLVInfo % beautyID)
+ exp = lvInfo / 10000
+ lv = lvInfo % 10000 / 10
+ return lv, exp
+def SetBeautyLVInfo(curPlayer, beautyID, lv, exp):
+ lvInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BeautyLVInfo % beautyID)
+ lvInfo = min(exp, 200000) * 10000 + min(lv, 999) * 10 + lvInfo % 10
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BeautyLVInfo % beautyID, lvInfo)
+ return lvInfo
+
+## Def_PDict_BeautySkinInfo 星级*100+是否使用+是否已激活
+def GetBeautySkinState(curPlayer, skinID):
+ ## 红颜时装激活状态
+ return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BeautySkinInfo % skinID) % 10
+def SetBeautySkinState(curPlayer, skinID, state):
+ info = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BeautySkinInfo % skinID)
+ info = info / 10 * 10 + min(1, state)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BeautySkinInfo % skinID, info)
+ return info
+def GetBeautySkinUsed(curPlayer, skinID):
+ ## 是否使用中
+ return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BeautySkinInfo % skinID) % 100 / 10
+def SetBeautySkinUsed(curPlayer, skinID, isUsed):
+ info = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BeautySkinInfo % skinID)
+ info = info / 100 * 100 + min(1, isUsed) * 10 + info % 10
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BeautySkinInfo % skinID, info)
+ return info
+def GetBeautySkinStar(curPlayer, skinID):
+ ## 红颜时装星级
+ return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BeautySkinInfo % skinID) / 100
+def SetBeautySkinStar(curPlayer, skinID, star):
+ info = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BeautySkinInfo % skinID)
+ info = star * 100 + info % 100
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BeautySkinInfo % skinID, info)
+ return info
+
+def IsBeautySkinCanUse(curPlayer, beautyID, skinID, ipyData=None):
+ ## 红颜时装是否可用
+ if GetBeautySkinState(curPlayer, skinID):
+ return True
+
+ if not ipyData:
+ ipyData = GetBeautySkinIpyData(curPlayer, beautyID, skinID)
+ if ipyData:
+ unlockWay = ipyData.GetUnlockWay()
+ if unlockWay == UnlockWaySkin_Default: # 默认激活的
+ return True
+
+ return False
+
+#// B2 19 红颜激活 #tagCSBeautyActivate
+#
+#struct tagCSBeautyActivate
+#{
+# tagHead Head;
+# WORD BeautyID; //红颜ID
+#};
+def OnBeautyActivate(index, curPackData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+ beautyID = curPackData.BeautyID
+
+ if GetBeautyState(curPlayer, beautyID):
+ GameWorld.DebugLog("红颜已经激活过! beautyID=%s" % beautyID, playerID)
+ return
+
+ ipyData = IpyGameDataPY.GetIpyGameData("Beauty", beautyID)
+ if not ipyData:
+ return
+
+ unlockWay = ipyData.GetUnlockWay()
+ unlockValue = ipyData.GetUnlockValue()
+ unlockNeedCnt = ipyData.GetUnlockNeedCnt()
+
+ if unlockWay == UnlockWay_Item:
+ needItemID = unlockValue
+ needItemCnt = unlockNeedCnt
+ itemCount = ItemControler.GetItemCountByID(curPlayer, needItemID)
+ if itemCount < needItemCnt:
+ GameWorld.DebugLog("激活红颜物品不足! beautyID=%s,needItemID=%s,itemCount=%s < %s" % (beautyID, needItemID, itemCount, needItemCnt), playerID)
+ return
+ ItemControler.DelItemCountByID(curPlayer, needItemID, needItemCnt)
+
+ elif unlockWay == UnlockWay_TaskID:
+ taskID = unlockValue
+ if not PlayerTask.IsTaskFinish(curPlayer, taskID):
+ GameWorld.DebugLog("激活红颜所需任务未完成! beautyID=%s,taskID=%s" % (beautyID, taskID), playerID)
+ return
+
+ elif unlockWay == UnlockWay_ArenaWinCnt:
+ needWinCnt = unlockNeedCnt
+ winCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaWinCnt)
+ if winCnt < needWinCnt:
+ GameWorld.DebugLog("激活红颜所需演武场胜利次数不足! beautyID=%s,winCnt=%s < %s" % (beautyID, winCnt, needWinCnt), playerID)
+ return
+
+ elif unlockWay == UnlockWay_GoldRushWorker:
+ needWorkerCnt = unlockNeedCnt
+ workerTotal = PlayerGoldRush.GetWorkerTotal(curPlayer)
+ if workerTotal < needWorkerCnt:
+ GameWorld.DebugLog("激活红颜所需监工不足! beautyID=%s,workerTotal=%s < %s" % (beautyID, workerTotal, needWorkerCnt), playerID)
+ return
+
+ elif unlockWay == UnlockWay_FBZhanchui:
+ mapID = ChConfig.Def_FBMapID_Zhanchui
+ funcLineID = unlockValue
+ isPass = FBCommon.IsFBPass(curPlayer, mapID, funcLineID)
+ if not isPass:
+ GameWorld.DebugLog("激活红颜所需副本未过关! beautyID=%s,mapID=%s,funcLineID=%s" % (beautyID, mapID, funcLineID), playerID)
+ return
+
+ elif unlockWay == UnlockWay_OfficialRank:
+ realmLV = curPlayer.GetOfficialRank()
+ needRealmLV = unlockValue
+ if realmLV < needRealmLV:
+ GameWorld.DebugLog("激活红颜所需官职不足! beautyID=%s,realmLV=%s < %s" % (beautyID, realmLV, needRealmLV), playerID)
+ return
+
+ elif unlockWay == UnlockWay_TravelCnt:
+ travelCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelCnt)
+ needTravelCnt = unlockNeedCnt
+ if travelCnt < needTravelCnt:
+ GameWorld.DebugLog("激活红颜所需游历次数不足! beautyID=%s,travelCnt=%s < %s" % (beautyID, travelCnt, needTravelCnt), playerID)
+ return
+
+ else:
+ GameWorld.DebugLog("该红颜不支持激活! beautyID=%s,unlockWay=%s" % (beautyID, unlockWay), playerID)
+ return
+
+ DoBeautyActivate(curPlayer, beautyID)
+ return
+
+def DoBeautyActivate(curPlayer, beautyID):
+ ## 执行激活红颜逻辑
+ if GetBeautyState(curPlayer, beautyID):
+ return
+ lv, exp = 0, 0
+ SetBeautyState(curPlayer, beautyID, 1)
+ SetBeautyLVInfo(curPlayer, beautyID, lv, exp)
+ GameWorld.DebugLog("红颜激活成功! beautyID=%s" % beautyID, curPlayer.GetPlayerID())
+ RefreshBeautyAttr(curPlayer)
+ SyncBeautyInfo(curPlayer, [beautyID])
+ return
+
+#// B2 20 红颜好感度升级 #tagCSBeautyLVUP
+#
+#struct tagCSBeautyLVUP
+#{
+# tagHead Head;
+# WORD BeautyID; //红颜ID
+# DWORD ItemID; //使用物品ID
+# BYTE IsQuick; // 是否快速升级,0-只消耗1个道具;1-消耗升1级的道具
+#};
+def OnBeautyLVUP(index, curPackData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+ beautyID = curPackData.BeautyID
+ itemID = curPackData.ItemID
+ isQuick = curPackData.IsQuick
+
+ if not GetBeautyState(curPlayer, beautyID):
+ GameWorld.DebugLog("红颜未激活! beautyID=%s" % beautyID, playerID)
+ return
+
+ ipyData = IpyGameDataPY.GetIpyGameData("Beauty", beautyID)
+ if not ipyData:
+ return
+ quality = ipyData.GetBeautyQuality()
+ curLV, curExp = GetBeautyLVInfo(curPlayer, beautyID)
+
+ isCommItem = True # 是否使用的常规通用物品
+ commItemIDList = IpyGameDataPY.GetFuncEvalCfg("BeautyLVUP", 1)
+ commExpList = IpyGameDataPY.GetFuncEvalCfg("BeautyLVUP", 2)
+ if itemID in commItemIDList:
+ index = commItemIDList.index(itemID)
+ perExp = commExpList[index] if len(commExpList) > index else 0
+ else:
+ isCommItem = False
+ unlockWay = ipyData.GetUnlockWay()
+ unlockValue = ipyData.GetUnlockValue()
+ if unlockWay != UnlockWay_Item:
+ GameWorld.DebugLog("非道具激活的不支持专属信物ID升级! beautyID=%s,unlockWay=%s" % (beautyID, unlockWay), playerID)
+ return
+ if itemID != unlockValue:
+ GameWorld.DebugLog("非该红颜专属信物ID! beautyID=%s,itemID=%s != %s" % (beautyID, itemID, unlockValue), playerID)
+ return
+ perExp = IpyGameDataPY.GetFuncCfg("BeautyLVUP", 3)
+
+ if perExp <= 0:
+ return
+
+ nextLV = curLV + 1
+ nextLVIpyData = IpyGameDataPY.GetIpyGameData("BeautyQualityLV", quality, nextLV)
+ if not nextLVIpyData:
+ GameWorld.DebugLog("红颜已满级! beautyID=%s,quality=%s,curLV=%s" % (beautyID, quality, curLV), playerID)
+ return
+ lvNeedExp = nextLVIpyData.GetLVNeedExp()
+
+ costItemCount = 0
+ needExp = lvNeedExp - curExp # 升级还需经验
+ if needExp > 0:
+ if isQuick:
+ costItemCount = needExp / perExp
+ if needExp % perExp > 0:
+ costItemCount += 1
+ else:
+ costItemCount = 1
+
+ if costItemCount < 1:
+ return
+
+ if isCommItem:
+ costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, itemID, costItemCount)
+ lackCnt = costItemCount - bindCnt - unBindCnt
+ if lackCnt > 0:
+ costItemCount -= lackCnt
+ GameWorld.DebugLog("消耗道具不足,有多少消耗多少! itemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s"
+ % (itemID, costItemCount, bindCnt, unBindCnt, lackCnt))
+ # 扣除消耗
+ if costItemCount > 0:
+ ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, costItemCount, "Beauty")
+ else:
+ itemCount = ItemControler.GetItemCountByID(curPlayer, itemID)
+ if itemCount < costItemCount:
+ costItemCount = itemCount
+
+ if costItemCount > 0:
+ ItemControler.SetItemCountByID(curPlayer, itemID, itemCount - costItemCount)
+
+ addExp = costItemCount * perExp
+ updExp = curExp + addExp
+ GameWorld.DebugLog("红颜加经验: beautyID=%s,quality=%s,curLV=%s,curExp=%s,addExp=%s,updExp=%s/%s,itemID=%s,costItemCount=%s,perExp=%s"
+ % (beautyID, quality, curLV, curExp, addExp, updExp, lvNeedExp, itemID, costItemCount, perExp))
+
+ updLV = curLV
+ if updExp >= lvNeedExp:
+ updExp -= lvNeedExp
+ updLV += 1
+ GameWorld.DebugLog(" 升级: updLV=%s,updExp=%s" % (updLV, updExp))
+
+ SetBeautyLVInfo(curPlayer, beautyID, updLV, updExp)
+
+ SyncBeautyInfo(curPlayer, [beautyID])
+
+ # 有升级额外处理
+ if updLV > updLV:
+ RefreshBeautyAttr(curPlayer)
+
+ return
+
+def GetBeautyLVAward(curPlayer, beautyID):
+ ## 领取红颜等级奖励
+ if not GetBeautyState(curPlayer, beautyID):
+ GameWorld.DebugLog("红颜未激活! beautyID=%s" % beautyID)
+ return
+
+ ipyData = IpyGameDataPY.GetIpyGameData("Beauty", beautyID)
+ if not ipyData:
+ return
+ quality = ipyData.GetBeautyQuality()
+
+ curLV = GetBeautyLVInfo(curPlayer, beautyID)[0]
+ awardLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BeautyAwardLV % beautyID)
+ if awardLV >= curLV:
+ GameWorld.DebugLog("当前没有红颜等级奖励可领取! beautyID=%s,quality=%s,awardLV=%s >= curLV=%s" % (beautyID, quality, awardLV, curLV))
+ return
+ GameWorld.DebugLog("领取红颜等级奖励: beautyID=%s,quality=%s,curLV=%s,awardLV=%s" % (beautyID, quality, curLV, awardLV))
+
+ updAwardLV = awardLV
+ itemDict = {}
+ for getLV in range(awardLV + 1, curLV + 1):
+ lvIpyData = IpyGameDataPY.GetIpyGameData("BeautyQualityLV", quality, getLV)
+ if not lvIpyData:
+ break
+ itemList = lvIpyData.GetAwardItemList()
+ for itemInfo in itemList:
+ itemID = itemInfo[0]
+ itemCount = itemInfo[1]
+ itemDict[itemID] = itemDict.get(itemID, 0) + itemCount
+ updAwardLV = getLV
+
+ if not itemDict:
+ return
+ awardItemList = [[itemID, itemCount] for itemID, itemCount in itemDict.items()]
+ GameWorld.DebugLog(" updAwardLV=%s,awardItemList=%s" % (updAwardLV, awardItemList))
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BeautyAwardLV % beautyID, updAwardLV)
+ SyncBeautyInfo(curPlayer, [beautyID])
+ ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["BeautyLVAward", False, {}])
+ return
+
+#// B2 21 红颜时装操作 #tagCSBeautySkinOP
+#
+#struct tagCSBeautySkinOP
+#{
+# tagHead Head;
+# WORD BeautyID; //红颜ID
+# WORD SkinID; //时装ID
+# BYTE OPType; //操作 1-激活;2-佩戴;3-升星
+#};
+def OnBeautySkinOP(index, curPackData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+ beautyID = curPackData.BeautyID
+ skinID = curPackData.SkinID
+ opType = curPackData.OPType
+
+ if not GetBeautyState(curPlayer, beautyID):
+ GameWorld.DebugLog("红颜未激活! beautyID=%s" % beautyID, playerID)
+ return
+
+ if opType == 1:
+ OnBeautySkinActivate(curPlayer, beautyID, skinID)
+ elif opType == 2:
+ OnUseBeautySkin(curPlayer, beautyID, skinID)
+ elif opType == 3:
+ OnBeautySkinStarUP(curPlayer, beautyID, skinID)
+ return
+
+def GetBeautySkinIpyData(curPlayer, beautyID, skinID):
+ ipyDataList = IpyGameDataPY.GetIpyGameDataList("BeautySkin", beautyID)
+ if not ipyDataList:
+ return
+ for ipyData in ipyDataList:
+ if ipyData.GetSkinID() == skinID:
+ return ipyData
+ return
+
+def OnBeautySkinActivate(curPlayer, beautyID, skinID):
+ ## 红颜时装激活
+ if GetBeautySkinState(curPlayer, skinID):
+ GameWorld.DebugLog("红颜皮肤已激活! beautyID=%s,skinID=%s" % (beautyID, skinID))
+ return
+
+ ipyData = GetBeautySkinIpyData(curPlayer, beautyID, skinID)
+ if not ipyData:
+ return
+ unlockWay = ipyData.GetUnlockWay()
+ unlockValue = ipyData.GetUnlockValue()
+ unlockNeedCnt = ipyData.GetUnlockNeedCnt()
+
+ if unlockWay == UnlockWaySkin_Item:
+ needItemID = unlockValue
+ needItemCnt = unlockNeedCnt
+ itemCount = ItemControler.GetItemCountByID(curPlayer, needItemID)
+ if itemCount < needItemCnt:
+ GameWorld.DebugLog("激活红颜时装物品不足! beautyID=%s,needItemID=%s,itemCount=%s < %s" % (beautyID, needItemID, itemCount, needItemCnt))
+ return
+ ItemControler.DelItemCountByID(curPlayer, needItemID, needItemCnt)
+
+ else:
+ GameWorld.DebugLog("红颜皮肤不需要激活! beautyID=%s,skinID=%s" % (beautyID, skinID))
+ return
+
+ SetBeautySkinState(curPlayer, skinID, 1)
+ GameWorld.DebugLog("红颜皮肤激活: beautyID=%s,skinID=%s" % (beautyID, skinID))
+ RefreshBeautyAttr(curPlayer)
+ SyncBeautyInfo(curPlayer, [beautyID], [skinID])
+ return
+
+def OnUseBeautySkin(curPlayer, beautyID, skinID):
+ playerID = curPlayer.GetPlayerID()
+ if not IsBeautySkinCanUse(curPlayer, beautyID, skinID):
+ GameWorld.DebugLog("该红颜时装不可用! beautyID=%s,skinID=%s" % (beautyID, skinID), playerID)
+ return
+ GameWorld.DebugLog("穿戴 红颜时装! beautyID=%s,skinID=%s" % (beautyID, skinID), playerID)
+ ipyDataList = IpyGameDataPY.GetIpyGameDataList("BeautySkin", beautyID)
+ if not ipyDataList:
+ return
+ skinIDList = []
+ for ipyData in ipyDataList:
+ ipySkinID = ipyData.GetSkinID()
+ if ipySkinID == skinID:
+ SetBeautySkinUsed(curPlayer, skinID, 1)
+ elif GetBeautySkinUsed(curPlayer, ipySkinID):
+ SetBeautySkinUsed(curPlayer, ipySkinID, 0)
+ else:
+ continue
+ skinIDList.append(ipySkinID)
+ SyncBeautyInfo(curPlayer, [beautyID], skinIDList)
+ return
+
+def OnBeautySkinStarUP(curPlayer, beautyID, skinID):
+ playerID = curPlayer.GetPlayerID()
+ if not IsBeautySkinCanUse(curPlayer, beautyID, skinID):
+ GameWorld.DebugLog("该红颜时装不可用! beautyID=%s,skinID=%s" % (beautyID, skinID), playerID)
+ return
+ ipyData = GetBeautySkinIpyData(curPlayer, beautyID, skinID)
+ if not ipyData:
+ return
+ starMax = ipyData.GetStarMax()
+ curStar = GetBeautySkinStar(curPlayer, skinID)
+ if curStar >= starMax:
+ GameWorld.DebugLog("红颜时装星级已满! skinID=%s,curStar=%s >= %s" % (skinID, curStar, starMax), playerID)
+ return
+ if ipyData.GetUnlockWay() != UnlockWaySkin_Item:
+ return
+ needItemID = ipyData.GetUnlockValue()
+ needItemCnt = ipyData.GetUpNeedCnt()
+ if not needItemID or not needItemCnt:
+ return
+ itemCount = ItemControler.GetItemCountByID(curPlayer, needItemID)
+ if itemCount < needItemCnt:
+ GameWorld.DebugLog("红颜时装升星物品不足! skinID=%s,needItemID=%s,itemCount=%s < %s" % (skinID, needItemID, itemCount, needItemCnt))
+ return
+ ItemControler.DelItemCountByID(curPlayer, needItemID, needItemCnt)
+
+ nextStar = curStar + 1
+ GameWorld.DebugLog("红颜时装升星! skinID=%s,nextStar=%s" % (skinID, nextStar), playerID)
+ SetBeautySkinStar(curPlayer, skinID, nextStar)
+ RefreshBeautyAttr(curPlayer)
+ SyncBeautyInfo(curPlayer, [beautyID], [skinID])
+ return
+
+def RefreshBeautyAttr(curPlayer):
+ CalcBeautyAttr(curPlayer)
+ PlayerOnline.GetOnlinePlayer(curPlayer).RefreshRoleAttr()
+ return
+
+def CalcBeautyAttr(curPlayer):
+
+ playerID = curPlayer.GetPlayerID()
+ attrDict = {}
+ effTypeDict = {} # 特殊效果缓存
+
+ talentLVUPPer = IpyGameDataPY.GetFuncCfg("BeautyLVUP", 4) # 每x级好感度提升一级天赋效果
+
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in range(ipyDataMgr.GetBeautyCount()):
+ ipyData = ipyDataMgr.GetBeautyByIndex(index)
+ beautyID = ipyData.GetBeautyID()
+ if not GetBeautyState(curPlayer, beautyID):
+ continue
+ quality = ipyData.GetBeautyQuality()
+ beautyLV = GetBeautyLVInfo(curPlayer, beautyID)[0]
+ # 等级属性
+ for lv in range(beautyLV + 1):
+ lvIpyData = IpyGameDataPY.GetIpyGameData("BeautyQualityLV", quality, lv)
+ if not lvIpyData:
+ continue
+ lvAttrIDList = lvIpyData.GetAttrIDList()
+ lvAttrValueList = lvIpyData.GetAttrValueList()
+ for lvIndex, attrID in enumerate(lvAttrIDList):
+ attrValue = lvAttrValueList[lvIndex] if len(lvAttrValueList) > lvIndex else 0
+ attrDict[attrID] = attrDict.get(attrID, 0) + attrValue
+ #GameWorld.DebugLog("红颜等级属性: beautyID=%s,quality=%s,beautyLV=%s,%s" % (beautyID, quality, beautyLV, attrDict), playerID)
+
+ # 天赋属性
+ talentAttrIDList = ipyData.GetTalentAttrIDList()
+ talentAttrValueList = ipyData.GetTalentAttrValueList()
+ talentPerLVAddList = ipyData.GetTalentPerLVAddList()
+ talentLV = beautyLV / talentLVUPPer
+ for tIndex, attrID in enumerate(talentAttrIDList):
+ initValue = talentAttrValueList[tIndex] if len(talentAttrValueList) > tIndex else 0
+ perLVAdd = talentPerLVAddList[tIndex] if len(talentPerLVAddList) > tIndex else 0
+ attrValue = initValue + perLVAdd * talentLV
+ attrDict[attrID] = attrDict.get(attrID, 0) + attrValue
+ #GameWorld.DebugLog("红颜天赋属性: beautyID=%s,talentLV=%s,%s" % (beautyID, talentLV, attrDict), playerID)
+
+ # 特殊效果
+ effType = ipyData.GetEffType()
+ effTypeValue = ipyData.GetEffTypeValue()
+ effValue = ipyData.GetEffValue()
+ effPerLVAdd = ipyData.GetEffPerLVAdd()
+ if effType:
+ effValue = effValue + effPerLVAdd * talentLV
+ effTypeDict[effType] = [effValue, effTypeValue]
+ #GameWorld.DebugLog("红颜特殊效果: beautyID=%s,effType=%s,talentLV=%s,%s" % (beautyID, effType, talentLV, effTypeDict), playerID)
+
+ # 时装
+ ipyDataList = IpyGameDataPY.GetIpyGameDataList("BeautySkin", beautyID)
+ if not ipyDataList:
+ continue
+ for skinIpyData in ipyDataList:
+ skinID = skinIpyData.GetSkinID()
+ if not IsBeautySkinCanUse(curPlayer, beautyID, skinID, skinIpyData):
+ continue
+
+ attrIDList = skinIpyData.GetAttrIDList()
+ initAttrValueList = skinIpyData.GetInitAttrValueList()
+ perStarAddList = skinIpyData.GetAttrPerStarAddList()
+ star = GetBeautySkinStar(curPlayer, skinID)
+ for sIndex, attrID in enumerate(attrIDList):
+ initValue = initAttrValueList[sIndex] if len(initAttrValueList) > sIndex else 0
+ perStarAdd = perStarAddList[sIndex] if len(perStarAddList) > sIndex else 0
+ attrValue = initValue + perStarAdd * star
+ attrDict[attrID] = attrDict.get(attrID, 0) + attrValue
+ #GameWorld.DebugLog("红颜时装属性: beautyID=%s,skinID=%s,star=%s,%s" % (beautyID, skinID, star, attrDict), playerID)
+
+ # 保存计算值
+ GameWorld.DebugLog("红颜属性: %s" % attrDict, playerID)
+ GameWorld.DebugLog("红颜效果: %s" % effTypeDict, playerID)
+ PyGameData.g_beautyEffTypeDict[playerID] = effTypeDict
+ PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_Beauty, attrDict)
+ return
+
+def GetBeautyEffInfo(curPlayer, effType):
+ ## 获取红颜特殊效果信息
+ # @return: effValue, effTypeValue
+ effTypeDict = PyGameData.g_beautyEffTypeDict.get(curPlayer.GetPlayerID(), {})
+ return effTypeDict.get(effType, [0, 0])
+
+def SyncBeautyInfo(curPlayer, beautyIDList=None, skinIDList=None):
+ if beautyIDList == None:
+ syncBeautyIDList = []
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in range(ipyDataMgr.GetBeautyCount()):
+ ipyData = ipyDataMgr.GetBeautyByIndex(index)
+ syncBeautyIDList.append(ipyData.GetBeautyID())
+ else:
+ syncBeautyIDList = beautyIDList
+
+ beautyList = []
+ for beautyID in syncBeautyIDList:
+ state = GetBeautyState(curPlayer, beautyID)
+ if not state and beautyIDList == None:
+ continue
+ lv, exp = GetBeautyLVInfo(curPlayer, beautyID)
+ beauty = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCBeauty)
+ beauty.BeautyID = beautyID
+ beauty.State = state
+ beauty.LV = lv
+ beauty.Exp = exp
+ beauty.AwardLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BeautyAwardLV % beautyID)
+
+ beauty.SkinList = []
+ ipyDataList = IpyGameDataPY.GetIpyGameDataList("BeautySkin", beautyID)
+ if ipyDataList:
+ for ipyData in ipyDataList:
+ skinID = ipyData.GetSkinID()
+ skinInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BeautySkinInfo % skinID)
+ if skinIDList != None:
+ if skinID not in skinIDList:
+ continue
+ else:
+ if not skinInfo:
+ continue
+ beautySkin = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCBeautySkin)
+ beautySkin.SkinID = skinID
+ beautySkin.State = 1 if IsBeautySkinCanUse(curPlayer, beautyID, skinID, ipyData) else 0
+ beautySkin.Used = GetBeautySkinUsed(curPlayer, skinID)
+ beautySkin.Star = GetBeautySkinStar(curPlayer, skinID)
+ beauty.SkinList.append(beautySkin)
+ beauty.SkinCnt = len(beauty.SkinList)
+
+ beautyList.append(beauty)
+
+ if not beautyList:
+ return
+
+ clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCBeautyInfo)
+ clientPack.BeautyList = beautyList
+ clientPack.Count = len(clientPack.BeautyList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerChatBox.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerChatBox.py
index 5142697..92745ec 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerChatBox.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerChatBox.py
@@ -206,7 +206,7 @@
if ipyData.GetUnlockWay() != 2:
return
itemID = ipyData.GetUnlockValue()
- itemCount = ipyData.GetUnlockNeedCnt()
+ itemCount = ipyData.GetUpNeedCnt()
if not itemID or not itemCount:
return
needItemList = [[itemID, itemCount]]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
index 52239dd..394c127 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
@@ -53,7 +53,6 @@
import CrossActCTGBillboard
import CrossActAllRecharge
import PlayerActGrowupBuy
-import PlayerFeastTravel
import PlayerWeekParty
import PlayerGoldInvest
import PlayerActTurntable
@@ -791,7 +790,6 @@
PlayerActSingleRecharge.UpdSingleRechargeValue(curPlayer, orderCoin, coinType) # 单笔累充
PlayerActTurntable.OnPlayerRecharge(curPlayer, orderCoin, coinType) # 转盘
PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Recharge, addVIPExp)
- PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_CTGExp, addVIPExp)
#投资
if ctgIpyData:
ctgID = ctgIpyData.GetRecordID()
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 3a2e2e4..9572b02 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -44,7 +44,6 @@
import GameFuncComm
import IpyGameDataPY
import PyGameData
-import PlayerFeastTravel
import PlayerActTurntable
import PlayerCostRebate
import PlayerActLunhuidian
@@ -2839,7 +2838,6 @@
# 消费返利
if costType not in ChConfig.CostRebate_DisableType:
PlayerCostRebate.AddCostRebateGold(curPlayer, costType, price, infoDict)
- PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_UseGold, price)
else:
GameWorld.DebugLog("不计入消费活动的消费类型!costType=%s" % costType, curPlayer.GetPlayerID())
@@ -2947,8 +2945,9 @@
return
SetMoney(curPlayer, priceType, updPlayerGold)
- if isGiveBourseMoney and updPlayerGold > 0:
- GiveMoney(curPlayer, ShareDefine.TYPE_Price_BourseMoney, min(value, updPlayerGold))
+ #废弃交易所额度
+ #if isGiveBourseMoney and updPlayerGold > 0:
+ # GiveMoney(curPlayer, ShareDefine.TYPE_Price_BourseMoney, min(value, updPlayerGold))
addDataDict["BourseMoney"] = GetMoney(curPlayer, ShareDefine.TYPE_Price_BourseMoney)
elif priceType == IPY_GameWorld.TYPE_Price_Gold_Paper:
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 ae4a996..47b50b2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -59,7 +59,6 @@
import PlayerBossReborn
import PlayerWeekParty
import PlayerFeastWeekParty
-import PlayerFeastTravel
import PlayerFeastLogin
import PlayerFeastWish
import PlayerActTask
@@ -86,6 +85,7 @@
import PlayerXiangong
import PlayerBillboard
import PlayerViewCache
+import GameFuncComm
import PlayerMail
import PlayerHero
import PlayerTree
@@ -245,7 +245,7 @@
# 常规过天
if onEventType == ShareDefine.Def_OnEventType:
-
+ GameFuncComm.DoFuncOpenLogic(curPlayer)
#清空每日事件奖励
curPlayer.SetDayProcessGameEventCount(0)
@@ -943,9 +943,6 @@
elif actionName == ShareDefine.OperationActionName_FeastWish:
PlayerFeastWish.RefreshFeastWishActionInfo()
-
- elif actionName == ShareDefine.OperationActionName_FeastTravel:
- PlayerFeastTravel.RefreshFeastTravelActionInfo()
elif actionName == ShareDefine.OperationActionName_FeastWeekParty:
PlayerFeastWeekParty.RefreshOperationAction_FeastWeekParty()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFace.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFace.py
index e252abc..96b370e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFace.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFace.py
@@ -219,7 +219,7 @@
if ipyData.GetUnlockWay() != 2:
return
itemID = ipyData.GetUnlockValue()
- itemCount = ipyData.GetUnlockNeedCnt()
+ itemCount = ipyData.GetUpNeedCnt()
if not itemID or not itemCount:
return
needItemList = [[itemID, itemCount]]
@@ -419,7 +419,7 @@
if ipyData.GetUnlockWay() != 2:
return
itemID = ipyData.GetUnlockValue()
- itemCount = ipyData.GetUnlockNeedCnt()
+ itemCount = ipyData.GetUpNeedCnt()
if not itemID or not itemCount:
return
needItemList = [[itemID, itemCount]]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
index 93c6f86..dceae35 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
@@ -30,6 +30,7 @@
import IPY_GameWorld
import ItemControler
import GameFuncComm
+import PlayerTask
import DBDataMgr
import DirtyList
import ObjPool
@@ -465,6 +466,7 @@
familyMgr.DelPlayerReqJoinFamilyIDAll(curPlayer.GetPlayerID())
Sync_RequestAddFamilyInfo(curPlayer)
PlayerFamilyTaofa.OnPlayerEnterFamily(curPlayer)
+ PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_ReqOrJoinFamily)
return
def __OnLeaveFamily(curPlayer, isVoluntarily, tick):
@@ -661,6 +663,7 @@
# 申请加入
if requestType == 0:
+ PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_ReqOrJoinFamily, 1)
if not tagFamilyID:
AutoJoinFamily(curPlayer)
else:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastTravel.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastTravel.py
deleted file mode 100644
index bb6a562..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastTravel.py
+++ /dev/null
@@ -1,312 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerFeastTravel
-#
-# @todo:节日游历
-# @author hxp
-# @date 2021-02-01
-# @version 1.0
-#
-# 详细描述: 节日游历
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-02-01 15:00"""
-#-------------------------------------------------------------------------------
-
-import PyGameData
-import ShareDefine
-import PlayerControl
-import IpyGameDataPY
-import ItemControler
-import ChPyNetSendPack
-import IPY_GameWorld
-import NetPackCommon
-import GameWorld
-import ChConfig
-
-def OnPlayerLogin(curPlayer):
- isReset = __CheckPlayerFeastTravelAction(curPlayer)
- if not isReset:
- actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastTravel, {})
- # 活动中同步活动信息
- if actInfo.get(ShareDefine.ActKey_State):
- Sync_FeastTravelActionInfo(curPlayer)
- Sync_FeastTravelPlayerInfo(curPlayer)
- return
-
-def RefreshFeastTravelActionInfo():
- ## 收到GameServer同步的活动信息,刷新活动信息
- playerManager = GameWorld.GetPlayerManager()
- for index in xrange(playerManager.GetPlayerCount()):
- curPlayer = playerManager.GetPlayerByIndex(index)
- if not GameWorld.IsNormalPlayer(curPlayer):
- continue
- __CheckPlayerFeastTravelAction(curPlayer)
- return
-
-def __CheckPlayerFeastTravelAction(curPlayer):
- ## 检查玩家活动信息
-
- playerID = curPlayer.GetPlayerID()
-
- actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastTravel, {})
- actID = actInfo.get(ShareDefine.ActKey_ID, 0)
- state = actInfo.get(ShareDefine.ActKey_State, 0)
-
- playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastTravelID) # 玩家身上的活动ID
- # 活动ID 相同的话不处理
- if actID == playerActID:
- GameWorld.DebugLog("节日游历活动ID不变,不处理!", curPlayer.GetPlayerID())
- return
- GameWorld.DebugLog("节日游历活动重置! actID=%s,playerActID=%s,state=%s" % (actID, playerActID, state), playerID)
-
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastTravelID, actID)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastTravelPoint, 0)
-
- if not state:
- return
-
- templateID = __GetTravelTemplateID()
-
- ipyMgr = IpyGameDataPY.IPY_Data()
- # 重置游历任务相关
- for index in xrange(ipyMgr.GetActFeastTravelTaskCount()):
- taskIpyData = ipyMgr.GetActFeastTravelTaskByIndex(index)
- taskID = taskIpyData.GetTraveTasklD()
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastTravelValue % taskID, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastTravelCount % taskID, 0)
-
- # 重置游历奖励
- for index in xrange(ipyMgr.GetActFeastTravelAwardCount()):
- awardIpyData = ipyMgr.GetActFeastTravelAwardByIndex(index)
- if templateID != awardIpyData.GetTemplatelD():
- continue
- recordIndex = awardIpyData.GetRecordIndex()
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastTravelAwardCount % recordIndex, 0)
-
- Sync_FeastTravelActionInfo(curPlayer)
- Sync_FeastTravelPlayerInfo(curPlayer)
- return True
-
-def __GetTravelTemplateID():
- actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastTravel, {})
- if not actInfo:
- return
-
- if not actInfo.get(ShareDefine.ActKey_State):
- return
-
- cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
- ipyData = IpyGameDataPY.GetIpyGameData("ActFeastTravel", cfgID)
- if not ipyData:
- return
-
- worldLV = actInfo.get(ShareDefine.ActKey_WorldLV)
- templateID = GameWorld.GetDictValueByRangeKey(ipyData.GetTemplateIDInfo(), worldLV, 0)
- return templateID
-
-def AddFeastTravelTaskValue(curPlayer, taskID, addValue=1):
- ## 增加游历任务完成进度
- actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastTravel, {})
- if not actInfo:
- return
- if not actInfo.get(ShareDefine.ActKey_State):
- return
- ipyData = IpyGameDataPY.GetIpyGameData("ActFeastTravelTask", taskID)
- if not ipyData:
- return
- maxFinishCount = ipyData.GetFinishTimeMax()
- curFinishCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastTravelCount % taskID)
- if maxFinishCount and curFinishCount >= maxFinishCount:
- GameWorld.DebugLog("该游历任务已达到最大完成次数!taskID=%s,curFinishCount=%s" % (taskID, curFinishCount))
- return
- curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastTravelValue % taskID)
- updValue = curValue + addValue
- GameWorld.DebugLog("增加游历进度: taskID=%s,curValue=%s,addValue=%s,updValue=%s" % (taskID, curValue, addValue, updValue))
-
- if maxFinishCount:
- maxValue = ipyData.GetFinishNeedValue() * maxFinishCount
- if updValue > maxValue:
- updValue = maxValue
- GameWorld.DebugLog(" 修正进度值不超过最大可完成次数的总进度值! maxFinishCount=%s,maxValue=%s,updValue=%s"
- % (maxFinishCount, maxValue, updValue))
-
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastTravelValue % taskID, updValue)
- updFinishCount = updValue / ipyData.GetFinishNeedValue()
- GameWorld.DebugLog(" curFinishCount=%s,updFinishCount=%s" % (curFinishCount, updFinishCount))
- # 增加完成次数
- if updFinishCount > curFinishCount:
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastTravelCount % taskID, updFinishCount)
- addFinishCount = updFinishCount - curFinishCount
- addTravelPointTotal = addFinishCount * ipyData.GetAddTravelPoint()
-
- curTravelPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastTravelPoint)
- updTravelPoint = curTravelPoint + addTravelPointTotal
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastTravelPoint, updTravelPoint)
- GameWorld.DebugLog(" 完成游历: addFinishCount=%s,addTravelPointTotal=%s,curTravelPoint=%s,updTravelPoint=%s"
- % (addFinishCount, addTravelPointTotal, curTravelPoint, updTravelPoint))
-
- Sync_FeastTravelPlayerInfo(curPlayer, taskID, -1) # 不通知奖励
- return True
-
-def GetFeastTravelAward(curPlayer, index):
- ## 节日游历领奖
-
- templateID = __GetTravelTemplateID()
- if not templateID:
- return
-
- ipyDataList = IpyGameDataPY.GetIpyGameDataList("ActFeastTravelAward", templateID)
- if not ipyDataList:
- return
-
- findIpyData = None
- for ipyData in ipyDataList:
- if index == ipyData.GetRecordIndex():
- findIpyData = ipyData
- break
-
- if not findIpyData:
- return
-
- getCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastTravelAwardCount % index)
- getCountMax = findIpyData.GetAwardCountMax()
- if getCountMax and getCount >= getCountMax:
- GameWorld.DebugLog(" 节日游历领奖已达最大领取次数! templateID=%s,index=%s,getCount=%s >= getCountMax=%s"
- % (templateID, index, getCount, getCountMax))
- return
-
- curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastTravelPoint)
- singleNeedPoint = findIpyData.GetNeedTravelPoint()
- canUsePoint = curPoint - getCount * singleNeedPoint
- if canUsePoint < singleNeedPoint:
- GameWorld.DebugLog(" 节日游历领奖游历值不足! templateID=%s,index=%s,curPoint=%s,getCount=%s,canUsePoint=%s < singleNeedPoint=%s"
- % (templateID, index, curPoint, getCount, canUsePoint, singleNeedPoint))
- return
-
- awardList = findIpyData.GetTravelAwardInfo()
- if not awardList:
- return
-
- if not ItemControler.CheckPackSpaceEnough(curPlayer, awardList):
- return
-
- updGetCount = getCount + 1
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastTravelAwardCount % index, updGetCount)
-
- GameWorld.DebugLog(" 节日游历领奖! templateID=%s,index=%s,curPoint=%s,getCount=%s,canUsePoint=%s,singleNeedPoint=%s,updGetCount=%s"
- % (templateID, index, curPoint, getCount, canUsePoint, singleNeedPoint, updGetCount))
-
- for itemID, itemCnt, isAuctionItem in awardList:
- ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, isAuctionItem, [IPY_GameWorld.rptItem], event=["FeastTravel", False, {}])
-
- Sync_FeastTravelPlayerInfo(curPlayer, -1, index) # 不通知任务
- return
-
-def Sync_FeastTravelPlayerInfo(curPlayer, taskID=None, awardIndex=None):
- ## 通知活动玩家信息
- # @param taskID: None-通知全部;>=0-单个通知;-1-不通知
-
- syncTaskIDList = []
- if taskID == None:
- ipyMgr = IpyGameDataPY.IPY_Data()
- for index in xrange(ipyMgr.GetActFeastTravelTaskCount()):
- taskIpyData = ipyMgr.GetActFeastTravelTaskByIndex(index)
- syncTaskIDList.append(taskIpyData.GetTraveTasklD())
- elif taskID >= 0:
- syncTaskIDList = [taskID]
-
- syncAwardIndexList = []
- if awardIndex == None:
- templateID = __GetTravelTemplateID()
- if templateID:
- awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActFeastTravelAward", templateID)
- if awardIpyDataList:
- syncAwardIndexList = [awardIpyData.GetRecordIndex() for awardIpyData in awardIpyDataList]
- elif awardIndex >= 0:
- syncAwardIndexList = [awardIndex]
-
- playerPack = ChPyNetSendPack.tagMCFeastTravelPlayerInfo()
- playerPack.TravelPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastTravelPoint)
- playerPack.TravelPlayerTaskList = []
- for taskID in syncTaskIDList:
- taskInfo = ChPyNetSendPack.tagMCFeastTravelPlayerTask()
- taskInfo.TravelTaskID = taskID
- taskInfo.TravelValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastTravelValue % taskID)
- taskInfo.FinishCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastTravelCount % taskID)
- playerPack.TravelPlayerTaskList.append(taskInfo)
- playerPack.TravelPlayerTaskCount = len(playerPack.TravelPlayerTaskList)
-
- playerPack.TravelPlayerAwardList = []
- for awardIndex in syncAwardIndexList:
- awardInfo = ChPyNetSendPack.tagMCFeastTravelPlayerAward()
- awardInfo.AwardIndex = awardIndex
- awardInfo.GetAwardCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastTravelAwardCount % awardIndex)
- playerPack.TravelPlayerAwardList.append(awardInfo)
- playerPack.TravelPlayerAwardCount = len(playerPack.TravelPlayerAwardList)
-
- NetPackCommon.SendFakePack(curPlayer, playerPack)
- return
-
-def Sync_FeastTravelActionInfo(curPlayer):
- ## 通知活动信息
- actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastTravel, {})
- if not actInfo:
- return
-
- if not actInfo.get(ShareDefine.ActKey_State):
- return
-
- cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
- ipyData = IpyGameDataPY.GetIpyGameData("ActFeastTravel", cfgID)
- if not ipyData:
- return
-
- worldLV = actInfo.get(ShareDefine.ActKey_WorldLV)
- templateID = GameWorld.GetDictValueByRangeKey(ipyData.GetTemplateIDInfo(), worldLV, 0)
- if not templateID:
- return
-
- startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
- actPack = ChPyNetSendPack.tagMCFeastTravelInfo()
- actPack.Clear()
- actPack.StartDate = startDateStr
- actPack.EndtDate = endDateStr
- actPack.LimitLV = ipyData.GetLVLimit()
- actPack.ResetType = ipyData.GetResetType()
-
- actPack.TravelTaskList = []
- ipyMgr = IpyGameDataPY.IPY_Data()
- for index in xrange(ipyMgr.GetActFeastTravelTaskCount()):
- taskIpyData = ipyMgr.GetActFeastTravelTaskByIndex(index)
- taskInfo = ChPyNetSendPack.tagMCFeastTravelTask()
- taskInfo.TravelTaskID = taskIpyData.GetTraveTasklD()
- taskInfo.FinishNeedValue = taskIpyData.GetFinishNeedValue()
- taskInfo.FinishTimeMax = taskIpyData.GetFinishTimeMax()
- taskInfo.AddTravelPoint = taskIpyData.GetAddTravelPoint()
- actPack.TravelTaskList.append(taskInfo)
- actPack.TravelTaskCount = len(actPack.TravelTaskList)
-
- awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActFeastTravelAward", templateID)
- actPack.TravelAwardList = []
- for awardIpyData in awardIpyDataList:
- awardInfo = ChPyNetSendPack.tagMCFeastTravelAward()
- awardInfo.AwardIndex = awardIpyData.GetRecordIndex()
- awardInfo.NeedTravelPoint = awardIpyData.GetNeedTravelPoint()
- awardInfo.AwardCountMax = awardIpyData.GetAwardCountMax()
- awardInfo.AwardItemList = []
- for itemID, itemCount, isAuctionItem in awardIpyData.GetTravelAwardInfo():
- itemInfo = ChPyNetSendPack.tagMCFeastTravelAwardItem()
- itemInfo.ItemID = itemID
- itemInfo.ItemCount = itemCount
- itemInfo.IsBind = isAuctionItem
- awardInfo.AwardItemList.append(itemInfo)
- awardInfo.AwardItemCount = len(awardInfo.AwardItemList)
- actPack.TravelAwardList.append(awardInfo)
- actPack.TravelAwardCount = len(actPack.TravelAwardList)
-
- NetPackCommon.SendFakePack(curPlayer, actPack)
- return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldRush.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldRush.py
index 0966036..556531d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldRush.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldRush.py
@@ -26,6 +26,7 @@
import GameFuncComm
import PlayerGubao
import ShareDefine
+import PlayerTask
import ObjPool
import time
@@ -269,13 +270,7 @@
if campID != cID:
atWorkCnt += wCnt
- workersTotal = 0 # 总工人数
- workerState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushWorkerState)
- for index in range(ipyDataMgr.GetGoldRushWorkerCount()):
- ipyData = ipyDataMgr.GetGoldRushWorkerByIndex(index)
- workerID = ipyData.GetWorkerID()
- if workerState & pow(2, workerID):
- workersTotal += 1
+ workersTotal = GetWorkerTotal(curPlayer) # 总工人数
idleWorkers = workersTotal - atWorkCnt # 空闲工人数
if idleWorkers <= 0:
GameWorld.DebugLog("没有空闲工人,无法开始淘金! atWorkCnt=%s >= %s" % (atWorkCnt, workersTotal))
@@ -321,7 +316,21 @@
campInfo = SetCampInfo(curPlayer, campID, refreshCnt, goldID, updWorkerCnt)
GameWorld.DebugLog(" updWorkerCnt=%s,realNeedSeconds=%s,endTime=%s,campInfo=%s"
% (updWorkerCnt, realNeedSeconds, GameWorld.ChangeTimeNumToStr(endTime), campInfo))
+
+ PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_GoldRush, 1)
return
+
+def GetWorkerTotal(curPlayer):
+ ## 获取监工总数
+ workersTotal = 0 # 总工人数
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ workerState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushWorkerState)
+ for index in range(ipyDataMgr.GetGoldRushWorkerCount()):
+ ipyData = ipyDataMgr.GetGoldRushWorkerByIndex(index)
+ workerID = ipyData.GetWorkerID()
+ if workerState & pow(2, workerID):
+ workersTotal += 1
+ return workersTotal
def __onGoldRushCancel(curPlayer, campID):
## 取消
@@ -404,6 +413,8 @@
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushWorkerState, workerState)
GameWorld.DebugLog("解锁淘金监工: workerID=%s,workerState=%s" % (workerID, workerState))
SyncGoldRushInfo(curPlayer)
+
+ PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_GoldRushWorkers)
return
#// B0 38 淘金仓库领奖 #tagCSGoldRushWarehouseAward
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHJG.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHJG.py
index bdf5c14..2275cca 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHJG.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHJG.py
@@ -401,7 +401,7 @@
if ipyData.GetUnlockWay() != 2:
return
itemID = ipyData.GetUnlockValue()
- itemCount = ipyData.GetUnlockNeedCnt()
+ itemCount = ipyData.GetUpNeedCnt()
if not itemID or not itemCount:
return
needItemList = [[itemID, itemCount]]
@@ -623,7 +623,7 @@
if ipyData.GetUnlockWay() != 2:
return
itemID = ipyData.GetUnlockValue()
- itemCount = ipyData.GetUnlockNeedCnt()
+ itemCount = ipyData.GetUpNeedCnt()
if not itemID or not itemCount:
return
needItemList = [[itemID, itemCount]]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
index d429bc5..420847f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
@@ -25,6 +25,7 @@
import NetPackCommon
import PlayerControl
import PlayerOnline
+import PlayerTask
import GameWorld
import ChConfig
@@ -353,6 +354,7 @@
PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_HeroLVUP, 1)
+ PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_HeroLVUP)
return
def GetHeroLVMax(heroItem):
@@ -472,6 +474,8 @@
if addStar > 0:
__DoHeroStarTalentUp(item, addStar)
PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_HeroStarUP, addStar)
+ PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_HeroStarUP, addStar)
+
if isSync:
heroItem.Sync_Item()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
index 85b2211..729cf68 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
@@ -25,6 +25,7 @@
import IpyGameDataPY
import GameFuncComm
import PlayerOnline
+import PlayerTask
import GameWorld
import ObjPool
@@ -119,6 +120,8 @@
# 有升级额外处理
if updHorseLV > horseLV:
RefreshHorseAttr(curPlayer)
+
+ PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_HorseLVUP, costItemCount)
return
#// B2 02 坐骑进阶 #tagCSHorseClassUP
@@ -308,21 +311,25 @@
ipyData = IpyGameDataPY.GetIpyGameData("HorseSkin", horseSkinID)
if not ipyData:
return
- if ipyData.GetUnlockWay() != 2:
- GameWorld.DebugLog("非道具激活的不用添加: horseSkinID=%s" % (horseSkinID), playerID)
- return
if not isFree:
- itemID = ipyData.GetUnlockValue()
- itemCount = ipyData.GetUnlockNeedCnt()
- if not itemID or not itemCount:
- return
- needItemList = [[itemID, itemCount]]
- itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
- lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
- if lackItemDict:
- GameWorld.DebugLog("激活所需物品不足! horseSkinID=%s,lackItemDict=%s" % (horseSkinID, lackItemDict), playerID)
- return
- ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "AddHorseSkin")
+ unlockWay = ipyData.GetUnlockWay()
+ if unlockWay == 1:
+ classLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorseClassLV)
+ if classLV < ipyData.GetUnlockValue():
+ GameWorld.DebugLog("坐骑阶级不足无法解锁! classLV=%s < %s" % (classLV, ipyData.GetUnlockValue()), playerID)
+ return
+ elif unlockWay == 2:
+ itemID = ipyData.GetUnlockValue()
+ itemCount = ipyData.GetUnlockNeedCnt()
+ if not itemID or not itemCount:
+ return
+ needItemList = [[itemID, itemCount]]
+ itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+ lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
+ if lackItemDict:
+ GameWorld.DebugLog("激活所需物品不足! horseSkinID=%s,lackItemDict=%s" % (horseSkinID, lackItemDict), playerID)
+ return
+ ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "AddHorseSkin")
ipyExpireSeconds = ipyData.GetExpireMinutes() * 60
@@ -388,6 +395,8 @@
for index in range(ipyDataMgr.GetHorseSkinCount()):
ipyData = ipyDataMgr.GetHorseSkinByIndex(index)
horseSkinID = ipyData.GetSkinID()
+ if horseSkinID <= 0:
+ continue
if ipyData.GetUnlockWay() != 1:
continue
if ipyData.GetUnlockValue() > 0:
@@ -407,9 +416,11 @@
if ipyData:
unlockWay = ipyData.GetUnlockWay()
if unlockWay == 1:
- classLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorseClassLV)
- if classLV >= ipyData.GetUnlockValue():
+ if not ipyData.GetUnlockValue():
return True
+ #classLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorseClassLV)
+ #if classLV >= ipyData.GetUnlockValue():
+ # return True
return False
@@ -437,7 +448,7 @@
if ipyData.GetUnlockWay() != 2:
return
itemID = ipyData.GetUnlockValue()
- itemCount = ipyData.GetUnlockNeedCnt()
+ itemCount = ipyData.GetUpNeedCnt()
if not itemID or not itemCount:
return
needItemList = [[itemID, itemCount]]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
index a2775f6..72f47e8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
@@ -24,6 +24,7 @@
import IpyGameDataPY
import FormulaControl
import PlayerPrestigeSys
+import PlayerBeauty
import PlayerFamily
import PlayerHorse
import PlayerGubao
@@ -422,6 +423,7 @@
PlayerGubao.CalcGubaoAttr(curPlayer)
PlayerHJG.CalcHJGAttr(curPlayer)
PlayerHorse.CalcHorseAttr(curPlayer)
+ PlayerBeauty.CalcBeautyAttr(curPlayer)
return
def doRefreshLineupAttr(curPlayer, olPlayer, lineup):
@@ -451,6 +453,7 @@
countryHeroInfo = {} # 国家武将统计 {country:[heroID, ...], ...}
fetterHeroInfo = {} # 阵容羁绊武将统计信息 {fetterID:[heroID, ...], ...}
heroSelfAttrInfo = {} # 武将自身属性 {heroID:{attrID:value, ...}, ...}
+ heroLVAttrInfo = {} # 武将等级属性 {heroID:{attrID:value, ...}, ...}
heroStarTalentInfo = {} # 武将星级天赋属性 {heroID:{attrID:value, ...}, ...}
heroBreakAttrInfo = {} # 武将突破潜能属性 {heroID:{attrID:value, ...}, ...}
heroAwakeTalentInfo = {} # 武将觉醒天赋属性 {heroID:{attrID:value, ...}, ...}
@@ -517,6 +520,18 @@
for k, v in heroIpyData.GetBatAttrDict().items():
selfAttrDict[int(k)] = v
heroSelfAttrInfo[heroID] = selfAttrDict
+
+ # 等级属性
+ heroLVAttrDict = {}
+ heroLVIpyData = IpyGameDataPY.GetIpyGameData("HeroQualityLV", quality, heroLV)
+ if heroLVIpyData:
+ attrIDList = heroLVIpyData.GetAttrIDList()
+ attrValueList = heroLVIpyData.GetAttrValueList()
+ for aIndex in range(min(len(attrIDList), len(attrValueList))):
+ attrID = attrIDList[aIndex]
+ attrValue = attrValueList[aIndex]
+ heroLVAttrDict[attrID] = heroLVAttrDict.get(attrID, 0) + attrValue
+ heroLVAttrInfo[heroID] = heroLVAttrDict
# 突破潜能
breakAttrDict = {}
@@ -647,10 +662,12 @@
gubaoAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_Gubao)
hjgAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_HJG)
horseAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_Horse)
+ beautyAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_Beauty)
GameWorld.DebugLog(" 国家武将统计=%s" % countryHeroInfo, playerID)
GameWorld.DebugLog(" 羁绊武将统计=%s" % fetterHeroInfo, playerID)
GameWorld.DebugLog(" 武将自身属性=%s" % heroSelfAttrInfo, playerID)
+ GameWorld.DebugLog(" 武将等级属性=%s" % heroLVAttrInfo, playerID)
GameWorld.DebugLog(" 武将吞噬属性=%s" % heroStarTalentInfo, playerID)
GameWorld.DebugLog(" 武将突破潜能=%s" % heroBreakAttrInfo, playerID)
GameWorld.DebugLog(" 武将觉醒天赋=%s" % heroAwakeTalentInfo, playerID)
@@ -665,6 +682,7 @@
GameWorld.DebugLog(" 主公古宝属性=%s" % gubaoAttrDict, playerID)
GameWorld.DebugLog(" 主幻境阁属性=%s" % hjgAttrDict, playerID)
GameWorld.DebugLog(" 主公坐骑属性=%s" % horseAttrDict, playerID)
+ GameWorld.DebugLog(" 主公红颜属性=%s" % beautyAttrDict, playerID)
PlayerLV = curPlayer.GetLV()
OfficialLV = curPlayer.GetOfficialRank()
@@ -681,6 +699,7 @@
lineupHero.heroBatAttrDict = {}
lineupHero.fightPower = 0
+ heroLVAttrDict = heroLVAttrInfo.get(heroID, {})
starTalentAttrDict = heroStarTalentInfo.get(heroID, {})
breakAttrDict = heroBreakAttrInfo.get(heroID, {})
awakeTalentAttrDict = heroAwakeTalentInfo.get(heroID, {})
@@ -708,6 +727,9 @@
horseValue = horseAttrDict.get(attrID, 0)
horsePer = horseAttrDict.get(attrPerID, 0) / 10000.0 if attrPerID else 0
+ beautyValue = beautyAttrDict.get(attrID, 0)
+ beautyPer = beautyAttrDict.get(attrPerID, 0) / 10000.0 if attrPerID else 0
+
lineupInitAddPer, lineupLVAddPer, lineupBreakLVAddPer, lineupStarAddPer = 0, 0, 0, 0
if attrID in ChConfig.BaseAttrIDList:
lineupInitAddPer, lineupLVAddPer, lineupBreakLVAddPer, lineupStarAddPer = InitAddPer, LVAddPer, BreakLVAddPer, StarAddPer
@@ -721,6 +743,7 @@
lineupHaloValue, lineupHaloPer = lineupHaloAttrInfo.get(attrID, 0), 0
fetterValue, fetterPer = fetterAttrDict.get(attrID, 0), 0
+ heroLVValue, heroLVPer = heroLVAttrDict.get(attrID, 0), 0
starTalentValue, starTalentPer = starTalentAttrDict.get(attrID, 0), 0
breakLVValue, breakLVPer = breakAttrDict.get(attrID, 0), 0
awakeTalentValue, awakeTalentPer = awakeTalentAttrDict.get(attrID, 0), 0
@@ -728,15 +751,17 @@
heroSelfPer = selfAttrDict.get(attrPerID, 0) / 10000.0
lineupHaloPer = lineupHaloAttrInfo.get(attrPerID, 0) / 10000.0
fetterPer = fetterAttrDict.get(attrPerID, 0) / 10000.0
+ heroLVPer = heroLVAttrDict.get(attrPerID, 0) / 10000.0
starTalentPer = starTalentAttrDict.get(attrPerID, 0) / 10000.0
breakLVPer = breakAttrDict.get(attrPerID, 0) / 10000.0
awakeTalentPer = awakeTalentAttrDict.get(attrPerID, 0) / 10000.0
# 计算
attrParamDict = {"lvValue":lvValue, "equipValue":equipValue, "bookValue":bookValue, "bookPer":bookPer, "realmValue":realmValue, "realmPer":realmPer,
- "gubaoValue":gubaoValue, "gubaoPer":gubaoPer, "hjgValue":hjgValue, "hjgPer":hjgPer, "horseValue":horseValue, "horsePer":horsePer,
+ "gubaoValue":gubaoValue, "gubaoPer":gubaoPer, "hjgValue":hjgValue, "hjgPer":hjgPer, "horseValue":horseValue, "horsePer":horsePer,
+ "beautyValue":beautyValue, "beautyPer":beautyPer,
"lineupInitAddPer":lineupInitAddPer, "lineupLVAddPer":lineupLVAddPer, "lineupBreakLVAddPer":lineupBreakLVAddPer, "lineupStarAddPer":lineupStarAddPer,
- "heroSelfValue":heroSelfValue, "heroSelfPer":heroSelfPer, "inheritPer":inheritPer,
+ "heroSelfValue":heroSelfValue, "heroSelfPer":heroSelfPer, "inheritPer":inheritPer, "heroLVValue":heroLVValue, "heroLVPer":heroLVPer,
"lineupHaloValue":lineupHaloValue, "lineupHaloPer":lineupHaloPer, "fetterValue":fetterValue, "fetterPer":fetterPer,
"starTalentValue":starTalentValue, "starTalentPer":starTalentPer, "breakLVValue":breakLVValue, "breakLVPer":breakLVPer,
"awakeTalentValue":awakeTalentValue, "awakeTalentPer":awakeTalentPer,
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
index 81fc54f..9df0805 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -37,6 +37,7 @@
import PlayerBackup
import PlayerOnline
import PlayerGoldRush
+import PlayerTravel
import PlayerHorse
import PlayerHJG
@@ -1049,6 +1050,8 @@
#PlayerFlashSale.ProcessFlashSaleMail(curPlayer, tick)
#淘金
PlayerGoldRush.OnProcess(curPlayer)
+ #游历
+ PlayerTravel.OnProcess(curPlayer)
return
def ProcessPlayerMinute(curPlayer, tick):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTalk.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTalk.py
index c9c991f..ff8820f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTalk.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTalk.py
@@ -39,9 +39,9 @@
NotifyTalkCache(curPlayer)
return
-#// B3 20 聊天 #tagCMTalk
+#// B3 20 聊天 #tagCSTalk
#
-#struct tagCMPyTalk
+#struct tagCSTalk
#{
# tagHead Head;
# BYTE ChannelType; // 频道
@@ -93,6 +93,7 @@
clientPack.RealmLV = curPlayer.GetOfficialRank()
clientPack.Face = curPlayer.GetFace()
clientPack.FacePic = curPlayer.GetFacePic()
+ clientPack.TitleID = PlayerControl.GetTitleID(curPlayer)
clientPack.ServerID = GameWorld.GetPlayerServerID(curPlayer)
if channelType == IPY_GameWorld.tcWorld:
@@ -218,6 +219,7 @@
talkCache.RealmLV = viewCache.GetRealmLV()
talkCache.Face = viewCache.GetFace()
talkCache.FacePic = viewCache.GetFacePic()
+ talkCache.TitleID = viewCache.GetTitleID()
talkCache.ServerID = viewCache.GetServerID()
talkCache.TalkTime = talkTime
packCacheList.append(talkCache)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTask.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTask.py
index 1ff3d57..2cf1796 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTask.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTask.py
@@ -19,6 +19,7 @@
import IpyGameDataPY
import PlayerControl
import NetPackCommon
+import PlayerGoldRush
import ChPyNetSendPack
import ItemControler
import IPY_GameWorld
@@ -151,6 +152,30 @@
mapID = ChConfig.Def_FBMapID_Main
lineID = conds[0]
taskValue = 1 if FBCommon.IsFBPass(curPlayer, mapID, lineID) else 0
+
+ # 挑战主线关
+ elif taskType == ChConfig.TaskType_MainLevelChallenge:
+ if not conds:
+ return 0
+ mapID = ChConfig.Def_FBMapID_Main
+ lvID = conds[0]
+ taskValue = 1 if PlayerControl.IsMainLevelPass(curPlayer, lvID) else 0
+ if not taskValue:
+ challengeLVID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ChallengeLVID)
+ taskValue = 1 if challengeLVID >= lvID else 0
+
+ elif taskType == ChConfig.TaskType_FBZhanchui:
+ if not conds:
+ return 0
+ mapID = ChConfig.Def_FBMapID_Zhanchui
+ lineID = conds[0]
+ taskValue = 1 if FBCommon.IsFBPass(curPlayer, mapID, lineID) else 0
+
+ elif taskType == ChConfig.TaskType_GoldRushWorkers:
+ taskValue = PlayerGoldRush.GetWorkerTotal(curPlayer)
+
+ elif taskType == ChConfig.TaskType_ReqOrJoinFamily:
+ taskValue = 1 if curPlayer.GetFamilyID() else 0
elif taskType == ChConfig.TaskType_TreeLV:
taskValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
@@ -298,15 +323,25 @@
if curState != ChConfig.TaskState_CanGet:
GameWorld.DebugLog("任务未完成无法领奖: taskID=%s,curValue=%s/%s,curState=%s" % (taskID, curValue, needValue, curState), playerID)
return
- #if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList):
- # return
+ if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList):
+ return
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskIDLast % taskGroup, taskID)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskID % taskGroup, 0)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskValue % taskGroup, 0)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskState % taskGroup, 0)
- ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["Task", False, {}])
+ # 支持定制属性物品
+ isAuctionItem = 0
+ notifyAwardList = []
+ appointInfo = {}
+ for itemID, itemCount, appointID in awardItemList:
+ setAttrDict = {ShareDefine.Def_CItemKey_AppointID:appointID} if appointID else {}
+ if not ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, event=["Task", False, {}], setAttrDict=setAttrDict):
+ continue
+ notifyAwardList.append([itemID, itemCount, isAuctionItem])
+ appointInfo[itemID] = appointID
+ ItemControler.NotifyGiveAwardInfo(curPlayer, notifyAwardList, "Task", dataEx={"appointInfo":appointInfo})
if not __giveNewTask(curPlayer, taskGroup):
SyncTaskInfo(curPlayer, [taskGroup])
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTravel.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTravel.py
new file mode 100644
index 0000000..b4ea635
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTravel.py
@@ -0,0 +1,504 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.PlayerTravel
+#
+# @todo:游历
+# @author hxp
+# @date 2025-11-25
+# @version 1.0
+#
+# 详细描述: 游历
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-11-25 17:30"""
+#-------------------------------------------------------------------------------
+
+import ChConfig
+import PlayerControl
+import IpyGameDataPY
+import ChPyNetSendPack
+import NetPackCommon
+import ItemControler
+import PlayerBeauty
+import GameWorld
+import ObjPool
+
+import random
+import time
+
+GridState_None = 0 # 未点击
+GridState_Opend = 1 # 已打开
+GridState_Crack = 2 # 裂纹的,需再次点击开启
+
+# 景观类型相关设置 {景观类型:[占地行,列], ...}
+SceneryTypeSet = {
+ 1:[1, 1],
+ 4:[2, 2],
+ 6:[3, 2],
+ }
+
+# 小于99的为景观行列编号事件标记: 1~n
+EventID_Portal = 99 # 传送门
+EventID_Blank = 100 # 空白
+EventID_Bomb = 101 # 十字炸弹
+
+#固定的特殊事件ID
+SpecEventIDList = [EventID_Portal, EventID_Blank, EventID_Bomb]
+
+# 后端处理
+(
+Result_None, # 无,后端主动同步,如登录、GM等 0
+Result_Comm, # 常规点击返回 1
+Result_Bomb, # 马车炸弹 2
+Result_Portal, # 点击传送门 3
+Result_SceneryUp, # 升级景观 4
+Result_Reset, # 重新开始 5
+) = range(6)
+
+def DoTravelOpen(curPlayer):
+ energy = IpyGameDataPY.GetFuncCfg("TravelSet", 1)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergy, energy)
+ ResetTravelGrid(curPlayer)
+ return
+
+def OnPlayerLogin(curPlayer):
+ if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelState) == 2:
+ ResetTravelGrid(curPlayer)
+ else:
+ SyncTravelInfo(curPlayer, isAll=True)
+ return
+
+## Def_PDict_TravelGridInfo 格子信息, 事件ID*100+是否双倍*10+开启状态
+def GetGridState(curPlayer, row, col):
+ ## 格子状态: 0-未开启;1-已开启;2-裂纹
+ return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelGridInfo % (row, col)) % 10
+def SetGridState(curPlayer, row, col, state):
+ dataValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelGridInfo % (row, col))
+ updValue = dataValue / 10 * 10 + min(state, 9)
+ return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelGridInfo % (row, col), updValue)
+def GetGridMulti(curPlayer, row, col):
+ ## 奖励倍值
+ dataValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelGridInfo % (row, col))
+ return max(1, GameWorld.GetValue(dataValue, 2, 1))
+def SetGridMulti(curPlayer, row, col, multi=1):
+ dataValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelGridInfo % (row, col))
+ updValue = GameWorld.SetValue(dataValue, 2, 1, multi)
+ return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelGridInfo % (row, col), updValue)
+def GetGridEventID(curPlayer, row, col):
+ ## 格子事件ID
+ return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelGridInfo % (row, col)) / 100
+def SetGridEventID(curPlayer, row, col, eventID):
+ dataValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelGridInfo % (row, col))
+ updValue = eventID * 100 + dataValue % 100
+ return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelGridInfo % (row, col), updValue)
+
+def ResetTravelGrid(curPlayer, sceneryType=0):
+ ## 重置游历网格
+
+ rowMax, colMax = IpyGameDataPY.GetFuncEvalCfg("TravelSet", 3) # 行列
+ for row in range(1, 1 + rowMax):
+ for col in range(1, 1 + colMax):
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelGridInfo % (row, col), 0)
+
+ # 初始化景观类型、位置
+ if sceneryType in SceneryTypeSet:
+ # GM指定了类型
+ pass
+ else:
+ sceneryTypeWeightList = IpyGameDataPY.GetFuncEvalCfg("TravelRate", 3)
+ sceneryType = GameWorld.GetResultByWeightList(sceneryTypeWeightList)
+ if sceneryType not in SceneryTypeSet:
+ sceneryType = SceneryTypeSet.keys()[0]
+ rowSet, colSet = SceneryTypeSet[sceneryType]
+
+ randRowMax = rowMax - rowSet + 1
+ randColMax = colMax - colSet + 1
+ GameWorld.DebugLog("重置游历网格: sceneryType=%s,rowSet=%s,colSet=%s,randRowMax=%s,randColMax=%s" % (sceneryType, rowSet, colSet, randRowMax, randColMax))
+ randRow = random.randint(1, randRowMax)
+ randCol = random.randint(1, randColMax)
+ sceneryValue = randRow * 100 + randCol * 10 + sceneryType
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelScenery, sceneryValue)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelSceneryLVInfo, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelState, 0)
+ GameWorld.DebugLog(" 景观位置: randRow=%s,randCol=%s,sceneryValue=%s" % (randRow, randCol, sceneryValue))
+
+ for row in range(randRow, randRow + rowSet):
+ for col in range(randCol, randCol + colSet):
+ eventID = (row - randRow) * colSet + (col - randCol) + 1 # 景观各位置对应事件ID,1~n
+ SetGridEventID(curPlayer, row, col, eventID)
+ GameWorld.DebugLog(" row=%s,col=%s,eventID=%s" % (row, col, eventID))
+
+ SyncTravelInfo(curPlayer, result=Result_Reset, isAll=True)
+ return sceneryType, randRow, randCol
+
+def __getSceneryInfo(curPlayer):
+ sceneryValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelScenery)
+ sRow = sceneryValue / 100
+ sCol = sceneryValue % 100 / 10
+ sceneryType = sceneryValue % 10
+ return sceneryType, sRow, sCol
+
+def __checkSceneryOpend(curPlayer):
+ ## 检查景观相关格子是否已全部打开
+ sceneryType, sRow, sCol = __getSceneryInfo(curPlayer)
+ if sceneryType not in SceneryTypeSet:
+ return
+ rowSet, colSet = SceneryTypeSet[sceneryType]
+ for row in range(sRow, sRow + rowSet):
+ for col in range(sCol, sCol + colSet):
+ gridState = GetGridState(curPlayer, row, col)
+ if gridState != GridState_Opend:
+ GameWorld.DebugLog("还有景观格子未开启: row=%s,col=%s,gridState=%s" % (row, col, gridState))
+ return
+ return True
+
+def OnProcess(curPlayer):
+ CheckTravelEnergyRecover(curPlayer)
+ return
+
+def GetTravelEnergyMax(curPlayer):
+ initEnergy = IpyGameDataPY.GetFuncCfg("TravelSet", 1)
+ addEnergy = PlayerBeauty.GetBeautyEffInfo(curPlayer, PlayerBeauty.EffType_TravelEnergy)[0]
+ return initEnergy + addEnergy
+
+def CheckTravelEnergyRecover(curPlayer, isNotify=True):
+ ## 检查体力恢复
+ maxEnergy = GetTravelEnergyMax(curPlayer)
+ curEnergy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelEnergy)
+ lastRecoverTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelEnergyTime)
+ if curEnergy >= maxEnergy:
+ if lastRecoverTime:
+ GameWorld.DebugLog("游历体力已满! curEnergy=%s/%s" % (curEnergy, maxEnergy))
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergyTime, 0)
+ isNotify and SyncTravelInfo(curPlayer)
+ return
+
+ curTime = int(time.time())
+ passSeconds = curTime - lastRecoverTime
+ if not lastRecoverTime or passSeconds < 0:
+ GameWorld.DebugLog("重设游历体力恢复时间! curEnergy=%s/%s" % (curEnergy, maxEnergy))
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergyTime, curTime)
+ isNotify and SyncTravelInfo(curPlayer)
+ return
+
+ cdSeconds = IpyGameDataPY.GetFuncCfg("TravelSet", 2) * 60
+ if passSeconds < cdSeconds:
+ return
+ recoverCnt = passSeconds / cdSeconds
+ recoverCnt = min(recoverCnt, maxEnergy - curEnergy)
+ updEnergy = curEnergy + recoverCnt
+ updRecoverTime = curTime - passSeconds % cdSeconds
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergy, updEnergy)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergyTime, updRecoverTime)
+ GameWorld.DebugLog("恢复游历体力: %s,curEnergy=%s,updEnergy=%s/%s,passSeconds=%s,上次恢复:%s"
+ % (recoverCnt, curEnergy, updEnergy, maxEnergy, passSeconds, GameWorld.ChangeTimeNumToStr(lastRecoverTime)))
+ if updEnergy >= maxEnergy:
+ GameWorld.DebugLog("体力已满!")
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergyTime, 0)
+ isNotify and SyncTravelInfo(curPlayer)
+ return
+
+def AddTravelEnergy(curPlayer, addEnergy):
+ ## 增加体力
+ energy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelEnergy)
+ updEnergy = energy + addEnergy
+ updEnergy = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergy, updEnergy)
+ SyncTravelInfo(curPlayer)
+ return
+
+#// B0 40 游历点击 #tagCSTravelClick
+#
+#struct tagCSTravelClick
+#{
+# tagHead Head;
+# BYTE Row; //行,从1开始
+# BYTE Col; //列,从1开始
+#};
+def OnTravelClick(index, curPackData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ row = curPackData.Row
+ col = curPackData.Col
+
+ if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelState) == 2:
+ GameWorld.DebugLog("请求重置游历格子")
+ ResetTravelGrid(curPlayer)
+ return
+
+ gridState = GetGridState(curPlayer, row, col)
+ GameWorld.DebugLog("游历点击: row=%s,col=%s,gridState=%s" % (row, col, gridState))
+
+ rowMax, colMax = IpyGameDataPY.GetFuncEvalCfg("TravelSet", 3) # 行列
+ if row <= 0 or col <= 0 or row > rowMax or col > colMax:
+ GameWorld.DebugLog("不存在该格子: row=%s,col=%s,rowMax=%s,colMax=%s" % (row, col, rowMax, colMax))
+ return
+
+ if gridState in [GridState_None, GridState_Crack]:
+ energy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelEnergy)
+ if not energy:
+ GameWorld.DebugLog("游历没有体力")
+ return
+
+ __doClickUnOpendGrid(curPlayer, row, col)
+
+ energy -= 1
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergy, energy)
+
+ travelCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelCnt) + 1
+ travelCnt = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelCnt, travelCnt)
+ GameWorld.DebugLog("更新体力: energy=%s,travelCnt=%s" % (energy, travelCnt))
+ CheckTravelEnergyRecover(curPlayer, False)
+ SyncTravelInfo(curPlayer, [[row, col]], Result_Comm)
+ else:
+ __doClickGridEvent(curPlayer, row, col)
+
+ return
+
+def __doClickUnOpendGrid(curPlayer, row, col):
+ ## 执行点击未开启的格子
+ gridState = GetGridState(curPlayer, row, col)
+ if gridState == GridState_None:
+ crackRate = IpyGameDataPY.GetFuncCfg("TravelRate", 1)
+ if GameWorld.CanHappen(crackRate):
+ GameWorld.DebugLog("触发裂纹: row=%s,col=%s,crackRate=%s" % (row, col, crackRate))
+ SetGridState(curPlayer, row, col, GridState_Crack)
+ else:
+ __openGridRandEvent(curPlayer, row, col)
+
+ # 再次点击裂纹
+ elif gridState == GridState_Crack:
+ __openGridRandEvent(curPlayer, row, col)
+ else:
+ return
+ return True
+
+def __openGridRandEvent(curPlayer, row, col):
+ ## 执行打开格子随机生成事件
+ SetGridState(curPlayer, row, col, GridState_Opend)
+ eventID = GetGridEventID(curPlayer, row, col)
+ if eventID:
+ GameWorld.DebugLog("该游历格子已经有事件ID了! row=%s,col=%s,eventID=%s" % (row, col, eventID))
+ return
+
+ # 生成事件ID
+ eventWeightList = []
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in range(ipyDataMgr.GetTravelEventCount()):
+ ipyData = ipyDataMgr.GetTravelEventByIndex(index)
+ eventID = ipyData.GetEventID()
+ eventWeight = ipyData.GetEventWeight()
+ eventWeightList.append([eventWeight, ipyData])
+
+ multi = 1
+ ipyData = GameWorld.GetResultByWeightList(eventWeightList)
+ if not ipyData:
+ eventID = EventID_Blank
+ else:
+ eventID = ipyData.GetEventID()
+ if ipyData.GetAwardItemID():
+ multiRate = IpyGameDataPY.GetFuncCfg("TravelRate", 2)
+ if GameWorld.CanHappen(multiRate):
+ multi = 2
+ SetGridMulti(curPlayer, row, col, multi)
+ SetGridEventID(curPlayer, row, col, eventID)
+ GameWorld.DebugLog("随机格子事件: row=%s,col=%s,eventID=%s,multi=%s" % (row, col, eventID, multi))
+ return
+
+def __doClickGridEvent(curPlayer, row, col):
+ ## 点击结算格子的事件
+ eventID = GetGridEventID(curPlayer, row, col)
+ if not eventID:
+ GameWorld.DebugLog("该游历格子还未生成事件! row=%s,col=%s,eventID=%s" % (row, col, eventID))
+ return
+
+ if eventID == EventID_Blank:
+ GameWorld.DebugLog("空白事件不处理! row=%s,col=%s,eventID=%s" % (row, col, eventID))
+ return
+
+ syncGridList = []
+ # 十字炸弹
+ if eventID == EventID_Bomb:
+ GameWorld.DebugLog("点击马车炸弹! row=%s,col=%s,eventID=%s" % (row, col, eventID))
+ result = Result_Bomb
+ rowMax, colMax = IpyGameDataPY.GetFuncEvalCfg("TravelSet", 3) # 行列
+ # 同行
+ for c in range(1, 1 + colMax):
+ if __doClickUnOpendGrid(curPlayer, row, c):
+ syncGridList.append([row, c])
+ # 同列
+ for r in range(1, 1 + rowMax):
+ if __doClickUnOpendGrid(curPlayer, r, col):
+ syncGridList.append([r, col])
+
+ # 传送门
+ elif eventID == EventID_Portal:
+ GameWorld.DebugLog("点击传送门! row=%s,col=%s,eventID=%s" % (row, col, eventID))
+ result = Result_Portal
+ __giveAwardEvent(curPlayer, syncGridList, "TravelPortal")
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelState, 2) # 标记已点传送门
+ if not syncGridList:
+ GameWorld.DebugLog("点击传送门时没有未领取的,直接重新开始")
+ ResetTravelGrid(curPlayer)
+ return
+
+ # 景观
+ elif eventID < EventID_Portal:
+ GameWorld.DebugLog("点击景观! row=%s,col=%s,eventID=%s" % (row, col, eventID))
+ result = Result_SceneryUp
+ if not __checkSceneryOpend(curPlayer):
+ return
+
+ # 其他默认按物品奖励处理
+ else:
+ GameWorld.DebugLog("领取所有已开启的格子奖励! row=%s,col=%s,eventID=%s" % (row, col, eventID))
+ result = Result_Comm
+ __giveAwardEvent(curPlayer, syncGridList, "TravelAward")
+
+ SyncTravelInfo(curPlayer, syncGridList, result)
+ return
+
+def __giveAwardEvent(curPlayer, syncGridList, eventName):
+ ## 结算所有未领取的奖励事件
+ itemDict = {}
+ rowMax, colMax = IpyGameDataPY.GetFuncEvalCfg("TravelSet", 3)
+ for row in range(1, 1 + rowMax):
+ for col in range(1, 1 + colMax):
+ eventID = GetGridEventID(curPlayer, row, col)
+ if eventID in SpecEventIDList or eventID < EventID_Portal:
+ continue
+ ipyData = IpyGameDataPY.GetIpyGameDataNotLog("TravelEvent", eventID)
+ if not ipyData:
+ continue
+ itemID = ipyData.GetAwardItemID()
+ itemCount = ipyData.GetAwardItemCnt()
+ if not itemID or not itemCount:
+ continue
+ multi = GetGridMulti(curPlayer, row, col)
+ itemDict[itemID] = itemDict.get(itemID, 0) + itemCount * multi
+ SetGridEventID(curPlayer, row, col, EventID_Blank) # 处理完奖励后设置为空白
+ syncGridList.append([row, col])
+ GameWorld.DebugLog(" 格子奖励: row=%s,col=%s,eventID=%s,itemID=%s,itemCount=%s,multi=%s,%s"
+ % (row, col, eventID, itemID, itemCount, multi, itemDict))
+ if not itemDict:
+ return
+
+ itemList = [[itemID, itemCount] for itemID, itemCount in itemDict.items()]
+ GameWorld.DebugLog(" 奖励汇总: itemList=%s" % (itemList))
+ ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=[eventName, False, {}])
+ return
+
+#// B0 41 游历景观升级 #tagCSTravelSceneryUP
+#
+#struct tagCSTravelSceneryUP
+#{
+# tagHead Head;
+#};
+def OnTravelSceneryUP(index, curPackData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+
+ if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelState):
+ GameWorld.DebugLog("景观奖励已经结算过了!")
+ return
+
+ if not __checkSceneryOpend(curPlayer):
+ return
+
+ sceneryType, sRow, sCol = __getSceneryInfo(curPlayer)
+ ipyDataList = IpyGameDataPY.GetIpyGameDataList("TravelScenery", sceneryType)
+ if not ipyDataList:
+ return
+ qualityCnt = len(ipyDataList)
+ sceneryLVInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelSceneryLVInfo)
+ GameWorld.DebugLog("景观升级: sceneryType=%s,sRow=%s,sCol=%s,qualityCnt=%s,sceneryLVInfo=%s" % (sceneryType, sRow, sCol, qualityCnt, sceneryLVInfo))
+
+ upRetList = [] # 升级结果列表
+ upSuccCnt = 0
+ for upBit in range(1, qualityCnt):
+ upRet = GameWorld.GetValue(sceneryLVInfo, upBit, 1)
+ if not upRet:
+ break
+ upRetList.append(upRet)
+ if upRet == 1:
+ upSuccCnt += 1
+
+ awardIpyData = ipyDataList[upSuccCnt] if len(ipyDataList) > upSuccCnt else ipyDataList[-1]
+ awardQuality = awardIpyData.GetAwardQuality()
+ GameWorld.DebugLog("upSuccCnt=%s,upRetList=%s,awardQuality=%s" % (upSuccCnt, upRetList, awardQuality))
+ if len(upRetList) < qualityCnt - 1:
+ upRate = awardIpyData.GetUpRate()
+ upRet = 1 if GameWorld.CanHappen(upRate) else 2
+ updSceneryLVInfo = GameWorld.SetValue(sceneryLVInfo, len(upRetList) + 1, 1, upRet)
+ GameWorld.DebugLog("升级结果=%s,upRate=%s,updSceneryLVInfo=%s" % (upRet, upRate, updSceneryLVInfo))
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelSceneryLVInfo, updSceneryLVInfo)
+ SyncTravelInfo(curPlayer, result=Result_SceneryUp)
+ return
+
+ GameWorld.DebugLog("景观升级次数已达上限,直接发放奖励!")
+ awardItemList = []
+ awardItemRandCntList = awardIpyData.GetAwardItemRandCntList()
+ for itemID, itemCntA, itemCntB in awardItemRandCntList:
+ awardItemList.append([itemID, random.randint(itemCntA, itemCntB)])
+ GameWorld.DebugLog("随机物品个数奖励: %s" % awardItemList)
+
+ awardItemExWeightList = awardIpyData.GetAwardItemExWeightList()
+ awardItemExCnt = awardIpyData.GetAwardItemExCnt()
+ for _ in range(awardItemExCnt):
+ randItemInfo = GameWorld.GetResultByWeightList(awardItemExWeightList)
+ if not randItemInfo or len(randItemInfo) != 2:
+ continue
+ itemID, itemCount = randItemInfo
+ awardItemList.append([itemID, itemCount])
+ GameWorld.DebugLog("附加额外物品奖励: %s" % awardItemList)
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelState, 1) # 标记已领取景观奖励
+ ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["TravelScenery", False, {}])
+
+ # 景观替换为传送门
+ syncGridList = []
+ rowSet, colSet = SceneryTypeSet[sceneryType]
+ for row in range(sRow, sRow + rowSet):
+ for col in range(sCol, sCol + colSet):
+ if row == sRow and col == sCol:
+ GameWorld.DebugLog("设置为传送门: row=%s,col=%s" % (row, col))
+ SetGridEventID(curPlayer, row, col, EventID_Portal)
+ syncGridList.append([row, col])
+ else:
+ GameWorld.DebugLog("设置为空白: row=%s,col=%s" % (row, col))
+ SetGridEventID(curPlayer, row, col, EventID_Blank)
+ syncGridList.append([row, col])
+ SyncTravelInfo(curPlayer, syncGridList, result=Result_SceneryUp)
+ return
+
+def SyncTravelInfo(curPlayer, syncGridList=[], result=Result_None, isAll=False):
+ if isAll:
+ syncGridList = []
+ rowMax, colMax = IpyGameDataPY.GetFuncEvalCfg("TravelSet", 3)
+ for row in range(1, 1 + rowMax):
+ for col in range(1, 1 + colMax):
+ syncGridList.append([row, col])
+
+ gridList = []
+ for row, col in syncGridList:
+ grid = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCTravelGrid)
+ grid.Row = row
+ grid.Col = col
+ grid.State = GetGridState(curPlayer, row, col)
+ grid.Multi = GetGridMulti(curPlayer, row, col)
+ grid.EventID = GetGridEventID(curPlayer, row, col)
+ gridList.append(grid)
+
+ sceneryType, sRow, sCol = __getSceneryInfo(curPlayer)
+ clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCTravelInfo)
+ clientPack.Energy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelEnergy)
+ clientPack.EnergyTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelEnergyTime)
+ clientPack.TravelCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelCnt)
+ clientPack.SceneryType = sceneryType
+ clientPack.SceneryRow = sRow
+ clientPack.SceneryCol = sCol
+ clientPack.SceneryLVInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelSceneryLVInfo)
+ clientPack.Result = result
+ clientPack.GridList = gridList
+ clientPack.GridCnt = len(clientPack.GridList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
index 8d271d6..2a80a9e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
@@ -440,20 +440,6 @@
if treasureType in [TreasureType_HeroComm, TreasureType_HeroHigh, TreasureType_HeroScore]:
PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_HeroCall, treasureCount)
- #if treasureType == TreasureType_Rune:
- # PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_RuneTreasure, treasureCount)
- # PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_RuneTreasure, treasureCount)
- # PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureRune, treasureCount)
- #elif treasureType == TreasureType_Jipin:
- # PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_Treasure, treasureCount)
- # PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_Treasure, treasureCount)
- # PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureJipin, treasureCount)
- #elif treasureType == TreasureType_Jueshi:
- # PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_JSTreasure, treasureCount)
- # PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_JSTreasure, treasureCount)
- # PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureJueshi, treasureCount)
- #elif treasureType == TreasureType_Gubao:
- # PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureGubao, treasureCount)
PlayerActLunhuidian.AddLunhuidianValue(curPlayer, PlayerActLunhuidian.AwardType_Treasure, treasureType, treasureCount)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/UpdatePlayerName.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/UpdatePlayerName.py
index 6f3b7c5..40c5f19 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/UpdatePlayerName.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/UpdatePlayerName.py
@@ -24,6 +24,7 @@
import IpyGameDataPY
import PlayerFamily
import PyMongoMain
+import PlayerTask
import DirtyList
import ObjPool
@@ -92,6 +93,8 @@
PlayerFamily.RefreshFamilyMember(curPlayer)
PlayerBillboard.UpdatePlayerBillboardName(curPlayer)
#社交名待更新
+
+ PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_Rename, 1)
return
def GetPlayerFullName(curPlayer, playerName):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
index 91e18f4..2247e69 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -37,6 +37,8 @@
g_arenaPlayerMatchDict = {} # 本服竞技场玩家匹配记录缓存 {playerID:[tagPlayerID, ...], ...}
+g_beautyEffTypeDict = {} # 红颜特殊效果缓存 {playerID:{effType:[effValue, effTypeValue], ...}, ...}
+
g_mapIDTxtInfo = {} # MapID.txt 加载的信息
g_realmDiffPlayerDict = {} # 境界难度玩家信息 {realm:[playerID, ...], ...}
g_realmDiffNPCRefresh = {} # {(lineID, realm):{refreshID:tagNPCRefresh, ...}}
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 010aabd..3ec5a8f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -239,8 +239,6 @@
Def_Notify_WorldKey_HurtLog = 'HurtLog' # 战斗伤害日志
-Def_Notify_WorldKey_AssistBoss = "AssistBoss" # 协助boss
-
Def_Notify_WorldKey_CoupleInfo = "CoupleInfo" # 伴侣信息
#活动类型定义
@@ -273,7 +271,6 @@
OperationActionName_GrowupBuy = "ActGrowupBuy" # 成长必买活动
OperationActionName_FeastLogin = "ActFeastLogin" # 节日登录活动
OperationActionName_FeastWish = "ActFeastWish" # 节日祝福活动
-OperationActionName_FeastTravel = "ActFeastTravel" # 节日游历活动
OperationActionName_ManyDayRecharge = "ActManyDayRecharge" # 多日连充活动
OperationActionName_SingleRecharge = "ActSingleRecharge" # 单笔累充活动
OperationActionName_Turntable = "ActTurntable" # 转盘活动
@@ -289,7 +286,7 @@
FeastOperationActionNameList = [OperationActionName_FeastWeekParty,
OperationActionName_RechargeRebateGold, OperationActionName_GrowupBuy,
OperationActionName_FeastLogin,
- OperationActionName_FeastWish, OperationActionName_FeastTravel,
+ OperationActionName_FeastWish,
OperationActionName_RechargePrize,
]
#所有的运营活动列表,含节日活动
@@ -320,7 +317,7 @@
OperationActionName_WeekParty, OperationActionName_Turntable,
OperationActionName_CollectWords,
OperationActionName_FeastLogin,
- OperationActionName_FeastWish, OperationActionName_FeastTravel,
+ OperationActionName_FeastWish,
OperationActionName_ManyDayRecharge, OperationActionName_SingleRecharge,
OperationActionName_GodGift,
]
@@ -808,6 +805,7 @@
GameFuncID_Shop = 16 # 商城,坊市
GameFuncID_Arena = 27 # 竞技场
GameFuncID_Horse = 37 # 坐骑
+GameFuncID_Travel = 44 # 游历
# 以下为暂时无用的
GameFuncID_Pet = -1 # 宠物,灵宠 6
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5003.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5003.py
index a1df592..d87d0f1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5003.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5003.py
@@ -22,7 +22,7 @@
remainLayer = max(0, effBuff.GetLayer() - 1)
effBuff.SetLayer(remainLayer)
- TurnBuff.DoBuffProcess(turnFight, batObj, effBuff)
+ TurnBuff.DoBuffProcess(turnFight, batObj, effBuff, costLayer=1)
if remainLayer <= 0:
TurnBuff.DoBuffDel(turnFight, batObj, effBuff)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6014.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6014.py
index 4178873..138239b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6014.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6014.py
@@ -15,5 +15,17 @@
#"""Version = 2025-09-25 18:00"""
#-------------------------------------------------------------------------------
+import GameWorld
+
def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
- return curEffect.GetEffectValue(0)
\ No newline at end of file
+ onlyFirstUse = curEffect.GetEffectValue(1) # 是否仅首次释放技能有效
+ if onlyFirstUse:
+ skillID = connSkill.GetSkillID() if connSkill else skillkwargs.get("connSkillID", 0)
+ if not skillID:
+ #GameWorld.DebugLog("没有增加概率的技能ID! %s" % skillkwargs)
+ return
+ useCnt = attacker.GetSkillUseCnt(skillID)
+ if useCnt > 0:
+ GameWorld.DebugLog("技能非首次使用不增加额外概率! skillID=%s,useCnt=%s" % (skillID, useCnt))
+ return
+ return curEffect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
index c505673..5323c9b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -401,18 +401,12 @@
# 灼烧/玄火目标优先
elif tagAffect == ChConfig.SkillTagAffect_Burn:
atkBackTagFrist = False
- relativeObj = __GetRelativeObjDefault(batObjMgr, curBatObj, posNum, batLineup)
- sortObjList = [] # 优先灼烧目标,再对位
- for aimObj in aimObjList:
- sortValue = 0
- buffMgr = aimObj.GetBuffManager()
- if buffMgr.FindBuffListByState(ChConfig.BatObjState_Burn) or buffMgr.FindBuffListByState(ChConfig.BatObjState_BurnPlus):
- sortValue = 2
- elif relativeObj and relativeObj.GetID() == aimObj.GetID():
- sortValue = 1
- sortObjList.append([sortValue, aimObj])
- sortObjList.sort(reverse=True)
- aimObjList = [s[1] for s in sortObjList]
+ aimObjList = __getBuffStateFirst(batObjMgr, curBatObj, posNum, batLineup, aimObjList, [ChConfig.BatObjState_Burn, ChConfig.BatObjState_BurnPlus])
+
+ # 承伤盾目标优先
+ elif tagAffect == ChConfig.SkillTagAffect_DamShield:
+ atkBackTagFrist = False
+ aimObjList = __getBuffStateFirst(batObjMgr, curBatObj, posNum, batLineup, aimObjList, [ChConfig.BatObjState_DamShield])
# 仅焚血(毒奶)目标
elif tagAffect == ChConfig.SkillTagAffect_PoisonCure:
@@ -447,6 +441,20 @@
aimObjList = aimObjList[:tagCount]
return aimObjList
+
+def __getBuffStateFirst(batObjMgr, curBatObj, posNum, batLineup, aimObjList, checkStateList):
+ ## 获取处于xxbuff状态优先,然后再对位目标
+ relativeObj = __GetRelativeObjDefault(batObjMgr, curBatObj, posNum, batLineup)
+ sortObjList = [] # 优先灼烧目标,再对位
+ for aimObj in aimObjList:
+ sortValue = 0
+ if aimObj.CheckInState(checkStateList):
+ sortValue = 2
+ elif relativeObj and relativeObj.GetID() == aimObj.GetID():
+ sortValue = 1
+ sortObjList.append([sortValue, aimObj])
+ sortObjList.sort(reverse=True)
+ return [s[1] for s in sortObjList]
def CheckChangeTagEff(turnFight, curBatObj, useSkill):
## 技能自身设定强制修改目标,目前暂定优先级最高,无视软控
@@ -624,6 +632,7 @@
atkType = useSkill.GetAtkType()
GameWorld.DebugLog("__doUseSkill: curID=%s,skillID=%s,atkType=%s" % (curBatObj.GetID(), useSkill.GetSkillID(), atkType))
+ __doStealBuff(turnFight, curBatObj, useSkill)
__doHarmSelf(turnFight, curBatObj, useSkill)
# 通用攻击
@@ -654,6 +663,38 @@
elif atkType == 9:
SkillModule_9(turnFight, curBatObj, useSkill)
+ return
+
+def __doStealBuff(turnFight, curBatObj, useSkill):
+ ## 施法前偷取buff
+ stealEff = useSkill.GetEffectByID(ChConfig.SkillEff_UseSkillStealBuff)
+ if not stealEff:
+ return
+ buffState = stealEff.GetEffectValue(0) # buff状态
+ stealCnt = stealEff.GetEffectValue(1) # 偷取个数 0-全部;>0-个数
+ isAll = True if stealCnt == 0 else False
+
+ for tagObj in useSkill.GetTagObjList():
+ if not isAll and stealCnt <= 0:
+ break
+ tagBuffList = tagObj.GetBuffManager().FindBuffListByState(buffState)
+ if not tagBuffList:
+ continue
+
+ if not isAll and len(tagBuffList) > stealCnt:
+ random.shuffle(tagBuffList) # 随机
+
+ for tagBuff in tagBuffList:
+ skillID = tagBuff.GetSkillID()
+ buffOwner = curBatObj
+ GameWorld.DebugLog("使用技能前偷取buff: tagID=%s,tagBuffID=%s,buffSkillID=%s" % (tagObj.GetID(), tagBuff.GetBuffID(), skillID))
+ addBuff = TurnBuff.DoAddBuffBySkillID(turnFight, curBatObj, skillID, buffOwner, useSkill, isSync=False)
+ if not addBuff:
+ continue
+ stealCnt -= 1
+ TurnBuff.CopyBuff(turnFight, curBatObj, addBuff, tagBuff, useSkill, True, refreshTimeLayer=False)
+ TurnBuff.DoBuffDel(turnFight, tagObj, tagBuff, relatedSkill=useSkill)
+
return
def __doHarmSelf(turnFight, curBatObj, useSkill):
@@ -926,7 +967,7 @@
Sync_UseSkill(turnFight, atkObj, useSkill)
- DoBeAttackResult(turnFight, atkObj, useSkill)
+ DoBeAttackResult(turnFight, atkObj, useSkill, curBuff)
# 通知结束标签
Sync_TurnFightTag(turnFight, useTag, 1)
@@ -1024,7 +1065,7 @@
__doCostZhanchui(turnFight, curBatObj, useSkill)
__doSkillUserAnger(turnFight, curBatObj, useSkill)
- DoBeAttackResult(turnFight, curBatObj, useSkill, True)
+ DoBeAttackResult(turnFight, curBatObj, useSkill)
return
def DoCombo(turnFight, atkObj, useSkill):
@@ -1149,13 +1190,13 @@
return useSkill
return
-def DoBeAttackResult(turnFight, curObj, useSkill, isUseSkill=False):
+def DoBeAttackResult(turnFight, curObj, useSkill, curBuff=None):
'''被攻击结果
@param curObj: 施法方或buff归属方
- @param isUseSkill: 是否是直接使用技能的攻击结果,否则视为持续性的
'''
#curID = curObj.GetID()
+ isUseSkill = False if curBuff else True # buff的视为持续性的,否则为直接使用技能的攻击结果
isTurnNormalSkill = SkillCommon.isTurnNormalSkill(useSkill)
isAngerSkill = SkillCommon.isAngerSkill(useSkill)
@@ -1524,7 +1565,8 @@
enhanceSkillID = curEffect.GetEffectValue(0)
checkInStateList = curEffect.GetEffectValue(1)
checkHeroJob = curEffect.GetEffectValue(2)
- GameWorld.DebugLog("额外触发的技能: enhanceSkillID=%s,checkInStateList=%s,checkHeroJob=%s" % (enhanceSkillID, checkInStateList, checkHeroJob))
+ checkHeroSex = curEffect.GetEffectValue(3)
+ GameWorld.DebugLog("额外触发的技能: enhanceSkillID=%s,checkInStateList=%s,checkHeroJob=%s,checkHeroSex=%s" % (enhanceSkillID, checkInStateList, checkHeroJob, checkHeroSex))
tagObjList = useSkill.GetTagObjList()
enhanceSkillData = IpyGameDataPY.GetIpyGameData("Skill", enhanceSkillID)
@@ -1544,7 +1586,7 @@
GameWorld.DebugLog("继承主技能目标! enhanceSkillID=%s" % enhanceSkillID)
# 额外触发的技能直接在外层检查概率,如果都没有触发则不需要再处理
enhanceRate = enhanceSkillData.GetHappenRate()
- enhanceRate += TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_AddSkillRate, connSkillTypeID=enhanceSkillData.GetSkillTypeID())
+ enhanceRate += TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_AddSkillRate, connSkillTypeID=enhanceSkillData.GetSkillTypeID(), connSkillID=enhanceSkillID)
enchanceTagObjList = []
for tagObj in tagObjList:
tagID = tagObj.GetID()
@@ -1561,6 +1603,9 @@
if checkHeroJob and checkHeroJob != tagObj.GetJob():
GameWorld.DebugLog(" 非目标职业不触发: tagID=%s,job=%s != %s" % (tagID, tagObj.GetJob(), checkHeroJob))
continue
+ if checkHeroSex and checkHeroSex != tagObj.GetSex():
+ GameWorld.DebugLog(" 非目标性别不触发: tagID=%s,sex=%s != %s" % (tagID, tagObj.GetSex(), checkHeroSex))
+ continue
if enhanceRate and enhanceRate != ChConfig.Def_MaxRateValue and not GameWorld.CanHappen(enhanceRate, ChConfig.Def_MaxRateValue):
GameWorld.DebugLog(" 概率不触发: tagID=%s,enhanceRate=%s" % (tagID, enhanceRate))
continue
@@ -1574,8 +1619,8 @@
# 只执行一次,防止群攻时额外触发多次
GameWorld.DebugLog("重新锁定目标! enhanceSkillID=%s" % enhanceSkillID)
- if checkInStateList or checkHeroJob:
- inState, haveJob = False, False
+ if checkInStateList or checkHeroJob or checkHeroSex:
+ inState, haveJob, haveSex = False, False, False
for tagObj in tagObjList:
tagID = tagObj.GetID()
if tagID in effIgnoreObjIDList:
@@ -1584,11 +1629,16 @@
inState = True
if not haveJob and checkHeroJob and checkHeroJob == tagObj.GetJob():
haveJob = True
+ if not haveSex and checkHeroSex and checkHeroSex == tagObj.GetSex():
+ haveSex = True
if checkInStateList and not inState:
GameWorld.DebugLog(" 没有命中目标在状态下不触发: tagObj not in state:%s" % str(checkInStateList))
return
if checkHeroJob and not haveJob:
GameWorld.DebugLog(" 没有命中目标为目标职业不触发: checkHeroJob=%s" % checkHeroJob)
+ return
+ if checkHeroSex and not haveSex:
+ GameWorld.DebugLog(" 没有命中目标为目标性别不触发: checkHeroSex=%s" % checkHeroSex)
return
OnUseSkill(turnFight, curBatObj, enhanceSkillData, batType=ChConfig.TurnBattleType_Enhance, bySkill=useSkill)
return
@@ -2534,10 +2584,15 @@
dMaxHP = defObj.GetMaxHP()
GameWorld.DebugLog("结算dot: atkID=%s,defID=%s,buffID=%s,skillID=%s,ownerID=%s,hurtValue=%s,hurtTypes=%s,dHP=%s/%s"
% (atkID, defID, buffID, skillID, ownerID, hurtValue, hurtTypes, dHP, dMaxHP))
+ costLayer = kwargs.get("costLayer")
layer = curBuff.GetLayer()
- if layer > 0:
- hurtValue *= layer
- GameWorld.DebugLog(" 多层buff伤害: hurtValue=%s,layer=%s" % (hurtValue, layer))
+ if costLayer > 0:
+ hurtValue *= min(costLayer, max(1, layer))
+ GameWorld.DebugLog(" 消耗buff层伤害: hurtValue=%s,costLayer=%s,layer=%s" % (hurtValue, costLayer, layer))
+ else:
+ if layer > 0:
+ hurtValue *= layer
+ GameWorld.DebugLog(" 多层buff伤害: hurtValue=%s,layer=%s" % (hurtValue, layer))
if "FinalDamPer" in kwargs:
FinalDamPer = kwargs["FinalDamPer"]
hurtValue *= (10000 + FinalDamPer) / 10000.0
@@ -2554,7 +2609,7 @@
Sync_UseSkill(turnFight, atkObj, useSkill)
- DoBeAttackResult(turnFight, atkObj, useSkill)
+ DoBeAttackResult(turnFight, atkObj, useSkill, curBuff)
# 通知结束标签
Sync_TurnFightTag(turnFight, useTag, 1)
--
Gitblit v1.8.0