Example #1
0
 public ActionResult AdvancedSearch()
 {
     ViewBag.AvailableTags          = db.MissionTagTypes.Select(t => t.TagName).ToList();
     ViewBag.MinimumLevelSelectList = new SelectList(MissionHelper.GetMinimumLevelSelectList(true), "Value", "Text");
     ViewBag.Factions = new SelectList(MissionHelper.GetFactionSelectList(true), "Value", "Text");
     return(View());
 }
Example #2
0
        public void Start()
        {
            deliveryCarBlip           = deliveryCar.AttachBlip();
            deliveryCarBlip.Color     = BlipColor.Blue;
            deliveryCarBlip.ShowRoute = true;

            MissionHelper.DrawTaskSubtitle(String.Format(Strings.MISSION_DELIVERY_STEAL, deliveryCar._GetLabel()));
        }
        private void CacheRunningMissions()
        {
            //running missions for active characters
            var queryStr = @"
select 
ml.*
from missionlog ml 
JOIN characters c ON c.characterID=ml.characterID
where ml.finished is NULL and c.active=1";

            try
            {
                var lastOnline    = HostInfo.GetLastOnline();
                var offlinePeriod = DateTime.Now.Subtract(lastOnline);

                Logger.Info("the server was " + offlinePeriod + " offline.");


                var shiftedExpiry =
                    //offset exiry dates
                    Db.Query().CommandText("UPDATE missionlog SET expire=DATEADD(MINUTE,@offlineMinutes , expire ) WHERE finished IS NULL")
                    .SetParameter("@offlineMinutes", (int)offlinePeriod.TotalMinutes)
                    .ExecuteNonQuery();

                Logger.Info(shiftedExpiry + " missions' expiry date got offseted with " + offlinePeriod);


                var missionRecords = Db.Query().CommandText(queryStr).Execute().ToList();

                foreach (var record in missionRecords)
                {
                    var missionId = record.GetValue <int>("missionid");

                    Mission mission;
                    if (!_missionDataCache.GetMissionById(missionId, out mission))
                    {
                        //skip mission load
                        continue;
                    }

                    var missionInProgress = MissionHelper.ReadMissionInProgressByRecord(record, mission);

                    if (missionInProgress == null)
                    {
                        continue;
                    }

                    // add to ram
                    AddMissionInProgress(missionInProgress);
                }

                Logger.Info(_missionInProgress.Count + " running missions cached.");
            }
            catch (Exception ex)
            {
                Logger.Error("error occured in caching the running missions." + ex.Message);
            }
        }
Example #4
0
        public async Task Prepare()
        {
            VehicleHash[] possibleVehicles =
            {
                VehicleHash.Voltic2,
                VehicleHash.Voltic,
                VehicleHash.Kuruma2,
                VehicleHash.Oppressor,
                VehicleHash.Lectro
            };
            deliveryCar = await MissionHelper.CreateRobustVehicle(possibleVehicles[API.GetRandomIntInRange(0, possibleVehicles.Length)],
                                                                  new Vector3(667.4f, -756f, 23.7f), 171.5f);

            missionMusic = new MissionMusic();
            missionMusic.PlayStartMusic();

            missionHelper = new DeliveryMissionHelper(deliveryCar, missionMusic);

            Ped enemy1 = await missionHelper.CreateNeutralEnemyPed(PedHash.BikeHire01, new Vector3(667.8f, -768.8f, 23.6f), 184.8f, WeaponHash.AssaultRifleMk2);

            enemy1._StartScenario("WORLD_HUMAN_AA_SMOKE");
            Ped enemy2 = await missionHelper.CreateNeutralEnemyPed(PedHash.Car3Guy1, new Vector3(668.1f, -773f, 23.5f), 6f, WeaponHash.AssaultRifleMk2);

            enemy2._StartScenario("WORLD_HUMAN_DRUG_DEALER");
            Ped enemy3 = await missionHelper.CreateNeutralEnemyPed(PedHash.Car3Guy2, new Vector3(667f, -754.4f, 31.3f), 0f, WeaponHash.AssaultRifleMk2);

            enemy3._StartScenario("WORLD_HUMAN_BINOCULARS");
            Ped enemy4 = await missionHelper.CreateNeutralEnemyPed(PedHash.CarBuyerCutscene, new Vector3(672.1f, -781.9f, 23.5f), 101.9f, WeaponHash.AssaultRifleMk2);

            enemy4._StartScenario("WORLD_HUMAN_DRINKING");
            Ped enemy5 = await missionHelper.CreateNeutralEnemyPed(PedHash.MexGang01GMY, new Vector3(656.8f, -793.8f, 23.5f), 1.6f, WeaponHash.AssaultRifleMk2);

            enemy5._StartScenario("WORLD_HUMAN_WELDING");
            enemyVehicles = new List <Vehicle>();
            Vehicle vehicle1 = await EntityUtil.CreateVehicle(VehicleHash.SabreGT, new Vector3(654.5f, -729.8f, 24.2f), 181.1f);

            enemyVehicles.Add(vehicle1);
            Ped enemy6 = await missionHelper.CreateNeutralEnemyPed(PedHash.MexGang01GMY, new Vector3(), 0f, WeaponHash.PistolMk2);

            enemy6.SetIntoVehicle(vehicle1, VehicleSeat.Driver);
            Vehicle vehicle2 = await EntityUtil.CreateVehicle(VehicleHash.Ninef, new Vector3(669.4f, -706.8f, 24.6f), 177.5f);

            enemyVehicles.Add(vehicle2);
            Ped enemy7 = await missionHelper.CreateNeutralEnemyPed(PedHash.MexGoon01GMY, new Vector3(), 0f, WeaponHash.PistolMk2);

            enemy7.SetIntoVehicle(vehicle2, VehicleSeat.Driver);
            Ped enemy8 = await missionHelper.CreateNeutralEnemyPed(PedHash.MexGoon02GMY, new Vector3(), 0f, WeaponHash.MicroSMG);

            enemy8.SetIntoVehicle(vehicle2, VehicleSeat.Passenger);
            Ped enemy9 = await missionHelper.CreateNeutralEnemyPed(PedHash.MexThug01AMY, new Vector3(677.3f, -861.9f, 23.5f), 182.4f, WeaponHash.AssaultRifleMk2);

            enemy9._StartScenario("WORLD_HUMAN_CONST_DRILL");
            Ped enemy10 = await missionHelper.CreateNeutralEnemyPed(PedHash.MexBoss01GMM, new Vector3(683.5f, -861.9f, 23.6f), 64.5f, WeaponHash.AssaultRifleMk2);

            enemy10._StartScenario("WORLD_HUMAN_COP_IDLES");
        }
        public void Start()
        {
            deliveryCarBlip       = deliveryCar.AttachBlip();
            deliveryCarBlip.Color = BlipColor.Blue;
            deliveryCarBlip.Alpha = 0;

            MissionHelper.DrawTaskSubtitle(String.Format(Strings.MISSION_DELIVERY_LOCATE, deliveryCar._GetLabel()));
            BaseScript.TriggerEvent("mtracker:settargets", new int[] { deliveryCar.Handle });
            BaseScript.TriggerEvent("mtracker:start");
        }
