From f5cd3e2c7831b5f7e8865475804580ec713702ad Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 26 十一月 2021 11:24:41 +0800 Subject: [PATCH] 9341 【BT5】【主干】【后端】情缘系统(吃喜糖改为随机获得一种物品) --- ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py | 6 +++--- ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 9 ++++++--- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py | 14 ++++++++++++-- ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Couple.py | 16 +++++++++------- PySysDB/PySysDBG.h | 3 ++- 5 files changed, 32 insertions(+), 16 deletions(-) diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h index 9d6c4c2..cb665b4 100644 --- a/PySysDB/PySysDBG.h +++ b/PySysDB/PySysDBG.h @@ -882,7 +882,8 @@ BYTE IsDayReset; //是否每日重置 DWORD Prosperity; //初始繁荣度 WORD CandyTimes; //喜糖持续时间秒 - list CandyItemInfo; //喜糖物品列表[[物品ID,个数,是否拍品], ...] + list CandyItemWeightInfo; //喜糖物品库权重列表[[权重, 物品ID,个数,是否拍品], ...] + list CandyNotifyItemInfo; //喜糖需要广播的物品ID列表 list BrideGiftItemInfo; //聘礼物品列表[[物品ID,个数,是否拍品], ...] char WorldNotifyKey; //广播key }; diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Couple.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Couple.py index f5164e8..50dc7d3 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Couple.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Couple.py @@ -26,7 +26,7 @@ GameWorld.DebugAnswer(curPlayer, "---------- %s" % GameWorld.GetCurrentDataTimeStr()) GameWorld.DebugAnswer(curPlayer, "清除伴侣: Couple 0") GameWorld.DebugAnswer(curPlayer, "重置聘礼: Couple 0 1") - GameWorld.DebugAnswer(curPlayer, "设置伴侣: Couple 1 目标ID [可选聘礼ID]") + GameWorld.DebugAnswer(curPlayer, "设置成亲: Couple 1 伴侣ID [可选聘礼ID]") GameWorld.DebugAnswer(curPlayer, "设亲密度: Couple 2 目标ID 亲密度") GameWorld.DebugAnswer(curPlayer, "增加密度: Couple 3 目标ID 亲密度") return @@ -67,19 +67,21 @@ return - # 设置伴侣 + # 设置成亲 elif value1 == 1: - if couple: - GameWorld.DebugAnswer(curPlayer, "已有伴侣! coupleID=%s" % couple.GetCoupleID(playerID)) - return tagPlayerID = gmList[1] if len(gmList) > 1 else 0 if not tagPlayerID or tagPlayerID == playerID: GameWorld.DebugAnswer(curPlayer, "非法伴侣玩家ID:%s,playerID=%s" % (tagPlayerID, playerID)) return + if couple: + if couple.GetCoupleID(playerID) != tagPlayerID: + GameWorld.DebugAnswer(curPlayer, "已有伴侣! coupleID=%s" % couple.GetCoupleID(playerID)) + return tagCouple = coupleMgr.GetCouple(tagPlayerID) if tagCouple: - GameWorld.DebugAnswer(curPlayer, "对方已有伴侣! tagCoupleID=%s" % tagCouple.GetCoupleID(tagPlayerID)) - return + if tagCouple.GetCoupleID(tagPlayerID) != playerID: + GameWorld.DebugAnswer(curPlayer, "对方已有伴侣! tagCoupleID=%s" % tagCouple.GetCoupleID(tagPlayerID)) + return bridePriceID = gmList[2] if len(gmList) > 2 else 1 diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py index 40c7c07..0bcfc8e 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py @@ -985,16 +985,16 @@ ## 从列表中产生物品,[[权重, object], ....] # @param weightList 待选列表 -def GetResultByWeightList(weightList): +def GetResultByWeightList(weightList, defValue=None): randList = [] weight = 0 for info in weightList: weight += info[0] randList.append([weight, info[1] if len(info) == 2 else info[1:]]) if not randList: - return + return defValue rate = random.randint(1, randList[-1][0]) - return GetResultByRiseList(randList, rate) + return GetResultByRiseList(randList, rate, defValue) ## 获得对应数位的值 # @param numValue 数值 diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py index 9972bfd..cf44f8f 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py @@ -722,7 +722,8 @@ ("BYTE", "IsDayReset", 0), ("DWORD", "Prosperity", 0), ("WORD", "CandyTimes", 0), - ("list", "CandyItemInfo", 0), + ("list", "CandyItemWeightInfo", 0), + ("list", "CandyNotifyItemInfo", 0), ("list", "BrideGiftItemInfo", 0), ("char", "WorldNotifyKey", 0), ), @@ -2231,7 +2232,8 @@ self.IsDayReset = 0 self.Prosperity = 0 self.CandyTimes = 0 - self.CandyItemInfo = [] + self.CandyItemWeightInfo = [] + self.CandyNotifyItemInfo = [] self.BrideGiftItemInfo = [] self.WorldNotifyKey = "" return @@ -2241,7 +2243,8 @@ def GetIsDayReset(self): return self.IsDayReset # 是否每日重置 def GetProsperity(self): return self.Prosperity # 初始繁荣度 def GetCandyTimes(self): return self.CandyTimes # 喜糖持续时间秒 - def GetCandyItemInfo(self): return self.CandyItemInfo # 喜糖物品列表[[物品ID,个数,是否拍品], ...] + def GetCandyItemWeightInfo(self): return self.CandyItemWeightInfo # 喜糖物品库权重列表[[权重, 物品ID,个数,是否拍品], ...] + def GetCandyNotifyItemInfo(self): return self.CandyNotifyItemInfo # 喜糖需要广播的物品ID列表 def GetBrideGiftItemInfo(self): return self.BrideGiftItemInfo # 聘礼物品列表[[物品ID,个数,是否拍品], ...] def GetWorldNotifyKey(self): return self.WorldNotifyKey # 广播key diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py index e0b6f71..7eeaebd 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py @@ -928,7 +928,9 @@ ipyData = IpyGameDataPY.GetIpyGameData("Marry", bridePriceID) if not ipyData: return - candyItemInfo = ipyData.GetCandyItemInfo() + candyItemInfo = [] + candyItemWeightInfo = ipyData.GetCandyItemWeightInfo() + candyNotifyItemInfo = ipyData.GetCandyNotifyItemInfo() playerFreeEatCount = candyObj.playerFreeEatCountDict.get(playerID, 0) playerFireworksCount = candyObj.fireworksCountDict.get(playerID, 0) @@ -951,7 +953,15 @@ updProsperity = candyObj.prosperity updPlayerFreeEatCount = candyObj.playerFreeEatCountDict.get(playerID, 0) - GameWorld.Log("更新喜糖宴会: updProsperity=%s,updPlayerFreeEatCount=%s" % (updProsperity, updPlayerFreeEatCount), playerID) + + getCandyItemInfo = GameWorld.GetResultByWeightList(candyItemWeightInfo, []) + if getCandyItemInfo: + candyItemInfo.append(getCandyItemInfo) + itemID, itemCount = getCandyItemInfo[:2] + if itemID in candyNotifyItemInfo: + PlayerControl.WorldNotify(0, "EatCandyItemNotify", [curPlayer.GetName(), itemID, itemCount]) + GameWorld.Log("更新喜糖宴会: updProsperity=%s,updPlayerFreeEatCount=%s,getCandyItemInfo=%s" + % (updProsperity, updPlayerFreeEatCount, getCandyItemInfo), playerID) return canBuy, isFree, costMoneyType, costMoneyValue, candyItemInfo -- Gitblit v1.8.0