• New Horizons on Maelstrom
    Maelstrom New Horizons


    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!

Fixed Ship Hunting Quest Occasionally Cannot Be Completed

What jungle would you be talking about? Im @ canyon.. and after the mines there's like 20 masked bandits attacking all at once.. I killed them all, then there is bridgetown gate.
For curiosity, I entered then left back to canyon exit..
... whereas what you should have done is continue further into Bridgetown. On the left you should see the prison. The path leads to a junction, where you turn right and you should see a church. Past that is another gate. You'll know if you've gone through the correct gate because you'll be in another part of Bridgetown with what looks like another church on the left and a row of buildings including a mansion on the right. (If you're back in the canyon, or if you're looking at the sea, then you picked the wrong gate. Try again. :)) Go past the mansion, the path should curve a bit and lead past a wooden stockade to the gate to the jungle.
 
Ok thanks a lot.. all those attempts and I never thought it would be on land..
anyhow I got it over with.. I did two plots.. first one I killed her and then I went to sea.. but nothing happens and I don't get gold.. and questbook remains unchanged.
38.jpg

Second plot I reloaded, and I did half half with her.. so I took my 30k (some precious gold that is), and then went to sea and she came with me,but still quest unchanged from questbook..is there more to it after we leave the shore?

39.jpg
 
Does this seem like a fair solution?
Code:
    case "prepare_for_kill_pirate":
       //NK, use fantom calls way up top.
       Group_AddCharacter("Story_Pirate", "Quest pirate");
       //Log_SetStringToLog("prepare_for_kill_pirate");
       Group_SetGroupCommander("Story_Pirate", "Quest pirate");
       Group_SetTaskAttack("Story_Pirate", PLAYER_GROUP);
       //Group_SetAddress("Story_Pirate", Characters[GetMainCharacterIndex()].location, "Quest_ships", "Quest_ship_3");
       Group_SetAddress("Story_Pirate", Pchar.location, "Quest_ships", GetRandomQuestShipLocator(pchar.location)); // PB: Add some variety

       Group_LockTask("Story_Pirate");

       pchar.quest.kill_pirate_complete.win_condition.l1 = "NPC_Death";
       pchar.quest.kill_pirate_complete.win_condition.l1.character = "Quest pirate";
       pchar.quest.kill_pirate_complete.win_condition = "kill_pirate_complete";
       // PB: Expire this quest after a month -->
       pchar.quest.kill_pirate_complete.fail_condition.l1 = "Timer";
       pchar.quest.kill_pirate_complete.fail_condition.l1.date.day  = GetAddingDataDay  (0, 1, 0);
       pchar.quest.kill_pirate_complete.fail_condition.l1.date.month = GetAddingDataMonth(0, 1, 0);
       pchar.quest.kill_pirate_complete.fail_condition.l1.date.year  = GetAddingDataYear (0, 1, 0);
       pchar.quest.kill_pirate_complete.fail_condition = "kill_pirate_refused_2";
       // PB: Expire this quest after a month <--
     break;
I just tested this with a 1-day interval and it seems to work.
If you haven't dealt with the ship within 1 month of setting sail, the quest is removed from your questbook and three days later you can get another one.

I was originally thinking of making it 7 days, but of course the "one day for each hour in DirectSail" means we may need a bit of a larger interval.

Would this be a good enough solution or do we need a dialog option at the governors to fail this quest on purpose that way?

Plus there should probably be a mention in the dialog that there is a time limit now.
 
Sounds fair to me. Don't think you need a anything in the dialog. 1 month is enough to do the quest. if you still haven't done it then you probably weren't going to do it anyways.
As long as you are able to accept another quest after it.
 
a little rep loss wouldn't be a problem. after all you broke your promise
 
Actually, I think you added some rep loss to "kill_pirate_refused_2" before, didn't you? Or to the other one.
And then we removed it again because it wasn't fair if you'd get a rep loss for admitting your ship isn't big enough to win from your adversary.
Perhaps we need a third case that does include the rep loss.
 
Just checked, there is no replos
 