Example #6
0
        public ActionResult Submit()
        {
            List <SelectListItem> publishedSelectItems = MissionHelper.GetYesNoSelectList();

            ViewBag.AvailableTags          = db.MissionTagTypes.Select(t => t.TagName).ToList();
            ViewBag.PublishedSelectList    = new SelectList(publishedSelectItems, "Value", "Text");
            ViewBag.MinimumLevelSelectList = new SelectList(MissionHelper.GetMinimumLevelSelectList(), "Value", "Text");

            return(View());
        }
 public void HandleRequest(IZoneRequest request)
 {
     using (var scope = Db.CreateTransaction())
     {
         var character  = request.Session.Character;
         var position   = request.Zone.GetPrimaryLockedTileOrThrow(character);
         var findRadius = request.Data.GetOrDefault(k.radius, (int)DistanceConstants.MISSION_RANDOM_POINT_FINDRADIUS_DEFAULT);
         MissionHelper.PlaceRandomPoint(request.Zone, position, findRadius);
         Message.Builder.FromRequest(request).WithOk().Send();
         scope.Complete();
     }
 }
Example #8
0
        private void CollectComponentsFromMission(Character character, Guid missionGuid)
        {
            var missionInProgress =
                MissionHelper.ReadMissionInProgressByGuid(missionGuid, character);

            if (missionInProgress == null)
            {
                Logger.Error("mission was not found: " + missionGuid);
                return;
            }

            missionInProgress.CollectComponentsForCPRG(this);
        }
Example #9
0
        private Guid CollectComponentsFromIndustrialMissions(Character character)
        {
            Guid missionGuid;

            if (MissionHelper.FindIndustrialMissionGuidWithConditions(character, Definition, out missionGuid))
            {
                //the current character has this kind of target in mission
                CollectComponentsFromMission(character, missionGuid);

                Logger.Info("components set for character in CPRG:" + this.Eid);
                return(missionGuid);
            }
            return(Guid.Empty);
        }
        private Bitmap GenerateRandomPointsOnly(IRequest request)
        {
            //-------- kick brute force fill in
            const int randomPointTargetAmount = 2500;

            //----code

            var deletedSpots =
                Db.Query().CommandText("delete missionspotinfo where zoneid=@zoneId and type=@spotType")
                .SetParameter("@zoneId", _zone.Id)
                .SetParameter("@spotType", (int)MissionSpotType.randompoint)
                .ExecuteNonQuery();

            Logger.Info(deletedSpots + " random point spots were deleted from zone:" + _zone.Id);

            var staticObjects = MissionSpot.GetStaticObjectsFromZone(_zone);

            var spotInfos = MissionSpot.GetMissionSpotsFromUnitsOnZone(_zone);

            PlaceOneType(spotInfos, MissionSpotType.randompoint, randomPointTargetAmount, randomPointDistanceInfos, staticObjects, randomPointAccuracy);

            var resultBitmap = DrawResultOnBitmap(spotInfos, staticObjects);

            SendDrawFunctionFinished(request);

            var randomPoints = spotInfos.Where(i => i.type == MissionSpotType.randompoint).ToList();

            Logger.Info(randomPoints.Count + " new random points were generated.");

            //-------


            var deletedTargets =
                Db.Query().CommandText("delete missiontargets where targetpositionzone=@zoneId and targettype=@targetType")
                .SetParameter("@zoneId", _zone.Id)
                .SetParameter("@targetType", (int)MissionTargetType.rnd_point)
                .ExecuteNonQuery();

            Logger.Info(deletedTargets + " mission targets were deleted.");


            foreach (var missionSpot in randomPoints)
            {
                MissionHelper.PlaceRandomPoint(_zone, missionSpot.position, (int)DistanceConstants.MISSION_RANDOM_POINT_FINDRADIUS_DEFAULT);
            }

            Logger.Info("new mission targets inserted");

            return(resultBitmap);
        }
Example #11
0
    private List <Waypoint> ConverPositionsToWaypoints(List <Vector3> positions, float cameraAngle)
    {
        List <Waypoint> waypoints = new List <Waypoint>();

        for (int i = 0; i < positions.Count - 1; i++)
        {
            Vector3 current = positions[i];
            Vector3 next    = positions[i + 1];
            waypoints.Add(new Waypoint(current, MissionHelper.CalculateRotationBetweenWaypoints(current, next, cameraAngle)));
        }

        waypoints.Add(new Waypoint(positions[positions.Count - 1], waypoints[waypoints.Count - 1].droneRotation));
        return(waypoints);
    }
