From 614707fc640e731fe8b78351f0933371da5450bf Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 11 十月 2023 16:32:02 +0800 Subject: [PATCH] 9952 【BT0.1】【主干】仙盟修改(阵法) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyZhenfa.py | 213 +++++++++++ ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 23 + ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py | 9 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 60 +++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 119 ++++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py | 3 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 60 +++ ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 119 ++++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 48 ++ PySysDB/PySysDBPY.h | 16 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyZhenfa.py | 140 +++++++ ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 15 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 31 + ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 15 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py | 10 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 6 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py | 1 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py | 6 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py | 3 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 12 ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/FamilyZhenfa.py | 60 +++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 5 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/CalcNoLineEffect.py | 14 PySysDB/PySysDBG.h | 9 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 38 + 25 files changed, 1,021 insertions(+), 14 deletions(-) diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h index f129180..2a0c85f 100644 --- a/PySysDB/PySysDBG.h +++ b/PySysDB/PySysDBG.h @@ -49,6 +49,15 @@ list AwardItemList; //奖励物品列表[[物品ID,个数,是否拍品], ...] }; +//仙盟阵法表 + +struct tagFamilyZhenfa +{ + BYTE _ZhenfaType; // 阵法类型 + WORD _ZhenfaLV; // 阵法等级 + DWORD LVUpNeedExp; //升下一级所需经验 +}; + //集市查询表 struct tagMarketQuery diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h index dfe9400..b7c5b6b 100644 --- a/PySysDB/PySysDBPY.h +++ b/PySysDB/PySysDBPY.h @@ -760,6 +760,11 @@ DWORD CftJobAAtkReducePer; //战士攻击伤害减免 DWORD CftJobBAtkReducePer; //法师攻击伤害减免 DWORD CftJobCAtkReducePer; //弓箭攻击伤害减免 + DWORD CftAffairSpeedPer; //仙盟事务速度加成 + DWORD CftFamilyBossHurtPer; //仙盟BOSS伤害加成 + DWORD CftFamilyWarHPPer; //仙盟联赛生命加成 + DWORD CftFamilyWarAtkPer; //仙盟联赛攻击加成 + DWORD CftFamilySitExpPer; //仙盟打坐经验加成 }; //NPC掉落表 @@ -2605,6 +2610,17 @@ list AwardItemList; //奖励物品列表[[物品ID,个数,是否拍品], ...] }; +//仙盟阵法表 + +struct tagFamilyZhenfa +{ + BYTE _ZhenfaType; // 阵法类型 + WORD _ZhenfaLV; // 阵法等级 + DWORD LVUpNeedExp; //升下一级所需经验 + list LVAttrType; //累计总属性类型 + list LVAttrValue; //累计总属性值 +}; + //装备洗练等级上限 struct tagItemWashMax diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py index 0b592aa..5e60744 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py @@ -14221,6 +14221,66 @@ #------------------------------------------------------ +# A6 14 家族阵法升级 #tagCMFamilyZhenfaLVUP + +class tagCMFamilyZhenfaLVUP(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ZhenfaType", c_ubyte), # 阵法类型 + ("ItemID", c_int), # 消耗的物品ID + ("ItemCount", c_ushort), # 消耗个数,默认1 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA6 + 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 = 0xA6 + self.SubCmd = 0x14 + self.ZhenfaType = 0 + self.ItemID = 0 + self.ItemCount = 0 + return + + def GetLength(self): + return sizeof(tagCMFamilyZhenfaLVUP) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A6 14 家族阵法升级 //tagCMFamilyZhenfaLVUP: + Cmd:%s, + SubCmd:%s, + ZhenfaType:%d, + ItemID:%d, + ItemCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ZhenfaType, + self.ItemID, + self.ItemCount + ) + return DumpString + + +m_NAtagCMFamilyZhenfaLVUP=tagCMFamilyZhenfaLVUP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyZhenfaLVUP.Cmd,m_NAtagCMFamilyZhenfaLVUP.SubCmd))] = m_NAtagCMFamilyZhenfaLVUP + + +#------------------------------------------------------ #A6 02 申请加入家族#tagCGRequesJoinFamily class tagCGRequesJoinFamily(Structure): diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index becbb41..2ee07d9 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -26601,6 +26601,125 @@ #------------------------------------------------------ +# A5 09 仙盟阵法信息 #tagMCFamilyZhenfaInfo + +class tagMCFamilyZhenfa(Structure): + _pack_ = 1 + _fields_ = [ + ("ZhenfaType", c_ubyte), # 阵法类型 + ("ZhenfaLV", c_ushort), # 阵法等级 + ("ZhenfaExp", 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.ZhenfaType = 0 + self.ZhenfaLV = 0 + self.ZhenfaExp = 0 + return + + def GetLength(self): + return sizeof(tagMCFamilyZhenfa) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 09 仙盟阵法信息 //tagMCFamilyZhenfaInfo: + ZhenfaType:%d, + ZhenfaLV:%d, + ZhenfaExp:%d + '''\ + %( + self.ZhenfaType, + self.ZhenfaLV, + self.ZhenfaExp + ) + return DumpString + + +class tagMCFamilyZhenfaInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)// 当前培养阵法的玩家ID,如果有做自动捐献,需等收到的玩家ID为自己的时候才发送下一个捐献包 + Count = 0 #(BYTE Count) + ZhenfaInfoList = list() #(vector<tagMCFamilyZhenfa> ZhenfaInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA5 + self.Head.SubCmd = 0x09 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temZhenfaInfoList = tagMCFamilyZhenfa() + _pos = temZhenfaInfoList.ReadData(_lpData, _pos) + self.ZhenfaInfoList.append(temZhenfaInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA5 + self.Head.SubCmd = 0x09 + self.PlayerID = 0 + self.Count = 0 + self.ZhenfaInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + for i in range(self.Count): + length += self.ZhenfaInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.ZhenfaInfoList[i].GetLength(), self.ZhenfaInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + Count:%d, + ZhenfaInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCFamilyZhenfaInfo=tagMCFamilyZhenfaInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyZhenfaInfo.Head.Cmd,m_NAtagMCFamilyZhenfaInfo.Head.SubCmd))] = m_NAtagMCFamilyZhenfaInfo + + +#------------------------------------------------------ #A5 01 查看已申请加入的家族信息 #tagMCNotifyRequestJoinFamilyInfo class tagRequestJoinFamily(Structure): diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/FamilyZhenfa.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/FamilyZhenfa.py new file mode 100644 index 0000000..ffab940 --- /dev/null +++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/FamilyZhenfa.py @@ -0,0 +1,60 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +#------------------------------------------------------------------------------- +# +##@package GM.Commands.FamilyZhenfa +# +# @todo:仙盟阵法 +# @author hxp +# @date 2023-10-11 +# @version 1.0 +# +# 详细描述: 仙盟阵法 +# +#------------------------------------------------------------------------------- +#"""Version = 2023-10-11 16:30""" +#------------------------------------------------------------------------------- + +import GameWorld +import ShareDefine +import PlayerFamilyZhenfa +import IpyGameDataPY + +## 执行逻辑 +# @param curPlayer 当前玩家 +# @param cmdList 参数列表 +# @return None +# @remarks 函数详细说明. +def OnExec(curPlayer, cmdList): + if not cmdList: + GameWorld.DebugAnswer(curPlayer, "重置阵法: FamilyZhenfa 0") + GameWorld.DebugAnswer(curPlayer, "设置阵法: FamilyZhenfa 类型 等级 经验 可选仙盟ID") + return + + playerID = curPlayer.GetPlayerID() + familyID = curPlayer.GetFamilyID() + if not familyID: + GameWorld.DebugAnswer(curPlayer, "没有仙盟") + return + + value1 = cmdList[0] + if len(cmdList) == 1 and value1 == 0: + GameWorld.GetFamilyActionManager().DelFamilyAction(familyID, ShareDefine.Def_ActionType_FamilyZhenfa) + PlayerFamilyZhenfa.SyncMap_AllFamilyZhenfaInfo() + return + + if len(cmdList) == 3: + zhenfaType = value1 + zhenfaLV = cmdList[1] if len(cmdList) > 1 else 0 + zhenfaExp = cmdList[2] if len(cmdList) > 2 else 0 + ipyData = IpyGameDataPY.GetIpyGameData("FamilyZhenfa", zhenfaType, zhenfaLV) + if not ipyData: + GameWorld.DebugAnswer(curPlayer, "不存在该阵法类型: %s, LV:%s" % (zhenfaType, zhenfaLV)) + return + actionData = PlayerFamilyZhenfa.GetFamilyZhenfaData(familyID, zhenfaType) + PlayerFamilyZhenfa.SetZhenfaLV(actionData, zhenfaLV) + PlayerFamilyZhenfa.SetZhenfaExp(actionData, zhenfaExp) + PlayerFamilyZhenfa.SyncMap_FamilyZhenfaInfo(familyID, "GM", {"playerID":playerID, "refreshAttr":True}) + GameWorld.DebugAnswer(curPlayer, "设置阵法类型: %s, LV:%s, Exp:%s" % (zhenfaType, zhenfaLV, zhenfaExp)) + + return diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py index 59dfaa4..d1fc6ae 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py @@ -97,6 +97,7 @@ import PlayerFairyDomain import IpyGameDataPY import PlayerFamilyParty +import PlayerFamilyZhenfa import GameWorldFamilyWar import GameWorldArena import CrossLuckyCloudBuy @@ -1502,6 +1503,8 @@ SendMapCommMapLinePlayerCount(True) # 同步一次普通地图线路人数信息 #随机假仙盟 PlayerFamily.RandomFakeFamily() + #仙盟阵法 + PlayerFamilyZhenfa.OnMapServerInitOK() #缥缈仙域 PlayerFairyDomain.OnMapServerInitOK() #情侣信息 diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py index 24001a4..2d96800 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py @@ -68,6 +68,12 @@ ("list", "AwardItemList", 0), ), + "FamilyZhenfa":( + ("BYTE", "ZhenfaType", 1), + ("WORD", "ZhenfaLV", 1), + ("DWORD", "LVUpNeedExp", 0), + ), + "MarketQuery":( ("WORD", "QueryType", 1), ("dict", "LimitInfo", 0), @@ -991,6 +997,19 @@ def GetRecordIndex(self): return self.RecordIndex # 奖励记录索引,同奖励类型时记录索引不可重复 def GetNeedHurtTotal(self): return self.NeedHurtTotal # 所需总伤血 def GetAwardItemList(self): return self.AwardItemList # 奖励物品列表[[物品ID,个数,是否拍品], ...] + +# 仙盟阵法表 +class IPY_FamilyZhenfa(): + + def __init__(self): + self.ZhenfaType = 0 + self.ZhenfaLV = 0 + self.LVUpNeedExp = 0 + return + + def GetZhenfaType(self): return self.ZhenfaType # 阵法类型 + def GetZhenfaLV(self): return self.ZhenfaLV # 阵法等级 + def GetLVUpNeedExp(self): return self.LVUpNeedExp # 升下一级所需经验 # 集市查询表 class IPY_MarketQuery(): @@ -2795,6 +2814,8 @@ self.ipyFamilyLen = len(self.ipyFamilyCache) self.ipyFamilyBossHurtAwardCache = self.__LoadFileData("FamilyBossHurtAward", IPY_FamilyBossHurtAward) self.ipyFamilyBossHurtAwardLen = len(self.ipyFamilyBossHurtAwardCache) + self.ipyFamilyZhenfaCache = self.__LoadFileData("FamilyZhenfa", IPY_FamilyZhenfa) + self.ipyFamilyZhenfaLen = len(self.ipyFamilyZhenfaCache) self.ipyMarketQueryCache = self.__LoadFileData("MarketQuery", IPY_MarketQuery) self.ipyMarketQueryLen = len(self.ipyMarketQueryCache) self.ipyAuctionItemCache = self.__LoadFileData("AuctionItem", IPY_AuctionItem) @@ -3129,6 +3150,8 @@ def GetFamilyByIndex(self, index): return self.ipyFamilyCache[index] def GetFamilyBossHurtAwardCount(self): return self.ipyFamilyBossHurtAwardLen def GetFamilyBossHurtAwardByIndex(self, index): return self.ipyFamilyBossHurtAwardCache[index] + def GetFamilyZhenfaCount(self): return self.ipyFamilyZhenfaLen + def GetFamilyZhenfaByIndex(self, index): return self.ipyFamilyZhenfaCache[index] def GetMarketQueryCount(self): return self.ipyMarketQueryLen def GetMarketQueryByIndex(self, index): return self.ipyMarketQueryCache[index] def GetAuctionItemCount(self): return self.ipyAuctionItemLen diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py index be10c3e..202a55f 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py @@ -1613,6 +1613,7 @@ # @param leavePlayerID 离开的玩家ID # @return None def __DoPlayerLeaveFamilyByID(curFamily, leavePlayerID, tagPlayer=None): + PlayerCompensation.SendMailByKey("LeaveFamilyNotice", [leavePlayerID], []) PlayerFamilyAction.DelFamilyOfficerModelEquip(curFamily.GetID(), leavePlayerID) # 玩家战盟名变更处理 __OnFamilyNameChange(leavePlayerID, '') diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyZhenfa.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyZhenfa.py new file mode 100644 index 0000000..45adc2d --- /dev/null +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyZhenfa.py @@ -0,0 +1,140 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +#------------------------------------------------------------------------------- +# +##@package PlayerFamilyZhenfa +# +# @todo:仙盟阵法 +# @author hxp +# @date 2023-10-11 +# @version 1.0 +# +# 详细描述: 仙盟阵法 +# +#------------------------------------------------------------------------------- +#"""Version = 2023-10-11 16:30""" +#------------------------------------------------------------------------------- + +import ShareDefine +import IpyGameDataPY +import GameWorld + +ActionType_FamilyZhenfa = ShareDefine.Def_ActionType_FamilyZhenfa + +def GetZhenfaType(actionData): return actionData.GetValue1() +def SetZhenfaType(actionData, zhenfaType): actionData.SetValue1(zhenfaType) +def GetZhenfaLV(actionData): return actionData.GetValue2() +def SetZhenfaLV(actionData, lv): actionData.SetValue2(lv) +def GetZhenfaExp(actionData): return actionData.GetValue3() +def SetZhenfaExp(actionData, exp): actionData.SetValue3(exp) + +## 玩家登录 +# @param None +# @return None +def OnPlayerLogin(curPlayer): + return + +def GetFamilyZhenfaData(familyID, zhenfaType): + ## 获取仙盟阵法数据 + findActionData = None + zhenfaAction = GameWorld.GetFamilyActionManager().GetFamilyAction(familyID, ActionType_FamilyZhenfa) + for index in range(zhenfaAction.Count()): + actionData = zhenfaAction.At(index) + if zhenfaType == GetZhenfaType(actionData): + findActionData = actionData + break + if not findActionData: + findActionData = zhenfaAction.AddAction() + findActionData.SetFamilyId(familyID) + findActionData.SetActionType(ActionType_FamilyZhenfa) + SetZhenfaType(findActionData, zhenfaType) + return findActionData + +def MapServer_FamilyZhenfa(curPlayer, msgList): + familyID, playerID, msgType, msgData = msgList + + # 加经验 + if msgType == "AddExp": + __DoFamilyZhenfa_AddExp(familyID, playerID, msgType, msgData) + + return + +def __DoFamilyZhenfa_AddExp(familyID, playerID, msgType, msgData): + zhenfaType, addTotalExp = msgData + + actionData = GetFamilyZhenfaData(familyID, zhenfaType) + zhenfaLV = GetZhenfaLV(actionData) + zhenfaExp = GetZhenfaExp(actionData) + + ipyData = IpyGameDataPY.GetIpyGameData("FamilyZhenfa", zhenfaType, zhenfaLV) + if not ipyData: + return + LVUpNeedExp = ipyData.GetLVUpNeedExp() + if not LVUpNeedExp: + GameWorld.DebugLog("该阵法已满级:familyID=%s,zhenfaType=%s,zhenfaLV=%s" % (familyID, zhenfaType, zhenfaLV), playerID) + return + + curExp = zhenfaExp + addTotalExp + GameWorld.DebugLog("执行阵法升级: familyID=%s,zhenfaType=%s,zhenfaLV=%s,zhenfaExp=%s,addTotalExp=%s,curExp=%s" + % (familyID, zhenfaType, zhenfaLV, zhenfaExp, addTotalExp, curExp), playerID) + + isLVUP = False + # 安全为主不用while + for _ in xrange(100): + if not LVUpNeedExp or curExp < LVUpNeedExp: + break + ipyData = IpyGameDataPY.GetIpyGameData("FamilyZhenfa", zhenfaType, zhenfaLV + 1) + if not ipyData: + break + + curExp = curExp - LVUpNeedExp + zhenfaLV += 1 + isLVUP = True + GameWorld.DebugLog(" 阵法升级: LVUpNeedExp=%s,zhenfaLV=%s,curExp=%s" % (LVUpNeedExp, zhenfaLV, curExp), playerID) + + LVUpNeedExp = ipyData.GetLVUpNeedExp() + + SetZhenfaLV(actionData, zhenfaLV) + SetZhenfaExp(actionData, curExp) + GameWorld.DebugLog(" 更新阵法: familyID=%s,zhenfaType=%s,zhenfaLV=%s,curExp=%s" % (familyID, zhenfaType, zhenfaLV, curExp), playerID) + + # 同步地图 + SyncMap_FamilyZhenfaInfo(familyID, msgType, {"playerID":playerID, "refreshAttr":isLVUP}) + return + +def GetSyncMapFamilyZhenfaInfo(familyID): + info = {} + zhenfaAction = GameWorld.GetFamilyActionManager().GetFamilyAction(familyID, ActionType_FamilyZhenfa) + for index in range(zhenfaAction.Count()): + actionData = zhenfaAction.At(index) + zhenfaType = GetZhenfaType(actionData) + info[zhenfaType] = {"LV":GetZhenfaLV(actionData), "Exp":GetZhenfaExp(actionData)} + return info + +def SyncMap_FamilyZhenfaInfo(familyID, msgType, dataEx={}): + ## 同步单个仙盟所有阵法信息到地图 + zhenfaInfo = {familyID:GetSyncMapFamilyZhenfaInfo(familyID)} + syncDict = {"zhenfaInfo":zhenfaInfo, "msgType":msgType, "familyID":familyID} + syncDict.update(dataEx) + GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FamilyZhenfaInfo, syncDict) + return + +def SyncMap_AllFamilyZhenfaInfo(): + ## 同步所有仙盟阵法信息到地图 + zhenfaInfo = {} + familyManager = GameWorld.GetFamilyManager() + for i in range(familyManager.GetCount()): + family = familyManager.GetAt(i) + familyID = family.GetID() + if not familyID: + continue + info = GetSyncMapFamilyZhenfaInfo(familyID) + if info: + zhenfaInfo[familyID] = info + syncDict = {"zhenfaInfo":zhenfaInfo, "msgType":"allFamily"} + GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FamilyZhenfaInfo, syncDict) + return + +def OnMapServerInitOK(): + SyncMap_AllFamilyZhenfaInfo() + return diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py index f402a26..fdc8c07 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py @@ -51,6 +51,7 @@ import GameWorldBoss import GameWorldFamilyWar #import PlayerFamilyTech +import PlayerFamilyZhenfa import PlayerFamilyRedPacket import PlayerFBHelpBattle import PlayerHorsePetBoss @@ -903,6 +904,15 @@ if callName =="AllFamilyBossOver": PlayerFamilyBoss.AllFamilyBossKilled() return + #仙盟阵法 + if callName =="FamilyZhenfa": + curPlayer = None + if srcPlayerID: + curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) + if not curPlayer: + return + PlayerFamilyZhenfa.MapServer_FamilyZhenfa(curPlayer, eval(resultName)) + return #骑宠BOSS结束 if callName =="HorsePetBossOver": PlayerHorsePetBoss.HorsePetBossKilled(int(resultName)) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py index 15c7437..7c7059c 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py @@ -168,6 +168,7 @@ Def_Notify_WorldKey_FamilyPartyInfo = "FamilyPartyInfo" # 仙盟宴会数据 Def_Notify_WorldKey_FamilyPartyAddFamilyActivity = "FamilyPartyAddFamilyActivity" # 仙盟宴会地图成员增加仙盟活跃令 +Def_Notify_WorldKey_FamilyZhenfaInfo = "FamilyZhenfaInfo" # 仙盟阵法数据 Def_Notify_WorldKey_AddFamilyAuctionItem = "AddFamilyAuctionItem" # 添加仙盟拍品 Def_Notify_WorldKey_AddSystemAuctionItem = "AddSystemAuctionItem" # 添加系统拍品 @@ -684,6 +685,12 @@ Def_Effect_PeerlessWeaponTrainAttrPer = 158 # 灭世培养属性加成(攻防血) Def_Effect_PeerlessWeapon2TrainAttrPer = 159 # 弑神培养属性加成(攻防血) Def_Effect_LianTiAttrPer = 160 # 炼体属性百分比(攻防血) + +Def_Effect_AffairSpeedPer = 161 # 仙盟事务速度加成 +Def_Effect_FamilyBossHurtPer = 162 # 仙盟BOSS伤害加成 +Def_Effect_FamilyWarHPPer = 163 # 仙盟联赛生命加成 +Def_Effect_FamilyWarAtkPer = 164 # 仙盟联赛攻击加成 +Def_Effect_FamilySitExpPer = 165 # 仙盟打坐经验加成 #增加%d物理伤害值,其中a值为伤害值 Def_Effect_AddAtk = 1005 @@ -1332,7 +1339,7 @@ Def_ActionType_LeaderImpeachTime, # 族长下线了多久5 Def_ActionType_FamilyBossFB, #记录家族boss副本信息6 Def_ActionType_FamilyStore, #记录战盟仓库操作记录7 - Def_ActionType_XXX8, #8 + Def_ActionType_FamilyZhenfa, #仙盟阵法8 Def_ActionType_XXX9, #9 Def_ActionType_XXX10, #10 Def_ActionType_OfficerModelEquip, #记录家族有职位的成员模型装备信息11 @@ -1617,7 +1624,7 @@ )=range(5) # 战斗力模块类型 -Def_MFPType_Max = 32 +Def_MFPType_Max = 33 ModuleFightPowerTypeList = ( Def_MFPType_Role, # 角色 0 Def_MFPType_Equip, # 装备(装备本身) 1 @@ -1650,6 +1657,7 @@ Def_MFPType_Enchant, # 附魔 28 Def_MFPType_Gubao, # 古宝 29 Def_MFPType_Shentong, # 神通 30 +Def_MFPType_FamilyZhenfa, # 阵法 31 Def_MFPType_Other, # 其他 ) = range(Def_MFPType_Max) @@ -1944,7 +1952,8 @@ SuccType_EquipStarTotal, # 全身升星总星数X星 174 SuccType_EquipWashTotal, # 全身洗炼总等级X级 175 SuccType_CrossPK, # 跨服PK x次 176 -) = range(1, 177) +SuccType_FamilyZhenfaExp, # 仙盟阵法捐献累计经验 177 +) = range(1, 178) # 节日红包成就类型 FeastRedPackSuccessTypeList = range(SuccType_FeastRedPack_TalkWorld, SuccType_FeastRedPack_FBSweep + 1) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini index 585f309..14dec80 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini @@ -247,6 +247,18 @@ PacketSubCMD_1=0x07 PacketCallFunc_1=OnPlayerFamilyTechLVUP +;家族阵法 +[PlayerFamilyZhenfa] +ScriptName = Player\PlayerFamilyZhenfa.py +Writer = hxp +Releaser = hxp +RegType = 0 +RegisterPackCount = 1 + +PacketCMD_1=0xA6 +PacketSubCMD_1=0x14 +PacketCallFunc_1=OnFamilyZhenfaLVUP + ;宠物 [PlayerPet] ScriptName = Player\PlayerPet.py diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py index fb00ad9..9fe28e8 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py @@ -2323,7 +2323,11 @@ if findBuff: reduceFinalHurtPer = findBuff.GetSkill().GetEffect(0).GetEffectValue(0) aFinalHurtPer -= reduceFinalHurtPer - + + # 仙盟boss最终伤害加成 + if atkObjType == IPY_GameWorld.gotPlayer and mapID == ChConfig.Def_FBMapID_FamilyBossMap: + aFinalHurtPer += PlayerControl.GetFamilyBossHurtPer(atkObj) + atkStateMark = GetObjAtkStateMark(atkObj) defStateMark = GetObjAtkStateMark(defObj) hurtFormulaKey = "%sV%s_%s" % (atkStateMark, defStateMark, atkType) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py index 91a6e06..5a2d2bc 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py @@ -74,7 +74,7 @@ Def_BuffValue_Count = 3 # buff记录的value个数 #游戏对象属性-------------------------------------------- -Def_Calc_AllAttrType_MAX = 160 +Def_Calc_AllAttrType_MAX = 166 #基本属性BUFF计算,顺序与 ObjProperty_AttrByIndex 对应,同时也为buff效果ID同步通知策划 TYPE_Calc_AttrList = ( TYPE_Calc_Metal, # 金 1 @@ -247,7 +247,13 @@ TYPE_Calc_WingTrainAttrPer, # 翅膀培养属性加成(攻防血) TYPE_Calc_PeerlessWeaponTrainAttrPer, # 灭世培养属性加成(攻防血) TYPE_Calc_PeerlessWeapon2TrainAttrPer, # 弑神培养属性加成(攻防血) -TYPE_Calc_LianTiAttrPer, # 坐骑培养属性加成(攻防血) 159 +TYPE_Calc_LianTiAttrPer, # 炼体属性百分比(攻防血) 159 +TYPE_Calc_160, # 160 +TYPE_Calc_AffairSpeedPer, # 仙盟事务速度加成 +TYPE_Calc_FamilyBossHurtPer, # 仙盟BOSS伤害加成 +TYPE_Calc_FamilyWarHPPer, # 仙盟联赛生命加成 +TYPE_Calc_FamilyWarAtkPer, # 仙盟联赛攻击加成 +TYPE_Calc_FamilySitExpPer, # 仙盟打坐经验加成 165 ) = range(1, Def_Calc_AllAttrType_MAX) ## 支持大数值属性,超过20E @@ -2286,6 +2292,7 @@ 1000 * 10, # 幸运云购 1000 * 10, # 跨服排位 1000 * 10, # 跨服妖魔boss + 1000 * 10, # 仙盟阵法 ] TYPE_Player_Tick_Count = len(TYPE_Player_Tick_Time) @@ -2366,6 +2373,7 @@ TYPE_Player_Tick_LuckyCloudBuy, #幸运云购 TYPE_Player_Tick_Championship, #跨服排位 TYPE_Player_Tick_CrossYaomoBoss, #跨服妖魔boss +TYPE_Player_Tick_FamilyZhenfa, #仙盟阵法 ) = range(0, TYPE_Player_Tick_Count) #--------------------------------------------------------------------- @@ -3338,6 +3346,11 @@ Def_PlayerKey_PeerlessWeaponTrainAttrPer = "PeerlessWeaponTrainAttrPer" # 灭世培养属性加成 Def_PlayerKey_PeerlessWeapon2TrainAttrPer = "PeerlessWeapon2TrainAttrPer" # 弑神培养属性加成 Def_PlayerKey_LianTiAttrPer = "LianTiAttrPer" # 炼体属性属性加成 +Def_PlayerKey_AffairSpeedPer = "AffairSpeedPer" # 仙盟事务速度加成 +Def_PlayerKey_FamilyBossHurtPer = "FamilyBossHurtPer" # 仙盟BOSS伤害加成 +Def_PlayerKey_FamilyWarHPPer = "FamilyWarHPPer" # 仙盟联赛生命加成 +Def_PlayerKey_FamilyWarAtkPer = "FamilyWarAtkPer" # 仙盟联赛攻击加成 +Def_PlayerKey_FamilySitExpPer = "FamilySitExpPer" # 仙盟打坐经验加成 Def_PlayerKey_StoneBasePer = "StoneBasePer" # 宝石基础属性百分比 Def_PlayerKey_RealmBasePer = "RealmBasePer" # 境界基础属性百分比 Def_PlayerKey_WingHPPer = "WingHPPer" # 翅膀生命百分比 @@ -4612,6 +4625,11 @@ ShareDefine.Def_Effect_SkillReducePer5:[[TYPE_Calc_SkillReducePer5], False, TYPE_Linear], # 受到技能伤害减少5 ShareDefine.Def_Effect_SkillReducePer6:[[TYPE_Calc_SkillReducePer6], False, TYPE_Linear], # 受到技能伤害减少6 ShareDefine.Def_Effect_SkillReducePer7:[[TYPE_Calc_SkillReducePer7], False, TYPE_Linear], # 受到技能伤害减少7 + ShareDefine.Def_Effect_AffairSpeedPer:[[TYPE_Calc_AffairSpeedPer], False, TYPE_Linear], + ShareDefine.Def_Effect_FamilyBossHurtPer:[[TYPE_Calc_FamilyBossHurtPer], False, TYPE_Linear], + ShareDefine.Def_Effect_FamilyWarHPPer:[[TYPE_Calc_FamilyWarHPPer], False, TYPE_Linear], + ShareDefine.Def_Effect_FamilyWarAtkPer:[[TYPE_Calc_FamilyWarAtkPer], False, TYPE_Linear], + ShareDefine.Def_Effect_FamilySitExpPer:[[TYPE_Calc_FamilySitExpPer], False, TYPE_Linear], #战斗非线性 ShareDefine.Def_Effect_SuperHitPer:[[TYPE_Calc_SuperHit], False, TYPE_NoLinear], @@ -4725,6 +4743,14 @@ ShareDefine.Def_Effect_JadeAddPer: [ShareDefine.retJade, [ShareDefine.Def_Effect_Atk, ShareDefine.Def_Effect_MinAtk, ShareDefine.Def_Effect_MaxAtk, ShareDefine.Def_Effect_MaxHP]], } +# 指定地图生效的非线性属性配置 +MapAttrInfoDict_Noline = { + Def_FBMapID_FamilyWar:{ + TYPE_Calc_FamilyWarAtkPer:[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], + TYPE_Calc_FamilyWarHPPer:[TYPE_Calc_AttrMaxHP], + } + } + #属性线性索引 CalcAttrIndexList = ( CalcAttr_Base, @@ -4803,7 +4829,8 @@ Def_CalcAttrFunc_HorseStar, # 坐骑星级 57 Def_CalcAttrFunc_PetStar, # 灵宠星级 58 Def_CalcAttrFunc_TitleStar, # 称号星级 59 -) = range(60) +Def_CalcAttrFunc_FamilyZhenfa, # 仙盟阵法 60 +) = range(61) # 技能功能点列表 - 默认不算战力,不享受百分比加成,技能功能点暂时配置,之后优化技能属性逻辑后可去掉 CalcAttrFuncSkillList = [Def_CalcAttrFunc_HorseSkill, Def_CalcAttrFunc_PetSkill, Def_CalcAttrFunc_DogzBattleSkill] @@ -4844,6 +4871,7 @@ ShareDefine.Def_MFPType_GatherSoul:[Def_CalcAttrFunc_GatherSoul], ShareDefine.Def_MFPType_Coat:[Def_CalcAttrFunc_Coat], ShareDefine.Def_MFPType_Dogz:[Def_CalcAttrFunc_Dogz, Def_CalcAttrFunc_DogzEquip, Def_CalcAttrFunc_DogzEquipPlus, Def_CalcAttrFunc_DogzBattleSkill], + ShareDefine.Def_MFPType_FamilyZhenfa:[Def_CalcAttrFunc_FamilyZhenfa], ShareDefine.Def_MFPType_Other:[Def_CalcAttrFunc_Success, Def_CalcAttrFunc_FamilyTech, Def_CalcAttrFunc_EquipDecompose], } @@ -4854,7 +4882,7 @@ ShareDefine.Def_MFPType_MagicWeapon1:"人族", ShareDefine.Def_MFPType_MagicWeapon2:"魔族", ShareDefine.Def_MFPType_MagicWeapon3:"仙族", ShareDefine.Def_MFPType_MagicWeapon4:"王者", ShareDefine.Def_MFPType_PetSoul:"宠魂", ShareDefine.Def_MFPType_HorseSoul:"骑魂", ShareDefine.Def_MFPType_FaQi:"法器", ShareDefine.Def_MFPType_Dogz:"神兽", ShareDefine.Def_MFPType_Coat:"时装", ShareDefine.Def_MFPType_Love:"情缘", ShareDefine.Def_MFPType_Charm:"魅力", ShareDefine.Def_MFPType_LianTi:"炼体", - ShareDefine.Def_MFPType_Enchant:"附魔", ShareDefine.Def_MFPType_Gubao:"古宝", ShareDefine.Def_MFPType_Shentong:"神通", + ShareDefine.Def_MFPType_Enchant:"附魔", ShareDefine.Def_MFPType_Gubao:"古宝", ShareDefine.Def_MFPType_Shentong:"神通", ShareDefine.Def_MFPType_FamilyZhenfa:"阵法", ShareDefine.Def_MFPType_Other:"其他", } @@ -4873,7 +4901,7 @@ Def_CalcAttrFunc_WingTarin:"翅膀培养", Def_CalcAttrFunc_PeerlessWeaponTrain:"灭世培养", Def_CalcAttrFunc_PeerlessWeapon2Train:"噬魂培养", Def_CalcAttrFunc_FaQi:"法器", Def_CalcAttrFunc_LoveRing:"情戒基础", Def_CalcAttrFunc_LoveRingCouple:"情戒仙侣", Def_CalcAttrFunc_Charm:"魅力", Def_CalcAttrFunc_LianTi:"炼体", Def_CalcAttrFunc_Enchant:"附魔", Def_CalcAttrFunc_LingQiEnchant:"灵器附魔", Def_CalcAttrFunc_Gubao:"古宝", Def_CalcAttrFunc_Shentong:"神通", - Def_CalcAttrFunc_HorseStar:"坐骑星级", Def_CalcAttrFunc_PetStar:"宠物星级", Def_CalcAttrFunc_TitleStar:"称号星级", + Def_CalcAttrFunc_HorseStar:"坐骑星级", Def_CalcAttrFunc_PetStar:"宠物星级", Def_CalcAttrFunc_TitleStar:"称号星级", Def_CalcAttrFunc_FamilyZhenfa:"阵法", } #------------------------------------------------------------------------------- diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py index 0b592aa..5e60744 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py @@ -14221,6 +14221,66 @@ #------------------------------------------------------ +# A6 14 家族阵法升级 #tagCMFamilyZhenfaLVUP + +class tagCMFamilyZhenfaLVUP(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ZhenfaType", c_ubyte), # 阵法类型 + ("ItemID", c_int), # 消耗的物品ID + ("ItemCount", c_ushort), # 消耗个数,默认1 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA6 + 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 = 0xA6 + self.SubCmd = 0x14 + self.ZhenfaType = 0 + self.ItemID = 0 + self.ItemCount = 0 + return + + def GetLength(self): + return sizeof(tagCMFamilyZhenfaLVUP) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A6 14 家族阵法升级 //tagCMFamilyZhenfaLVUP: + Cmd:%s, + SubCmd:%s, + ZhenfaType:%d, + ItemID:%d, + ItemCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ZhenfaType, + self.ItemID, + self.ItemCount + ) + return DumpString + + +m_NAtagCMFamilyZhenfaLVUP=tagCMFamilyZhenfaLVUP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyZhenfaLVUP.Cmd,m_NAtagCMFamilyZhenfaLVUP.SubCmd))] = m_NAtagCMFamilyZhenfaLVUP + + +#------------------------------------------------------ #A6 02 申请加入家族#tagCGRequesJoinFamily class tagCGRequesJoinFamily(Structure): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py index becbb41..2ee07d9 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py @@ -26601,6 +26601,125 @@ #------------------------------------------------------ +# A5 09 仙盟阵法信息 #tagMCFamilyZhenfaInfo + +class tagMCFamilyZhenfa(Structure): + _pack_ = 1 + _fields_ = [ + ("ZhenfaType", c_ubyte), # 阵法类型 + ("ZhenfaLV", c_ushort), # 阵法等级 + ("ZhenfaExp", 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.ZhenfaType = 0 + self.ZhenfaLV = 0 + self.ZhenfaExp = 0 + return + + def GetLength(self): + return sizeof(tagMCFamilyZhenfa) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 09 仙盟阵法信息 //tagMCFamilyZhenfaInfo: + ZhenfaType:%d, + ZhenfaLV:%d, + ZhenfaExp:%d + '''\ + %( + self.ZhenfaType, + self.ZhenfaLV, + self.ZhenfaExp + ) + return DumpString + + +class tagMCFamilyZhenfaInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)// 当前培养阵法的玩家ID,如果有做自动捐献,需等收到的玩家ID为自己的时候才发送下一个捐献包 + Count = 0 #(BYTE Count) + ZhenfaInfoList = list() #(vector<tagMCFamilyZhenfa> ZhenfaInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA5 + self.Head.SubCmd = 0x09 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temZhenfaInfoList = tagMCFamilyZhenfa() + _pos = temZhenfaInfoList.ReadData(_lpData, _pos) + self.ZhenfaInfoList.append(temZhenfaInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA5 + self.Head.SubCmd = 0x09 + self.PlayerID = 0 + self.Count = 0 + self.ZhenfaInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + for i in range(self.Count): + length += self.ZhenfaInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.ZhenfaInfoList[i].GetLength(), self.ZhenfaInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + Count:%d, + ZhenfaInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCFamilyZhenfaInfo=tagMCFamilyZhenfaInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyZhenfaInfo.Head.Cmd,m_NAtagMCFamilyZhenfaInfo.Head.SubCmd))] = m_NAtagMCFamilyZhenfaInfo + + +#------------------------------------------------------ #A5 01 查看已申请加入的家族信息 #tagMCNotifyRequestJoinFamilyInfo class tagRequestJoinFamily(Structure): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py index 9c78e57..e4ff915 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py @@ -618,6 +618,11 @@ ("DWORD", "CftJobAAtkReducePer", 0), ("DWORD", "CftJobBAtkReducePer", 0), ("DWORD", "CftJobCAtkReducePer", 0), + ("DWORD", "CftAffairSpeedPer", 0), + ("DWORD", "CftFamilyBossHurtPer", 0), + ("DWORD", "CftFamilyWarHPPer", 0), + ("DWORD", "CftFamilyWarAtkPer", 0), + ("DWORD", "CftFamilySitExpPer", 0), ), "NPCDropItem":( @@ -2019,6 +2024,14 @@ ("list", "AwardItemList", 0), ), + "FamilyZhenfa":( + ("BYTE", "ZhenfaType", 1), + ("WORD", "ZhenfaLV", 1), + ("DWORD", "LVUpNeedExp", 0), + ("list", "LVAttrType", 0), + ("list", "LVAttrValue", 0), + ), + "ItemWashMax":( ("BYTE", "Type", 1), ("BYTE", "Star", 1), @@ -3364,7 +3377,12 @@ self.CftJobCHurtAddPer = 0 self.CftJobAAtkReducePer = 0 self.CftJobBAtkReducePer = 0 - self.CftJobCAtkReducePer = 0 + self.CftJobCAtkReducePer = 0 + self.CftAffairSpeedPer = 0 + self.CftFamilyBossHurtPer = 0 + self.CftFamilyWarHPPer = 0 + self.CftFamilyWarAtkPer = 0 + self.CftFamilySitExpPer = 0 return def GetLV(self): return self.LV # 等级 @@ -3395,7 +3413,12 @@ def GetCftJobCHurtAddPer(self): return self.CftJobCHurtAddPer # 对目标弓箭伤害加成 def GetCftJobAAtkReducePer(self): return self.CftJobAAtkReducePer # 战士攻击伤害减免 def GetCftJobBAtkReducePer(self): return self.CftJobBAtkReducePer # 法师攻击伤害减免 - def GetCftJobCAtkReducePer(self): return self.CftJobCAtkReducePer # 弓箭攻击伤害减免 + def GetCftJobCAtkReducePer(self): return self.CftJobCAtkReducePer # 弓箭攻击伤害减免 + def GetCftAffairSpeedPer(self): return self.CftAffairSpeedPer # 仙盟事务速度加成 + def GetCftFamilyBossHurtPer(self): return self.CftFamilyBossHurtPer # 仙盟BOSS伤害加成 + def GetCftFamilyWarHPPer(self): return self.CftFamilyWarHPPer # 仙盟联赛生命加成 + def GetCftFamilyWarAtkPer(self): return self.CftFamilyWarAtkPer # 仙盟联赛攻击加成 + def GetCftFamilySitExpPer(self): return self.CftFamilySitExpPer # 仙盟打坐经验加成 # NPC掉落表 class IPY_NPCDropItem(): @@ -6341,6 +6364,23 @@ def GetNeedHurtTotal(self): return self.NeedHurtTotal # 所需总伤血 def GetAwardItemList(self): return self.AwardItemList # 奖励物品列表[[物品ID,个数,是否拍品], ...] +# 仙盟阵法表 +class IPY_FamilyZhenfa(): + + def __init__(self): + self.ZhenfaType = 0 + self.ZhenfaLV = 0 + self.LVUpNeedExp = 0 + self.LVAttrType = [] + self.LVAttrValue = [] + return + + def GetZhenfaType(self): return self.ZhenfaType # 阵法类型 + def GetZhenfaLV(self): return self.ZhenfaLV # 阵法等级 + def GetLVUpNeedExp(self): return self.LVUpNeedExp # 升下一级所需经验 + def GetLVAttrType(self): return self.LVAttrType # 累计总属性类型 + def GetLVAttrValue(self): return self.LVAttrValue # 累计总属性值 + # 装备洗练等级上限 class IPY_ItemWashMax(): @@ -7076,6 +7116,8 @@ self.ipyFamilyBossAwardLen = len(self.ipyFamilyBossAwardCache) self.ipyFamilyBossHurtAwardCache = self.__LoadFileData("FamilyBossHurtAward", IPY_FamilyBossHurtAward) self.ipyFamilyBossHurtAwardLen = len(self.ipyFamilyBossHurtAwardCache) + self.ipyFamilyZhenfaCache = self.__LoadFileData("FamilyZhenfa", IPY_FamilyZhenfa) + self.ipyFamilyZhenfaLen = len(self.ipyFamilyZhenfaCache) self.ipyItemWashMaxCache = self.__LoadFileData("ItemWashMax", IPY_ItemWashMax) self.ipyItemWashMaxLen = len(self.ipyItemWashMaxCache) self.ipyHorsePetBossAwardCache = self.__LoadFileData("HorsePetBossAward", IPY_HorsePetBossAward) @@ -7684,6 +7726,8 @@ def GetFamilyBossAwardByIndex(self, index): return self.ipyFamilyBossAwardCache[index] def GetFamilyBossHurtAwardCount(self): return self.ipyFamilyBossHurtAwardLen def GetFamilyBossHurtAwardByIndex(self, index): return self.ipyFamilyBossHurtAwardCache[index] + def GetFamilyZhenfaCount(self): return self.ipyFamilyZhenfaLen + def GetFamilyZhenfaByIndex(self, index): return self.ipyFamilyZhenfaCache[index] def GetItemWashMaxCount(self): return self.ipyItemWashMaxLen def GetItemWashMaxByIndex(self, index): return self.ipyItemWashMaxCache[index] def GetHorsePetBossAwardCount(self): return self.ipyHorsePetBossAwardLen 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 3f8a707..b6f8e28 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py @@ -79,6 +79,7 @@ import PlayerVip import PlayerRefineStove import PlayerFamilyTech +import PlayerFamilyZhenfa import PlayerCostRebate import PlayerActGarbageSorting import GY_Query_CrossRealmReg @@ -3881,6 +3882,11 @@ JobAAtkReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobAAtkReducePer) * fpParam.GetCftJobAAtkReducePer() # 战士攻击伤害减免 JobBAtkReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobBAtkReducePer) * fpParam.GetCftJobBAtkReducePer() # 法师攻击伤害减免 JobCAtkReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobCAtkReducePer) * fpParam.GetCftJobCAtkReducePer() # 弓箭攻击伤害减免 + AffairSpeedPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AffairSpeedPer) * fpParam.GetCftAffairSpeedPer() # 仙盟事务速度加成 + FamilyBossHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FamilyBossHurtPer) * fpParam.GetCftFamilyBossHurtPer() # 仙盟BOSS伤害加成 + FamilyWarHPPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FamilyWarHPPer) * fpParam.GetCftFamilyWarHPPer() # 仙盟联赛生命加成 + FamilyWarAtkPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FamilyWarAtkPer) * fpParam.GetCftFamilyWarAtkPer() # 仙盟联赛攻击加成 + FamilySitExpPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FamilySitExpPer) * fpParam.GetCftFamilySitExpPer() # 仙盟打坐经验加成 NormalHurt = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_NormalHurt) NormalHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_NormalHurtPer) * fpParam.GetCftNormalHurtPer() # 普通附加伤害加成 @@ -4572,6 +4578,7 @@ PlayerCharm.CalcCharmAttr(curPlayer) PlayerLianTi.CalcLianTiAttr(curPlayer) PlayerShentong.CalcShentongAttr(curPlayer) + PlayerFamilyZhenfa.CalcZhenfaAttr(curPlayer) self.RefreshAllState(isForce=True) GameWorld.DebugLog("End ReCalcAllState!!!") return @@ -5002,6 +5009,7 @@ # 层非线性战斗属性累加 battleNolineAttrBuff = allAttrListBuffs[ChConfig.CalcAttr_BattleNoline] + CalcNoLineEffect.AddPlayerMapAttrNolineEffect(curPlayer, battleNolineAttrBuff) CalcNoLineEffect.ChangePlayerAttrInNoLineEffectList(curPlayer, battleNolineAttrBuff, isBuffAttr=True) battleAttrBuff = allAttrListBuffs[ChConfig.CalcAttr_Battle] @@ -7076,6 +7084,29 @@ def GetLianTiAttrPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LianTiAttrPer) def SetLianTiAttrPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_LianTiAttrPer, value) +def GetAttr160(curPlayer): return 0 +def SetAttr160(curPlayer, value): pass + +# 仙盟事务速度加成 +def GetAffairSpeedPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AffairSpeedPer) +def SetAffairSpeedPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AffairSpeedPer, value) + +# 仙盟BOSS伤害加成 +def GetFamilyBossHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilyBossHurtPer) +def SetFamilyBossHurtPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyBossHurtPer, value) + +# 仙盟联赛生命加成 +def GetFamilyWarHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilyWarHPPer) +def SetFamilyWarHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyWarHPPer, value) + +# 仙盟联赛攻击加成 +def GetFamilyWarAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilyWarAtkPer) +def SetFamilyWarAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyWarAtkPer, value) + +# 仙盟打坐经验加成 +def GetFamilySitExpPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilySitExpPer) +def SetFamilySitExpPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilySitExpPer, value) + # 宝石基础属性百分比 def GetStoneBasePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_StoneBasePer) def SetStoneBasePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_StoneBasePer, value) 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 dffb4e2..fea6218 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py @@ -45,6 +45,7 @@ import PlayerControl import PlayerWorldAverageLv import PlayerFamily +import PlayerFamilyZhenfa import PlayerOnlinePrize import NPCCustomRefresh import PlayerLoginDayAward @@ -1336,6 +1337,10 @@ GameLogic_FamilyParty.DoAddFamilyMemberFamilyActivity(familyID, addFamilyActivity) return + if key == ShareDefine.Def_Notify_WorldKey_FamilyZhenfaInfo: + PlayerFamilyZhenfa.GameServer_FamilyZhenfa(eval(msgValue)) + return + if key == ShareDefine.Def_Notify_WorldKey_AssistBoss: assistData = eval(msgValue) if GameWorld.GetMap().GetMapID() == assistData[0]: 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 71cee19..e03761f 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 ChMapToGamePyPack import PlayerFamilyTech import PlayerFamilyRedPacket +import PlayerFamilyZhenfa import SkillCommon import BuffSkill import ItemCommon @@ -160,6 +161,7 @@ GameLogic_FamilyWar.DoCheckChampionFamilyTitle(curPlayer) GameLogic_FamilyBoss.OnEnterFamily(curPlayer) PlayerFamilyRedPacket.CreatCacheRedPacktet(curPlayer) + PlayerFamilyZhenfa.OnEnterFamily(curPlayer) return ## 退出家族触发事件 @@ -186,6 +188,7 @@ #清空仓库积分 PlayerControl.SetPlayerCurrency(curPlayer, ShareDefine.TYPE_Price_FamilyStoreScore, 0) GameLogic_FamilyWar.DoCheckChampionFamilyTitle(curPlayer) + PlayerFamilyZhenfa.OnLeaveFamily(curPlayer) return ## 家族等级加持buff变更处理(进、退家族时 及 家族等级变更时) @@ -641,6 +644,7 @@ SyncFamilyActivityInfo(curPlayer) Sync_FamilyDayRewardState(curPlayer) __FamilyAffair_CheckReset(curPlayer) + PlayerFamilyZhenfa.OnPlayerLogin(curPlayer) return def FamilyPlayerOnLoginCross(curPlayer): @@ -1139,6 +1143,11 @@ starInfo = affairStarDict.get(str(star), []) needDuration = starInfo[1] if len(starInfo) > 1 else 0 # 可扩展减时长属性 + speedPer = PlayerControl.GetAffairSpeedPer(curPlayer) + if speedPer: + needDuration = int(needDuration * max(10000 - speedPer, 0) / 10000.0) + #GameWorld.DebugLog("事务加速: needDuration=%s,speedPer=%s" % (needDuration, speedPer), curPlayer.GetPlayerID()) + remainDuration = max(needDuration - (curTime - startTime), 0) return remainDuration diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyZhenfa.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyZhenfa.py new file mode 100644 index 0000000..0f048b1 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyZhenfa.py @@ -0,0 +1,213 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +#------------------------------------------------------------------------------- +# +##@package Player.PlayerFamilyZhenfa +# +# @todo:仙盟阵法 +# @author hxp +# @date 2023-10-11 +# @version 1.0 +# +# 详细描述: 仙盟阵法 +# +#------------------------------------------------------------------------------- +#"""Version = 2023-10-11 16:30""" +#------------------------------------------------------------------------------- + +import GameWorld +import ItemCommon +import ShareDefine +import PlayerControl +import NetPackCommon +import ChPyNetSendPack +import IpyGameDataPY +import PlayerSuccess +import IPY_GameWorld +import PyGameData +import ChConfig + +ZhenfaKey_LV = "LV" +ZhenfaKey_Exp = "Exp" + +def OnPlayerLogin(curPlayer): + Sync_FamilyZhenfaInfo(curPlayer) + return + +def OnLeaveFamily(curPlayer): + #Sync_FamilyZhenfaInfo(curPlayer) + RefreshZhenfaAttr(curPlayer) + return + +def OnEnterFamily(curPlayer): + Sync_FamilyZhenfaInfo(curPlayer) + RefreshZhenfaAttr(curPlayer) + return + +def GetFamilyZhenfaInfo(familyID, zhenfaType, key, defValue=0): + ## 获取家族阵法信息 + zhenfaInfo = PyGameData.g_familyZhenfaInfo.get(familyID, {}) + info = zhenfaInfo.get(zhenfaType, {}) + return info.get(key, defValue) + +def GameServer_FamilyZhenfa(msgDict): + zhenfaInfo = msgDict.get("zhenfaInfo", {}) # {familyID:{zhenfaType:{k:v, }, ...}, ...} + msgType = msgDict.get("msgType", "") + familyID = msgDict.get("familyID", 0) # 指定更新的仙盟 + playerID = msgDict.get("playerID", 0) # 触发更新的玩家ID + refreshAttr = msgDict.get("refreshAttr", 1) + + # 所有仙盟,直接替换 + if msgType == "allFamily": + PyGameData.g_familyZhenfaInfo = zhenfaInfo + # 单个仙盟更新 + else: + PyGameData.g_familyZhenfaInfo.update(zhenfaInfo) + + #GameWorld.DebugLog("更新阵法信息: %s" % PyGameData.g_familyZhenfaInfo) + playerManager = GameWorld.GetPlayerManager() + for index in xrange(playerManager.GetPlayerCount()): + curPlayer = playerManager.GetPlayerByIndex(index) + if curPlayer.GetID() == 0: + continue + + if familyID and curPlayer.GetFamilyID() != familyID: + continue + + OnFamilyZhenfaRefresh(curPlayer, refreshAttr, playerID) + + return + +def SendGameServer_FamilyZhenfa(curPlayer, familyID, playerID, msgType, msgData): + GameWorld.DebugLog("仙盟阵法同步GameServer: familyID=%s,msgType=%s,%s" % (familyID, msgType, msgData), playerID) + msgInfo = str([familyID, playerID, msgType, msgData]) + GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "FamilyZhenfa", msgInfo, len(msgInfo)) + return + +#// A6 14 家族阵法升级 #tagCMFamilyZhenfaLVUP +# +#struct tagCMFamilyZhenfaLVUP +#{ +# tagHead Head; +# BYTE ZhenfaType; // 阵法类型 +# DWORD ItemID; // 消耗的物品ID +# WORD ItemCount; // 消耗个数,默认1 +#}; +def OnFamilyZhenfaLVUP(index, clientData, tick): + curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + playerID = curPlayer.GetPlayerID() + familyID = curPlayer.GetFamilyID() + zhenfaType = clientData.ZhenfaType + useItemID = clientData.ItemID + useItemCount = clientData.ItemCount + if not familyID: + GameWorld.DebugLog("没有仙盟,无法升级阵法", playerID) + return + if not useItemID or useItemCount <= 0: + GameWorld.DebugLog("没有指定升级阵法物品: useItemID=%s,useItemCount=%s" % (useItemID, useItemCount), playerID) + return + zhenfaLV = GetFamilyZhenfaInfo(familyID, zhenfaType, ZhenfaKey_LV) + ipyData = IpyGameDataPY.GetIpyGameData("FamilyZhenfa", zhenfaType, zhenfaLV) + if not ipyData: + return + LVUpNeedExp = ipyData.GetLVUpNeedExp() + if not LVUpNeedExp: + GameWorld.DebugLog("该阵法已满级:zhenfaType=%s,zhenfaLV=%s" % (zhenfaType, zhenfaLV), playerID) + return + expItemDict = IpyGameDataPY.GetFuncEvalCfg("FamilyZhenfa", 1) + if str(zhenfaType) not in expItemDict: + GameWorld.DebugLog("不存在该阵法类型: zhenfaType=%s" % zhenfaType, playerID) + return + expItemList = expItemDict[str(zhenfaType)] + + if useItemID not in expItemList: + GameWorld.DebugLog("该物品不能升级该阵法:zhenfaType=%s,useItemID=%s not in %s" % (zhenfaType, useItemID, expItemList), playerID) + return + + itemData = GameWorld.GetGameData().GetItemByTypeID(useItemID) + if not itemData: + return + itemExp = itemData.GetEffectByIndex(0).GetEffectValue(0) # 默认效果1 A值为可加经验 + if not itemExp: + GameWorld.DebugLog("该物品没有阵法经验:useItemID=%s" % useItemID, playerID) + return + + itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) + lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList({useItemID:useItemCount}, itemPack) + if lackItemDict: + GameWorld.DebugLog("阵法升级物品不足:useItemID=%s,useItemCount=%s,lackItemDict=%s" % (useItemID, useItemCount, lackItemDict), playerID) + return + + if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_FamilyZhenfa, tick): + GameWorld.DebugLog("阵法升级操作CD中...", playerID) + PlayerControl.NotifyCode(curPlayer, "RequestLater") + return + + ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "FamilyZhenfaLVUP") + + addTotalExp = itemExp * useItemCount + PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FamilyZhenfaExp, addTotalExp) + + SendGameServer_FamilyZhenfa(curPlayer, familyID, playerID, "AddExp", [zhenfaType, addTotalExp]) + return + +def OnFamilyZhenfaRefresh(curPlayer, refreshAttr, opPlayerID): + if curPlayer.GetPlayerID() == opPlayerID: + curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_FamilyZhenfa, 0) + + Sync_FamilyZhenfaInfo(curPlayer, opPlayerID) + + if refreshAttr: + RefreshZhenfaAttr(curPlayer) + return + +def RefreshZhenfaAttr(curPlayer): + CalcZhenfaAttr(curPlayer) + PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() + return + +def CalcZhenfaAttr(curPlayer): + + allAttrList = [{} for i in range(4)] + + familyID = curPlayer.GetFamilyID() + if familyID: + expItemDict = IpyGameDataPY.GetFuncEvalCfg("FamilyZhenfa", 1) + zhenfaInfo = PyGameData.g_familyZhenfaInfo.get(familyID, {}) + for zhenfaTypeStr in expItemDict.keys(): + zhenfaType = int(zhenfaTypeStr) + info = zhenfaInfo.get(zhenfaType, {}) + zhenfaLV = info.get(ZhenfaKey_LV, 0) + ipyData = IpyGameDataPY.GetIpyGameData("FamilyZhenfa", zhenfaType, zhenfaLV) + if not ipyData: + continue + attrTypeList, attrValueList = ipyData.GetLVAttrType(), ipyData.GetLVAttrValue() + for i, attrID in enumerate(attrTypeList): + PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList) + + # 保存计算值 + PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FamilyZhenfa, allAttrList) + return + +def Sync_FamilyZhenfaInfo(curPlayer, playerID=0): + familyID = curPlayer.GetFamilyID() + if not familyID: + return + + zhenfaInfoList = [] + zhenfaInfo = PyGameData.g_familyZhenfaInfo.get(familyID, {}) + for zhenfaType, info in zhenfaInfo.items(): + zhenfa = ChPyNetSendPack.tagMCFamilyZhenfa() + zhenfa.Clear() + zhenfa.ZhenfaType = zhenfaType + zhenfa.ZhenfaLV = info.get(ZhenfaKey_LV, 0) + zhenfa.ZhenfaExp = info.get(ZhenfaKey_Exp, 0) + zhenfaInfoList.append(zhenfa) + + clientPack = ChPyNetSendPack.tagMCFamilyZhenfaInfo() + clientPack.Clear() + clientPack.PlayerID = playerID + clientPack.ZhenfaInfoList = zhenfaInfoList + clientPack.Count = len(clientPack.ZhenfaInfoList) + NetPackCommon.SendFakePack(curPlayer, clientPack) + return diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py index 58b580d..a481010 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py @@ -122,3 +122,6 @@ g_coupleInfo = {} # {playerID:[coupleID, coupleName], ...} g_playerPriWoodPileNPCDict = {} # {playerID:[npcObj, ...], ...} + +g_familyZhenfaInfo = {} # 仙盟阵法信息{familyID:{zhenfaType:{k:v, }, ...}, ...} + diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py index 15c7437..7c7059c 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py @@ -168,6 +168,7 @@ Def_Notify_WorldKey_FamilyPartyInfo = "FamilyPartyInfo" # 仙盟宴会数据 Def_Notify_WorldKey_FamilyPartyAddFamilyActivity = "FamilyPartyAddFamilyActivity" # 仙盟宴会地图成员增加仙盟活跃令 +Def_Notify_WorldKey_FamilyZhenfaInfo = "FamilyZhenfaInfo" # 仙盟阵法数据 Def_Notify_WorldKey_AddFamilyAuctionItem = "AddFamilyAuctionItem" # 添加仙盟拍品 Def_Notify_WorldKey_AddSystemAuctionItem = "AddSystemAuctionItem" # 添加系统拍品 @@ -684,6 +685,12 @@ Def_Effect_PeerlessWeaponTrainAttrPer = 158 # 灭世培养属性加成(攻防血) Def_Effect_PeerlessWeapon2TrainAttrPer = 159 # 弑神培养属性加成(攻防血) Def_Effect_LianTiAttrPer = 160 # 炼体属性百分比(攻防血) + +Def_Effect_AffairSpeedPer = 161 # 仙盟事务速度加成 +Def_Effect_FamilyBossHurtPer = 162 # 仙盟BOSS伤害加成 +Def_Effect_FamilyWarHPPer = 163 # 仙盟联赛生命加成 +Def_Effect_FamilyWarAtkPer = 164 # 仙盟联赛攻击加成 +Def_Effect_FamilySitExpPer = 165 # 仙盟打坐经验加成 #增加%d物理伤害值,其中a值为伤害值 Def_Effect_AddAtk = 1005 @@ -1332,7 +1339,7 @@ Def_ActionType_LeaderImpeachTime, # 族长下线了多久5 Def_ActionType_FamilyBossFB, #记录家族boss副本信息6 Def_ActionType_FamilyStore, #记录战盟仓库操作记录7 - Def_ActionType_XXX8, #8 + Def_ActionType_FamilyZhenfa, #仙盟阵法8 Def_ActionType_XXX9, #9 Def_ActionType_XXX10, #10 Def_ActionType_OfficerModelEquip, #记录家族有职位的成员模型装备信息11 @@ -1617,7 +1624,7 @@ )=range(5) # 战斗力模块类型 -Def_MFPType_Max = 32 +Def_MFPType_Max = 33 ModuleFightPowerTypeList = ( Def_MFPType_Role, # 角色 0 Def_MFPType_Equip, # 装备(装备本身) 1 @@ -1650,6 +1657,7 @@ Def_MFPType_Enchant, # 附魔 28 Def_MFPType_Gubao, # 古宝 29 Def_MFPType_Shentong, # 神通 30 +Def_MFPType_FamilyZhenfa, # 阵法 31 Def_MFPType_Other, # 其他 ) = range(Def_MFPType_Max) @@ -1944,7 +1952,8 @@ SuccType_EquipStarTotal, # 全身升星总星数X星 174 SuccType_EquipWashTotal, # 全身洗炼总等级X级 175 SuccType_CrossPK, # 跨服PK x次 176 -) = range(1, 177) +SuccType_FamilyZhenfaExp, # 仙盟阵法捐献累计经验 177 +) = range(1, 178) # 节日红包成就类型 FeastRedPackSuccessTypeList = range(SuccType_FeastRedPack_TalkWorld, SuccType_FeastRedPack_FBSweep + 1) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/CalcNoLineEffect.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/CalcNoLineEffect.py index 08ba180..4ea3121 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/CalcNoLineEffect.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/CalcNoLineEffect.py @@ -21,8 +21,22 @@ import ChConfig import EffGetSet import GameWorld +import FBCommon #--------------------------------------------------------------------- +def AddPlayerMapAttrNolineEffect(curPlayer, effectDict): + ## 根据玩家当前属性给玩家添加非线性效果加成 - 某些地图才生效的 + mapID = FBCommon.GetRecordMapID(curPlayer.GetMapID()) + mapAttrNolineInfo = ChConfig.MapAttrInfoDict_Noline.get(mapID, {}) + for attrIndex, effAttrIndexList in mapAttrNolineInfo.items(): + curValue = EffGetSet.GetValueByEffIndex(curPlayer, attrIndex) + if not curValue: + #GameWorld.DebugLog(" 没有该类属性: attrIndex=%s" % attrIndex) + continue + for effAttrIndex in effAttrIndexList: + effectDict[effAttrIndex] = effectDict.get(effAttrIndex, 0) + curValue + return + ## 给玩家添加非线性Buff效果 # @param curPlayer 当前玩家 # @param effectDict 效果列表 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py index d900d00..c03979f 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py @@ -199,6 +199,12 @@ [lambda curObj:PlayerControl.GetPeerlessWeaponTrainAttrPer(curObj), lambda curObj, value:PlayerControl.SetPeerlessWeaponTrainAttrPer(curObj, value), 0, 0, 0], # 灭世培养属性加成 [lambda curObj:PlayerControl.GetPeerlessWeapon2TrainAttrPer(curObj), lambda curObj, value:PlayerControl.SetPeerlessWeapon2TrainAttrPer(curObj, value), 0, 0, 0], # 弑神培养属性加成 [lambda curObj:PlayerControl.GetLianTiAttrPer(curObj), lambda curObj, value:PlayerControl.SetLianTiAttrPer(curObj, value), 0, 0, 0], # 炼体属性属性加成 + [lambda curObj:PlayerControl.GetAttr160(curObj), lambda curObj, value:PlayerControl.SetAttr160(curObj, value), 0, 0, 0], # 160 + [lambda curObj:PlayerControl.GetAffairSpeedPer(curObj), lambda curObj, value:PlayerControl.SetAffairSpeedPer(curObj, value), 0, 0, 0], # 仙盟事务速度加成 + [lambda curObj:PlayerControl.GetFamilyBossHurtPer(curObj), lambda curObj, value:PlayerControl.SetFamilyBossHurtPer(curObj, value), 0, 0, 0], # 仙盟BOSS伤害加成 + [lambda curObj:PlayerControl.GetFamilyWarHPPer(curObj), lambda curObj, value:PlayerControl.SetFamilyWarHPPer(curObj, value), 0, 0, 0], # 仙盟联赛生命加成 + [lambda curObj:PlayerControl.GetFamilyWarAtkPer(curObj), lambda curObj, value:PlayerControl.SetFamilyWarAtkPer(curObj, value), 0, 0, 0], # 仙盟联赛攻击加成 + [lambda curObj:PlayerControl.GetFamilySitExpPer(curObj), lambda curObj, value:PlayerControl.SetFamilySitExpPer(curObj, value), 0, 0, 0], # 仙盟打坐经验加成 ] ## 通过索引获得属性值 -- Gitblit v1.8.0