Now there is:
Code:
      // PB: Expire this quest after a month -->
       pchar.quest.kill_pirate_complete.fail_condition.l1 = "Timer";
       pchar.quest.kill_pirate_complete.fail_condition.l1.date.day  = GetAddingDataDay  (0, 1, 0);
       pchar.quest.kill_pirate_complete.fail_condition.l1.date.month = GetAddingDataMonth(0, 1, 0);
       pchar.quest.kill_pirate_complete.fail_condition.l1.date.year  = GetAddingDataYear (0, 1, 0);
       pchar.quest.kill_pirate_complete.fail_condition = "kill_pirate_refused_3";
       // PB: Expire this quest after a month <--
     break;

     case "kill_pirate_complete":
       if(!CheckAttribute(pchar,"quest.generate_kill_quest")) break;//MAXIMUS
       if(pchar.quest.generate_kill_quest=="completed") break;//MAXIMUS
       ChangeCharacterReputation(PChar, 4); //Add some reputation gain -Levis
       pchar.quest.generate_kill_quest = "completed";
// KK -->
       if (sti(Pchar.quest.generate_kill_quest.nation) == PIRATE)
         Preprocessor_AddQuestData("type", XI_ConvertString("1Pirate"));
       else
         Preprocessor_AddQuestData("type", XI_ConvertString(GetNationDescByType(sti(pchar.quest.generate_kill_quest.nation))) + " " + XI_ConvertString("Corsair"));
       cc = 0;
       for (iColony = 1; iColony <= GetIslandTownsQuantity(pchar.quest.generate_kill_quest.destination); iColony++) {
         if (GetTownGovernorIndex(GetTownIDFromIsland(pchar.quest.generate_kill_quest.destination, iColony)) != -1) cc++;
       }
       if (cc > 1)
         Preprocessor_AddQuestData("town", FindTownName(PChar.quest.generate_kill_quest.town) + " " + TranslateString("", "on") + " " + FindIslandName(pchar.quest.generate_kill_quest.destination));
       else
         Preprocessor_AddQuestData("town", FindTownName(PChar.quest.generate_kill_quest.town));
       Preprocessor_AddQuestData("ship_descr", GetShipDescribe("Quest pirate", true, true, true, true));
       AddQuestRecord("hunting", rand(4) + 2);
       Preprocessor_Remove("type");
       Preprocessor_Remove("town");
       Preprocessor_Remove("ship_descr");
// <-- KK
     break;

     case "kill_pirate_refused":
       pchar.quest.kill_pirate_refused_timer.win_condition.l1 = "Timer";
       pchar.quest.kill_pirate_refused_timer.win_condition.l1.date.day  = GetAddingDataDay  (0, 0, 3);
       pchar.quest.kill_pirate_refused_timer.win_condition.l1.date.month = GetAddingDataMonth(0, 0, 3);
       pchar.quest.kill_pirate_refused_timer.win_condition.l1.date.year  = GetAddingDataYear (0, 0, 3);
       pchar.quest.kill_pirate_refused_timer.win_condition = "kill_pirate_refused_timer";
     break;

     case "kill_pirate_refused_2":
       //Log_SetStringToLog("kill_pirate_refused_2");
       pchar.quest.kill_pirate_refused_timer.win_condition.l1 = "Timer";
       pchar.quest.kill_pirate_refused_timer.win_condition.l1.date.day  = GetAddingDataDay  (0, 0, 3);
       pchar.quest.kill_pirate_refused_timer.win_condition.l1.date.month = GetAddingDataMonth(0, 0, 3);
       pchar.quest.kill_pirate_refused_timer.win_condition.l1.date.year  = GetAddingDataYear (0, 0, 3);
       pchar.quest.kill_pirate_refused_timer.win_condition = "kill_pirate_refused_timer";
       DeleteQuestHeader("hunting");
       DeleteQuestAttribute("hunting");
     break;

     case "kill_pirate_refused_3":
       ChangeCharacterReputation(PChar, -1); //Add some reputation loss -Levis
       pchar.quest.kill_pirate_refused_timer.win_condition.l1 = "Timer";
       pchar.quest.kill_pirate_refused_timer.win_condition.l1.date.day  = GetAddingDataDay  (0, 0, 3);
       pchar.quest.kill_pirate_refused_timer.win_condition.l1.date.month = GetAddingDataMonth(0, 0, 3);
       pchar.quest.kill_pirate_refused_timer.win_condition.l1.date.year  = GetAddingDataYear (0, 0, 3);
       pchar.quest.kill_pirate_refused_timer.win_condition = "kill_pirate_refused_timer";
       DeleteQuestHeader("hunting");
       DeleteQuestAttribute("hunting");
     break;
Look! Your line of code made a come-back there! :cheeky
 
Back
Top