Example #12
0
        public void HandleRequest(IZoneRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var eid         = request.Data.GetOrDefault <long>(k.eid);
                var orientation = request.Data.GetOrDefault(k.orientation, -1);
                var x           = request.Data.GetOrDefault <double>(k.x);
                var y           = request.Data.GetOrDefault <double>(k.y);

                MissionHelper.UpdateMissionStructure(request.Zone, eid, orientation, new Position(x, y));
                Message.Builder.FromRequest(request).WithOk().Send();

                scope.Complete();
            }
        }
        public async Task Prepare()
        {
            deliveryCar = await MissionHelper.CreateRobustVehicle(VehicleHash.Schafter5, new Vector3(-2307.3f, 369.3f, 174.2f), 323.8f);

            API.SetEntityLoadCollisionFlag(deliveryCar.Handle, true);

            missionMusic = new MissionMusic();
            missionMusic.PlayStartMusic();

            missionHelper = new DeliveryMissionHelper(deliveryCar, missionMusic);
            Ped enemy = await missionHelper.CreateNeutralEnemyPed(PedHash.Security01SMM, new Vector3(), 0f, WeaponHash.CarbineRifle);

            enemy.SetIntoVehicle(deliveryCar, VehicleSeat.Driver);
            enemy.Task.CruiseWithVehicle(deliveryCar, 30f, (int)DrivingStyle.Normal);
        }
Example #14
0
        //
        // GET: /Manage/Index
        public ActionResult Index()
        {
            var model = new ManageIndexViewModel();

            var missions = db.Missions.Where(m => m.Author.UserName.Equals(User.Identity.Name) && m.Status != MissionStatus.Removed).ToList();

            model.Missions = MissionHelper.GetListMissionViewModels(missions);

            if (User.IsInRole(ConstantsHelper.AdminRole))
            {
                model.MissionsToApprove = MissionHelper.GetListMissionViewModels(db.Missions.Where(m => m.Status == Models.FoundryMissionModels.Enums.MissionStatus.InReview).OrderBy(m => m.DateLastUpdated).ToList());
                model.Authors           = AccountHelper.GetAuthorViewModels(db.Users.OrderBy(u => u.UserName).ToList(), db);
            }

            return(View(model));
        }
Example #15
0
        public async Task Prepare()
        {
            VehicleHash[] possibleVehicles =
            {
                VehicleHash.Voltic2,
                VehicleHash.Kuruma2,
                VehicleHash.Oppressor,
                VehicleHash.Dukes2,
                VehicleHash.Comet3
            };
            deliveryCar = await MissionHelper.CreateRobustVehicle(possibleVehicles[API.GetRandomIntInRange(0, possibleVehicles.Length)],
                                                                  new Vector3(666.4f, 676.9f, 128.5f), 193.4f);

            missionMusic = new MissionMusic();
            missionMusic.PlayStartMusic();

            missionHelper = new DeliveryMissionHelper(deliveryCar, missionMusic);

            Ped enemy1 = await missionHelper.CreateNeutralEnemyPed(PedHash.Korean01GMY, new Vector3(663.1f, 662.5f, 128.9f), 252.3f, WeaponHash.PistolMk2);

            enemy1._StartScenario("WORLD_HUMAN_AA_SMOKE");
            Ped enemy2 = await missionHelper.CreateNeutralEnemyPed(PedHash.Korean02GMY, new Vector3(667.5f, 661.1f, 128.9f), 70.3f, WeaponHash.PistolMk2);

            enemy2._StartScenario("WORLD_HUMAN_GUARD_PATROL");
            Ped enemy3 = await missionHelper.CreateNeutralEnemyPed(PedHash.Korean02GMY, new Vector3(780.2f, 571.4f, 127.5f), 330.4f, WeaponHash.PistolMk2);

            enemy3._StartScenario("WORLD_HUMAN_SMOKING");
            enemyVehicles = new List <Vehicle>();
            Vehicle vehicle1 = await EntityUtil.CreateVehicle(VehicleHash.Sentinel, new Vector3(851.3f, 504f, 125.9f), 343f);

            enemyVehicles.Add(vehicle1);
            Ped enemy4 = await missionHelper.CreateNeutralEnemyPed(PedHash.KorLieut01GMY, new Vector3(), 0f, WeaponHash.PistolMk2);

            enemy4.SetIntoVehicle(vehicle1, VehicleSeat.Driver);
            Ped enemy5 = await missionHelper.CreateNeutralEnemyPed(PedHash.KorBoss01GMM, new Vector3(), 0f, WeaponHash.MicroSMG);

            enemy5.SetIntoVehicle(vehicle1, VehicleSeat.Passenger);
            Ped enemy6 = await missionHelper.CreateNeutralEnemyPed(PedHash.KorLieut01GMY, new Vector3(903.5f, 541.6f, 123.2f), 271.7f, WeaponHash.PistolMk2);

            enemy6._StartScenario("WORLD_HUMAN_SMOKING");
            Ped enemy7 = await missionHelper.CreateNeutralEnemyPed(PedHash.Korean01GMY, new Vector3(906.7f, 541.7f, 123.2f), 93.5f, WeaponHash.PistolMk2);

            enemy7._StartScenario("WORLD_HUMAN_GUARD_PATROL");
            Ped enemy8 = await missionHelper.CreateNeutralEnemyPed(PedHash.KorBoss01GMM, new Vector3(902.2f, 510.7f, 121.9f), 296f, WeaponHash.PistolMk2);

            enemy8._StartScenario("WORLD_HUMAN_STAND_IMPATIENT");
        }
Example #16
0
        /// <summary>
        /// Make the docking happen
        /// </summary>
        /// <param name="zone"></param>
        /// <param name="dockingBase"></param>
        public void DockToBase(IZone zone, DockingBase dockingBase)
        {
            States.Dock = true;

            var publicContainer = dockingBase.GetPublicContainer();

            FullArmorRepair();

            publicContainer.AddItem(this, false);
            publicContainer.Save();
            dockingBase.DockIn(Character, NormalUndockDelay, ZoneExitType.Docked);

            Transaction.Current.OnCommited(() =>
            {
                RemoveFromZone();
                MissionHelper.MissionAdvanceDockInTarget(Character.Id, zone.Id, CurrentPosition);
                TransportAssignment.DeliverTransportAssignmentAsync(Character);
            });
        }
