Esempio n. 1
0
    static bool DamageTarget(gamebook.Scenario SC, int TX, int TY, int MOS, AttackRequest AR, int DMG, ref AttackReport Rep)
    {
        //{Do DMG damage to whatever happens to be sitting at map}
        //{location TX,TY.}
        //{MOS is the Margin Of Success}

        //M: texmodel.Model;

        bool exparrot = false;

        if (SC.gb.mog.IsSet(TX, TY))
        {
            //{It's a model. Do something appropriate to it.}
            texmodel.Model M = texmodel.FindModelXY(SC.gb.mlist, TX, TY);
            switch (M.kind)
            {
            case critters.MKIND_Critter:
                exparrot = DamageCritter(SC, critters.LocateCritter(M, SC.CList), MOS, AR, DMG, ref Rep);
                break;

            case dcchars.MKIND_Character:
                exparrot = DamagePC(SC, MOS, AR.ATT, DMG);
                break;
            }
        }

        return(exparrot);
    }
        public async Task <IActionResult> AttackShip([FromBody] AttackRequest request)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }
                else
                {
                    var result = await battleshipService.AttackShip(request);

                    if (result)
                    {
                        return(Ok(response.Message));
                    }
                    else
                    {
                        return(BadRequest(response.Message));
                    }
                }
            }
            catch (System.Exception ex)
            {
                logger.LogError(ex.Message, ex.StackTrace);
                return(StatusCode(500, "Internal server error"));
            }
        }
Esempio n. 3
0
        public AttackResult Check(AttackRequest request)
        {
            var result = new AttackResult();

            foreach (var fua in _fileUploads)
            {
                var webRequest = new WebPageRequest();
                webRequest.Address     = request.URL + fua.FilePath;
                webRequest.Method      = fua.HTTPVerb;
                webRequest.RequestBody = fua.Body;
                webRequest.Log         = true;

                WebPageLoader.Load(webRequest);

                int responseCode = 0;

                int.TryParse(webRequest.Response.Code, out responseCode);

                if (fua.SuccessResponseHTTPCode.Contains(responseCode))
                {
                    result.Success = true;
                    result.Results.Enqueue("CVE-2017-12615 success: " + webRequest.Address);
                }
            }

            return(result);
        }
Esempio n. 4
0
        public AttackResult Check(AttackRequest request)
        {
            var sResult = new AttackResult();

            WebPageRequest webRequest = new WebPageRequest(request.URL.Trim('/'));

            webRequest.Log    = true;
            webRequest.LogDir = request.LogDir;

            foreach (var attack in _headers)
            {
                webRequest.Headers = attack.AttackHeaderCollection;
                WebPageLoader.Load(webRequest);

                foreach (var headerFP in attack.FingerPrintHeaders.AllKeys)
                {
                    var header = webRequest.Response.Headers.Get(headerFP);
                    if (header != null)
                    {
                        if (attack.FingerPrintHeaders[headerFP] == webRequest.Response.Headers[headerFP])
                        {
                            sResult.Success = true;
                            sResult.Results.Enqueue("URL: " + request.URL + " ::: Header=" + headerFP);
                        }
                    }
                }
            }

            return(sResult);
        }
