예제 #1
0
        public override bool TryAdd(Player plr)
        {
            var result = new SImperialEnterResult
            {
                Day       = DateTime.Now.DayOfWeek,
                Index     = plr.ID,
                Result    = 0,
                State     = 1,
                Unk       = 0,
                EntryTime = 0,
            };

            if (plr.Character.Party == null)
            {
                result.Result = 6;
                _             = plr.Session.SendAsync(result);
                return(false);
            }

            var itNum      = ItemNumber.FromTypeIndex(14, (ushort)(result.Day == DayOfWeek.Sunday ? 109 : 102));
            var invitation = plr.Character.Inventory.FindAll(itNum);

            if (invitation.Length <= 0)
            {
                result.Result = 2;
                _             = plr.Session.SendAsync(result);
                return(false);
            }

            if (CurrentState != EventState.Open && _players.First().Player.Character.Party != plr.Character.Party)
            {
                result.Result = 1;
                _             = plr.Session.SendAsync(result);
                return(false);
            }

            _          = plr.Character.Inventory.Delete(invitation.First());
            plr.Window = null;
            _          = plr.Character.WarpTo(_imperialGates[(int)result.Day]);

            _players.Add(new PlayerEventInfo {
                Eventer = true, Player = plr
            });
            plr.Character.MapChanged   += OnPlayerLeave;
            plr.Character.CharacterDie += OnPlayerDead;

            return(true);
        }
예제 #2
0
        public override bool TryAdd(Player plr)
        {
            var result = new SImperialEnterResult
            {
                Day       = (byte)DateTime.Now.DayOfWeek,
                Index     = plr.ID,
                Result    = 0,
                State     = 1,
                Unk       = 0,
                EntryTime = 0,
            };

            /*if(plr.Character.Party == null)
             * {
             *  result.Result = 6;
             *  _ = plr.Session.SendAsync(result);
             *  return false;
             * }*/

            var itNum      = ItemNumber.FromTypeIndex(14, (ushort)(result.Day == (byte)DayOfWeek.Sunday ? 109 : 102));
            var invitation = plr.Character.Inventory.FindAll(itNum);

            if (invitation.Length <= 0)
            {
                result.Result = 2;
                _             = plr.Session.SendAsync(result);
                return(false);
            }

            if (
                CurrentState != EventState.Open &&
                (_players.First().Player.Character.Party != plr.Character.Party ||
                 CurrentZone.CurrentState != FortressZoneState.BeginWaitPlayer)
                )
            {
                result.Result = 1;
                _             = plr.Session.SendAsync(result);
                return(false);
            }

            _          = plr.Character.Inventory.Delete(invitation.First());
            plr.Window = null;
            _          = plr.Character.WarpTo(_imperialGates[(int)result.Day]);

            _players.Add(new PlayerEventInfo {
                Eventer = true, Player = plr
            });
            plr.Character.MapChanged   += OnPlayerLeave;
            plr.Character.CharacterDie += OnPlayerDead;

            if (CurrentState == EventState.Open)
            {
                _zones[0].Trigger(FortressZoneState.BeginWaitPlayer);
                _zones[0].AddPlayer(plr);
            }
            else
            {
                CurrentZone.AddPlayer(plr);
            }

            return(true);
        }