Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?xml version = "1.0" encoding = "UTF-8" ?>
- <!--
- Hacknet mission descriptor file
- Note: This format is pretty hacked together, and is a lot clunkier than the computer loader one.
- Not changing this was part of my "No re-writes" policy for Hacknet, so some of the elements are
- very strict about their ordering and case sensitivity. Be careful, and test!
- -->
- <!--
- id : the mission ID - this isn't used in-code but is sometimes useful in debugging and testing.
- activeCheck : if this is set to true, when this mission is active, Hacknet will test for this mission being complete
- every frame, instead of only when the player responds to an email. This is very useful for creating delays,
- and for situations where the player is contacted from outside an existing chain.
- shouldIgnoreSenderVerification : This prevents the check to ensure that the player responded to the right sender
- when checking for mission completion.
- -->
- <mission id="testMission0" activeCheck="true" shouldIgnoreSenderVerification="false">
- <goals>
- <!-- All goals added to a mission have to be complete before the mission will complete-->
- <!-- Task to delete the file on node target, at path/file
- This entry asks for deletion of home/asdf.txt on machine with ID "missionTestNode"-->
- <goal type="filedeletion" target="advExamplePC" file="asdf.txt" path="home"/>
- <!-- Task to delete ALL files on node target, in the folder at path -->
- <goal type="clearfolder" target="advExamplePC" path="home"/>
- <!-- Task to download the file at the path
- This entry asks for the player to download (SCP) home/asdf.txt on machine with ID "missionTestNode"-->
- <goal type="filedownload" target="advExamplePC" file="downloadFile.txt" path="home"/>
- <!-- Task to add the text specified by keyword to the specified file. This is usually achieved by the "replace" command.
- It's possible to make the keyword a larger block and task the player to replace one file with another.
- This entry asks for the player to add the test "extension" top the file home/asdf.txt on machine with ID "missionTestNode"-->
- <goal type="filechange" target="advExamplePC" file="changeFile.txt" path="home" keyword="extension"/>
- <!-- Task to remove the text specified by keyword to the specified file. This is usually achieved by the "replace" command.
- The extra attribute "removal" tasks the player with removing a block of text from a file. Combining this with another filechange
- task can require a "replacement" of text (removing some, adding a different block).
- This entry asks for the player to add the test "extension" top the file home/asdf.txt on machine with ID "missionTestNode"-->
- <goal type="filechange" target="advExamplePC" file="changeFile.txt" path="home" keyword="data" removal="true" caseSensitive="true"/>
- <!-- Task to get admin on the target system.
- NOTE: This will only be 'passed' if the player responds *while they are the admin of the system*
- Servers that have an "admin" field that resets the password automatically will make this mission not complete if
- it's reset in the time that the player takes to disconnect from the system and respond-->
- <goal type="getadmin" target="advExamplePC"/>
- <!-- Task to require a string passed in via the "Additional Info" field in the reply email screen.
- This task requires the player to reply with the string "password" added.-->
- <goal type="getstring" target="password" />
- <!-- This task will not complete until [time] seconds after the first attempt to complete it has been made.
- This is mostly only useful for use with the "activeCheck" flag on the mission set to true.
- A mission with a delay goal, that is silenced and that's set to auto-check essentially acts as a delay timer buffer between responses for missions
- This can add a human-feeling response time to missions.-->
- <goal type="delay" time="10.0"/>
- <!-- This will only accept if the target flag has been set.
- Mission end functions can use the function addFlags:[flagname],[flagname2],[etc] to set flags, then you can have a mission only complete if a flag is set.
- Some daemons add flags when events happen. For example, a pacemaker server adds the flag "PATIENT_NAME:DEAD" when the patient dies.
- -->
- <goal type="hasflag" target="flagName"/>
- <!-- Task to upload the file on server bitMission00 at bin/target_filename.txt to server with ID "destComp" to folder bin
- The folder name Dest/Uploads is the folder that files are uploaded to when using an Upload server daemon, so it's the most useful location normally-->
- <goal type="fileupload" target="advExamplePC" file="asdf.txt" path="home" destTarget="introFactionHomeNode" destPath="Drop/Uploads"/>
- <!-- For upload tasks, adding the flag decrypt=true requires the player the decypher the file before uploading it. If that file is password protected, you must include the password
- in the goal with decryptPass="password"
- For uploading encrypted files - put the encrypted name here (ending with .dec usually). It doesn't matter what the filename of the decrypted one becomes
- The code will check for the right content.-->
- <goal type="fileupload" target="advExamplePC" file="asdf2.dec" path="home" destTarget="introFactionHomeNode" destPath="home" decrypt="true" decryptPass="password"/>
- <!-- Task to add the degree matching the degree name and uni and GPA details for the listed owner. This task *requires* an academic server to exist.
- An owner is defined by name - to add a person to the simulation, define them in the People folder and refer to them by name here
- The academic server must have the following properties:
- 1: ID must be "academic"
- 2: It must contain an Academic Database Daemon-->
- <goal type="AddDegree" owner="John Stalvern" degree="Masters in Digital Security" uni="Manchester University" gpa="3.0"/>
- <!-- Task to remove all degrees from the academic server for a specified owner. Note that for this one, you *MUST* have the ID of your database be "academic" or it wont find it. -->
- <goal type="wipedegrees" owner="John Stalvern"/>
- <!-- Task to have an email sent to a specified address with a defined subject. This one requires an email
- be sent to mailuser123@jmail.com with the subject "Email Subject!". More specifically, it requires that file to exist in their inbox
- folder on the server ID "jmail" that contains a mail server.
- This is mostly useful for detecting sent medical records from a medical database.
- Medical records have the subject line: "MedicalRecord - Lastname_Firstname"-->
- <goal type="sendemail" mailServer="jmail" recipient="mailuser123" subject="Email Subject!"/>
- <!-- Death row missions not implemented for mods yet
- goal type="removeDeathRowRecord" fname="Matt" lname="Trobbiani"/>
- goal type="modifyDeathRowRecord" fname="Matt" lname="Trobbiani">Last Words Here</DeathRowMission>
- -->
- <!-- DLC Goals -->
- <goal type="getadminpasswordstring" target="advExamplePC"/>
- </goals>
- <!-- The following items all need to in-order, so be careful. -->
- <!-- missionStart (Optional - just remove it to not use it) allows you to define a function that gets run when a mission is Loaded in.
- If suppress is set to true, it will only activate when the mission email is sent -
- otherwise it will activate when it is loaded. This is very important to remember when
- writing missions designed for use in a hub server - those missions are loaded when the save game is loaded
- or a new game is started.
- val: This field lets you pass in integer data to the specified function
- The content field is the function name. Following are the available functions:
- setFaction:FACTION_ID
- -Used like setFaction:entropy, sets the player's current faction to the faction with the given idName
- addRank
- -This adds val in rank to the player's current active faction
- addRankFaction:[FACTION NAME]
- -this adds the val to the specified faction. I.E: "addRankFaction:CSEC"
- addFlags:flagname1,flagname2,flagname3,etc
- Adds the defined (1 or more) flags to the current session. Flags can unlock missions and do other tasks
- removeFlags:flagname1,flagname2,flagname3,etc
- Removes the listed flags if they exist.
- changeSong
- -changes to the song defined in val:
- case 1:
- default:
- MusicManager.transitionToSong("Music\\Revolve");
- break;
- case 2:
- MusicManager.transitionToSong("Music\\The_Quickening");
- break;
- case 3:
- MusicManager.transitionToSong("Music\\TheAlgorithm");
- break;
- case 4:
- MusicManager.transitionToSong("Music\\Ryan3");
- break;
- case 5:
- MusicManager.transitionToSong("Music\\Bit(Ending)");
- break;
- case 6:
- MusicManager.transitionToSong("Music\\Rico_Puestel-Roja_Drifts_By");
- break;
- case 7:
- MusicManager.transitionToSong("Music\\out_run_the_wolves");
- break;
- case 8:
- MusicManager.transitionToSong("Music\\Irritations");
- break;
- case 9:
- MusicManager.transitionToSong("Music\\Broken_Boy");
- break;
- case 10:
- MusicManager.transitionToSong("Music\\Ryan10");
- break;
- case 11:
- MusicManager.transitionToSong("Music\\tetrameth");
- break;
- loadConditionalActions:DLC/ActionScritps/HermeticAlchemistsActions.xml
- setHubServer:[SERVER ID]
- - Sets the server with the given ID to be the new hub server visually on the netmap.
- - this adds the little spinny things around it, like CSEC has in the base game.
- setAssetServer:[SERVER ID]
- - Sets the server with the given ID to be the new asset server visually on the netmap.
- - this adds the little star inside it
- playCustomSong:[PATH_TO_SONG]
- -Fades the music into the song file specified. Needs the whole path like: Music/Song.ogg
- -Songs must be in Ogg Vorbis (.ogg) format
- -Songs will not play on the XNA branch!
- playCustomSongImmediatley:[PATH_TO_SONG]
- -Plays the specified song above without the fade in - instantly snaps to it.
- #####################################
- ### FOR LABYRINTHS DLC USERS ONLY ###
- #####################################
- changeSongDLC
- with values:
- case 1:
- default:
- MusicManager.transitionToSong("DLC\\Music\\Remi2");
- break;
- case 2:
- MusicManager.transitionToSong("DLC\\Music\\snidelyWhiplash");
- break;
- case 3:
- MusicManager.transitionToSong("DLC\\Music\\Slow_Motion");
- break;
- case 4:
- MusicManager.transitionToSong("DLC\\Music\\World_Chase");
- break;
- case 5:
- MusicManager.transitionToSong("DLC\\Music\\HOME_Resonance");
- break;
- case 6:
- MusicManager.transitionToSong("DLC\\Music\\Remi_Finale");
- break;
- case 7:
- MusicManager.transitionToSong("DLC\\Music\\RemiDrone");
- break;
- case 8:
- MusicManager.transitionToSong("DLC\\Music\\DreamHead");
- break;
- case 9:
- //USERSPACE
- MusicManager.transitionToSong("DLC\\Music\\Userspacelike");
- break;
- case 10:
- MusicManager.transitionToSong("DLC\\Music\\CrashTrack");
- break;
- The rest of the functions you'll see in the game's core missions are custom ones written to be triggered a single time, with custom code.
- If you have any requests for additions functions to be added for use in your mods, send an email request to matt@hacknet-os.com and i'll
- see what I can do.
- -->
- <missionStart val="7" suppress="true">changeSong</missionStart>
- <!-- Same as mission start (this is also optional), but this happens when the mission is completed.
- Note that this will never trigger if the mission is abandoned or otherwise lost.-->
- <missionEnd val="1">addRank</missionEnd>
- <!-- This defines the path to the next mission file. The mission file at this path will be loaded, and email sent when the current mission is completed.-->
- <!-- The IsSilent flag is... admittedly in a terrible place here. It silenced THIS mission, not the next one. This means that if you set
- IsSilent to be true here, this mission will not send and email when it is loaded.-->
- <!-- Important detail about mission completion: For a reply to work, the mission the player is currently on my have the same email sender field as the email
- they reply to in their inbox. This means that if you have a silent connector mission, make sure it has the same sender filled in in the email field.-->
- <!-- If you want there to be no mission following this one (For example, the email mission that introduces you to a hub server)
- set nextMission to "NONE"-->
- <nextMission IsSilent="false">NONE</nextMission>
- <!-- Next up are Branch missions (Optional)
- Branch missions are loaded during the load step of this mission, and are held in parallel.
- Every frame (if ActiveCheck) or every time an email is responded to, the mission system will
- check the goals of the current mission (this file), and if it doesn't pass them, it will
- check (in order) the goals of all the branch missions defined here. If successful, the branch mission's
- "nextMission" will be loaded.
- This allows you to put in branching story paths, variable responses, and allow different responses for various goals.
- It's a bit finicky to use, so I recommend testing all branch structures you put in very carefully.
- Note that the branch mission's email will not be sent - they are all loaded in silent mode.-->
- <branchMissions>
- <branch>Missions/BranchExample/TestBranchMission.xml</branch>
- <!-- You can have more than one branch mission here -->
- </branchMissions>
- <!-- The "Posting" of a mission is what gets read and put up on a mission listing board
- like CSEC or Entropy in base Hacknet. "title" is the Mission title line that's displayed in the list.
- reqs = a comma separated list of required flags before this mission can be accepted from a Hub server.
- before the reqs and required rank are met, the mission will appear locked (like Junebug)
- requiredRank = the faction rank the player needs to have before this mission is unlocked (player rank must be >= this number)
- -->
- <posting title="Do the Extension Test Mission" reqs="someCustomFlag" requiredRank="3" >
- This is the body text of the posting that will appear when the mission is clicked on. It should contain a basic outline, with any warnings the player needs.
- Once accepted, the email should contain full details.
- </posting>
- <!-- This is the data of the email the player will be sent when this mission is accepted or continued to -->
- <email>
- <!-- The sender field is very important for branching or silent mission chains. Even if this file you're editing isn't the
- email on the server the player will be responding to, it will still run it's completion checks as long as the player is responding to
- any email from the same sender. This doesn't affect basic and normal missions, so if you're not doing anything too fancy,
- don't worry about it.-->
- <sender>Matt</sender>
- <subject>Test Mission Email</subject>
- <body>This is the body of the email.
- Be careful with your formatting! The Hacknet parser does not account for auto-whitespace added to the left here.
- Email contents are very important - small changes in wording can dramatically change how easy or hard a mission is.
- Be very conscious about how much you are hinting at and guiding the player, and understand that it will be much harder
- for everyone that's not you.
- Good luck,
- -Matt
- </body>
- <!-- The attachments are the clickable items at the bottom of the email with a small "+"
- You can have as many attachments as you want, of any kind, but I recommend keeping the number small
- whenever possible, so the player can be focused on a single goal, and not be too overwhelmed.
- Even if you have no attachments, make sure you include the opening and closing tag (with nothing inside)
- They are required for the formatting.
- -->
- <attachments>
- <note title="An example note">Experiment with note formatting!
- Remember that the note space is very small, so text overflow onto new lines happens quickly.
- Guide the player! Hacknet missions are very frustrating when the player has too little direction and cant continue.
- </note>
- <!-- A link takes in the idName of a computer and links to it on the netmap -->
- <link comp="missionTestNode" />
- <!-- this scans for the computer with ID "missionTestNode", then searches it's accounts for the provided username and password, and
- adds it to the list of known accounts for auto completion. It's a good way of providing the password to a server. -->
- <account comp="missionTestNode" user="TestUser" pass="testpass" />
- </attachments>
- </email>
- </mission>
Add Comment
Please, Sign In to add comment