Пример #1
0
        private void AddNpc(uint uid)
        {
            var isAlreadyInNpcList = Npcs.Any(npc => uid == npc.Uid);

            if (!isAlreadyInNpcList)
            {
                Npcs.Insert(0, new Npc(uid));
            }
        }
Пример #2
0
        public MoveResult CanMove(Direction direction, int destinationX, int destinationY, bool isOnGround, bool isSurfing, bool canUseCut, bool canUseSmashRock)
        {
            if ((destinationX < 0 || destinationX > Width ||
                 destinationY < 0 || destinationY > Height))
            {
                return(MoveResult.Fail);
            }

            if (Npcs.Any(npc => npc.PositionX == destinationX && npc.PositionY == destinationY && !npc.IsMoving &&
                         !IsCutTree(destinationX, destinationY) && !IsRockSmash(destinationX, destinationY) && npc.IsVisible))
            {
                return(MoveResult.Fail);
            }

            //if (direction != Direction.Down && GetCollider(destinationX, destinationY) == 4)
            //{
            //    return MoveResult.Fail;
            //}

            //if (IsUnmoveableCellSide(direction, destinationX, destinationY))
            //    return MoveResult.Fail;

            if ((IsCutTree(destinationX, destinationY) && !canUseCut) || (IsRockSmash(destinationX, destinationY) && !canUseSmashRock))
            {
                return(MoveResult.Fail);
            }

            int collider = GetCollider(destinationX, destinationY);

            if (!IsMovementValid(direction, collider, isOnGround, isSurfing, canUseCut, canUseSmashRock, destinationX, destinationY))
            {
                return(MoveResult.Fail);
            }

            if (collider == 4 || collider == 6 || collider == 7 || collider == 5)
            {
                return(MoveResult.Jump);
            }

            if (collider == 11 && isOnGround)
            {
                return(MoveResult.NoLongerOnGround);
            }

            if (collider == 12 && !isOnGround)
            {
                return(MoveResult.OnGround);
            }

            if (isSurfing && collider != 2)
            {
                return(MoveResult.NoLongerSurfing);
            }

            return(MoveResult.Success);
        }
Пример #3
0
 public bool IsPc(int x, int y)
 {
     if (!IsInCurrentArea(x, y))
     {
         return(false);
     }
     return(Objects.Any(ob => ob != null && ob.x == x && ob.z == -y && ob.Name.StartsWith("PC") && !string.IsNullOrEmpty(ob.Name)) &&
            Npcs.Any(n => n.PositionX == x && n.PositionY == y &&
                     n.NpcName.ToLowerInvariant().StartsWith("new") && n.Data.Settings.Sprite == 0));
 }
Пример #4
0
        public int NextNpcID()
        {
            var i = -1;

            while (Npcs.Any(x => x.ID == i) || MonstersGroups.Any(x => x.ID == i) || Fights.Any(x => x.GetFighters().ToList().Any(y => y.ID == i)))
            {
                i -= 1;
            }

            return(i);
        }