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 -
Should be immediate, no new game required.Does that update take effect at once or does it need a whole new game?
I wrote it to set the correct relations at game start depending on your chosen nation; it was never used for anything else nor was it meant to be.Is SetRelationsAsNation used for anything other than keeping a commissioned officer's relations in line with his nation?
I suspect that you won't be able to gain ranks, and here's why:Cheers.
So I think we need to have a few things confirmed:
1. On Free Play, do relation changes still happen at all?
2. If so, does the frequency seem right or too often/not often enough?
3. On Commissioned player type, do your nation relations follow changes in relation between your served nation and other ones?
4. Are you actually able to gain ranks with your nation now, e.g. do your relations no longer get "reset" when they shouldn't?
So it's not every day, but do your relations with your own nation still change? That was the problem - whenever your relations with nations is reset, it includes your relations with your own nation. If I understand correctly, your relations are now only reset if, for example, you're playing a British commissioned officer and Britain declares war on Spain. That's when your relations with Britain will revert to 0. Which means you'll have longer to earn points and may even get a promotion, but then you get zeroed and you have to earn all the points back again...- On Commissioned player type, player relations change ONLY if the relation of your "served nation" changes too. So no longer a daily reset of your relations.
That was indeed done. So I do indeed suspect this is the "Commissioned" issue.if someone edited the "Master and Commander" storyline to set you as commissioned officer by default.
No, it wouldn't.So it's not every day, but do your relations with your own nation still change?
// Sulan: Improved Random Relations code -->
void RandomNationsRelationsChange()
{
int i,j;
int newRelation = RELATION_UNKNOWN;
int random;
ref pchar = GetMainCharacter();
string logTitle;
string logEntry;
// PB: Rewritten to a maximum of one change per day -->
if(rand(1000) < RELATION_CHANGE_PROBABILITY*10) // do relation change
{
// STEP 1: Find nations for relation change
i = PERSONAL_NATION;
j = PERSONAL_NATION;
while(i==PERSONAL_NATION || i==PIRATE) // Pirate relation doesn't change
{
i = rand(NATIONS_QUANTITY-1);
}
while(j==PERSONAL_NATION || j==PIRATE || i==j) // Also don't change relation to same nation
{
j = rand(NATIONS_QUANTITY-1);
}
// STEP 2: Figure out what to do with them
switch(GetNationRelation(i,j))
{
case RELATION_ENEMY:
logTitle = GetNationNameByType(i)+" and "+GetNationNameByType(j)+" make peace";
logEntry = "After some time of bloody warfare "+GetNationNameByType(i)+" and "+GetNationNameByType(j)+" have declared a ceasefire.";
if(GetNationRelation2MainCharacter(i)==RELATION_FRIEND && GetNationRelation2MainCharacter(j)==RELATION_FRIEND) logEntry += " This is good news as it was a very hard time to keep friendly relations with two warfaring parties.";
if(GetServedNation()==i && GetNationRelation2MainCharacter(j)==RELATION_ENEMY) logEntry += "\n \nAlthough good news in general, this is bad news for me. Attacking "+GetNationDescByType(j)+" ships and towns will not raise my reputation with the "+GetNationDescByType(i)+" anymore.";
if(GetServedNation()==j && GetNationRelation2MainCharacter(i)==RELATION_ENEMY) logEntry += "\n \nAlthough good news in general, this is bad news for me. Attacking "+GetNationDescByType(i)+" ships and towns will not raise my reputation with the "+GetNationDescByType(j)+" anymore.";
WriteNewLogEntry(logTitle, logEntry, "General",false);
newRelation = RELATION_NEUTRAL;
break;
case RELATION_NEUTRAL:
random = rand(2);
if(random==0)
{
logTitle = GetNationNameByType(i)+" and "+GetNationNameByType(j)+" have allied";
logEntry = GetNationNameByType(i)+" and "+GetNationNameByType(j)+" have formed an alliance. Attacking ships or towns of either nation will also decrease the standing with the ally.";
if(GetNationRelation2MainCharacter(i)==RELATION_FRIEND && GetNationRelation2MainCharacter(j)==RELATION_FRIEND) logEntry += " Very good news, indeed. Working for the "+GetNationDescByType(i)+" and the "+GetNationDescByType(j)+", as I currently do, my deeds will raise my standing with both nations.";
if(GetNationRelation2MainCharacter(i)==RELATION_ENEMY && GetNationRelation2MainCharacter(j)==RELATION_ENEMY) logEntry += " Whoops! It seems I have bothered them a little too much. But their alliance won't stop me.";
if(GetServedNation()==i && GetNationRelation2MainCharacter(j)==RELATION_ENEMY) logEntry += "\n \nThis makes working for the "+GetNationDescByType(i)+" somewhat more difficult, as sinking "+GetNationDescByType(j)+" ships is no longer an option.";
if(GetServedNation()==j && GetNationRelation2MainCharacter(i)==RELATION_ENEMY) logEntry += "\n \nThis makes working for the "+GetNationDescByType(j)+" somewhat more difficult, as sinking "+GetNationDescByType(i)+" ships is no longer an option.";
WriteNewLogEntry(logTitle, logEntry, "General",false);
newRelation = RELATION_FRIEND;
}
if(random==1) // i declared war on j
{
logTitle = GetNationNameByType(i)+" is at war with "+GetNationNameByType(j);
logEntry = GetNationNameByType(i)+" has declared war on "+GetNationNameByType(j)+". "+GetNationDescByType(i)+" ships have attacked a small "+GetNationDescByType(j)+" settlement, as I was told.";
if(GetServedNation()==i && GetNationRelation2MainCharacter(j)==RELATION_ENEMY) logEntry += "\n \nIt was about time to show those "+GetNationDescByType(j)+" landlubbers who's in charge in the caribbean!";
if(GetServedNation()==j && GetNationRelation2MainCharacter(i)==RELATION_ENEMY) logEntry += "\n \nThose bloody cowards! The next "+GetNationDescByType(i)+" ship we encounter will surely pay for this.";
WriteNewLogEntry(logTitle, logEntry, "General",false);
newRelation = RELATION_ENEMY;
}
if(random==2) // j declared war on i
{
logTitle = GetNationNameByType(j)+" is at war with "+GetNationNameByType(i);
logEntry = GetNationNameByType(j)+" has declared war on "+GetNationNameByType(i)+". "+GetNationDescByType(j)+" troops have landed near "+GetTownByNation(i)+", as I was told.";
if(GetServedNation()==i && GetNationRelation2MainCharacter(j)==RELATION_ENEMY) logEntry += "\n \nThose bloody cowards! The next "+GetNationDescByType(j)+" ship we encounter will surely pay for this.";
if(GetServedNation()==j && GetNationRelation2MainCharacter(i)==RELATION_ENEMY) logEntry += "\n \nIt was about time to show those "+GetNationDescByType(i)+" landlubbers who's in charge in the caribbean!";
WriteNewLogEntry(logTitle, logEntry, "General",false);
newRelation = RELATION_ENEMY;
}
break;
case RELATION_FRIEND:
random = rand(2);
if(random==0)
{
logTitle = GetNationNameByType(i)+" and "+GetNationNameByType(j)+" broke their alliance";
logEntry = GetNationNameByType(i)+" and "+GetNationNameByType(j)+" have broken their alliance, but are currently peaceful. Observers report military activity on both sides, but so far an open conflict has been avoided.";
newRelation = RELATION_NEUTRAL;
}
if(random==1) // i broke the alliance
{
logTitle = GetNationNameByType(i)+" and "+GetNationNameByType(j)+" broke their alliance";
logEntry = GetNationNameByType(i)+" and "+GetNationNameByType(j)+" have broken their alliance and are now at war! It was reported that "+GetNationNameByType(i)+" broke the alliance by "+GetBreakAllianceReason(i,j);
if(GetServedNation()==j && GetNationRelation2MainCharacter(i)==RELATION_ENEMY) logEntry += "\n \nThose treacherous bastards! The "+GetNationDescByType(i)+" will pay for this betrayal. I have ordered to open fire on sight of any "+GetNationDescByType(i)+" ship.";
WriteNewLogEntry(logTitle, logEntry, "General",false);
newRelation = RELATION_NEUTRAL;
}
if(random==2) // j broke the alliance
{
logTitle = GetNationNameByType(j)+" and "+GetNationNameByType(i)+" broke their alliance";
logEntry = GetNationNameByType(j)+" and "+GetNationNameByType(i)+" have broken their alliance and are now at war! It was reported that "+GetNationNameByType(j)+" broke the alliance by "+GetBreakAllianceReason(j,i);
if(GetServedNation()==i && GetNationRelation2MainCharacter(j)==RELATION_ENEMY) logEntry += "\n \nThose treacherous bastards! The "+GetNationDescByType(j)+" will pay for this betrayal. I have ordered to open fire on sight of any "+GetNationDescByType(j)+" ship.";
WriteNewLogEntry(logTitle, logEntry, "General",false);
newRelation = RELATION_ENEMY;
}
break;
}
// STEP 3: Change relation and match player if required
SetNationRelationBoth(i, j, newRelation);
if(CheckAttribute(pchar, "professionalnavy")) // For Commissioned Naval Officers
{
if(i == GetServedNation()) i = j; // Don't change your relation to your OWN nation
switch(newRelation)
{
case RELATION_ENEMY:
SetActualRMRelation(i, REL_WAR);
break;
case RELATION_NEUTRAL:
SetActualRMRelation(i, REL_AFTERATTACK);
break;
case RELATION_FRIEND:
SetActualRMRelation(i, REL_AMNESTY);
break;
}
}
}
// PB: Rewritten to a maximum of one change per day <--
}
string GetBreakAllianceReason(int traitor, int victim)
{
int random;
string sReasons[6];
sReasons[0] = "'accidently' sinking the "+GetNationDescByType(victim)+" military supply convoy.";
sReasons[1] = "treating the "+GetNationDescByType(victim)+" ambassador in a 'disrespectful' manner, as was reported from Europe.";
sReasons[2] = "brutally burning down a small settlement of the "+GetNationDescByType(victim)+", leaving no one alive (I am curious how they got this report then?).";
sReasons[3] = "officially knighting a notorious freebooter, who plundered the "+GetNationDescByType(victim)+" colonies in the previous war.";
sReasons[4] = "inciting a slave revolt in a major "+GetNationDescByType(victim)+" colony.";
sReasons[5] = "sending a horde of French squirrels with blond wigs to pillage a Spanish monastery.\n \n This doesn't make any sense at all and does not really explain why "+GetNationNameByType(traitor)+" broke their alliance, but that's what they did.";
random = rand(5);
return sReasons[random];
}
// <-- Sulan
if(CheckAttribute(pchar, "professionalnavy")) // For Commissioned Naval Officers
{
if(i == GetServedNation()) i = j; // Don't change your relation to your OWN nation
switch(newRelation)
{
case RELATION_ENEMY:
SetActualRMRelation(i, REL_WAR);
break;
case RELATION_NEUTRAL:
SetActualRMRelation(i, REL_AFTERATTACK);
break;
case RELATION_FRIEND:
SetActualRMRelation(i, REL_AMNESTY);
break;
}
}