예제 #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 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);
            }
        }
예제 #3
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();
        }
예제 #4
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));
        }
예제 #5
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));
            }
        }
예제 #6
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);
            }
        }
예제 #7
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);
            }
        }
예제 #8
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));
        }
예제 #9
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));
        }
예제 #10
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);
        }
예제 #11
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;
                }
            }
        }
예제 #12
0
        static void InitiateRandomResetTimer()
        {
            int randomId = 0;

            TickManager.Add(RandomInstance.getInstance(new object()), out randomId);
        }
예제 #13
0
        private int RandomShip()
        {
            var random = RandomInstance.getInstance(this);

            return(POSSIBLE_SHIPS[random.Next(0, POSSIBLE_SHIPS.Length - 1)]);
        }