public static void AddStat(string membershipId, string type, float amount, float?cap = null) { // don't do anything if the achievement is marked as inactive or blank membershipId if (!StatsProcedures.StatTypesMap[type].Active || membershipId.IsNullOrEmpty()) { return; } // don't keep stats for an AI characters if (PlayerProcedures.GetPlayerFromMembership(membershipId).BotId == AIStatics.ActivePlayerBotId) { IAchievementRepository repo = new EFAchievementRepository(); var x = repo.Achievements.FirstOrDefault(a => a.OwnerMembershipId == membershipId && a.AchievementType == type); if (x == null) { x = new Achievement { OwnerMembershipId = membershipId, AchievementType = type, Amount = cap.HasValue ? Math.Min(amount, cap.Value) : amount, Timestamp = DateTime.UtcNow, }; } else { var newAmount = x.Amount + amount; if (cap.HasValue) { newAmount = Math.Min(newAmount, cap.Value); } if (newAmount != x.Amount) { x.Amount = newAmount; x.Timestamp = DateTime.UtcNow; } } repo.SaveAchievement(x); } }
public virtual ActionResult SetFriendNicknameSend(SetFriendNicknameViewModel input) { var myMembershipId = User.Identity.GetUserId(); if (input.Nickname == null) { input.Nickname = ""; } input.Nickname = input.Nickname.Trim(); // asset the nickname falls within an appropriate range if (input.Nickname.Length == 0) { input.Nickname = "[UNASSIGNED]"; } else if (input.Nickname.Length > PvPStatics.FriendNicknameMaxLength) { TempData["Error"] = $"Friend nicknames must be {PvPStatics.FriendNicknameMaxLength} characters or less."; return(RedirectToAction(MVC.PvP.MyFriends())); } var me = PlayerProcedures.GetPlayerFromMembership(myMembershipId); var friend = FriendProcedures.GetFriend(input.FriendshipId); if (friend.OwnerMembershipId != me.MembershipId && friend.FriendMembershipId != me.MembershipId) { TempData["Error"] = "This player is not a friend with you."; return(RedirectToAction(MVC.PvP.Play())); } // set the nickname based on whether the current player is the owner or the friend if (friend.OwnerMembershipId == me.MembershipId) { TempData["Result"] = FriendProcedures.OwnerSetNicknameOfFriend(friend.Id, input.Nickname); } else if (friend.FriendMembershipId == me.MembershipId) { TempData["Result"] = FriendProcedures.FriendSetNicknameOfOwner(friend.Id, input.Nickname); } return(RedirectToAction(MVC.PvP.MyFriends())); }
public static IEnumerable <BountyInfo> OutstandingBounties() { var bountyStaticEffectIds = MAPPINGS.Select(se => se.EffectSourceId); IEffectRepository effectRepo = new EFEffectRepository(); var effects = effectRepo.Effects.Where(e => bountyStaticEffectIds.Contains(e.EffectSourceId)); var results = new List <BountyInfo>(); foreach (var effect in effects) { var entry = BountyDetails(PlayerProcedures.GetPlayer(effect.OwnerId), effect.EffectSourceId); if (entry != null) { results.Add(entry); } } return(results); }
public static IEnumerable <MindControlViewModel> GetAllMindControlVMsWithPlayer(Player player) { IMindControlRepository mcRepo = new EFMindControlRepository(); var mcs = mcRepo.MindControls.Where(m => m.MasterId == player.Id || m.VictimId == player.Id).ToList(); var output = new List <MindControlViewModel>(); foreach (var mc in mcs) { var addme = new MindControlViewModel { MindControl = mc, Victim = PlayerProcedures.GetPlayerFormViewModel(mc.VictimId), Master = PlayerProcedures.GetPlayerFormViewModel(mc.MasterId), TypeFriendlyName = GetMCFriendlyName(mc.FormSourceId), }; output.Add(addme); } return(output); }
public virtual ActionResult SubmitCaptcha() { var myMembershipId = User.Identity.GetUserId(); var me = PlayerProcedures.GetPlayerFromMembership(myMembershipId); if (FeatureContext.IsEnabled <UseCaptcha>() && DomainRegistry.Repository.FindSingle(new UserCaptchaIsExpired { UserId = me.MembershipId })) { var recaptchaHelper = this.GetRecaptchaVerificationHelper(); if (String.IsNullOrEmpty(recaptchaHelper.Response)) { TempData["Error"] = "You must correctly answer the captcha in order to do this."; return(RedirectToAction(MVC.PvP.Play())); } var recaptchaResult = recaptchaHelper.VerifyRecaptchaResponse(); if (recaptchaResult != RecaptchaVerificationResult.Success) { DomainRegistry.Repository.Execute(new UpdateCaptchaEntry { UserId = me.MembershipId, AddFailAttempt = true, AddPassAttempt = false }); TempData["Error"] = "Captcha incorrect. Please try again."; return(RedirectToAction(MVC.PvP.Play())); } else if (recaptchaResult == RecaptchaVerificationResult.Success) { DomainRegistry.Repository.Execute(new UpdateCaptchaEntry { UserId = me.MembershipId, AddFailAttempt = false, AddPassAttempt = true }); } } TempData["Result"] = "Captcha successfully submitted! You will not be prompted to do this again for a while."; return(RedirectToAction(MVC.PvP.Play())); }
public virtual ActionResult MyInventory() { var myMembershipId = User.Identity.GetUserId(); var me = PlayerProcedures.GetPlayerFromMembership(myMembershipId); if (me.MembershipId == myMembershipId) { ViewBag.BelongsToPlayer = "block"; } else { ViewBag.BelongsToPlayer = "none"; } var output = new InventoryBonusesViewModel { Items = DomainRegistry.Repository.Find(new GetItemsOwnedByPlayer { OwnerId = me.Id }).Where(i => i.EmbeddedOnItem == null), Bonuses = ItemProcedures.GetPlayerBuffs(me), Health = me.Health, MaxHealth = me.MaxHealth, Mana = me.Mana, MaxMana = me.MaxMana, CurrentCarryCount = DomainRegistry.Repository.FindSingle(new GetCurrentCarryWeight { PlayerId = me.Id }), MaxInventorySize = ItemProcedures.GetInventoryMaxSize(me) }; ViewBag.ErrorMessage = TempData["Error"]; ViewBag.SubErrorMessage = TempData["SubError"]; ViewBag.Result = TempData["Result"]; ViewBag.ShowDetailLinks = true; ViewBag.ItemsUsedThisTurn = me.ItemsUsedThisTurn; return(View(MVC.PvP.Views.Inventory, output)); }
public virtual ActionResult ReadConversation(int messageId, bool reversed = false) { var myMembershipId = User.Identity.GetUserId(); var me = PlayerProcedures.GetPlayerFromMembership(myMembershipId); if (!DomainRegistry.Repository.FindSingle(new PlayerOwnsMessage { MessageId = messageId, OwnerId = me.Id })) { TempData["Error"] = "You can't read this conversation."; TempData["SubError"] = "It wasn't sent to you."; return(RedirectToAction(MVC.Messages.Index())); } var message = DomainRegistry.Repository.FindSingle(new GetMessage { MessageId = messageId, OwnerId = me.Id }); IEnumerable <MessageDetail> messages; try { messages = DomainRegistry.Repository.Find(new GetMessagesInConversation { conversationId = message.ConversationId }); if (reversed) { messages = messages.Reverse(); } return(PartialView(MVC.Messages.Views.partial.Conversation, messages)); } catch { TempData["Error"] = "No conversation found"; return(RedirectToAction(MVC.Messages.Index())); } }
public virtual ActionResult AdvanceTurn() { var myMembershipId = User.Identity.GetUserId(); var me = PlayerProcedures.GetPlayerFromMembership(myMembershipId); if (me.InDuel <= 0) { TempData["Error"] = "You are not in a duel."; return(RedirectToAction(MVC.PvP.Play())); } var duel = DuelProcedures.GetDuel(me.InDuel); var combatants = DuelProcedures.GetPlayerViewModelsInDuel(duel.Id); if (!PvPStatics.ChaosMode) { foreach (var p in combatants) { if (p.Player.TimesAttackingThisUpdate < PvPStatics.MaxAttacksPerUpdate) { TempData["Error"] = "Cannot advance this turn." + p.Player.GetFullName() + " has not used up all of their attacks."; return(RedirectToAction(MVC.PvP.Play())); } } } foreach (var p in combatants) { PlayerProcedures.SetAttackCount(p.Player.ToDbPlayer(), 0); PlayerProcedures.SetCleanseMeditateCount(p.Player.ToDbPlayer(), 0); var message = "<b>" + me.GetFullName() + " has advanced the duel turn. Attacks and cleanse/meditate limits have been reset. Attacks may resume in 20 seconds.</b>"; PlayerLogProcedures.AddPlayerLog(p.Player.Id, message, true); NoticeService.PushNotice(p.Player.Id, message, NoticeService.PushType__PlayerLog); } DuelProcedures.SetLastDuelAttackTimestamp(duel.Id); TempData["Result"] = "Duel turn advanced. All combatants have had their attack and cleanse/meditate limits reset. Attacks may resume in 20 seconds."; return(RedirectToAction(MVC.PvP.Play())); }
public override Task OnDisconnected() { var connectionId = Context.ConnectionId; var me = PlayerProcedures.GetPlayerFormViewModel_FromMembership(Context.User.Identity.GetUserId()).Player; var room = _chatPersistenceService.GetRoom(me.MembershipId, connectionId); _chatPersistenceService.TrackDisconnect(me.MembershipId, connectionId); if (string.IsNullOrWhiteSpace(room) || _chatPersistenceService.GetRoomsPlayerIsIn(me.MembershipId).Contains(room)) { return(base.OnDisconnected()); } /* Disabling this notice until a better fix can be implemented. * SendNoticeToRoom(room, me, " has left the room."); */ UpdateUserList(room, false); return(base.OnDisconnected()); }
public virtual ActionResult MarkAsAbusivePreview(int id) { var me = PlayerProcedures.GetPlayerFromMembership(User.Identity.GetUserId()); MessageDetail message; try { message = DomainRegistry.Repository.FindSingle(new GetMessage { MessageId = id, OwnerId = me.Id }); } catch (DomainException) { TempData["Error"] = "You can't read this message."; TempData["SubError"] = "It wasn't sent to you."; return(RedirectToAction(MVC.Messages.Index())); } return(View(MVC.Messages.Views.MarkAsAbusivePreview, message)); }
public virtual ActionResult UnembedRunes() { var me = PlayerProcedures.GetPlayerFromMembership(User.Identity.GetUserId()); try { TempData["Result"] = DomainRegistry.Repository.Execute(new UnembedAllRunes { PlayerId = me.Id }); IPlayerRepository playerRepo = new EFPlayerRepository(); var newMe = playerRepo.Players.FirstOrDefault(p => p.Id == me.Id); newMe.ReadjustMaxes(ItemProcedures.GetPlayerBuffs(newMe)); playerRepo.SavePlayer(newMe); } catch (DomainException e) { TempData["Error"] = e.Message; } return(RedirectToAction(MVC.Item.MyInventory())); }
public static IEnumerable <PlayerAchievementViewModel> GetLeaderPlayersInStat(string type) { IAchievementRepository repo = new EFAchievementRepository(); var x = repo.Achievements.Where(a => a.AchievementType == type).OrderByDescending(s => s.Amount).ThenBy(a => a.Timestamp).Take(10).ToList(); var output = new List <PlayerAchievementViewModel>(); foreach (var a in x) { if (a != null) { var addMe = new PlayerAchievementViewModel { Player = PlayerProcedures.GetPlayerFormViewModel_FromMembership(a.OwnerMembershipId), Achivement = a, }; output.Add(addMe); } } return(output); }
public void ReadjustMaxes(BuffBox buffs) { // readjust this health/mana by grabbing base amount plus effects from buffs this.MaxHealth = Convert.ToDecimal(PlayerProcedures.GetWillpowerBaseByLevel(this.Level)) * (1.0M + (buffs.HealthBonusPercent() / 100.0M)); this.MaxMana = Convert.ToDecimal(PlayerProcedures.GetManaBaseByLevel(this.Level)) * (1.0M + (buffs.ManaBonusPercent() / 100.0M)); // keep this's health within proper bounds if (this.MaxHealth < 1) { this.MaxHealth = 1; } if (this.MaxMana < 1) { this.MaxMana = 1; } if (this.Health > this.MaxHealth) { this.Health = this.MaxHealth; } if (this.Mana > this.MaxMana) { this.Mana = this.MaxMana; } if (this.Health < 0) { this.Health = 0; } if (this.Mana < 0) { this.Mana = 0; } this.ExtraInventory = buffs.ExtraInventorySpace(); SneakPercent = buffs.SneakPercent(); MoveActionPointDiscount = buffs.MoveActionPointDiscount(); }
/// <summary> /// Determines whether Narcissa is currently chasing someone who is valid to be transformed still /// </summary> /// <param name="directive">AI Directive containing target Id</param> /// <returns>True if target is valid, false if not</returns> private static bool HasValidTarget(AIDirective directive) { if (directive == null || directive.Var1 == 0) { return(false); } var target = PlayerProcedures.GetPlayer((int)directive.Var1); // TODO: This can probably be swapped out with Arrhae's "CanBeAttacked" method in the future. But for now... if (target == null || target.Mobility != PvPStatics.MobilityFull || PlayerProcedures.PlayerIsOffline(target) || target.IsInDungeon() || target.InDuel > 0 || target.InQuest > 0) { return(false); } return(true); }
public virtual async Task <ActionResult> ItemLeaderboard() { var myMembershipId = User.Identity.GetUserId(); if (myMembershipId.IsNullOrEmpty()) { ViewBag.MyName = ""; ViewBag.MyId = ""; } else { var me = PlayerProcedures.GetPlayerFromMembership(myMembershipId); ViewBag.MyName = me == null ? "" : me.GetFullName(); ViewBag.MyId = me.Id; } var output = await mediator.Send(new ItemLeaderboardRequest { Limit = 100 }); var castedOutput = output.Select(i => (ItemFormerPlayerDetail)i).Memoize(); return(View(MVC.Leaderboard.Views.ItemLeaderboard, castedOutput)); }
public static string DiceGame(Player player) { var target = 69; // /roll 4d20 var die1 = PlayerProcedures.RollDie(20); var die2 = PlayerProcedures.RollDie(20); var die3 = PlayerProcedures.RollDie(20); var die4 = PlayerProcedures.RollDie(20); var total = die1 + die2 + die3 + die4; // Arbitrary score calculation, trying to avoid any big advantage for those who roll more often int score; if (total == target) { score = total; } else { var distance = Math.Abs(total - target); if (distance <= 11) { score = (11 - distance) * 4; } else { score = (11 - distance) / 10; } } StatsProcedures.AddStat(player.MembershipId, StatsProcedures.Stat__DiceGameScore, score); LocationLogProcedures.AddLocationLog(player.dbLocationName, $"{player.GetFullName()} rolls {die1}, {die2}, {die3} and {die4}, giving a total of <b>{total}</b>."); return($"You pick up four 20-sided dice and roll {die1}, {die2}, {die3} and {die4}, giving a total of <b>{total}</b>. Your score is <b>{score}</b>."); }
public virtual ActionResult Settings() { var myMembershipId = User.Identity.GetUserId(); var me = PlayerProcedures.GetPlayerFromMembership(myMembershipId); var output = new SettingsPageViewModel { TimeUntilReroll = Math.Round(RerollProcedures.GetTimeUntilReroll(me).TotalMinutes), TimeUntilLogout = TurnTimesStatics.GetOfflineAfterXMinutes() - Math.Abs(Math.Floor(me.LastActionTimestamp.Subtract(DateTime.UtcNow).TotalMinutes)), Player = me, PlayerItem = DomainRegistry.Repository.FindSingle(new GetItemByFormerPlayer { PlayerId = me.Id }), Strikes = DomainRegistry.Repository.Find(new GetUserStrikes { UserId = myMembershipId }), ChaosChangesEnabled = DomainRegistry.Repository.FindSingle(new IsChaosChangesEnabled { UserId = myMembershipId }) }; return(View(MVC.Settings.Views.Settings, output)); }
public virtual ActionResult CovenantWideMessage() { var me = PlayerProcedures.GetPlayerFromMembership(User.Identity.GetUserId()); // assert that player is in a covenant if (me.Covenant == null || me.Covenant <= 0) { TempData["Error"] = "You are not in a covenant and cannot send out mass messages to your members."; return(RedirectToAction(MVC.Covenant.MyCovenant())); } // assert that the player is a covenant leader var myCov = CovenantProcedures.GetDbCovenant((int)me.Covenant); if (myCov.LeaderId != me.Id) { TempData["Error"] = "You are not the leader of your covenant."; TempData["SubError"] = "Only covenant leaders can send out mass messages."; return(RedirectToAction(MVC.Covenant.MyCovenant())); } return(View(MVC.Messages.Views.CovenantWideMessage)); }
public virtual ActionResult DuelDetail(int id) { var myMembershipId = User.Identity.GetUserId(); var me = PlayerProcedures.GetPlayerFromMembership(myMembershipId); var duel = DuelProcedures.GetDuel(id); if (me.InDuel != duel.Id) { TempData["Error"] = "You are not in this duel."; return(RedirectToAction(MVC.PvP.Play())); } var output = new DuelPlayersViewModel { Duel = duel, Combatants = DuelProcedures.GetPlayerViewModelsInDuel(duel.Id) }; ViewBag.CurrentTurn = PvPWorldStatProcedures.GetWorldTurnNumber(); ViewBag.TurnsRemaining = PvPStatics.MaximumDuelTurnLength - (ViewBag.CurrentTurn - duel.StartTurn); return(View(MVC.Duel.Views.DuelDetail, output)); }
public virtual ActionResult AuthorArtistBio(string id) { var myMembershipId = User.Identity.GetUserId(); var output = SettingsProcedures.GetAuthorArtistBio(id); var artistIngamePlayer = PlayerProcedures.GetPlayerFromMembership(id); var me = PlayerProcedures.GetPlayerFromMembership(myMembershipId); ViewBag.IngameCharacter = "This artist does not currently have a character ingame."; var friends = FriendProcedures.MemberIsMyFriend(id, myMembershipId); ViewBag.IAmFriendsWithArtist = friends; if (artistIngamePlayer != null) { ViewBag.IngameCharacter = "This artist current has a character under the name of " + artistIngamePlayer.GetFullName() + "."; } // assert visibility setting is okay if (output.PlayerNamePrivacyLevel == 1 && !friends) { TempData["Error"] = "This artist bio is only visible to his or her friends."; return(RedirectToAction(MVC.PvP.Play())); } if (output.PlayerNamePrivacyLevel == 2) { TempData["Error"] = "This artist's biography is currently entirely disabled. Check again later."; return(RedirectToAction(MVC.PvP.Play())); } if (output.Text != null) { output.Text = output.Text.Replace("[br]", "<br>").Replace("[p]", "<p>").Replace("[/p]", "</p>").Replace("[h1]", "<h1>").Replace("[/h1]", "</h1>").Replace("[h2]", "<h2>").Replace("[/h2]", "</h2>").Replace("[h3]", "<h3>").Replace("[/h3]", "</h3>"); } return(View(MVC.Settings.Views.AuthorArtistBio, output)); }
public virtual ActionResult DeleteMessage(bool deleteAll, int messageId) { var myMembershipId = User.Identity.GetUserId(); var me = PlayerProcedures.GetPlayerFromMembership(myMembershipId); if (DomainRegistry.Repository.FindSingle(new IsAccountLockedOut { userId = me.MembershipId })) { return(RedirectToAction(MVC.PvP.Play())); } if (deleteAll) { DomainRegistry.Repository.Execute(new DeleteAllMessagesOwnedByPlayer() { OwnerId = me.Id }); TempData["Result"] = "Your messages have been deleted."; return(RedirectToAction(MVC.Messages.Index())); } try { DomainRegistry.Repository.Execute(new DeleteMessage { MessageId = messageId, OwnerId = me.Id }); } catch (DomainException) { TempData["Error"] = "You can't delete this message."; TempData["SubError"] = "It wasn't sent to you."; return(RedirectToAction(MVC.Messages.Index())); } return(RedirectToAction(MVC.Messages.Index())); }
public virtual ActionResult MoveVictim(int id) { var myMembershipId = User.Identity.GetUserId(); var me = PlayerProcedures.GetPlayerFromMembership(myMembershipId); var victim = PlayerProcedures.GetPlayer(id); // run generic MC checks var errorsBox = MindControlProcedures.AssertBasicMindControlConditions(me, victim, MindControlStatics.MindControl__MovementFormSourceId); if (errorsBox.HasError) { TempData["Error"] = errorsBox.Error; TempData["SubError"] = errorsBox.SubError; return(RedirectToAction(MVC.MindControl.MindControlList())); } ViewBag.Victim = victim; var output = victim.IsInDungeon() ? LocationsStatics.LocationList.GetLocation.Where(l => l.dbName != "" && l.Region == "dungeon" && l.dbName != victim.dbLocationName) : LocationsStatics.LocationList.GetLocation.Where(l => l.dbName != "" && l.Region != "dungeon" && l.dbName != victim.dbLocationName); return(View(MVC.MindControl.Views.MoveVictim, output.OrderBy(l => MindControlProcedures.GetAPCostToMove(victim, l.dbName)).ThenBy(l => l.Name))); }
public static string CancelFriendRequest(int id, string membershipId) { IFriendRepository friendRepo = new EFFriendRepository(); var friend = friendRepo.Friends.FirstOrDefault(f => f.Id == id); // assert exists if (friend == null) { return("Error"); } // assert you've sent this, or else it was sent to you else if (friend.OwnerMembershipId == membershipId || friend.FriendMembershipId == membershipId) { friendRepo.DeleteFriend(friend.Id); var me = PlayerProcedures.GetPlayerFromMembership(membershipId); var otherMembership = (friend.OwnerMembershipId == membershipId) ? friend.FriendMembershipId : friend.OwnerMembershipId; var nonFriend = PlayerProcedures.GetPlayerFromMembership(otherMembership); if (friend.IsAccepted) { PlayerLogProcedures.AddPlayerLog(me.Id, $"You are no longer friends with {nonFriend?.GetFullName()}.", false); } else { PlayerLogProcedures.AddPlayerLog(me.Id, $"You have declined {nonFriend?.GetFullName()}'s friend request.", false); } return(""); } else { return(""); } }
/// <summary> /// Allows a player to claim a new base form if they have earned one. /// </summary> /// <returns></returns> public virtual ActionResult SetBaseForm(int baseId) { var myMembershipId = User.Identity.GetUserId(); var me = PlayerProcedures.GetPlayerFromMembership(myMembershipId); if (baseId == me.OriginalFormSourceId) { TempData["Error"] = "You already have this form selected as your base."; return(RedirectToAction(MVC.PvP.Play())); } // Prevent switching to existing form as a means of quickly escaping a TG orb's effects if (baseId == me.FormSourceId && me.Mobility == PvPStatics.MobilityFull) { TempData["Error"] = "You cannot select your current form as your base form."; return(RedirectToAction(MVC.PvP.Play())); } // Look for a match among custom forms IContributorCustomFormRepository repo = new EFContributorCustomFormRepository(); var match = repo.ContributorCustomForms.Where(c => c.OwnerMembershipId == myMembershipId && c.CustomForm.Id == baseId) .Select(c => c.CustomForm).FirstOrDefault(); if (match == null) { // Look for a match among standard starter forms var formRepo = new EFDbStaticFormRepository(); match = formRepo.DbStaticForms.Where(f => f.Id == baseId && (f.FriendlyName == "Regular Guy" || f.FriendlyName == "Regular Girl")).FirstOrDefault(); if (match == null) { TempData["Error"] = "You do not own that custom base form."; return(RedirectToAction(MVC.PvP.Play())); } } var instant = false; // When player is already in their base form change them instantly. if (me.FormSourceId == me.OriginalFormSourceId) { PlayerProcedures.SetCustomBase(me, baseId); me.OriginalFormSourceId = baseId; PlayerProcedures.InstantRestoreToBase(me); instant = true; } else { PlayerProcedures.SetCustomBase(me, baseId); } if (me.Mobility == PvPStatics.MobilityFull) { if (instant) { TempData["Result"] = $"You are suddenly overwhelmed as you spontaneously transform into a {match.FriendlyName}!"; } else { TempData["Result"] = $"Your inner {match.FriendlyName} is begging to be let out, if only you could return yourself to base form..."; } } else { TempData["Result"] = $"Your dreams of becoming a {match.FriendlyName} could come true, if only you could return to animacy..."; } return(RedirectToAction(MVC.PvP.Play())); }
public virtual ActionResult DumpWillpower(string amount) { var myMembershipId = User.Identity.GetUserId(); var me = PlayerProcedures.GetPlayerFromMembership(myMembershipId); if (me.Mobility != PvPStatics.MobilityFull) { TempData["Error"] = "You must be fully animate and in protection mode in order to drop your willpower."; return(RedirectToAction(MVC.PvP.Play())); } // assert player is not a duel if (me.InDuel > 0) { TempData["Error"] = "You must finish your duel before you can drop your willpower."; return(RedirectToAction(MVC.PvP.Play())); } // assert player is not a quest if (me.InQuest > 0) { TempData["Error"] = "You must finish your quest before you can drop your willpower."; return(RedirectToAction(MVC.PvP.Play())); } if (me.GameMode == (int)GameModeStatics.GameModes.PvP) { TempData["Error"] = "You must be fully animate and in Protection or SuperProtection mode in order to drop your willpower."; return(RedirectToAction(MVC.PvP.Play())); } decimal drop = 0; if (amount == "half") { var halfHealth = me.MaxHealth / 2; if (halfHealth < me.Health) { drop = me.Health - halfHealth; PlayerProcedures.ChangePlayerActionMana(0, -drop, 0, me.Id, false); TempData["Result"] = "You voluntarily lower your willpower down to half of its maximum, making yourself completely vulnerable to animate transformations."; return(RedirectToAction(MVC.PvP.Play())); } else { TempData["Error"] = "Your willpower is already lower than half of its maximum."; return(RedirectToAction(MVC.PvP.Play())); } } else if (amount == PvPStatics.MobilityFull) { if (me.Health > 0) { // drop = me.MaxHealth - me.Health; PlayerProcedures.ChangePlayerActionMana(0, -me.Health, 0, me.Id, false); TempData["Result"] = "You voluntarily decrease your willpower to nothing, making yourself vulnerable to any type of transformation."; return(RedirectToAction(MVC.PvP.Play())); } } TempData["Error"] = "That is not a valid amount to decrease your willpower to."; return(RedirectToAction(MVC.PvP.Play())); }
public void Should_retrieve_correct_wp_base_by_level(int level, int expectedWillpower) { Assert.That(PlayerProcedures.GetWillpowerBaseByLevel(level), Is.EqualTo(expectedWillpower)); }
public void Should_retrieve_correct_mana_base_by_level(int level, int expectedMana) { Assert.That(PlayerProcedures.GetManaBaseByLevel(level), Is.EqualTo(expectedMana)); }
public void Should_retrieve_correct_xp_requirement_for_levelup(int level, int expectedXp) { Assert.That(PlayerProcedures.GetXPNeededForLevelUp(level), Is.EqualTo(expectedXp)); }
internal override PlayerFormViewModel FindSingle() { return(PlayerProcedures.GetPlayerFormViewModel_FromMembership(MembershipId)); }
internal override void InternalExecute() { PlayerProcedures.MarkOnlineActivityTimestamp(Player); }