コード例 #1
0
        public static int SaveQuestConnection(QuestConnection input)
        {
            IQuestRepository repo = new EFQuestRepository();

            var questConnection = repo.QuestConnections.FirstOrDefault(q => q.Id == input.Id);

            if (questConnection == null)
            {
                questConnection = new QuestConnection();
            }

            questConnection.ActionName               = input.ActionName;
            questConnection.ConnectionName           = input.ConnectionName;
            questConnection.HideIfRequirementsNotMet = input.HideIfRequirementsNotMet;
            questConnection.QuestId            = input.QuestId;
            questConnection.QuestStateFromId   = input.QuestStateFromId;
            questConnection.QuestStateToId     = input.QuestStateToId;
            questConnection.QuestStateFailToId = input.QuestStateFailToId;
            questConnection.RankInList         = input.RankInList;
            questConnection.Notes = input.Notes;
            questConnection.Text  = input.Text;

            // always set this to something, even if it's just empty string
            if (questConnection.ConnectionName == null)
            {
                questConnection.ConnectionName = "-- QUEST CONNECTION NOT NAMED --";
            }

            repo.SaveQuestConnection(questConnection);

            return(questConnection.Id);
        }
コード例 #2
0
        public void SaveQuestConnection(QuestConnection QuestConnection)
        {
            if (QuestConnection.Id == 0)
            {
                context.QuestConnections.Add(QuestConnection);
            }
            else
            {
                var editMe = context.QuestConnections.Find(QuestConnection.Id);
                if (editMe != null)
                {
                    // dbEntry.Name = QuestConnection.Name;
                    // dbEntry.Message = QuestConnection.Message;
                    // dbEntry.TimeStamp = QuestConnection.TimeStamp;
                }
            }

            try
            {
                context.SaveChanges();
            }
            catch (OptimisticConcurrencyException)
            {
                //context.(RefreshMode.ClientWins, dbModels.Models.QuestConnection);
                //context.SaveChanges();
            }

            // context.SaveChanges();
        }
コード例 #3
0
        public static MvcHtmlString PrintDiceIcon(QuestConnection connection)
        {
            var output = "";

            if (connection.RequiresRolls())
            {
                output = $"<img src='{PvPStatics.ImageURL}Icons/dice.png' style='width: 24px; height: 24px; '>";
            }

            return(new MvcHtmlString(output));
        }
コード例 #4
0
        public virtual ActionResult QuestConnection(int Id, int QuestId, int FromQuestId, int ToQuestId)
        {
            IQuestRepository repo = new EFQuestRepository();

            var questConnection = repo.QuestConnections.FirstOrDefault(q => q.Id == Id);

            if (questConnection == null)
            {
                questConnection = new QuestConnection
                {
                    QuestId = QuestId,
                    QuestConnectionRequirements = new List <QuestConnectionRequirement>(),
                    QuestStateFromId            = FromQuestId,
                    QuestStateToId     = ToQuestId,
                    QuestStateFailToId = 0,
                };
            }

            var output = new QuestConnectionFormViewModel
            {
                QuestConnection = questConnection,
            };

            if (FromQuestId > 0)
            {
                output.FromQuestState = QuestProcedures.GetQuestState(FromQuestId);
            }
            if (ToQuestId > 0)
            {
                output.ToQuestState = QuestProcedures.GetQuestState(ToQuestId);
            }

            if (questConnection.QuestStateFailToId > 0)
            {
                output.FailToQuestState = QuestProcedures.GetQuestState(questConnection.QuestStateFailToId);
            }

            return(PartialView(MVC.QuestWriter.Views.QuestConnection, output));
        }
コード例 #5
0
        /// <summary>
        /// Returns true if a player passes all rolls for a quest connection.
        /// </summary>
        /// <param name="connection"></param>
        /// <param name="player">Player attempting to go down this connection</param>
        /// <param name="buffs">Player's statistics from effects and equipment</param>
        /// <param name="variables">All quest variables created by this player previously in the quest</param>
        /// <returns></returns>
        public static bool RollForQuestConnection(QuestConnection connection, Player player, BuffBox buffs, IEnumerable <QuestPlayerVariable> variables)
        {
            foreach (var q in connection.QuestConnectionRequirements)
            {
                if (!q.IsRandomRoll)
                {
                    continue;
                }

                var playerValue = GetValueFromType(q, buffs);

                var chance = q.RollModifier * playerValue + q.RollOffset;

                var r    = new Random();
                var roll = r.NextDouble() * 100;

                if (roll > chance)
                {
                    return(false);
                }
            }

            return(true);
        }
