예제 #1
0
파일: edentities.py 프로젝트: sersorrel/edr
 def in_slf(self):
     self._touch()
     if not self.mothership or not self.mothership.supports_slf():
         self.mothership = EDVehicleFactory.unknown_vehicle()
     if not self.slf:
         self.slf = EDVehicleFactory.unknown_slf()
     self.piloted_vehicle = self.slf
예제 #2
0
파일: edentities.py 프로젝트: sersorrel/edr
 def in_srv(self):
     self._touch()
     if not self.mothership or not self.mothership.supports_srv():
         self.mothership = EDVehicleFactory.unknown_vehicle()
     if not self.srv:
         self.srv = EDVehicleFactory.default_srv()
     self.piloted_vehicle = self.srv
예제 #3
0
 def npc(self, name, rank=None, ship_internal_name=None):
     hopefully_unique_name = "{}{}{}".format(name, rank, EDVehicleFactory.canonicalize(ship_internal_name) if ship_internal_name else "")
     if hopefully_unique_name in self.npcs:
         return self.npcs[hopefully_unique_name][u"pilot"]
     if name in self.npc_names_to_npcs:
         return self.npcs[next(iter(self.npc_names_to_npcs[name]))][u"pilot"]
     return None
예제 #4
0
    def swap(self, swap_event, star_system, storing_ship_name):
        if self.db is None:
            return
        if swap_event.get("event", None) != "ShipyardSwap":
            return

        if "SellShipID" in swap_event:
            self.__sold(swap_event["SellShipID"])
        else:
            storing_ship_id = swap_event.get("StoreShipID", None)
            ship_type = swap_event.get("StoreOldShip", None).lower()
            localised = EDVehicleFactory.canonicalize(ship_type)
            market_id = swap_event.get("MarketID", None)
            self.db.execute(
                '''INSERT INTO ships(id, type, localised, name, star_system, ship_market_id, value, hot)
                        VALUES(?,?,?,?,?,?,?,?)''',
                (storing_ship_id, ship_type, localised, storing_ship_name,
                 star_system, market_id, 0, 0))
            self.db.execute('DELETE from transits WHERE ship_id=?',
                            (storing_ship_id, ))

        piloting_ship_id = swap_event.get("ShipID", None)
        self.db.execute(
            'UPDATE ships SET ship_market_id="", star_system="", piloted=1, eta=0 WHERE id=?',
            (piloting_ship_id, ))
        self.db.execute('DELETE from transits WHERE ship_id=?',
                        (piloting_ship_id, ))
        self.db.commit()
예제 #5
0
파일: edentities.py 프로젝트: sersorrel/edr
 def leave_vehicle(self):
     self.mothership = EDVehicleFactory.unknown_vehicle()
     self.piloted_vehicle = self.mothership
     self.slf = None
     self.srv = None
     self.instance.reset()
     self.recon_box.reset()
     self._touch()
예제 #6
0
파일: edentities.py 프로젝트: sersorrel/edr
 def join_crew(self, captain):
     self.wing = EDWing()
     self.instance.reset()
     self.crew = EDRCrew(captain)
     self.crew.add(self.name)
     self.instanced(captain)
     self.mothership = EDVehicleFactory.unknown_vehicle()
     self.piloted_vehicle = self.mothership
     self.slf = None
     self.srv = None
     self._touch()
예제 #7
0
파일: edentities.py 프로젝트: sersorrel/edr
 def instanced(self, cmdr_name, ship_internal_name=None, piloted=True):
     self._touch()
     cmdr = self.instance.player(cmdr_name)
     if not cmdr:
         cmdr = EDPlayer(cmdr_name)
     cmdr.location = self.location
     if ship_internal_name:
         vehicle = EDVehicleFactory.from_internal_name(ship_internal_name)
         cmdr.update_vehicle_if_obsolete(vehicle, piloted)
     self.instance.player_in(cmdr)
     return cmdr
예제 #8
0
 def instanced_npc(self, name, rank=None, ship_internal_name=None, piloted=True):
     self._touch()
     npc = self.instance.npc(name, rank, ship_internal_name)
     if not npc:
         npc = EDPilot(name, rank)
     npc.location = self.location
     if ship_internal_name:
         vehicle = EDVehicleFactory.from_internal_name(ship_internal_name)
         npc.update_vehicle_if_obsolete(vehicle, piloted)
     self.instance.npc_in(npc)
     return npc
예제 #9
0
파일: edentities.py 프로젝트: sersorrel/edr
 def update_vehicle_if_obsolete(self, vehicle, piloted=True):
     if vehicle is None:
         return False
     updated = False
     if EDVehicleFactory.is_ship_launched_fighter(vehicle):
         updated = self.__update_slf_if_obsolete(vehicle)
         if not self.mothership.supports_slf():
             self.mothership = EDVehicleFactory.unknown_vehicle()
         if piloted:
             self.piloted_vehicle = self.slf
     elif EDVehicleFactory.is_surface_vehicle(vehicle):
         updated = self.__update_srv_if_obsolete(vehicle)
         if not self.mothership.supports_srv():
             self.mothership = EDVehicleFactory.unknown_vehicle()
         if piloted:
             self.piloted_vehicle = self.srv
     else:
         updated = self.__update_mothership_if_obsolete(vehicle)
         if piloted:
             self.piloted_vehicle = self.mothership
     if updated:
         self._touch()
     return updated
