public static Player ProcessQuestStatePreactions(Player player, QuestState questState) { IPlayerRepository playerRepo = new EFPlayerRepository(); var dbPlayer = playerRepo.Players.FirstOrDefault(p => p.Id == player.Id); foreach (var p in questState.QuestStatePreactions.ToList()) { // try to parse the value from string into number, if it fails, default to 0 decimal valueAsNumber = 0; if (!Decimal.TryParse(p.ActionValue, out valueAsNumber)) { valueAsNumber = 0; } // change form if (p.ActionType == (int)QuestStatics.PreactionType.Form) { DomainRegistry.Repository.Execute(new ChangeForm { PlayerId = dbPlayer.Id, FormSourceId = System.Convert.ToInt32(p.ActionValue) }); } // move player else if (p.ActionType == (int)QuestStatics.PreactionType.MoveToLocation) { var loc = LocationsStatics.LocationList.GetLocation.FirstOrDefault(l => l.dbName == p.ActionValue); if (loc != null) { dbPlayer.dbLocationName = p.ActionValue; } } // change willpower else if (p.ActionType == (int)QuestStatics.PreactionType.Willpower) { if (p.AddOrSet == (int)QuestStatics.AddOrSet.Set) { dbPlayer.Health = valueAsNumber; } else if (p.AddOrSet == (int)QuestStatics.AddOrSet.Add_Number) { dbPlayer.Health += valueAsNumber; } } // change mana else if (p.ActionType == (int)QuestStatics.PreactionType.Mana) { if (p.AddOrSet == (int)QuestStatics.AddOrSet.Set) { dbPlayer.Mana = valueAsNumber; } else if (p.AddOrSet == (int)QuestStatics.AddOrSet.Add_Number) { dbPlayer.Mana += valueAsNumber; } } // update or set a variable else if (p.ActionType == (int)QuestStatics.PreactionType.Variable) { if (p.AddOrSet == (int)QuestStatics.AddOrSet.Set) { QuestProcedures.SetQuestPlayerVariable(p.QuestId, dbPlayer.Id, p.VariableName, p.ActionValue); } else if (p.AddOrSet == (int)QuestStatics.AddOrSet.Add_Number) { QuestProcedures.EditQuestPlayerVariable(p.QuestId, dbPlayer.Id, p.VariableName, p.ActionValue); } } } dbPlayer.ReadjustMaxes(ItemProcedures.GetPlayerBuffs(dbPlayer)); playerRepo.SavePlayer(dbPlayer); return(dbPlayer); }
public static string PlayerEndQuest(Player player, int endType) { var message = ""; IPlayerRepository playerRepo = new EFPlayerRepository(); var dbPlayer = playerRepo.Players.FirstOrDefault(p => p.Id == player.Id); dbPlayer.InQuest = 0; dbPlayer.InQuestState = 0; playerRepo.SavePlayer(dbPlayer); IQuestRepository questRepo = new EFQuestRepository(); var questPlayerStatus = questRepo.QuestPlayerStatuses.FirstOrDefault(q => q.PlayerId == player.Id && q.QuestId == player.InQuest); if (questPlayerStatus == null) { questPlayerStatus = new QuestPlayerStatus { PlayerId = player.Id, QuestId = player.InQuest, }; } questPlayerStatus.LastEndedTurn = PvPWorldStatProcedures.GetWorldTurnNumber(); questPlayerStatus.Outcome = endType; questRepo.SaveQuestPlayerStatus(questPlayerStatus); // assing completion bonuses if (endType == (int)QuestStatics.QuestOutcomes.Completed) { var questState = GetQuestState(player.InQuestState); decimal xpGain = 0; foreach (var q in questState.QuestEnds) { // experience gain if (q.RewardType == (int)QuestStatics.RewardType.Experience) { xpGain += Int32.Parse(q.RewardAmount); } // item gain else if (q.RewardType == (int)QuestStatics.RewardType.Item) { var item = ItemStatics.GetStaticItem(System.Convert.ToInt32(q.RewardAmount)); ItemProcedures.GiveNewItemToPlayer(player, item); message += " <br>You received a <b>" + item.FriendlyName + "</b>."; } // effect gain else if (q.RewardType == (int)QuestStatics.RewardType.Effect) { var effect = EffectStatics.GetDbStaticEffect(System.Convert.ToInt32(q.RewardAmount)); EffectProcedures.GivePerkToPlayer(effect.Id, player.Id); message += "<br>You received the effect <b>" + effect.FriendlyName + "</b>."; } // spell gain else if (q.RewardType == (int)QuestStatics.RewardType.Spell) { var spell = SkillStatics.GetStaticSkill(System.Convert.ToInt32(q.RewardAmount)); SkillProcedures.GiveSkillToPlayer(player.Id, spell.Id); message += "<br>You learned the spell <b>" + spell.FriendlyName + "</b>."; } } if (xpGain > 0) { message += "<br>You earned <b>" + xpGain + "</b> XP."; } PlayerProcedures.GiveXP(player, xpGain); } // delete all of the player's quest variables var vars = QuestProcedures.GetAllQuestPlayerVariablesFromQuest(player.InQuest, player.Id).ToList(); foreach (var v in vars) { questRepo.DeleteQuestPlayerVariable(v.Id); } return(message); }