def AllFGsInSystem(faction, system): key = MakeStarSystemFGKey(system) leg = Director.getSaveStringLength(ccp, key) # if 1:#(not (Director.dontdoprint)): # debug.info(faction) facnum = VS.GetFactionIndex(faction) ret = [] if (leg > facnum): st = Director.getSaveString(ccp, key, facnum) if (len(st) > 0): ret = st.split('|') return ret
def _RemoveFGFromSystem(fgname, faction, starsystem): key = MakeStarSystemFGKey(starsystem) leg = Director.getSaveStringLength(ccp, key) index = VS.GetFactionIndex(faction) if (leg > index): tup = Director.getSaveString(ccp, key, index).split('|') try: del tup[tup.index(fgname)] Director.putSaveString(ccp, key, index, ListToPipe(tup)) except: debug.info('fg ' + fgname + ' not found in ' + starsystem) else: debug.info('no ships of faction ' + faction + ' in ' + starsystem)
def NumFactionFGsInSystem(faction, system): key = MakeStarSystemFGKey(system) leg = Director.getSaveStringLength(ccp, key) facnum = VS.GetFactionIndex(faction) st = '' if (leg > facnum): #debug.debug("ccp=%s" % (ccp)) #debug.debug("key=%s" % (key)) #debug.debug("facnum=%s" % (facnum)) st = Director.getSaveString(ccp, key, facnum) #debug.debug(">>%s<< = Director.getSaveString(ccp=%s, key=%s, facnum=%s)" % (st, ccp, key, facnum)) if (st): return st.count('|') + 1 return 0
def updatePlayerKillList(playernum,faction): fac = VS.GetFactionIndex(faction) ret=0 for i in xrange(VS.getNumPlayers()-len(player_kill_list)): player_kill_list.append([]); for i in xrange(VS.getNumPlayers()): numfac=Director.getSaveDataLength(i,"kills") for j in xrange(numfac-len(player_kill_list[i])): player_kill_list[i].append(0) for j in xrange(numfac): if (i==playernum and j==fac): ret = Director.getSaveData(i,"kills",j)-player_kill_list[i][j]; player_kill_list[i][j]=Director.getSaveData(i,"kills",j) return ret
def _AddFGToSystem(fgname, faction, starsystem): key = MakeStarSystemFGKey(starsystem) leg = Director.getSaveStringLength(ccp, key) index = VS.GetFactionIndex(faction) if (leg > index): st = Director.getSaveString(ccp, key, index) if (len(st) > 0): st += '|' try: test = st + fgname except: fgname = fgname.decode('utf8', 'ignore') Director.putSaveString(ccp, key, index, st + fgname) else: for i in range(leg, index): Director.pushSaveString(ccp, key, '') Director.pushSaveString(ccp, key, fgname)
def Siege(fac): global siegenumber global siegenumtimes global siegeprob # turns_till_siege_effective=100 if (not fac in faction_ships.siegingfactions): return numfg= fg_util.NumAllFlightgroups(fac) if (numfg): if (siegenumber==0): siegeprob = float(numfg)/float(faction_ships.siegingfactions[fac]); siegenumtimes = int (siegeprob) if (siegenumtimes==0): siegenumtimes=1 else: siegeprob =1 if siegenumber>=siegenumtimes: siegenumber=0 return 0 else: if (vsrandom.uniform(0,1)<siegeprob): fg =fg_util.RandomFlightgroup(fac) sys = fg_util.FGSystem(fg,fac) enfac=VS.GetGalaxyFaction(sys) if (not sys in faction_ships.invincible_systems): #fg_util.CheckAllShips(fac) #fg_util.CheckAllShips(enfac) if enfac == "unknown": debug.debug("exploration: "+sys) fgleader = fg_util.getFgLeaderType(fg,fac) exploration = 1 else: exploration = 0 if (VS.GetRelation(fac,enfac)<0 and neighborFaction(sys,fac)):#FIXME maybe even less than that numenemyfg = fg_util.NumFactionFGsInSystem(enfac,sys) numfriendfg = fg_util.NumFactionFGsInSystem(fac,sys) #debug.debug('siegarol enemioes '+str(numenemyfg)+ ' friends '+str(numfriendfg)) global dnewsman_ if exploration: if sys != 'nil': generate_dyn_universe.TakeoverSystem(fac,sys) #HACK, regenerate bases instnatly dnewsman_.writeDynamicString([str(Director.getSaveData(0,"stardate",0)),dnewsman_.TYPE_EXPLORATION,dnewsman_.STAGE_END,fac,enfac,dnewsman_.SUCCESS_WIN,str(getImportanceOfSystem(sys)),sys,dnewsman_.KEYWORD_DEFAULT,fg,fgleader,"unknown","unknown"]) #FIXME use keyword (ignore #keyword for now Daniel) elif (numenemyfg==0 and numfriendfg==0): #If both annihalate each other completely (unlikely but possible) facnum = VS.GetFactionIndex (fac) debug.debug('cehcking started') debug.error("DRAW error "+fg+" sys has "+sys+" has " +str(fg_util.NumFactionFGsInSystem(fac,sys))+" String is "+Director.getSaveString(0,fg_util.MakeStarSystemFGKey(sys),facnum)) if sys != 'nil': dnewsman_.writeDynamicString([str(Director.getSaveData(0,"stardate",0)),dnewsman_.TYPE_SIEGE,dnewsman_.STAGE_END,fac,enfac,dnewsman_.SUCCESS_WIN,str(getImportanceOfSystem(sys)),sys,dnewsman_.KEYWORD_DEFAULT,fg,"unknown","unknown","unknown"]) #FIXME use keyword (ignore #keyword for now Daniel) elif (numenemyfg==0 and (fg_util.CapshipInFG(fg,fac) or moveSurroundingCapshipsToSiege(fac,sys))): #If aggressor succeeded debug.debug(fac + ' took over '+ sys + ' originally owned by '+enfac) #ok now we have him... while the siege is going on the allies had better initiate the battle--because we're now defending the place... so that means if the owners are gone this place is ours at this point in time fgs = fg_util.FGsInSystem(fac,sys) if (len(fgs)>0): fgs=fgs[0] else: fgs = "unknown" if sys != 'nil': dnewsman_.writeDynamicString([str(Director.getSaveData(0,"stardate",0)),dnewsman_.TYPE_SIEGE,dnewsman_.STAGE_END,fac,enfac,dnewsman_.SUCCESS_WIN,str(getImportanceOfSystem(sys)),sys,dnewsman_.KEYWORD_DEFAULT,fgs,"unknown","unknown","unknown"]) #FIXME use keyword (ignore #keyword for now Daniel) generate_dyn_universe.TakeoverSystem(fac,sys) #HACK, regenerate bases instnatly elif (numfriendfg==0): #If aggressor lost debug.error('wtf!!') fgs = fg_util.FGsInSystem(enfac,sys) if (len(fgs)>0): fgs=fgs[0] else: fgs = "unknown" if sys != 'nil': dnewsman_.writeDynamicString([str(Director.getSaveData(0,"stardate",0)),dnewsman_.TYPE_SIEGE,dnewsman_.STAGE_END,fac,enfac,dnewsman_.SUCCESS_LOSS,str(getImportanceOfSystem(sys)),sys,dnewsman_.KEYWORD_DEFAULT,"unknown","unknown",fgs,"unknown"]) #FIXME use keyword (ignore #keyword for now Daniel) #FIXME add if statements if there is instead a (non appocalyptic) draw (if waring factions have relations "almost neutral" you could have a cease fire, or if the two factions are evenly matched and go nowhere a withdraw of the attackers might occur)!!! siegenumber+=1 return 1 else: return 0
def MakeStarSystemFactionFGKey(starsystem,faction): skey = MakeStarSystemFGKey (starsystem) index = VS.GetFactionIndex (faction) key = "%s[%d]" % (skey,index) return key
def MakeFGKey (fgname,faction): return 'FG:'+str(fgname)+'|'+str(VS.GetFactionIndex(faction))
def MakeFactionKey (faction): return 'FF:'+str(VS.GetFactionIndex(faction))