Exemple #1
0
        private double getDanger(Trooper opp, int x, int y, int st, int h)
        {
            if (GetPlayer(opp.PlayerId) != null && GetPlayer(opp.PlayerId).IsStrategyCrashed)
            {
                return(0);
            }
            // Чтобы не бояться одного снайпера
            var oppShootingRange = state.opphit.Count(e => e > 0) == 1 && opp.Type == TrooperType.Sniper
                ? GetVisionRange(opp, Troopers[state.id], state.Stance)
                : GetShootingRange(opp, opp.Stance);
            int d = GetDistanceToShoot((int)(oppShootingRange + Eps), opp.X, opp.Y, GetStanceId(opp.Stance), x, y, st);

            // если он достреливает сразу:
            if (d == 0)
            {
                return(200);
            }

            int v;

            if (world.IsVisible(GetVisionRange(opp, Troopers[state.id], state.Stance), opp.X, opp.Y, opp.Stance, x, y, GetStance(state.Stance)))
            {
                v = 0;
            }
            else
            {
                v = GetDistanceTo((int)(GetVisionRange(opp, Troopers[state.id], state.Stance) + Eps),
                                  opp.X, opp.Y, GetStanceId(opp.Stance), x, y, st);
            }

            double visiblePenalty = 50 * (v == 0 ? 1 : Math.Exp(-v));

            var oppAct = opp.InitialActionPoints;

            if (opp.Type != TrooperType.Scout && opp.Type != TrooperType.Soldier && OpponentCommander != null && OpponentCommander.GetDistanceTo(opp) <= game.CommanderAuraRange)
            {
                oppAct += game.CommanderAuraBonusActionPoints;
            }

            // если он подходит и убивает
            int    act = oppAct - d * 2; // TODO: ???
            int    can = act / opp.ShootCost;
            double dam = can * opp.StandingDamage;

            if (dam >= h)
            {
                return(150 + visiblePenalty);
            }

            // если он подходит и отнимает жизни
            // тогда теперь он вынужден отбегать
            act = oppAct - (d * 2) * 2; // TODO: ???
            can = act / opp.ShootCost;
            dam = Math.Max(0, can * opp.StandingDamage) + visiblePenalty;
            if (dam <= 0)
            {
                return(0);
            }
            return(dam);
        }
        public void AssignTrooper(Trooper t)
        {
            switch (t.Role)
            {
            case Enums.Role.Commander:
                Commander = t;
                break;

            case Enums.Role.XO:
                XO = t;
                break;

            case Enums.Role.CShopCommander:
                CShopCommander = t;
                break;

            case Enums.Role.CShopXO:
                CShopXO = t;
                break;

            case Enums.Role.NCOIC:
                NCOIC = t;
                break;

            case Enums.Role.Medic:
                Medic = t;
                break;

            case Enums.Role.RTO:
                RT = t;
                break;
            }
        }
Exemple #3
0
        public void run()
        {
            try
            {
                remoteProcessClient.WriteToken(token);
                int teamSize = remoteProcessClient.ReadTeamSize();
                remoteProcessClient.WriteProtocolVersion();
                Game game = remoteProcessClient.readGameContext();

                IStrategy[] strategies = new IStrategy[teamSize];

                for (int strategyIndex = 0; strategyIndex < teamSize; ++strategyIndex)
                {
                    strategies[strategyIndex] = new MyStrategy();
                }

                PlayerContext playerContext;

                while ((playerContext = remoteProcessClient.ReadPlayerContext()) != null)
                {
                    Trooper playerTrooper = playerContext.Trooper;

                    Move move = new Move();
                    strategies[playerTrooper.TeammateIndex].Move(playerTrooper, playerContext.World, game, move);
                    remoteProcessClient.WriteMove(move);
                }
            }
            finally
            {
                remoteProcessClient.Close();
            }
        }
Exemple #4
0
        protected static bool UpdateRank(int?primary, int?edit, ref Trooper p, ref Trooper s,
                                         [NotNullWhen(true)] out RankChange?update)
        {
            if (primary != edit)
            {
                update = new RankChange()
                {
                    ChangedFrom            = primary ?? -1,
                    ChangedTo              = edit ?? -1,
                    ChangedOn              = DateTime.UtcNow,
                    SubmittedByRosterClerk = true
                };

                p.RankChanges.Add(update);
                s.SubmittedRankChanges.Add(update);

                if (primary < edit)
                {
                    p.LastPromotion = DateTime.UtcNow;
                }

                return(true);
            }

            update = null;
            return(false);
        }
