From 03a39e5d596b6430db2c406a3349a1dae75c7f2e Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 09 七月 2024 16:11:00 +0800 Subject: [PATCH] 10205 【越南】【主干】【港台】【砍树】自选礼包 --- ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py | 125 ++++++++++++++++++++++++++++++++++++++--- 1 files changed, 116 insertions(+), 9 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py index 8fc20e4..3de2fd9 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py @@ -118,6 +118,14 @@ except ValueError: return defValue +def ToFloat(input, defValue = 0): + try: + result = float(input) + return result + + except ValueError: + return defValue + ## 判断2个对象是否同国籍 # @param srcObj 起点对象 # @param desObj 目标对象 @@ -449,8 +457,8 @@ ##获取玩家所属区服ID # @param curPlayer # @return -def GetPlayerServerID(curPlayer): - accID = curPlayer.GetAccID() +def GetPlayerServerID(curPlayer): return GetAccIDServerID(curPlayer.GetAccID()) +def GetAccIDServerID(accID): infoList = accID.split(Def_AccID_Split_Sign) return 0 if len(infoList) < 3 else int(infoList[-1][1:]) @@ -537,6 +545,23 @@ return tagPlayer.GetRealMapID() #--------------------------------------------------------------------- + +def GetTemplateID(ipyData, cfgID, dayIndex): + if cfgID == None or dayIndex == None or not ipyData: + return 0 + templateIDList = ipyData.GetTemplateIDList() + if not templateIDList: + return 0 + templateID = templateIDList[-1] if dayIndex >= len(templateIDList) else templateIDList[dayIndex] + return templateID + +def GetTemplateIDByList(templateIDList, dayIndex): + if dayIndex == None: + return 0 + if not templateIDList: + return 0 + templateID = templateIDList[-1] if dayIndex >= len(templateIDList) else templateIDList[dayIndex] + return templateID def GetOperationActionDateStr(ipyData): ## 获取运营活动对应日期,存数字代表开服天配置,需要转化为对应的日期 @@ -675,6 +700,15 @@ return pastTimeDelta.days * 24 * 60 * 60 + pastTimeDelta.seconds #--------------------------------------------------------------------- + +def GetDiff_Day(timeA , timeB): + ## 获取 timeA - timeB 相差的日期天数 + dateTimeA = ChangeTimeNumToDatetime(timeA) + dateTimeA = datetime.datetime(dateTimeA.year, dateTimeA.month, dateTimeA.day, 0, 0, 0) + dateTimeB = ChangeTimeNumToDatetime(timeB) + dateTimeB = datetime.datetime(dateTimeB.year, dateTimeB.month, dateTimeB.day, 0, 0, 0) + return (dateTimeA - dateTimeB).days + ##设置世界服务器字典 # @param key 字典值 # @param tick 时间戳 @@ -918,6 +952,17 @@ return ReadChConfig.GetPyMongoConfig("Merge", "CrossZoneName") return PyGameData.g_crossZoneName +def GetCrossServerTimeStr(): + ## 跨服服务器时间 + if IsCrossServer(): + return GetCurrentDataTimeStr() + lastCrossServerTime, lastServerTime, _ = PyGameData.g_crossServerTimeInfo + if not lastCrossServerTime: + return GetCurrentDataTimeStr() + curTime = int(time.time()) + crossServerTime = lastCrossServerTime + (curTime - lastServerTime) + return ChangeTimeNumToStr(crossServerTime) + ## 获取玩家的区服名,仅在跨服有效 # @param curPlayer 玩家实例 # @return: 区服名 @@ -985,16 +1030,59 @@ ## 从列表中产生物品,[[权重, 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 数值 +# @param dataIndex 数位索引 +# @return 获得的值 +def GetDataByDigitPlace(numValue, dataIndex): + return (numValue/pow(10, dataIndex))%10 + + +## 设置对应数位的值 +# @param numValue 数值 +# @param dataIndex 数位索引 +# @param dataValue 当前修改数值 +# @return 获得的值 +def ChangeDataByDigitPlace(numValue, dataIndex, dataValue): + + if dataValue < 0 or dataValue > 9 or dataIndex > ShareDefine.Def_PDictDigitCnt: + return numValue + + # 获得对应数位的值 + lastTagLV = GetDataByDigitPlace(numValue, dataIndex) + + numValue += pow(10, dataIndex)*(dataValue - lastTagLV) + return numValue + +def GetBitValue(dataValue, index): + """ 得到某个字节值中某一位(Bit)的值 + @param dataValue: 待取值的字节值 + @param index: 待读取位的序号,从右向左0开始,0-7为一个完整字节的8个位 + @return: 返回读取该位的值,0或1 + """ + return 1 if dataValue & (1 << index) else 0 + +def SetBitValue(dataValue, index, val): + """ 更改某个字节值中某一位(Bit)的值 + @param dataValue: 准备更改的字节原值 + @param index: 待更改位的序号,从右向左0开始,0-7为一个完整字节的8个位 + @param val: 目标位预更改的值,0或1 + @return: 返回更改后字节的值 + """ + if val: + return dataValue | (1 << index) + return dataValue & ~(1 << index) ## 根据字典key获取value值 # @return @@ -1037,7 +1125,7 @@ # @param order 名次,从1开始 # @param isDefaultLast 找不到的名次是否默认取最后一名的 # @return obj or None -def GetOrderValueByDict(orderDict, order, isDefaultLast=True): +def GetOrderValueByDict(orderDict, order, isDefaultLast=True, defaultValue=None): if order in orderDict: return orderDict[order] @@ -1048,7 +1136,7 @@ return orderDict[dOrder] # 找不到的默认取最后一名 - return orderDict[orderList[-1]] if isDefaultLast else None + return orderDict[orderList[-1]] if isDefaultLast else defaultValue ##概率相关, 这个事件是否能够出现 # @param rate 基础几率 @@ -1061,17 +1149,36 @@ return 0 -def DebugAnswer(curPlayer, text): +def DebugAnswer(curPlayer, text, isLog=True): '''转码后再发DebugAnswer''' #=========================================================================== # if not GetGameWorld().GetDebugLevel(): # return #=========================================================================== - DebugLog(text) + if isLog: + DebugLog(text) text = text.decode(ShareDefine.Def_Game_Character_Encoding).encode(GetCharacterEncoding()) curPlayer.DebugAnswer(text) return +def CrossServerMsg_DebugAnswer(msgData): + playerID, text = msgData + curPlayer = GetPlayerManager().FindPlayerByID(playerID) + if not curPlayer: + return + curPlayer.DebugAnswer(text) + return + +def DebugAnswerCross(playerID, serverGroupID, text): + DebugLog(text) + text = text.decode(ShareDefine.Def_Game_Character_Encoding).encode(GetCharacterEncoding()) + + import CrossRealmMsg + dataMsg = [playerID, text] + serverGroupIDList = [serverGroupID] + CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_DebugAnswer, dataMsg, serverGroupIDList) + return + def GetMap(mapID): return IpyGameDataPY.GetIpyGameData("ChinMap", mapID) def GetNPCData(npcID): return IpyGameDataPY.GetIpyGameData("ChinNPC", npcID) -- Gitblit v1.8.0