Andyintore
Landlubber
Yo, i cant download the file, is it still available to download anywhere?
Also, do it work in the Build 13 Final?
Also, do it work in the Build 13 Final?
Visit our website www.piratehorizons.com to quickly find download links for the newest versions of our New Horizons mods Beyond New Horizons and Maelstrom New Horizons!
Quick links for Beyond New Horizons
- Download latest version
- Wiki
- FAQ
- Report bugs here
- Bug Tracker on Github
Quick links for Maelstrom
- Download the latest version of Maelstrom
- Download the latest version of ERAS II
- Download the latest version of New Horizons on Maelstrom
Quick links for PotC: New Horizons
- Download latest version
- Wiki
- FAQ
- Report bugs here
Thanks to YOUR votes, GOG.com now sells:
- Sea Dogs
- Sea Dogs: Caribbean Tales
- Sea Dogs: City of Abandoned Ships
Vote now to add Pirates of the Caribbean to the list!
Quick links for AoP2: Gentlemen of Fortune 2
- Downloads and info
- ModDB Profile
- Forums Archive
A Pirate Podcast with Interviews
Music, Comedy and all things Pirate!
- Episode Guide - About - Subscribe -
- Twitter - Facebook - iTunes - Android -
- Youtube - Fill the Coffers -
In the process I have managed this as wellA good thing would be also to add functionality of deciding which ship would be located at which locator - for quest writing purposes, i.e.
SetCharacterShipLocation(characterfromID("*random*"), "Redmond_port");
void LocLoadShips(ref Location)
{
int i, j;
int iShipsType[MAX_SHIPS_IN_LOCATION];
int iShipType, iMainCharacterShipType;
aref locator_ships,locator_otherships;
aref locator;
// KK -->
for (i = 0; i < locNumShips; i++)
{
DeleteClass(locShips[i]);
}
// <-- KK
locNumShips = 0;
bool bMainCharacterHere = LocIsEntryLocation(Location);
ref rPlayer = GetMainCharacter();
if (!CheckAttribute(Location, "locators"))
{
if(Location.environment.sea=="true" && !bDeckEnter) traceif("LocLoadShips: Can't find Location.locators in location: " + Location.id); // MAXIMUS 28.07.2006
return;
}
int iMCI = GetMainCharacterIndex();
ref MC = GetMainCharacter(); // KK
if (!CheckAttribute(Location, "locators.ships"))
{
if(Location.environment.sea=="true" && !bDeckEnter) traceif("LocLoadShips: Can't find Location.locators.ships in location: " + Location.id); // MAXIMUS 28.07.2006
return;
}
if (!CheckAttribute(Location, "locators.ships_other"))
{
if(Location.environment.sea=="true" && !bDeckEnter) traceif("LocLoadShips: Can't find Location.locators.ships_other in location: " + Location.id); // MAXIMUS 28.07.2006
return;
}
makearef(locator_ships, location.locators.ships);
makearef(locator_otherships, location.locators.ships_other);
iMainCharacterShipType = GetCharacterShipType(MC); // PS
If(CheckAttribute(MC,"fallen")) // Screwface : Need to restore the fallen mast(s) to avoid crashes with set flags
{
DeleteAttribute(MC,"ship.sails");
DeleteAttribute(MC,"ship.masts");
DeleteAttribute(MC,"fallen");
Trace("Player mast restored");
}
// create our characters ships
if (bMainCharacterHere)
{
for (i=0;i<COMPANION_MAX;i++)
{
if (locNumShips >= MAX_SHIPS_IN_LOCATION) continue;
int iCompanionIndex = GetCompanionIndex(MC, i);
if (iCompanionIndex==-1) continue;
ref rCompanion = GetCharacter(iCompanionIndex); // KK
If(CheckAttribute(rCompanion,"fallen")) // Screwface : Need to restore the fallen mast(s) to avoid crashes with set flags
{
DeleteAttribute(rCompanion,"ship.sails");
DeleteAttribute(rCompanion,"ship.masts");
DeleteAttribute(rCompanion,"fallen");
Trace("Companion mast restored");
}
iShipType = GetCharacterShipType(rCompanion); // PS
if (iShipType == SHIP_NOTUSED) continue;
SetCharacterShipLocation(rCompanion, Location.id); // KK
iShips[locNumShips] = iCompanionIndex;
iShipsType[locNumShips] = 0;
rCompanion.curshipnum = locNumShips; // KK
locNumShips++;
}
}
// create other quest characters ships
for (i=0;i<CHARACTERS_QUANTITY;i++) // NK 05-04-05 use CHARACTERS_QUANTITY
{
// ref theChar = &Characters[i]; traceif("Character[" + i + "] index = " + theChar.index); // keep this around to test for bad characters
if (i == iMCI) continue;
if (locNumShips >= MAX_SHIPS_IN_LOCATION) continue;
if (!CheckAttribute(&Characters[i], "index")) continue; // LDH 04Sep06 prune characters who were deleted in boarding code
if (!Character_LocIsEntryLocation(&Characters[i],Location)) continue;
bool bExist = false;
for (j=0;j<locNumShips;j++)
{
if (i == iShips[j])
{
bExist = true; break;
}
}
if (bExist) continue;
iShipType = GetCharacterShipType(GetCharacter(i)); // PS
if (iShipType == SHIP_NOTUSED) continue;
if (LAi_IsDead(&Characters[i])) continue; // NK 04-09-12 if char is dead, skip. Needed for pruning ships of dead coast captains.
iShips[locNumShips] = i;
Characters[i].curshipnum = locNumShips; // KK
locNumShips++;
iShipsType[locNumShips] = 1;
}
// traceif("CHARACTERS_QUANTITY = " + CHARACTERS_QUANTITY + ", locNumShips = " + locNumShips); // 1118, 28
// DumpAttributes(locator_ships); // LDH test, 4 ships, I only had 2 companions
// DumpAttributes(locator_otherships); // LDH test, max is 8 always
int iNumShips = GetAttributesNum(locator_ships);
int iNumOtherShips = GetAttributesNum(locator_otherships);
int iCurNumShips = 0;
int iCurNumOtherShips = 0;
ref rCharacter; // PS
ref rShip; // PS
for(int n = 0; n < locNumShips; n++)
{
switch(iShipsType[locNumShips])
{
case 0:
if (iCurNumShips >= iNumShips)
{
traceif("LocLoadShips: need (ships): " + iCurNumShips + ", but max_num_ships: " + iNumShips);
iCurNumShips++; // LDH added for trace 03Sep06
continue;
};
locator = GetAttributeN(locator_ships, iCurNumShips);
iCurNumShips++;
break;
case 1:
if (iCurNumOtherShips >= iNumOtherShips)
{
traceif("LocLoadShips: need (ships_other): " + iCurNumOtherShips + ", but max_num_ships_other: " + iNumOtherShips);
iCurNumOtherShips++; // LDH added for trace
continue;
};
locator = GetAttributeN(locator_otherships, iCurNumOtherShips);
iCurNumOtherShips++;
break;
}
ShipModelrList[n] = GetCurrentModelrNumber(); // KK
if (CreateEntity(&locShips[n], "ship") == 0) break;
rCharacter = GetCharacter(iShips[n]); // PS
rShip = GetShipByType(GetCharacterShipType(rCharacter)); // PS
// Screwface : save the sea pos of player ship to avoid be reload nowhere when we go on worldmap just after sea loading
if(rcharacter.index == GetMainCharacterIndex() && !CheckAttribute(rCharacter,"Ship.Pos.save"))
{
rCharacter.Ship.Pos.save.x = rCharacter.Ship.Pos.x;
rCharacter.Ship.Pos.save.z = rCharacter.Ship.Pos.z;
}
// Screwface :end
rCharacter.Ship.Pos.x = stf(locator.x);
rCharacter.Ship.Pos.z = stf(locator.z);
// KK -->
if (CheckAttribute(locator, "vZ")) {
rCharacter.Ship.Ang.y = GetAngleY(stf(locator.vZ.x),stf(locator.vZ.z));
} else {
rCharacter.Ship.Ang.y = stf(locator.ay);
}
// <-- KK
// PB: Sailing Ships -->
ref lcn = &Locations[FindLocation(rPlayer.location)];
if(CheckAttribute(lcn, "island"))
{
string islandstr = lcn.island;
if(GetAttribute(Islands[FindIsland(islandstr)], "skipCR") != true)
{
for(j = 1; j < 7; j++)
{
DeleteAttribute(characterFromID("Cr" + islandstr + j),"sailaway");
if(rand(2) == 0) characters[GetCharacterIndex("Cr" + islandstr + j)].sailaway = true;
}
}
}
// PB: Sailing Ships <--
// ASVS -->
if(CheckAttribute(rCharacter,"sailaway"))
{
if(!CheckAttribute(rCharacter,"Ship.Strand")) rCharacter.Ship.Strand = false;
if(!CheckAttribute(SeaCameras,"camera")) SeaCameras.Camera = "SeaShipCamera";
if(!CheckAttribute(rCharacter,"ship.cannons.Charge")) rCharacter.ship.cannons.Charge.Type = GOOD_BALLS;
if(!CheckAttribute(rCharacter,"TmpPerks.LongRangeShoot")) rCharacter.TmpPerks.LongRangeShoot = false;
if(!CheckAttribute(rCharacter,"TmpPerks.shipspeedup")) rCharacter.TmpPerks.shipspeedup = false;
if(!CheckAttribute(rCharacter,"TmpPerks.shipturnrateup")) rCharacter.TmpPerks.shipturnrateup = false;
if(!CheckAttribute(rCharacter,"TmpPerks.sailingprofessional")) rCharacter.TmpPerks.sailingprofessional = false;
if(!CheckAttribute(rCharacter,"TmpPerks.stormprofessional")) rCharacter.TmpPerks.stormprofessional = false;
if(!CheckAttribute(rCharacter,"TmpPerks.turn")) rCharacter.TmpPerks.turn = false;
rCharacter.Ship.stopped = false;
rCharacter.Ship.Speed.z = 1.5;
}
else
{
rCharacter.Ship.stopped = true;
rCharacter.Ship.Speed.z = 0.0;
}
// ASVS <--
Ship_PrepareShipForLocation(rCharacter);
// Screwface : section to send to setshipflag function the real number of ships who are physically in port and avoid CTD in some ports
if(!Checkattribute(rPlayer,"numcoastalindocks")){rPlayer.numcoastalindocks = 0;}
if(iCurNumOtherShips >= iCurNumShips)
rPlayer.numcoastalindocks = iCurNumOtherShips;
else
rPlayer.numcoastalindocks = iCurNumShips;
If(CheckAttribute(rCharacter,"fallen")) // Restore the fallen mast(s) to avoid crashes
{
DeleteAttribute(rCharacter,"ship.sails");
DeleteAttribute(rCharacter,"ship.masts");
DeleteAttribute(rCharacter,"fallen");
}
//If(CheckAttribute(GetMainCharacter(),"avoidflagsRe")){DeleteAttribute(GetMainCharacter(),"avoidflagsRe");}
// Screwface : end
SendMessage(&locShips[n],"laa",MSG_SHIP_CREATE,&rCharacter,&rShip);
}
// load boat 2 location
if (CheckAttribute(Location, "locators.reload.boat"))
{
if (bMainCharacterHere && iMainCharacterShipType != SHIP_NOTUSED)
{
if (CreateEntity(&locShips[n], "ship"))
{
makearef(locator,Location.locators.reload.boat);
rCharacter = GetCharacter(MAX_CHARACTERS+BOAT_CHARACTER);
rShip = GetShipByType(GetCharacterShipType(&rCharacter)); // PS
rCharacter.Ship.Pos.x = stf(locator.x);
rCharacter.Ship.Pos.z = stf(locator.z);
rCharacter.Ship.Ang.y = GetAngleY(stf(locator.vZ.x),stf(locator.vZ.z));
rCharacter.Ship.stopped = true;
rCharacter.Ship.Speed.z = 0.0;
Ship_PrepareShipForLocation(rCharacter);
SendMessage(&locShips[n],"laa",MSG_SHIP_CREATE,&rCharacter,&rShip);
locNumShips++;
}
}
}
else
{
if (bMainCharacterHere)
{
traceif("LocLoadShips: Can't find boat locator in location: " + Location.id);
}
}
}
void LocLoadShips(ref Location)
{
int i, j;
int iShipsType[MAX_SHIPS_IN_LOCATION];
int iShipType, iMainCharacterShipType;
aref locator_ships,locator_otherships;
aref locator;
// KK -->
for (i = 0; i < locNumShips; i++)
{
DeleteClass(locShips[i]);
}
// <-- KK
locNumShips = 0;
bool bMainCharacterHere = LocIsEntryLocation(Location);
ref rPlayer = GetMainCharacter();
if (!CheckAttribute(Location, "locators"))
{
if(Location.environment.sea=="true" && !bDeckEnter) traceif("LocLoadShips: Can't find Location.locators in location: " + Location.id); // MAXIMUS 28.07.2006
return;
}
int iMCI = GetMainCharacterIndex();
ref MC = GetMainCharacter(); // KK
if (!CheckAttribute(Location, "locators.ships"))
{
if(Location.environment.sea=="true" && !bDeckEnter) traceif("LocLoadShips: Can't find Location.locators.ships in location: " + Location.id); // MAXIMUS 28.07.2006
return;
}
if (!CheckAttribute(Location, "locators.ships_other"))
{
if(Location.environment.sea=="true" && !bDeckEnter) traceif("LocLoadShips: Can't find Location.locators.ships_other in location: " + Location.id); // MAXIMUS 28.07.2006
return;
}
makearef(locator_ships, location.locators.ships);
makearef(locator_otherships, location.locators.ships_other);
iMainCharacterShipType = GetCharacterShipType(MC); // PS
If(CheckAttribute(MC,"fallen")) // Screwface : Need to restore the fallen mast(s) to avoid crashes with set flags
{
DeleteAttribute(MC,"ship.sails");
DeleteAttribute(MC,"ship.masts");
DeleteAttribute(MC,"fallen");
Trace("Player mast restored");
}
// create our characters ships
if (bMainCharacterHere)
{
for (i=0;i<COMPANION_MAX;i++)
{
if (locNumShips >= MAX_SHIPS_IN_LOCATION) continue;
int iCompanionIndex = GetCompanionIndex(MC, i);
if (iCompanionIndex==-1) continue;
ref rCompanion = GetCharacter(iCompanionIndex); // KK
If(CheckAttribute(rCompanion,"fallen")) // Screwface : Need to restore the fallen mast(s) to avoid crashes with set flags
{
DeleteAttribute(rCompanion,"ship.sails");
DeleteAttribute(rCompanion,"ship.masts");
DeleteAttribute(rCompanion,"fallen");
Trace("Companion mast restored");
}
iShipType = GetCharacterShipType(rCompanion); // PS
if (iShipType == SHIP_NOTUSED) continue;
SetCharacterShipLocation(rCompanion, Location.id); // KK
iShips[locNumShips] = iCompanionIndex;
iShipsType[locNumShips] = 0;
rCompanion.curshipnum = locNumShips; // KK
locNumShips++;
}
}
// create other quest characters ships
for (i=0;i<CHARACTERS_QUANTITY;i++) // NK 05-04-05 use CHARACTERS_QUANTITY
{
// ref theChar = &Characters[i]; traceif("Character[" + i + "] index = " + theChar.index); // keep this around to test for bad characters
if (i == iMCI) continue;
if (locNumShips >= MAX_SHIPS_IN_LOCATION) continue;
if (!CheckAttribute(&Characters[i], "index")) continue; // LDH 04Sep06 prune characters who were deleted in boarding code
if (!Character_LocIsEntryLocation(&Characters[i],Location)) continue;
bool bExist = false;
for (j=0;j<locNumShips;j++)
{
if (i == iShips[j])
{
bExist = true; break;
}
}
if (bExist) continue;
iShipType = GetCharacterShipType(GetCharacter(i)); // PS
if (iShipType == SHIP_NOTUSED) continue;
if (LAi_IsDead(&Characters[i])) continue; // NK 04-09-12 if char is dead, skip. Needed for pruning ships of dead coast captains.
iShips[locNumShips] = i;
Characters[i].curshipnum = locNumShips; // KK
iShipsType[locNumShips] = 1;
locNumShips++;
}
// traceif("CHARACTERS_QUANTITY = " + CHARACTERS_QUANTITY + ", locNumShips = " + locNumShips); // 1118, 28
// DumpAttributes(locator_ships); // LDH test, 4 ships, I only had 2 companions
// DumpAttributes(locator_otherships); // LDH test, max is 8 always
int iNumShips = GetAttributesNum(locator_ships);
int iNumOtherShips = GetAttributesNum(locator_otherships);
int iCurNumShips = 0;
int iCurNumOtherShips = 0;
ref rCharacter; // PS
ref rShip; // PS
for(int n = 0; n < locNumShips; n++)
{
switch(iShipsType[n])
{
case 0:
if (iCurNumShips >= iNumShips)
{
traceif("LocLoadShips: need (ships): " + iCurNumShips + ", but max_num_ships: " + iNumShips);
iCurNumShips++; // LDH added for trace 03Sep06
continue;
};
locator = GetAttributeN(locator_ships, iCurNumShips);
iCurNumShips++;
break;
case 1:
if (iCurNumOtherShips >= iNumOtherShips)
{
traceif("LocLoadShips: need (ships_other): " + iCurNumOtherShips + ", but max_num_ships_other: " + iNumOtherShips);
iCurNumOtherShips++; // LDH added for trace
continue;
};
locator = GetAttributeN(locator_otherships, iCurNumOtherShips);
iCurNumOtherShips++;
break;
}
ShipModelrList[n] = GetCurrentModelrNumber(); // KK
if (CreateEntity(&locShips[n], "ship") == 0) break;
rCharacter = GetCharacter(iShips[n]); // PS
rShip = GetShipByType(GetCharacterShipType(rCharacter)); // PS
// Screwface : save the sea pos of player ship to avoid be reload nowhere when we go on worldmap just after sea loading
if(rcharacter.index == GetMainCharacterIndex() && !CheckAttribute(rCharacter,"Ship.Pos.save"))
{
rCharacter.Ship.Pos.save.x = rCharacter.Ship.Pos.x;
rCharacter.Ship.Pos.save.z = rCharacter.Ship.Pos.z;
}
// Screwface :end
rCharacter.Ship.Pos.x = stf(locator.x);
rCharacter.Ship.Pos.z = stf(locator.z);
// KK -->
if (CheckAttribute(locator, "vZ")) {
rCharacter.Ship.Ang.y = GetAngleY(stf(locator.vZ.x),stf(locator.vZ.z));
} else {
rCharacter.Ship.Ang.y = stf(locator.ay);
}
// <-- KK
// PB: Sailing Ships -->
ref lcn = &Locations[FindLocation(rPlayer.location)];
if(CheckAttribute(lcn, "island"))
{
string islandstr = lcn.island;
if(GetAttribute(Islands[FindIsland(islandstr)], "skipCR") != true)
{
for(j = 1; j < 7; j++)
{
DeleteAttribute(characterFromID("Cr" + islandstr + j),"sailaway");
if(rand(2) == 0) characters[GetCharacterIndex("Cr" + islandstr + j)].sailaway = true;
}
}
}
// PB: Sailing Ships <--
// ASVS -->
if(CheckAttribute(rCharacter,"sailaway"))
{
if(!CheckAttribute(rCharacter,"Ship.Strand")) rCharacter.Ship.Strand = false;
if(!CheckAttribute(SeaCameras,"camera")) SeaCameras.Camera = "SeaShipCamera";
if(!CheckAttribute(rCharacter,"ship.cannons.Charge")) rCharacter.ship.cannons.Charge.Type = GOOD_BALLS;
if(!CheckAttribute(rCharacter,"TmpPerks.LongRangeShoot")) rCharacter.TmpPerks.LongRangeShoot = false;
if(!CheckAttribute(rCharacter,"TmpPerks.shipspeedup")) rCharacter.TmpPerks.shipspeedup = false;
if(!CheckAttribute(rCharacter,"TmpPerks.shipturnrateup")) rCharacter.TmpPerks.shipturnrateup = false;
if(!CheckAttribute(rCharacter,"TmpPerks.sailingprofessional")) rCharacter.TmpPerks.sailingprofessional = false;
if(!CheckAttribute(rCharacter,"TmpPerks.stormprofessional")) rCharacter.TmpPerks.stormprofessional = false;
if(!CheckAttribute(rCharacter,"TmpPerks.turn")) rCharacter.TmpPerks.turn = false;
rCharacter.Ship.stopped = false;
rCharacter.Ship.Speed.z = 1.5;
}
else
{
rCharacter.Ship.stopped = true;
rCharacter.Ship.Speed.z = 0.0;
}
// ASVS <--
Ship_PrepareShipForLocation(rCharacter);
// Screwface : section to send to setshipflag function the real number of ships who are physically in port and avoid CTD in some ports
if(!Checkattribute(rPlayer,"numcoastalindocks")){rPlayer.numcoastalindocks = 0;}
if(iCurNumOtherShips >= iCurNumShips)
rPlayer.numcoastalindocks = iCurNumOtherShips;
else
rPlayer.numcoastalindocks = iCurNumShips;
If(CheckAttribute(rCharacter,"fallen")) // Restore the fallen mast(s) to avoid crashes
{
DeleteAttribute(rCharacter,"ship.sails");
DeleteAttribute(rCharacter,"ship.masts");
DeleteAttribute(rCharacter,"fallen");
}
//If(CheckAttribute(GetMainCharacter(),"avoidflagsRe")){DeleteAttribute(GetMainCharacter(),"avoidflagsRe");}
// Screwface : end
SendMessage(&locShips[n],"laa",MSG_SHIP_CREATE,&rCharacter,&rShip);
}
// load boat 2 location
if (CheckAttribute(Location, "locators.reload.boat"))
{
if (bMainCharacterHere && iMainCharacterShipType != SHIP_NOTUSED)
{
if (CreateEntity(&locShips[n], "ship"))
{
makearef(locator,Location.locators.reload.boat);
rCharacter = GetCharacter(MAX_CHARACTERS+BOAT_CHARACTER);
rShip = GetShipByType(GetCharacterShipType(&rCharacter)); // PS
rCharacter.Ship.Pos.x = stf(locator.x);
rCharacter.Ship.Pos.z = stf(locator.z);
rCharacter.Ship.Ang.y = GetAngleY(stf(locator.vZ.x),stf(locator.vZ.z));
rCharacter.Ship.stopped = true;
rCharacter.Ship.Speed.z = 0.0;
Ship_PrepareShipForLocation(rCharacter);
SendMessage(&locShips[n],"laa",MSG_SHIP_CREATE,&rCharacter,&rShip);
locNumShips++;
}
}
}
else
{
if (bMainCharacterHere)
{
traceif("LocLoadShips: Can't find boat locator in location: " + Location.id);
}
}
}
switch(pchar.location)
{
case "Redmond_port":
if (o > 4)
{
iShipsType[locNumShips] = 2;
}
break;
case "Douwesen_port":
if (o > 3)
{
iShipsType[locNumShips] = 2;
}
break;
case "IslaMuelle_port":
if (o > 2)
{
iShipsType[locNumShips] = 2;
}
break;
iShipsType[locNumShips] = 1;
}
switch(rplayer.location)
{
case "Redmond_port":
if (o >= 4)
{
iShipsType[locNumShips] = 2;
Logit("ship #" + locNumShips + ": Ships Big: " + b + " " + "ship class: " + GetCharacterShipClass(Characters[i]) + " ship name: " + Characters[i].ship.name)
b++
}
else
{
iShipsType[locNumShips] = 1;
Logit("ship #" + locNumShips + ": Ships Other: " + o + " " + "ship class: " + GetCharacterShipClass(Characters[i]) + " ship name: " + Characters[i].ship.name)
o++
}
break;
case "Douwesen_port":
if (o >= 3)
{
iShipsType[locNumShips] = 2;
Logit("ship #" + locNumShips + ": Ships Big: " + b + " " + "ship class: " + GetCharacterShipClass(Characters[i]) + " ship name: " + Characters[i].ship.name)
b++
}
else
{
iShipsType[locNumShips] = 1;
Logit("ship #" + locNumShips + ": Ships Other: " + o + " " + "ship class: " + GetCharacterShipClass(Characters[i]) + " ship name: " + Characters[i].ship.name)
o++
}
break;
case "Muelle_port":
if (o >= 2)
{
iShipsType[locNumShips] = 2;
Logit("ship #" + locNumShips + ": Ships Big: " + b + " " + "ship class: " + GetCharacterShipClass(Characters[i]) + " ship name: " + Characters[i].ship.name)
b++
}
else
{
iShipsType[locNumShips] = 1;
Logit("ship #" + locNumShips + ": Ships Other: " + o + " " + "ship class: " + GetCharacterShipClass(Characters[i]) + " ship name: " + Characters[i].ship.name)
o++
}
break;
iShipsType[locNumShips] = 1;
Logit("ship #" + locNumShips + ": Ships Other: " + o + " " + "ship class: " + GetCharacterShipClass(Characters[i]) + " ship name: " + Characters[i].ship.name)
o++
}
if (o >= GetAttributesNum(locator_otherships))
{
iShipsType[locNumShips] = 2;
Logit("ship #" + locNumShips + ": Ships Big: " + b + " " + "ship class: " + GetCharacterShipClass(Characters[i]) + " ship name: " + Characters[i].ship.name)
b++
}
else
{
iShipsType[locNumShips] = 1;
Logit("ship #" + locNumShips + ": Ships Other: " + o + " " + "ship class: " + GetCharacterShipClass(Characters[i]) + " ship name: " + Characters[i].ship.name)
o++
}
if (b < iNumJettyShips && JettyShip(Characters[i]))
{
iShipsType[locNumShips] = 2;
Logit("ship #" + locNumShips + ": Ships Jetty: " + b + " " + "ship class: " + GetCharacterShipClass(Characters[i]) + " ship name: " + Characters[i].ship.name);
b++
}
else
{
iShipsType[locNumShips] = 1;
Logit("ship #" + locNumShips + ": Ships Other: " + o + " " + "ship class: " + GetCharacterShipClass(Characters[i]) + " ship name: " + Characters[i].ship.name);
o++
}