Example #17
0
    protected override List <Waypoint> CalculateWaypoints()
    {
        List <Vector3>  positions = CalculatePositions();
        List <Waypoint> waypoints = new List <Waypoint>();

        for (int i = 0; i < positions.Count - 1; i++)
        {
            Vector3 current = positions[i];
            Vector3 next    = positions[i + 1];
            waypoints.Add(new Waypoint(current, MissionHelper.CalculateRotationBetweenWaypoints(current, next, cameraAngle)));
        }

        if (waypoints.Count > 0)
        {
            waypoints.Add(new Waypoint(positions[positions.Count - 1], waypoints[waypoints.Count - 1].droneRotation));
        }
        else
        {
            waypoints.Add(new Waypoint(positions[0], Quaternion.AngleAxis(cameraAngle, Vector3.right)));
        }
        return(waypoints);
    }
Example #18
0
        /// <summary>
        /// This occurs when aoe kills the npc.
        /// Background task that searches for the related missionguid and sumbits the kill for that specific player
        /// </summary>
        private void SearchForMissionOwnerAndSubmitKill(IZone zone, Unit killerUnit)
        {
            var missionGuid  = GetMissionGuid();
            var missionOwner = MissionHelper.FindMissionOwnerByGuid(missionGuid);

            var missionOwnerPlayer = zone.GetPlayer(missionOwner);

            if (missionOwnerPlayer == null)
            {
                //the owner is not this zone
                //address the mission plugin directly

                var info = new Dictionary <string, object>
                {
                    { k.characterID, missionOwner.Id },
                    { k.guid, missionGuid.ToString() },
                    { k.type, MissionTargetType.kill_definition },
                    { k.definition, ED.Definition },
                    { k.increase, 1 },
                    { k.zoneID, zone.Id },
                    { k.position, killerUnit.CurrentPosition }
                };

                if (killerUnit is Player killerPlayer && killerPlayer.Character.Id != missionOwner.Id)
                {
                    info[k.assistingCharacterID] = killerPlayer.Character.Id;
                }

                Task.Run(() =>
                {
                    MissionHelper.MissionProcessor.NpcGotKilledInAway(missionOwner, missionGuid, info);
                });
                return;
            }

            //local enqueue, this is the proper player, we can skip gang
            EnqueueKill(missionOwnerPlayer, killerUnit);
        }
Example #19
0
        public ActionResult Details(string link)
        {
            //temporary for testing
            var collection = new ViewCollectionViewModel()
            {
                CollectionLink = "superheroes-by-zorbane",
                Description    = "Missions by Zorbane that are inspired by the Marvel Cinematic Universe.  These missions can be played in any order except for the finale mission, UNKNOWN MISSION NAME. Missions by Zorbane that are inspired by the Marvel Cinematic Universe.These missions can be played in any order except for the finale mission, UNKNOWN MISSION NAME. Missions by Zorbane that are inspired by the Marvel Cinematic Universe.  These missions can be played in any order except for the finale mission, UNKNOWN MISSION NAME. Missions by Zorbane that are inspired by the Marvel Cinematic Universe.  These missions can be played in any order except for the finale mission, UNKNOWN MISSION NAME. Missions by Zorbane that are inspired by the Marvel Cinematic Universe.These missions can be played in any order except for the finale mission, UNKNOWN MISSION NAME. Missions by Zorbane that are inspired by the Marvel Cinematic Universe.  These missions can be played in any order except for the finale mission, UNKNOWN MISSION NAME.",
                Id             = 1,
                ImageLink      = MissionCollectionHelper.GetImageLink("pic.jpg", 1),
                Name           = "Superheroes by Zorbane",
                AuthorTag      = db.Users.FirstOrDefault(u => u.CrypticTag.Equals("Zorbane")).CrypticTag,
                Missions       = new List <ListMissionViewModel>(),
            };

            var missions = new List <Mission>();

            missions.Add(db.Missions.Where(m => m.Name.Equals("The Improbable Bulk")).Single());
            missions.Add(db.Missions.Where(m => m.Name.Equals("Duritanium Man")).Single());

            collection.Missions = MissionHelper.GetListMissionViewModels(missions);

            return(View(collection));
        }
Example #20
0
        public void ServerAddsParticipant(Guid guid, Character doerCharacter)
        {
            var ownerCharacter = MissionHelper.FindMissionOwnerByGuid(guid);

            if (ownerCharacter == Character.None)
            {
                Logger.Error($" no mission owner character was found for guid:{guid.ToString()}");
                return;
            }

            if (doerCharacter == Character.None)
            {
                Logger.Error($" WTF? in MissionServerAddsParticipantHandler. doerCharacterId:{doerCharacter.Id} mission owner characterId:{ownerCharacter.Id}");
                return;
            }

            var gang = ownerCharacter.GetGang();

            if (gang == null)
            {
                return;
            }

            if (!gang.IsMember(doerCharacter))
            {
                return;
            }

            if (!FindMissionInProgress(ownerCharacter, guid, out MissionInProgress missionInProgress))
            {
                Logger.Error($" no mission was found for characterId:{ownerCharacter.Id} guid:{guid.ToString()}");
                return;
            }

            Logger.DebugInfo($"    >>>> missionGuid:{guid.ToString()} mission owner:{ownerCharacter.Id} new participant:{doerCharacter.Id}");
            missionInProgress.AddParticipant(doerCharacter);
        }
        /// <summary>
        /// Selects a template and starts it... Random mission start
        /// </summary>
        /// <param name="character"></param>
        /// <param name="spreadInGang"></param>
        /// <param name="location"></param>
        /// <param name="level"></param>
        /// <param name="category"></param>
        /// <returns></returns>
        public Dictionary <string, object> SelectAndStartRandomMission(Character character, bool spreadInGang, MissionLocation location, int level, MissionCategory category)
        {
            if (location.Zone == null)
            {
                Logger.Error("zone config was not found for zoneId:" + location.zoneId);
                throw new PerpetuumException(ErrorCodes.ZoneNotFound);
            }

            var missionAgent = location.Agent;

            GetFinishedAndLastMissions(character, out List <int> missionsDone, out Dictionary <int, DateTime> periodicMissions).ThrowIfError();

            var missionFilter = new MissionFilter(character, periodicMissions, missionsDone, this, location, _missionDataCache);

            missionFilter.IsMissionRunningWithThisCategoryAndLevel(category, level, missionAgent).ThrowIfTrue(ErrorCodes.MissionRunningWithCategoryAndLevel);

            MissionHelper.GetStandingData(character, missionAgent.OwnerAlliance.Eid, out double standing, out int playerLevel);

            //at this location this is the maximum level
            playerLevel = playerLevel.Clamp(0, location.maxMissionLevel);

            //not higher pls
            level = level.Clamp(0, playerLevel);

            var solvableMissions = location.GetSolvableRandomMissionsAtLocation();

            var rndMissionsHere = solvableMissions
                                  .Where(m =>
                                         m.missionCategory == category &&
                                         missionFilter.IsRandomMissionAvailable(m)
                                         ).ToList();

            if (rndMissionsHere.Count == 0)
            {
                character.CreateErrorMessage(Commands.MissionStart, ErrorCodes.NoMissionAvailableWithConditions)
                .SetExtraInfo(d => d[k.message] = "no mission was found")
                .Send();

                return(null);
            }

            var mission = rndMissionsHere.RandomElement();

            mission.ThrowIfNull(ErrorCodes.WTFErrorMedicalAttentionSuggested);

            var resolveInfo = _missionDataCache.GetAllResolveInfos.FirstOrDefault(ri => ri.missionId == mission.id && ri.locationId == location.id);

            resolveInfo.ThrowIfNull(ErrorCodes.ConsistencyError);

            var attempts = resolveInfo.attempts;

            Dictionary <string, object> info = new Dictionary <string, object>();
            var resolved = false;

            while (attempts-- > 0 && !resolved)
            {
                resolved = StartMission(character, spreadInGang, mission, location, level, out info);

                if (!resolved)
                {
                    Logger.Warning("mission resolve attempts left " + attempts + "      " + mission);
                }
            }

            resolved.ThrowIfFalse(ErrorCodes.WTFErrorMedicalAttentionSuggested);

            return(info);
        }
