I totally forgot that adding locators through code on-the-fly is TOTALLY possible. Maximues wrote the WriteLocatorGlobal function for that:<!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1-->void WriteLocatorGlobal(string locationID, string locatorGroup, string locatorName, string locatorText, int charIndex, float posX, float posY, float posZ, bool bTempLocator)
{
if (FindLocation(locationID) < 0) return; // KK
wholeWorld.(locationID).locators.(locatorGroup).(locatorName).tmpLocator = bTempLocator;
wholeWorld.(locationID).locators.(locatorGroup).(locatorName).corpseIdx = charIndex;
if(sti(charIndex)<0) { wholeWorld.(locationID).locators.(locatorGroup).(locatorName).corpseIdx = -1; }
wholeWorld.(locationID).locators.(locatorGroup).(locatorName).text = locatorText;
wholeWorld.(locationID).locators.(locatorGroup).(locatorName).x = posX;
wholeWorld.(locationID).locators.(locatorGroup).(locatorName).y = posY;
wholeWorld.(locationID).locators.(locatorGroup).(locatorName).z = posZ;
wholeWorld.(locationID).locators.(locatorGroup).(locatorName).vx.x = 0.0;
wholeWorld.(locationID).locators.(locatorGroup).(locatorName).vx.y = 0.0;
wholeWorld.(locationID).locators.(locatorGroup).(locatorName).vx.z = 0.0;
wholeWorld.(locationID).locators.(locatorGroup).(locatorName).vy.x = 0.0;
wholeWorld.(locationID).locators.(locatorGroup).(locatorName).vy.y = 0.0;
wholeWorld.(locationID).locators.(locatorGroup).(locatorName).vy.z = 0.0;
wholeWorld.(locationID).locators.(locatorGroup).(locatorName).vz.x = 0.0;
wholeWorld.(locationID).locators.(locatorGroup).(locatorName).vz.y = 0.0;
wholeWorld.(locationID).locators.(locatorGroup).(locatorName).vz.z = 0.0;
wholeWorld.(locationID).locators_radius.(locatorGroup).(locatorName) = 2.0;
wholeWorld.(locationID).locators.(locatorGroup).(locatorName).radius = 1.5;
locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).corpseIdx = charIndex;
if(sti(charIndex)<0) { locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).corpseIdx = -1; }
locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).tmpLocator = bTempLocator;
locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).text = locatorText;
locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).x = posX;
locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).y = posY;
locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).z = posZ;
locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).vx.x = 0.0;
locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).vx.y = 0.0;
locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).vx.z = 0.0;
locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).vy.x = 0.0;
locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).vy.y = 0.0;
locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).vy.z = 0.0;
locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).vz.x = 0.0;
locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).vz.y = 0.0;
locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).vz.z = 0.0;
locations[FindLocation(locationID)].locators_radius.(locatorGroup).(locatorName) = 2.0;
locations[FindLocation(locationID)].locators.(locatorGroup).(locatorName).radius = 1.5;
}<!--c2--></div><!--ec2-->
See here it's use for adding camp fires to QC port and Guadeloupe:<!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1-->void AddNewLocators()
{
WriteLocatorGlobal("QC_port", "camp_fire", "campfire", "", -1, 1.6411, 2.2977, -5.4587, false);
Locations[FindLocation("QC_port")].models.night.lights.camp_fire = "heater";
Locations[FindLocation("QC_port")].locators_radius.camp_fire = 3.0;
WriteLocatorGlobal("Guadeloupe_Port", "camp_fire", "campfire1", "", -1, 20.4638252, 4.1738091, -3.6956100, false);
WriteLocatorGlobal("Guadeloupe_Port", "camp_fire", "campfire2", "", -1, 20.4540234, 4.2214670, 9.8807011, false);
WriteLocatorGlobal("Guadeloupe_Port", "camp_fire", "campfire3", "", -1, 24.2642326, 6.3004465, 9.8717833, false);
WriteLocatorGlobal("Guadeloupe_Port", "camp_fire", "campfire4", "", -1, 24.2460709, 6.3005228, 5.9918156, false);
WriteLocatorGlobal("Guadeloupe_Port", "camp_fire", "campfire5", "", -1, 24.2430992, 6.3004966, 0.2543197, false);
WriteLocatorGlobal("Guadeloupe_Port", "camp_fire", "campfire6", "", -1, 24.2746677, 6.3004422, -3.5939960, false);
Locations[FindLocation("Guadeloupe_Port")].models.night.lights.camp_fire = "heater";
Locations[FindLocation("Guadeloupe_Port")].locators_radius.camp_fire = 4.0;
}<!--c2--></div><!--ec2-->
And, more relevant, it's of course also used for corpse looting!<!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1-->WriteLocatorGlobal(chr.location, "box", newLocName, TranslateString("","body_of_"+chr.sex)+" "+GetMySimpleName(chr), sti(chr.index), stf(chr.deathx), stf(chr.deathy), stf(chr.deathz), true);<!--c2--></div><!--ec2-->
I hand't realized it before, but that provides us with a wealth of new options! <img src="style_emoticons/<#EMO_DIR#>/w00t.gif" style="vertical-align:middle" emoid="
" border="0" alt="w00t.gif" />