예제 #1
0
        public override void Start()
        {
            var randomMap = RandomInstance.getInstance(this);
            var map       = World.StorageManager.Spacemaps[randomMap.Next(1, 29)];

            map.CreateBinaryBot(Vector.Random(map), true);
        }
예제 #2
0
        public override void Reward()
        {
            base.Reward();
            AlmostNoNpcsLeft -= LowGate_AlmostNoNpcsLeft;
            var randomInstance = RandomInstance.getInstance(this);
            var num            = randomInstance.NextDouble();

            foreach (var joined in JoinedPlayers.Values)
            {
                var currencyReward = new Reward(new Dictionary <RewardType, int> {
                    { RewardType.CREDITS, 1250000 }, { RewardType.URIDIUM, 12500 }
                });
                var ammoReward    = new Reward(RewardType.AMMO, Item.Find("ammunition_laser_ucb-100"), 12500);
                var specialReward = new characters.Reward(RewardType.ITEM, Item.Find("equipment_weapon_laser_lf-4"), 1);
                if (num < 0.03)
                {
                    specialReward.ParseRewards(joined);
                }
                //TODO
                MoveOut(joined);
                ammoReward.ParseRewards(joined);
                currencyReward.ParseRewards(joined);

                if (joined.OwnedGates.ContainsKey(Id))
                {
                    joined.OwnedGates.TryRemove(Id, out _);
                }
            }
            JoinedPlayers.Clear();
        }
예제 #3
0
        public void RandomiseReward()
        {
            var randomInstance = RandomInstance.getInstance(this);
            var num            = randomInstance.NextDouble();

            if (num < 0.005)
            {
                BoxReward = new Reward(RewardType.ITEM, Item.Find("equipment_weapon_laser_lf-4"), 1);
            }
            //else if (num < 0.02) TODO: add design rewards
            //{
            //    BoxReward = new Reward(RewardType.DESIGN, Item.Find("ship_goliath_design_solace"), 1);
            //}
            //else if (num < 0.03)
            //{
            //    BoxReward = new Reward(RewardType.DESIGN, Item.Find("ship_vengeance_design_lightning"), 1);
            //}
            else if (num < 0.06)
            {
                BoxReward = new Reward(RewardType.ITEM, Item.Find("equipment_weapon_laser_lf-3"), 1);
            }
            else if (num < 0.07)
            {
                BoxReward = new Reward(RewardType.ITEM, Item.Find("equipment_generator_shield_sg3n-b02"), 1);
            }
            else if (num < 0.17)
            {
                BoxReward = new Reward(RewardType.ITEM, Item.Find("equipment_generator_speed_g3n-7900"), 1);
            }
            else if (num < 0.2)
            {
                BoxReward = new Reward(new Dictionary <RewardType, int> {
                    { RewardType.GALAXY_GATES_ENERGY, 16 }
                });
                BoxReward.Rewards.Add((short)0);
                BoxReward.Rewards.Add(RewardType.AMMO);
                BoxReward.Rewards.Add(Item.Find("ammunition_laser_rsb-75"));
                BoxReward.Rewards.Add(1024);
            }
            else if (num < 0.3)
            {
                BoxReward = new Reward(RewardType.URIDIUM, 320);
                BoxReward.Rewards.Add((short)0);
                BoxReward.Rewards.Add(RewardType.AMMO);
                BoxReward.Rewards.Add(Item.Find("ammunition_laser_ucb-100"));
                BoxReward.Rewards.Add(500);
            }
            else
            {
                BoxReward = new Reward(RewardType.URIDIUM, 43);
                BoxReward.Rewards.Add((short)0);
                BoxReward.Rewards.Add(RewardType.AMMO);
                BoxReward.Rewards.Add(Item.Find("ammunition_rocketlauncher_sar-02"));
                BoxReward.Rewards.Add(150);
                BoxReward.Rewards.Add((short)0);
                BoxReward.Rewards.Add(RewardType.AMMO);
                BoxReward.Rewards.Add(Item.Find("ammunition_rocketlauncher_hstrm-01"));
                BoxReward.Rewards.Add(64);
            }
        }