Esempio n. 5
0
        public AttackResult Check(AttackRequest request)
        {
            var result = new AttackResult();

            WebPageRequest webRequest = new WebPageRequest(request.URL);

            WebPageLoader.Load(webRequest);

            List <string> links = new List <string>();

            if (!String.IsNullOrEmpty(webRequest.Response.Body))
            {
                links = LinkFinder.Parse(webRequest.Response.Body, request.URL);
            }
            //Do javascript files too, expand library to check load/ajax/etc

            foreach (var link in links)
            {
                var testLink = link.Remove(0, 5);
                foreach (var fp in _fingerprints)
                {
                    if (testLink.Contains(fp))
                    {
                        result.Success = true;
                        result.Results.Enqueue("Possible SSRF: " + link);
                    }
                }
            }

            return(result);
        }
        public IActionResult Attack([FromBody] AttackRequest request)
        {
            // Note: If the position with a ship on it has been attacked before,
            // Error response will be returned.

            Logger.Info("Attack request received.");
            var board = _boardsManager.GetBoard(request.BoardId);

            if (board == null)
            {
                Logger.Error($"The board [{request.BoardId}] can't be found.");
                return(CreateErrorResponse(StatusCodes.Status400BadRequest, $"The board {request.BoardId} doesn't exist"));
            }

            var coordinate = new Coordinate(request.Position.X.Value, request.Position.Y.Value);
            var attacked   = board.WasAttacked(coordinate);

            if (attacked)
            {
                Logger.Error($"The position {request.Position} has been attached before.");
                return(CreateErrorResponse(StatusCodes.Status400BadRequest, $"The position {request.Position} has been attacked before."));
            }

            var hit = board.Attack(coordinate);

            Logger.Info($"A ship is hit: {hit}");

            return(new JsonResult(new HitResponse()
            {
                Hit = hit
            })
            {
                StatusCode = StatusCodes.Status200OK
            });
        }
        public async Task MissedTheBattleship()
        {
            var createShipRequest = new CreateShipRequest
            {
                BoardId = 1,
                StartAt = new Lib.Position {
                    X = 0, Y = 1
                },
                Length      = 5,
                Orientation = Lib.Orientation.Horizontal
            };

            var createShipResponse = await _client.PostAsync($"/api/ships", Helpers.GetHttpRequestContent(createShipRequest));

            createShipResponse.EnsureSuccessStatusCode();

            var attackRequest = new AttackRequest()
            {
                AttackAt = new Position()
                {
                    X = 6,
                    Y = 6
                },
                BoardId = 1
            };
            var attackResponse = await _client.PutAsync($"/api/ships/attack", Helpers.GetHttpRequestContent(attackRequest));

            attackResponse.EnsureSuccessStatusCode();
            var attackModel = await Helpers.GetHttpResponseContent <AttackResponse>(attackResponse);

            attackModel.Should().NotBeNull();
            attackModel.IsHit.Should().BeFalse();
        }
Esempio n. 8
0
    public static AttackReport ProcessAttack(gamebook.Scenario SC, AttackRequest AR)
    {
        //{We have a filled-out AttackRequest structure. Process it.}
        AttackReport Rep;

        if (AR.ATT.Contains(spells.AA_LineAttack))
        {
            Rep = LineAttack(SC, AR);
        }
        else if (AR.ATT.Contains(spells.AA_BlastAttack))
        {
            Rep = BlastAttack(SC, AR);
        }
        else if (AR.ATT.Contains(spells.AA_SmokeAttack))
        {
            Rep = SmokeAttack(SC, AR);
        }
        else
        {
            Rep = DirectFire(SC, AR);
        }

        if (AR.Attacker.kind == dcchars.MKIND_Character && Rep.XPV > 0)
        {
            gamebook.DoleExperience(SC, Rep.XPV);
        }

        return(Rep);
    }
Esempio n. 9
0
        public async Task AttackShip_ShouldReturn_SuccessfulAttack(string hpos, string vpos, string orientation, string length)
        {
            //Arrange
            await _battleshipService.CreateBoard();


            var request = new ShipAddRequest
            {
                HorizontalStartingPoint = hpos,
                VerticalStartingPoint   = vpos,
                Orientation             = "vertical",
                Length = length
            };

            //Add Ships.
            var resultAddShip = await _battleshipService.AddShip(request);


            var attackRequest = new AttackRequest
            {
                HorizontalPosition = hpos,
                VerticalPosition   = vpos,
            };

            //Act
            var result = await _battleshipService.AttackShip(attackRequest);

            var remainingLength = _battleshipBoardGame.Ships[0].ShipPosition.Where(x => x.Hit == false).Count();

            Assert.IsTrue(result);

            Assert.That(remainingLength == (Convert.ToInt32(length) - 1));
        }
        public AttackOutcome AttackOpponent(Guid boardId, AttackRequest attackRequest)
        {
            _setupValidationService.ValidateCoordinatePlacement(attackRequest.Coordinate);

            var attackCoordinate = attackRequest.Coordinate;

            var board = _boardRepository.Find(boardId);

            if (board == null)
            {
                throw new BadRequestException($"Board ID '{boardId}' was not found.");
            }
            var ships = board.Ships;

            foreach (var ship in ships)
            {
                var shipCoordinates          = CoordinateHelper.GetCoordinates(ship.TopLeftCoordinate, ship.ShipLength, ship.Alignment);
                var conflictWithExistingShip = shipCoordinates.FirstOrDefault(a => a.Equals(attackCoordinate));
                if (conflictWithExistingShip != null)
                {
                    ship.SuccessfulHits.Add(attackCoordinate);
                    return(AttackOutcome.Hit);
                }
            }
            return(AttackOutcome.Miss);
        }
