1 """ This moduleprovides functions for creating, storing and activating
2 campaign, guild, and fixer missions.
37 while len(players)<=num:
52 return VS.getCurrentPlayer()
61 if args[0] ==
'AddNewMission':
65 num_briefing_vars = int(args[4])
67 for i
in range(num_briefing_vars):
68 briefing_vars[args[i*2+5]] = args[i*2+6]
69 AddNewMission(which,
None,
None, brief0, brief1, briefing_vars, briefing_vars)
70 elif args[0] ==
'LoadLastMission':
73 elif args[0] ==
'CreateFixerMissions':
77 if isinstance(m,tuple):
100 if hasattr(director,
'aborted'):
101 if getattr(director,
'aborted'):
116 """ Makes a mission an active mission. """
117 print "#given mission argument: ", which
120 which =
str(players[plr].lastMission)
121 print "#loading mission: ", which
123 custom.run(
'mission_lib', [
'LoadLastMission',which],
None)
126 last_constructor = players[plr].last_constructor
127 last_args = players[plr].last_args
128 last_briefing_vars = players[plr].last_briefing_vars
129 last_briefing = players[plr].last_briefing
131 if which
in last_constructor
and which
in last_args:
132 if last_constructor[which]==
None:
133 if type(last_args[which])==str:
136 script =
"%(args)r()"
137 vars = dict(args=last_args[which])
140 import %(constructor)s
141 temp=%(constructor)s.%(constructor)s%(args)s
142 mission_lib.AddMissionHooks(temp)
145 cons=last_constructor[which]
148 if type(last_args[which])==str:
149 args = last_args[which]
151 args =
repr(last_args[which])
152 vars = dict(constructor=cons,args=args)
153 script = script % vars
154 if script[:1] ==
'#':
157 mission_lib.SetMissionHookArgs(%(amentry)r)
159 amentry = last_briefing_vars[0].
get(which,dict())
161 amentry.update(last_briefing_vars[1].
get(which,dict()).iteritems())
164 (
'DESCRIPTION',last_briefing[0].
get(which,
'')),
165 (
'ACCEPT_MESSAGE',last_briefing[1].
get(which,
''))
174 vars = dict(amentry=amentry,postscript=script)
175 script = prescript % vars
177 VS.LoadNamedMissionScript(which, script)
187 which=players[plr].lastMission
189 last_constructor = players[plr].last_constructor
190 last_args = players[plr].last_args
191 last_briefing_vars = players[plr].last_briefing_vars
192 last_briefing = players[plr].last_briefing
193 for container
in ( last_args,last_constructor,
194 last_briefing[0],last_briefing[1],
195 last_briefing_vars[0],last_briefing_vars[1] ):
196 if which
in container:
198 players[plr].lastMission=
None
202 active_missions = players[plr].active_missions
203 active_missions_nextid = players[plr].active_missions_nextid
205 active_missions.append(entry)
206 active_missions[-1].
update([(
'ENTRY_ID',active_missions_nextid)])
207 active_missions_nextid += 1
208 return active_missions_nextid-1
212 players[plr].active_missions =
filter(
lambda x:x.get(
'ENTRY_ID',
None)!=entry_id,
213 players[plr].active_missions)
217 last_briefing = players[plr].last_briefing
220 for which
in last_briefing[first]:
221 if str(which).startswith(prefix):
222 nummissions = nummissions + 1
226 """ Outputs the briefing from fixer missions on the base screen. """
228 last_briefing = players[plr].last_briefing
229 last_briefing_vars = players[plr].last_briefing_vars
234 for name
in last_briefing_vars[0]:
235 if last_briefing_vars[0][name][
'MISSION_ID'] ==
str(whichid):
240 which = last_briefing_vars[0].
keys()[0]
241 debug.warn(
"mission_lib.BriefLastMission couldn't find mission id"+
str(whichid))
243 if first<0
or first>=len(last_briefing):
245 if (which
in last_briefing[first]):
249 curmission = s_which[len(s_which)-1]
250 if curmission.isdigit():
252 curmission =
str(int(curmission)+1)
255 currmission =
str(whichid)
256 for i
in s_which[:len(s_which)-1]:
257 w_prefix +=
str(i) +
'/'
261 template = template.replace(
'#MISSION_NUMBER#',
str(curmission))
262 template = template.replace(
'#MISSION_ID#',
str(whichid))
263 template = template.replace(
'#GUILD_NAME#',s_which[0])
264 template = template.replace(
'#NUM_MISSIONS#',
str(nummissions))
265 template = template.replace(
'#DESCRIPTION#',
str(last_briefing[first][which]))
266 template = template.replace(
'#SHORT_DESCRIPTION#',
str(last_briefing_vars[first][which][
'MISSION_SHORTDESC']))
268 template = template.replace(
'#MISSION_TYPE#',last_briefing_vars[first][which][
'MISSION_TYPE'])
270 template = template.replace(
'#MISSION_TYPE#',
'')
275 Base.SetTextBoxText(Base.GetCurRoom(),textbox, template)
277 Base.Message (template)
281 def AddNewMission(which,args,constructor=None,briefing0='',briefing1='',vars0=None,vars1=None):
282 """ Adds a mission to the list of missions stored in playerInfo. """
283 if not isinstance(vars0,dict):
288 sendargs = [
"AddNewMission", which, briefing0, briefing1,lenvars0]
291 sendargs.append(vars0[key])
296 playerInfo = players[plr]
299 playerInfo.last_constructor[which] = constructor
300 playerInfo.last_args[which] = args
301 playerInfo.last_briefing[0][which] = briefing0
302 playerInfo.last_briefing[1][which] = briefing1
303 playerInfo.last_briefing_vars[0][which] = vars0
304 playerInfo.last_briefing_vars[1][which] = vars1
307 """ Returns a list of missions that were already generated.
308 With the activelist parameter, one can filter the active or
312 active_missions = players[plr].active_missions
313 last_briefing_vars = players[plr].last_briefing_vars
314 last_briefing = players[plr].last_briefing
317 return active_missions
319 return list( dict( list(last_briefing_vars[0][index].iteritems())+
320 [(
'DESCRIPTION',last_briefing[0][index]),
321 (
'ACCEPT_MESSAGE',last_briefing[1][index]),
322 (
'MISSION_NAME',index)] )
323 for index
in last_briefing[0] )
327 return 'Your destination is this system.'
328 str=
"First of all, you will need to fly to the %s jumppoint. "%jumps[0].
split(
'/')[-1]
330 str+=
"Then jump in the %s jumppoint. "%j.split(
'/')[-1]
336 args = (creds,
'pirates',5,
'Contraband',1)
337 briefing0 =
'Arr Matey. We have a target in this system that needs a lil roughin up. We need you to bag a merchant and deliver her cargo into our hands. It\'s worth '+
str(creds)+
' to us. Up to you, ya space pirate.'
338 briefing1 =
'Ahoy! We\'ll be lookin for that cargo mighty soon!'
339 vars = {
'MISSION_TYPE' :
'PIRACY',
340 'MISSION_SHORTDESC' :
'Plunder merchant target for %s' % creds }
342 vars[
'MISSION_ID'] = vars[
'MISSION_ID']
344 vars[
'MISSION_ID'] = which
345 description = vars[
'MISSION_SHORTDESC']
346 AddNewMission(description,args,constructor,briefing0,briefing1,vars,vars)
347 return (
"bases/fixers/pirate.spr",
"Talk with the Pirate",which)
354 creds=numsys*2500+diff*800
355 args = (
'pirates', 0, 6, diff,creds, 1, 1200,
'Contraband',jumps)
356 briefing0 =
'We need some...*cough*... cargo delivered to some of our pirates in a nearby system: '+
Jumplist(jumps)+
' It\'d be preferable if ye kept the ole po\' off yo back durin the run. Will ya do it for '+
str(creds)+
' creds?'
357 briefing1 =
'Thanks pal; keep it on the d&l if you know my meanin.'
358 vars = {
'MISSION_TYPE' :
'CONTRABAND',
359 'MISSION_SHORTDESC' :
'Deliver contraband to %s for %s' % (
Jumplist(jumps),creds) }
361 vars[
'MISSION_ID'] = vars[
'MISSION_ID']
363 vars[
'MISSION_ID'] = which
364 description = vars[
'MISSION_SHORTDESC']
365 AddNewMission(description,args,constructor,briefing0,briefing1,vars,vars)
366 return (
"bases/fixers/pirate.spr",
"Talk with the Pirate",which)
369 """ This function gets a random mission and saves the information in
370 an array as the which element. Returns the sprite file and text."""
371 which =
str(whichnum)
373 fac = VS.GetGalaxyFaction(VS.getSystemFile())
378 elif (VS.GetRelation(fac,
"pirates")<-.8
and missiontype<.1):
379 missiontype = 0.1 + 0.9 * missiontype
381 if (missiontype<.05):
383 elif (missiontype<.1):
387 for indx
in range(Director.getSaveStringLength(plr,
"mission_scripts")):
388 script=Director.getSaveString(plr,
"mission_scripts",indx)
389 if script.find(
"#F#")!=-1:
390 goodlist.append(indx)
395 script = Director.getSaveString(plr,
"mission_scripts",i)
396 desc = Director.getSaveString(plr,
"mission_descriptions",i)
398 vars.setdefault(
'MISSION_SHORTDESC',Director.getSaveString(plr,
"mission_names",i))
399 Director.eraseSaveString(plr,
"misson_scripts",i)
400 Director.eraseSaveString(plr,
"misson_descriptions",i)
401 Director.eraseSaveString(plr,
"misson_names",i)
402 Director.eraseSaveString(plr,
"misson_vars",i)
403 mylist = script.split(
"#")
405 vars[
'MISSION_ID'] = vars[
'MISSION_ID']
407 vars[
'MISSION_ID'] = which
408 description = vars[
'MISSION_SHORTDESC'].
split(
"/")[1]
409 vars[
'MISSION_NAME'] = description
410 AddNewMission(description,script,
None,desc,mylist[4],vars,vars)
411 return (mylist[2], mylist[3], which, description)
417 """ This function creates missions with ids "0" and "1" for use with the fixers
432 while newimg==img
and i<10:
458 bounds = bounds + mis[1]
461 for midx
in range(len(goodlist)):
462 if pos>=goodlist[midx][1]:
463 pos = pos - goodlist[midx][1]
466 return len(goodlist)-1
480 for indx
in range(Director.getSaveStringLength(plr,
"mission_scripts")):
481 script=Director.getSaveString(plr,
"mission_scripts",indx)
482 if (script.find(prefix)!=-1):
483 missiontype=script[3:script.find(
'#',3)]
485 if (accepttypes==
None):
487 elif (missiontype
in accepttypes):
488 freq = accepttypes[missiontype]
489 elif (
'*' in accepttypes):
490 freq = accepttypes[
'*']
492 goodlist.append( (indx,freq) )
493 if len(goodlist)<nummissions:
494 nummissions=len(goodlist)
496 for missionnum
in range(0,nummissions):
501 which=guildname+
'/'+
str(missionnum)
502 script=Director.getSaveString(plr,
"mission_scripts",i)
503 desc=Director.getSaveString(plr,
"mission_descriptions",i)
505 vars.setdefault(
'MISSION_SHORTDESC',Director.getSaveString(plr,
"mission_names",i))
512 Director.eraseSaveString(plr,
"mission_scripts",i)
513 Director.eraseSaveString(plr,
"mission_descriptions",i)
514 Director.eraseSaveString(plr,
"mission_names",i)
515 Director.eraseSaveString(plr,
"mission_vars",i)