Exemple #5
0
        protected static bool UpdateQuals(Trooper edit, ref Trooper primary, ref Trooper submitter,
                                          [NotNullWhen(true)] out QualificationChange?update)
        {
            if (primary.Qualifications != edit.Qualifications)
            {
                var changes   = primary.Qualifications ^ edit.Qualifications;
                var additions = edit.Qualifications & changes;
                var removals  = primary.Qualifications & changes;

                update = new QualificationChange()
                {
                    Added             = additions,
                    Removed           = removals,
                    OldQualifications = primary.Qualifications,
                    Revoked           = false,

                    SubmittedByRosterClerk = true,
                    ChangedOn = DateTime.UtcNow
                };

                primary.Qualifications = edit.Qualifications;

                primary.QualificationChanges.Add(update);
                submitter.SubmittedQualificationChanges.Add(update);

                return(true);
            }

            update = null;
            return(false);
        }
Exemple #6
0
        protected static bool UpdateCShop(Trooper edit, ref Trooper primary, ref Trooper submitter,
                                          [NotNullWhen(true)] out CShopChange?update)
        {
            if (primary.CShops != edit.CShops)
            {
                var changes   = primary.CShops ^ edit.CShops;
                var additions = edit.CShops & changes;
                var removals  = primary.CShops & changes;

                update = new CShopChange()
                {
                    Added     = additions,
                    Removed   = removals,
                    OldCShops = primary.CShops,

                    SubmittedByRosterClerk = true,
                    ChangedOn = DateTime.UtcNow
                };

                primary.CShops = edit.CShops;

                primary.CShopChanges.Add(update);
                submitter.SubmittedCShopChanges.Add(update);

                return(true);
            }

            update = null;
            return(false);
        }
Exemple #7
0
        public async Task <ResultBase> DeleteAccountAsync(Trooper trooper, string password)
        {
            var actual = await _userManager.FindByIdAsync(trooper.Id.ToString());

            var validPassword = await _userManager.CheckPasswordAsync(actual, password);

            if (!validPassword)
            {
                return(new(false, new() { "The proivded password is invalid for your account." }));
            }

            var identResult = await _userManager.DeleteAsync(actual);

            if (!identResult.Succeeded)
            {
                List <string> errors = new();
                foreach (var err in identResult.Errors)
                {
                    errors.Add($"[{err.Code}] {err.Description}");
                }

                return(new(false, errors));
            }

            return(new(true, null));
        }
Exemple #8
0
        public async Task <ResultBase> UpdateNickNameAsync(Trooper trooper, int approver)
        {
            var actual = await _dbContext.FindAsync <Trooper>(trooper.Id);

            if (actual is null)
            {
                return(new(false, new() { "The Trooper for that ID was not found." }));
            }

            var old = actual.NickName;

            actual.NickName = trooper.NickName;

            var update = new NickNameChange()
            {
                ApprovedById = approver,
                ChangedOn    = DateTime.UtcNow,
                OldNickname  = old,
                NewNickname  = actual.NickName,
            };

            actual.NickNameChanges.Add(update);

            try
            {
                _dbContext.Update(actual);
                await _dbContext.SaveChangesAsync();

                return(new(true, null));
            }
            catch (Exception ex)
            {
                return(new(false, new() { ex.Message }));
            }
        }
Exemple #9
0
        int GetShoterPath(Trooper self, Point to, int[,] map, bool beginFree, bool endFree)
        {
            int distance = 0;

            GoToUnit(new Point(self), to, map, beginFree, endFree, ref distance);
            return(distance);
        }
Exemple #10
0
        double GetTeamBonusProfit(Bonus bonus, ref Trooper trooper, bool allowTakeBonus)
        {
            // нужен минимальный вес
            double bestWeight = Inf;

            foreach (var tr in Team)
            {
                double weight = GetShoterPath(tr, bonus, notFilledMap, beginFree: true, endFree: false) * (1 + 0.5 * GetQueuePlace(tr, self.Id == tr.Id && self.ActionPoints >= self.InitialActionPoints));

                if (tr.Id != commander.Id || !allowTakeBonus)
                {
                    var L = GetShoterPath(tr, bonus, map, beginFree: true, endFree: false);
                    weight = L <= 2 &&
                             (self.Id != tr.Id || self.ActionPoints / GetMoveCost() >= 2 * L)
                        ? weight
                        : Inf;
                }
                if (!IsHaveBonus(tr, bonus) && weight < bestWeight)
                {
                    bestWeight = weight;
                    trooper    = tr;
                }
            }
            if (bestWeight >= Inf)
            {
                return(-1);
            }
            return(1.0 / bestWeight);
        }
