From b3c6d36f5ae851f09a3c2e73494ff19956b06fb0 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 11 四月 2025 16:56:14 +0800 Subject: [PATCH] 10367 【越南】【英语】【BT】【砍树】仙盟攻城战-服务端(跨服仙盟支持;后台查询区服仙盟支持;活动时间流程支持;攻城战主活动功能完整流程:公示、分组、战备、战斗、榜单、竞猜、领奖等;) --- ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py | 92 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 92 insertions(+), 0 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py index d7ad0ea..31bad23 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py @@ -1223,6 +1223,98 @@ # 找不到的默认取最后一名 return orderDict[orderList[-1]] if isDefaultLast else defaultValue +def GetActBillboardTempAward(playerID, billID, billRank, awardTemplateID, billValue=None, fmLV=None): + '''获取玩家活动榜单领奖奖励 + @param playerID: 领奖玩家ID + @param billID: 上榜ID,不一定是玩家ID,比如仙盟ID + @param billRank: 上榜名次 + @param awardTemplateID: 活动奖励模版ID + @param billValue: 榜单上榜值,None时不处理 + @param fmLV: 活动时的仙盟成员等级,None时不处理 + ''' + playerAwardItemList = [] + if not billRank: + return playerAwardItemList + ipyDataList = IpyGameDataPY.GetIpyGameDataList("ActBillboardAwardTemp", awardTemplateID) + if not ipyDataList: + ErrLog("活动榜单奖励模版找不到模版! billID=%s,billRank=%s,awardTemplateID=%s,billValue=%s,fmLV=%s" + % (billID, billRank, awardTemplateID, billValue, fmLV), playerID) + return playerAwardItemList + + for ipyData in ipyDataList: + rank = ipyData.GetRank() + if billRank > rank: + continue + needValue = ipyData.GetNeedValue() + if needValue and billValue != None and billValue < needValue: + continue + + awardItemList = ipyData.GetAwardItemList() + leaderAwardItemList = ipyData.GetLeaderAwardItemList() + eliteAwardItemList = ipyData.GetEliteAwardItemList() + + if fmLV != None and fmLV == IPY_GameServer.fmlLeader and leaderAwardItemList: + playerAwardItemList += leaderAwardItemList + elif fmLV != None and fmLV > IPY_GameServer.fmlMember and eliteAwardItemList: + playerAwardItemList += eliteAwardItemList + else: + playerAwardItemList += awardItemList + + valueAwardEx = ipyData.GetValueAwardEx() + if valueAwardEx and billValue != None: + valueAwardExList = valueAwardEx.keys() + valueAwardExList.sort() + awardItemExList = [] + for valueEx in valueAwardExList: + if billValue < valueEx: + break + awardItemExList = valueAwardEx[valueEx] # 取最大满足条件的一档 + playerAwardItemList += awardItemExList + + return playerAwardItemList + + ErrLog("活动榜单奖励模版找不到奖励! billID=%s,billRank=%s,awardTemplateID=%s,billValue=%s,fmLV=%s" + % (billID, billRank, awardTemplateID, billValue, fmLV), playerID) + return playerAwardItemList + +def GetActGuessRightRankAwardIDDict(guessTemplateID): + ## 获取活动竞猜默认猜中名次对应奖励ID信息 + # @return: {(名次, ...):awardID, ...} 用于 StatActGuessRet 统计竞猜结果 + rightRankAwardIDDict = {} + guessIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGuess", guessTemplateID) + if guessIpyDataList: + for ipyData in guessIpyDataList: + awardID = ipyData.GetAwardID() + rightRankList = ipyData.GetRightRankList() + rightRankAwardIDDict[tuple(rightRankList)] = awardID + return rightRankAwardIDDict + +def StatActGuessRet(playerID, playerGuessIDList, finalRankIDList, rightRankAwardIDDict, statGuessRetDict, actName=""): + '''统计活动竞猜结果 + @param playerID: 参与竞猜的玩家ID + @param playerGuessIDList: 玩家竞猜选择的ID顺序列表 + @param finalRankIDList: 活动最终排名顺序列表 + @param rightRankAwardIDDict: GetActGuessRightRankAwardIDDict 返回值 + @param statGuessRetDict: 统计结果 {awardID:[猜中的玩家ID, ...], ...} + @param actName: 活动名称,可选参数,输出日志用 + ''' + rightRankList = [] # 玩家猜中的名次列表 + for index, finalID in enumerate(finalRankIDList): + rank = index + 1 + guessID = playerGuessIDList[index] if len(playerGuessIDList) > index else 0 + if guessID == finalID: + rightRankList.append(rank) + + rightRankTuple = tuple(rightRankList) + awardID = rightRankAwardIDDict.get(rightRankTuple, 0) + if awardID not in statGuessRetDict: + statGuessRetDict[awardID] = [] + rightPlayerIDList = statGuessRetDict[awardID] + rightPlayerIDList.append(playerID) + DebugLog(" %s统计玩家竞猜结果: playerID=%s,rightRankTuple=%s,awardID=%s,%s" + % (actName, playerID, rightRankTuple, awardID, len(rightPlayerIDList))) + return + ##概率相关, 这个事件是否能够出现 # @param rate 基础几率 # @param maxRate 最大几率 -- Gitblit v1.8.0