Example #22
0
        public ActionResult Submit([Bind(Include = "CrypticId,Name,Description,Length,Faction,MinimumLevel,Spotlit,Published,Tags,Images,Videos")] SubmitMissionViewModel missionViewModel, string submitButton)
        {
            if (ModelState.IsValid)
            {
                //check if cryptic id is already used
                if (db.Missions.Any(m => m.CrypticId.Equals(missionViewModel.CrypticId)))
                {
                    ModelState.AddModelError("DuplicateCrypticID", "Cryptic ID already exists.");

                    List <SelectListItem> publishedSelectItems = MissionHelper.GetYesNoSelectList();
                    ViewBag.AvailableTags          = db.MissionTagTypes.Select(t => t.TagName).ToList();
                    ViewBag.PublishedSelectList    = new SelectList(publishedSelectItems, "Value", "Text");
                    ViewBag.MinimumLevelSelectList = new SelectList(MissionHelper.GetMinimumLevelSelectList(), "Value", "Text");
                    return(View(missionViewModel));
                }

                ApplicationUser user    = db.Users.FirstOrDefault(u => u.UserName.Equals(User.Identity.Name));
                Mission         mission = new Mission();

                #region Copy Info

                mission.CrypticId    = missionViewModel.CrypticId.ToUpper();
                mission.Description  = missionViewModel.Description;
                mission.Faction      = missionViewModel.Faction;
                mission.Length       = missionViewModel.Length;
                mission.MinimumLevel = missionViewModel.MinimumLevel;
                mission.Name         = missionViewModel.Name;
                mission.Published    = missionViewModel.Published;
                mission.Spotlit      = missionViewModel.Spotlit;

                #endregion

                if (missionViewModel.Tags != null && missionViewModel.Tags.Count > 0)
                {
                    mission.Tags = db.MissionTagTypes.Where(t => missionViewModel.Tags.Contains(t.TagName)).ToList();
                }
                else
                {
                    mission.Tags = new List <MissionTagType>();
                }
                mission.MissionLink     = MissionHelper.GetMissionLink(db, mission);
                mission.Author          = user;
                mission.DateAdded       = DateTime.Now;
                mission.DateLastUpdated = DateTime.Now;
                if (submitButton.Equals("Save and Publish"))
                {
                    if (user.AutoApproval)
                    {
                        mission.Status = Models.FoundryMissionModels.Enums.MissionStatus.Published;
                    }
                    else
                    {
                        mission.Status = Models.FoundryMissionModels.Enums.MissionStatus.InReview;
                        //mission.Status = Models.FoundryMissionModels.Enums.MissionStatus.Published;
                        try
                        {
                            EmailHelper.ReportMissionNeedsApproval(mission);
                        }
                        catch
                        {
                        }
                    }
                }
                else //if (submitButton.Equals("Save"))
                {
                    //don't do anything, leave it at the current status (default = unpublished)
                    //mission.Status = Models.FoundryMissionModels.Enums.MissionStatus.Unpublished;
                }
                mission.Spotlit = false;

                db.Missions.Add(mission);
                db.SaveChanges();

                //remove null if there is a null
                if (missionViewModel.Images.Count > 0)
                {
                    if (missionViewModel.Images[missionViewModel.Images.Count - 1] == null)
                    {
                        missionViewModel.Images.RemoveAt(missionViewModel.Images.Count - 1);
                    }
                }

                if (missionViewModel.Images.Count > 0)
                {
                    try
                    {
                        var images = MissionImagesHelper.ValidateImages(missionViewModel.Images);
                        MissionImagesHelper.AddImages(images, mission);
                        db.SaveChanges();
                    }
                    catch
                    {
                        TempData["Message"] = "An error occured while adding images.";
                    }
                }

                //remove null if there is a null
                if (missionViewModel.Videos.Count > 0)
                {
                    if (missionViewModel.Videos[missionViewModel.Videos.Count - 1] == null)
                    {
                        missionViewModel.Videos.RemoveAt(missionViewModel.Videos.Count - 1);
                    }
                }

                if (missionViewModel.Videos.Count > 0)
                {
                    try
                    {
                        var videos = MissionVideosHelper.GetVideoIds(missionViewModel.Videos);
                        MissionVideosHelper.AddVideos(videos, mission);
                        db.SaveChanges();
                    }
                    catch
                    {
                        if (!string.IsNullOrEmpty(TempData[""] as string))
                        {
                            TempData["Message"] = "Errors when adding images and videos.";
                        }
                        else
                        {
                            TempData["Message"] = "An error occured while adding videos.";
                        }
                    }
                }

                return(RedirectToAction("details", new { link = mission.MissionLink }));
            }

            return(View(missionViewModel));
        }
