9 from universe
import AllSystems
14 ccp=VS.getCurrentPlayer()
15 _tweaktuple = (
'Squadron',
'Prime',
'Arc',
'Alpha',
'Aleph',
'Beta',
'Quadratis',
'Zeta',
'X',
'Plus',
'Blade',
'Delta',
'Dash',
'Xprime',
'Gamma',
'Hydris',
'Dual',
'Tri',
'Quad',
'Penta',
'Hex',
'Octo',
'Deca',
'Octate')
23 if syst
in faction_ships.max_flightgroups:
24 return faction_ships.max_flightgroups[syst]
29 if syst
in faction_ships.min_flightgroups:
30 return faction_ships.min_flightgroups[syst]
41 return 'FF:'+
str(VS.GetFactionIndex(faction))
44 return 'FG:'+
str(fgname)+
'|'+
str(VS.GetFactionIndex(faction))
47 return 'SS:'+
str(starsystem)
50 skey = MakeStarSystemFGKey (starsystem)
51 index = VS.GetFactionIndex (faction)
52 key =
"%s[%d]" % (skey,index)
63 for i
in xrange (VS.GetNumFactions()):
64 facs.append(VS.GetFactionName(i))
68 flightgroupnamelist={}
69 genericalphabet=[
'Alpha',
'Beta',
'Gamma',
'Delta',
'Epsilon',
'Zeta',
'Phi',
'Omega']
74 filename =
'universe/fgnames/'+faction+
'.txt'
76 f = open (filename,
'r')
81 f = open (
'../'+filename,
'r')
86 f = open (
'../universe/names.txt',
'r')
91 f = open (
'universe/names.txt',
'r')
95 global genericalphabet
97 for i
in xrange(len(bnl)):
104 global flightgroupnamelist
105 if (
not (faction
in flightgroupnamelist)):
107 if numflightgroups < 0:
108 numflightgroups = len(flightgroupnamelist[faction])
110 if (numflightgroups>len(flightgroupnamelist[faction])):
111 for i
in xrange (numflightgroups-len(flightgroupnamelist)):
112 additional.append(
str(i))
113 if (len(additional)+len(flightgroupnamelist[faction])==0):
115 return additional+flightgroupnamelist[faction]
124 if (
not (faction
in basenamelist)):
126 retval = basenamelist[faction][basecounter:basecounter+n]
128 basecounter=n-len(retval)
129 retval = retval + basenamelist[faction][:basecounter]
130 basecounter = basecounter % len(basenamelist[faction])
143 tweaker=
str(origfgoffset)
144 if (origfgoffset<len(_tweaktuple)):
145 tweaker = _tweaktuple[origfgoffset]
147 for i
in origfgnames:
148 rez.append (i+
'_'+tweaker)
152 return len(_tweaktuple)
155 siz = Director.getSaveStringLength (cp,key)
160 for i
in xrange(siz):
161 Director.putSaveString(cp,key,i,tup[i])
162 for i
in xrange (s_size,lentup):
163 Director.pushSaveString(cp,key,tup[i])
164 while s_size > lentup:
165 Director.eraseSaveString(cp,key,s_size-1)
169 siz = Director.getSaveStringLength (cp,key)
171 for i
in xrange (siz):
172 tup.append(Director.getSaveString(cp,key,i))
176 key = MakeFactionKey (faction)
181 return Director.getSaveStringLength(ccp,key)
195 for i
in xrange (1,len(tup)):
199 def _MakeFGString (starsystem,typenumlist):
204 for tt
in typenumlist:
205 totalships+=int(tt[1])
206 strlist+=[
str(tt[0]),
str(tt[1]),
str(tt[1])]
207 return [
str(totalships),
str(starsystem),
str(damage)]+strlist
209 def _AddShipsToKnownFG(key,tnlist):
210 leg = Director.getSaveStringLength (ccp,key)
212 numtotships = int(Director.getSaveString(ccp,key,0))
215 fgentry[Director.getSaveString(ccp,key,i)] = \
216 ( int(Director.getSaveString(ccp,key,i+1)) , \
217 int(Director.getSaveString(ccp,key,i+2)) , \
222 numtotships += int(tn[1])
225 fgentry[tn[0]][0]+int(tn[1]), \
226 fgentry[tn[0]][1]+int(tn[1]), \
231 Director.pushSaveString(ccp,key,
str(tn[0]))
232 Director.pushSaveString(ccp,key,
str(tn[1]))
233 Director.pushSaveString(ccp,key,
str(tn[1]))
234 fgentry[tn[0]] = (int(tn[1]),int(tn[1]),int(baseidx),0)
236 Director.putSaveString(ccp,key,0,
str(numtotships))
240 Director.putSaveString(ccp,key,fgentry[fg][2]+1,
str(fgentry[fg][0]))
241 Director.putSaveString(ccp,key,fgentry[fg][2]+2,
str(fgentry[fg][1]))
243 def _AddFGToSystem (fgname,faction,starsystem):
245 Director.pushSaveString(ccp,key,fgname)
247 def _RemoveFGFromSystem (fgname,faction,starsystem):
249 leg = Director.getSaveStringLength(ccp,key)
250 for index
in xrange(leg):
251 if Director.getSaveString(ccp,key,index) == fgname:
252 Director.eraseSaveString(ccp,key,index)
255 def _RemoveAllFGFromSystem (faction,starsystem):
259 def _AddFGToFactionList(fgname,faction):
261 Director.pushSaveString (ccp,key,fgname)
263 def _RemoveFGFromFactionList (fgname,faction):
265 leg=Director.getSaveStringLength(ccp,key)
266 for index
in xrange(leg):
267 if Director.getSaveString(ccp,key,index) == fgname:
268 Director.eraseSaveString(ccp,key,index)
271 def _RemoveAllFGFromFactionList(faction):
276 key = MakeFGKey (fgname,faction)
277 leg = Director.getSaveStringLength (ccp,key)
282 shipshere=Director.getSaveString(ccp,key,i)
283 totalships+=int(shipshere)
284 temp=Director.getSaveString(ccp,key,i+1)
285 if (temp!=shipshere):
286 debug.debug(
'correcting flightgroup %r to have right landed ships', fgname)
287 Director.putSaveString(ccp,key,i+1,shipshere)
292 debug.debug(
'nonint reading on flightgroup %r faction %r', fgname, faction)
299 len=Director.getSaveStringLength (ccp,key)
303 curfg=Director.getSaveString(ccp,key,i)
304 CheckFG (curfg,faction)
315 key = MakeFGKey (fgname,faction)
316 len = Director.getSaveStringLength (ccp,key)
321 return int(Director.getSaveString(ccp,key,0))
327 key = MakeFGKey (fgname,faction)
328 len = Director.getSaveStringLength (ccp,key)
333 return int(Director.getSaveString(ccp,key,2))
339 key = MakeFGKey (fgname,faction)
340 len = Director.getSaveStringLength (ccp,key)
342 Director.putSaveString(ccp,key,2,
str(num))
345 key = MakeFGKey (fgname,faction)
346 leg = Director.getSaveStringLength (ccp,key)
348 starsystem=Director.getSaveString(ccp,key,1)
350 _RemoveFGFromSystem(fgname,faction,starsystem)
351 _RemoveFGFromFactionList(fgname,faction)
352 WriteStringList (ccp,key,[])
355 return ReadStringList (ccp,MakeFactionKey (faction))
360 for fgname
in AllFG(faction):
361 sysSpan[
FGSystem(fgname,faction)] = 1
362 for starsystem
in sysSpan:
363 rv.append(starsystem)
370 for fgname
in AllFG(faction):
372 for starsystem
in sysspan:
373 _RemoveAllFGFromSystem(faction,starsystem)
374 _RemoveAllFGFromFactionList(faction)
383 for i
in xrange(len(factionfglists)):
384 faction = VS.GetFactionName(i)
385 fglist = factionfglists[i].
split(
'|')
398 pct = count*100/len(allsys)
408 if Director.getSaveStringLength(ccp,key)>0:
414 len = Director.getSaveStringLength(ccp,key)
416 return Director.getSaveString(ccp,key,1)
418 debug.debug(
'%r for %r already died, in no system', fgname, faction)
422 len = Director.getSaveStringLength(ccp,key)
424 starsystem=Director.getSaveString(ccp,key,1)
425 _RemoveFGFromSystem(fgname,faction,starsystem)
426 _AddFGToSystem(fgname,faction,tosys)
427 Director.putSaveString(ccp,key,1,tosys)
431 len = Director.getSaveStringLength (ccp,key)
433 debug.debug(
'adding new fg %r of %s to %s', fgname, typenumbertuple, starsystem)
435 _AddFGToSystem (fgname,faction,starsystem)
436 _AddFGToFactionList (fgname,faction)
437 debug.info(
'adding new fg %r of %s to %s', fgname, typenumbertuple, starsystem)
439 debug.info(
'adding old fg %r of %s to %s', fgname, typenumbertuple,
FGSystem(fgname,faction))
440 _AddShipsToKnownFG(key,typenumbertuple)
443 key = MakeFGKey (fgname,faction)
444 leg = Director.getSaveStringLength (ccp,key)
447 if (Director.getSaveString(ccp,key,i-1)==
str(type)):
452 numships = int (Director.getSaveString (ccp,key,i))
453 numlandedships=int (Director.getSaveString (ccp,key,i+1))
455 debug.error(
"unable to get savestring %s from FG %s %s %s", i, fgname, faction, type)
456 if (numships>numkill):
458 if (numships<numlandedships):
460 debug.debug(
'trying to remove launched ship %s but all are landed', type)
463 Director.putSaveString (ccp,key,i,
str(numships))
464 if (landed
and numlandedships>0):
465 Director.putSaveString(ccp,key,i+1,
str(numlandedships-numkill))
470 Director.eraseSaveString(ccp,key,i-1)
473 totalnumships = int(Director.getSaveString(ccp,key,0))
474 totalnumships -=numkill
475 if (totalnumships>=0):
476 Director.putSaveString(ccp,key,0,
str(totalnumships))
477 if(totalnumships==0):
483 debug.error(
'error, flight record %r corrupt', fgname)
485 debug.debug(
'cannot find ship to delete in %s fg %r', faction, fgname)
489 return 'Base_'+system
499 del ret[ret.index(basefg)]
516 return Director.getSaveStringLength(ccp,key)
521 for fgs
in FGsInSystem (faction,system):
523 ships=ReadStringList (ccp,MakeFGKey (fgs,faction))
526 count+= int(ships[num])
528 debug.error(
'number ships '+ships[num] +
' not read')
532 def _prob_round(curnum):
535 diff = curnum-int(curnum)
537 if (vsrandom.uniform (0,1)<diff):
540 if (vsrandom.uniform (0,1)<-diff):
547 ships = ReadStringList (ccp,
MakeFGKey(fgname,faction))
550 rez.append((ships[num],int(ships[num+offset])))
556 shipinquestion=Director.getSaveString(ccp,key,num)
558 return shipinquestion
573 if (mini ==
None)
or (minv > vals[i]):
581 import dynamic_universe
589 S = Vector.Cross (T,R)
592 vsrandom.uniform (1.5*orbitradius,orbitradius)
595 bas=VS.launch(
"Base",type,faction,
"unit",
"default",1,1,
Vector.Add(loc,R),
'')
596 nam=GetRandomBaseName (1,faction);
597 R = Vector.Scale (R,(RMag+2.0*bas.rSize())/RMag)
598 S = Vector.Scale (S,(SMag+2.0*bas.rSize())/SMag)
599 bas.orbit (unit,orbitspeed,R,S,(0.0,0.0,0.0))
607 radpct = VS.getPlanetRadiusPercent()
609 radpct = sigrsize*(1+radpct)
610 if radpct<200000000.+sigrsize:
611 radpct=200000000.+sigrsize
612 speed = vsrandom.uniform (0,50)
613 debug.debug(
'Lauching %s base %s by sig %s (%s)', faction, type, sig.getName(), sig.getFullname())
614 launchBaseOrbit (type,faction,sig.Position(),radpct,speed,sig)
620 maxspeed=un.maxAfterburnerSpeed()+30.1
622 launchBaseOrbit (type,faction,un.Position(),maxspeed*180,0,un)
624 def launchBase (type,num,faction,system,sig_units,numfighters):
631 for i
in xrange (num):
635 indices = [one%len(sig_units),
637 three%len(sig_units)];
638 which =
minIndex(numfighters,indices)
639 if (sig_units[which].isJumppoint()):
640 numfighters[which]+=20
642 numfighters[which]+=1
643 launchSingleBase (type,faction,sig_units[which])
645 for i
in xrange(num):
649 return [0
for i
in xrange(le)]
653 print 'Launching bases for '+sys
654 fac = VS.GetGalaxyFaction(sys)
655 fgs = BaseFG (fac,sys)
657 shipcount=
zeros(len(sig_units))
659 launchBase(fg[0],fg[1],fac,sys,sig_units,shipcount)
663 while leng>1
or leng<.00001:
670 return (X/leng,Y/leng,Z/leng)
680 iter = VS.getUnitList()
681 while iter.notDone():
683 rvset[un.getFlightgroupName()] = 1
697 if not fg
in launched:
705 import launch_recycle
708 ownerfac= VS.GetGalaxyFaction(sys)
714 for sig
in sig_units:
715 if sig.isJumppoint():
730 isHostile=VS.GetRelation(ownerfac,faction)<0
731 isForeign=faction.find(ownerfac)==-1
734 if basecount+jumpcount:
735 frac=len(fglist)/float(basecount+jumpcount)
739 if basecount+planetcount+jumpcount:
740 frac=len(fglist)/float(planetcount+basecount+jumpcount)
744 for flightgroup
in fglist:
749 typenumbers=
ShipsInFG(flightgroup,faction)
750 debug.debug(
"Really Far Apart around %s and 10000",XYZ)
751 debug.debug(
" launching %s for %s at %s", typenumbers, faction, XYZ)
752 launch_recycle.launch_types_around(flightgroup,faction,typenumbers,
'default',1,XYZ,0,
'',
'',1,10000)
754 for flightgroup
in fglist:
758 typenumbers=
ShipsInFG(flightgroup,faction)
759 debug.debug(
" launching %s for %s", typenumbers, faction)
761 launch_recycle.launch_types_around(flightgroup,faction,typenumbers,
'default',sig.rSize()*
vsrandom.randrange(10,100),sig,0,
'',
'',1,10000)
767 diff=VS.GetDifficulty()
779 ships = ReadStringList (ccp,
MakeFGKey(fgname,faction))
787 if (launchnum>count):
794 for j
in xrange(nent):
796 which -= int(ships[pos+2])
801 for i
in xrange(nent):
804 ret.append((ships[pos],retn[i]))
808 key = MakeFGKey (fgname,faction)
809 ships=ReadStringList (ccp,key)
810 debug.debug(
'LaunchLandShip: fg:%s fac:%s typ:%s, num:%s', fgname, faction, typ, numlaunched)
812 if (typ == ships[num]):
814 ntobegin=int(ships[num+1])
815 nactive=int(ships[num+2])
817 debug.debug(
"attempting launch for ship %s, begin %s, act %s)",
818 typ, ntobegin, nactive)
829 debug.debug(
'error more ships launched than in FG %s', fgname)
830 if (nactive>ntobegin):
832 debug.debug(
'error ships %s landed that never launched', typ)
833 Director.putSaveString(ccp,key,num+2,
str(nactive))
838 LaunchLandShip (fgname,faction,typ,num)
845 for i
in AllFlightgroups (faction):
846 ret+=ShipsInFG (i,faction,offset)
858 for i
in AllFlightgroups (faction):