Esempio n. 11
0
 public void CreateSyncRequest()
 {
     playerSyncRequest = new GameObject("PlayerSyncRequest");
     playerSyncRequest.AddComponent <MoveRequest>().SetLocalPlayer(currentRoleGameObject.transform, currentRoleGameObject.GetComponent <PlayerMove>()).SetRemotePlayer(remoteRoleGameObject.transform);
     shootRequest           = playerSyncRequest.AddComponent <ShootRequest>();
     shootRequest.playerMng = this;
     attackRequest          = playerSyncRequest.AddComponent <AttackRequest>();
 }
Esempio n. 12
0
 public override Task <Empty> Attack(AttackRequest request, ServerCallContext context)
 {
     return(mCreationService.ExecuteOrder(request.WarriorID, async orders =>
     {
         await orders.Attack(Guid.Parse(request.TargetID.Value));
         return new Empty();
     }));
 }
Esempio n. 13
0
 public void GameOver()
 {
     GameObject.Destroy(currentRoleGameObject);
     GameObject.Destroy(playerSyncRequest);
     GameObject.Destroy(remoteRoleGameObject);
     shootRequest  = null;
     attackRequest = null;
 }
Esempio n. 14
0
 //游戏结束销毁对象
 public void GameOver()
 {
     GameObject.Destroy(currentRoleGameObject);
     GameObject.Destroy(playerSyncRequest);
     GameObject.Destroy(enemyRoleGameObject);
     roleDataDic.Clear();
     shootRequest  = null;
     attackRequest = null;
 }
Esempio n. 15
0
        public async Task <IActionResult> Attack(Guid boardId, AttackRequest attackRequest)
        {
            var boardTask  = _boardService.GetBoard(boardId);
            var shipId     = _shipService.GetShipByBoardId(boardId);
            var resultTask = _attackService.AttackShip(boardId, shipId, attackRequest);
            var response   = await resultTask;

            return(Ok(response.ToString()));
        }
Esempio n. 16
0
    public void DoAttack(DinoBehaviour target)
    {
        var request = new AttackRequest()
        {
            Attacker = _entityId,
            Damage   = attrsWriter.Data.Power
        };

        cmdSender.SendAttackCommand(target._entityId, request, OnDoAttack);
    }
Esempio n. 17
0
        public ActionResult <AttackResult> AttackOpponent(Guid boardId, [FromBody] AttackRequest placeShipRequest)
        {
            var attackOutcome = _gameplayService.AttackOpponent(boardId, placeShipRequest);
            var attackResult  = new AttackResult()
            {
                Outcome = attackOutcome
            };

            return(Ok(attackResult));
        }
Esempio n. 18
0
    public virtual AttackRequest GetRequest()
    {
        if (visibleObjectsPrioritiser.GetBestTargetInSight() == null)
        {
            return(null);
        }

        AttackRequest request = new AttackRequest(1.0f, this, visibleObjectsPrioritiser.GetBestTargetInSight());

        return(request);
    }
Esempio n. 19
0
        public AttackResult Check(AttackRequest request)
        {
            var result = new AttackResult();

            foreach (var leak in _leaky)
            {
                FindLeak(request.URL, leak, result);
            }

            return(result);
        }
Esempio n. 20
0
        public AttackResult Check(AttackRequest request)
        {
            var result = new AttackResult();

            CheckFingerprints(result, request.Body, _defaultPageFingerPrints, " - Default Page found");
            CheckFingerprints(result, request.Body, _indexOfFingerPrints, " - Directory Traversal found");
            CheckFingerprints(result, request.Body, _serviceFingerPrints, " - Service Page found");
            CheckFingerprints(result, request.Body, _subDomainFingerPrints, " - Subdomain takeover found");

            return(result);
        }
