public virtual CPortal GetStartPoint(Character c) => Portals.GetRandStartPoint();
/// <summary> /// Sends migratein packet depending on character migration status. /// Triggers OnUserEnter() for child classes /// Notifies proper social channels /// </summary> /// <param name="c"></param> public void AddClient(WvsGameClient c) { var character = c.Character; var bSendPartyMapChangeUpdate = c.MigratedIn; if (Template.HasNoPetLimit()) { character.Stats.aliPetLockerSN = new long[3]; // clear pets character.Pets.Dispose(); } if (Template.HasSummonLimit()) { MasterManager.SummonStorage.Retrieve(character.dwId); // clear incoming summons } if (c.MigratedIn) { var p = CPacket.SetField(character, c.ChannelId, c.WorldID); c.SendPacket(p); } else { c.MigratedIn = true; #if DEBUG character.Stats.nPortal = 0; //Spawn everyone in same place #else var sp = Portals.GetRandStartPoint(); if (sp != null) { var foothold = Footholds.FindBelow(sp.nX, sp.nY); if (foothold != null) { character.Stats.nPortal = (byte)sp.nIdx; character.Position.X = foothold.X1; character.Position.Y = foothold.Y1; character.Position.Foothold = foothold.Id; } } #endif //TODO: Refine our flags for production var dbFlag = (DbCharFlags)0; //dbFlag |= DbCharFlags.ALL; dbFlag |= DbCharFlags.CHARACTER; dbFlag |= DbCharFlags.MONEY; dbFlag |= DbCharFlags.INVENTORYSIZE; dbFlag |= DbCharFlags.ITEMSLOTEQUIP; dbFlag |= DbCharFlags.ITEMSLOTCONSUME; dbFlag |= DbCharFlags.ITEMSLOTINSTALL; dbFlag |= DbCharFlags.ITEMSLOTETC; dbFlag |= DbCharFlags.ITEMSLOTCASH; dbFlag |= DbCharFlags.SKILLRECORD; dbFlag |= DbCharFlags.SKILLCOOLTIME; dbFlag |= DbCharFlags.QUESTRECORD; dbFlag |= DbCharFlags.QUESTCOMPLETE; //dbFlag |= DbCharFlags.MINIGAMERECORD; dbFlag |= DbCharFlags.COUPLERECORD; dbFlag |= DbCharFlags.MONSTERBOOKCOVER; dbFlag |= DbCharFlags.MONSTERBOOKCARD; dbFlag |= DbCharFlags.QUESTRECORDEX; if (JobLogic.IsWildhunterJob(character.Stats.nJob)) { dbFlag |= DbCharFlags.WILDHUNTERINFO; } dbFlag |= DbCharFlags.MAPTRANSFER; c.SendPacket(CPacket.SetField(character, c.ChannelId, c.WorldID, Constants.LogoutGift, dbFlag)); } OnUserEnter(c.Character); if (bSendPartyMapChangeUpdate) { c.Character.NotifySocialChannels(SocialNotiflag.ChangeMap); } }