예제 #10
0
    def targeting(self, pilot, ship_internal_name=None):
        if pilot.is_human():
            self.instance.player_in(pilot)
        else:
            self.instance.npc_in(pilot)

        if self._target:
            self._target.untargeted()
            self._target._touch()
        self._target = pilot
        
        mothership = True
        slf = False
        srv = False
        if ship_internal_name:
            vehicle = EDVehicleFactory.from_internal_name(ship_internal_name)
            slf = EDVehicleFactory.is_ship_launched_fighter(vehicle)
            srv = EDVehicleFactory.is_surface_vehicle(vehicle)
            mothership = not(slf or srv)
        
        pilot.targeted(mothership, slf, srv)
        pilot._touch()
        self._touch()
예제 #11
0
 def npc_out(self, name, ship_internal_name=None, rank=None):
     now = EDTime.py_epoch_now()
     try:
         if ship_internal_name:
             hopefully_unique_name = "{}{}{}".format(name, rank, EDVehicleFactory.canonicalize(ship_internal_name))
             del self.npcs[hopefully_unique_name]
             self.npc_names_to_npcs[name].remove(hopefully_unique_name)
         else:
             for hopefully_unique_name in self.npc_names_to_npcs[name]:
                 del self.npcs[hopefully_unique_name]
             del self.npc_names_to_npcs[name]
             self.timestamp = now
             self._touched = True
     except KeyError:
         pass
예제 #12
0
파일: edentities.py 프로젝트: sersorrel/edr
 def __init__(self, name=None):
     now = EDTime.py_epoch_now()
     self._name = name
     self.mothership = EDVehicleFactory.unknown_vehicle()
     self.piloted_vehicle = self.mothership
     self.srv = None
     self.slf = None
     self.location = EDLocation()
     self.powerplay = EDRPowerplayUnknown()
     self.squadron = None
     self.sqid = None
     self.destroyed = False
     self.wanted = False
     self.enemy = False
     self._bounty = None
     self._fine = None
     self.targeted = False
     self.timestamp = now
예제 #13
0
파일: edentities.py 프로젝트: sersorrel/edr
 def inception(self, genesis=False):
     if genesis:
         self.from_genesis = True
     self.previous_mode = None
     self.previous_wing = set()
     self.wing = EDWing()
     self.crew = None
     self.destroyed = False
     self.target = None
     self.wanted = False
     self.mothership = EDVehicleFactory.unknown_vehicle()
     self.piloted_vehicle = self.mothership
     self.srv = None
     self.slf = None
     self.location = EDLocation()
     self._bounty = None
     self.instance.reset()
     self.to_normal_space()
     self._touch()
     self.reset_mining_stats()
예제 #14
0
    def buy(self, buy_event, star_system, storing_ship_name):
        if self.db is None:
            return
        if buy_event.get("event", None) != "ShipyardBuy":
            return

        market_id = buy_event.get("MarketID", None)
        if buy_event.get("StoreShipID", None):
            storing_ship_id = buy_event["StoreShipID"]
            ship_type = buy_event["StoreOldShip"].lower()
            localised = EDVehicleFactory.canonicalize(ship_type)
            self.db.execute(
                '''INSERT INTO ships(id, type, localised, name, star_system, ship_market_id, value, hot)
                        VALUES(?,?,?,?,?,?,?,?)''',
                (storing_ship_id, ship_type, localised, storing_ship_name,
                 star_system, market_id, 0, 0))
            self.db.execute('DELETE from transits WHERE ship_id=?',
                            (storing_ship_id, ))
            self.db.commit()
        elif buy_event.get("SellShipID", None):
            self.__sold(buy_event["SellShipID"])
예제 #15
0
파일: edentities.py 프로젝트: sersorrel/edr
 def resurrect(self, rebought=True):
     self.game_mode = self.previous_mode
     self.private_group = self.previous_private_group
     self.wing = EDWing(self.previous_wing)
     self.previous_mode = None
     self.previous_wing = set()
     self.destroyed = False
     self.target = None
     self.to_normal_space()
     self.instance.reset()
     self._touch()
     if rebought:
         self.mothership.reset()
         if self.slf:
             self.slf.reset()
         if self.srv:
             self.srv.reset()
     else:
         self.mothership = EDVehicleFactory.unknown_vehicle()
         self.piloted_vehicle = self.mothership
         self.slf = None
         self.srv = None
예제 #16
0
파일: edentities.py 프로젝트: sersorrel/edr
 def in_mothership(self):
     self._touch()
     if not self.mothership:
         self.mothership = EDVehicleFactory.unknown_vehicle()
     self.piloted_vehicle = self.mothership