Example #23
0
        private string UploadExportFile(HttpPostedFileBase exportFile)
        {
            //first read the file
            var     b           = new BinaryReader(exportFile.InputStream);
            var     binData     = b.ReadBytes(exportFile.ContentLength);
            var     text        = System.Text.Encoding.UTF8.GetString(binData);
            var     missionlink = "";
            Mission mission     = null;

            //Get the mission object
            try
            {
                mission = MissionExportHelper.ParseExportToMission(db, text);
            }
            catch
            {
                throw new Exception("Error parsing upload file.  Please contact us at [email protected] or @STOMissions on twitter so we can determine what is wrong.");
            }

            //now that we have the mission we need to first check if it exists or not.
            var samemissions = db.Missions.Where(m => m.Name.Equals(mission.Name)).ToList();

            if (samemissions.Count > 0)
            {
                foreach (var samemission in samemissions)
                {
                    //We check with name check.then author check
                    //if the author is null we cannot add it as we can't make sure it is the same
                    if (samemission.Author == null)
                    {
                        throw new Exception("Another mission with the same name and ambiguous author already exists.  Please add your mission manually.  If you believe that mission belongs to you please contact us at [email protected] or @STOMissions on twitter so we can link it to your account.");
                    }

                    //now check author
                    if (mission.AuthorUserId.ToUpper().Equals(samemission.Author.CrypticTag.ToUpper()))
                    {
                        missionlink = samemission.MissionLink;
                        //if it is the same this is the exact same mission now make sure that the person uploading it is the author, or an admit
                        if (User.Identity.Name.Equals(samemission.Author.UserName) || User.IsInRole(ConstantsHelper.AdminRole))
                        {
                            samemission.DateLastUpdated = DateTime.Now;
                            db.SaveChanges();
                            break;
                        }
                        else
                        {
                            //if it is not the same user name they are not allowed to update it.
                            //just go to the mission
                            return(missionlink);
                        }
                    }
                }
            }

            //if mission link is still empty means we haven't found the same mission so lets add it
            if (string.IsNullOrWhiteSpace(missionlink))
            {
                missionlink             = MissionHelper.GetMissionLink(db, mission);
                mission.MissionLink     = missionlink;
                mission.DateLastUpdated = DateTime.Now;
                mission.DateAdded       = DateTime.Now;
                mission.CrypticId       = MissionExportHelper.GenerateRandomID();
                mission.Length          = MissionLength.FifteenToThirtyMinutes;
                mission.Published       = false;
                mission.Spotlit         = false;
                mission.Status          = MissionStatus.Unpublished;
                db.Missions.Add(mission);
                db.SaveChanges();
            }

            //get the mission's id
            var id = db.Missions.Where(m => m.MissionLink.Equals(missionlink)).FirstOrDefault().Id;

            //set the export file
            MissionExportHelper.SaveExportFile(text, id);

            return(missionlink);
        }
Example #24
0
        // GET: Missions/duritanium-man
        public ActionResult Details(string link)
        {
            if (string.IsNullOrEmpty(link))
            {
                return(RedirectToAction("index", "home"));
            }
            Mission mission = db.Missions.Where(m => m.MissionLink.Equals(link)).FirstOrDefault();

            if (mission == null)
            {
                return(HttpNotFound());
            }

            //if it is in review or unpubilshed only an aadministrator or the author can view it
            if (mission.Status == Models.FoundryMissionModels.Enums.MissionStatus.InReview ||
                mission.Status == Models.FoundryMissionModels.Enums.MissionStatus.Unpublished)
            {
                if ((mission.Author != null && !mission.Author.UserName.Equals(User.Identity.Name)) &&
                    (!User.IsInRole("Administrator")))
                {
                    return(HttpNotFound());
                }
            }

            //if it is removed only an admnistrator can view it
            if (mission.Status == Models.FoundryMissionModels.Enums.MissionStatus.Removed)
            {
                if (!User.IsInRole("Administrator"))
                {
                    return(HttpNotFound());
                }
            }

            ViewMissionViewModel viewMission = new ViewMissionViewModel()
            {
                Id                   = mission.Id,
                Author               = mission.Author,
                AuthorCrypticTag     = mission.AuthorUserId,
                CrypticId            = mission.CrypticId.ToUpper(),
                Name                 = mission.Name,
                Description          = mission.Description,
                Faction              = mission.Faction,
                FactionImageUrl      = MissionHelper.GetBigFactionImageUrl(mission.Faction),
                MinimumLevel         = mission.MinimumLevel,
                MinimumLevelImageUrl = MissionHelper.GetBigLevelImageUrl(mission.MinimumLevel, mission.Faction),
                DateLastUpdated      = mission.DateLastUpdated,
                Length               = mission.Length,
                Tags                 = mission.Tags.OrderBy(t => t.TagName).ToList(),
                Videos               = mission.Videos.OrderBy(v => v.Order).Select(v => v.YoutubeVideoId).ToList(),
                Status               = mission.Status,
                MissionLink          = mission.MissionLink,
                Images               = mission.Images.OrderBy(i => i.Order).Select(i => i.Filename).ToList(),
                HasExport            = MissionExportHelper.HasExport(mission.Id),
            };

            //It's okay to show the mission now

            if (TempData["Message"] != null)
            {
                ViewBag.Message = TempData["Message"];
            }

            return(View(viewMission));
        }
