Creating misssion oxp
Moderators: winston, another_commander
- Rustybolts
- ---- E L I T E ----
- Posts: 293
- Joined: Sun Jun 07, 2009 6:22 pm
- Location: UK
Creating misssion oxp
By looking at oxp Long way round and Black baron i can create missions that start and end at different planets, and spawn enemies into the system the player has entered. But i want a mission to be completed as a condition that killing my added ship into system and not just the arrival at space station how is this done?
STE.+ Firefly/Dragonfly + BlackJacksbullion v.1.23 link below.
http://www.mediafire.com/?sharekey=ca16 ... f6e8ebb871
http://www.mediafire.com/?sharekey=ca16 ... f6e8ebb871
- LittleBear
- ---- E L I T E ----
- Posts: 2882
- Joined: Tue Apr 04, 2006 7:02 pm
- Location: On a survey mission for GalCop. Ship: Cobra Corvette: Hidden Dragon Rated: Deadly.
A simple way is just to add death actions to the mission ship's shipdata entry. Eg :-
You then check that mission_my_mission_oxp_target_dead equal TRUE before displaying the 'Well Done Commander' mission briefing screen. This has the downside though of being run however the ship died. So the player would still be paid and congratulated even if an NPC killed the ship.
JS allows you to test who killed the ship. Eg here's the script for the Random Hits victims. The ships own script sets the killer and the main script then displays a message depending on who got him.
Code: Select all
<key>death_actions</key>
<array>
<string>set: mission_my_mission_oxp_target_dead TRUE</string>
</array>
JS allows you to test who killed the ship. Eg here's the script for the Random Hits victims. The ships own script sets the killer and the main script then displays a message depending on who got him.
Code: Select all
/*
this.name = "oolite-random-hits-mark1";
this.author = "LittleBear";
this.copyright = "September 2008 - But do what you like with it in your OXPs!";
this.description = "Tests who destroyed a RandomHits OXP Victim Ship and how they did it. The main script acts on the setting of variables."
this.version = "2.0";
*/
this.shipSpawned = function ()
{
if(this.ship.displayName == this.ship.name)
this.ship.displayName = expandDescription("[random_hits_main_name]") // Show the Victim's name on the ID Computer when targeted.
delete this.shipSpawned;
}
this.shipBeingAttacked = function(whom)
{
if(whom == player.ship)
{
missionVariables.random_hits_whoshot = "PLAYER_ATTACK" // Shooter was the player not using an e-bomb, q-mine or cloak. The variable remains undefined if the player e-bombs, q-mines or kills the victim whilst cloaked as thisBeingAttacked does not get run. The main script then awards the player the credit for the kill, but fines him for dishonerable conduct!
}
else
{
missionVariables.random_hits_whoshot = "NPC_ATTACK" // Shooter was NPC ship. Every time the victim is hit, the variable is reset. Once he's dead the variable is not longer reset. So the last ship to hit him was also the killer!
}
}
this.shipDied = function(whom)
{
if(whom == player.ship)
if(missionVariables.random_hits_whoshot == "NPC_ATTACK") // Player has finished off a Mark attacked by an NPC with an e-bomb.
{
missionVariables.random_hits_status = "KILLED" // Record the fact that the Victim's ship has been destroyed.
missionVariables.random_hits_whoshot = null // Reset the attack variable to treat this as a dishonerable player kill.
return;
}
if(whom == player.ship)
if(missionVariables.random_hits_whoshot == null) // Player has e-bombed the Victim's Ship.
{
missionVariables.random_hits_status = "KILLED" // Record the fact that the Victim's ship has been destroyed.
return;
}
if(whom == player.ship) //If the killer was the player...
if(missionVariables.random_hits_whoshot == "PLAYER_ATTACK") //... And he didn't use an e-bomb ...
if(Math.random() < 0.25) // Chance of Victim making it to his pod.
{
missionVariables.random_hits_status = "PODED" // Victim made it to his Pod! Set the variable to reflect that the player still needs to kill or scoop the Pod!
this.ship.spawn("random_hits_pod1", 1); // Spawn a Pod. Any shooting or scooping of the Pod is handled by the Pod's own Script.
return;
}
if(whom == player.ship) //If the killer was the player and no pod was launched ...
if(missionVariables.random_hits_whoshot == "PLAYER_ATTACK") //... And he didn't use an e-bomb ...
if(Math.random() < 0.10) // Chance of Victim dropping a q-mine.
{
this.ship.spawn("RANDOM_HITS_MINE", 1); // Spawn a Q-Mine which taunts the player before exploding! Nasty!
missionVariables.random_hits_status = "KILLED" // Record the fact that the Victim's ship has been destroyed.
return;
}
if(whom == player.ship) //If the killer was the player and neither a pod nor q-mine was launched ...
if(missionVariables.random_hits_whoshot == "PLAYER_ATTACK") //... And he didn't use an e-bomb ...
{
missionVariables.random_hits_status = "KILLED" // Record the fact that the Victim's ship has been destroyed.
return;
}
if(missionVariables.random_hits_whoshot == "NPC_ATTACK") // If an NPC fired the fatal shot ...
{
missionVariables.random_hits_status = "KILLED" // Record the fact that the Victim's ship has been destroyed.
return;
}
else // Deals with any other situation where cause of death was neither the player nor an NPC Laser. EG: Victim did somthing silly like crashing, burnt up near the Sun or some other odd death!
{
missionVariables.random_hits_status = "KILLED" // Record the fact that the Ship has died!
missionVariables.random_hits_whoshot = "ACCIDENT" // Any non-player / non-NPC caused death is an accident.
}
}
OXPS : The Assassins Guild, Asteroid Storm, The Bank of the Black Monks, Random Hits, The Galactic Almanac, Renegade Pirates can be downloaded from the Elite Wiki here.
- Rustybolts
- ---- E L I T E ----
- Posts: 293
- Joined: Sun Jun 07, 2009 6:22 pm
- Location: UK
Ty bud just what i was after.
So if i set in ship data (please excuse indentation)
and in the script i
it should work?
Shame there are no tutorials to read for making basic mission oxps.
So if i set in ship data (please excuse indentation)
Code: Select all
<key>death_actions</key>
<array>
<string>set: mission_boltsrevenge_oxp_target_dead TRUE</string>
</array>
and in the script i
Code: Select all
conditions = (
"mission_boltsrevenge_oxp_target_dead equal TRUE"
);
do = (
"set: mission_revengebolts MISSION_COMPLETE",
);
Shame there are no tutorials to read for making basic mission oxps.
STE.+ Firefly/Dragonfly + BlackJacksbullion v.1.23 link below.
http://www.mediafire.com/?sharekey=ca16 ... f6e8ebb871
http://www.mediafire.com/?sharekey=ca16 ... f6e8ebb871
- LittleBear
- ---- E L I T E ----
- Posts: 2882
- Joined: Tue Apr 04, 2006 7:02 pm
- Location: On a survey mission for GalCop. Ship: Cobra Corvette: Hidden Dragon Rated: Deadly.
Yep. But you need to add that the player is also docked at the main station (or the name of a special station if you're going that way), otherwise the message will come up whilst the player is still in flight. You should also check that another OXP isn't using the mission screen (so you don't get OXP clashes) The first line does this. It just means that if another OXP dispayed a briefing from another mission at the same time that your conditions became true, your OXP doesn't try to dispaly its message over the other OXPs message. Instead it waits until the player has pressed space from reading the first message (if there was one) before displaying its own. So somthing like :-
should do.
You'll need to like_ship a clone of your normal ship though and give this one a unique role and C&P the death_actions to this shipdata entry, so that the death actions are only run on the death of this special ship rather than any of your ships that are added to the game generally.
Oh and in the do, you need to reset or advance the mission_variable, so once the player has seen the mission congrats screen once its no longer TRUE otherwise you get the screen redispladed as soon as the player hits the space bar after reading it.
Code: Select all
{
conditions = ("gui_screen_string oneof GUI_SCREEN_STATUS, GUI_SCREEN_EQUIP_SHIP, GUI_SCREEN_MARKET, GUI_SCREEN_SHORT_RANGE_CHART", "dockedAtMainStation_bool equal YES", "mission_my_mission_variable equal TRUE");
do = (
MY STUFF);
},
You'll need to like_ship a clone of your normal ship though and give this one a unique role and C&P the death_actions to this shipdata entry, so that the death actions are only run on the death of this special ship rather than any of your ships that are added to the game generally.
Oh and in the do, you need to reset or advance the mission_variable, so once the player has seen the mission congrats screen once its no longer TRUE otherwise you get the screen redispladed as soon as the player hits the space bar after reading it.
OXPS : The Assassins Guild, Asteroid Storm, The Bank of the Black Monks, Random Hits, The Galactic Almanac, Renegade Pirates can be downloaded from the Elite Wiki here.
- Rustybolts
- ---- E L I T E ----
- Posts: 293
- Joined: Sun Jun 07, 2009 6:22 pm
- Location: UK
Thanks again.LittleBear wrote:Yep. But you need to add that the player is also docked at the main station (or the name of a special station if you're going that way), otherwise the message will come up whilst the player is still in flight. You should also check that another OXP isn't using the mission screen (so you don't get OXP clashes) The first line does this. It just means that if another OXP dispayed a briefing from another mission at the same time that your conditions became true, your OXP doesn't try to dispaly its message over the other OXPs message. Instead it waits until the player has pressed space from reading the first message (if there was one) before displaying its own. So somthing like :-
should do.Code: Select all
{ conditions = ("gui_screen_string oneof GUI_SCREEN_STATUS, GUI_SCREEN_EQUIP_SHIP, GUI_SCREEN_MARKET, GUI_SCREEN_SHORT_RANGE_CHART", "dockedAtMainStation_bool equal YES", "mission_my_mission_variable equal TRUE"); do = ( MY STUFF); },
You'll need to like_ship a clone of your normal ship though and give this one a unique role and C&P the death_actions to this shipdata entry, so that the death actions are only run on the death of this special ship rather than any of your ships that are added to the game generally.
Oh and in the do, you need to reset or advance the mission_variable, so once the player has seen the mission congrats screen once its no longer TRUE otherwise you get the screen redispladed as soon as the player hits the space bar after reading it.
I simplified my code a bit so it was easier to read. I've already included a new model specifically for this mission i'm trying to create, so should be no probs there.
I don't think my first mission will include this feature but would like to know for future reference, if i wanted as part of the mission to load goods into or remove from the ship automatically, how this could be done. Not using java script at the mo
Oh and is it possible to change the players legal status?
STE.+ Firefly/Dragonfly + BlackJacksbullion v.1.23 link below.
http://www.mediafire.com/?sharekey=ca16 ... f6e8ebb871
http://www.mediafire.com/?sharekey=ca16 ... f6e8ebb871
- Eric Walch
- Slightly Grand Rear Admiral
- Posts: 5536
- Joined: Sat Jun 16, 2007 3:48 pm
- Location: Netherlands
Just remember that you can not check who killed your ship with legacy code. So don't give it a bounty or police might kill it before the player. When you do give it a bounty, place it in an Anarchy (no police) or outside the space-lane (also no police)Rustybolts wrote:I don't think my first mission will include this feature but would like to know for future reference, if i wanted as part of the mission to load goods into or remove from the ship automatically, how this could be done. Not using java script at the mo
Oh and is it possible to change the players legal status?
UPS-Courier & DeepSpacePirates & others at the box and some older versions
- Rustybolts
- ---- E L I T E ----
- Posts: 293
- Joined: Sun Jun 07, 2009 6:22 pm
- Location: UK
It does not have a bounty as the treasure is the cargo its carrying.Just remember that you can not check who killed your ship with legacy code. So don't give it a bounty or police might kill it before the player. When you do give it a bounty, place it in an Anarchy (no police) or outside the space-lane (also no police)
_________________
Heres what i have so far have not added rest in yet as this is not working.
Code: Select all
{
revengebolts = (
{
conditions = ("galaxy_number equal 0");
do = (
{
conditions = ("dockedAtMainStation_bool equal YES");
do = (
{
conditions = (
"mission_revengebolts undefined",
"planet_number equal 227"
);
do = (
"setMissionMusic: none",
setGuiToMissionScreen,
"addMissionText: revengebolts_briefing",
"set: mission_revengebolts STAGE1",
"setMissionDescription: revengebolts_d1"
);
},
{
conditions = ("status_string equal STATUS_IN_FLIGHT", "scriptTimer_number lessthan 60");
do = (
{
conditions = ("mission_revengebolts equal STAGE1", "planet_number equal 154");
do = (
"checkForShips: bolts",
{
conditions = ("shipsFound_number lessthan 1", "d100_number lessthan 50");
do = ("addShips: bolts 1")
}
);
}
}
);
},
);
}
);
}
Oh and does planet 227 = Qutiri ?
STE.+ Firefly/Dragonfly + BlackJacksbullion v.1.23 link below.
http://www.mediafire.com/?sharekey=ca16 ... f6e8ebb871
http://www.mediafire.com/?sharekey=ca16 ... f6e8ebb871
Your script looks good so far - just a few remarks.Rustybolts wrote:Unsure what the scrip timer does either (60 secs before adds ship?)Oh and does planet 227 = Qutiri ?
Code: Select all
scriptTimer_number
The other thing is LB's suggestion what has to be checked before your script displays a mission screen. You really should include this check. LB knows why he has suggested it. Before we've had a lot of clashes between oxps and this is one way to avoid it.
And my galaxy0 list says that 227 == Qutiri too :-)
Hope this helps a bit.
Edit: Eric Walch has made an example how to offer missions a while ago. http://wiki.alioth.net/images/2/2b/MOP-Test_1.1.zip
- Eric Walch
- Slightly Grand Rear Admiral
- Posts: 5536
- Joined: Sat Jun 16, 2007 3:48 pm
- Location: Netherlands
Leave it out as Svengali writes. This timer is set to zero on jumping into a new system. At your checking-time (on jumping) it thus will only be <60 seconds in the first minute after entering a system. Better add your ships at exitting_witchspace.Rustybolts wrote:Unsure what the scrip timer does either (60 secs before adds ship?)
UPS-Courier & DeepSpacePirates & others at the box and some older versions
- Rustybolts
- ---- E L I T E ----
- Posts: 293
- Joined: Sun Jun 07, 2009 6:22 pm
- Location: UK
Well i have got it to get to mission screen at Qutiri it then sets destination to destroy ship at isinor, but when you reach isinor it doesn't seem to place my ship.
Script code:
Ship data plist code:
I've got more to add to mission but i can't even get this little bit started *sigh!* Any ideas?
Script code:
Code: Select all
{
bolts = (
{
conditions = ("galaxy_number equal 0");
do = (
{
conditions = ("dockedAtMainStation_bool equal YES");
do = (
{
conditions = (
"mission_bolts undefined",
"planet_number equal 227"
);
do = (
"setMissionMusic: none",
setGuiToMissionScreen,
"addMissionText: revengebolts_briefing",
"set: mission_bolts STAGE1",
"setMissionDescription: revengebolts_d1"
);
},
);
},
{
conditions = (
"mission_bolts equal STAGE1",
"planet_number equal 154",
"status_string equal STATUS_EXITING_WITCHSPACE"
);
do = ("addsystemShips: bolts 1 0.90");
}
);
}
);
}
Code: Select all
<dict>
<key>bolts</key>
<dict>
<key>death_actions</key>
<array>
<string>set: mission_bolts_targetdead TRUE</string>
</array>
<key>ai_type</key>
<string>pirateAI.plist</string>
<key>bounty</key>
<integer>0</integer>
<key>cargo_type</key>
<string>CARGO_NOT_CARGO</string>
<key>energy_recharge_rate</key>
<real>4</real>
<key>exhaust</key>
<array>
<string>0.0 -0.9 -14.5 8.0 6.0 8.0</string>
<string>0.0 -0.9 -14.5 8.0 6.0 8.0</string>
</array>
<key>forward_weapon_type</key>
<string>WEAPON_PULSE_LASER</string>
<key>has_ecm</key>
<true/>
<key>has_shield_booster</key>
<true/>
<key>has_shield_enhancer</key>
<true/>
<key>has_escape_pod</key>
<false/>
<key>has_scoop</key>
<false/>
<key>laser_color</key>
<string>yellowColor</string>
<key>likely_cargo</key>
<integer>50</integer>
<key>max_cargo</key>
<integer>55</integer>
<key>max_energy</key>
<real>400</real>
<key>max_flight_pitch</key>
<real>0.80</real>
<key>max_flight_roll</key>
<real>1.80</real>
<key>max_flight_speed</key>
<real>390</real>
<key>missiles</key>
<integer>3</integer>
<key>model</key>
<string>steo.dat</string>
<key>name</key>
<string>Commander Bolts</string>
<key>roles</key>
<string>bolts</string>
<key>thrust</key>
<real>20</real>
<key>weapon_energy</key>
<real>25</real>
</dict>
STE.+ Firefly/Dragonfly + BlackJacksbullion v.1.23 link below.
http://www.mediafire.com/?sharekey=ca16 ... f6e8ebb871
http://www.mediafire.com/?sharekey=ca16 ... f6e8ebb871
- Rustybolts
- ---- E L I T E ----
- Posts: 293
- Joined: Sun Jun 07, 2009 6:22 pm
- Location: UK
No matter in the script.plist
should of been
a bloody capital letter lol
Anyways ship appeared but was close too space station i thought this was set to be closer to witchpoint oh well will change the 0.90 to 0.10 that should do it.
Code: Select all
do = ("addsystemShips: bolts 1 0.90");
Code: Select all
do = ("addSystemShips: bolts 1 0.90");
Anyways ship appeared but was close too space station i thought this was set to be closer to witchpoint oh well will change the 0.90 to 0.10 that should do it.
Last edited by Rustybolts on Thu Jul 16, 2009 7:17 pm, edited 1 time in total.
STE.+ Firefly/Dragonfly + BlackJacksbullion v.1.23 link below.
http://www.mediafire.com/?sharekey=ca16 ... f6e8ebb871
http://www.mediafire.com/?sharekey=ca16 ... f6e8ebb871
- Eric Walch
- Slightly Grand Rear Admiral
- Posts: 5536
- Joined: Sat Jun 16, 2007 3:48 pm
- Location: Netherlands
For this is the log useful. Syntax errors will be logged. In pre 1.73 only on executing of the culprit line but starting with 1.73 all illegal commands in the legacy script are already logged on startup because of the new pre-processing of those plists. Very useful for quickly spotting those typos.Rustybolts wrote:No matter in the script.plistshould of beenCode: Select all
do = ("addsystemShips: bolts 1 0.90");
a bloody capital letter lolCode: Select all
do = ("addSystemShips: bolts 1 0.90");
UPS-Courier & DeepSpacePirates & others at the box and some older versions
- Rustybolts
- ---- E L I T E ----
- Posts: 293
- Joined: Sun Jun 07, 2009 6:22 pm
- Location: UK
For this is the log useful. Syntax errors will be logged. In pre 1.73 only on executing of the culprit line but starting with 1.73 all illegal commands in the legacy script are already logged on startup because of the new pre-processing of those plists. Very useful for quickly spotting those typos.
That should come in handy
I have now come across another small problem
in shipdata i have
Code: Select all
<key>cargo_type</key>
<string>CARGO_NOT_CARGO</string>
<key>cargo_carried</key>
<string>Gold</string>
STE.+ Firefly/Dragonfly + BlackJacksbullion v.1.23 link below.
http://www.mediafire.com/?sharekey=ca16 ... f6e8ebb871
http://www.mediafire.com/?sharekey=ca16 ... f6e8ebb871
- Commander McLane
- ---- E L I T E ----
- Posts: 9520
- Joined: Thu Dec 14, 2006 9:08 am
- Location: a Hacker Outpost in a moderately remote area
- Contact:
Hi, Rustybolts! Nice to see a new contributor doing something else than just ship models!
May I generally suggest that you consult the scripting documentation in the wiki while scripting? Personally, while working on an OXP, I have all the relevant documents opened in my browser (tabs are such a nice invention ). Everything is available through the Category:Oolite Scripting-page. This will help ask a lot of questions and solve a lot of problems. For instance:
So, indeed, number close to 0 => witchpoint. Number close to 1 => station. By the way: any other number works as well. So -1 will make the ship appear behind the witchpoint, but at the double distance, as seen from the station. And 100 will make it appear far behind the station, as seen from the witchpoint. And so on. Also note that the two reference points, as far as addSystemShips: is concerned, are the witchpoint and the station. This is different from all other ship-adding methods. In all other methods the position of the planet is the point of reference, not the position of the station.
A workaround would be to spawn a suitable amount of cannisters through the ship's death_actions. Just take the example as it is and replace "explosive_shrapnel" with "Gold" and the number with anything you like. There is an in-built random factor, because some of the spawned entities will immediatly collide with each other and disappear, so the actual number of cargo created will always be something between 0 and the number you specified.
May I generally suggest that you consult the scripting documentation in the wiki while scripting? Personally, while working on an OXP, I have all the relevant documents opened in my browser (tabs are such a nice invention ). Everything is available through the Category:Oolite Scripting-page. This will help ask a lot of questions and solve a lot of problems. For instance:
For all information concerning script.plist the Methods-page is the right address. In your case the Looking for, and adding ships-section of that page, where it says:Rustybolts wrote:Anyways ship appeared but was close too space station i thought this was set to be closer to witchpoint oh well will change the 0.90 to 0.10 that should do it.
Code: Select all
addSystemShips: <role> <number> <position>
// causes a number of ships matching the given role to appear near a point
// on a line from the witchpoint to the planet's station. <position> should be a floating point
// number where 0.0 represents the witchpoint and 1.0 represents the station
Not sure. Have a look at the Shipdata.plist-page. The information there seems to suggest that max_cargo actually only works for ships added by the system populator, therefore not for ships added by script.Rustybolts wrote:I have now come across another small problem
in shipdata i haveOnce ship has been killed i have only seen 1 cargo cannister despite the ship having max cargo of 55. Can i specify a set amount of cargo to despatch upon ships death.Code: Select all
<key>cargo_type</key> <string>CARGO_NOT_CARGO</string> <key>cargo_carried</key> <string>Gold</string>
A workaround would be to spawn a suitable amount of cannisters through the ship's death_actions. Just take the example as it is and replace "explosive_shrapnel" with "Gold" and the number with anything you like. There is an in-built random factor, because some of the spawned entities will immediatly collide with each other and disappear, so the actual number of cargo created will always be something between 0 and the number you specified.
- Rustybolts
- ---- E L I T E ----
- Posts: 293
- Joined: Sun Jun 07, 2009 6:22 pm
- Location: UK
I will use that idea for death actions, i have seen that piece of code for the shrapnel but didn't think just to type gold instead. Very helpful ty so much.Commander McLane wrote:Hi, Rustybolts! Nice to see a new contributor doing something else than just ship models!
May I generally suggest that you consult the scripting documentation in the wiki while scripting? Personally, while working on an OXP, I have all the relevant documents opened in my browser (tabs are such a nice invention ). Everything is available through the Category:Oolite Scripting-page. This will help ask a lot of questions and solve a lot of problems. For instance:For all information concerning script.plist the Methods-page is the right address. In your case the Looking for, and adding ships-section of that page, where it says:Rustybolts wrote:Anyways ship appeared but was close too space station i thought this was set to be closer to witchpoint oh well will change the 0.90 to 0.10 that should do it.So, indeed, number close to 0 => witchpoint. Number close to 1 => station. By the way: any other number works as well. So -1 will make the ship appear behind the witchpoint, but at the double distance, as seen from the station. And 100 will make it appear far behind the station, as seen from the witchpoint. And so on. Also note that the two reference points, as far as addSystemShips: is concerned, are the witchpoint and the station. This is different from all other ship-adding methods. In all other methods the position of the planet is the point of reference, not the position of the station.Code: Select all
addSystemShips: <role> <number> <position> // causes a number of ships matching the given role to appear near a point // on a line from the witchpoint to the planet's station. <position> should be a floating point // number where 0.0 represents the witchpoint and 1.0 represents the station
Not sure. Have a look at the Shipdata.plist-page. The information there seems to suggest that max_cargo actually only works for ships added by the system populator, therefore not for ships added by script.Rustybolts wrote:I have now come across another small problem
in shipdata i haveOnce ship has been killed i have only seen 1 cargo cannister despite the ship having max cargo of 55. Can i specify a set amount of cargo to despatch upon ships death.Code: Select all
<key>cargo_type</key> <string>CARGO_NOT_CARGO</string> <key>cargo_carried</key> <string>Gold</string>
A workaround would be to spawn a suitable amount of cannisters through the ship's death_actions. Just take the example as it is and replace "explosive_shrapnel" with "Gold" and the number with anything you like. There is an in-built random factor, because some of the spawned entities will immediatly collide with each other and disappear, so the actual number of cargo created will always be something between 0 and the number you specified.
STE.+ Firefly/Dragonfly + BlackJacksbullion v.1.23 link below.
http://www.mediafire.com/?sharekey=ca16 ... f6e8ebb871
http://www.mediafire.com/?sharekey=ca16 ... f6e8ebb871