/// <summary> /// Modifies the given CombatRating modifier by the given delta /// </summary> public void ModCombatRatingMod(CombatRating combatRating, int iDelta) { m_CombatRating[(int)combatRating - 1] += iDelta; SetInt32((int)PlayerFields.COMBAT_RATING_1 - 1 + (int)combatRating, m_CombatRating[(int)combatRating - 1]); // TODO: Update influence }
public CommanderRatingsEvent(DateTime timestamp, CombatRating combat, TradeRating trade, ExplorationRating exploration, CQCRating cqc, EmpireRating empire, FederationRating federation) : base(timestamp, NAME) { this.combat = combat; this.trade = trade; this.exploration = exploration; this.cqc = cqc; this.empire = empire; this.federation = federation; }
public float GetRatingBonusValue(CombatRating cr) { float baseResult = ApplyRatingDiminishing(cr, m_activePlayerData.CombatRatings[(int)cr] * GetRatingMultiplier(cr)); if (cr != CombatRating.ResiliencePlayerDamage) { return(baseResult); } return((float)(1.0f - Math.Pow(0.99f, baseResult)) * 100.0f); }
public float GetRatingBonusValue(CombatRating cr) { float baseResult = GetFloatValue(PlayerFields.CombatRating1 + (int)cr) * GetRatingMultiplier(cr); if (cr != CombatRating.ResiliencePlayerDamage) { return(baseResult); } return((float)(1.0f - Math.Pow(0.99f, baseResult)) * 100.0f); }
public CommanderRatingsEvent(DateTime timestamp, CombatRating combat, TradeRating trade, ExplorationRating exploration, CQCRating cqc, EmpireRating empire, FederationRating federation, MercenaryRating mercenary, ExobiologistRating exobiologist) : base(timestamp, NAME) { this.combat = combat; this.trade = trade; this.exploration = exploration; this.cqc = cqc; this.empire = empire; this.federation = federation; this.mercenary = mercenary; this.exobiologist = exobiologist; }
/// <summary>Create a profile given the results from a /profile call</summary> public static Profile ProfileFromJson(JObject json) { Logging.Debug("Entered"); Profile Profile = new Profile(); if (json["commander"] != null) { Commander Commander = new Commander(); Commander.name = (string)json["commander"]["name"]; Commander.combatrating = CombatRating.FromRank((int)json["commander"]["rank"]["combat"]); Commander.traderating = TradeRating.FromRank((int)json["commander"]["rank"]["trade"]); Commander.explorationrating = ExplorationRating.FromRank((int)json["commander"]["rank"]["explore"]); Commander.cqcrating = CQCRating.FromRank((int)json["commander"]["rank"]["cqc"]); Commander.empirerating = EmpireRating.FromRank((int)json["commander"]["rank"]["empire"]); Commander.federationrating = FederationRating.FromRank((int)json["commander"]["rank"]["federation"]); Commander.credits = (long)json["commander"]["credits"]; Commander.debt = (long)json["commander"]["debt"]; Profile.Cmdr = Commander; string systemName = json["lastSystem"] == null ? null : (string)json["lastSystem"]["name"]; if (systemName != null) { Profile.CurrentStarSystem = StarSystemSqLiteRepository.Instance.GetOrCreateStarSystem(systemName); } Profile.Ship = ShipFromProfile(json["ship"]); Profile.Shipyard = ShipyardFromProfile(json, ref Profile); AugmentShipInfo(Profile.Ship, Profile.Shipyard); if (json["lastStarport"] != null) { Profile.LastStation = Profile.CurrentStarSystem.stations.Find(s => s.name == (string)json["lastStarport"]["name"]); if (Profile.LastStation == null) { // Don't have a station so make one up Profile.LastStation = new Station(); Profile.LastStation.name = (string)json["lastStarport"]["name"]; } Profile.LastStation.systemname = Profile.CurrentStarSystem.name; Profile.LastStation.outfitting = OutfittingFromProfile(json); Profile.LastStation.commodities = CommoditiesFromProfile(json); Profile.LastStation.shipyard = ShipyardFromProfile(json); } } Logging.Debug("Leaving"); return(Profile); }
float GetRatingMultiplier(CombatRating cr) { GtCombatRatingsRecord Rating = CliDB.CombatRatingsGameTable.GetRow(getLevel()); if (Rating == null) { return(1.0f); } float value = GetGameTableColumnForCombatRating(Rating, cr); if (value == 0) { return(1.0f); // By default use minimum coefficient (not must be called) } return(1.0f / value); }
private void UpdateChancesByCombatRating(CombatRating rating) { // TODO: Update influence switch (rating) { case CombatRating.Dodge: UnitUpdates.UpdateDodgeChance(this); break; case CombatRating.Parry: UnitUpdates.UpdateParryChance(this); break; case CombatRating.Block: UnitUpdates.UpdateBlockChance(this); break; case CombatRating.MeleeCritChance: UnitUpdates.UpdateCritChance(this); break; case CombatRating.RangedCritChance: UnitUpdates.UpdateCritChance(this); break; case CombatRating.SpellCritChance: UnitUpdates.UpdateSpellCritChance(this); break; case CombatRating.DefenseSkill: UnitUpdates.UpdateDefense(this); break; case CombatRating.MeleeHitChance: UnitUpdates.UpdateMeleeHitChance(this); break; case CombatRating.RangedHitChance: UnitUpdates.UpdateRangedHitChance(this); break; case CombatRating.Expertise: UnitUpdates.UpdateExpertise(this); break; } }
public void TestCrimeShipTargeted() { var privateObject = new PrivateObject(crimeMonitor); crimeMonitor.targetSystem = EDDI.Instance?.CurrentStarSystem?.systemname; line = "{ \"timestamp\":\"2019-04-24T00:13:35Z\", \"event\":\"ShipTargeted\", \"TargetLocked\":true, \"Ship\":\"federation_corvette\", \"Ship_Localised\":\"Federal Corvette\", \"ScanStage\":3, \"PilotName\":\"$npc_name_decorate:#name=Kurt Pettersen;\", \"PilotName_Localised\":\"Kurt Pettersen\", \"PilotRank\":\"Deadly\", \"ShieldHealth\":100.000000, \"HullHealth\":100.000000, \"Faction\":\"Calennero Crew\", \"LegalStatus\":\"Wanted\", \"Bounty\":295785 }"; events = JournalMonitor.ParseJournalEntry(line); Assert.IsTrue(events.Count == 1); privateObject.Invoke("handleShipTargetedEvent", new object[] { events[0] }); Assert.IsNotNull(crimeMonitor.shipTargets); Assert.AreEqual(1, crimeMonitor.shipTargets.Count); Target target = crimeMonitor.shipTargets.FirstOrDefault(t => t.name == "Kurt Pettersen"); Assert.AreEqual(CombatRating.FromEDName("Deadly"), target.CombatRank); Assert.AreEqual("Calennero Crew", target.faction); Assert.AreEqual(Superpower.Independent, target.Allegiance); Assert.AreEqual(295785, target.bounty); line = "{ \"timestamp\":\"2019-04-24T00:44:32Z\", \"event\":\"FSDJump\", \"StarSystem\":\"HIP 20277\", \"SystemAddress\":84053791442, \"StarPos\":[106.43750,-95.68750,-0.18750], \"SystemAllegiance\":\"Empire\", \"SystemEconomy\":\"$economy_Industrial;\", \"SystemEconomy_Localised\":\"Industrial\", \"SystemSecondEconomy\":\"$economy_Extraction;\", \"SystemSecondEconomy_Localised\":\"Extraction\", \"SystemGovernment\":\"$government_Corporate;\", \"SystemGovernment_Localised\":\"Corporate\", \"SystemSecurity\":\"$SYSTEM_SECURITY_high;\", \"SystemSecurity_Localised\":\"High Security\", \"Population\":11247202, \"Body\":\"HIP 20277\", \"BodyID\":0, \"BodyType\":\"Star\", \"JumpDist\":7.473, \"FuelUsed\":1.140420, \"FuelLevel\":61.122398, \"SystemFaction\":{ \"Name\":\"Calennero State Industries\", \"FactionState\":\"Boom\" } }"; events = JournalMonitor.ParseJournalEntry(line); Assert.IsTrue(events.Count == 1); privateObject.Invoke("_handleJumpedEvent", new object[] { events[0] }); Assert.AreEqual(0, crimeMonitor.shipTargets.Count); }
/// <summary> /// Modifies the given CombatRating modifier by the given delta /// </summary> public void ModCombatRatingMod( CombatRating combatRating, int iDelta ) { m_CombatRating[(int)combatRating - 1] += iDelta; SetInt32( (int)PlayerFields.COMBAT_RATING_1 - 1 + (int)combatRating, m_CombatRating[(int)combatRating - 1] ); // TODO: Update influence }
float ApplyRatingDiminishing(CombatRating cr, float bonusValue) { uint diminishingCurveId = 0; switch (cr) { case CombatRating.Dodge: diminishingCurveId = Global.DB2Mgr.GetGlobalCurveId(GlobalCurve.DodgeDiminishing); break; case CombatRating.Parry: diminishingCurveId = Global.DB2Mgr.GetGlobalCurveId(GlobalCurve.ParryDiminishing); break; case CombatRating.Block: diminishingCurveId = Global.DB2Mgr.GetGlobalCurveId(GlobalCurve.BlockDiminishing); break; case CombatRating.CritMelee: case CombatRating.CritRanged: case CombatRating.CritSpell: diminishingCurveId = Global.DB2Mgr.GetGlobalCurveId(GlobalCurve.CritDiminishing); break; case CombatRating.Speed: diminishingCurveId = Global.DB2Mgr.GetGlobalCurveId(GlobalCurve.SpeedDiminishing); break; case CombatRating.Lifesteal: diminishingCurveId = Global.DB2Mgr.GetGlobalCurveId(GlobalCurve.LifestealDiminishing); break; case CombatRating.HasteMelee: case CombatRating.HasteRanged: case CombatRating.HasteSpell: diminishingCurveId = Global.DB2Mgr.GetGlobalCurveId(GlobalCurve.HasteDiminishing); break; case CombatRating.Avoidance: diminishingCurveId = Global.DB2Mgr.GetGlobalCurveId(GlobalCurve.AvoidanceDiminishing); break; case CombatRating.Mastery: diminishingCurveId = Global.DB2Mgr.GetGlobalCurveId(GlobalCurve.MasteryDiminishing); break; case CombatRating.VersatilityDamageDone: case CombatRating.VersatilityHealingDone: diminishingCurveId = Global.DB2Mgr.GetGlobalCurveId(GlobalCurve.VersatilityDoneDiminishing); break; case CombatRating.VersatilityDamageTaken: diminishingCurveId = Global.DB2Mgr.GetGlobalCurveId(GlobalCurve.VersatilityTakenDiminishing); break; default: break; } if (diminishingCurveId != 0) { return(Global.DB2Mgr.GetCurveValueAt(diminishingCurveId, bonusValue)); } return(bonusValue); }
public void FrontierApiCmdrTest() { Commander commander = new Commander() { name = "Marty McFly", title = "Serf", combatrating = CombatRating.FromRank(3), traderating = TradeRating.FromRank(3), explorationrating = ExplorationRating.FromRank(2), cqcrating = CQCRating.FromRank(2), empirerating = EmpireRating.FromRank(2), federationrating = FederationRating.FromRank(1), crimerating = 0, servicerating = 0, powerrating = 2, credits = 0, debt = 0 }; FrontierApiCommander frontierApiCommander = new FrontierApiCommander() { name = "Marty McFly", combatrating = CombatRating.FromRank(3), traderating = TradeRating.FromRank(2), explorationrating = ExplorationRating.FromRank(2), cqcrating = CQCRating.FromRank(2), empirerating = EmpireRating.FromRank(4), federationrating = FederationRating.FromRank(2), crimerating = 2, servicerating = 2, powerrating = 3, credits = 246486105, debt = 24684 }; FrontierApiCommander frontierApiCommander2 = new FrontierApiCommander() { name = "Doc Brown", combatrating = CombatRating.FromRank(0), traderating = TradeRating.FromRank(6), explorationrating = ExplorationRating.FromRank(7), cqcrating = CQCRating.FromRank(0), empirerating = EmpireRating.FromRank(1), federationrating = FederationRating.FromRank(2), crimerating = 1, servicerating = 1, powerrating = 7, credits = 189687, debt = 0 }; DateTime apiDateTime = DateTime.UtcNow; DateTime journalDateTime = DateTime.UtcNow.AddHours(1); Commander test1 = Commander.FromFrontierApiCmdr(commander, frontierApiCommander, apiDateTime, journalDateTime, out bool cmdr1Matches); Assert.IsTrue(cmdr1Matches); Assert.AreEqual("Marty McFly", test1.name); Assert.AreEqual("Serf", test1.title); Assert.AreEqual(246486105, test1.credits); Assert.AreEqual(24684, test1.debt); Assert.AreEqual(2, test1.crimerating); Assert.AreEqual(3, test1.combatrating.rank); Assert.AreEqual(3, test1.traderating.rank); Assert.AreEqual(2, test1.explorationrating.rank); Assert.AreEqual(2, test1.cqcrating.rank); Assert.AreEqual(4, test1.empirerating.rank); Assert.AreEqual(2, test1.federationrating.rank); Assert.AreEqual(2, test1.crimerating); Assert.AreEqual(2, test1.servicerating); // Since the journal timestamp is greater than the api timestamp, power rating is based off of the journal timestamp Assert.AreEqual(2, test1.powerrating); // Make the api timestamp fresher than the journal timestamp and re-check the power rating apiDateTime = DateTime.UtcNow.AddHours(2); Commander test2 = Commander.FromFrontierApiCmdr(commander, frontierApiCommander, apiDateTime, journalDateTime, out bool cmdr2Matches); Assert.IsTrue(cmdr2Matches); Assert.AreEqual(3, test2.powerrating); // Test Frontier API commander details that do not match our base commander name // The base commander properties should remain unchanged Commander test3 = Commander.FromFrontierApiCmdr(commander, frontierApiCommander2, apiDateTime, journalDateTime, out bool cmdr3Matches); Assert.IsFalse(cmdr3Matches); Assert.AreEqual("Marty McFly", test3.name); Assert.AreEqual("Serf", test3.title); Assert.AreEqual(0, test3.credits); Assert.AreEqual(0, test3.debt); Assert.AreEqual(0, test3.crimerating); Assert.AreEqual(3, test3.combatrating.rank); Assert.AreEqual(3, test3.traderating.rank); Assert.AreEqual(2, test3.explorationrating.rank); Assert.AreEqual(2, test3.cqcrating.rank); Assert.AreEqual(2, test3.empirerating.rank); Assert.AreEqual(1, test3.federationrating.rank); Assert.AreEqual(0, test3.crimerating); Assert.AreEqual(0, test3.servicerating); Assert.AreEqual(2, test3.powerrating); }
public CrewPromotionEvent(DateTime timestamp, string name, long crewid, CombatRating combatrating) : base(timestamp, NAME) { this.name = name; this.crewid = crewid; this.combatrating = combatrating.localizedName; }
/// <summary> /// Gets the total modifier of the corresponding CombatRating (in %) /// </summary> public int GetCombatRating(CombatRating rating) { return GetInt32(PlayerFields.COMBAT_RATING_1 - 1 + (int)rating); }
/// <summary> /// Modifies the given CombatRating modifier by the given delta /// </summary> public void ModCombatRating(CombatRating rating, int delta) { var val = GetInt32(PlayerFields.COMBAT_RATING_1 - 1 + (int)rating) + delta; SetInt32(PlayerFields.COMBAT_RATING_1 - 1 + (int)rating, val); UpdateChancesByCombatRating(rating); }
/// <summary> /// Get's the table from the CombatRating property. /// </summary> /// <param name="rating"></param> /// <returns>The combat rating table with 100 values indexed by level - 1</returns> public static float[] GetCRTable(CombatRating rating) { float[] table; CombatRatings.TryGetValue(rating, out table); return(table); }
public ShipTargetedEvent(DateTime timestamp, bool targetlocked, string ship, int?scanstage, string name, CombatRating rank, string faction, LegalStatus legalstatus, int?bounty, decimal?shieldhealth, decimal?hullhealth, string subsystem, decimal?subsystemhealth) : base(timestamp, NAME) { this.targetlocked = targetlocked; this.ship = ship; this.scanstage = scanstage; this.name = name; this.combatrankDef = rank; this.faction = faction; this.legalstatusDef = legalstatus; this.bounty = bounty; this.shieldhealth = shieldhealth; this.hullhealth = hullhealth; this.subsystem = subsystem; this.subsystemhealth = subsystemhealth; }
/// <summary> /// Build a store from a list of variables /// </summary> private BuiltinStore buildStore(Dictionary <string, Cottle.Value> vars) { BuiltinStore store = new BuiltinStore(); // TODO fetch this from configuration bool useICAO = SpeechServiceConfiguration.FromFile().EnableIcao; // Function to call another script store["F"] = new NativeFunction((values) => { return(new ScriptResolver(scripts).resolve(values[0].AsString, store, false)); }, 1); // Translation functions store["P"] = new NativeFunction((values) => { string val = values[0].AsString; string translation = val; if (translation == val) { translation = Translations.Body(val, useICAO); } if (translation == val) { translation = Translations.StarSystem(val, useICAO); } if (translation == val) { translation = Translations.Faction(val); } if (translation == val) { translation = Translations.Power(val); } if (translation == val) { Ship ship = ShipDefinitions.FromModel(val); if (ship != null && ship.EDID > 0) { translation = ship.SpokenModel(); } } if (translation == val) { Ship ship = ShipDefinitions.FromEDModel(val); if (ship != null && ship.EDID > 0) { translation = ship.SpokenModel(); } } return(translation); }, 1); // Boolean constants store["true"] = true; store["false"] = false; // Helper functions store["OneOf"] = new NativeFunction((values) => { return(new ScriptResolver(scripts).resolveScript(values[random.Next(values.Count)].AsString, store, false)); }); store["Occasionally"] = new NativeFunction((values) => { if (random.Next((int)values[0].AsNumber) == 0) { return(new ScriptResolver(scripts).resolveScript(values[1].AsString, store, false)); } else { return(""); } }, 2); store["Humanise"] = new NativeFunction((values) => { return(Translations.Humanize(values[0].AsNumber)); }, 1); store["Pause"] = new NativeFunction((values) => { return(@"<break time=""" + values[0].AsNumber + @"ms"" />"); }, 1); store["Play"] = new NativeFunction((values) => { return(@"<audio src=""" + values[0].AsString + @""" />"); }, 1); store["Spacialise"] = new NativeFunction((values) => { string Entree = values[0].AsString; if (Entree == "") { return(""); } string Sortie = ""; string UpperSortie = ""; foreach (char c in Entree) { Sortie = Sortie + c + " "; } UpperSortie = Sortie.ToUpper(); return(UpperSortie); }, 1); store["StartsWithVowel"] = new NativeFunction((values) => { string Entree = values[0].AsString; if (Entree == "") { return(""); } char[] vowels = { 'a', 'à', 'â', 'ä', 'e', 'ê', 'é', 'è', 'ë', 'i', 'î', 'ï', 'o', 'ô', 'ö', 'u', 'ù', 'û', 'ü', 'œ', 'y' }; char firstCharacter = Entree.ToLower().ToCharArray().ElementAt(0); Boolean result = vowels.Contains(firstCharacter); return(result); }, 1); // // Commander-specific functions // store["ShipName"] = new NativeFunction((values) => { int?localId = (values.Count == 0 ? (int?)null : (int)values[0].AsNumber); string model = (values.Count == 2 ? values[1].AsString : null); Ship ship = findShip(localId, model); string result = (ship == null ? "your ship" : ship.SpokenName()); return(result); }, 0, 2); store["ShipCallsign"] = new NativeFunction((values) => { int?localId = (values.Count == 0 ? (int?)null : (int)values[0].AsNumber); Ship ship = findShip(localId, null); string result; if (ship != null) { if (EDDI.Instance.Cmdr != null && EDDI.Instance.Cmdr.name != null) { // Obtain the first three characters string chars = new Regex("[^a-zA-Z0-9]").Replace(EDDI.Instance.Cmdr.name, "").ToUpperInvariant().Substring(0, 3); result = ship.SpokenManufacturer() + " " + Translations.ICAO(chars); } else { if (ship.SpokenManufacturer() == null) { result = "unidentified ship"; } else { result = "unidentified " + ship.SpokenManufacturer() + " " + ship.SpokenModel(); } } } else { result = "unidentified ship"; } return(result); }, 0, 1); // // Obtain definition objects for various items // store["SecondsSince"] = new NativeFunction((values) => { long?date = (long?)values[0].AsNumber; if (date == null) { return(null); } long now = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; return(now - date); }, 1); store["ICAO"] = new NativeFunction((values) => { // Turn a string in to an ICAO definition string value = values[0].AsString; if (value == null || value == "") { return(""); } // Remove anything that isn't alphanumeric Logging.Warn("value is " + value); value = value.ToUpperInvariant().Replace("[^A-Z0-9]", ""); Logging.Warn("value is " + value); // Translate to ICAO return(Translations.ICAO(value)); }, 1); store["ShipDetails"] = new NativeFunction((values) => { Ship result = ShipDefinitions.FromModel(values[0].AsString); return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["CombatRatingDetails"] = new NativeFunction((values) => { CombatRating result = CombatRating.FromName(values[0].AsString); if (result == null) { result = CombatRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["TradeRatingDetails"] = new NativeFunction((values) => { TradeRating result = TradeRating.FromName(values[0].AsString); if (result == null) { result = TradeRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["ExplorationRatingDetails"] = new NativeFunction((values) => { ExplorationRating result = ExplorationRating.FromName(values[0].AsString); if (result == null) { result = ExplorationRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["EmpireRatingDetails"] = new NativeFunction((values) => { EmpireRating result = EmpireRating.FromName(values[0].AsString); if (result == null) { result = EmpireRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["FederationRatingDetails"] = new NativeFunction((values) => { FederationRating result = FederationRating.FromName(values[0].AsString); if (result == null) { result = FederationRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["SystemDetails"] = new NativeFunction((values) => { StarSystem result = StarSystemSqLiteRepository.Instance.GetOrCreateStarSystem(values[0].AsString, true); setSystemDistanceFromHome(result); return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["BodyDetails"] = new NativeFunction((values) => { StarSystem system; if (values.Count == 1 || string.IsNullOrEmpty(values[1].AsString)) { // Current system system = EDDI.Instance.CurrentStarSystem; } else { // Named system system = StarSystemSqLiteRepository.Instance.GetOrCreateStarSystem(values[1].AsString, true); } Body result = system != null && system.bodies != null ? system.bodies.FirstOrDefault(v => v.name == values[0].AsString) : null; if (result != null && result.type == "Star" && result.chromaticity == null) { // Need to set our internal extras for the star result.setStellarExtras(); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1, 2); store["StationDetails"] = new NativeFunction((values) => { if (values.Count == 0) { return(null); } StarSystem system; if (values.Count == 1) { // Current system system = EDDI.Instance.CurrentStarSystem; } else { // Named system system = StarSystemSqLiteRepository.Instance.GetOrCreateStarSystem(values[1].AsString, true); } Station result = system != null && system.stations != null ? system.stations.FirstOrDefault(v => v.name == values[0].AsString) : null; return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1, 2); store["SuperpowerDetails"] = new NativeFunction((values) => { Superpower result = Superpower.FromName(values[0].AsString); if (result == null) { result = Superpower.From(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["StateDetails"] = new NativeFunction((values) => { State result = State.FromName(values[0].AsString); if (result == null) { result = State.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["EconomyDetails"] = new NativeFunction((values) => { Economy result = Economy.FromName(values[0].AsString); if (result == null) { result = Economy.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["GovernmentDetails"] = new NativeFunction((values) => { Government result = Government.FromName(values[0].AsString); if (result == null) { result = Government.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["SecurityLevelDetails"] = new NativeFunction((values) => { SecurityLevel result = SecurityLevel.FromName(values[0].AsString); if (result == null) { result = SecurityLevel.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["MaterialDetails"] = new NativeFunction((values) => { if (string.IsNullOrEmpty(values[0].AsString)) { return(new ReflectionValue(new object())); } Material result = Material.FromName(values[0].AsString); if (result == null) { result = Material.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["BlueprintDetails"] = new NativeFunction((values) => { BlueprintMaterials result = BlueprintMaterials.FromName(values[0].AsString); return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["GalnetNewsArticle"] = new NativeFunction((values) => { News result = GalnetSqLiteRepository.Instance.GetArticle(values[0].AsString); return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["GalnetNewsArticles"] = new NativeFunction((values) => { List <News> results = null; if (values.Count == 0) { // Obtain all unread articles results = GalnetSqLiteRepository.Instance.GetArticles(); } else if (values.Count == 1) { // Obtain all unread news of a given category results = GalnetSqLiteRepository.Instance.GetArticles(values[0].AsString); } else if (values.Count == 2) { // Obtain all news of a given category results = GalnetSqLiteRepository.Instance.GetArticles(values[0].AsString, false); } return(results == null ? new ReflectionValue(new List <News>()) : new ReflectionValue(results)); }, 0, 2); store["GalnetNewsMarkRead"] = new NativeFunction((values) => { News result = GalnetSqLiteRepository.Instance.GetArticle(values[0].AsString); if (result != null) { GalnetSqLiteRepository.Instance.MarkRead(result); } return(""); }, 1); store["GalnetNewsMarkUnread"] = new NativeFunction((values) => { News result = GalnetSqLiteRepository.Instance.GetArticle(values[0].AsString); if (result != null) { GalnetSqLiteRepository.Instance.MarkUnread(result); } return(""); }, 1); store["Distance"] = new NativeFunction((values) => { return((decimal)Math.Round(Math.Sqrt(Math.Pow((double)(values[0].AsNumber - values[3].AsNumber), 2) + Math.Pow((double)(values[1].AsNumber - values[4].AsNumber), 2) + Math.Pow((double)(values[2].AsNumber - values[5].AsNumber), 2)), 2)); }, 6); store["Log"] = new NativeFunction((values) => { Logging.Info(values[0].AsString); return(""); }, 1); store["SetState"] = new NativeFunction((values) => { string name = values[0].AsString.ToLowerInvariant().Replace(" ", "_"); Cottle.Value value = values[1]; if (value.Type == Cottle.ValueContent.Boolean) { EDDI.Instance.State[name] = value.AsBoolean; store["state"] = buildState(); } else if (value.Type == Cottle.ValueContent.Number) { EDDI.Instance.State[name] = value.AsNumber; store["state"] = buildState(); } else if (value.Type == Cottle.ValueContent.String) { EDDI.Instance.State[name] = value.AsString; store["state"] = buildState(); } // Ignore other possibilities return(""); }, 2); // Variables foreach (KeyValuePair <string, Cottle.Value> entry in vars) { store[entry.Key] = entry.Value; } return(store); }
private static void WriteTable(CombatRating rating, StreamWriter writer) { var table = GameTables.GetCRTable(rating); WriteTable(table, writer); }
public KilledEvent(DateTime timestamp, string victim, CombatRating rating) : base(timestamp, NAME) { this.victim = victim; this.rating = rating?.localizedName; }
/// <summary> /// Gets the total modifier of the corresponding CombatRating (in %) /// </summary> public int GetCombatRatingMod(CombatRating combatRating) { return(m_CombatRating[(int)combatRating - 1]); }
/// <summary> /// Get's the table from the CombatRating property. /// </summary> /// <param name="rating"></param> /// <returns>The combat rating table with 100 values indexed by level - 1</returns> public static float[] GetCRTable(CombatRating rating) {/* * float[] table; * CombatRatings.TryGetValue(rating, out table);*/ return(Table); }
public KilledEvent(DateTime timestamp, string victim, CombatRating rating) : base(timestamp, NAME) { this.victim = victim; this.rating = (rating == null ? null : rating.name); }
/// <summary>Create a profile given the results from a /profile call</summary> public static Profile ProfileFromJson(JObject json, DateTime timestamp) { Profile Profile = new Profile { json = json, timestamp = timestamp }; if (json["commander"] != null) { FrontierApiCommander Commander = new FrontierApiCommander { // Caution: The "id" property here may not match the FID returned from the player journal name = (string)json["commander"]["name"], combatrating = CombatRating.FromRank((int)json["commander"]["rank"]["combat"]), traderating = TradeRating.FromRank((int)json["commander"]["rank"]["trade"]), explorationrating = ExplorationRating.FromRank((int)json["commander"]["rank"]["explore"]), cqcrating = CQCRating.FromRank((int)json["commander"]["rank"]["cqc"]), empirerating = EmpireRating.FromRank((int)json["commander"]["rank"]["empire"]), federationrating = FederationRating.FromRank((int)json["commander"]["rank"]["federation"]), crimerating = (int)json["commander"]["rank"]["crime"], servicerating = (int)json["commander"]["rank"]["service"], powerrating = (int)json["commander"]["rank"]["power"], credits = (long)json["commander"]["credits"], debt = (long)json["commander"]["debt"] }; Profile.Cmdr = Commander; Profile.docked = (bool)json["commander"]["docked"]; Profile.alive = (bool)json["commander"]["alive"]; if (json["commander"]["capabilities"] != null) { var contexts = new ProfileContexts { allowCobraMkIV = (bool)json["commander"]["capabilities"]["AllowCobraMkIV"], inHorizons = (bool)json["commander"]["capabilities"]["Horizons"] }; Profile.contexts = contexts; } string systemName = json["lastSystem"] == null ? null : (string)json["lastSystem"]["name"]; if (systemName != null) { Profile.CurrentStarSystem = new ProfileStarSystem { // Caution: The "id" property here may not match the systemAddress systemName = systemName, // Caution: The "faction" property here may return the edName for the faction rather than the invariant name }; } if (json["lastStarport"] != null) { Profile.LastStation = new ProfileStation { name = (string)json["lastStarport"]["name"], marketId = (long?)json["lastStarport"]["id"] }; if ((bool)json["commander"]["docked"]) { Profile.LastStation.systemname = Profile.CurrentStarSystem.systemName; } } } return(Profile); }
public CombatPromotionEvent(DateTime timestamp, CombatRating rating) : base(timestamp, NAME) { this.rating = rating.name; }
public void SetCombatRatingMod( CombatRating combatRating, int value ) { m_CombatRating[(int)combatRating - 1] = value; SetInt32( (int)PlayerFields.COMBAT_RATING_1 - 1 + (int)combatRating, value ); }
public CrewHiredEvent(DateTime timestamp, string name, long crewid, string faction, long price, CombatRating combatrating) : base(timestamp, NAME) { this.name = name; this.crewid = crewid; this.faction = faction; this.price = price; this.combatrating = combatrating.localizedName; }
public ShipInterdictionEvent(DateTime timestamp, bool succeeded, bool iscommander, string interdictee, CombatRating rating, string faction, string power) : base(timestamp, NAME) { this.succeeded = succeeded; this.iscommander = iscommander; this.interdictee = interdictee; this.rating = rating?.localizedName; this.faction = faction; this.power = power; }
public void SetCombatRating(CombatRating rating, int value) { SetInt32(PlayerFields.COMBAT_RATING_1 - 1 + (int)rating, value); UpdateChancesByCombatRating(rating); }
/// <summary> /// Build a store from a list of variables /// </summary> private BuiltinStore buildStore(Dictionary <string, Cottle.Value> vars) { BuiltinStore store = new BuiltinStore(); // Function to call another script store["F"] = new NativeFunction((values) => { return(new ScriptResolver(scripts).resolve(values[0].AsString, store)); }, 1); // Translation functions store["P"] = new NativeFunction((values) => { string val = values[0].AsString; string translation = val; if (translation == val) { translation = Translations.Faction(val); } if (translation == val) { translation = Translations.Power(val); } if (translation == val) { translation = Translations.StarSystem(val); } return(translation); }, 1); // Helper functions store["OneOf"] = new NativeFunction((values) => { return(new ScriptResolver(scripts).resolveScript(values[random.Next(values.Count)].AsString, store)); }); store["Occasionally"] = new NativeFunction((values) => { if (random.Next((int)values[0].AsNumber) == 0) { return(new ScriptResolver(scripts).resolveScript(values[1].AsString, store)); } else { return(""); } }, 2); store["Humanise"] = new NativeFunction((values) => { return(Translations.Humanize(values[0].AsNumber)); }, 1); store["Pause"] = new NativeFunction((values) => { return(@"<break time =""" + values[0].AsNumber + @"ms"" />"); }, 1); // // Commander-specific functions // store["ShipName"] = new NativeFunction((values) => { int?localId = (values.Count == 0 ? (int?)null : (int)values[0].AsNumber); string model = (values.Count == 2 ? values[1].AsString : null); Ship ship = findShip(localId, model); string result = (ship == null ? "your ship" : ship.SpokenName()); return(result); }, 0, 2); store["ShipCallsign"] = new NativeFunction((values) => { int?localId = (values.Count == 0 ? (int?)null : (int)values[0].AsNumber); Ship ship = findShip(localId, null); string result; if (ship != null) { if (EDDI.Instance.Cmdr != null && EDDI.Instance.Cmdr.name != null) { // Obtain the first three characters string chars = new Regex("[^a-zA-Z0-9]").Replace(EDDI.Instance.Cmdr.name, "").ToUpperInvariant().Substring(0, 3); result = ship.SpokenManufacturer() + " " + Translations.CallSign(chars); } else { if (ship.SpokenManufacturer() == null) { result = "unidentified ship"; } else { result = "unidentified " + ship.SpokenManufacturer() + " " + ship.SpokenModel(); } } } else { result = "unidentified ship"; } return(result); }, 0, 1); // // Obtain definition objects for various items // store["ShipDetails"] = new NativeFunction((values) => { int?localId = (values.Count == 0 ? (int?)null : (int)values[0].AsNumber); Ship result = findShip(localId, null); return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 0, 1); store["CombatRatingDetails"] = new NativeFunction((values) => { CombatRating result = CombatRating.FromName(values[0].AsString); if (result == null) { result = CombatRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["TradeRatingDetails"] = new NativeFunction((values) => { TradeRating result = TradeRating.FromName(values[0].AsString); if (result == null) { result = TradeRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["ExplorationRatingDetails"] = new NativeFunction((values) => { ExplorationRating result = ExplorationRating.FromName(values[0].AsString); if (result == null) { result = ExplorationRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["EmpireRatingDetails"] = new NativeFunction((values) => { EmpireRating result = EmpireRating.FromName(values[0].AsString); if (result == null) { result = EmpireRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["FederationRatingDetails"] = new NativeFunction((values) => { FederationRating result = FederationRating.FromName(values[0].AsString); if (result == null) { result = FederationRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["SystemDetails"] = new NativeFunction((values) => { StarSystem result = StarSystemSqLiteRepository.Instance.GetOrCreateStarSystem(values[0].AsString, true); return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["StationDetails"] = new NativeFunction((values) => { if (values.Count == 0) { return(null); } StarSystem system; if (values.Count == 1) { // Current system system = EDDI.Instance.CurrentStarSystem; } else { system = StarSystemSqLiteRepository.Instance.GetOrCreateStarSystem(values[1].AsString, true); } Station result = system != null && system.stations != null ? system.stations.FirstOrDefault(v => v.name == values[0].AsString) : null; return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1, 2); store["SuperpowerDetails"] = new NativeFunction((values) => { Superpower result = Superpower.FromName(values[0].AsString); if (result == null) { result = Superpower.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["StateDetails"] = new NativeFunction((values) => { State result = State.FromName(values[0].AsString); if (result == null) { result = State.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["EconomyDetails"] = new NativeFunction((values) => { Economy result = Economy.FromName(values[0].AsString); if (result == null) { result = Economy.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["GovernmentDetails"] = new NativeFunction((values) => { Government result = Government.FromName(values[0].AsString); if (result == null) { result = Government.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["SecurityLevelDetails"] = new NativeFunction((values) => { SecurityLevel result = SecurityLevel.FromName(values[0].AsString); if (result == null) { result = SecurityLevel.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["MaterialDetails"] = new NativeFunction((values) => { Material result = Material.FromName(values[0].AsString); if (result == null) { result = Material.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); // Variables foreach (KeyValuePair <string, Cottle.Value> entry in vars) { store[entry.Key] = entry.Value; } return(store); }
/// <summary> /// Get's the table from the CombatRating property. /// </summary> /// <param name="rating"></param> /// <returns>The combat rating table with 100 values indexed by level - 1</returns> public static float[] GetCRTable(CombatRating rating) { float[] table; CombatRatings.TryGetValue(rating, out table); return table; }
public ShipInterdictedEvent(DateTime timestamp, bool succeeded, bool submitted, bool iscommander, string interdictor, CombatRating rating, string faction, string power) : base(timestamp, NAME) { this.succeeded = succeeded; this.submitted = submitted; this.iscommander = iscommander; this.interdictor = interdictor; this.rating = (rating == null ? null : rating.name); this.faction = faction; this.power = power; }
public void SetCombatRatingMod(CombatRating combatRating, int value) { m_CombatRating[(int)combatRating - 1] = value; SetInt32((int)PlayerFields.COMBAT_RATING_1 - 1 + (int)combatRating, value); }
/// <summary> /// Build a store from a list of variables /// </summary> private BuiltinStore buildStore(Dictionary <string, Cottle.Value> vars) { BuiltinStore store = new BuiltinStore(); // Function to call another script store["F"] = new NativeFunction((values) => { return(new ScriptResolver(scripts).resolve(values[0].AsString, store, false)); }, 1); // Translation functions store["P"] = new NativeFunction((values) => { string val = values[0].AsString; string translation = val; if (translation == val) { translation = Translations.Faction(val); } if (translation == val) { translation = Translations.Power(val); } if (translation == val) { translation = Translations.StarSystem(val); } if (translation == val) { Ship ship = ShipDefinitions.FromModel(val); if (ship != null && ship.EDID > 0) { translation = ship.SpokenModel(); } } if (translation == val) { Ship ship = ShipDefinitions.FromEDModel(val); if (ship != null && ship.EDID > 0) { translation = ship.SpokenModel(); } } return(translation); }, 1); // Boolean constants store["true"] = true; store["false"] = false; // Helper functions store["OneOf"] = new NativeFunction((values) => { return(new ScriptResolver(scripts).resolveScript(values[random.Next(values.Count)].AsString, store, false)); }); store["Occasionally"] = new NativeFunction((values) => { if (random.Next((int)values[0].AsNumber) == 0) { return(new ScriptResolver(scripts).resolveScript(values[1].AsString, store, false)); } else { return(""); } }, 2); store["Humanise"] = new NativeFunction((values) => { return(Translations.Humanize(values[0].AsNumber)); }, 1); store["Pause"] = new NativeFunction((values) => { return(@"<break time =""" + values[0].AsNumber + @"ms"" />"); }, 1); // // Commander-specific functions // store["ShipName"] = new NativeFunction((values) => { int?localId = (values.Count == 0 ? (int?)null : (int)values[0].AsNumber); string model = (values.Count == 2 ? values[1].AsString : null); Ship ship = findShip(localId, model); string result = (ship == null ? "your ship" : ship.SpokenName()); return(result); }, 0, 2); store["ShipCallsign"] = new NativeFunction((values) => { int?localId = (values.Count == 0 ? (int?)null : (int)values[0].AsNumber); Ship ship = findShip(localId, null); string result; if (ship != null) { if (EDDI.Instance.Cmdr != null && EDDI.Instance.Cmdr.name != null) { // Obtain the first three characters string chars = new Regex("[^a-zA-Z0-9]").Replace(EDDI.Instance.Cmdr.name, "").ToUpperInvariant().Substring(0, 3); result = ship.SpokenManufacturer() + " " + Translations.CallSign(chars); } else { if (ship.SpokenManufacturer() == null) { result = "unidentified ship"; } else { result = "unidentified " + ship.SpokenManufacturer() + " " + ship.SpokenModel(); } } } else { result = "unidentified ship"; } return(result); }, 0, 1); // // Obtain definition objects for various items // store["SecondsSince"] = new NativeFunction((values) => { long?date = (long?)values[0].AsNumber; if (date == null) { return(null); } long now = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; return(now - date); }, 1); store["ShipDetails"] = new NativeFunction((values) => { Ship result = ShipDefinitions.FromModel(values[0].AsString); return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["CombatRatingDetails"] = new NativeFunction((values) => { CombatRating result = CombatRating.FromName(values[0].AsString); if (result == null) { result = CombatRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["TradeRatingDetails"] = new NativeFunction((values) => { TradeRating result = TradeRating.FromName(values[0].AsString); if (result == null) { result = TradeRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["ExplorationRatingDetails"] = new NativeFunction((values) => { ExplorationRating result = ExplorationRating.FromName(values[0].AsString); if (result == null) { result = ExplorationRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["EmpireRatingDetails"] = new NativeFunction((values) => { EmpireRating result = EmpireRating.FromName(values[0].AsString); if (result == null) { result = EmpireRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["FederationRatingDetails"] = new NativeFunction((values) => { FederationRating result = FederationRating.FromName(values[0].AsString); if (result == null) { result = FederationRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["SystemDetails"] = new NativeFunction((values) => { StarSystem result = StarSystemSqLiteRepository.Instance.GetOrCreateStarSystem(values[0].AsString, true); setSystemDistanceFromHome(result); return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["BodyDetails"] = new NativeFunction((values) => { StarSystem system; if (values.Count == 1) { // Current system system = EDDI.Instance.CurrentStarSystem; } else { // Named system system = StarSystemSqLiteRepository.Instance.GetOrCreateStarSystem(values[1].AsString, true); } Body result = system != null && system.bodies != null ? system.bodies.FirstOrDefault(v => v.name == values[0].AsString) : null; if (result != null && result.type == "Star" && result.chromaticity == null) { // Need to set our internal extras for the star result.setStellarExtras(); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1, 2); store["StationDetails"] = new NativeFunction((values) => { if (values.Count == 0) { return(null); } StarSystem system; if (values.Count == 1) { // Current system system = EDDI.Instance.CurrentStarSystem; } else { // Named system system = StarSystemSqLiteRepository.Instance.GetOrCreateStarSystem(values[1].AsString, true); } Station result = system != null && system.stations != null ? system.stations.FirstOrDefault(v => v.name == values[0].AsString) : null; return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1, 2); store["SuperpowerDetails"] = new NativeFunction((values) => { Superpower result = Superpower.FromName(values[0].AsString); if (result == null) { result = Superpower.From(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["StateDetails"] = new NativeFunction((values) => { State result = State.FromName(values[0].AsString); if (result == null) { result = State.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["EconomyDetails"] = new NativeFunction((values) => { Economy result = Economy.FromName(values[0].AsString); if (result == null) { result = Economy.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["GovernmentDetails"] = new NativeFunction((values) => { Government result = Government.FromName(values[0].AsString); if (result == null) { result = Government.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["SecurityLevelDetails"] = new NativeFunction((values) => { SecurityLevel result = SecurityLevel.FromName(values[0].AsString); if (result == null) { result = SecurityLevel.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["MaterialDetails"] = new NativeFunction((values) => { Material result = Material.FromName(values[0].AsString); if (result == null) { result = Material.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["Distance"] = new NativeFunction((values) => { return((decimal)Math.Round(Math.Sqrt(Math.Pow((double)(values[0].AsNumber - values[3].AsNumber), 2) + Math.Pow((double)(values[1].AsNumber - values[4].AsNumber), 2) + Math.Pow((double)(values[2].AsNumber - values[5].AsNumber), 2)), 2)); }, 6); store["SetState"] = new NativeFunction((values) => { string name = values[0].AsString.ToLowerInvariant().Replace(" ", "_"); Cottle.Value value = values[1]; if (value.Type == Cottle.ValueContent.Boolean) { EDDI.Instance.State[name] = value.AsBoolean; store["state"] = buildState(); } else if (value.Type == Cottle.ValueContent.Number) { EDDI.Instance.State[name] = value.AsNumber; store["state"] = buildState(); } else if (value.Type == Cottle.ValueContent.String) { EDDI.Instance.State[name] = value.AsString; store["state"] = buildState(); } // Ignore other possibilities return(""); }, 2); // Variables foreach (KeyValuePair <string, Cottle.Value> entry in vars) { store[entry.Key] = entry.Value; } return(store); }
/// <summary> /// Build a store from a list of variables /// </summary> private BuiltinStore buildStore(Dictionary <string, Cottle.Value> vars) { BuiltinStore store = new BuiltinStore(); // TODO fetch this from configuration bool useICAO = SpeechServiceConfiguration.FromFile().EnableIcao; // Function to call another script store["F"] = new NativeFunction((values) => { return(new ScriptResolver(scripts).resolve(values[0].AsString, store, false)); }, 1); // Translation functions store["P"] = new NativeFunction((values) => { string val = values[0].AsString; string translation = val; if (translation == val) { translation = Translations.Body(val, useICAO); } if (translation == val) { translation = Translations.StarSystem(val, useICAO); } if (translation == val) { translation = Translations.Faction(val); } if (translation == val) { translation = Translations.Power(val); } if (translation == val) { Ship ship = ShipDefinitions.FromModel(val); if (ship != null && ship.EDID > 0) { translation = ship.SpokenModel(); } } if (translation == val) { Ship ship = ShipDefinitions.FromEDModel(val); if (ship != null && ship.EDID > 0) { translation = ship.SpokenModel(); } } return(translation); }, 1); // Boolean constants store["true"] = true; store["false"] = false; // Helper functions store["OneOf"] = new NativeFunction((values) => { return(new ScriptResolver(scripts).resolveScript(values[random.Next(values.Count)].AsString, store, false)); }); store["Occasionally"] = new NativeFunction((values) => { if (random.Next((int)values[0].AsNumber) == 0) { return(new ScriptResolver(scripts).resolveScript(values[1].AsString, store, false)); } else { return(""); } }, 2); store["Humanise"] = new NativeFunction((values) => { return(Translations.Humanize(values[0].AsNumber)); }, 1); store["List"] = new NativeFunction((values) => { string output = String.Empty; const string localisedAnd = "and"; if (values.Count == 1) { foreach (KeyValuePair <Cottle.Value, Cottle.Value> value in values[0].Fields) { string valueString = value.Value.ToString(); if (value.Key == 0) { output = valueString; } else if (value.Key < (values[0].Fields.Count - 1)) { output = $"{output}, {valueString}"; } else { output = $"{output}, {localisedAnd} {valueString}"; } } } return(output); }, 1); store["Pause"] = new NativeFunction((values) => { return(@"<break time=""" + values[0].AsNumber + @"ms"" />"); }, 1); store["Play"] = new NativeFunction((values) => { return(@"<audio src=""" + values[0].AsString + @""" />"); }, 1); store["Spacialise"] = new NativeFunction((values) => { string Entree = values[0].AsString; if (Entree == "") { return(""); } string Sortie = ""; string UpperSortie = ""; foreach (char c in Entree) { Sortie = Sortie + c + " "; } UpperSortie = Sortie.ToUpper(); return(UpperSortie); }, 1); store["Emphasize"] = new NativeFunction((values) => { if (values.Count == 1) { return(@"<emphasis level =""strong"">" + values[0].AsString + @"</emphasis>"); } else if (values.Count == 2) { return(@"<emphasis level =""" + values[1].AsString + @""">" + values[0].AsString + @"</emphasis>"); } else { return("The Emphasize function is used improperly. Please review the documentation for correct usage."); } }, 1, 2); store["SpeechPitch"] = new NativeFunction((values) => { string text = values[0].AsString; string pitch = "default"; if (values.Count == 1 || string.IsNullOrEmpty(values[1].AsString)) { return(text); } else if (values.Count == 2) { pitch = values[1].AsString; return(@"<prosody pitch=""" + pitch + @""">" + text + "</prosody>"); } else { return("The SpeechPitch function is used improperly. Please review the documentation for correct usage."); } }, 1, 2); store["SpeechRate"] = new NativeFunction((values) => { string text = values[0].AsString; string rate = "default"; if (values.Count == 1 || string.IsNullOrEmpty(values[1].AsString)) { return(text); } else if (values.Count == 2) { rate = values[1].AsString; return(@"<prosody rate=""" + rate + @""">" + text + "</prosody>"); } else { return("The SpeechRate function is used improperly. Please review the documentation for correct usage."); } }, 1, 2); store["SpeechVolume"] = new NativeFunction((values) => { string text = values[0].AsString; string volume = "default"; if (values.Count == 1 || string.IsNullOrEmpty(values[1].AsString)) { return(text); } else if (values.Count == 2) { volume = values[1].AsString; return(@"<prosody volume=""" + volume + @""">" + text + "</prosody>"); } else { return("The SpeechVolume function is used improperly. Please review the documentation for correct usage."); } }, 1, 2); store["Transmit"] = new NativeFunction((values) => { string text = values[0].AsString; if (values.Count == 1 || string.IsNullOrEmpty(values[1].AsString)) { return(@"<transmit>" + values[0].AsString + "</transmit>"); // This is a synthetic tag used to signal to the speech service that radio effects should be enabled. } else { return("The Transmit function is used improperly. Please review the documentation for correct usage."); } }, 1); store["StartsWithVowel"] = new NativeFunction((values) => { string Entree = values[0].AsString; if (Entree == "") { return(""); } char[] vowels = { 'a', 'à', 'â', 'ä', 'e', 'ê', 'é', 'è', 'ë', 'i', 'î', 'ï', 'o', 'ô', 'ö', 'u', 'ù', 'û', 'ü', 'œ', 'y' }; char firstCharacter = Entree.ToLower().ToCharArray().ElementAt(0); Boolean result = vowels.Contains(firstCharacter); return(result); }, 1); store["Voice"] = new NativeFunction((values) => { string text = values[0].AsString; string voice = values[1].AsString; if (values.Count == 2) { return(@"<voice name=""" + voice + @""">" + text + "</voice>"); } else { return("The Voice function is used improperly. Please review the documentation for correct usage."); } }, 1, 2); // // Commander-specific functions // store["ShipName"] = new NativeFunction((values) => { int?localId = (values.Count == 0 ? (int?)null : (int)values[0].AsNumber); string model = (values.Count == 2 ? values[1].AsString : null); Ship ship = findShip(localId, model); string result = (ship == null ? "your ship" : ship.SpokenName()); return(result); }, 0, 2); store["ShipCallsign"] = new NativeFunction((values) => { int?localId = (values.Count == 0 ? (int?)null : (int)values[0].AsNumber); Ship ship = findShip(localId, null); string result; if (ship != null) { if (EDDI.Instance.Cmdr != null && EDDI.Instance.Cmdr.name != null) { // Obtain the first three characters string chars = new Regex("[^a-zA-Z0-9]").Replace(EDDI.Instance.Cmdr.name, "").ToUpperInvariant().Substring(0, 3); result = ship.SpokenManufacturer() + " " + Translations.ICAO(chars); } else { if (ship.SpokenManufacturer() == null) { result = "unidentified ship"; } else { result = "unidentified " + ship.SpokenManufacturer() + " " + ship.SpokenModel(); } } } else { result = "unidentified ship"; } return(result); }, 0, 1); // // Obtain definition objects for various items // store["SecondsSince"] = new NativeFunction((values) => { long?date = (long?)values[0].AsNumber; if (date == null) { return(null); } long?now = (long?)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc))).TotalSeconds; return(now - date); }, 1); store["ICAO"] = new NativeFunction((values) => { // Turn a string in to an ICAO definition string value = values[0].AsString; if (value == null || value == "") { return(""); } // Remove anything that isn't alphanumeric Logging.Warn("value is " + value); value = value.ToUpperInvariant().Replace("[^A-Z0-9]", ""); Logging.Warn("value is " + value); // Translate to ICAO return(Translations.ICAO(value)); }, 1); store["ShipDetails"] = new NativeFunction((values) => { Ship result = ShipDefinitions.FromModel(values[0].AsString); return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["CombatRatingDetails"] = new NativeFunction((values) => { CombatRating result = CombatRating.FromName(values[0].AsString); if (result == null) { result = CombatRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["TradeRatingDetails"] = new NativeFunction((values) => { TradeRating result = TradeRating.FromName(values[0].AsString); if (result == null) { result = TradeRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["ExplorationRatingDetails"] = new NativeFunction((values) => { ExplorationRating result = ExplorationRating.FromName(values[0].AsString); if (result == null) { result = ExplorationRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["EmpireRatingDetails"] = new NativeFunction((values) => { EmpireRating result = EmpireRating.FromName(values[0].AsString); if (result == null) { result = EmpireRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["FederationRatingDetails"] = new NativeFunction((values) => { FederationRating result = FederationRating.FromName(values[0].AsString); if (result == null) { result = FederationRating.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["SystemDetails"] = new NativeFunction((values) => { StarSystem result = StarSystemSqLiteRepository.Instance.GetOrCreateStarSystem(values[0].AsString, true); setSystemDistanceFromHome(result); return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["BodyDetails"] = new NativeFunction((values) => { StarSystem system; if (values.Count == 1 || string.IsNullOrEmpty(values[1].AsString)) { // Current system system = EDDI.Instance.CurrentStarSystem; } else { // Named system system = StarSystemSqLiteRepository.Instance.GetOrCreateStarSystem(values[1].AsString, true); } Body result = system != null && system.bodies != null ? system.bodies.FirstOrDefault(v => v.name == values[0].AsString) : null; if (result != null && result.type == "Star" && result.chromaticity == null) { // Need to set our internal extras for the star result.setStellarExtras(); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1, 2); store["StationDetails"] = new NativeFunction((values) => { if (values.Count == 0) { return(null); } StarSystem system; if (values.Count == 1) { // Current system system = EDDI.Instance.CurrentStarSystem; } else { // Named system system = StarSystemSqLiteRepository.Instance.GetOrCreateStarSystem(values[1].AsString, true); } Station result = system != null && system.stations != null ? system.stations.FirstOrDefault(v => v.name == values[0].AsString) : null; return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1, 2); store["SuperpowerDetails"] = new NativeFunction((values) => { Superpower result = Superpower.FromName(values[0].AsString); if (result == null) { result = Superpower.From(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["StateDetails"] = new NativeFunction((values) => { SystemState result = SystemState.FromName(values[0].AsString); if (result == null) { result = SystemState.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["EconomyDetails"] = new NativeFunction((values) => { Economy result = Economy.FromName(values[0].AsString); if (result == null) { result = Economy.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["GovernmentDetails"] = new NativeFunction((values) => { Government result = Government.FromName(values[0].AsString); if (result == null) { result = Government.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["SecurityLevelDetails"] = new NativeFunction((values) => { SecurityLevel result = SecurityLevel.FromName(values[0].AsString); if (result == null) { result = SecurityLevel.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["MaterialDetails"] = new NativeFunction((values) => { if (string.IsNullOrEmpty(values[0].AsString)) { return(new ReflectionValue(new object())); } Material result = Material.FromName(values[0].AsString); if (result == null) { result = Material.FromEDName(values[0].AsString); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["CommodityMarketDetails"] = new NativeFunction((values) => { CommodityMarketQuote result = null; CommodityMarketQuote CommodityDetails(string commodityLocalizedName, Station station) { return(station?.commodities?.FirstOrDefault(c => c.localizedName == commodityLocalizedName)); } if (values.Count == 1) { // Named commodity, current station Station station = EDDI.Instance.CurrentStation; result = CommodityDetails(values[0].AsString, station); } else if (values.Count == 2) { // Named commodity, named station, current system StarSystem system = EDDI.Instance.CurrentStarSystem; string stationName = values[1].AsString; Station station = system?.stations?.FirstOrDefault(v => v.name == stationName); result = CommodityDetails(values[0].AsString, station); } else if (values.Count == 3) { // Named commodity, named station, named system StarSystem system = DataProviderService.GetSystemData(values[2].AsString, null, null, null); string stationName = values[1].AsString; Station station = system?.stations?.FirstOrDefault(v => v.name == stationName); result = CommodityDetails(values[0].AsString, station); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 0, 3); store["CargoDetails"] = new NativeFunction((values) => { Cottle.Value value = values[0]; Cargo result = null; string edname = string.Empty; if (value.Type == Cottle.ValueContent.String) { edname = CommodityDefinition.FromName(value.AsString).edname; result = ((CargoMonitor)EDDI.Instance.ObtainMonitor("Cargo monitor")).GetCargoWithEDName(edname); } else if (value.Type == Cottle.ValueContent.Number) { result = ((CargoMonitor)EDDI.Instance.ObtainMonitor("Cargo monitor")).GetCargoWithMissionId((long)value.AsNumber); } return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["HaulageDetails"] = new NativeFunction((values) => { HaulageAmount result = null; result = ((CargoMonitor)EDDI.Instance.ObtainMonitor("Cargo monitor")).GetHaulageWithMissionId((long)values[0].AsNumber); return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["BlueprintDetails"] = new NativeFunction((values) => { BlueprintMaterials result = BlueprintMaterials.FromName(values[0].AsString); return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["GalnetNewsArticle"] = new NativeFunction((values) => { News result = GalnetSqLiteRepository.Instance.GetArticle(values[0].AsString); return(result == null ? new ReflectionValue(new object()) : new ReflectionValue(result)); }, 1); store["GalnetNewsArticles"] = new NativeFunction((values) => { List <News> results = null; if (values.Count == 0) { // Obtain all unread articles results = GalnetSqLiteRepository.Instance.GetArticles(); } else if (values.Count == 1) { // Obtain all unread news of a given category results = GalnetSqLiteRepository.Instance.GetArticles(values[0].AsString); } else if (values.Count == 2) { // Obtain all news of a given category results = GalnetSqLiteRepository.Instance.GetArticles(values[0].AsString, values[1].AsBoolean); } return(results == null ? new ReflectionValue(new List <News>()) : new ReflectionValue(results)); }, 0, 2); store["GalnetNewsMarkRead"] = new NativeFunction((values) => { News result = GalnetSqLiteRepository.Instance.GetArticle(values[0].AsString); if (result != null) { GalnetSqLiteRepository.Instance.MarkRead(result); } return(""); }, 1); store["GalnetNewsMarkUnread"] = new NativeFunction((values) => { News result = GalnetSqLiteRepository.Instance.GetArticle(values[0].AsString); if (result != null) { GalnetSqLiteRepository.Instance.MarkUnread(result); } return(""); }, 1); store["GalnetNewsDelete"] = new NativeFunction((values) => { News result = GalnetSqLiteRepository.Instance.GetArticle(values[0].AsString); if (result != null) { GalnetSqLiteRepository.Instance.DeleteNews(result); } return(""); }, 1); store["Distance"] = new NativeFunction((values) => { return((decimal)Math.Round(Math.Sqrt(Math.Pow((double)(values[0].AsNumber - values[3].AsNumber), 2) + Math.Pow((double)(values[1].AsNumber - values[4].AsNumber), 2) + Math.Pow((double)(values[2].AsNumber - values[5].AsNumber), 2)), 2)); }, 6); store["Log"] = new NativeFunction((values) => { Logging.Info(values[0].AsString); return(""); }, 1); store["SetState"] = new NativeFunction((values) => { string name = values[0].AsString.ToLowerInvariant().Replace(" ", "_"); Cottle.Value value = values[1]; if (value.Type == Cottle.ValueContent.Boolean) { EDDI.Instance.State[name] = value.AsBoolean; store["state"] = buildState(); } else if (value.Type == Cottle.ValueContent.Number) { EDDI.Instance.State[name] = value.AsNumber; store["state"] = buildState(); } else if (value.Type == Cottle.ValueContent.String) { EDDI.Instance.State[name] = value.AsString; store["state"] = buildState(); } // Ignore other possibilities return(""); }, 2); // Variables foreach (KeyValuePair <string, Cottle.Value> entry in vars) { store[entry.Key] = entry.Value; } return(store); }
/// <summary>Get's the table from the CombatRating property.</summary> /// <param name="rating"></param> /// <returns>The combat rating table with 100 values indexed by level - 1</returns> public static float[] GetCRTable(CombatRating rating) { return(Table); }
/// <summary> /// Gets the total modifier of the corresponding CombatRating (in %) /// </summary> public int GetCombatRatingMod( CombatRating combatRating ) { return m_CombatRating[(int)combatRating - 1]; }