Example #25
0
        public ActionResult SearchResults(string author, string title, string faction, int?minimumlevel, List <string> tags, int?page)
        {
            //if everything in the model is null also go back
            if (string.IsNullOrWhiteSpace(author) &&
                (faction == null) &&
                (minimumlevel == null) &&
                (tags == null || tags.Count == 0) &&
                string.IsNullOrWhiteSpace(title))
            {
                RedirectToAction("advanced-search");
            }

            int pageNumber = 1;

            if (page != null)
            {
                pageNumber = (int)page;
            }

            //build the query
            var qry = db.Missions.AsQueryable();

            qry = qry.Where(m => m.Status == MissionStatus.Published);

            if (!string.IsNullOrWhiteSpace(title))
            {
                qry = qry.Where(m => m.Name.ToUpper().Contains(title.ToUpper()));
            }
            if (!string.IsNullOrWhiteSpace(faction))
            {
                qry = qry.Where(m => m.Faction.ToString() == faction);
            }

            if (!string.IsNullOrWhiteSpace(author))
            {
                qry = qry.Where(m => m.Author.CrypticTag.ToUpper().Contains(author.ToUpper()));
            }

            if (minimumlevel != null)
            {
                qry = qry.Where(m => m.MinimumLevel <= minimumlevel);
            }

            List <Mission> missions         = qry.OrderByDescending(m => m.DateLastUpdated).ToList();
            List <Mission> filteredMissions = new List <Mission>();

            //filter on the tags
            if (tags != null && tags.Count > 0)
            {
                List <MissionTagType> selectedTags = db.MissionTagTypes.Where(t => tags.Contains(t.TagName)).ToList();

                foreach (var mission in missions)
                {
                    if (mission.Tags.Intersect(selectedTags).Count() == tags.Count)
                    {
                        filteredMissions.Add(mission);
                    }
                }
            }
            else
            {
                filteredMissions = missions;
            }

            var missionCount = filteredMissions.Count();

            missions = filteredMissions.Skip(ConstantsHelper.MissionsPerPage * (pageNumber - 1)).Take(ConstantsHelper.MissionsPerPage).ToList();
            List <ListMissionViewModel> listmissions = MissionHelper.GetListMissionViewModels(missions);

            #region Paging Info

            var totalPages = (missionCount + ConstantsHelper.MissionsPerPage - 1) / ConstantsHelper.MissionsPerPage;

            var pagesCounter = pageNumber - (ConstantsHelper.PagesToShow / 2);

            if (pagesCounter + ConstantsHelper.PagesToShow > totalPages)
            {
                pagesCounter = totalPages - ConstantsHelper.PagesToShow + 1;
            }

            if (pagesCounter < 1)
            {
                pagesCounter = 1;
            }

            ViewBag.CurrentPage  = pageNumber;
            ViewBag.TotalPages   = totalPages;
            ViewBag.MissionCount = missionCount;
            ViewBag.StartPage    = pagesCounter;

            #endregion

            return(View(listmissions));
        }
Example #26
0
        public ActionResult Edit(string link)
        {
            if (string.IsNullOrEmpty(link))
            {
                return(RedirectToAction("index", "home"));
            }
            Mission mission = db.Missions.Where(m => m.MissionLink.Equals(link)).FirstOrDefault();

            if (mission == null)
            {
                return(HttpNotFound());
            }

            //only people who can edit a mission are the author or an admin
            if (!mission.Author.UserName.Equals(User.Identity.Name) && !User.IsInRole(ConstantsHelper.AdminRole))
            {
                return(HttpNotFound());
            }

            //if the user is not an admin and it is removed it doesn't exist
            if (mission.Status == MissionStatus.Removed && !User.IsInRole(ConstantsHelper.AdminRole))
            {
                return(HttpNotFound());
            }

            var publishedSelectItems = new List <SelectListItem>();

            #region Published Select List
            publishedSelectItems.Add(new SelectListItem()
            {
                Value = "false",
                Text  = "No",
            });
            publishedSelectItems.Add(new SelectListItem()
            {
                Value = "true",
                Text  = "Yes",
            });
            #endregion

            var editModel = new EditMissionViewModel();
            editModel.Id           = mission.Id;
            editModel.CrypticId    = mission.CrypticId;
            editModel.Name         = mission.Name;
            editModel.Description  = mission.Description;
            editModel.Length       = mission.Length;
            editModel.Faction      = mission.Faction;
            editModel.MinimumLevel = mission.MinimumLevel;
            editModel.Spotlit      = mission.Spotlit;
            editModel.Published    = mission.Published;
            editModel.Status       = mission.Status;
            editModel.Author       = mission.Author;
            editModel.AutoApprove  = mission.Author.AutoApproval;
            editModel.Tags         = mission.Tags.Select(t => t.TagName).ToList();
            editModel.OldImages    = mission.Images.OrderBy(i => i.Order).Select(i => i.Filename).ToList();
            editModel.OldVideos    = mission.Videos.OrderBy(v => v.Order).Select(v => v.YoutubeVideoId).ToList();
            mission.MissionLink    = MissionHelper.GetMissionLink(db, mission);

            var unselectedTags = db.MissionTagTypes.Select(t => t.TagName).ToList();
            foreach (var tags in editModel.Tags)
            {
                unselectedTags.Remove(tags);
            }
            ViewBag.AvailableTags          = unselectedTags;
            ViewBag.PublishedSelectList    = new SelectList(publishedSelectItems, "Value", "Text");
            ViewBag.MinimumLevelSelectList = new SelectList(MissionHelper.GetMinimumLevelSelectList(), "Value", "Text");

            return(View(editModel));
        }