コード例 #6
0
        public static int SaveQuestConnectionRequirement(QuestConnectionRequirement input, QuestConnection connection)
        {
            IQuestRepository repo = new EFQuestRepository();

            var QuestConnectionRequirement = repo.QuestConnectionRequirements.FirstOrDefault(q => q.Id == input.Id);

            // QuestState dbState = repo.QuestStates.FirstOrDefault(s => s.Id == state.Id);

            if (QuestConnectionRequirement == null)
            {
                QuestConnectionRequirement = new QuestConnectionRequirement
                {
                    QuestId = connection.QuestId,
                };
            }
            QuestConnectionRequirement.Id               = input.Id;
            QuestConnectionRequirement.Operator         = input.Operator;
            QuestConnectionRequirement.RequirementType  = input.RequirementType;
            QuestConnectionRequirement.RequirementValue = input.RequirementValue;
            if (input.VariabledbName != null)
            {
                QuestConnectionRequirement.VariabledbName = input.VariabledbName.ToUpper();
            }
            QuestConnectionRequirement.QuestConnectionId = repo.QuestConnections.FirstOrDefault(q => q.Id == connection.Id);
            QuestConnectionRequirement.QuestConnectionRequirementName = input.QuestConnectionRequirementName;
            QuestConnectionRequirement.RollModifier = input.RollModifier;
            QuestConnectionRequirement.RollOffset   = input.RollOffset;
            QuestConnectionRequirement.IsRandomRoll = input.IsRandomRoll;

            repo.SaveQuestConnectionRequirement(QuestConnectionRequirement);

            return(QuestConnectionRequirement.Id);
        }
コード例 #7
0
 /// <summary>
 /// Constructor method
 /// </summary>
 public QuestConnectionBuilder()
 {
     this._questConnection = new QuestConnection();
     this._questConnection.QuestConnectionRequirements = new List <QuestConnectionRequirement>();
 }
コード例 #8
0
        public static string GetRequirementsAsString(QuestConnection q, BuffBox buffs)
        {
            var output = "";

            if (!q.QuestConnectionRequirements.Any())
            {
                return(output);
            }

            var len = q.QuestConnectionRequirements.Count();
            var i   = 0;

            output += "[";

            foreach (var qs in q.QuestConnectionRequirements.ToList())
            {
                // don't print anything for variables or gender requirements
                if (qs.RequirementType == (int)QuestStatics.RequirementType.Variable ||
                    qs.RequirementType == (int)QuestStatics.RequirementType.Gender ||
                    qs.RequirementType == (int)QuestStatics.RequirementType.Form)
                {
                    continue;
                }

                // random roll, calculate % chance and display that
                if (qs.IsRandomRoll)
                {
                    var playerValue = GetValueFromType(qs, buffs);

                    var chance = Math.Round(qs.RollModifier * playerValue + qs.RollOffset, 1);

                    if (chance < 0)
                    {
                        chance = 0;
                    }
                    else if (chance > 100)
                    {
                        chance = 100;
                    }

                    output += qs.PrintRequirementStatAsString() + " - " + chance + "%";
                }

                // strict requirement
                else
                {
                    output += qs.PrintOperatorAsString() + " " + qs.RequirementValue + " " + qs.PrintRequirementStatAsString();
                }

                if (i < len - 1)
                {
                    output += ", ";
                }

                i++;
            }

            output += "]";

            // no requirements were found, so clear up
            if (output == "[]")
            {
                output = "";
            }


            return(output);
        }
コード例 #9
0
        /// <summary>
        /// Returns true if a connection is available to the player to take.
        /// </summary>
        /// <param name="questConnection"></param>
        /// <param name="player">Player attempting to go down this connection</param>
        /// <param name="buffs">Player's statistics from effects and equipment</param>
        /// <param name="variables">All quest variables created by this player previously in the quest</param>
        /// <returns></returns>
        public static bool QuestConnectionIsAvailable(QuestConnection questConnection, Player player, BuffBox buffs, IEnumerable <QuestPlayerVariable> variables)
        {
            var isAvailable = true;

            if (questConnection.QuestStateFromId < 0 || questConnection.QuestStateToId < 0)
            {
                return(false);
            }

            foreach (var q in questConnection.QuestConnectionRequirements)
            {
                // skip all roll-based requirements; a player can always attempt a roll
                if (q.IsRandomRoll)
                {
                    continue;
                }

                // evaluate variable
                if (q.RequirementType == (int)QuestStatics.RequirementType.Variable)
                {
                    var var = variables.FirstOrDefault(v => v.VariableName == q.VariabledbName);

                    // variable has never been set, so fail
                    if (var == null)
                    {
                        return(false);
                    }

                    isAvailable = ExpressionIsTrue(float.Parse(var.VariableValue), q);

                    if (!isAvailable)
                    {
                        return(false);
                    }
                    else
                    {
                        continue;
                    }
                }

                else if (q.RequirementType == (int)QuestStatics.RequirementType.Gender)
                {
                    if (q.RequirementValue == PvPStatics.GenderMale && player.Gender != PvPStatics.GenderMale)
                    {
                        return(false);
                    }
                    else if (q.RequirementValue == PvPStatics.GenderFemale && player.Gender != PvPStatics.GenderFemale)
                    {
                        return(false);
                    }

                    else
                    {
                        continue;
                    }
                }

                // evaluate player buff/ability
                var playerValue = GetValueFromType(q, buffs);
                isAvailable = ExpressionIsTrue(playerValue, q);
                if (!isAvailable)
                {
                    return(false);
                }
            }

            return(true);
        }