Example #1
0
        public static void Initialize(string file)
        {
            if (_instance != null)
            {
                throw new InvalidOperationException();
            }

            _instance = new MapServerManager(file);
        }
Example #2
0
        public async Task CCharacterMapJoin2(GSSession session, CCharacterMapJoin2 Character)
        {
            var charDto = session.Player.Account.Characters
                          .Select(x => x.Value)
                          .FirstOrDefault(x => x.Name == Character.Name);

            if (!MapServerManager.CheckMapServerMove(session, (Maps)charDto.Map))
            {
                return;
            }

            using (var db = new GameContext())
            {
                charDto.Items = (from it in db.Items
                                 where it.CharacterId == charDto.CharacterId
                                 select it).ToList();

                charDto.Spells = (from spell in db.Spells
                                  where spell.CharacterId == charDto.CharacterId
                                  select spell).ToList();

                charDto.Quests = (from quest in db.Quests
                                  where quest.CharacterId == charDto.CharacterId
                                  select quest).ToList();

                charDto.QuestEX = (from quest in db.QuestsEX
                                   where quest.CharacterId == charDto.CharacterId
                                   select quest).ToList();

                charDto.SkillKey = (from config in db.Config
                                    where config.SkillKeyId == charDto.CharacterId
                                    select config).FirstOrDefault();

                charDto.Favorites = (from config in db.Favorites
                                     where config.CharacterId == charDto.CharacterId
                                     select config).FirstOrDefault();

                charDto.Friends = (from friend in db.Friends
                                   where (friend.FriendId == charDto.CharacterId || friend.CharacterId == charDto.CharacterId) && friend.State == 1
                                   select friend).ToList();

                charDto.Memos = (from letter in db.Letters
                                 where letter.CharacterId == charDto.CharacterId
                                 select letter).ToList();

                charDto.MasterInfo = (from mi in db.MasterLevel
                                      where mi.MasterInfoId == charDto.CharacterId
                                      select mi).FirstOrDefault();

                charDto.GremoryCases = (from gc in db.GremoryCase
                                        where gc.CharacterId == charDto.CharacterId && (gc.AccountId == charDto.AccountId && gc.Inventory == 1)
                                        select gc).ToList();
            }

            if (@charDto == null)
            {
                return;
            }

            await session.SendAsync(new SCheckSum { Key = session.Player.CheckSum.GetKey(), Padding = 0xff });

            session.Player.Character = new Character(session.Player, @charDto);
            var @char = session.Player.Character;

            await session.SendAsync(new SPeriodItemCount());

            await session.SendAsync(new SKillCount { KillCount = 1 });

            if (charDto.SkillKey != null)
            {
                var skillKey = new SSkillKey
                {
                    SkillKey   = charDto.SkillKey.SkillKey,
                    ChatWindow = charDto.SkillKey.ChatWindow,
                    E_Key      = charDto.SkillKey.EkeyDefine,
                    GameOption = charDto.SkillKey.GameOption,
                    Q_Key      = charDto.SkillKey.QkeyDefine,
                    R_Key      = charDto.SkillKey.RkeyDefine,
                    W_Key      = charDto.SkillKey.WkeyDefine,
                };
                if (skillKey.SkillKey == null)
                {
                    skillKey.SkillKey = Array.Empty <byte>();
                }
                await session.SendAsync(skillKey);
            }
            if (charDto.Favorites != null)
            {
                var fav = new CFavoritesList
                {
                    Region = new int[]
                    {
                        charDto.Favorites.Fav01,
                        charDto.Favorites.Fav02,
                        charDto.Favorites.Fav03,
                        charDto.Favorites.Fav04,
                        charDto.Favorites.Fav05,
                    }
                };

                await session.SendAsync(fav);
            }
            session.Player.Status = LoginStatus.Playing;

            GuildManager.Instance.AddPlayer(session.Player);

            //await session.SendAsync(new SNewQuestInfo());
            session.Player.Character.Inventory.SendJewelsInfo();

            await session.SendAsync(new SUBFInfo { Result = 1 });

            await session.SendAsync(new SMapMoveCheckSum { key = 0x0010 });

            //ConnectServer dataSend
            Program.client.SendAsync(new SCAdd {
                Server = (byte)Program.ServerCode, btName = @charDto.Name.GetBytes()
            });

            if ((@char.CtlCode & ControlCode.GameMaster) == ControlCode.GameMaster)
            {
                @char.Spells.SetBuff(SkillStates.GameMaster, TimeSpan.FromDays(100));
            }

            @char.DataLoaded = true;
        }