using System; using cfg; using asap.core; using UnityEngine; using System.Globalization; using System.Linq; using game; using GameCore; using Random = UnityEngine.Random; using ScrollViewItemInfo = EventPartnerScrollViewItem.ScrollViewItemInfo; namespace EventPartnerGather { public class BotResult { public int slotId; public string playfabId; public int grade; public DateTime wakeStartTime; public int wakingSeconds; } public class EventPartnerGatherBot { public const char RobotIdentifier = 'R'; private static readonly TbRobot RobotTable = GContext.container.Resolve().TbRobot; private static readonly IUserService UserService = GContext.container.Resolve(); private static readonly Tables Tables = GContext.container.Resolve(); public static string Idx2Id(int idx) { return idx.ToString("X5") + RobotIdentifier; } public static int Id2Idx(string id) { return int.Parse(id.Trim(RobotIdentifier), NumberStyles.HexNumber); } public static void GetBotDisplayInfo(string id, out string avatar, out string displayName) { int idx = Id2Idx(id); var res = RobotTable.DataMap.TryGetValue(idx, out var r); if (!res) { avatar = ""; displayName = UserService.GetDefaultName(id); return; } avatar = r.Avatar; displayName = LocalizationMgr.GetText(r.Name_l10n_key); } public static BotResult AddBot(ScrollViewItemInfo botInfo, int slotId) { if (!botInfo.PlayfabId.EndsWith(RobotIdentifier)) { LogWarning($"AddBotSkipped reason=NotRobot partnerId={botInfo.PlayfabId}"); return null; } int grade = FtUtils.GetRandomIdxFromWeightList(Tables.TbEventPartnerRobot.DataList.Select(r => r.Weight)); var wakeStartTime = ZZTimeHelper.UtcNow(); int wakingSeconds = Random.Range(Tables.TbEventPartnerConfig.RobotDailyActiveTimeWindow[0], Tables.TbEventPartnerConfig.RobotDailyActiveTimeWindow[1]); return new BotResult { slotId = slotId, playfabId = botInfo.PlayfabId, grade = grade, wakeStartTime = wakeStartTime, wakingSeconds = wakingSeconds, }; // EventPartnerAct.Ctx.Data.Components[slotId].SetComponent(botInfo); // EventPartnerAct.Ctx.Data.Components[slotId].BotWakeTime = wakeStartTime; // EventPartnerAct.Ctx.Data.Components[slotId].BotWakingSeconds = wakingSeconds; // EventPartnerAct.Ctx.Data.Components[slotId].BotGrade = grade; // return; } private static void LogWarning(string message) { Debug.LogWarning($"EventPartnerGatherBot -> {message}"); } } }