Vega strike Python Modules doc  0.5.1
Documentation of the " Modules " folder of Vega strike
 All Data Structures Namespaces Files Functions Variables
defend.py
Go to the documentation of this file.
1 from go_to_adjacent_systems import *
2 from go_somewhere_significant import *
3 import vsrandom
4 import launch
5 import faction_ships
6 import VS
7 import Briefing
8 import universe
9 import unit
10 import Director
11 import quest
12 class defend (Director.Mission):
13  def __init__ (self,factionname,numsystemsaway, enemyquantity, distance_from_base, escape_distance, creds, defendthis, defend_base,protectivefactionname='',jumps=(),var_to_set='',dynamic_flightgroup='',dynamic_type='', dynamic_defend_fg='',waves=0, greetingText=['We will defeat your assets in this battle, privateer...','Have no doubt!']):
14  Director.Mission.__init__(self)
16  self.arrived=0
17  self.waves=waves;
18  self.greetingText=greetingText
19  self.protectivefaction = protectivefactionname
20  self.var_to_set=var_to_set
21  self.quantity=0
22  self.mplay="all"
23  self.defendbase = defend_base
24  self.dynatkfg = dynamic_flightgroup
25  self.dynatktype = dynamic_type
26  self.dyndeffg = dynamic_defend_fg
27  self.attackers = []
28  self.objective= 0
29  self.targetiter = 0
31  self.defend = defendthis
32  self.defend_base = defend_base
33  self.faction = factionname
34  self.escdist = escape_distance
35  minsigdist=unit.minimumSigDistApart()
36  if (minsigdist*.5<self.escdist):
37  self.escdist = minsigdist
38  self.cred=creds
39  self.respawn=0
40  self.quantity=enemyquantity
41  self.savedquantity=enemyquantity
42  self.distance_from_base=distance_from_base
43  self.defendee=VS.Unit()
44  self.difficulty=1
45  self.you=VS.getPlayer()
46  name = self.you.getName ()
48  self.adjsys = go_to_adjacent_systems(self.you,numsystemsaway,jumps)
49  self.adjsys.Print("You are in the %s system,","Proceed swiftly to %s.","Your arrival point is %s.","defend",1)
50  VS.IOmessage (2,"defend",self.mplay,"And there eliminate any %s starships." % self.faction)
51  def SetVarValue (self,value):
52  if (self.var_to_set!=''):
53  quest.removeQuest (self.you.isPlayerStarship(),self.var_to_set,value)
54  def SuccessMission (self):
55  self.you.addCredits (self.cred)
56  VS.AdjustRelation(self.you.getFactionName(),self.faction,.03,1)
57  self.SetVarValue(1)
58  VS.IOmessage(0,"defend",self.mplay,"[Computer] Defend mission accomplished")
59  if (self.cred>0):
60  VS.IOmessage(0,"defend",self.mplay,"[Computer] Bank account has been credited as agreed.")
61  VS.terminateMission(1)
62  def FailMission (self):
63  self.you.addCredits (-self.cred)
64  VS.AdjustRelation(self.you.getFactionName(),self.faction,-.02,1)
65  self.SetVarValue(-1)
66  VS.IOmessage (0,"defend",self.mplay,"[Computer] Detected failure to protect mission asset.")
67  VS.IOmessage (0,"defend",self.mplay,"[Computer] Mission failed!")
68  VS.IOmessage (1,"defend",self.mplay,"[Computer] Bank has been informed of failure to assist asset. They have removed a number of your credits as a penalty to help pay target insurance.")
69  VS.terminateMission(0)
70  def NoEnemiesInArea (self,jp):
71  if (self.adjsys.DestinationSystem()!=VS.getSystemFile()):
72  return 0
73  if (self.ship_check_count>=len(self.attackers)):
74  VS.setCompleteness(self.objective,1.0)
75  return 1
76 
77  un= self.attackers[self.ship_check_count]
78  self.ship_check_count+=1
79  if (un.isNull() or (un.GetHullPercent()<.7 and self.defendee.getDistance(un)>7000)):
80  return 0
81  else:
82  VS.setObjective(self.objective,"Destroy the %s"%unit.getUnitFullName(un))
83  self.ship_check_count=0
84  return 0
85 
86  def GenerateEnemies (self,jp,you):
87  VS.IOmessage (0,"escort mission",self.mplay,"You must protect %s." % unit.getUnitFullName(jp,True))
88  count=0
89  jp.setMissionRelevant()
90  VS.addObjective ("Protect %s from the %s" % (unit.getUnitFullName(jp),self.faction.capitalize().replace("_"," ")))
91  self.objective = VS.addObjective ("Destroy All %s Hostiles" % self.faction)
92  VS.setCompleteness(self.objective,0.0)
93  print "quantity "+str(self.quantity)
94  while (count<self.quantity):
95  L = launch.Launch()
96  L.fg="Shadow";L.dynfg=self.dynatkfg;
97  if (self.dynatktype==''):
99  else:
100  L.type=self.dynatktype
101  L.ai="default";L.num=1;L.minradius=2000.0;L.maxradius=4500.0
102  try:
103  L.minradius*=faction_ships.launch_distance_factor
104  L.maxradius*=faction_ships.launch_distance_factor
105  except:
106  pass
107  L.faction=self.faction
108  launched=L.launch(you)
109  if (count==0):
110  self.you.SetTarget(launched)
111  if (self.defend):
112  launched.SetTarget (jp)
113  else:
114  launched.SetTarget (you)
115  if (self.dedicatedattack):
116  launched.setFgDirective('B')
117  self.attackers += [ launched ]
118  count+=1
119  if (self.respawn==0 and len(self.attackers)>0):
120  self.respawn=1
121  import universe
122  universe.greet(self.greetingText,self.attackers[0],you);
123  else:
124  VS.IOmessage (0,"escort mission",self.mplay,"Eliminate all %s ships here" % self.faction)
125 
126  self.quantity=0
127  def Execute (self):
128  if (self.you.isNull() or (self.arrived and self.defendee.isNull())):
129  VS.IOmessage (0,"defend",self.mplay,"#ff0000You were unable to arrive in time to help. Mission failed.")
130  self.SetVarValue(-1)
131  VS.terminateMission(0)
132  return
133  if (not self.adjsys.Execute()):
134  return
135  if (not self.arrived):
136  self.arrived=1
137  tempfaction=''
138  if (self.defend_base):
139  tempfaction=self.protectivefaction
140  if (tempfaction==''):
141  tempfaction = faction_ships.get_enemy_of(self.faction)
142  self.adjsys=go_somewhere_significant (self.you,self.defend_base or self.defend,self.distance_from_base,self.defend,tempfaction,self.dyndeffg,1,not self.defend_base)
143  self.adjsys.Print ("You must visit the %s","defend","near the %s", 0)
144  self.defendee=self.adjsys.SignificantUnit()
145  else:
146  if (self.defendee.isNull ()):
147  if (self.defend):
148  self.FailMission(you)
149  else:
150  self.SuccessMission()
151  return
152  else:
153  if (self.quantity>0):
154  self.GenerateEnemies (self.defendee,self.you)
155  if (self.ship_check_count==0 and self.dedicatedattack):
156  if (self.targetiter>=len(self.attackers)):
157  self.targetiter=0
158  else:
159  un = self.attackers[self.targetiter]
160  if (not un.isNull()):
161  if (self.defend):# if (not un.isNull()
162  if (un.getName() in faction_ships.isBomber):
163  if (self.quantity >= faction_ships.isBomber[un.getName()]):
164  un.SetTarget (self.defendee)
165  else:
166  un.setFgDirective('b')
167  else:
168  un.setFgDirective('b')
169  else:
170  un.SetTarget (self.you)
171  self.targetiter=self.targetiter+1
172  if (self.NoEnemiesInArea (self.defendee)):
173  if (self.waves>0):
174  self.quantity=self.savedquantity
175  self.waves-=1
176  else:
177  self.SuccessMission()
178  def initbriefing(self):
179  print "ending briefing"
180  def loopbriefing(self):
181  print "loop briefing"
182  Briefing.terminate();
183  def endbriefing(self):
184  print "ending briefing"
185 
186 def initrandom(factionname,numsysaway,minenquant,maxenquant,credperen,defendit,defend_base,p_faction='',jumps=(),var_to_set=''):
187  enq=minenquant
188  enq=vsrandom.uniform(minenquant,maxenquant)
189  return defend(factionname,numsysaway,enq,8000.0,100000.0,enq*credperen,defendit,defend_base,p_faction,jumps,var_to_set)