using Fantasy; using Fantasy.Async; using Fantasy.Entitas.Interface; using Fantasy.Network; namespace Hotfix; public static class GameAccountSystem { public static async FTask SaveToDatabase(this GameAccount self,Scene scene) { await scene.World.DataBase.Save(self); } public static GameAccountInfo GetGameAccountInfo(this GameAccount self) { return new GameAccountInfo() { CreateTime = self.CreateTime, LoginTime = self.LoginTime, GameName = self.GameName, }; } public static async FTask DisConnect(this GameAccount self) { var scene = self.Scene; var accountId = self.Id; Log.Debug("Gate gameAccount 下线前 保存数据到 数据库中"); await self.SaveToDatabase(scene); GateComponentHelper.GetGameAccountManageComponent(scene).Remove(accountId); } } public class GameAccountDestroy : DestroySystem { protected override void Destroy(GameAccount self) { self.DisConnect().Coroutine(); self.CreateTime = 0; self.LoginTime = 0; self.SessionRuntimeId = 0; } }