Exemple #11
0
 bool IfNeedHelp(Trooper self = null)
 {
     if (self == null)
     {
         self = this.self;
     }
     return(self.Hitpoints / (double)self.MaximalHitpoints < 0.8);
 }
Exemple #12
0
        public async Task LoadFlagsAsync(Trooper t)
        {
            var scope = _services.CreateScope();
            var db    = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>();

            db.Attach(t);
            await db.Entry(t).Collection(i => i.Flags).LoadAsync();
        }
Exemple #13
0
 // Update is called once per frame
 void Update()
 {
     if (Input.GetMouseButtonDown(0))
     {
         RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
         if (hit && Input.GetKey(KeyCode.LeftControl))
         {
             if (hit.collider.gameObject.tag == "peons")
             {
                 foreach (GameObject item in troopers)
                 {
                     if (item.name == hit.collider.gameObject.name)
                     {
                         troopers.Remove(item);
                         return;
                     }
                 }
                 troopers.Add(hit.collider.gameObject);
             }
         }
         else if (hit && !Input.GetKey(KeyCode.LeftControl))
         {
             Debug.Log("true");
             if (hit.collider.gameObject.tag == "peons")
             {
                 troopers.Clear();
                 troopers.Add(hit.collider.gameObject);
             }
             else if (hit.collider.gameObject.tag == "enemy" || hit.collider.gameObject.tag == "Orc_Village")
             {
                 foreach (GameObject item in troopers)
                 {
                     item.GetComponent <Trooper>().target        = hit.collider.gameObject;
                     item.GetComponent <Trooper>().destination   = hit.collider.gameObject.transform.position;
                     item.GetComponent <Trooper>().destination.z = 1;
                 }
             }
         }
         else
         {
             foreach (GameObject item in troopers)
             {
                 Trooper troop = item.GetComponent <Trooper>();
                 troop.destination   = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                 troop.destination.z = item.transform.position.z;
                 item.GetComponent <AudioSource>().Play(0);
                 troop.target  = null;
                 troop.attacks = false;
                 // Debug.Log("dest =" + dest);
             }
         }
     }
     else if (Input.GetMouseButtonDown(1))
     {
         troopers.Clear();
     }
 }
Exemple #14
0
        int getInitialActionPoints(Trooper tr)
        {
            var points = tr.InitialActionPoints;

            if (CommanderId != -1 && tr.GetDistanceTo(state.Position[CommanderId].X, state.Position[CommanderId].Y) <= game.CommanderAuraRange)
            {
                points += game.CommanderAuraBonusActionPoints;
            }
            return(points);
        }
Exemple #15
0
        public async Task UpdateAsync(Trooper updateData, bool clerk = false)
        {
            var scope   = _services.CreateScope();
            var manager = scope.ServiceProvider.GetRequiredService <UserManager <Trooper> >();
            var user    = await manager.FindByIdAsync(updateData.Id.ToString());

            if (user is not null)
            {
                user.Slot           = updateData.Slot;
                user.Team           = updateData.Team;
                user.Role           = updateData.Role;
                user.Flight         = updateData.Flight;
                user.Qualifications = updateData.Qualifications;

                await manager.UpdateAsync(user);

                var claims = await manager.GetClaimsAsync(user);

                var slotClaim = claims.FirstOrDefault(x => x.Type == "Slotted");
                if (user.Slot >= Slot.InactiveReserve)
                {
                    if (slotClaim is not null)
                    {
                        await manager.RemoveClaimAsync(user, slotClaim);
                    }
                }
                else if (user.Slot <= Slot.InactiveReserve)
                {
                    if (slotClaim is null)
                    {
                        await manager.AddClaimAsync(user, new("Slotted", DateTime.Now.ToShortDateString()));
                    }
                    else
                    {
                        await manager.ReplaceClaimAsync(user, slotClaim, new("Slotted", DateTime.Now.ToShortDateString()));
                    }
                }

                var clerkClaim = claims.FirstOrDefault(x => x.Type == "Clerk");
                if (clerk)
                {
                    if (clerkClaim is null)
                    {
                        await manager.AddClaimAsync(user, new("Clerk", "Roster"));
                    }
                }
                else
                {
                    if (clerkClaim is not null)
                    {
                        await manager.RemoveClaimAsync(user, clerkClaim);
                    }
                }
            }
        }
