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
Example #2
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
Example #3
0
    def initialise(self, seed=None):
        """\
		TIM Trader
		"""
        trans = dbconn.begin()
        try:
            RulesetBase.initialise(self)

            # Need to create the top level universe object...
            universe = Object(type='tp.server.rules.base.objects.Universe')
            universe.id = 0
            universe.name = "The Universe"
            universe.size = SIZE
            universe.parent = 0
            universe.posx = 0
            universe.posy = 0
            universe.turn = 0
            universe.insert()

            # 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
            reader = csv.DictReader(
                open(os.path.join(self.files, "resources.csv"), "r"))
            for row in reader:
                if row['namesingular'] is '':
                    continue

                r = Resource()
                for name, cell in row.iteritems():
                    if cell is '':
                        continue
                    try:
                        setattr(r, name,
                                convert(getattr(Resource.table.c, name), cell))
                    except AttributeError, e:
                        # FIXME: These shouldn't really occur...
                        pass

                r.transportable = bool(row['transportable'])

                r.insert()

            import ProducersConsumers
            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.
                try:
                    r = Resource(Resource.byname(factory.name))
                    r.desc += "\n"
                except NoSuch:
                    r = Resource()
                    r.namesingular = factory.name
                    r.nameplural = factory.name
                    r.desc = ""
                    r.weight = 1000
                    r.size = 1000

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

                r.products = factory.products
                r.save()

            trans.commit()
	def initialise(self, seed=None):
		"""\
		TIM Trader
		"""
		trans = dbconn.begin()
		try:
			RulesetBase.initialise(self)

			# Need to create the top level universe object...
			universe = Object(type='tp.server.rules.base.objects.Universe')
			universe.id     = 0
			universe.name   = "The Universe"
			universe.size   = SIZE
			universe.parent = 0
			universe.posx   = 0
			universe.posy   = 0
			universe.turn   = 0
			universe.insert()

			# 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
			reader = csv.DictReader(open(os.path.join(self.files, "resources.csv"), "r"))
			for row in reader:
				if row['namesingular'] is '':
					continue

				r = Resource()
				for name, cell in row.iteritems():
					if cell is '':
						continue
					try:
						setattr(r, name, convert(getattr(Resource.table.c, name), cell))
					except AttributeError, e:
						# FIXME: These shouldn't really occur...
						pass

				r.transportable = bool(row['transportable'])

				r.insert()

			import ProducersConsumers
			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.
				try:
					r = Resource(Resource.byname(factory.name))
					r.desc += "\n"
				except NoSuch:
					r = Resource()
					r.namesingular = factory.name
					r.nameplural   = factory.name
					r.desc         = ""				
					r.weight = 1000
					r.size   = 1000

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

				r.products = factory.products
				r.save()

			trans.commit()