Esempio n. 21
0
    /// <summary>
    /// 创建同步请求对象,将用于同步操作的脚本都放置到该游戏物体上
    /// </summary>
    public void CreateSyncRequest()
    {
        playerSyncRequest = new GameObject("PlayerSyncRequest");                                        //在场景中创建游戏物体
        MoveRequest moveRequest = playerSyncRequest.AddComponent <MoveRequest>();                       //添加移动同步请求对象

        moveRequest.SetLocalPlayer(currentRoleGo.transform, currentRoleGo.GetComponent <PlayerMove>()); //告知移动同步对象,本地角色的位置信息
        moveRequest.SetRemotePlayer(remoteRoleGo.transform);                                            //设置敌对角色,用于接收到同步信息以后直接控制敌对角色移动
        shootRequest = playerSyncRequest.AddComponent <ShootRequest>();                                 //添加同步箭矢射击的请求对象
        shootRequest.playerManager = this;
        attackRequest = playerSyncRequest.AddComponent <AttackRequest>();                               //添加造成伤害的请求对象
    }
Esempio n. 22
0
        public AttackResult Check(AttackRequest request)
        {
            var result = new AttackResult();

            foreach (var vuln in _vulnerableFiles)
            {
                FindFile(request.URL, vuln, result);
            }

            return(result);
        }
Esempio n. 23
0
 public void CreatSyncRequest()
 {
     playerSyncReuest = new GameObject("playerSyncRequest");
     //设置本地客户端及另一个客户端的Obj
     playerSyncReuest.AddComponent <MoveRequest>()
     .SetLocalPlayer(currentRoleObj.transform, currentRoleObj.GetComponent <PlayerMove>())
     .SetRemotePlayer(remoteRoleObj.transform);
     shootRequest = playerSyncReuest.AddComponent <ShootRequest>();
     shootRequest.playerManager = this;
     attackReuest = playerSyncReuest.AddComponent <AttackRequest>();
 }
Esempio n. 24
0
        public void GivenANonExistingGame_WhenAttacked_ThenReturnNotFound(Guid gameId)
        {
            var request = new AttackRequest
            {
                XCoordinate = 1,
                YCoordinate = 0
            };
            var result = _controller.Attack(gameId, request) as NotFoundObjectResult;

            result.Should().NotBeNull();
            _mockGameRegistry.Verify(x => x.GetGame(gameId), Times.Once);
        }
Esempio n. 25
0
 public void CreateSyncRequest()                              //創造同步 //把這個當成雙方同步的橋樑
 {
     playerSyncRequest = new GameObject("PlayerSyncRequest"); //創造一個GameObject
     playerSyncRequest.AddComponent <MoveRequest>().SetLocalPlayer(currentRoleGameObject.transform, currentRoleGameObject.GetComponent <PlayerMove>())
     .SetRemotePlayer(remoteRoleGameObject.transform);
     //給這個GameObje這個添加MoveRequest(同步移動的請求)並設置本地端角色(設置位置跟移動腳本)
     //也要設置遠端的角色(設置位置)
     //再來添加攻擊請求(負責叫後端扣受攻擊玩家的血)跟射擊請求(負責箭)
     shootRequest           = playerSyncRequest.AddComponent <ShootRequest>();
     shootRequest.playerMng = this;
     attackRequest          = playerSyncRequest.AddComponent <AttackRequest>();
 }
Esempio n. 26
0
    private void CreateSyncRequest()
    {
        GameObject playerSyncRequest = new GameObject("PlayerSyncRequest");

        moveRequest = playerSyncRequest.AddComponent <MoveRequest>();
        moveRequest.PlayerManager     = this;
        useSkillRequest               = playerSyncRequest.AddComponent <UseSkillRequest>();
        useSkillRequest.PlayerManager = this;
        useItemRequest = playerSyncRequest.AddComponent <UseItemRequest>();
        useItemRequest.PlayerManager = this;
        attackRequest = playerSyncRequest.AddComponent <AttackRequest>();
        attackRequest.PlayerManager = this;
    }
    public void GameOver()
    {
        //private GameObject currentRoleGameObject;
        //private GameObject playerSyncRequest;
        //private GameObject remoteRoleGameObject;

        //private ShootRequest shootRequest;
        //private AttackRequest attackRequest;
        GameObject.Destroy(currentRoleGameObject);
        GameObject.Destroy(playerSyncRequest);
        GameObject.Destroy(remoteRoleGameObject);
        shootRequest  = null;
        attackRequest = null;
    }