Exemple #16
0
 public int GetShootingPriority(Trooper opponent)
 {
     for (var i = 0; i < ShootingPriority.Length; i++)
     {
         if (opponent.Type == ShootingPriority[i])
         {
             return(i);
         }
     }
     throw new InvalidDataException();
 }
Exemple #17
0
        /// <summary>Sends player input to the server.</summary>
        public static void TrooperTransformUpdate(Trooper trooper)
        {
            using (Packet packet = new Packet((int)ClientPackets.trooperTransformUpdate))
            {
                packet.Write(trooper.transform.position);
                packet.Write(trooper.transform.rotation);
                packet.Write(trooper.velocity);
                packet.Write(trooper.grounded);

                SendUdpData(packet);
            }
        }
Exemple #18
0
        public static void TrooperGrappleUpdate(Trooper trooper)
        {
            using (Packet packet = new Packet((int)ClientPackets.trooperGrappleUpdate))
            {
                packet.Write(trooper.isGrappling);
                packet.Write(trooper.grappleObjectId);
                packet.Write(trooper.grapplePoint);
                packet.Write(trooper.maxDistanceFromGrapple);

                SendUdpData(packet);
            }
        }
Exemple #19
0
        private async Task LoadAsync(Trooper user)
        {
            var email = await _userManager.GetEmailAsync(user);

            Email = email;

            Input = new InputModel
            {
                NewEmail = email,
            };

            IsEmailConfirmed = await _userManager.IsEmailConfirmedAsync(user);
        }
Exemple #20
0
        int GetQueuePlace(Trooper trooper, bool MayFirst)
        {
            var current = queue.IndexOf(self.Id);

            for (var idx = current + (MayFirst ? 0 : 1); idx < queue.Count; idx++)
            {
                if ((long)queue[idx] == trooper.Id)
                {
                    return(idx - current + 1);
                }
            }
            return(1);
        }
Exemple #21
0
        private async Task LoadAsync(Trooper user)
        {
            var userName = await _userManager.GetUserNameAsync(user);

            if (Input is null)
            {
                Input = new();
            }

            Input.Username      = userName;
            Input.NickName      = user.NickName;
            Input.TrooperNumber = user.Id;
        }
Exemple #22
0
    public static void TrooperTransformUpdate(Trooper trooper)
    {
        using (Packet packet = new Packet((int)ServerPackets.trooperTransformUpdate))
        {
            packet.Write(trooper.player.client.id);
            packet.Write(trooper.transform.position);
            packet.Write(trooper.transform.rotation);
            packet.Write(trooper.velocity);
            packet.Write(trooper.grounded);

            SendUdpDataToAll(trooper.player.client.id, packet);
        }
    }
Exemple #23
0
    public static void TrooperGrappleUpdate(Trooper trooper)
    {
        using (Packet packet = new Packet((int)ServerPackets.trooperGrappleUpdate))
        {
            packet.Write(trooper.player.client.id);
            packet.Write(trooper.isGrappling);
            packet.Write(trooper.grappleObjectId);
            packet.Write(trooper.grapplePoint);
            packet.Write(trooper.distanceFromGrapple);

            SendUdpDataToAll(trooper.player.client.id, packet);
        }
    }
Exemple #24
0
        double GetHelperQuality(Trooper tr)
        {
            double quality = 1.0 / GetShoterPath(self, tr, notFilledMap, beginFree: true, endFree: true);

            if (tr.Type == TrooperType.FieldMedic)
            {
                return(quality * 2);
            }
            if (!tr.IsHoldingMedikit)
            {
                return(-Inf);
            }
            return(quality);
        }
        void Awake()
        {
            if (instance == null)
            {
                instance = this;
            }
            else if (instance != this)
            {
                Debug.Log("Instance already exists, destroying object!");
                Destroy(this);
            }

            trooper   = GetComponent <Trooper>();
            rigidbody = GetComponent <Rigidbody>();
            collider  = GetComponent <CapsuleCollider>();
        }
