2021-04-08 20:09:59 +08:00
|
|
|
|
using Cal;
|
2021-04-10 19:49:32 +08:00
|
|
|
|
using Cal.DataTable;
|
2021-04-08 20:09:59 +08:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
2021-04-15 00:12:07 +08:00
|
|
|
|
using System.Linq;
|
2021-04-08 20:09:59 +08:00
|
|
|
|
|
|
|
|
|
namespace ET
|
|
|
|
|
{
|
2021-04-15 00:12:07 +08:00
|
|
|
|
public class PetAwakeSystem: AwakeSystem<Pet>
|
2021-04-08 20:09:59 +08:00
|
|
|
|
{
|
2021-04-10 19:49:32 +08:00
|
|
|
|
public override void Awake(Pet self)
|
|
|
|
|
{
|
2021-04-08 20:09:59 +08:00
|
|
|
|
self.level = 1;
|
|
|
|
|
self.name = "宠物";
|
2021-04-15 00:12:07 +08:00
|
|
|
|
self.actionEndTime = 0;
|
2021-04-08 20:09:59 +08:00
|
|
|
|
self.Load();
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-04-15 00:12:07 +08:00
|
|
|
|
|
|
|
|
|
public class PetLoadSystem: LoadSystem<Pet>
|
2021-04-08 20:09:59 +08:00
|
|
|
|
{
|
|
|
|
|
public override void Load(Pet self)
|
|
|
|
|
{
|
|
|
|
|
self.Load();
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-04-15 00:12:07 +08:00
|
|
|
|
|
|
|
|
|
public class PetDeserializeSystem: DeserializeSystem<Pet>
|
2021-04-08 20:09:59 +08:00
|
|
|
|
{
|
|
|
|
|
public override void Deserialize(Pet self)
|
|
|
|
|
{
|
|
|
|
|
self.Load();
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-04-15 00:12:07 +08:00
|
|
|
|
|
|
|
|
|
public class PetChangeSystem: ChangeSystem<Pet>
|
2021-04-10 19:49:32 +08:00
|
|
|
|
{
|
|
|
|
|
public override void Change(Pet self)
|
|
|
|
|
{
|
2021-04-12 23:38:54 +08:00
|
|
|
|
UnitHelper.SaveComponenet(self).Coroutine();
|
2021-04-11 19:50:39 +08:00
|
|
|
|
Unit unit = self.GetParent<Unit>();
|
2021-04-10 19:49:32 +08:00
|
|
|
|
M2C_SyncPet proto = new()
|
|
|
|
|
{
|
2021-04-15 00:12:07 +08:00
|
|
|
|
UnitId = self.Id,
|
|
|
|
|
petId = self.petId,
|
|
|
|
|
exp = self.exp,
|
|
|
|
|
isShow = self.isShow,
|
|
|
|
|
level = self.level,
|
|
|
|
|
name = self.name,
|
|
|
|
|
intimacy = self.intimacy,
|
2021-04-10 19:49:32 +08:00
|
|
|
|
};
|
|
|
|
|
BrocastComponent brocastComponent = unit.GetComponent<BrocastComponent>();
|
|
|
|
|
brocastComponent?.Brocast(proto);
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-04-15 00:12:07 +08:00
|
|
|
|
|
|
|
|
|
public class PetDestroySystem: DestroySystem<Pet>
|
2021-04-09 00:48:56 +08:00
|
|
|
|
{
|
2021-04-10 19:49:32 +08:00
|
|
|
|
public override void Destroy(Pet self)
|
2021-04-09 00:48:56 +08:00
|
|
|
|
{
|
|
|
|
|
self.petId = 0;
|
|
|
|
|
self.exp = 0;
|
|
|
|
|
self.intimacy = 0;
|
2021-04-15 00:12:07 +08:00
|
|
|
|
self.actionEndTime = 0;
|
2021-04-10 19:49:32 +08:00
|
|
|
|
self.isShow = false;
|
2021-04-15 00:12:07 +08:00
|
|
|
|
self.petState = Pet.PetState.Idle;
|
2021-04-09 00:48:56 +08:00
|
|
|
|
self.addToCharacter.Clear();
|
|
|
|
|
self.getAttributeFunc = null;
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-04-15 00:12:07 +08:00
|
|
|
|
|
2021-04-08 20:09:59 +08:00
|
|
|
|
public static class PetSystem
|
|
|
|
|
{
|
|
|
|
|
public static void Load(this Pet self)
|
|
|
|
|
{
|
2021-04-20 00:25:04 +08:00
|
|
|
|
self.getAttributeFunc = self.GetAttribute;
|
2021-04-08 20:09:59 +08:00
|
|
|
|
self.Init();
|
|
|
|
|
}
|
2021-04-12 23:38:54 +08:00
|
|
|
|
|
|
|
|
|
private static void Init(this Pet self)
|
2021-04-08 20:09:59 +08:00
|
|
|
|
{
|
|
|
|
|
}
|
2021-04-12 23:38:54 +08:00
|
|
|
|
|
|
|
|
|
private static float GetAttribute(this Pet self, AttributeType attributeType)
|
2021-04-08 20:09:59 +08:00
|
|
|
|
{
|
|
|
|
|
float bound = 0f;
|
2021-04-16 00:06:30 +08:00
|
|
|
|
try
|
2021-04-08 20:09:59 +08:00
|
|
|
|
{
|
2021-04-16 00:06:30 +08:00
|
|
|
|
PetConfig petConfig = PetConfigCategory.Instance.Get(self.petId);
|
|
|
|
|
foreach (PetConfig.AddAttibuteMap addAttibuteMap in petConfig.AddAttibuteMapArr)
|
|
|
|
|
{
|
|
|
|
|
if (addAttibuteMap.Key != (int) attributeType)
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
bound = addAttibuteMap.Value*self.level;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
Log.Error(e);
|
2021-04-08 20:09:59 +08:00
|
|
|
|
}
|
|
|
|
|
return bound;
|
|
|
|
|
}
|
2021-04-12 23:38:54 +08:00
|
|
|
|
|
|
|
|
|
private static string AddLevel(this Pet self, int level)
|
2021-04-08 20:09:59 +08:00
|
|
|
|
{
|
2021-04-10 19:49:32 +08:00
|
|
|
|
self.level += level;
|
2021-04-15 00:12:07 +08:00
|
|
|
|
PetConfig petConfig = PetConfigCategory.Instance.Get(self.petId);
|
|
|
|
|
foreach (PetConfig.AddAttibuteMap addAttibuteMap in petConfig.AddAttibuteMapArr)
|
2021-04-08 20:09:59 +08:00
|
|
|
|
{
|
2021-04-15 00:12:07 +08:00
|
|
|
|
if (!self.addToCharacter.TryGetValue(addAttibuteMap.Key, out float old))
|
|
|
|
|
self.addToCharacter[addAttibuteMap.Key] = 0;
|
|
|
|
|
self.addToCharacter[addAttibuteMap.Key] = old + addAttibuteMap.Value * level;
|
2021-04-08 20:09:59 +08:00
|
|
|
|
}
|
2021-04-15 00:12:07 +08:00
|
|
|
|
|
2021-04-08 20:09:59 +08:00
|
|
|
|
CharacterHelper.SyncNumeric(self.GetParent<Unit>());
|
|
|
|
|
return null;
|
|
|
|
|
}
|
2021-04-15 00:12:07 +08:00
|
|
|
|
|
2021-04-18 15:54:51 +08:00
|
|
|
|
public static void AddExp(this Pet self, int exp)
|
2021-04-08 20:09:59 +08:00
|
|
|
|
{
|
|
|
|
|
exp += self.exp;
|
|
|
|
|
int addLevel = 0;
|
2021-04-10 19:49:32 +08:00
|
|
|
|
|
2021-04-15 00:12:07 +08:00
|
|
|
|
while (exp > GetNeedExp(self.petId, self.level))
|
2021-04-08 20:09:59 +08:00
|
|
|
|
{
|
2021-04-15 00:12:07 +08:00
|
|
|
|
exp -= GetNeedExp(self.petId, self.level);
|
2021-04-08 20:09:59 +08:00
|
|
|
|
addLevel++;
|
|
|
|
|
}
|
2021-04-15 00:12:07 +08:00
|
|
|
|
|
2021-04-08 20:09:59 +08:00
|
|
|
|
self.exp = Math.Clamp(exp, 0, int.MaxValue);
|
|
|
|
|
self.AddLevel(addLevel);
|
2021-04-10 19:49:32 +08:00
|
|
|
|
Game.EventSystem.Change(self);
|
2021-04-08 20:09:59 +08:00
|
|
|
|
}
|
2021-04-15 00:12:07 +08:00
|
|
|
|
|
|
|
|
|
private static int GetNeedExp(int petId, int level)
|
2021-04-10 19:49:32 +08:00
|
|
|
|
{
|
2021-04-15 00:12:07 +08:00
|
|
|
|
PetLevelConfig petLevelConfig = PetLevelConfigCategory.Instance.Get(petId);
|
2021-04-10 19:49:32 +08:00
|
|
|
|
return petLevelConfig.Exp + petLevelConfig.ExpByLevel * level;
|
|
|
|
|
}
|
2021-04-15 00:12:07 +08:00
|
|
|
|
|
|
|
|
|
public static void AddIntimacy(this Pet self, int intimacy)
|
2021-04-12 23:38:54 +08:00
|
|
|
|
{
|
|
|
|
|
self.intimacy += intimacy;
|
|
|
|
|
Game.EventSystem.Change(self);
|
|
|
|
|
}
|
2021-04-15 00:12:07 +08:00
|
|
|
|
|
|
|
|
|
public static void AddActive(this Pet self, int active)
|
2021-04-08 20:09:59 +08:00
|
|
|
|
{
|
2021-04-15 00:12:07 +08:00
|
|
|
|
PlayerData data = self.Parent.GetComponent<PlayerData>();
|
|
|
|
|
data.petActive += active;
|
|
|
|
|
}
|
2021-04-10 19:49:32 +08:00
|
|
|
|
|
2021-04-15 00:12:07 +08:00
|
|
|
|
public static string ChangeName(this Pet self, string name)
|
|
|
|
|
{
|
2021-04-10 19:49:32 +08:00
|
|
|
|
if (!FilterCharHelper.IsInvalid(name))
|
2021-04-08 20:09:59 +08:00
|
|
|
|
{
|
2021-04-10 19:49:32 +08:00
|
|
|
|
return "昵称不能超过7位,不能含有特殊字符";
|
2021-04-08 20:09:59 +08:00
|
|
|
|
}
|
2021-04-15 00:12:07 +08:00
|
|
|
|
|
2021-04-08 20:09:59 +08:00
|
|
|
|
self.name = name;
|
|
|
|
|
Log.Info($"宠物改名:{self.name}");
|
2021-04-10 19:49:32 +08:00
|
|
|
|
Game.EventSystem.Change(self);
|
2021-04-08 20:09:59 +08:00
|
|
|
|
return null;
|
|
|
|
|
}
|
2021-04-15 00:12:07 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 探险
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="self"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static string Explore(this Pet self)
|
|
|
|
|
{
|
|
|
|
|
if (self.petState is not (Pet.PetState.Idle))
|
|
|
|
|
{
|
|
|
|
|
return "行动中";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PlayerData data = self.Parent.GetComponent<PlayerData>();
|
|
|
|
|
if (data.petActive <= 0) return "活跃度不足";
|
|
|
|
|
|
|
|
|
|
const int index = (int) PetExploreConfigCategory.PetActionType.Explore;
|
|
|
|
|
var configList = PetExploreConfigCategory.Instance.GetListByType((PetExploreConfigCategory.PetActionType) index);
|
2021-04-16 00:06:30 +08:00
|
|
|
|
int petActionIndexFlag = IntFlagHelper.GetFlag(data.petActionIndexFlag, index - 1, 2, 3);
|
2021-04-15 00:12:07 +08:00
|
|
|
|
if (petActionIndexFlag >= configList.Count)
|
|
|
|
|
return "次数达到上限";
|
|
|
|
|
PetExploreConfig config = configList[petActionIndexFlag];
|
|
|
|
|
self.actionEndTime = Game.TimeInfo.ClientNow() + config.Time;
|
|
|
|
|
data.petActive--;
|
|
|
|
|
self.petState = Pet.PetState.Explore;
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 嬉戏
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="self"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static string Play(this Pet self)
|
|
|
|
|
{
|
|
|
|
|
if (self.petState is not (Pet.PetState.Idle))
|
|
|
|
|
{
|
|
|
|
|
return "行动中";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PlayerData data = self.Parent.GetComponent<PlayerData>();
|
|
|
|
|
if (data.petActive <= 0) return "活跃度不足";
|
|
|
|
|
|
|
|
|
|
const int index = (int) PetExploreConfigCategory.PetActionType.Play;
|
|
|
|
|
var configList = PetExploreConfigCategory.Instance.GetListByType((PetExploreConfigCategory.PetActionType) index);
|
2021-04-16 00:06:30 +08:00
|
|
|
|
int petActionIndexFlag = IntFlagHelper.GetFlag(data.petActionIndexFlag, index - 1, 2, 3);
|
2021-04-15 00:12:07 +08:00
|
|
|
|
if (petActionIndexFlag >= configList.Count)
|
|
|
|
|
return "次数达到上限";
|
|
|
|
|
PetExploreConfig config = configList[petActionIndexFlag];
|
|
|
|
|
self.actionEndTime = Game.TimeInfo.ClientNow() + config.Time;
|
|
|
|
|
data.petActive--;
|
|
|
|
|
self.petState = Pet.PetState.Play;
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 锻炼
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="self"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static string Experience(this Pet self)
|
|
|
|
|
{
|
|
|
|
|
if (self.petState is not (Pet.PetState.Idle))
|
|
|
|
|
{
|
|
|
|
|
return "行动中";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PlayerData data = self.Parent.GetComponent<PlayerData>();
|
|
|
|
|
if (data.petActive <= 0) return "活跃度不足";
|
|
|
|
|
|
|
|
|
|
const int index = (int) PetExploreConfigCategory.PetActionType.Experience;
|
|
|
|
|
var configList = PetExploreConfigCategory.Instance.GetListByType((PetExploreConfigCategory.PetActionType) index);
|
2021-04-16 00:06:30 +08:00
|
|
|
|
int petActionIndexFlag = IntFlagHelper.GetFlag(data.petActionIndexFlag, index - 1, 2, 3);
|
2021-04-15 00:12:07 +08:00
|
|
|
|
if (petActionIndexFlag >= configList.Count)
|
|
|
|
|
return "次数达到上限";
|
|
|
|
|
PetExploreConfig config = configList[petActionIndexFlag];
|
|
|
|
|
self.actionEndTime = Game.TimeInfo.ClientNow() + config.Time;
|
|
|
|
|
data.petActive--;
|
|
|
|
|
self.petState = Pet.PetState.Experience;
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
2021-04-16 00:06:30 +08:00
|
|
|
|
public static string GetActionReword(this Pet self)
|
2021-04-15 00:12:07 +08:00
|
|
|
|
{
|
2021-04-16 00:06:30 +08:00
|
|
|
|
PetExploreConfigCategory.PetActionType type;
|
|
|
|
|
switch (self.petState)
|
2021-04-15 00:12:07 +08:00
|
|
|
|
{
|
2021-04-16 00:06:30 +08:00
|
|
|
|
case Pet.PetState.Play:
|
|
|
|
|
type = PetExploreConfigCategory.PetActionType.Play;
|
2021-04-15 00:12:07 +08:00
|
|
|
|
break;
|
2021-04-16 00:06:30 +08:00
|
|
|
|
case Pet.PetState.Experience:
|
|
|
|
|
type = PetExploreConfigCategory.PetActionType.Experience;
|
2021-04-15 00:12:07 +08:00
|
|
|
|
break;
|
2021-04-16 00:06:30 +08:00
|
|
|
|
case Pet.PetState.Explore:
|
|
|
|
|
type = PetExploreConfigCategory.PetActionType.Explore;
|
2021-04-15 00:12:07 +08:00
|
|
|
|
break;
|
|
|
|
|
default:
|
2021-04-16 00:06:30 +08:00
|
|
|
|
return "宠物没有开始此玩法呢";
|
2021-04-15 00:12:07 +08:00
|
|
|
|
}
|
2021-04-16 00:06:30 +08:00
|
|
|
|
|
2021-04-15 00:12:07 +08:00
|
|
|
|
|
|
|
|
|
long now = TimeHelper.ClientNow();
|
|
|
|
|
if (now < self.actionEndTime)
|
|
|
|
|
return "宠物忙碌中!";
|
|
|
|
|
Unit unit = self.GetParent<Unit>();
|
|
|
|
|
PlayerData data = unit.GetComponent<PlayerData>();
|
|
|
|
|
int index = (int) type;
|
|
|
|
|
var configList = PetExploreConfigCategory.Instance.GetListByType((PetExploreConfigCategory.PetActionType) index);
|
2021-04-16 00:06:30 +08:00
|
|
|
|
int petActionIndexFlag = IntFlagHelper.GetFlag(data.petActionIndexFlag, index - 1, 2, 3);
|
2021-04-15 00:12:07 +08:00
|
|
|
|
if (petActionIndexFlag >= configList.Count)
|
|
|
|
|
return "系统错误,次数达到上限";
|
|
|
|
|
PetExploreConfig config = configList[petActionIndexFlag];
|
|
|
|
|
switch (type)
|
|
|
|
|
{
|
|
|
|
|
case PetExploreConfigCategory.PetActionType.Explore:
|
|
|
|
|
//给掉落
|
|
|
|
|
using (UnOrderMultiMapComponent<long, (int, int)> rewordMapComponent = UnOrderMultiMapComponent<long, (int, int)>.Create())
|
|
|
|
|
{
|
2021-04-16 00:06:30 +08:00
|
|
|
|
int parentId = config.EndRewordArr.FirstOrDefault(t => t.PetId == self.petId).IncressValue;
|
2021-04-15 00:12:07 +08:00
|
|
|
|
if (parentId == 0) return "系统错误";
|
|
|
|
|
DropHelper.Drop(unit, data, BattleType.None, parentId, rewordMapComponent.MultiMap, 1, "宠物探险",
|
|
|
|
|
false);
|
|
|
|
|
using ListComponent<string> listComponent = ListComponent<string>.Create();
|
|
|
|
|
foreach (KeyValuePair<long, List<(int, int)>> kp in rewordMapComponent.MultiMap.GetDictionary())
|
|
|
|
|
{
|
|
|
|
|
foreach ((int id, int count) in kp.Value)
|
|
|
|
|
{
|
|
|
|
|
listComponent.List.Add($"[color=#ffff00][/color]获得了[color=#226655]{BagHelper.GetName(id)}x{count}[/color]");
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-04-16 00:06:30 +08:00
|
|
|
|
|
2021-04-15 00:12:07 +08:00
|
|
|
|
Chat.Instance.SendSystemCahtNoBrocast(unit, listComponent.List);
|
|
|
|
|
}
|
2021-04-16 00:06:30 +08:00
|
|
|
|
|
2021-04-15 00:12:07 +08:00
|
|
|
|
break;
|
|
|
|
|
case PetExploreConfigCategory.PetActionType.Play:
|
|
|
|
|
//给亲密度
|
|
|
|
|
self.AddIntimacy(config.EndRewordArr[0].IncressValue);
|
|
|
|
|
break;
|
|
|
|
|
case PetExploreConfigCategory.PetActionType.Experience:
|
|
|
|
|
//给经验
|
|
|
|
|
self.AddExp(config.EndRewordArr[0].IncressValue);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
throw new ArgumentOutOfRangeException(nameof (type), type, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
self.petState = Pet.PetState.Idle;
|
|
|
|
|
petActionIndexFlag++;
|
2021-04-16 00:06:30 +08:00
|
|
|
|
IntFlagHelper.SetFlagValue(ref data.petActionIndexFlag, index - 1, petActionIndexFlag, 2, 3);
|
|
|
|
|
Log.Info($"{data.petActionIndexFlag}");
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static string QuickEnd(this Pet self)
|
|
|
|
|
{
|
|
|
|
|
long time = self.actionEndTime - TimeHelper.ClientNow();
|
|
|
|
|
int second = (int) (time / 1000);
|
|
|
|
|
if (second <= 0)
|
|
|
|
|
return "已经结束";
|
|
|
|
|
int voucher = second / 20;
|
|
|
|
|
if (voucher <= 0)
|
|
|
|
|
return "即将结束";
|
|
|
|
|
var ret = CharacterHelper.ReduceMoney(self.GetParent<Unit>(), CharacterHelper.MoneyType.Voucher, voucher);
|
|
|
|
|
if (ret != null)
|
|
|
|
|
return ret;
|
|
|
|
|
self.actionEndTime = TimeHelper.ClientNow();
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
public static int GetQuickEndPrice(this Pet self)
|
|
|
|
|
{
|
|
|
|
|
long time = self.actionEndTime - TimeHelper.ClientNow();
|
|
|
|
|
int second = (int) (time / 1000);
|
|
|
|
|
if (second <= 0)
|
|
|
|
|
return 0;
|
|
|
|
|
int voucher = second / 20;
|
|
|
|
|
if (voucher <= 0)
|
|
|
|
|
return 0;
|
|
|
|
|
return voucher;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static string UpgradePet(this Pet self,int index)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (self.petState != Pet.PetState.Idle)
|
|
|
|
|
return "宠物忙碌中";
|
|
|
|
|
PetConfig petConfig = PetConfigCategory.Instance.Get(self.petId);
|
|
|
|
|
int petId = petConfig.UpgradeIdArr[index];
|
|
|
|
|
if (self.level < petConfig.NeedLevel || self.intimacy < petConfig.NeedIntimacy)
|
|
|
|
|
return "条件不足";
|
|
|
|
|
self.level = 1;
|
|
|
|
|
self.exp = 0;
|
|
|
|
|
self.intimacy = 0;
|
|
|
|
|
self.actionEndTime = 0;
|
|
|
|
|
self.isShow = false;
|
|
|
|
|
self.petState = Pet.PetState.Idle;
|
|
|
|
|
self.addToCharacter.Clear();
|
|
|
|
|
self.petId = petId;
|
|
|
|
|
Game.EventSystem.Change(self);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
Log.Error(e);
|
|
|
|
|
}
|
2021-04-15 00:12:07 +08:00
|
|
|
|
return null;
|
|
|
|
|
}
|
2021-04-08 20:09:59 +08:00
|
|
|
|
}
|
2021-04-15 00:12:07 +08:00
|
|
|
|
}
|