def populate(self, seed, system_min, system_max, planet_min, planet_max):
		"""\
		--populate <game> <random seed> <min systems> <max systems> <min planets> <max planets>
		
			Populate a universe with a number of systems and planets.
			The number of systems in the universe is dictated by min/max systems.
			The number of planets per system is dictated by min/max planets.
		"""
		dbconn.use(self.game)
		trans = dbconn.begin()
		try:
			MinisecRuleset.populate(self, seed, system_min, system_max, planet_min, planet_max)

			# Add a random smattering of resources to planets...
			r = random.Random()
			r.seed(int(seed))

			for planetid, time in Object.bytype('tp.server.rules.base.objects.Planet'):
				planet = Object(id=planetid)

				ids = r.sample(range(1, 4), r.randint(0, 3))
				for id in ids:
					planet.resources_add(id, r.randint(0, 10),   Planet.ACCESSABLE)
					planet.resources_add(id, r.randint(0, 100),  Planet.MINABLE)
					planet.resources_add(id, r.randint(0, 1000), Planet.INACCESSABLE)

				planet.save()


			trans.commit()
		except:
			trans.rollback()
			raise
예제 #2
0
	def populate( self, seed, system_min, system_max, planet_min, planet_max ):
		"""
		--populate <game> <random seed> <min systems> <max systems> <min planets> <max planets>
		
			Populate a universe with a number of systems and planets.
			The number of systems in the universe is dictated by min/max systems.
			The number of planets per system is dictated by min/max planets.
		"""
		Ruleset.populate( self, seed, system_min, system_max, planet_min, planet_max )

		Object, ResourceType = self.game.objects.use( 'Object', 'ResourceType' )

		ship_parts_factory = ResourceType.ByName('Ship Parts Factory')

		Minerals	= [ ResourceType.ByName( name ) for name in [ 'Uranium', 'Iron Ore' ] ]
		Growing		= []
		Factories	= []

		for planet in Object.ByType('Planet'):
			# FIXME: Add minerals Iron, Uranium
			mine = False

			for mineral in Minerals:
				# Does this planet have this mineral
				if self.random.random() * 100 > mineral.probability:
					# Add a smattering of minerals 
					planet.resources[ mineral ] = { 'extractable' : self.random( 0, mineral.density ) }

					mine = True

			# Add a mine to each planet which has minerals
			if mine:
				planet.resources[ ResourceType.ByName('Mine') ] = { 'accessible' : 1 }
			
			# FIXME: Add growing resources
			for resource in Growing:
				if self.random.random() * 100 > resource.probability:
					# Add a smattering of breeding grounds
					planet.resources[ ResourceType.ByName('') ] = { 'accessible' : 1 }
					
					# Add a smattering of the same stocks
					planet.resources[ ResourceType.ByName('') ] = { 'extractable' : self.random.randint( 0, resource.density ) }

					# Add 1 fishery/slaughter house to each location

			# FIXME: Add a other industries in random locations
			for factory in Factories:
				pass
예제 #3
0
	def initModel( self ):
		Ruleset.initialise( self )

		ResourceType = self.game.objects.use( 'ResourceType' )

		# Create all the resources, they consist of,
		#  - One resource for each resource specified in resources.csv
		#  - One resource for each factory specified  in prodcon.csv

		ResourceType.FromCSV( os.path.join( self.files, "resources.csv" ) )

		resources = []

		for factory in ProducersConsumers.loadfile(os.path.join(self.files, "prodcon.csv")):
			# FIXME: Make these auto generated resources much nicer...
			# Ignore the special case factories which are also goods.

			r = ResourceType.ByName( factory.name )

			if r is None:
				r = ResourceType(
						name_singular	= factory.name,
						name_plural		= factory.name,
						description		= "",		
						weight			= 1000,
						size			= 1000 )
			else:
				r.description += "\n"

			r.description += "Converts"

			for product in factory.products:
				# FIXME: Should also display if usage of this resource is required to grow....
				r.description += "\n\t%s -> %s" % product

			r.products = factory.products

			resources.append( r )

		Model.add( *resources )
