Example #1
0
        /// <summary>
        /// 被伤害时是否被击飞
        /// </summary>
        /// <param name="client"></param>
        /// <param name="enemy"></param>
        public static Point HitFly(GameClient client, IObject enemy, int gridNum)
        {
            bool isDead = false;

            if (enemy is Monster)
            {
                isDead = ((enemy as Monster).VLife <= 0);
                if ((int)MonsterTypes.Noraml != (enemy as Monster).MonsterType /* && (int)MonsterTypes.Rarity != (enemy as Monster).MonsterType*/)
                {
                    return(new Point(-1, -1));
                }
            }

            Point grid      = enemy.CurrentGrid;
            Point selfGrid  = client.CurrentGrid;
            int   direction = (int)Global.GetDirectionByAspect((int)grid.X, (int)grid.Y, (int)selfGrid.X, (int)selfGrid.Y);

            // 根据传入的格子坐标和方向返回指定方向的格子列表
            List <Point> gridList = Global.GetGridPointByDirection(direction, (int)grid.X, (int)grid.Y, gridNum);

            if (null == gridList)
            {
                return(new Point(-1, -1));
            }

            for (int i = 0; i < gridList.Count; i++)
            {
                if (isDead) //如果死亡,就不顾及障碍物了,主要是为了血色城堡中的效果
                {
                    continue;
                }

                if (Global.InOnlyObs(enemy.ObjectType, client.ClientData.MapCode, (int)gridList[i].X, (int)gridList[i].Y))
                {
                    gridList.RemoveRange(i, gridList.Count - i);
                    break;
                }
            }

            if (gridList.Count <= 0)
            {
                return(new Point(-1, -1));
            }

            Point toGrid = gridList[gridList.Count - 1];

            if (!ChuanQiUtils.TransportTo(enemy, (int)toGrid.X, (int)toGrid.Y, (Dircetions)enemy.CurrentDir, enemy.CurrentMapCode, ""))
            {
                return(new Point(-1, -1));
            }

            return(toGrid);
        }
Example #2
0
        public static Point HitFly(GameClient client, IObject enemy, int gridNum)
        {
            bool isDead = false;

            if (enemy is Monster)
            {
                isDead = ((enemy as Monster).VLife <= 0.0);
                if (101 != (enemy as Monster).MonsterType && 1001 != (enemy as Monster).MonsterType && 1801 != (enemy as Monster).MonsterType)
                {
                    return(new Point(-1.0, -1.0));
                }
            }
            Point        grid      = enemy.CurrentGrid;
            Point        selfGrid  = client.CurrentGrid;
            int          direction = (int)Global.GetDirectionByAspect((int)grid.X, (int)grid.Y, (int)selfGrid.X, (int)selfGrid.Y);
            List <Point> gridList  = Global.GetGridPointByDirection(direction, (int)grid.X, (int)grid.Y, gridNum);
            Point        result;

            if (null == gridList)
            {
                result = new Point(-1.0, -1.0);
            }
            else
            {
                if (!isDead)
                {
                    for (int i = 0; i < gridList.Count; i++)
                    {
                        if (Global.InOnlyObs(enemy.ObjectType, client.ClientData.MapCode, (int)gridList[i].X, (int)gridList[i].Y))
                        {
                            gridList.RemoveRange(i, gridList.Count - i);
                            break;
                        }
                    }
                    if (gridList.Count <= 0)
                    {
                        return(new Point(-1.0, -1.0));
                    }
                }
                Point toGrid = gridList[gridList.Count - 1];
                if (!ChuanQiUtils.TransportTo(enemy, (int)toGrid.X, (int)toGrid.Y, enemy.CurrentDir, enemy.CurrentMapCode, ""))
                {
                    result = new Point(-1.0, -1.0);
                }
                else
                {
                    result = toGrid;
                }
            }
            return(result);
        }
Example #3
0
        public static Point MonsterHitFly(Monster attacker, GameClient injurer, int gridNum)
        {
            bool         isDead     = false;
            Point        attackGrid = attacker.CurrentGrid;
            Point        injureGrid = injurer.CurrentGrid;
            int          direction  = (int)Global.GetDirectionByAspect((int)injureGrid.X, (int)injureGrid.Y, (int)attackGrid.X, (int)attackGrid.Y);
            List <Point> gridList   = Global.GetGridPointByDirection(direction, (int)injureGrid.X, (int)injureGrid.Y, gridNum);
            Point        result;

            if (null == gridList)
            {
                result = new Point(-1.0, -1.0);
            }
            else
            {
                if (!isDead)
                {
                    for (int i = 0; i < gridList.Count; i++)
                    {
                        if (Global.InOnlyObs(attacker.ObjectType, injurer.ClientData.MapCode, (int)gridList[i].X, (int)gridList[i].Y))
                        {
                            gridList.RemoveRange(i, gridList.Count - i);
                            break;
                        }
                    }
                    if (gridList.Count <= 0)
                    {
                        return(new Point(-1.0, -1.0));
                    }
                }
                Point toGrid = gridList[gridList.Count - 1];
                if (!ChuanQiUtils.TransportTo(injurer, (int)toGrid.X, (int)toGrid.Y, injurer.CurrentDir, injurer.CurrentMapCode, ""))
                {
                    result = new Point(-1.0, -1.0);
                }
                else
                {
                    result = toGrid;
                }
            }
            return(result);
        }