Exemple #26
0
 bool IsHaveBonus(Trooper self, BonusType bonus)
 {
     if (bonus == BonusType.Medikit)
     {
         return(self.IsHoldingMedikit);
     }
     if (bonus == BonusType.Grenade)
     {
         return(self.IsHoldingGrenade);
     }
     if (bonus == BonusType.FieldRation)
     {
         return(self.IsHoldingFieldRation);
     }
     throw new InvalidDataException();
 }
Exemple #27
0
        public async Task SaveNewFlag(ClaimsPrincipal claim, Trooper trooper, TrooperFlag flag)
        {
            var user = await _userManager.GetUserAsync(claim);

            if (_dbContext.Entry(trooper).State == EntityState.Detached)
            {
                _dbContext.Attach(trooper);
            }

            flag.AuthorId  = user.Id;
            flag.CreatedOn = DateTime.UtcNow;

            trooper.Flags.Add(flag);

            await _dbContext.SaveChangesAsync();
        }
        public async Task <IActionResult> OnPostAsync(string?returnUrl = null)
        {
            returnUrl ??= Url.Content("~/");
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (ModelState.IsValid)
            {
                var user = new Trooper {
                    UserName = Input.Email, Email = Input.Email
                };
                var result = await _userManager.CreateAsync(user, Input.Password);

                if (result.Succeeded)
                {
                    _logger.LogInformation("User created a new account with password.");

                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                    code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                    var callbackUrl = Url.Page(
                        "/Account/ConfirmEmail",
                        pageHandler: null,
                        values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
                        protocol: Request.Scheme);

                    await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                                                      $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

                    if (_userManager.Options.SignIn.RequireConfirmedAccount)
                    {
                        return(RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl }));
                    }
                    else
                    {
                        await _signInManager.SignInAsync(user, isPersistent : false);

                        return(LocalRedirect(returnUrl));
                    }
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }
Exemple #29
0
        Point GoToEncircling(Trooper center, Point goal)
        {
            var    bestPoint = new Point(0, 0, Inf);
            double optDanger = self.Type == TrooperType.FieldMedic || self.Type == TrooperType.Sniper ? Inf : -Inf;

            for (var i = 0; i < Width; i++)
            {
                for (var j = 0; j < Height; j++)
                {
                    if (map[i, j] == 0 || i == self.X && j == self.Y)
                    {
                        if (self.GetDistanceTo(i, j) > 10) // немного ускорит
                        {
                            continue;
                        }
                        // Нужно чтобы хватило ходов
                        int steps = GetShoterPath(self, new Point(i, j), map, beginFree: true, endFree: true);
                        if (self.ActionPoints / GetMoveCost() >= steps)
                        {
                            // и чтобы не закрывали кратчайший путь:
                            int before = goal == null ? Inf : GetShoterPath(center, goal, map, beginFree: true, endFree: false);
                            map[self.X, self.Y] = 0;
                            map[i, j]           = 1;
                            int after = goal == null ? Inf : GetShoterPath(center, goal, map, beginFree: true, endFree: false);
                            map[i, j]           = 0;
                            map[self.X, self.Y] = 1;

                            if ((goal == null || after < Inf) && after <= before)
                            {
                                double sum  = GetShoterPath(center, new Point(i, j), notFilledMap, beginFree: true, endFree: true);
                                double dang = danger[i, j] + (goal == null ? 0 : goal.GetDistanceTo(i, j) * 0.01);
                                if (sum < bestPoint.profit ||
                                    EqualF(sum, bestPoint.profit) &&
                                    (self.Type == TrooperType.FieldMedic || self.Type == TrooperType.Sniper ? (dang < optDanger) : (dang > optDanger))
                                    )
                                {
                                    bestPoint = new Point(i, j, sum);
                                    optDanger = dang;
                                }
                            }
                        }
                    }
                }
            }
            return(bestPoint.profit >= Inf ? null : bestPoint);
        }
        private async Task <Trooper> EnsureUser(Trooper trooper, string password)
        {
            var user = await _manager.FindByIdAsync(trooper.Id.ToString());

            if (user is null)
            {
                user = trooper;
                await _manager.CreateAsync(user, password);
            }

            if (user is null)
            {
                throw new Exception("The password is probaly not strong enough!");
            }

            return(user);
        }
Exemple #31
0
 public PlayerContext(Trooper trooper, World world)
 {
     this.trooper = trooper;
     this.world = world;
 }