| | |
| | |
|
| | | def GetActionEmblemID(emblemActionObj): return emblemActionObj.GetValue1()
|
| | | def SetActionEmblemID(emblemActionObj, emblemID): return emblemActionObj.SetValue1(emblemID)
|
| | | def GetActionEmblemExpireTimes(emblemActionObj): return emblemActionObj.GetValue2()
|
| | | def SetActionEmblemExpireTimes(emblemActionObj, endTime): return emblemActionObj.SetValue2(endTime)
|
| | | def GetActionEmblemEndTime(emblemActionObj): return emblemActionObj.GetValue2()
|
| | | def SetActionEmblemEndTime(emblemActionObj, endTime): return emblemActionObj.SetValue2(endTime)
|
| | |
|
| | | def GetDefaultFamilyEmblemIDList():
|
| | | ## 获取默认的仙盟徽章ID列表,即所有解锁等级为1的徽章ID
|
| | |
| | | for index in range(familyAction.Count())[::-1]: # 可能触发删除,倒序遍历
|
| | | emblemActionObj = familyAction.At(index)
|
| | | emblemID = GetActionEmblemID(emblemActionObj)
|
| | | isExpired, endTime = IsEmblemExpired(emblemActionObj, curTime)
|
| | | if not isExpired:
|
| | | endTime = GetActionEmblemEndTime(emblemActionObj)
|
| | | if not endTime or endTime > curTime:
|
| | | #GameWorld.Log("检查仙盟徽章未过期! familyID=%s,emblemID=%s,endTime=%s" % (familyID, emblemID, endTime))
|
| | | continue
|
| | | familyAction.DelAction(index)
|
| | |
| | | PlayerFamily.SetFamilyEmblemID(family, updEmblemID)
|
| | | family.Broadcast_FamilyChange()
|
| | | return
|
| | |
|
| | | def IsEmblemExpired(emblemActionObj, curTime):
|
| | | ## 勋章是否过期
|
| | | # @return: 是否过期, endTime
|
| | | |
| | | endTime = -1
|
| | | if not emblemActionObj:
|
| | | return True, endTime
|
| | | |
| | | createTime = emblemActionObj.GetTime()
|
| | | expireTimes = GetEmblemExpireTimes(emblemActionObj)
|
| | | if expireTimes == 0:
|
| | | # 永久的
|
| | | return False, 0
|
| | | |
| | | if expireTimes > 0:
|
| | | endTime = createTime + expireTimes
|
| | | if endTime >= curTime:
|
| | | # 未过期
|
| | | return False, endTime
|
| | | |
| | | return True, endTime
|
| | |
|
| | | def GetEmblemExpireTimes(emblemActionObj):
|
| | | ## 获取勋章有效时长,秒
|
| | | # @return: 0-永久;-1-无效;>0-有效秒数
|
| | | expireTimes = GetActionEmblemExpireTimes(emblemActionObj) # 有效时长,秒
|
| | | if not expireTimes:
|
| | | emblemID = GetActionEmblemID(emblemActionObj)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("FamilyEmblem", emblemID)
|
| | | if not ipyData:
|
| | | return -1
|
| | | expireTimes = ipyData.GetExpireMinutes() * 60
|
| | | return expireTimes
|
| | |
|
| | | def GetFamilyEmblemActionData(familyID, emblemID):
|
| | | ## 获取仙盟时效徽章Action数据
|
| | |
| | | if unlockFamilyLV:
|
| | | GameWorld.Log("仙盟解锁的徽章不需要添加! familyID=%s,emblemID=%s" % (familyID, emblemID))
|
| | | return
|
| | | if setExpireTimes >= 0:
|
| | | expireTimes = setExpireTimes
|
| | | else: |
| | | expireTimes = ipyData.GetExpireMinutes() * 60
|
| | | GameWorld.Log("添加仙盟徽章! familyID=%s,emblemID=%s,setExpireTimes=%s,expireTimes=%s" |
| | | % (familyID, emblemID, setExpireTimes, expireTimes))
|
| | | ipyExpireSeconds = ipyData.GetExpireMinutes() * 60
|
| | |
|
| | | curTime = int(time.time())
|
| | | emblemActionObj = GetFamilyEmblemActionData(familyID, emblemID)
|
| | |
| | | emblemActionObj.SetTime(curTime)
|
| | | emblemActionObj.SetFamilyId(familyID)
|
| | | emblemActionObj.SetActionType(actionType)
|
| | | |
| | | if not emblemActionObj:
|
| | | return
|
| | | endTime = GetActionEmblemEndTime(emblemActionObj)
|
| | | updEndTime = endTime
|
| | | |
| | | # 指定时长的,如GM指定
|
| | | if setExpireTimes > 0:
|
| | | updEndTime = curTime + setExpireTimes
|
| | | |
| | | # 永久
|
| | | elif ipyExpireSeconds == 0 or setExpireTimes == 0:
|
| | | updEndTime = 0
|
| | | |
| | | else:
|
| | | isExpired, endTime = IsEmblemExpired(emblemActionObj, curTime)
|
| | | if setExpireTimes >= 0:
|
| | | emblemActionObj.SetTime(curTime)
|
| | | GameWorld.Log("直接设置勋章剩余时长,重新设置获得时间! familyID=%s,emblemID=%s" % (familyID, emblemID))
|
| | | elif isExpired:
|
| | | emblemActionObj.SetTime(curTime)
|
| | | GameWorld.Log("获得勋章时已过期,重新设置获得时间! familyID=%s,emblemID=%s,endTime=%s" % (familyID, emblemID, endTime))
|
| | | # 未过期
|
| | | if endTime > curTime:
|
| | | updEndTime = endTime + ipyExpireSeconds
|
| | | else:
|
| | | # 未过期,非永久的直接累加时长
|
| | | if expireTimes > 0:
|
| | | expireTimes += GetActionEmblemExpireTimes(emblemActionObj)
|
| | | GameWorld.Log("获得勋章时未过期,累加有效时长! familyID=%s,emblemID=%s,expireTimes=%s" % (familyID, emblemID, expireTimes))
|
| | | |
| | | updEndTime = curTime + ipyExpireSeconds
|
| | | |
| | | GameWorld.Log("添加仙盟徽章! familyID=%s,emblemID=%s,setExpireTimes=%s,endTime=%s,updEndTime=%s" |
| | | % (familyID, emblemID, setExpireTimes, endTime, updEndTime))
|
| | | SetActionEmblemID(emblemActionObj, emblemID)
|
| | | SetActionEmblemExpireTimes(emblemActionObj, expireTimes)
|
| | | SetActionEmblemEndTime(emblemActionObj, updEndTime)
|
| | |
|
| | | # ֪ͨ
|
| | | PlayerFamilyAction.SendFamilyAction(emblemActionObj)
|
| | |
| | | return
|
| | | else:
|
| | | emblemActionObj = GetFamilyEmblemActionData(familyID, emblemID)
|
| | | isExpired, endTime = IsEmblemExpired(emblemActionObj, int(time.time()))
|
| | | if isExpired:
|
| | | GameWorld.DebugLog("该徽章不存在或已过期! emblemID=%s,endTime=%s" % (emblemID, endTime), playerID)
|
| | | if not emblemActionObj:
|
| | | GameWorld.DebugLog("该徽章未激活! emblemID=%s" % (emblemID), playerID)
|
| | | return
|
| | | endTime = GetActionEmblemEndTime(emblemActionObj)
|
| | | if endTime and endTime <= int(time.time()):
|
| | | GameWorld.Log("该徽章已过期! familyID=%s,emblemID=%s,endTime=%s" % (familyID, emblemID, endTime))
|
| | | return
|
| | |
|
| | | GameWorld.DebugLog("更换仙盟徽章! familyID=%s,emblemID=%s" % (familyID, emblemID), playerID)
|