Vega strike Python Modules doc  0.5.1
Documentation of the " Modules " folder of Vega strike
 All Data Structures Namespaces Files Functions Variables
server.py
Go to the documentation of this file.
1 import VS
2 import Director
3 import unit
4 import sys
5 import traceback
6 
7 import custom
8 
9 import server_lib
10 
11 baseunits={}
12 
13 def baseUnits():
14  system = VS.getSystemFile()
15  if system in baseunits:
16  return baseunits[system]
17  else:
18  baselist=[]
19  unitlist=VS.getUnitList()
20  while unitlist.notDone():
21  un = unitlist.current()
22  #print 'Looking at unit '+un.getName()
23  #print un.getFlightgroupName()
24  #print un.isSun()
25  #print un.isPlanet()
26  if unit.isBase(un) or (un.isPlanet() and not un.isSun()):
27  #print 'appending!'
28  baselist.append(un)
29  unitlist.advance()
30  baseunits[system]=baselist
31  return baselist
32 
33 
34 def getDocked(un):
35  #print 'getDocked('+un.getName()
36  bases = baseUnits()
37  for b in bases:
38  if b:
39  #print 'testing '+b.getName()
40  #print b.isDocked(un)
41  #print un.isDocked(b)
42  if b.isDocked(un):
43  #print 'foundocked unit'
44  return b
45  #else:
46  # print 'null unit in bases'
47  # print b.getName()
48  #print 'return none'
49  return None
50 
51 class objectives:
52  def __init__(self):
53  pass
54 
55 _server_inst=None
56 
58  return _server_inst
59 
60 class server (Director.Mission):
61  def __init__(self):
62  Director.Mission.__init__(self)
63 
64  global _server_inst
65  _server_inst=self
66 
67  self.playerlist=[]
68  self.loopnum=0
69  self.loops=[]
70 
72 
73  def playerJoined(self, pl):
74  self.playerlist.append(pl)
75  def getPlayerBy(self, func):
76  for pl in self.playerlist:
77  if func(pl):
78  return pl
79  def getPlayer(self, num):
80  return self.getPlayerBy(lambda pl: pl.player_num==num)
81  def getPlayerByCallsign(self, callsign):
82  return self.getPlayerBy(lambda pl: pl.callsign==callsign)
83  def getCallsignList(self):
84  ret=[]
85  for p in self.playerlist:
86  if p.callsign:
87  ret.append(p.callsign)
88  return ret
89  def Execute(self):
90  self.loopnum+=1
91  try:
92  for i in self.loops:
93  i.Execute()
95  except:
96  traceback.print_exc(file=sys.stderr)
97 
98 
99 class player (Director.Mission):
100  def __init__(self):
101  Director.Mission.__init__(self)
102  _server_inst.playerJoined(self)
103  self.reinit()
104 
105  def reinit(self):
106  self.current_un=VS.Unit()
107  self.objectives=0
108  self.player_num=-1
109  self.callsign=''
110  self.ship=''
111  self.docked_un=None
112 
113  def sendMessage(self, msg, fromname='game'):
114  if self.player_num>=0:
115  cpstr = 'p'+str(self.player_num)
116  VS.IOmessage(0,fromname,cpstr,msg)
117 
118  def Execute(self):
119  player_un = VS.getPlayer()
120  if self.current_un.isNull() and player_un.isNull():
121  VS.clearObjectives()
122  self.reinit()
123  if not player_un:
124  return
125  if self.current_un != player_un:
126  self.player_num = player_un.isPlayerStarship()
127  self.current_un = player_un
128  self.callsign = player_un.getFlightgroupName()
129  self.ship = player_un.getName()
130  if not self.callsign:
131  self.callsign = self.ship
132  try:
134  except:
135  traceback.print_exc(file=sys.stderr)
136  dockedUn = getDocked(self.current_un)
137  if dockedUn is not self.docked_un:
138  if dockedUn:
139  self.docked_un = dockedUn
140  try:
142  except:
143  traceback.print_exc(file=sys.stderr)
144  else:
145  try:
147  except:
148  traceback.print_exc(file=sys.stderr)
149  self.docked_un = dockedUn
150  try:
152  except:
153  traceback.print_exc(file=sys.stderr)
154 
155 
156 def processMessage(cp, localhost, command, arglist=None, id=''):
157  try:
158  cmd = command
159  args = arglist
160  if not arglist:
161  subcmds = command.split(' ')
162  cmd = subcmds[0]
163  args = subcmds[1:]
164  cmd = cmd.lower()
165  authlevel=0
166  if localhost:
167  authlevel=2 #Can exit the game.
168  elif cp>=0:
169  if Director.getSaveDataLength(cp, 'serveradmin')>0:
170  if Director.getSaveData(cp, 'serveradmin', 0)==1:
171  authlevel=1
172  else:
173  return
174  pl = _server_inst.getPlayer(cp)
175  if cmd=='reload1':
176  if authlevel<1:
177  return
178  mod=server_lib
179  reload(mod)
180  VS.IOmessage(0,"game","all","The server python script has been reloaded!")
181  print mod.__name__+' has been reloaded!'
182  else:
183  server_lib.processMessage(pl, authlevel, cmd, args, id)
184  except:
185  if cp<0:
186  writer = sys.stderr
187  else:
188  writer = custom.IOmessageWriter(cp)
189  argstr=''
190  if type(arglist)=='list':
191  argstr = ' ' + (' '.join(arglist))
192  writer.write("An error occurred when processing command: \n"
193  + str(command)+argstr)
194  traceback.print_exc(file=writer)
195