public virtual CPortal GetStartPoint(Character c) => Portals.GetRandStartPoint();
Exemple #2
0
        /// <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);
            }
        }