예제 #4
0
	def addPlayer( self, username, password, email = 'Unknown', comment = 'A TimTrader Player' ):
		"""
		Create a Solar System, Planet, and initial Fleet for the player, positioned randomly within the Universe.
		"""
		user, system, planet, fleet = Ruleset.addPlayer( self, username, password, email, comment )

		ResourceType = self.game.objects.use( 'ResourceType' )

		# Get the player's planet object and add the empire capital
		planet.resources = {
				ResourceType.ByName('Header Quarter') : { 'accessible' : 1 },
				ResourceType.ByName('Credit')         : { 'accessible' : 10000 } }

		Model.add( planet )
예제 #5
0
    def populate(self, seed, system_min, system_max, planet_min, planet_max):
        """\
		--populate <game> <random seed> <min systems> <max systems> <min planets> <max planets>
		
			Populate a universe with a number of systems and planets.
			The number of systems in the universe is dictated by min/max systems.
			The number of planets per system is dictated by min/max planets.
		"""
        dbconn.use(self.game)
        trans = dbconn.begin()
        try:
            MinisecRuleset.populate(self, seed, system_min, system_max,
                                    planet_min, planet_max)

            # Add a random smattering of resources to planets...
            r = random.Random()
            r.seed(int(seed))

            for planetid, time in Object.bytype(
                    'tp.server.rules.base.objects.Planet'):
                planet = Object(id=planetid)

                ids = r.sample(range(1, 4), r.randint(0, 3))
                for id in ids:
                    planet.resources_add(id, r.randint(0, 10),
                                         Planet.ACCESSABLE)
                    planet.resources_add(id, r.randint(0, 100), Planet.MINABLE)
                    planet.resources_add(id, r.randint(0, 1000),
                                         Planet.INACCESSABLE)

                planet.save()

            trans.commit()
        except:
            trans.rollback()
            raise
	def player(self, username, password, email='Unknown', comment='A Minisec Player'):
		"""\
		Create a Solar System, Planet, and initial Fleet for the player, positioned randomly within the Universe.
		"""
		dbconn.use(self.game)
	
		trans = dbconn.begin()
		try:
			user, system, planet, fleet = MinisecRuleset.player(self, username, password, email, comment)

			# Get the player's planet object and add the empire capital
			planet.resources_add(10, 1)
			planet.resources_add(11, 1)
			planet.save()

			trans.commit()
		except:
			trans.rollback()
			raise