예제 #4
0
        public static List <T> Sample <T>(this IList <T> self, bool replacement = false, int sampleSize = -1, IRandom random = null)
        {
            if (sampleSize == -1)
            {
                sampleSize = self.Count;
            }

            if (replacement)
            {
                random ??= RandomInstance.Get();
                var result = new List <T>(sampleSize);
                for (var i = 0; i < sampleSize; ++i)
                {
                    var j = random.Next(self.Count);
                    result.Add(self[j]);
                }

                return(result);
            }
            else
            {
                if (sampleSize > self.Count)
                {
                    throw new ArgumentOutOfRangeException("sampleSize", "Sample size must not be larger than the size of the population without replacement.");
                }

                var result = Shuffle(self, random);
                if (sampleSize == self.Count)
                {
                    return(result);
                }
                return(result.Take(sampleSize).ToList());
            }
        }
예제 #5
0
        private async void ListenerEventWorker()
        {
            var EventID = RandomInstance.Next();

            ListenerEventID = EventID;

            await Task.Delay(500);

            if (EventID != ListenerEventID)
            {
                return;                                         // Another event called
            }
            var res = new ResourceModel
            {
                Date = DateTime.Now,

                Fuel    = CurrentFuel,
                Ammo    = CurrentAmmo,
                Steel   = CurrentSteel,
                Bauxite = CurrentBauxite,

                RepairBucket        = CurrentRepairBucket,
                DevelopmentMaterial = CurrentDevelopmentMaterial,
                InstantConstruction = CurrentInstantConstruction,
                ImprovementMaterial = CurrentImprovementMaterial
            };

            var x = ResourceList.ToList();

            x.Add(res);
            ResourceList = x.ToArray();

            ResetChart(GetDaysFromPeriod());
        }
 private object Invalidize(string fieldName, object value, Type type)
 {
     if (fieldName.Equals("path", StringComparison.InvariantCultureIgnoreCase))
     {
         return("45/shapes");
     }
     if (type == typeof(string))
     {
         return((string)value + "invalidValue");
     }
     if (type == typeof(int))
     {
         return(593);
     }
     if (type == typeof(List <int>))
     {
         return(new List <int> {
             593
         });
     }
     if (type.IsEnum)
     {
         Array values = Enum.GetValues(type);
         return(values.GetValue(RandomInstance.Next(values.Length)));
     }
     return(null);
 }
예제 #7
0
        public void TestFrontendCall()
        {
            var config   = new ConfigParams(tokenId: "10");
            var er       = new EnrichmentWrapper(config);
            var instance = RandomInstance.RandomizeCoordinatesAndSave(20, config, false);

            er.SpatialmHGWrapper(instance.Item1.Zip(instance.Item2, (a, b) => new Tuple <double, double, bool>(a.GetDimension(0), a.GetDimension(1), b)).ToList());
        }
예제 #8
0
        private async void ListenerEventWorker()
        {
            var EventID = RandomInstance.Next();

            ListenerEventID = EventID;

            await Task.Delay(500);

            if (EventID != ListenerEventID)
            {
                return;                                         // Another event called
            }
            string zItemsPath = ResourceCachePath;

            var res = new ResourceModel
            {
                Date = DateTime.Now,

                Fuel    = CurrentFuel,
                Ammo    = CurrentAmmo,
                Steel   = CurrentSteel,
                Bauxite = CurrentBauxite,

                RepairBucket        = CurrentRepairBucket,
                DevelopmentMaterial = CurrentDevelopmentMaterial,
                InstantConstruction = CurrentInstantConstruction,
                ImprovementMaterial = CurrentImprovementMaterial
            };

            CriticalSection("ResourceChartWrite", () =>
            {
                int tries = 5;
                if ((DateTime.Now - LatestWritten).TotalSeconds < 60.0)
                {
                    return;
                }

                while (tries > 0)
                {
                    try
                    {
                        using (FileStream fs = new FileStream(zItemsPath, FileMode.Append))
                        {
                            CSV.Write(fs,
                                      res.Date.ToString("yyyy-MM-dd HH:mm:ss"),
                                      res.Fuel, res.Ammo, res.Steel, res.Bauxite,
                                      res.RepairBucket, res.DevelopmentMaterial,
                                      res.InstantConstruction, res.ImprovementMaterial
                                      );
                        }
                        break;
                    }
                    catch (IOException) { tries--; }
                    catch (Exception) { break; }
                }
            });
        }
예제 #9
0
        public static Vector GetPosOnCircle(Vector circleCenter, int radius)
        {
            var randomInstance = RandomInstance.getInstance(circleCenter);
            var a          = randomInstance.Next(0, 360);
            var calculateX = circleCenter.X + Convert.ToInt32(radius * Math.Cos(a / (180 / Math.PI)));
            var calculateY = circleCenter.Y + Convert.ToInt32(radius * Math.Sin(a / (180 / Math.PI)));

            return(new Vector(calculateX, calculateY));
        }
