/// <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); }
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); }
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); }