예제 #7
0
    def player(self,
               username,
               password,
               email='Unknown',
               comment='A Minisec Player'):
        """\
		Create a Solar System, Planet, and initial Fleet for the player, positioned randomly within the Universe.
		"""
        dbconn.use(self.game)

        trans = dbconn.begin()
        try:
            user, system, planet, fleet = MinisecRuleset.player(
                self, username, password, email, comment)

            # Get the player's planet object and add the empire capital
            planet.resources_add(10, 1)
            planet.resources_add(11, 1)
            planet.save()

            trans.commit()
        except:
            trans.rollback()
            raise
	def initialise(self, seed=None):
		"""\
		Minisec 
		"""

		dbconn.use(self.game)

		trans = dbconn.begin()
		try:
			MinisecRuleset.initialise(self)

			reader = csv.DictReader(open(os.path.join(self.files, "resources.csv"), "r"))
			for row in reader:
				r = Resource()
				for name, cell in row.iteritems():
					if cell is '':
						continue
					setattr(r, name, convert(getattr(Resource.table.c, name), cell))

				pprint.pprint(r.__dict__)

				r.insert()


			reader = csv.DictReader(open(os.path.join(self.files, "categories.csv"), "r"))
			for row in reader:
				c = Category()
				for name, cell in row.iteritems():
					setattr(c, name, cell)

				pprint.pprint(c.__dict__)

				c.insert()

			# Create the properties that a design might have
			p = Property()
			p.categories = [Category.byname('Misc')]
			p.name = "speed"
			p.displayname = "Speed"
			p.desc = "The maximum number of parsecs the ship can move each turn."
			p.calculate   = """\
(lambda (design bits) 
	(let ((n (apply + bits)))
		(cons n (string-append (number->string (/ n 1000000)) " kpcs"))))
"""
			p.insert()
 
			p = Property()
			p.categories = [Category.byname('Production')]
			p.name = "cost"
			p.displayname = "Cost"
			p.desc = "The number of components needed to build the ship"
			p.calculate   = """\
(lambda (design bits) 
	(let ((n (apply + bits))) 
		(cons n (string-append (number->string n) " turns")) ) )
"""
			p.insert()
	
			p = Property()
			p.categories = [Category.byname('Combat')]
			p.name = "hp"
			p.displayname = "Hit Points"
			p.desc = "The amount of damage the ship can take."
			p.calculate   = """\
(lambda (design bits) 
	(let ((n (apply + bits))) 
		(cons n (string-append (number->string n) " HP"))))
"""
			p.insert()
	
			p = Property()
			p.categories = [Category.byname('Combat')]
			p.name = "backup-damage"
			p.displayname = "Backup Damage"
			p.desc = "The amount of damage that the ship will do when using it's backup weapon. (IE When it draws a battle round.)"
			p.calculate   = """\
(lambda (design bits) 
	(let ((n (apply + bits))) 
		(cons n (string-append (number->string n) " HP"))))
"""
			p.insert()
	
			p = Property()
			p.categories = [Category.byname('Combat')]
			p.name = "primary-damage"
			p.displayname = "Primary Damage"
			p.desc = "The amount of damage that the ship will do when using it's primary weapon. (IE When it wins a battle round.)"
			p.calculate    = """\
(lambda (design bits) 
	(let ((n (apply + bits))) 
		(cons n (string-append (number->string n) " HP"))))
"""
			p.insert()

			p = Property()
			p.categories = [Category.byname('Misc')]
			p.name = "escape"
			p.displayname = "Escape Chance"
			p.desc = "The chance the ship has of escaping from battle."
			p.calculate    = """\
(lambda (design bits) 
	(let ((n (apply + bits))) 
		(cons n (string-append (number->string (* n 100)) " %"))))
"""
			p.insert()

			p = Property()
			p.categories = [Category.byname('Misc')]
			p.name = "colonise"
			p.displayname = "Can Colonise Planets"
			p.desc = "Can the ship colonise planets/"
			p.calculate = """\
(lambda (design bits) 
	(let ((n (apply + bits))) 
		(cons n 
			(if (> n 1) "Yes" "No"))))
"""
			p.insert()

			c = Component()
			c.categories = [Category.byname('Combat')]
			c.name = "Missile"
			c.desc = "Missile which does 1HP of damage."
			c.properties  = {}
			c.properties[Property.byname('primary-damage')] = None
			c.insert()

			c = Component()
			c.categories = [Category.byname('Combat')]
			c.name = "Laser"
			c.desc = "Lasers which do 1HP of damage."
			c.properties  = {}
			c.properties[Property.byname('backup-damage')] = """(lambda (design) 0.25)"""
			c.insert()

			c = Component()
			c.categories = [Category.byname('Combat')]
			c.name = "Armor Plate"
			c.desc = "Armor Plate which absorbes 1HP of damage."
			c.properties  = {}
			c.properties[Property.byname('hp')] = None
			c.insert()

			c = Component()
			c.categories = [Category.byname('Misc')]
			c.name = "Colonisation Pod"
			c.desc = "A part which allows a ship to colonise a planet."
			c.properties  = {}
			c.properties[Property.byname('colonise')] = None
			c.insert()

			c = Component()
			c.categories = [Category.byname('Misc')]
			c.name = "Escape Thrusters"
			c.desc = "A part which allows a ship to escape combat."
			c.properties  = {}
			c.properties[Property.byname('escape')] = """(lambda (design) 0.25)"""
			c.insert()

			c = Component()
			c.categories = [Category.byname('Misc')]
			c.name = "Primary Engine"
			c.desc = "A part which allows a ship to move through space."
			c.properties  = {}
			c.properties[Property.byname('speed')] = """(lambda (design) 1000000)"""
			c.insert()

			d = Design()
			d.name  = "Scout"
			d.desc  = "A fast light ship with advanced sensors."
			d.owner = -1
			d.categories = [Category.byname('Misc')]
			d.components = []
			d.components.append((Component.byname('Escape Thrusters'), 4))
			d.components.append((Component.byname('Armor Plate'),      2))
			d.components.append((Component.byname('Primary Engine'),   5))
			d.insert()
	
			d = Design()
			d.name  = "Frigate"
			d.desc  = "A general purpose ship with weapons and ability to colonise new planets."
			d.owner = -1
			d.categories = [Category.byname('Misc')]
			d.components = []
			d.components.append((Component.byname('Armor Plate'),      4))
			d.components.append((Component.byname('Primary Engine'),   2))
			d.components.append((Component.byname('Colonisation Pod'), 1))
			d.components.append((Component.byname('Missile'),          2))
			d.insert()

			d = Design()
			d.name  = "Battleship"
			d.desc  = "A heavy ship who's main purpose is to blow up other ships."
			d.owner = -1
			d.categories = [Category.byname('Misc')]
			d.components = []
			d.components.append((Component.byname('Armor Plate'),      6))
			d.components.append((Component.byname('Primary Engine'),   3))
			d.components.append((Component.byname('Missile'),          3))
			d.components.append((Component.byname('Laser'),            4))
			d.insert()

			trans.commit()
		except:
			trans.rollback()
			raise


		# FIXME: Need to populate the database with the MiniSec design stuff,
		#  - Firepower
		#  - Armor/HP
		#  - Speed
		#  - Sensors (scouts ability to disappear)....
		pass