예제 #10
0
 public static AuthorizationState GetNewAuth() =>
 new AuthorizationState()
 {
     State = RandomInstance.GetRandomString(20),
     DidReceiveCallback  = false,
     LinkHandoutTime     = DateTime.Now,
     CallbackReceiveTime = null,
     Code = null
 };
예제 #11
0
        internal void Create(Spacemap spacemap, int vwId, Vector vector, int r)
        {
            var random = RandomInstance.getInstance(this);

            foreach (var npc in Npcs)
            {
                spacemap.CreateNpc(npc.Ship, AILevels.GALAXY_GATES, false, 0, Vector.GetPosOnCircle(vector, random.Next(0, 360), r), 0, npc.NamePrefix + " " + (Id + 1), npc.Ship.Reward.Multiply(npc.Multiplier));
            }
        }
예제 #12
0
 /// <summary>
 ///     Creates new authorization code awaiter
 /// </summary>
 /// <returns></returns>
 public static AuthorizationState GetNewAuth()
 {
     return(new AuthorizationState
     {
         State = RandomInstance.GetRandomString(50),
         DidReceiveCallback = false,
         LinkHandoutTime = DateTime.UtcNow,
         CallbackReceiveTime = null,
         Code = null
     });
 }
예제 #13
0
        private int GetNextNumber(int totalDice)
        {
            int totalValue = 0;

            for (int i = 0; i < totalDice; i++)
            {
                totalValue += RandomInstance.Next(1, NUM_SIDES + 1);
            }

            return(totalValue);
        }
예제 #14
0
 public static void ShuffleFill <T>(this IList <T> self, IRandom random = null)
 {
     random ??= RandomInstance.Get();
     for (var i = 0; i < self.Count; ++i)
     {
         var j    = random.Next(i + 1);
         var temp = self[i];
         self[i] = self[j];
         self[j] = temp;
     }
 }
예제 #15
0
        public void RandomiseReward()
        {
            var randomInstance = RandomInstance.getInstance(this);
            var num            = randomInstance.NextDouble();

            if (num < 0.005)
            {
                BoxReward = new Reward(RewardType.URIDIUM, 32);
                BoxReward.Rewards.Add((short)0);
                BoxReward.Rewards.Add(RewardType.AMMO);
                BoxReward.Rewards.Add(Item.Find("ammunition_laser_ucb-100"));
                BoxReward.Rewards.Add(395);
            }
            else if (num < 0.02)
            {
                BoxReward = new Reward(RewardType.CREDITS, 50000);
                BoxReward.Rewards.Add((short)0);
                BoxReward.Rewards.Add(RewardType.AMMO);
                BoxReward.Rewards.Add(Item.Find("ammunition_laser_rsb-75"));
                BoxReward.Rewards.Add(100);
            }
            else if (num < 0.1)
            {
                BoxReward = new Reward(RewardType.CREDITS, 7500);
                BoxReward.Rewards.Add((short)0);
                BoxReward.Rewards.Add(RewardType.AMMO);
                BoxReward.Rewards.Add(Item.Find("ammunition_rocketlauncher_sar-02"));
                BoxReward.Rewards.Add(6);
                BoxReward.Rewards.Add((short)0);
                BoxReward.Rewards.Add(RewardType.AMMO);
                BoxReward.Rewards.Add(Item.Find("ammunition_rocketlauncher_hstrm-01"));
                BoxReward.Rewards.Add(4);
            }
            else if (num < 0.2)
            {
                BoxReward = new Reward(new Dictionary <RewardType, int> {
                    { RewardType.GALAXY_GATES_ENERGY, 1 }
                });
                BoxReward.Rewards.Add((short)0);
                BoxReward.Rewards.Add(RewardType.AMMO);
                BoxReward.Rewards.Add(Item.Find("ammunition_laser_mcb-25"));
                BoxReward.Rewards.Add(580);
            }
            else if (num < 0.3)
            {
                BoxReward = new Reward(RewardType.AMMO, Item.Find("ammunition_laser_mcb-50"), 150);
            }
            else
            {
                BoxReward = new Reward(RewardType.AMMO, Item.Find("ammunition_laser_mcb-25"), 250);
            }
        }
