From 04c30e70affda4b4adc5de53cd8bc7881ca3a061 Mon Sep 17 00:00:00 2001 From: Indiction Date: Thu, 10 Nov 2016 23:28:21 +0100 Subject: [PATCH 1/2] Fighters for export and import functions --- eos/saveddata/fighter.py | 4 +++ service/port.py | 54 ++++++++++++++++++++++++++++++++-------- 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/eos/saveddata/fighter.py b/eos/saveddata/fighter.py index bc96c5f10..69fbefd62 100644 --- a/eos/saveddata/fighter.py +++ b/eos/saveddata/fighter.py @@ -119,6 +119,10 @@ class Fighter(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): def amountActive(self, i): self.amount = int(max(min(i, self.getModifiedItemAttr("fighterSquadronMaxSize")), 0)) + @property + def fighterSquadronMaxSize(self): + return int(self.getModifiedItemAttr("fighterSquadronMaxSize")) + @property def abilities(self): return self.__abilities or [] diff --git a/service/port.py b/service/port.py index 2a8972dd7..4d66ba374 100644 --- a/service/port.py +++ b/service/port.py @@ -21,7 +21,7 @@ import re import os import xml.dom -from eos.types import State, Slot, Module, Cargo, Fit, Ship, Drone, Implant, Booster, Citadel +from eos.types import State, Slot, Module, Cargo, Fit, Ship, Drone, Implant, Booster, Citadel, Fighter import service import wx import logging @@ -270,6 +270,11 @@ class Port(object): d = Drone(item) d.amount = int(amount) f.drones.append(d) + elif item.category.name == "Fighter": + ft = Fighter(item) + ft.amount = int(amount) if ft.amount <= ft.fighterSquadronMaxSize else ft.fighterSquadronMaxSize + if ft.fits(f): + f.fighters.append(ft) elif item.category.name == "Charge": c = Cargo(item) c.amount = int(amount) @@ -374,7 +379,15 @@ class Port(object): if not modName in droneMap: droneMap[modName] = 0 droneMap[modName] += extraAmount - if len(modExtra) == 2 and item.category.name != "Drone": + elif item.category.name == "Fighter": + extraAmount = int(extraAmount) if extraAmount is not None else 1 + fighterItem = Fighter(item) + if (extraAmount > fighterItem.fighterSquadronMaxSize): #Amount bigger then max fightergroup size + extraAmount = fighterItem.fighterSquadronMaxSize + if fighterItem.fits(fit): + fit.fighters.append(fighterItem) + + if len(modExtra) == 2 and item.category.name != "Drone" and item.category.name != "Fighter": extraAmount = int(extraAmount) if extraAmount is not None else 1 if not modName in cargoMap: cargoMap[modName] = 0 @@ -507,16 +520,21 @@ class Port(object): droneItem = sMkt.getItem(droneName, eager="group.category") except: continue - if droneItem.category.name != "Drone": + if droneItem.category.name == "Drone": + # Add drone to the fitting + d = Drone(droneItem) + d.amount = droneAmount + if entityState == "Active": + d.amountActive = droneAmount + elif entityState == "Inactive": + d.amountActive = 0 + f.drones.append(d) + elif droneItem.category.name == "Fighter": # EFT saves fighter as drones + ft = Fighter(droneItem) + ft.amount = int(droneAmount) if ft.amount <= ft.fighterSquadronMaxSize else ft.fighterSquadronMaxSize + f.fighters.append(ft) + else: continue - # Add drone to the fitting - d = Drone(droneItem) - d.amount = droneAmount - if entityState == "Active": - d.amountActive = droneAmount - elif entityState == "Inactive": - d.amountActive = 0 - f.drones.append(d) elif entityType == "Implant": # Bail if we can't get item or it's not from implant category try: @@ -648,6 +666,10 @@ class Port(object): d = Drone(item) d.amount = int(hardware.getAttribute("qty")) f.drones.append(d) + elif item.category.name == "Fighter": + ft = Fighter(item) + ft.amount = int(hardware.getAttribute("qty")) if ft.amount <= ft.fighterSquadronMaxSize else ft.fighterSquadronMaxSize + f.fighters.append(ft) elif hardware.getAttribute("slot").lower() == "cargo": # although the eve client only support charges in cargo, third-party programs # may support items or "refits" in cargo. Support these by blindly adding all @@ -795,6 +817,9 @@ class Port(object): for drone in fit.drones: dna += ":{0};{1}".format(drone.itemID, drone.amount) + for fighter in fit.fighters: + dna += ":{0};{1}".format(fighter.itemID, fighter.amountActive) + for cargo in fit.cargo: # DNA format is a simple/dumb format. As CCP uses the slot information of the item itself # without designating slots in the DNA standard, we need to make sure we only include @@ -868,6 +893,13 @@ class Port(object): hardware.setAttribute("type", drone.item.name) fitting.appendChild(hardware) + for fighter in fit.fighters: + hardware = doc.createElement("hardware") + hardware.setAttribute("qty", "%d" % fighter.amountActive) + hardware.setAttribute("slot", "fighter bay") + hardware.setAttribute("type", fighter.item.name) + fitting.appendChild(hardware) + for cargo in fit.cargo: if not cargo.item.name in charges: charges[cargo.item.name] = 0 From ab5f3488e7afd8f9c78cd2b8e6ff3e8bfe0c7a2d Mon Sep 17 00:00:00 2001 From: Indiction Date: Sun, 4 Dec 2016 19:56:42 +0100 Subject: [PATCH 2/2] Adding Fighter Support CREST --- service/port.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/service/port.py b/service/port.py index 4d66ba374..9b86dd952 100644 --- a/service/port.py +++ b/service/port.py @@ -46,6 +46,7 @@ INV_FLAGS = { INV_FLAG_CARGOBAY = 5 INV_FLAG_DRONEBAY = 87 +INV_FLAG_FIGHTER = 158 class Port(object): """Service which houses all import/export format functions""" @@ -131,6 +132,15 @@ class Port(object): item['type']['name'] = '' fit['items'].append(item) + for fighter in ofit.fighters: + item = nested_dict() + item['flag'] = INV_FLAG_FIGHTER + item['quantity'] = fighter.amountActive + item['type']['href'] = "%sinventory/types/%d/"%(eve._authed_endpoint, fighter.item.ID) + item['type']['id'] = fighter.item.ID + item['type']['name'] = fighter.item.name + fit['items'].append(item) + return json.dumps(fit) @classmethod @@ -196,6 +206,9 @@ class Port(object): c = Cargo(item) c.amount = module['quantity'] f.cargo.append(c) + elif module['flag'] == INV_FLAG_FIGHTER: + fighter = Fighter(item) + f.fighters.append(fighter) else: try: m = Module(item)