|
1
|
|
|
#!/usr/bin/env python2 |
|
2
|
|
|
# |
|
3
|
|
|
# Copyright 2001 - 2016 Ludek Smid [http://www.ospace.net/] |
|
4
|
|
|
# |
|
5
|
|
|
# This file is part of Outer Space. |
|
6
|
|
|
# |
|
7
|
|
|
# Outer Space is free software; you can redistribute it and/or modify |
|
8
|
|
|
# it under the terms of the GNU General Public License as published by |
|
9
|
|
|
# the Free Software Foundation; either version 2 of the License, or |
|
10
|
|
|
# (at your option) any later version. |
|
11
|
|
|
# |
|
12
|
|
|
# Outer Space is distributed in the hope that it will be useful, |
|
13
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
14
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
15
|
|
|
# GNU General Public License for more details. |
|
16
|
|
|
# |
|
17
|
|
|
# You should have received a copy of the GNU General Public License |
|
18
|
|
|
# along with Outer Space; if not, write to the Free Software |
|
19
|
|
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
|
20
|
|
|
# |
|
21
|
|
|
|
|
22
|
|
|
# tweak PYTHONPATH |
|
23
|
|
|
import sys, string, re |
|
24
|
|
|
import os |
|
25
|
|
|
from optparse import OptionParser |
|
26
|
|
|
baseDir = os.path.abspath(os.path.dirname(__file__)) |
|
27
|
|
|
sys.path.insert(0, os.path.join(baseDir, '..', 'server', "lib")) |
|
28
|
|
|
|
|
29
|
|
|
from igeclient.IClient import IClient |
|
30
|
|
|
import pprint, traceback |
|
31
|
|
|
from getpass import getpass |
|
32
|
|
|
from code import InteractiveConsole |
|
33
|
|
|
from ige.ospace import Const |
|
34
|
|
|
import time |
|
35
|
|
|
|
|
36
|
|
|
#not race specific: |
|
37
|
|
|
levelTechs = {1: [ |
|
38
|
|
|
1000, 1100, 1101, 1102, 1104, 1106, 1107, 1110, 1112, |
|
39
|
|
|
1400, 1401, 1402, 1403, 1404, |
|
40
|
|
|
1500, 1510, 1511, |
|
41
|
|
|
1800, 1801, 1802, 1803, |
|
42
|
|
|
], |
|
43
|
|
|
2: [ |
|
44
|
|
|
1105, 1111, |
|
45
|
|
|
2001, 2006, |
|
46
|
|
|
2400, 2401, 2403, 2404, 2405, 2406, 2407, 2408, 2409, |
|
47
|
|
|
2800, 2801, 2802, 2803, |
|
48
|
|
|
], |
|
49
|
|
|
3: [ |
|
50
|
|
|
3000, 3010, 3013, |
|
51
|
|
|
3401, 3402, 3403, 3404, 3405, 3406, 3407, 3409, 3410, |
|
52
|
|
|
3450, 3451, |
|
53
|
|
|
3800, 3802, |
|
54
|
|
|
], |
|
55
|
|
|
4: [ |
|
56
|
|
|
4000, 4004, 4005, |
|
57
|
|
|
], |
|
58
|
|
|
5: [ |
|
59
|
|
|
5000, 5001, 5002, |
|
60
|
|
|
5800, 5801, 5802, 5803, |
|
61
|
|
|
], |
|
62
|
|
|
6: [ |
|
63
|
|
|
6000, 6001, 6005, 6025, |
|
64
|
|
|
], |
|
65
|
|
|
99: [ |
|
66
|
|
|
99001, 99002, 99003, 99004, |
|
67
|
|
|
]} |
|
68
|
|
|
|
|
69
|
|
|
#race specific: |
|
70
|
|
|
levelTechsRaces = { |
|
71
|
|
|
1: {'B': [], 'H': [], 'C': []}, |
|
72
|
|
|
2: { |
|
73
|
|
|
'B': [2003, 2005, 2007, 2804, 2805], |
|
74
|
|
|
'H': [2000, 2004], |
|
75
|
|
|
'C': [2002, 2004]}, |
|
76
|
|
|
3: { |
|
77
|
|
|
'B': [3001, 3003, 3007, 3008, 3412, 3420, 3421, 3452, 3454, 3803, ], |
|
78
|
|
|
'H': [3002, 3004, 3006, 3009, 3408, 3411, 3453, 3455, 3803, ], |
|
79
|
|
|
'C': [3001, 3005, 3006, 3411, 3453, 3456, ]}, |
|
80
|
|
|
4: { |
|
81
|
|
|
'B': [4003, 4006, 4008, 4400, 4401, 4402, 4403, 4404, 4405, 4406, 4458, 4460, 4476, 4502, 4504, ], |
|
82
|
|
|
'H': [4002, 4007, 4008, 4009, 4010, 4407, 4408, 4409, 4410, 4411, 4412, 4413, 4459, 4461, 4477, 4479, 4480, 4500, 4503, ], |
|
83
|
|
|
'C': [4001, 4006, 4007, 4414, 4415, 4416, 4417, 4418, 4419, 4420, 4459, 4462, 4477, 4479, 4501, 4503, ]}, |
|
84
|
|
|
5: { |
|
85
|
|
|
'B': [5400, 5401, 5402, 5403, 5404, 5405, 5406, 5007, 5431, 5433, 5465, 5467, 5470, 5475, 5503, 5504, 5508, 5805, 5808], |
|
86
|
|
|
'H': [5003, 5004, 5005, 5008, 5408, 5409, 5410, 5411, 5412, 5413, 5414, 5430, 5434, 5466, 5468, 5471, 5474, 5501, 5502, 5507, 5804, 5807], |
|
87
|
|
|
'C': [5006, 5416, 5417, 5418, 5419, 5420, 5421, 5432, 5435, 5466, 5469, 5472, 5473, 5476, 5505, 5506, 5806]}, |
|
88
|
|
|
6: { |
|
89
|
|
|
'B': [6200, 6201, 6202, 6203, 6204, 6205, 6220, 6221, 6222, 6241, ], |
|
90
|
|
|
'H': [6100, 6101, 6102, 6103, 6104, 6105, 6120, 6121, 6140, 6141, 6160, ], |
|
91
|
|
|
'C': [6301, 6302, 6303, 6304, 6305, 6306, 6320, 6321, 6322, 6323, 6340, 6360, ] |
|
92
|
|
|
}, |
|
93
|
|
|
99: {'B': [], 'H': [], 'C': []}, |
|
94
|
|
|
} |
|
95
|
|
|
|
|
96
|
|
|
advTechLevel = { |
|
97
|
|
|
1: {}, |
|
98
|
|
|
2: {"B" : 1990, "H" : 1991, "C" : 1992}, |
|
99
|
|
|
3: {"B" : 2990, "H" : 2991, "C" : 2992}, |
|
100
|
|
|
4: {"B" : 3990, "H" : 3991, "C" : 3992}, |
|
101
|
|
|
5: {"B" : 4990, "H" : 4991, "C" : 4992}, |
|
102
|
|
|
6: {"B" : 5990, "H" : 5991, "C" : 5992}, |
|
103
|
|
|
99: {} |
|
104
|
|
|
} |
|
105
|
|
|
|
|
106
|
|
|
def cleanupBadFleets(): |
|
107
|
|
|
un = s.getInfo(1) |
|
108
|
|
|
delete = [] |
|
109
|
|
|
#search by system rather than by player; there is no galaxy list of playerIDs |
|
110
|
|
|
for galaxyID in un.galaxies: |
|
111
|
|
|
galaxy = s.getInfo(galaxyID) |
|
112
|
|
|
for systemID in galaxy.systems: |
|
113
|
|
|
system = s.getInfo(systemID) |
|
114
|
|
|
for fleetID in system.fleets: |
|
115
|
|
|
fleet = s.getInfo(fleetID) |
|
116
|
|
|
owner = s.getInfo(fleet.owner) |
|
117
|
|
|
if not owner.galaxies: |
|
118
|
|
|
delete.append((fleetID,systemID,fleet.owner,0)) |
|
119
|
|
|
if owner.galaxies[0] != galaxyID: |
|
120
|
|
|
delete.append((fleetID,systemID,fleet.owner,1)) |
|
121
|
|
|
for row in delete: |
|
122
|
|
|
if row[3]: |
|
123
|
|
|
print "Deleting",row[0],"- owner not in fleet's galaxy" |
|
124
|
|
|
else: |
|
125
|
|
|
print "Deleting",row[0],"- owner not in a galaxy" |
|
126
|
|
|
s.disbandFleet(row[0]) |
|
127
|
|
|
return |
|
128
|
|
|
|
|
129
|
|
|
|
|
130
|
|
|
def msgHandler(id, data): |
|
131
|
|
|
if id >= 0: |
|
132
|
|
|
print 'Message', id, data |
|
133
|
|
|
|
|
134
|
|
|
def getPlayer(name): |
|
135
|
|
|
u = s.getInfo(1) |
|
136
|
|
|
for playerID in u.players: |
|
137
|
|
|
pl = s.getInfo(playerID) |
|
138
|
|
|
if pl.name == name: |
|
139
|
|
|
return pl |
|
140
|
|
|
return None |
|
141
|
|
|
|
|
142
|
|
|
def showPlayers(): |
|
143
|
|
|
un = s.getInfo(1) |
|
144
|
|
|
players = [] |
|
145
|
|
|
aiPlayers = [] |
|
146
|
|
|
for playerID in un.players: |
|
147
|
|
|
player = s.getInfo(playerID) |
|
148
|
|
|
if not player.type in Const.AI_PLAYER_TYPES: |
|
149
|
|
|
players.append((playerID, player.name)) |
|
150
|
|
|
else: |
|
151
|
|
|
aiPlayers.append((playerID, player.name)) |
|
152
|
|
|
|
|
153
|
|
|
print |
|
154
|
|
|
print |
|
155
|
|
|
print "List of current players:" |
|
156
|
|
|
for pl in players: |
|
157
|
|
|
print "%5d: %s" % pl |
|
158
|
|
|
|
|
159
|
|
|
print "List of current AI players:" |
|
160
|
|
|
for pl in aiPlayers: |
|
161
|
|
|
print "%5d: %s" % pl |
|
162
|
|
|
|
|
163
|
|
|
print |
|
164
|
|
|
print "Press Enter to continue" |
|
165
|
|
|
raw_input() |
|
|
|
|
|
|
166
|
|
|
|
|
167
|
|
|
def showGalaxies(): |
|
168
|
|
|
un = s.getInfo(1) |
|
169
|
|
|
galaxies = [] |
|
170
|
|
|
for galaxyID in un.galaxies: |
|
171
|
|
|
galaxy = s.getInfo(galaxyID) |
|
172
|
|
|
galaxies.append((galaxyID, galaxy.name)) |
|
173
|
|
|
|
|
174
|
|
|
print |
|
175
|
|
|
print |
|
176
|
|
|
print "List of current galaxies:" |
|
177
|
|
|
for gal in galaxies: |
|
178
|
|
|
print "%5d: %s" % gal |
|
179
|
|
|
|
|
180
|
|
|
print |
|
181
|
|
|
|
|
182
|
|
|
def setCurrentObject(): |
|
183
|
|
|
objId = raw_input("oid: ") |
|
|
|
|
|
|
184
|
|
|
newObjID = 0 |
|
185
|
|
|
try: |
|
186
|
|
|
newObjID = int(objId) |
|
187
|
|
|
except: |
|
188
|
|
|
print "Invalid object" |
|
189
|
|
|
|
|
190
|
|
|
return newObjID |
|
191
|
|
|
|
|
192
|
|
|
def initDevelTesting(objID): |
|
193
|
|
|
levels = 6 |
|
194
|
|
|
resources = 8 |
|
195
|
|
|
|
|
196
|
|
|
race = string.upper(raw_input("race: ")) |
|
|
|
|
|
|
197
|
|
|
if not (race=='b' or race=='B' or race=='c' or race=='C' or race =='h' or race =='H'): |
|
198
|
|
|
print "Invalid race" |
|
199
|
|
|
return objID |
|
200
|
|
|
|
|
201
|
|
|
for level in range(2,levels+1): |
|
202
|
|
|
advanceLevelRace(objID,level,race) |
|
203
|
|
|
for level in range(1,levels+1): |
|
204
|
|
|
giveTechsNum(objID,level) |
|
205
|
|
|
giveTechsNum(objID,99) |
|
206
|
|
|
for stratResID in range(1,resources+1): |
|
207
|
|
|
giveStratResNum(objID,stratResID,50) |
|
208
|
|
|
|
|
209
|
|
|
return objID |
|
210
|
|
|
|
|
211
|
|
|
def giveTechs(objID): |
|
212
|
|
|
lvl = raw_input("level: ") |
|
|
|
|
|
|
213
|
|
|
level = 0 |
|
214
|
|
|
try: |
|
215
|
|
|
level = int(lvl) |
|
216
|
|
|
except: |
|
217
|
|
|
print "Invalid level" |
|
218
|
|
|
return objId |
|
|
|
|
|
|
219
|
|
|
|
|
220
|
|
|
if level > 6 and not level == 99: |
|
221
|
|
|
print "Invalid level" |
|
222
|
|
|
return objId |
|
223
|
|
|
giveTechsNum(objID,level) |
|
224
|
|
|
|
|
225
|
|
|
def giveTechsNum(objID,level): |
|
226
|
|
|
player = s.getInfo(objID) |
|
227
|
|
|
plTechs = player.techs |
|
228
|
|
|
for techId in levelTechs[level]: |
|
229
|
|
|
plTechs[techId] = 5 |
|
230
|
|
|
|
|
231
|
|
|
if len(player.race) > 0: |
|
232
|
|
|
print "setting race dependent techs" |
|
233
|
|
|
for techId in levelTechsRaces[level][player.race]: |
|
234
|
|
|
plTechs[techId] = 5 |
|
235
|
|
|
|
|
236
|
|
|
s.set(objID, "techs", plTechs) |
|
237
|
|
|
print "Techs at level %d added to player %d." % (level, objID) |
|
238
|
|
|
return objID |
|
239
|
|
|
|
|
240
|
|
|
def giveTech(objID): |
|
241
|
|
|
tid = raw_input("techId: ") |
|
|
|
|
|
|
242
|
|
|
try: |
|
243
|
|
|
techId = int(tid) |
|
244
|
|
|
except: |
|
245
|
|
|
print "Invalid techId" |
|
246
|
|
|
return objID |
|
247
|
|
|
|
|
248
|
|
|
player = s.getInfo(objID) |
|
249
|
|
|
plTechs = player.techs |
|
250
|
|
|
try: |
|
251
|
|
|
plTechs[techId] = 5 |
|
252
|
|
|
except: |
|
253
|
|
|
print "Invalid techId" |
|
254
|
|
|
return objID |
|
255
|
|
|
|
|
256
|
|
|
s.set(objID, "techs", plTechs) |
|
257
|
|
|
print "Tech %d added to player %d." % (techId, objID) |
|
258
|
|
|
return objID |
|
259
|
|
|
|
|
260
|
|
|
def advanceLevel(objID): |
|
261
|
|
|
lvl = raw_input("level: ") |
|
|
|
|
|
|
262
|
|
|
try: |
|
263
|
|
|
level = int(lvl) |
|
264
|
|
|
except: |
|
265
|
|
|
print "Invalid level" |
|
266
|
|
|
return objID |
|
267
|
|
|
|
|
268
|
|
|
if level > 6 or level < 2: |
|
269
|
|
|
print "Invalid level" |
|
270
|
|
|
return objID |
|
271
|
|
|
race = string.upper(raw_input("race: ")) |
|
272
|
|
|
if not (race=='b' or race=='B' or race=='c' or race=='C' or race =='h' or race =='H'): |
|
273
|
|
|
print "Invalid race" |
|
274
|
|
|
return objID |
|
275
|
|
|
advanceLevelRace(objID,level) |
|
276
|
|
|
|
|
277
|
|
|
def advanceLevelRace(objID,level,race): |
|
278
|
|
|
player = s.getInfo(objID) |
|
279
|
|
|
plTechs = player.techs |
|
280
|
|
|
plTechs[advTechLevel[level][race]] = 5 |
|
281
|
|
|
|
|
282
|
|
|
s.set(objID, "techs", plTechs) |
|
283
|
|
|
s.set(objID, "techLevel", level) |
|
284
|
|
|
s.set(objID, "race", race) |
|
285
|
|
|
print "Tech %d added, techLevel advance to %d to player %d." % (advTechLevel[level][race], level, objID) |
|
|
|
|
|
|
286
|
|
|
return objID |
|
287
|
|
|
|
|
288
|
|
|
def promoteToImperator(objID): |
|
289
|
|
|
galID = raw_input("galaxy id: ") |
|
|
|
|
|
|
290
|
|
|
try: |
|
291
|
|
|
galaxyID = int(galID) |
|
292
|
|
|
except: |
|
293
|
|
|
print "Invalid galaxy id" |
|
294
|
|
|
return objID |
|
295
|
|
|
|
|
296
|
|
|
s.set(objID, "imperator", 3) |
|
297
|
|
|
s.set(galaxyID, "imperator", objID) |
|
298
|
|
|
print "Galaxy %d has now imperator %d." % (galaxyID, objID) |
|
299
|
|
|
return objID |
|
300
|
|
|
|
|
301
|
|
|
def giveFame(objID): |
|
302
|
|
|
numFame = raw_input("Amount of Fame: ") |
|
|
|
|
|
|
303
|
|
|
try: |
|
304
|
|
|
numberFame = int(numFame) |
|
305
|
|
|
except: |
|
306
|
|
|
print "Not a number" |
|
307
|
|
|
return objID |
|
308
|
|
|
player = s.getInfo(objID) |
|
309
|
|
|
if not hasattr(player,'pirateFame'): |
|
310
|
|
|
print "Object is not a pirate" |
|
311
|
|
|
return objID |
|
312
|
|
|
newFame = player.pirateFame + numberFame |
|
313
|
|
|
s.set(objID, "pirateFame", newFame) |
|
314
|
|
|
print "Player %d now has %d fame" % (objID, newFame) |
|
315
|
|
|
|
|
316
|
|
|
def giveStratRes(objID): |
|
317
|
|
|
resID = raw_input("strategy resource ('a' for all resources): ") |
|
|
|
|
|
|
318
|
|
|
if not (resID == 'a'): |
|
319
|
|
|
try: |
|
320
|
|
|
stratResID = int(resID) |
|
321
|
|
|
except: |
|
322
|
|
|
print "Invalid strategy resource" |
|
323
|
|
|
return objID |
|
324
|
|
|
|
|
325
|
|
|
qty = raw_input("qty: ") |
|
326
|
|
|
try: |
|
327
|
|
|
quantity = int(qty) |
|
328
|
|
|
except: |
|
329
|
|
|
print "Invalid quantity" |
|
330
|
|
|
return objID |
|
331
|
|
|
|
|
332
|
|
|
if (resID == 'a'): |
|
333
|
|
|
for stratResID in range(1,9): |
|
334
|
|
|
giveStratResNum(objID,stratResID,quantity) |
|
335
|
|
|
else: |
|
336
|
|
|
giveStratResNum(objID,stratResID,quantity) |
|
|
|
|
|
|
337
|
|
|
return objID |
|
338
|
|
|
|
|
339
|
|
|
def giveStratResNum(objID,stratResID,quantity): |
|
340
|
|
|
plQty = 0 |
|
341
|
|
|
player = s.getInfo(objID) |
|
342
|
|
|
if stratResID in player.stratRes: |
|
343
|
|
|
plQty = player.stratRes[stratResID] |
|
344
|
|
|
|
|
345
|
|
|
stratRes = player.stratRes |
|
346
|
|
|
stratRes[stratResID] = plQty + quantity |
|
347
|
|
|
s.set(objID, "stratRes", stratRes) |
|
348
|
|
|
print "Player %d now has %d pieces of %d." % (objID, stratRes[stratResID], stratResID) |
|
349
|
|
|
|
|
350
|
|
|
def createGalaxy(): |
|
351
|
|
|
universe = 1 |
|
352
|
|
|
print "Creating new galaxy...please specify these parameters. Normal galaxy positions are multiples of 100." |
|
353
|
|
|
name = raw_input("Galaxy Name: ") |
|
|
|
|
|
|
354
|
|
|
gal_type = raw_input("Galaxy Type: ") |
|
355
|
|
|
s.createNewSubscribedGalaxy(universe, name, gal_type, []) |
|
356
|
|
|
|
|
357
|
|
|
def startGalaxy(): |
|
358
|
|
|
showGalaxies() |
|
359
|
|
|
objId = raw_input("oid: ") |
|
|
|
|
|
|
360
|
|
|
newObjID = 0 |
|
361
|
|
|
try: |
|
362
|
|
|
newObjID = int(objId) |
|
363
|
|
|
except: |
|
364
|
|
|
print "Invalid object" |
|
365
|
|
|
un = s.getInfo(1) |
|
366
|
|
|
galaxyObj = 0 |
|
367
|
|
|
print newObjID |
|
368
|
|
|
for galaxyID in un.galaxies: |
|
369
|
|
|
print galaxyID |
|
370
|
|
|
if galaxyID==newObjID: |
|
371
|
|
|
galaxyObj = newObjID |
|
372
|
|
|
if galaxyObj == 0: |
|
373
|
|
|
print "Not a galaxy" |
|
374
|
|
|
else: |
|
375
|
|
|
s.enableTime(galaxyObj,1) |
|
376
|
|
|
print "Galaxy will start on next turn process" |
|
377
|
|
|
|
|
378
|
|
|
def deleteGalaxy(): |
|
379
|
|
|
showGalaxies() |
|
380
|
|
|
print "Choose a galaxy to delete." |
|
381
|
|
|
objId = raw_input("oid: ") |
|
|
|
|
|
|
382
|
|
|
newObjID = 0 |
|
383
|
|
|
try: |
|
384
|
|
|
newObjID = int(objId) |
|
385
|
|
|
except: |
|
386
|
|
|
print "Invalid object" |
|
387
|
|
|
un = s.getInfo(1) |
|
388
|
|
|
galaxyObj = 0 |
|
389
|
|
|
print newObjID |
|
390
|
|
|
for galaxyID in un.galaxies: |
|
391
|
|
|
if galaxyID==newObjID: |
|
392
|
|
|
galaxyObjID = newObjID |
|
393
|
|
|
if galaxyObjID == 0: |
|
|
|
|
|
|
394
|
|
|
print "Not a galaxy" |
|
395
|
|
|
else: |
|
396
|
|
|
galaxy = s.getInfo(galaxyObjID) |
|
397
|
|
|
print "Please confirm that you want to delete", galaxy.name |
|
398
|
|
|
ok = raw_input("Y/N: "); |
|
399
|
|
|
if string.upper(ok) == "Y": |
|
400
|
|
|
s.delete(galaxyObjID) |
|
401
|
|
|
print "Galaxy deleted" |
|
402
|
|
|
|
|
403
|
|
|
def showObj(objID): |
|
404
|
|
|
try: |
|
405
|
|
|
obj = s.getInfo(objID) |
|
406
|
|
|
objstr = repr(obj) |
|
407
|
|
|
#insanely complex regex to chunk {data} and [data] parts during split by ,'s |
|
408
|
|
|
objarr = re.findall("[^,\{\]]*(?:\{[^\}]*[\}\{]),?|[^,\{\]]*(?:\[[^\]]*[\]\[]),?|[^,\}\]]+,?",objstr) |
|
409
|
|
|
for line in objarr: |
|
410
|
|
|
print line |
|
411
|
|
|
except: |
|
412
|
|
|
print "Cannot get object",objID |
|
413
|
|
|
|
|
414
|
|
|
def showMenu(objID): |
|
415
|
|
|
print |
|
416
|
|
|
print "----- OSpace admin console menu -----" |
|
417
|
|
|
print "Current object: %s" % objID |
|
418
|
|
|
print |
|
419
|
|
|
print "1. Set current object 10. Create Galaxy" |
|
420
|
|
|
print "2. Show Players 11. Start Galaxy Time (does not need Obj set)" |
|
421
|
|
|
print "3. Show Galaxies 12. Delete Galaxy (does not need Obj set)" |
|
422
|
|
|
print "4. Advance to level 13. Init Developer race (all techs, 50 each strat res)" |
|
423
|
|
|
print "5. Make imperator 14. Give Fame to a Pirate Player" |
|
424
|
|
|
print "6. Give particular tech " |
|
425
|
|
|
print "7. Give techs " |
|
426
|
|
|
print "8. Give Strat Res " |
|
427
|
|
|
print "9. Finish prod queue " |
|
428
|
|
|
print |
|
429
|
|
|
print "T. Process turn R. Process X turns" |
|
430
|
|
|
print "C. Interactive console I. Object Info" |
|
431
|
|
|
print |
|
432
|
|
|
print "Ctrl+Z to End" |
|
433
|
|
|
print |
|
434
|
|
|
|
|
435
|
|
|
def processTurns(): |
|
436
|
|
|
numT = raw_input("Number of turns: ") |
|
|
|
|
|
|
437
|
|
|
try: |
|
438
|
|
|
num = int(numT) |
|
439
|
|
|
except: |
|
440
|
|
|
print "invalid number of turns" |
|
441
|
|
|
s.processTurns(num) |
|
442
|
|
|
|
|
443
|
|
|
def finishProdQueue(objId): |
|
444
|
|
|
p = s.get(objId) |
|
445
|
|
|
for i in p.prodQueue: |
|
446
|
|
|
i.currProd = 38400 |
|
447
|
|
|
s.set(p.oid, "prodQueue", p.prodQueue) |
|
448
|
|
|
|
|
449
|
|
|
def processMenu(inp, objId, s): |
|
450
|
|
|
if inp == "2": |
|
451
|
|
|
showPlayers() |
|
452
|
|
|
elif inp == "1": |
|
453
|
|
|
return setCurrentObject() |
|
454
|
|
|
elif inp == "7": |
|
455
|
|
|
giveTechs(objId) |
|
456
|
|
|
elif inp == "6": |
|
457
|
|
|
giveTech(objId) |
|
458
|
|
|
elif inp == "4": |
|
459
|
|
|
advanceLevel(objId) |
|
460
|
|
|
elif inp == "3": |
|
461
|
|
|
showGalaxies() |
|
462
|
|
|
elif inp == "5": |
|
463
|
|
|
promoteToImperator(objId) |
|
464
|
|
|
elif inp == "8": |
|
465
|
|
|
giveStratRes(objId) |
|
466
|
|
|
elif inp == "9": |
|
467
|
|
|
finishProdQueue(objId) |
|
468
|
|
|
elif inp == "10": |
|
469
|
|
|
createGalaxy() |
|
470
|
|
|
elif inp == "11": |
|
471
|
|
|
startGalaxy() |
|
472
|
|
|
elif inp == "12": |
|
473
|
|
|
deleteGalaxy() |
|
474
|
|
|
elif inp == "13": |
|
475
|
|
|
initDevelTesting(objID) |
|
476
|
|
|
elif inp == "14": |
|
477
|
|
|
giveFame(objID) |
|
478
|
|
|
elif string.upper(inp) == "I": |
|
479
|
|
|
showObj(objID) |
|
480
|
|
|
elif string.upper(inp) == "R": |
|
481
|
|
|
processTurns() |
|
482
|
|
|
elif string.upper(inp) == "T": |
|
483
|
|
|
s.processTurn() |
|
484
|
|
|
elif string.upper(inp) == "C": |
|
485
|
|
|
console = InteractiveConsole(locals()) |
|
486
|
|
|
console.interact() |
|
487
|
|
|
elif string.upper(inp) == "CLEANUPFLEETS": |
|
488
|
|
|
console = cleanupBadFleets() |
|
489
|
|
|
|
|
490
|
|
|
return objId |
|
491
|
|
|
|
|
492
|
|
|
# parse command line arguments |
|
493
|
|
|
parser = OptionParser(usage = "usage: %prog [options]") |
|
494
|
|
|
parser.add_option("", "--configdir", dest = "configDir", |
|
495
|
|
|
metavar = "DIRECTORY", default = os.path.join(os.path.expanduser("~"), ".outerspace"), |
|
496
|
|
|
help = "Override default configuration directory", |
|
497
|
|
|
) |
|
498
|
|
|
options, args = parser.parse_args() |
|
499
|
|
|
|
|
500
|
|
|
#s = IClient('ospace.net:9080', None, msgHandler, None, 'IClient/osc') |
|
501
|
|
|
s = IClient('localhost:9080', None, msgHandler, None, 'IClient/osc') |
|
502
|
|
|
|
|
503
|
|
|
|
|
504
|
|
|
# get admin login from <configDir>/token |
|
505
|
|
|
password = open(os.path.join(options.configDir, "token"), "r").read() |
|
506
|
|
|
s.connect('admin') |
|
507
|
|
|
s.login('Alpha', 'admin', password) |
|
508
|
|
|
s.selectAdmin() |
|
509
|
|
|
|
|
510
|
|
|
try: |
|
511
|
|
|
objID = 0 |
|
512
|
|
|
while True: |
|
513
|
|
|
showMenu(objID) |
|
514
|
|
|
objID = processMenu(raw_input(), objID, s) |
|
|
|
|
|
|
515
|
|
|
except EOFError: |
|
516
|
|
|
pass |
|
517
|
|
|
|
|
518
|
|
|
s.logout() |
|
519
|
|
|
|