예제 #16
0
        protected override void Reward(Player player)
        {
            try
            {
                Reward reward;

                if (CustomReward != null)
                {
                    reward = CustomReward;
                }
                else
                {
                    RewardType type;
                    var        orderedRewards = REWARDS.OrderBy(x => x.Chance).ToArray();
                    var        random         = RandomInstance.getInstance(this);
                    //todo
                    var n = random.NextDouble();
                    var potentialReward = orderedRewards.FirstOrDefault(x => x.Chance > n) ?? orderedRewards.Last();
                    if (Enum.TryParse(potentialReward.LootId, true, out type))
                    {
                        reward = new Reward(type, potentialReward.Amount);
                    }
                    else
                    {
                        type = RewardType.ITEM;
                        if (potentialReward.LootId.StartsWith("ammunition"))
                        {
                            type = RewardType.AMMO;
                        }
                        reward = new Reward(type, Item.Find(potentialReward.LootId), potentialReward.Amount);
                    }
                }

                if (player.BoostedBoxRewards == 1)
                {
                    reward.ParseRewards(player, 2);
                }
                else
                {
                    reward.ParseRewards(player);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                Console.WriteLine(e.StackTrace);
            }
        }
예제 #17
0
        public static Vector Random(Spacemap map, Vector min = null, Vector max = null)
        {
            if (min == null)
            {
                min = map.Limits[0];
            }
            if (max == null)
            {
                max = map.Limits[1];
            }
            var random = RandomInstance.getInstance(map);

            var posX = random.Next(min.X, max.X);
            var posY = random.Next(min.Y, max.Y);

            return(new Vector(posX, posY));
        }
예제 #18
0
        private int RandomizeDamage(int baseDmg, double hitProbability = 0.90)
        {
            var    random   = RandomInstance.getInstance(this);
            double randNums = random.NextDouble();

            if (hitProbability - randNums < 0)
            {
                return(0);
            }

            var difference = (baseDmg * randNums) * 0.15;

            if (randNums > 0.5)
            {
                return((int)(baseDmg + difference));
            }
            return((int)(baseDmg - difference));
        }
예제 #19
0
        private int RandomizeDamage(int damage)
        {
            if (damage <= 0)
            {
                return(0);
            }

            int max = damage + 1000;
            int min = damage - 1000;

            if (min < 0)
            {
                min = 0;
            }

            var random           = RandomInstance.getInstance(this);
            int calculatedDamage = random.Next(max - min) + min;

            return(calculatedDamage);
        }
예제 #20
0
        private void RandomiseDamage(PendingDamage pendingDamage)
        {
            if (pendingDamage.Attacker == null)
            {
                Out.WriteLog("Trying to randomise a damage without attacker", LogKeys.ERROR_LOG);
                throw new Exception("Trying to randomise a damage where there is no attacker");
            }

            var attacker = pendingDamage.Attacker;

            var random = RandomInstance.getInstance(attacker).NextDouble();

            if (pendingDamage.Damage > 0)
            {
                if (random > attacker.HitRate)
                {
                    pendingDamage.Damage = 0;
                }
                else
                {
                    var randomDamage = Convert.ToInt32(RandomInstance.getInstance(attacker).Next(pendingDamage.Damage - attacker.MaximalDamageReduce, attacker.MaximalDamageIncrease + pendingDamage.Damage));
                    pendingDamage.Damage = randomDamage;
                }
            }

            if (pendingDamage.AbsorbDamage > 0)
            {
                if (random > attacker.HitRate)
                {
                    pendingDamage.AbsorbDamage = 0;
                }
                else
                {
                    var randomDamage = Convert.ToInt32(RandomInstance.getInstance(attacker).Next(pendingDamage.AbsorbDamage - attacker.MaximalDamageReduce, attacker.MaximalDamageIncrease + pendingDamage.AbsorbDamage));
                    pendingDamage.AbsorbDamage = randomDamage;
                }
            }
        }
예제 #21
0
        public static List <T> Shuffle <T>(this IList <T> self, IRandom random = null)
        {
            // ref: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

            var result = new List <T>(self.Count);

            random ??= RandomInstance.Get();
            for (var i = 0; i < self.Count; ++i)
            {
                var j = random.Next(i + 1);
                if (j == i)
                {
                    result.Add(self[i]);
                }
                else
                {
                    result.Add(result[j]);
                    result[j] = self[i];
                }
            }

            return(result);
        }
예제 #22
0
        /// <summary>
        /// 创建游戏
        /// </summary>
        /// <param name="name"></param>
        /// <param name="username"></param>
        /// <param name="result"></param>
        /// <param name="MapSelection"></param>
        /// <param name="seed"></param>
        /// <param name="isTestGame"></param>
        /// <param name="isSocket"></param>
        /// <param name="IsRotatoMap"></param>
        /// <param name="version"></param>
        /// <returns></returns>

        private static bool CreateNewGame(string name, string[] username, out GaiaGame result, string MapSelection, int seed = 0, bool isTestGame = false, bool isSocket = false, bool IsRotatoMap = false, int version = 3)
        {
            if (m_dic.ContainsKey(name))
            {
                result = null;
                return(false);
            }
            else
            {
                seed               = seed == 0 ? RandomInstance.Next(int.MaxValue) : seed;
                result             = new GaiaGame(username, name);
                result.IsTestGame  = isTestGame;
                result.GameName    = name;        //游戏名称
                result.IsSocket    = isSocket;    //即时制
                result.IsRotatoMap = IsRotatoMap; //旋转地图
                result.version     = version;

                //开局的两条命令
                result.Syntax(GameSyntax.setupmap + " " + MapSelection, out string log);
                result.Syntax(GameSyntax.setupGame + seed, out log);
                m_dic.Add(name, result);
                return(true);
            }
        }
예제 #23
0
        public async void Trigger(TimeSpan delay)
        {
            await Task.Delay(delay);

            ActionExtension.InvokeInMainThreadAsync(() => {
                if (FancyHintAdorner.IsAnyShown)
                {
                    DebugMessage($"{Id}: something else is being shown right now");
                    return;
                }

                if (Shown)
                {
                    DebugMessage($"{Id}: already shown");
                    return;
                }

                if (!Available)
                {
                    DebugMessage($"{Id}: not available");
                    return;
                }

                if (!OptionDebugMode && RandomInstance.NextDouble() > Probability)
                {
                    DebugMessage($"{Id}: not now, random says so");
                    return;
                }

                if (_startupsDelay > StartupId)
                {
                    DebugMessage($"{Id}: waiting for a next start up ({_startupsDelay}, current: {StartupId})");
                    return;
                }

                if (_triggersDelay-- > 0)
                {
                    DebugMessage($"{Id}: waiting for a next ({_triggersDelay + 1}) trigger");
                    return;
                }

                if (!_forced && DateTime.Now - _lastShown < OptionMinimumDelay)
                {
                    DebugMessage($"{Id}: gap ({DateTime.Now - _lastShown}, required: {OptionMinimumDelay}) is too low");
                    return;
                }

                var args = new ShowHintEventArgs();
                Show?.Invoke(this, args);
                if (!args.Shown)
                {
                    DebugMessage($"{Id}: cancelled!");
                    return;
                }

                DebugMessage($"{Id}: shown");
                Shown      = true;
                _lastShown = DateTime.Now;
                ValuesStorage.Set(KeyLastShown, _lastShown);
            });
        }
예제 #24
0
        private int RandomShip()
        {
            var random = RandomInstance.getInstance(this);

            return(POSSIBLE_SHIPS[random.Next(0, POSSIBLE_SHIPS.Length - 1)]);
        }
예제 #25
0
        static void InitiateRandomResetTimer()
        {
            int randomId = 0;

            TickManager.Add(RandomInstance.getInstance(new object()), out randomId);
        }
예제 #26
0
 /// <summary>
 /// Returns whether or not the datareader should be closed
 /// </summary>
 protected virtual bool ShouldCloseDataReader()
 {
     // Ignore commandCancelled, instead randomly close it 9/10 of the time
     return(RandomInstance.Next(10) != 0);
 }
예제 #27
0
        /// <summary>
        /// Retrieves a random element from <paramref name="list"/>.
        /// </summary>
        /// <typeparam name="T"><see cref="List{T}"/> type</typeparam>
        /// <param name="list"><see cref="List{T}"/> from which to retrieve a random element</param>
        /// <returns>A random element</returns>
        public static T GetRandomElement <T>(this IList <T> list)
        {
            var i = RandomInstance.Next(list.Count);

            return(list[i]);
        }
예제 #28
0
 public void RerollState()
 {
     State = RandomInstance.GetRandomString(20);
 }
예제 #29
0
 /// <summary>
 /// Получить случайную подпись
 /// </summary>
 public ISignatureLibraryApp GetRandomSignature() =>
 _signaturesLibrary.Count > 0
         ? _signaturesLibrary.Values[RandomInstance.RandomNumber(_signaturesLibrary.Values.Count)]
         : null;