Discussion and information relevant to creating special missions, new ships, skins etc.
Moderators: winston , another_commander
Switeck
---- E L I T E ----
Posts: 2411 Joined: Mon May 31, 2010 11:11 pm
Post
by Switeck » Mon Jul 25, 2022 4:56 am
phkb wrote: ↑ Sun Jul 24, 2022 11:13 pm I needed a version of an Anaconda that didn't have any escorts assigned, as I would be adding escorts manually via code.
I had a similar problem years ago with wanting to assign a navigational beacon only to 1 version of a station. If the 2nd station used a:
...it would pick up that beacon property which I didn't want it to have.
And I'm not sure that setting:
on the 2nd station's shipdata.plist would work without problems.
This shows the importance of using templates with almost all properties turned off.
Slartibartfast
Deadly
Posts: 175 Joined: Mon Jan 21, 2008 3:54 pm
Post
by Slartibartfast » Tue Aug 02, 2022 9:11 pm
hello
again a simple question.
I would like to clean my cargo ( set everything to zero )
in
https://wiki.alioth.net/index.php/Oolit ... :_Manifest
i found this
Code: Select all
var i, c;
// now remove at least 1 of / 20% of each type of cargo carried.
for (i = 0; i < manifest.list.length; i++)
{
c = manifest.list[i].commodity;
manifest[c] = Math.floor(manifest[c] * 0.8);
}
so i changed the last assignment to ... = 0; // 0.0 also tried
and added a log below that line, that shows the freight
--> from the 8 commodities i have, only 4 are listed
then commented out the assignment
--> all commodities are shown.
what am i doing wrong?
matthias
Oolite 1.91 / Imp. Trader ( slighly modified
) on Lubuntu 22.04 LTS on AMD64 2x 3800+ ,
ATI Radeon R7240 XFS / Samsung TV 40" 1080p
C-Media CMI8738 / Yamaha RX-V575 / DIY-Speaker
Logitech Attack3 & standard german keyboard
phkb
Impressively Grand Sub-Admiral
Posts: 4830 Joined: Tue Jan 21, 2014 10:37 pm
Location: Writing more OXPs, because the world needs more OXPs.
Post
by phkb » Tue Aug 02, 2022 10:48 pm
Slartibartfast wrote: ↑ Tue Aug 02, 2022 9:11 pm
so i changed the last assignment to ... = 0; // 0.0 also tried
and added a log below that line, that shows the freight
--> from the 8 commodities i have, only 4 are listed
then commented out the assignment
--> all commodities are shown.
what am i doing wrong?
matthias
The problem is that, by zeroing out a commodity inside the loop, the bounds of the loop are being changed because the "list" property of the manifest object is getting smaller each time.
For example, if the array initially looks like this:
Code: Select all
Index Value
0 5 x Food
1 10 x Computers
2 3 x Luxuries
3 50 x Gold
If you zero out the commodity at index 0, the array will then look like this:
Code: Select all
Index Value
0 10 x Computers
1 3 x Luxuries
2 50 x Gold
But your loop moves on to the next index (ie index 1), which skips the computers and goes to the luxuries instead.
Try this instead:
Code: Select all
var i, c;
for (i = manifest.list.length - 1; i >= 0; i--) {
c = manifest.list[i].commodity;
manifest[c] = 0
}
By going in reverse order through the array, you can avoid the problem.
Alternatively, you could do this:
Code: Select all
var c;
if (manifest.list.length > 0) {
do {
c = manifest.list[0].commodity;
manifest[c] = 0;
} while (manifest.list.length > 0);
}
Slartibartfast
Deadly
Posts: 175 Joined: Mon Jan 21, 2008 3:54 pm
Post
by Slartibartfast » Tue Aug 02, 2022 11:46 pm
Ahhhhh!!!
i think i understand
therefore something like this should work also!?
1. ) transfer item_names into an array // ( 1st loop )
2,) for ( item_name in array ) // ( 2nd loop )
- set item_name number to zero
correct?
( ok - not so nice as your solutions - but helps to understand )
cheers
Oolite 1.91 / Imp. Trader ( slighly modified
) on Lubuntu 22.04 LTS on AMD64 2x 3800+ ,
ATI Radeon R7240 XFS / Samsung TV 40" 1080p
C-Media CMI8738 / Yamaha RX-V575 / DIY-Speaker
Logitech Attack3 & standard german keyboard
Slartibartfast
Deadly
Posts: 175 Joined: Mon Jan 21, 2008 3:54 pm
Post
by Slartibartfast » Wed Aug 03, 2022 12:55 am
Hi
i have tested this (extended) version: ( later i'll take yours )
Code: Select all
var fracht;
var zaehler = manifest.list.length;
log(this.name, " manifestlength: " + zaehler);
const item_name_array = [];
for (let i = 0; i < zaehler; i++)
{
item_name_array[i] = manifest.list[i].commodity;
log(this.name, " test: " + item_name_array[i] + " " + i);
}
for (let j = 0; j < zaehler; j++)
{
fracht = item_name_array[j];
manifest[fracht] = 0;
log(this.name, " test2: " + fracht + " " + j);
}
log(this.name, " new manifestlength: " + manifest.list.length);
and i got the following output (log):
Code: Select all
02:33:50.271 [oolite_oxp_slartitest]: manifestlength: 8
02:33:50.271 [oolite_oxp_slartitest]: test: radioactives 0
02:33:50.272 [oolite_oxp_slartitest]: test: luxuries 1
02:33:50.272 [oolite_oxp_slartitest]: test: computers 2
02:33:50.272 [oolite_oxp_slartitest]: test: machinery 3
02:33:50.273 [oolite_oxp_slartitest]: test: alloys 4
02:33:50.273 [oolite_oxp_slartitest]: test: gold 5
02:33:50.274 [oolite_oxp_slartitest]: test: quirium_crystal 6
02:33:50.274 [oolite_oxp_slartitest]: test: alien_items 7
02:33:50.274 [oolite_oxp_slartitest]: test2: radioactives 0
02:33:50.275 [oolite_oxp_slartitest]: test2: luxuries 1
02:33:50.275 [oolite_oxp_slartitest]: test2: computers 2
02:33:50.275 [oolite_oxp_slartitest]: test2: machinery 3
02:33:50.275 [oolite_oxp_slartitest]: test2: alloys 4
02:33:50.276 [oolite_oxp_slartitest]: test2: gold 5
02:33:50.276 [oolite_oxp_slartitest]: test2: quirium_crystal 6
02:33:50.276 [oolite_oxp_slartitest]: test2: alien_items 7
02:33:50.276 [oolite_oxp_slartitest]: new manifestlength: 0
thx for your assistance
matthias
Oolite 1.91 / Imp. Trader ( slighly modified
) on Lubuntu 22.04 LTS on AMD64 2x 3800+ ,
ATI Radeon R7240 XFS / Samsung TV 40" 1080p
C-Media CMI8738 / Yamaha RX-V575 / DIY-Speaker
Logitech Attack3 & standard german keyboard
phkb
Impressively Grand Sub-Admiral
Posts: 4830 Joined: Tue Jan 21, 2014 10:37 pm
Location: Writing more OXPs, because the world needs more OXPs.
Post
by phkb » Wed Aug 03, 2022 1:50 am
Slartibartfast wrote: ↑ Tue Aug 02, 2022 11:46 pm
1. ) transfer item_names into an array // ( 1st loop )
2,) for ( item_name in array ) // ( 2nd loop )
- set item_name number to zero
correct?
Yes, that would achieve the same result, as the list you're looping through when zeroing commodities won't change mid loop.
Massively Locked
Dangerous
Posts: 84 Joined: Tue Nov 20, 2012 12:20 pm
Post
by Massively Locked » Thu Aug 25, 2022 3:12 am
I'm reading thru some scripts and I see this:
Code: Select all
this.startUpComplete = function(){
delete this.startUpComplete;
Can someone explain to me what the point of this is? Why would you immediately delete the event handler on creating it? Why doesn't this affect all the following statements in the function block?
phkb
Impressively Grand Sub-Admiral
Posts: 4830 Joined: Tue Jan 21, 2014 10:37 pm
Location: Writing more OXPs, because the world needs more OXPs.
Post
by phkb » Thu Aug 25, 2022 4:27 am
Massively Locked wrote: ↑ Thu Aug 25, 2022 3:12 am
Can someone explain to me what the point of this is? Why would you immediately delete the event handler on creating it? Why doesn't this affect all the following statements in the function block?
It's largely about sequencing. startUpComplete will only run once per session (ie when a new game starts, or a saved game loads). Sometimes, it's important for one OXP to know if another OXP has executed already. By deleting the startUpComplete function, it signals to any other OXP's who might want to know that it's start up functions have completed.
It might also be important for some system instantiation processes in the same OXP to know if the startUpComplete function has been completed.
So, basically, it's a way to flag that the step is complete.
Massively Locked
Dangerous
Posts: 84 Joined: Tue Nov 20, 2012 12:20 pm
Post
by Massively Locked » Fri Aug 26, 2022 3:32 am
Thanks for the explanation. While I don't think I'll need it for anything I'm writing, it's still a good thing to have in one's toolbox.
Massively Locked
Dangerous
Posts: 84 Joined: Tue Nov 20, 2012 12:20 pm
Post
by Massively Locked » Fri Sep 30, 2022 4:29 pm
I just started playing with equipment and condition scripts. Out of convenience (or maybe it's laziness), I wrote the elements of these two right in my main script. It's working just fine as far as I can tell. Is it OK to do this (keep everything in one file) or is it considered a bad practice?
montana05
---- E L I T E ----
Posts: 1166 Joined: Mon May 30, 2016 3:54 am
Location: lurking in The Devils Triangle (G1)
Post
by montana05 » Sun Oct 02, 2022 2:54 am
Massively Locked wrote: ↑ Fri Sep 30, 2022 4:29 pm
I just started playing with equipment and condition scripts. Out of convenience (or maybe it's laziness), I wrote the elements of these two right in my main script. It's working just fine as far as I can tell. Is it OK to do this (keep everything in one file) or is it considered a bad practice?
Personally, I would call it a bad practice.
Condition scripts should be separate for some reasons, one would be easier maintenance in the future.
Scars remind us where we've been. They don't have to dictate where we're going.
Cholmondely
Archivist
Posts: 5365 Joined: Tue Jul 07, 2020 11:00 am
Location: The Delightful Domains of His Most Britannic Majesty (industrial? agricultural? mainly anything?)
Contact:
Post
by Cholmondely » Sun Oct 23, 2022 7:17 am
Help!
Adding a shiplibrary plist for Idkman's
Wavefront .
I can't get
anything to appear in the Ship Library. The ship does seem to load and the laser appears for sale on the F3 screen.
My shiplibrary.plist is
Code: Select all
{
class = "ship";
description = "An advanced fighter. Armed with a powerful ablation laser";
ship = "Farmca Corporation Wavefront MKI multirole fighter"; // I've also tried "wavefront" & "oolite_template_wavefront"
summary = "[oolite-ship-library-summary-MM]";
}
Idkman's shipdata.plist (adumbrated by Montana) is
Code: Select all
{
"oolite_template_wavefront" = {
aft_eject_position = "0.0 10.5 -22.0";
ai_type = "oolite-policeAI.js";
auto_ai = yes;
accuracy = 8;
auto_weapons = no;
cargo_type = "CARGO_NOT_CARGO";
custom_views =
(
{
view_description = "Rear View";
view_orientation = "1.0 0.0 0.0 0.0";
view_position = "0.0 20.0 -150.0";
weapon_facing = "FORWARD";
},
{
view_description = "Rear Right View";
view_orientation = "0.9239 0.0 0.3827 0.0";
view_position = "106.06 20.0 -106.06";
weapon_facing = "FORWARD";
},
{
view_description = "Right View";
view_orientation = "0.7071 0.0 0.7071 0.0";
view_position = "150.0 20.0 0.0";
weapon_facing = "FORWARD";
},
{
view_description = "Front Right View";
view_orientation = "0.3827 0.0 0.9239 0.0";
view_position = "106.06 20.0 106.06";
weapon_facing = "FORWARD";
},
{
view_description = "Front View";
view_orientation = "0.0 0.0 1.0 0.0";
view_position = "0.0 20.0 150.0";
weapon_facing = "FORWARD";
},
{
view_description = "Front Left View";
view_orientation = "0.3827 0.0 -0.9239 0.0";
view_position = "-106.06 20.0 106.06";
weapon_facing = "FORWARD";
},
{
view_description = "Left View";
view_orientation = "0.7071 0.0 -0.7071 0.0";
view_position = "-150.0 20.0 0.0";
weapon_facing = "FORWARD";
},
{
view_description = "Rear Left View";
view_orientation = "0.9239 0.0 -0.3827 0.0";
view_position = "-106.06 20.0 -106.06";
weapon_facing = "FORWARD";
},
{
view_description = "Top View";
view_orientation = "-0.7071 0.7071 0.0 0.0";
view_position = "0.0 150.0 -10.0";
weapon_facing = "FORWARD";
},
{
view_description = "Bottom View";
view_orientation = "0.0 0.0 0.7071 0.7071";
view_position = "0.0 -150.0 -10.0";
weapon_facing = "FORWARD";
}
);
energy_recharge_rate = 15;
exhaust = (
"11.5223 -0.0416 -26.249 4.0 4.0 1.5",
"0.0 -0.0416 -26.249 4.0 4.0 1.5",
"-11.5223 -0.0416 -26.249 4.0 4.0 1.5"
);
forward_weapon_type = "WEAPON_ABLATION_LASER";
aft_weapon_type = "WEAPON_ABLATION_LASER";
cloak_automatic = yes;
cloak_passive = yes;
exhaust_emissive_color = "1 0 0"; // added in " "
fuel = 250;
has_cloaking_device = yes;
has_military_scanner_filter = yes;
hyperspace_motor_spin_time = 5;
injector_burn_rate = 0.1;
injector_speed_factor = 10;
has_shield_enhancer = yes;
has_ecm = yes;
has_fuel_injection = yes;
has_scoop = yes;
scanner_range = 40000;
has_military_jammer = yes;
has_shield_booster = yes;
heat_insulation = "4.0";
is_template = 1;
has_escape_pod = yes;
likely_cargo = 0;
materials =
{
"Hull" =
{
diffuse_map = "oolite_viper_interceptor_diffuse.png";
gloss = 0.55;
specular_color = (0.5, 0.5, 0.5);
shininess = 55;
emission_map =
{
name = "oolite_viper_interceptor_diffuse.png"; extract_channel = "a";
};
emission_modulate_color = (0.9926, 0.9686, 0.7325, 1.0);
};
"Engine" =
{
diffuse_map = "oolite_viper_interceptor_diffuse.png";
gloss = 0.55;
specular_color = ( 0.5, 0.5, 0.5 );
shininess = 55;
emission_map =
{
name = "oolite_viper_interceptor_diffuse.png"; extract_channel = "a";
};
emission_modulate_color = (0.7325, 0.9686, 0.9926, 1.0);
};
};
max_cargo = 40;
extra_cargo = 20;
sun_glare_filter = 0.8;
max_energy = 500;
max_flight_pitch = 2.7;
max_flight_yaw = 2.7;
max_flight_roll = 4.5;
max_flight_speed = 850;
max_missiles = 3;
missile_launch_position = "0.0 -10.5 -9.0";
missiles = 3;
model = "oolite_viper_interceptor.dat";
name = "Farmca Corporation Wavefront MKI multirole fighter";
roles = "hunter-heavy(2.0) escort-heavy(1.25) assassin-heavy(2.0)";
scoop_position = "0.0 -6 18.5";
thrust = 80;
view_position_aft = "0.0 1.85 -32.0";
view_position_forward = "0.0 1.85 35.2";
view_position_port = "-23.75 2.2 -1.75";
view_position_starboard = "23.75 2.2 -1.75";
weapon_facings = 3;
weapon_position_aft = "0.0 -8.0 -32.0";
weapon_position_forward = "0.0 -0.15 35.034";
weapon_position_port = "-23.75 0.0 -1.75";
weapon_position_starboard = "23.75 0.0 -1.75";
};
"oolite_template_wavefront-player" =
{
like_ship = "oolite_template_wavefront";
forward_weapon_type = "WEAPON_ABLATION_LASER";
is_template = 1;
roles = "player";
};
"wavefront" =
{
like_ship = "oolite_template_wavefront";
};
"wavefront-player" =
{
like_ship = "oolite_template_wavefront-player";
};
}
What am I doing wrong? My .plist syntax checker says that everything is fine...
Alnivel
Dangerous
Posts: 100 Joined: Fri Jun 10, 2022 7:05 pm
Post
by Alnivel » Sun Oct 23, 2022 7:43 am
Cholmondely wrote: ↑ Sun Oct 23, 2022 7:17 am
Help!
Adding a shiplibrary plist for Idkman's
Wavefront .
I can't get
anything to appear in the Ship Library. The ship does seem to load and the laser appears for sale on the F3 screen.
My shiplibrary.plist is
Code: Select all
{
class = "ship";
description = "An advanced fighter. Armed with a powerful ablation laser";
ship = "Farmca Corporation Wavefront MKI multirole fighter"; // I've also tried "wavefront" & "oolite_template_wavefront"
summary = "[oolite-ship-library-summary-MM]";
}
Is it the whole shiplibrary.plist or just a fragment from it? If the first, then all these entries must be between a pair of parentheses:
Code: Select all
(
{
class = "ship";
description = "An advanced fighter. Armed with a powerful ablation laser";
ship = "wavefront"; // there must be a key from shipdata
summary = "[oolite-ship-library-summary-MM]";
}
)
Cholmondely
Archivist
Posts: 5365 Joined: Tue Jul 07, 2020 11:00 am
Location: The Delightful Domains of His Most Britannic Majesty (industrial? agricultural? mainly anything?)
Contact:
Post
by Cholmondely » Sun Oct 23, 2022 7:59 am
Alnivel wrote: ↑ Sun Oct 23, 2022 7:43 am
Cholmondely wrote: ↑ Sun Oct 23, 2022 7:17 am
Help!
Adding a shiplibrary plist for Idkman's
Wavefront .
I can't get
anything to appear in the Ship Library. The ship does seem to load and the laser appears for sale on the F3 screen.
My shiplibrary.plist is
Code: Select all
{
class = "ship";
description = "An advanced fighter. Armed with a powerful ablation laser";
ship = "Farmca Corporation Wavefront MKI multirole fighter"; // I've also tried "wavefront" & "oolite_template_wavefront"
summary = "[oolite-ship-library-summary-MM]";
}
Is it the whole shiplibrary.plist or just a fragment from it? If the first, then all these entries must be between a pair of parentheses:
Code: Select all
(
{
class = "ship";
description = "An advanced fighter. Armed with a powerful ablation laser";
ship = "wavefront"; // there must be a key from shipdata
summary = "[oolite-ship-library-summary-MM]";
}
)
The whole thing!
I just tried
Code: Select all
(
{
class = "ship";
description = "An advanced fighter. Armed with a powerful ablation laser";
ship = "oolite_template_wavefront"; // this seems to me the most likely of the available options
summary = "[oolite-ship-library-summary-MM]";
}
)
Still no go! And I checked for invisible codes too...
Alnivel
Dangerous
Posts: 100 Joined: Fri Jun 10, 2022 7:05 pm
Post
by Alnivel » Sun Oct 23, 2022 8:21 am
Cholmondely wrote: ↑ Sun Oct 23, 2022 7:59 am
I just tried
Code: Select all
(
{
class = "ship";
description = "An advanced fighter. Armed with a powerful ablation laser";
ship = "oolite_template_wavefront"; // this seems to me the most likely of the available options
summary = "[oolite-ship-library-summary-MM]";
}
)
Have you tried with a non-template ship too? I just checked it myself - entry with "wavefront" is displayed, with template - no.
If this stilll does not work, maybe something useful is in the logs?