private static string RestoreTimeLeft(CharacterMotherClass player, bool isHP) { double restores = RestorePerSeconds(player.stats.GetDEX(), isHP); double totalSeconds; if (isHP) { long mhp = player.Health(); double hpps = mhp * restores; totalSeconds = (mhp - player.health) / hpps; } else { int shp = player.Stamina(); double spps = shp * restores; totalSeconds = (shp - player.stamina) / spps; } double vagueMinutes = totalSeconds / 60.00; double hours = Math.Floor(vagueMinutes / 60); double minutes = Math.Floor(vagueMinutes - (hours * 60)); return((hours > 0 ? $"{hours}h " : "") + (minutes > 0 ? $"{minutes}m " : "") + $"{Math.Floor(totalSeconds - (Math.Floor(vagueMinutes) * 60))}s "); }
public static List <string> AllArmorCND(CharacterMotherClass user) { List <string> results = new List <string>(); for (int i = 2; i <= Equipment.gearCount; i++) { Item gear = user.equipment.GetGear(i); if (gear != null && (i > 7 || i < 5)) { Condition(gear, user.stats.endurance); if (VerifyOnBreak(gear, user)) { results.Add($"{gear.name} has broken"); } } } return(results); }
public static bool VerifyOnBreak(this Item item, CharacterMotherClass character) { if (item.condition < 1) { Item equipped = character.equipment.GetGear(item.type); if (equipped != item) { return(false); } character.equipment.Unequip(item.type); character.inventory.Add(item, 1, -1); return(true); } return(false); }
private static EmbedFieldBuilder RestRecover(CharacterMotherClass character, double totalSeconds) { long maxHealth = character.Health(); int maxStamina = character.Stamina(); int dex = character.stats.GetDEX(); double hpps = RestorePerSeconds(dex, true); long hpRestored = Math.Min(maxHealth - character.health, NumbersM.FloorParse <long>(maxHealth * hpps * totalSeconds)); character.health += hpRestored; double spps = RestorePerSeconds(dex, false); int spRestored = Math.Min(maxStamina - character.stamina, NumbersM.FloorParse <int>(maxStamina * spps * totalSeconds)); character.stamina += spRestored; return(DUtils.NewField(character.name, $"Restored {hpRestored} Health and {spRestored} Stamina", true)); }
internal static object[] CheckPerks(CharacterMotherClass player, Perk.Trigger trigger, params object[] arguments) { return(CheckPerksM(player, trigger, arguments)); }
}//*/ internal static T CheckPerks <T>(CharacterMotherClass player, Perk.Trigger trigger, T arguments) { return((T)CheckPerksM(player, trigger, arguments)[0]); }
internal static object[] CheckPerksM(CharacterMotherClass player, Perk.Trigger trigger, params object[] arguments) { if (player.perks != null && player.perks.Count > 0) { for (int i = 0; i < player.perks.Count; i++) { Perk p = player.perks[i]; try { if (p.trigger == trigger) { arguments = p.Run(player, false, arguments); } if (p.end != Perk.Trigger.Null && p.end == trigger) { arguments = p.Run(player, true, arguments); } } catch (Exception e) { _ = Handlers.UniqueChannels.Instance.SendToLog(e, $"Error in perk {p.name}"); } } } for (int i = 0; i < Equipment.gearCount; i++) { var gear = player.equipment.GetGear(i); if (gear?.perk != null) { try { if (gear.perk.trigger == trigger) { arguments = gear.perk.Run(player, false, arguments); } if (gear.perk.end != Perk.Trigger.Null && gear.perk.end == trigger) { arguments = gear.perk.Run(player, true, arguments); } } catch (Exception e) { _ = Handlers.UniqueChannels.Instance.SendToLog(e, $"Error in equipment perk {gear?.perk?.name}"); } } } if (player.status != null) { for (int i = 0; i < player.status.Count;) { var p = player.status[i]; try { if (p.trigger == trigger) { arguments = p.Run(player, false, arguments); } if (p.end != Perk.Trigger.Null && p.end == trigger) { arguments = p.Run(player, true, arguments); } } catch (Exception e) { _ = Handlers.UniqueChannels.Instance.SendToLog(e, $"Error in status {p.name}"); } // if (p.rank <= 0) { player.status.RemoveAt(i); } else { i++; } } } return(arguments); }//*/
private static EmbedFieldBuilder PlayerRestField(CharacterMotherClass player) => DUtils.NewField(player.name, $"Full health in {RestoreTimeLeft(player, true)}" + Environment.NewLine + $"Fill stamina in {RestoreTimeLeft(player, false)}", true);