예제 #9
0
    def initialise(self, seed=None):
        """\
		Minisec 
		"""

        dbconn.use(self.game)

        trans = dbconn.begin()
        try:
            MinisecRuleset.initialise(self)

            reader = csv.DictReader(
                open(os.path.join(self.files, "resources.csv"), "r"))
            for row in reader:
                r = Resource()
                for name, cell in row.iteritems():
                    if cell is '':
                        continue
                    setattr(r, name,
                            convert(getattr(Resource.table.c, name), cell))

                pprint.pprint(r.__dict__)

                r.insert()

            reader = csv.DictReader(
                open(os.path.join(self.files, "categories.csv"), "r"))
            for row in reader:
                c = Category()
                for name, cell in row.iteritems():
                    setattr(c, name, cell)

                pprint.pprint(c.__dict__)

                c.insert()

            # Create the properties that a design might have
            p = Property()
            p.categories = [Category.byname('Misc')]
            p.name = "speed"
            p.displayname = "Speed"
            p.desc = "The maximum number of parsecs the ship can move each turn."
            p.calculate = """\
(lambda (design bits) 
	(let ((n (apply + bits)))
		(cons n (string-append (number->string (/ n 1000000)) " kpcs"))))
"""
            p.insert()

            p = Property()
            p.categories = [Category.byname('Production')]
            p.name = "cost"
            p.displayname = "Cost"
            p.desc = "The number of components needed to build the ship"
            p.calculate = """\
(lambda (design bits) 
	(let ((n (apply + bits))) 
		(cons n (string-append (number->string n) " turns")) ) )
"""
            p.insert()

            p = Property()
            p.categories = [Category.byname('Combat')]
            p.name = "hp"
            p.displayname = "Hit Points"
            p.desc = "The amount of damage the ship can take."
            p.calculate = """\
(lambda (design bits) 
	(let ((n (apply + bits))) 
		(cons n (string-append (number->string n) " HP"))))
"""
            p.insert()

            p = Property()
            p.categories = [Category.byname('Combat')]
            p.name = "backup-damage"
            p.displayname = "Backup Damage"
            p.desc = "The amount of damage that the ship will do when using it's backup weapon. (IE When it draws a battle round.)"
            p.calculate = """\
(lambda (design bits) 
	(let ((n (apply + bits))) 
		(cons n (string-append (number->string n) " HP"))))
"""
            p.insert()

            p = Property()
            p.categories = [Category.byname('Combat')]
            p.name = "primary-damage"
            p.displayname = "Primary Damage"
            p.desc = "The amount of damage that the ship will do when using it's primary weapon. (IE When it wins a battle round.)"
            p.calculate = """\
(lambda (design bits) 
	(let ((n (apply + bits))) 
		(cons n (string-append (number->string n) " HP"))))
"""
            p.insert()

            p = Property()
            p.categories = [Category.byname('Misc')]
            p.name = "escape"
            p.displayname = "Escape Chance"
            p.desc = "The chance the ship has of escaping from battle."
            p.calculate = """\
(lambda (design bits) 
	(let ((n (apply + bits))) 
		(cons n (string-append (number->string (* n 100)) " %"))))
"""
            p.insert()

            p = Property()
            p.categories = [Category.byname('Misc')]
            p.name = "colonise"
            p.displayname = "Can Colonise Planets"
            p.desc = "Can the ship colonise planets/"
            p.calculate = """\
(lambda (design bits) 
	(let ((n (apply + bits))) 
		(cons n 
			(if (> n 1) "Yes" "No"))))
"""
            p.insert()

            c = Component()
            c.categories = [Category.byname('Combat')]
            c.name = "Missile"
            c.desc = "Missile which does 1HP of damage."
            c.properties = {}
            c.properties[Property.byname('primary-damage')] = None
            c.insert()

            c = Component()
            c.categories = [Category.byname('Combat')]
            c.name = "Laser"
            c.desc = "Lasers which do 1HP of damage."
            c.properties = {}
            c.properties[Property.byname(
                'backup-damage')] = """(lambda (design) 0.25)"""
            c.insert()

            c = Component()
            c.categories = [Category.byname('Combat')]
            c.name = "Armor Plate"
            c.desc = "Armor Plate which absorbes 1HP of damage."
            c.properties = {}
            c.properties[Property.byname('hp')] = None
            c.insert()

            c = Component()
            c.categories = [Category.byname('Misc')]
            c.name = "Colonisation Pod"
            c.desc = "A part which allows a ship to colonise a planet."
            c.properties = {}
            c.properties[Property.byname('colonise')] = None
            c.insert()

            c = Component()
            c.categories = [Category.byname('Misc')]
            c.name = "Escape Thrusters"
            c.desc = "A part which allows a ship to escape combat."
            c.properties = {}
            c.properties[Property.byname(
                'escape')] = """(lambda (design) 0.25)"""
            c.insert()

            c = Component()
            c.categories = [Category.byname('Misc')]
            c.name = "Primary Engine"
            c.desc = "A part which allows a ship to move through space."
            c.properties = {}
            c.properties[Property.byname(
                'speed')] = """(lambda (design) 1000000)"""
            c.insert()

            d = Design()
            d.name = "Scout"
            d.desc = "A fast light ship with advanced sensors."
            d.owner = -1
            d.categories = [Category.byname('Misc')]
            d.components = []
            d.components.append((Component.byname('Escape Thrusters'), 4))
            d.components.append((Component.byname('Armor Plate'), 2))
            d.components.append((Component.byname('Primary Engine'), 5))
            d.insert()

            d = Design()
            d.name = "Frigate"
            d.desc = "A general purpose ship with weapons and ability to colonise new planets."
            d.owner = -1
            d.categories = [Category.byname('Misc')]
            d.components = []
            d.components.append((Component.byname('Armor Plate'), 4))
            d.components.append((Component.byname('Primary Engine'), 2))
            d.components.append((Component.byname('Colonisation Pod'), 1))
            d.components.append((Component.byname('Missile'), 2))
            d.insert()

            d = Design()
            d.name = "Battleship"
            d.desc = "A heavy ship who's main purpose is to blow up other ships."
            d.owner = -1
            d.categories = [Category.byname('Misc')]
            d.components = []
            d.components.append((Component.byname('Armor Plate'), 6))
            d.components.append((Component.byname('Primary Engine'), 3))
            d.components.append((Component.byname('Missile'), 3))
            d.components.append((Component.byname('Laser'), 4))
            d.insert()

            trans.commit()
        except:
            trans.rollback()
            raise

        # FIXME: Need to populate the database with the MiniSec design stuff,
        #  - Firepower
        #  - Armor/HP
        #  - Speed
        #  - Sensors (scouts ability to disappear)....
        pass