Esempio n. 28
0
    public void GameOver() //遊戲結束,由PlayerMng執行函式,因為遊戲結束後要摧毀某些跟Player有關的物件
    {
        //private GameObject currentRoleGameObject;
        //private GameObject playerSyncRequest;
        //private GameObject remoteRoleGameObject;

        //private ShootRequest shootRequest;
        //private AttackRequest attackRequest;
        GameObject.Destroy(currentRoleGameObject); //本地端現有物件
        GameObject.Destroy(playerSyncRequest);     //同步的橋樑
        GameObject.Destroy(remoteRoleGameObject);  //遠端物件
        shootRequest  = null;
        attackRequest = null;
    }
Esempio n. 29
0
        public async Task AttackShip_ShouldReturn_SinkShip(string hpos, string vpos, string orientation, string length)
        {
            //Arrange
            await _battleshipService.CreateBoard();


            var request = new ShipAddRequest
            {
                HorizontalStartingPoint = hpos,
                VerticalStartingPoint   = vpos,
                Orientation             = "vertical",
                Length = length
            };

            //Add Ships
            var resultAddShip = await _battleshipService.AddShip(request);


            AttackRequest attackRequest = new AttackRequest();
            bool          attackResult  = false;

            if (orientation == "vertical")
            {
                //Attack Ship : Attempt#1
                attackRequest = new AttackRequest
                {
                    HorizontalPosition = hpos,
                    VerticalPosition   = vpos,
                };

                //Act
                attackResult = await _battleshipService.AttackShip(attackRequest);


                //Attack Ship : Attempt#2
                var newVPos = Convert.ToInt32(vpos);
                attackRequest = new AttackRequest
                {
                    HorizontalPosition = hpos,
                    VerticalPosition   = (++newVPos).ToString(),
                };

                //Act
                attackResult = await _battleshipService.AttackShip(attackRequest);
            }

            //Assert
            Assert.IsTrue(attackResult);
            Assert.That(_response.Message == ResponseMessages.ATTACK_SUNK_SHIP);
        }
Esempio n. 30
0
        public async Task AddShip_OnSuccessfulAttack_ShouldReturn_NotAdded(string hpos, string vpos, string orientation, string length)
        {
            //Arrange
            await _battleshipService.CreateBoard();


            var request = new ShipAddRequest
            {
                HorizontalStartingPoint = hpos,
                VerticalStartingPoint   = vpos,
                Orientation             = "vertical",
                Length = length
            };

            //Add Ships.
            var resultAddShip = await _battleshipService.AddShip(request);


            var attackRequest = new AttackRequest
            {
                HorizontalPosition = hpos,
                VerticalPosition   = vpos,
            };

            //Act
            var result = await _battleshipService.AttackShip(attackRequest);

            var remainingLength = _battleshipBoardGame.Ships[0].ShipPosition.Where(x => x.Hit == false).Count();

            //Assert if the attack was successful
            Assert.IsTrue(result);
            Assert.That(remainingLength == (Convert.ToInt32(length) - 1));


            //Add ship

            request = new ShipAddRequest
            {
                HorizontalStartingPoint = hpos,
                VerticalStartingPoint   = vpos,
                Orientation             = "vertical",
                Length = length
            };

            //Add Ships.
            resultAddShip = await _battleshipService.AddShip(request);

            Assert.IsFalse(resultAddShip);
            Assert.That(_response.Message == ResponseMessages.SHIP_OVERLAPPING);
        }
Esempio n. 31
0
 public void registerAttackRequest(AttackRequest newRequest)
 {
     pendingAttacks.Enqueue(newRequest);
 }