Example #27
0
        public ActionResult Search(string q, int?page)
        {
            if (string.IsNullOrEmpty(q))
            {
                return(RedirectToAction("Index", "Home"));
            }

            int pageNumber = 1;

            if (page != null)
            {
                pageNumber = (int)page;
            }


            string upperQuery = q.Trim().ToUpper();

            #region Get Missions
            var missions = db.Missions.Where(m => (m.Author.CrypticTag.ToUpper().Contains(upperQuery) ||
                                                   m.CrypticId.ToUpper().Contains(upperQuery) ||
                                                   m.Description.ToUpper().Contains(upperQuery) ||
                                                   m.Name.ToUpper().Contains(upperQuery)) &&
                                             m.Status == MissionStatus.Published)
                           .OrderByDescending(m => m.DateLastUpdated)
                           .ToList();
            missions = missions.Skip(ConstantsHelper.MissionsPerPage * (pageNumber - 1))
                       .Take(ConstantsHelper.MissionsPerPage).ToList();
            List <ListMissionViewModel> listMissions = MissionHelper.GetListMissionViewModels(missions);
            #endregion

            #region Paging Info

            var missionCount = db.Missions.Where(m => (m.Author.CrypticTag.ToUpper().Contains(upperQuery) ||
                                                       m.CrypticId.ToUpper().Contains(upperQuery) ||
                                                       m.Description.ToUpper().Contains(upperQuery) ||
                                                       m.Name.ToUpper().Contains(upperQuery)) &&
                                                 m.Status == MissionStatus.Published)
                               .Count();

            var totalPages = (missionCount + ConstantsHelper.MissionsPerPage - 1) / ConstantsHelper.MissionsPerPage;

            var pagesCounter = pageNumber - (ConstantsHelper.PagesToShow / 2);
            if (pagesCounter < 1)
            {
                pagesCounter = 1;
            }
            else if (pagesCounter + ConstantsHelper.PagesToShow > totalPages)
            {
                pagesCounter = totalPages - ConstantsHelper.PagesToShow + 1;
            }

            if (pagesCounter == 0)
            {
                pagesCounter = 1;
            }

            ViewBag.Query        = q;
            ViewBag.CurrentPage  = pageNumber;
            ViewBag.TotalPages   = totalPages;
            ViewBag.MissionCount = missionCount;
            ViewBag.StartPage    = pagesCounter; //this is where it starts dispalying clickable page links

            #endregion

            return(View(listMissions));
        }
Example #28
0
        private ActionResult Edit(EditMissionViewModel missionViewModel)
        {
            if (ModelState.IsValid)
            {
                //check if cryptic id is already used
                if (db.Missions.Any(m => m.CrypticId.Equals(missionViewModel.CrypticId) && m.Id != missionViewModel.Id))
                {
                    ModelState.AddModelError("DuplicateCrypticID", "Cryptic ID already exists.");

                    List <SelectListItem> publishedSelectItems = MissionHelper.GetYesNoSelectList();
                    ViewBag.AvailableTags          = db.MissionTagTypes.Select(t => t.TagName).ToList();
                    ViewBag.PublishedSelectList    = new SelectList(publishedSelectItems, "Value", "Text");
                    ViewBag.MinimumLevelSelectList = new SelectList(MissionHelper.GetMinimumLevelSelectList(), "Value", "Text");
                    return(View("edit", missionViewModel));
                }


                var mission = db.Missions.Find(missionViewModel.Id);
                var user    = mission.Author;
                mission.CrypticId       = missionViewModel.CrypticId.ToUpper();
                mission.Name            = missionViewModel.Name;
                mission.Description     = missionViewModel.Description;
                mission.Length          = missionViewModel.Length;
                mission.Faction         = missionViewModel.Faction;
                mission.MinimumLevel    = missionViewModel.MinimumLevel;
                mission.Spotlit         = missionViewModel.Spotlit;
                mission.Status          = missionViewModel.Status;
                mission.DateLastUpdated = DateTime.Now;


                // in case the tags list is null create a blank one
                if (missionViewModel.Tags == null)
                {
                    missionViewModel.Tags = new List <string>();
                }
                //first remove the tags that don't exist anymore
                var currentTags = mission.Tags.ToList();
                foreach (var tag in currentTags)
                {
                    if (!missionViewModel.Tags.Contains(tag.TagName))
                    {
                        mission.Tags.Remove(tag);
                    }
                }
                //now add the tags that don't exist
                foreach (var tag in missionViewModel.Tags)
                {
                    var tagType = db.MissionTagTypes.FirstOrDefault(t => t.TagName.Equals(tag));
                    if (tagType != null)
                    {
                        if (!mission.Tags.Contains(tagType))
                        {
                            mission.Tags.Add(tagType);
                        }
                    }
                }

                db.SaveChanges();

                //now do images
                try
                {
                    var changedImages = false;
                    //set some defaults in case its null
                    #region Defaults
                    if (missionViewModel.OldImages == null)
                    {
                        missionViewModel.OldImages = new List <string>();
                    }
                    if (missionViewModel.Images == null)
                    {
                        missionViewModel.Images = new List <HttpPostedFileBase>();
                    }
                    if (mission.Images == null)
                    {
                        mission.Images = new List <MissionImage>();
                    }
                    #endregion
                    //check for removed images first
                    //if its different then a change was made, need to remove the images
                    if (missionViewModel.OldImages.Count != mission.Images.Count)
                    {
                        MissionImagesHelper.CheckForRemovedImages(db, mission, missionViewModel.OldImages);
                        changedImages = true;
                    }

                    //add new images
                    if (missionViewModel.Images.Count > 0)
                    {
                        var images = MissionImagesHelper.ValidateImages(missionViewModel.Images);
                        MissionImagesHelper.AddImages(images, mission);
                        changedImages = true;
                    }

                    if (changedImages)
                    {
                        db.SaveChanges();
                    }
                }
                catch
                {
                    TempData["Message"] = "An error occured while editing images.";
                }


                //now do videos
                try
                {
                    var changedVideos = false;
                    //set some defaults in case its null
                    #region Defaults
                    if (missionViewModel.OldVideos == null)
                    {
                        missionViewModel.OldVideos = new List <string>();
                    }
                    if (missionViewModel.Videos == null)
                    {
                        missionViewModel.Videos = new List <string>();
                    }
                    if (mission.Videos == null)
                    {
                        mission.Videos = new List <YoutubeVideo>();
                    }
                    #endregion
                    //check for removed videos first
                    //if its different then a change was made, need to remove the videos
                    if (missionViewModel.OldVideos.Count != mission.Videos.Count)
                    {
                        MissionVideosHelper.CheckForRemovedVideos(db, mission, missionViewModel.OldVideos);
                        changedVideos = true;
                    }

                    //add new videos
                    if (missionViewModel.Videos.Count > 0)
                    {
                        var videos = MissionVideosHelper.GetVideoIds(missionViewModel.Videos);
                        MissionVideosHelper.AddVideos(videos, mission);
                        changedVideos = true;
                    }

                    if (changedVideos)
                    {
                        db.SaveChanges();
                    }
                }
                catch
                {
                    TempData["Message"] = "An error occured while editing images.";
                }

                return(RedirectToAction("details", new { link = mission.MissionLink }));
            }
            return(View("edit", missionViewModel));
        }