From ea8fc9bd6da0aa3702587a88cc4b458bd4e92474 Mon Sep 17 00:00:00 2001 From: Kevin Gadd Date: Sun, 28 Nov 2010 04:02:48 -0800 Subject: [PATCH] Split the functions exported by Common into child modules Updated scripts to use new common module structure Initial work on WeaponHelper module --- ActiveTanker/activetanker.py | 106 +----- AutoTargeter/AutoTargeterConfig.Designer.cs | 25 +- AutoTargeter/AutoTargeterConfig.cs | 1 + AutoTargeter/autotargeter.py | 27 +- .../BroadcastHelperConfig.Designer.cs | 67 +++- BroadcastHelper/BroadcastHelperConfig.cs | 3 +- BroadcastHelper/broadcasthelper.py | 28 +- Common/Common.cs | 8 +- Common/Common.csproj | 14 + Common/common.eve.charmonitor.py | 37 +++ Common/common.eve.logger.py | 55 ++++ Common/common.eve.py | 283 ++++++++++++++++ Common/common.py | 310 +----------------- Common/common.service.py | 60 ++++ DroneHelper/dronehelper.py | 9 +- EnemyPrioritizer/enemyprioritizer.py | 22 +- Python/sessiontimer.py | 7 +- ShootBluesScripts.sln | 6 + TargetColors/targetcolors.py | 11 +- WeaponHelper/Properties/AssemblyInfo.cs | 36 ++ WeaponHelper/WeaponHelper.cs | 78 +++++ WeaponHelper/WeaponHelper.csproj | 85 +++++ WeaponHelper/WeaponHelperConfig.Designer.cs | 43 +++ WeaponHelper/WeaponHelperConfig.cs | 57 ++++ WeaponHelper/WeaponHelperConfig.resx | 120 +++++++ WeaponHelper/weaponhelper.py | 66 ++++ 26 files changed, 1139 insertions(+), 425 deletions(-) create mode 100644 Common/common.eve.charmonitor.py create mode 100644 Common/common.eve.logger.py create mode 100644 Common/common.eve.py create mode 100644 Common/common.service.py create mode 100644 WeaponHelper/Properties/AssemblyInfo.cs create mode 100644 WeaponHelper/WeaponHelper.cs create mode 100644 WeaponHelper/WeaponHelper.csproj create mode 100644 WeaponHelper/WeaponHelperConfig.Designer.cs create mode 100644 WeaponHelper/WeaponHelperConfig.cs create mode 100644 WeaponHelper/WeaponHelperConfig.resx create mode 100644 WeaponHelper/weaponhelper.py diff --git a/ActiveTanker/activetanker.py b/ActiveTanker/activetanker.py index 7beddaf..c9c6a9f 100644 --- a/ActiveTanker/activetanker.py +++ b/ActiveTanker/activetanker.py @@ -1,5 +1,7 @@ import shootblues -from shootblues.common import forceStartService, forceStopService, log, SafeTimer +from shootblues.common import log +from shootblues.common.eve import SafeTimer, findModule, getModuleAttributes, activateModule +from shootblues.common.service import forceStart, forceStop import service import json import base @@ -8,8 +10,7 @@ prefs = {} serviceInstance = None - -ActionThreshold = 20000000L +serviceRunning = False def getPref(key, default): global prefs @@ -73,112 +74,27 @@ def updateHealth(self): self.repairIfNeeded("structure") def repairIfNeeded(self, repairType): - module = self.findModule(repairType) + module = self.findRepairModule(repairType) if module: attributeName = RepairTypes[repairType]["attributeName"] - repairAmount = self.getModuleAttributes(module)[attributeName] + repairAmount = getModuleAttributes(module)[attributeName] threshold = getattr(self, repairType + "Max") - repairAmount current = getattr(self, repairType) if current < threshold: - self.pulseModule(module) + activateModule(module, pulse=True) - def findModule(self, repairType): + def findRepairModule(self, repairType): groupName = RepairTypes.get(repairType, {}).get("groupName", None) if not groupName: log("Invalid repair module type: %r", repairType) return None - shipui = uicore.GetLayer("l_shipui") - godma = eve.LocalSvc("godma") - - if not shipui: - return None - if not getattr(shipui, "sr", None): - return - if not getattr(shipui.sr, "modules", None): - return - - for moduleId, module in shipui.sr.modules.items(): - item = godma.GetItem(moduleId) - if not item: - continue - - if cfg.invgroups.Get(item.groupID).name != groupName: - continue - - if not hasattr(module, "sr"): - continue - - return module - - return None - - def getModuleAttributes(self, module): - moduleInfo = module.sr.moduleInfo - moduleName = cfg.invtypes.Get(moduleInfo.typeID).name - - def_effect = getattr(module, "def_effect", None) - if not def_effect: - log("Module %r has no default effect", moduleName) - return None - - result = {} - - attribs = cfg.dgmtypeattribs.get(moduleInfo.typeID, None) - if not attribs: - return result - - for attrib in attribs: - attribName = cfg.dgmattribs.get(attrib.attributeID, None).attributeName - result[attribName] = attrib.value - - return result - - def pulseModule(self, module): - moduleInfo = module.sr.moduleInfo - moduleName = cfg.invtypes.Get(moduleInfo.typeID).name - - def_effect = getattr(module, "def_effect", None) - if not def_effect: - log("Module %s cannot be activated", moduleName) - return - - if def_effect.isActive: - return - - if module.state == uix.UI_DISABLED: - log("Module %s is disabled", moduleName) - return - - onlineEffect = moduleInfo.effects.get("online", None) - if onlineEffect and not onlineEffect.isActive: - log("Module %s is not online", moduleName) - return - - timestamp = blue.os.GetTime() - if abs(self.__lastAction - timestamp) <= ActionThreshold: - return - - self.__lastAction = timestamp - log("Activating %s", moduleName) - - oldautorepeat = getattr(module, "autorepeat", False) - if oldautorepeat: - # Temporarily disable auto-repeat for this module so that we can just pulse it once - module.SetRepeat(0) - - try: - module.Click() - except Exception, e: - log("Pulsing module %s failed: %r", moduleName, e) - finally: - if oldautorepeat: - module.SetRepeat(oldautorepeat) + return findModule(groupName=groupName) def initialize(): global serviceRunning, serviceInstance serviceRunning = True - serviceInstance = forceStartService("activetanker", ActiveTankerSvc) + serviceInstance = forceStart("activetanker", ActiveTankerSvc) def __unload__(): global serviceRunning, serviceInstance @@ -186,5 +102,5 @@ def __unload__(): serviceInstance.disabled = True serviceInstance = None if serviceRunning: - forceStopService("activetanker") + forceStop("activetanker") serviceRunning = False diff --git a/AutoTargeter/AutoTargeterConfig.Designer.cs b/AutoTargeter/AutoTargeterConfig.Designer.cs index c385f3c..caf438b 100644 --- a/AutoTargeter/AutoTargeterConfig.Designer.cs +++ b/AutoTargeter/AutoTargeterConfig.Designer.cs @@ -24,6 +24,7 @@ partial class AutoTargeterConfig { /// private void InitializeComponent () { this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.TargetFriendlyPlayers = new System.Windows.Forms.CheckBox(); this.TargetNeutralPlayers = new System.Windows.Forms.CheckBox(); this.TargetHostileNPCs = new System.Windows.Forms.CheckBox(); this.TargetHostilePlayers = new System.Windows.Forms.CheckBox(); @@ -40,16 +41,31 @@ partial class AutoTargeterConfig { // this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox1.Controls.Add(this.TargetFriendlyPlayers); this.groupBox1.Controls.Add(this.TargetNeutralPlayers); this.groupBox1.Controls.Add(this.TargetHostileNPCs); this.groupBox1.Controls.Add(this.TargetHostilePlayers); this.groupBox1.Location = new System.Drawing.Point(0, 0); this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(300, 88); + this.groupBox1.Size = new System.Drawing.Size(300, 110); this.groupBox1.TabIndex = 9; this.groupBox1.TabStop = false; this.groupBox1.Text = "What"; // + // TargetFriendlyPlayers + // + this.TargetFriendlyPlayers.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TargetFriendlyPlayers.CheckAlign = System.Drawing.ContentAlignment.MiddleRight; + this.TargetFriendlyPlayers.Location = new System.Drawing.Point(5, 86); + this.TargetFriendlyPlayers.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1); + this.TargetFriendlyPlayers.Name = "TargetFriendlyPlayers"; + this.TargetFriendlyPlayers.Size = new System.Drawing.Size(290, 20); + this.TargetFriendlyPlayers.TabIndex = 12; + this.TargetFriendlyPlayers.Text = "Target Friendly Players"; + this.TargetFriendlyPlayers.UseVisualStyleBackColor = true; + this.TargetFriendlyPlayers.CheckedChanged += new System.EventHandler(this.ValuesChanged); + // // TargetNeutralPlayers // this.TargetNeutralPlayers.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) @@ -101,7 +117,7 @@ partial class AutoTargeterConfig { this.groupBox2.Controls.Add(this.label2); this.groupBox2.Controls.Add(this.ReservedTargetSlots); this.groupBox2.Controls.Add(this.label1); - this.groupBox2.Location = new System.Drawing.Point(0, 94); + this.groupBox2.Location = new System.Drawing.Point(0, 116); this.groupBox2.Name = "groupBox2"; this.groupBox2.Size = new System.Drawing.Size(300, 47); this.groupBox2.TabIndex = 10; @@ -152,9 +168,9 @@ partial class AutoTargeterConfig { this.Controls.Add(this.groupBox1); this.Font = new System.Drawing.Font("MS Reference Sans Serif", 9.75F); this.Margin = new System.Windows.Forms.Padding(0); - this.MinimumSize = new System.Drawing.Size(300, 150); + this.MinimumSize = new System.Drawing.Size(300, 170); this.Name = "AutoTargeterConfig"; - this.Size = new System.Drawing.Size(300, 150); + this.Size = new System.Drawing.Size(300, 170); this.groupBox1.ResumeLayout(false); this.groupBox2.ResumeLayout(false); this.groupBox2.PerformLayout(); @@ -173,5 +189,6 @@ partial class AutoTargeterConfig { private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.NumericUpDown ReservedTargetSlots; + private System.Windows.Forms.CheckBox TargetFriendlyPlayers; } } diff --git a/AutoTargeter/AutoTargeterConfig.cs b/AutoTargeter/AutoTargeterConfig.cs index 92054fc..920d1c2 100644 --- a/AutoTargeter/AutoTargeterConfig.cs +++ b/AutoTargeter/AutoTargeterConfig.cs @@ -22,6 +22,7 @@ public AutoTargeterConfig (AutoTargeter script) Prefs = new IBoundMember[] { BoundMember.New(() => TargetNeutralPlayers.Checked), BoundMember.New(() => TargetHostilePlayers.Checked), + BoundMember.New(() => TargetFriendlyPlayers.Checked), BoundMember.New(() => TargetHostileNPCs.Checked), BoundMember.New(() => ReservedTargetSlots.Value) }; diff --git a/AutoTargeter/autotargeter.py b/AutoTargeter/autotargeter.py index 472af53..07d9f01 100644 --- a/AutoTargeter/autotargeter.py +++ b/AutoTargeter/autotargeter.py @@ -1,5 +1,7 @@ import shootblues -from shootblues.common import forceStartService, forceStopService, log, SafeTimer, MainThreadInvoker, getFlagName, getNamesOfIDs +from shootblues.common import log +from shootblues.common.eve import SafeTimer, MainThreadInvoker, getFlagName, getNamesOfIDs +from shootblues.common.service import forceStart, forceStop import service import uix import json @@ -11,6 +13,7 @@ prefs = {} serviceInstance = None +serviceRunning = False try: from shootblues.enemyprioritizer import getPriority @@ -151,10 +154,17 @@ def filterTargets(self, ids): elif flag == "StandingNeutral": if not getPref("TargetNeutralPlayers", False): continue + elif ((flag == "StandingGood") or + (flag == "StandingHigh") or + (flag == "SameGang") or + (flag == "SameFleet") or + (flag == "Alliance") or + (flag == "SameCorp")): + if not getPref("TargetFriendlyPlayers", False): + continue distance = ballpark.DistanceBetween(eve.session.shipid, id) if distance > maxTargetRange: - log("distance %r > %r", distance, maxTargetRange) continue result.append(id) @@ -260,7 +270,14 @@ def DoBallsAdded(self, lst, **kwargs): (flag == "AtWarCanFight")): self.__potentialTargets.append(slimItem.itemID) elif flag == "StandingNeutral": - self.__potentialTargets.append(slimItem.itemID) + self.__potentialTargets.append(slimItem.itemID) + elif ((flag == "StandingGood") or + (flag == "StandingHigh") or + (flag == "SameGang") or + (flag == "SameFleet") or + (flag == "Alliance") or + (flag == "SameCorp")): + self.__potentialTargets.append(slimItem.itemID) def DoBallRemove(self, ball, slimItem, *args, **kwargs): if slimItem and (slimItem.itemID in self.__potentialTargets): @@ -290,7 +307,7 @@ def OnTarget(self, what, tid=None, reason=None): def initialize(): global serviceRunning, serviceInstance serviceRunning = True - serviceInstance = forceStartService("autotargeter", AutoTargeterSvc) + serviceInstance = forceStart("autotargeter", AutoTargeterSvc) def __unload__(): global serviceRunning, serviceInstance @@ -298,5 +315,5 @@ def __unload__(): serviceInstance.disabled = True serviceInstance = None if serviceRunning: - forceStopService("autotargeter") + forceStop("autotargeter") serviceRunning = False diff --git a/BroadcastHelper/BroadcastHelperConfig.Designer.cs b/BroadcastHelper/BroadcastHelperConfig.Designer.cs index eeba6cb..02421fa 100644 --- a/BroadcastHelper/BroadcastHelperConfig.Designer.cs +++ b/BroadcastHelper/BroadcastHelperConfig.Designer.cs @@ -26,8 +26,13 @@ partial class BroadcastHelperConfig { this.groupBox2 = new System.Windows.Forms.GroupBox(); this.TargetPriorityBoost = new System.Windows.Forms.NumericUpDown(); this.label1 = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.RepPriorityBoost = new System.Windows.Forms.NumericUpDown(); + this.label2 = new System.Windows.Forms.Label(); this.groupBox2.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.TargetPriorityBoost)).BeginInit(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.RepPriorityBoost)).BeginInit(); this.SuspendLayout(); // // groupBox2 @@ -60,6 +65,11 @@ partial class BroadcastHelperConfig { this.TargetPriorityBoost.Name = "TargetPriorityBoost"; this.TargetPriorityBoost.Size = new System.Drawing.Size(37, 23); this.TargetPriorityBoost.TabIndex = 13; + this.TargetPriorityBoost.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); this.TargetPriorityBoost.ValueChanged += new System.EventHandler(this.ValuesChanged); // // label1 @@ -71,18 +81,68 @@ partial class BroadcastHelperConfig { this.label1.TabIndex = 12; this.label1.Text = "Boost Priority By"; // + // groupBox1 + // + this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox1.Controls.Add(this.RepPriorityBoost); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Location = new System.Drawing.Point(0, 53); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(250, 47); + this.groupBox1.TabIndex = 11; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Repair Broadcasts"; + // + // RepPriorityBoost + // + this.RepPriorityBoost.Location = new System.Drawing.Point(126, 17); + this.RepPriorityBoost.Margin = new System.Windows.Forms.Padding(4); + this.RepPriorityBoost.Maximum = new decimal(new int[] { + 9, + 0, + 0, + 0}); + this.RepPriorityBoost.Minimum = new decimal(new int[] { + 9, + 0, + 0, + -2147483648}); + this.RepPriorityBoost.Name = "RepPriorityBoost"; + this.RepPriorityBoost.Size = new System.Drawing.Size(37, 23); + this.RepPriorityBoost.TabIndex = 13; + this.RepPriorityBoost.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.RepPriorityBoost.ValueChanged += new System.EventHandler(this.ValuesChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(6, 19); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(117, 16); + this.label2.TabIndex = 12; + this.label2.Text = "Boost Priority By"; + // // BroadcastHelperConfig // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.Controls.Add(this.groupBox1); this.Controls.Add(this.groupBox2); this.Font = new System.Drawing.Font("MS Reference Sans Serif", 9.75F); this.Margin = new System.Windows.Forms.Padding(0); - this.MinimumSize = new System.Drawing.Size(250, 50); + this.MinimumSize = new System.Drawing.Size(250, 105); this.Name = "BroadcastHelperConfig"; - this.Size = new System.Drawing.Size(250, 50); + this.Size = new System.Drawing.Size(250, 105); this.groupBox2.ResumeLayout(false); this.groupBox2.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.TargetPriorityBoost)).EndInit(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.RepPriorityBoost)).EndInit(); this.ResumeLayout(false); } @@ -92,5 +152,8 @@ partial class BroadcastHelperConfig { private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.Label label1; private System.Windows.Forms.NumericUpDown TargetPriorityBoost; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.NumericUpDown RepPriorityBoost; + private System.Windows.Forms.Label label2; } } diff --git a/BroadcastHelper/BroadcastHelperConfig.cs b/BroadcastHelper/BroadcastHelperConfig.cs index 71456ce..c28e219 100644 --- a/BroadcastHelper/BroadcastHelperConfig.cs +++ b/BroadcastHelper/BroadcastHelperConfig.cs @@ -20,7 +20,8 @@ public BroadcastHelperConfig (BroadcastHelper script) Script = script; Prefs = new IBoundMember[] { - BoundMember.New(() => TargetPriorityBoost.Value) + BoundMember.New(() => TargetPriorityBoost.Value), + BoundMember.New(() => RepPriorityBoost.Value) }; } diff --git a/BroadcastHelper/broadcasthelper.py b/BroadcastHelper/broadcasthelper.py index 0167f87..9545de7 100644 --- a/BroadcastHelper/broadcasthelper.py +++ b/BroadcastHelper/broadcasthelper.py @@ -1,11 +1,16 @@ import shootblues -from shootblues.common import forceStartService, forceStopService, log, getCharacterName +from shootblues.common import log +from shootblues.common.eve import getCharacterName +from shootblues.common.service import forceStart, forceStop import service import uix import json prefs = {} serviceInstance = None +serviceRunning = False + +MaxRepBoosts = 3 try: from shootblues.enemyprioritizer import adjustPriority @@ -38,6 +43,7 @@ class BroadcastHelperSvc(service.Service): def __init__(self): service.Service.__init__(self) self.disabled = False + self.__needReps = [] def OnFleetBroadcast(self, broadcastType, arg1, charID, locationID, targetID): targetName = None @@ -60,18 +66,30 @@ def OnFleetBroadcast(self, broadcastType, arg1, charID, locationID, targetID): if broadcastType == "Target": flashItemColor(targetID, "Broadcast: Target") - adjustPriority(targetID, int(getPref("TargetPriorityBoost", 0))) + adjustPriority(targetID, int(getPref("TargetPriorityBoost", 1))) elif broadcastType == "HealArmor": - flashItemColor(targetID, "Broadcast: Need Armor") + flashItemColor(targetID, "Broadcast: Need Armor") + self.needsReps(targetID) elif broadcastType == "HealShield": flashItemColor(targetID, "Broadcast: Need Shield") + self.needsReps(targetID) elif broadcastType == "HealCapacitor": flashItemColor(targetID, "Broadcast: Need Capacitor") + + def needsReps(self, id): + if id not in self.__needReps: + self.__needReps.append(id) + adjustPriority(id, int(getPref("RepPriorityBoost", 1))) + + while len(self.__needReps) > MaxRepBoosts: + item = self.__needReps[0] + self.__needReps.remove(item) + adjustPriority(item, 0) def initialize(): global serviceRunning, serviceInstance serviceRunning = True - serviceInstance = forceStartService("broadcasthelper", BroadcastHelperSvc) + serviceInstance = forceStart("broadcasthelper", BroadcastHelperSvc) def __unload__(): global serviceRunning, serviceInstance @@ -79,5 +97,5 @@ def __unload__(): serviceInstance.disabled = True serviceInstance = None if serviceRunning: - forceStopService("broadcasthelper") + forceStop("broadcasthelper") serviceRunning = False diff --git a/Common/Common.cs b/Common/Common.cs index 0025ae2..dcdaca2 100644 --- a/Common/Common.cs +++ b/Common/Common.cs @@ -19,6 +19,10 @@ public class Common : ManagedScript { public Common (ScriptName name) : base(name) { AddDependency("common.py"); + AddDependency("common.service.py"); + AddDependency("common.eve.py"); + AddDependency("common.eve.logger.py"); + AddDependency("common.eve.charmonitor.py"); AddDependency("pythonexplorer.py"); CustomMenu = new ToolStripMenuItem("Common"); @@ -204,10 +208,6 @@ public Common (ScriptName name) EventBus.Broadcast(Profile, "RunningProcessChanged", process); } - public void ShowMessageBox (ProcessInfo process, string text) { - MessageBox.Show(text, String.Format("Message from process {0}", process.Process.Id)); - } - public override IEnumerator Reload () { LogPrint(null, "Scripts loaded"); diff --git a/Common/Common.csproj b/Common/Common.csproj index 716f8d9..da2b602 100644 --- a/Common/Common.csproj +++ b/Common/Common.csproj @@ -85,6 +85,9 @@ Always + + Always + Always @@ -100,6 +103,17 @@ SelectModuleDialog.cs + + + Always + + + Always + + + Always + + + \ No newline at end of file diff --git a/WeaponHelper/WeaponHelperConfig.Designer.cs b/WeaponHelper/WeaponHelperConfig.Designer.cs new file mode 100644 index 0000000..2aa7f29 --- /dev/null +++ b/WeaponHelper/WeaponHelperConfig.Designer.cs @@ -0,0 +1,43 @@ +namespace ShootBlues.Script { + partial class WeaponHelperConfig { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose (bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent () { + this.SuspendLayout(); + // + // WeaponHelperConfig + // + this.Font = new System.Drawing.Font("MS Reference Sans Serif", 9.75F); + this.Margin = new System.Windows.Forms.Padding(2); + this.MinimumSize = new System.Drawing.Size(200, 85); + this.Name = "WeaponHelperConfig"; + this.Size = new System.Drawing.Size(300, 300); + this.ResumeLayout(false); + + } + + #endregion + + + } +} diff --git a/WeaponHelper/WeaponHelperConfig.cs b/WeaponHelper/WeaponHelperConfig.cs new file mode 100644 index 0000000..32f5c62 --- /dev/null +++ b/WeaponHelper/WeaponHelperConfig.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using ShootBlues; +using Squared.Util.Bind; +using System.IO; +using Squared.Task; + +namespace ShootBlues.Script { + public partial class WeaponHelperConfig : TaskUserControl, IConfigurationPanel { + IBoundMember[] Prefs; + WeaponHelper Script; + + public WeaponHelperConfig (WeaponHelper script) + : base (Program.Scheduler) { + InitializeComponent(); + Script = script; + + Prefs = new IBoundMember[] { + }; + } + + public string GetMemberName (IBoundMember member) { + return ((Control)member.Target).Name; + } + + public IEnumerator LoadConfiguration () { + var rtc = new RunToCompletion>(Script.GetPreferences()); + yield return rtc; + + var dict = rtc.Result; + object value; + + foreach (var bm in Prefs) + if (dict.TryGetValue(GetMemberName(bm), out value)) + bm.Value = value; + } + + public IEnumerator SaveConfiguration () { + using (var xact = Program.Database.CreateTransaction()) { + yield return xact; + + foreach (var bm in Prefs) + yield return Script.SetPreference(GetMemberName(bm), bm.Value); + + yield return xact.Commit(); + } + } + + private void ValuesChanged (object sender, EventArgs args) { + Start(SaveConfiguration()); + } + } +} diff --git a/WeaponHelper/WeaponHelperConfig.resx b/WeaponHelper/WeaponHelperConfig.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/WeaponHelper/WeaponHelperConfig.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/WeaponHelper/weaponhelper.py b/WeaponHelper/weaponhelper.py new file mode 100644 index 0000000..cf0c858 --- /dev/null +++ b/WeaponHelper/weaponhelper.py @@ -0,0 +1,66 @@ +import shootblues +from shootblues.common import log +from shootblues.common.eve import SafeTimer, getFlagName, getNamesOfIDs +from shootblues.common.service import forceStart, forceStop +import service +import json +import base +import uix +import blue + +prefs = {} +serviceInstance = None + +WeaponGroupNames = [ + "Energy Weapon", "Hybrid Weapon", + "Missile Launcher", "Missile Launcher Assault", + "Missile Launcher Bomb", "Missile Launcher Citadel", + "Missile Launcher Cruise", "Missile Launcher Defender", + "Missile Launcher Heavy", "Missile Launcher Heavy Assault", + "Missile Launcher Rocket", "Missile Launcher Siege", + "Missile Launcher Standard", "Projectile Weapon" +] + +def getPref(key, default): + global prefs + return prefs.get(key, default) + +def notifyPrefsChanged(newPrefsJson): + global prefs + prefs = json.loads(newPrefsJson) + +class WeaponHelperSvc(service.Service): + __guid__ = "svc.weaponhelper" + __update_on_reload__ = 0 + __exportedcalls__ = {} + __notifyevents__ = [ + ] + + def __init__(self): + service.Service.__init__(self) + self.disabled = False + self.__updateTimer = SafeTimer(1000, self.updateWeapons) + self.__lastAction = 0 + + def updateWeapons(self): + if self.disabled: + self.__updateTimer = None + return + + ship = eve.LocalSvc("godma").GetItem(eve.session.shipid) + if not ship: + return + +def initialize(): + global serviceRunning, serviceInstance + serviceRunning = True + serviceInstance = forceStart("weaponhelper", WeaponHelperSvc) + +def __unload__(): + global serviceRunning, serviceInstance + if serviceInstance: + serviceInstance.disabled = True + serviceInstance = None + if serviceRunning: + forceStop("weaponhelper") + serviceRunning = False