<!--quoteo(post=168295:date=Oct 20 2006, 03:43 PM:name=Pieter Boelen)--><div class='quotetop'>QUOTE(Pieter Boelen @ Oct 20 2006, 03:43 PM) [snapback]168295[/snapback]</div><div class='quotemain'><!--quotec-->
I don't think you're mad, no. But I do find it odd that you have that bug, because I didn't have any problem at all. But I didn't take the Oiseau to the Greenford fort to be sunk. I captured her myself on the open sea. I do know a bug that after you captured the Oiseau, you can't enter to the worldmap. Going to the captain's cabin enabled me to continue play though. Perhaps this bug causes the problem you are experiencing, because you are at Greenford when you attack the Oiseau. Please try this: Sink or capture the Oiseau at open sea this time and only go to Greenford after you sunk or captured her. Are you still locked out of Greenford that way?
<!--QuoteEnd--></div><!--QuoteEEnd-->
<!--quoteo(post=168295:date=Oct 20 2006, 03:43 PM:name=JohnPB)--><div class='quotetop'>QUOTE(JohnPB @ Oct 20 2006, 03:43 PM) [snapback]168295[/snapback]</div><div class='quotemain'><!--quotec-->
Black Bart it seems the problem is trying to capture/sink the Osieu in greenford or anywhere but open sea. I used to sink it in octopus bay near Falaise De Fleur and had the same problem as you. This time i sank it in the open sea and i cpuld land on greenford. Try that!<!--QuoteEnd--></div><!--QuoteEEnd-->
That indeed IS the problem - capture/sink at open sea and Greenford doesnt get locked. Sink/capture at a land location (with/without) assistance from a fort and Greenford becomes "locked" for the rest of the game(i suspect!). Its a bug then <img src="style_emoticons/<#EMO_DIR#>/smile.gif" style="vertical-align:middle" emoid="

" border="0" alt="smile.gif" />
I spent all today(yeah i had a free day) testing this phenonima. I've tracked it down to b13_beta1 and later versions.
12.1(full) does not have this problem - greenford never gets 'locked' no matter how you complete the 'escourt Osieau' mission. Neither do you get locked out of the worldmap if you capture the Osieau.
I also went to the trouble of comparing the code changes in the Programs\Quests\Quest.c file - this is what i got:
<i>Difference in Program\Quests\Quest.c between 12.1(full) and b13_beta1.</i>
Note 'Locked out of Greenford bug' not seen in 12.1(full) maybe the same for other 'locked out bugs'?
I'll use the line numbers from the origonal 12.1(full) version to take the bearing from.
<b>Line 8: In b13_beta1 has an additional section of code added:</b>
// NK add direct 05-04-17 -->
#event_handler("evntQuestCompleteDirect","procEvntQuestCompleteDirect");
void procEvntQuestCompleteDirect()
{
string qname = GetEventData();
/*ref mch = GetMainCharacter();
if( CheckAttribute(mch,"quest."+qname) )
{
if( CheckAttribute(mch,"quest."+qname+".win_condition") )
{*/
CompleteQuestName(qname);
/*QuestsCheck();
}
else
{
trace("WARNING! Not win condition for quest " + qname);
}
}
else
{
trace("WARNING! Not found quest name: " + qname);
}*/
}
// NK <--
<b>The next change is to line 83: in b13_beta1 this line has been added and commented out:</b>
// US version:
<b>Line 102: in b13_beta1 this is changed to:</b>
else return false; //*/
<b>Line 146: in b13_beta1 this is changed to:</b>
PlayStereoSound("notebook_note");
<b>Line 154: in b13_beta1 this is changed to:</b>
PlayStereoSound("notebook_note");
<b>Line 156/7 has a large addition inserted in b13_beta1:</b>
// end US version*/
// 1.03 version
// needs different DLL. 05-05-04
/*bool CheckQuestRecord(aref qref,string textId)
{
if( CheckAttribute(qref,"Text") )
{
string str_date, str_text;
string lastText = qref.Text;
int nEnd, nSize;
nSize = strlen(lastText);
while(nSize>0)
{
nEnd = findSubStr(lastText,",",0);
if(nEnd<0) {
GetDateAndText(lastText,&str_date,&str_text);
nSize = 0;
} else {
nSize -= nEnd+1;
GetDateAndText(strcut(lastText,0,nEnd),&str_date,&str_text);
}
if(textId==str_text) return true;
if(nSize>0) {lastText = strcut(lastText,nEnd+1,nSize);}
}
}
return false;
//bool retVal = SendMessage(&GameInterface,"las",MSG_INTERFACE_CHECK_QRECORD,qref,textId);
//return retVal;
}
void GetDateAndText(string srcText, ref dstDate, ref dstText)
{
dstDate = "";
dstText = "";
if(srcText=="") return;
dstText = srcText;
if( strcut(srcText,0,0)!="@" ) return;
int nEnd = findSubStr(srcText,"@",1);
if(nEnd<0) return;
dstDate = strcut(srcText,1,nEnd-1);
int nSrcSize = strlen(srcText);
if(nEnd<nSrcSize-1) dstText = strcut(srcText,nEnd+1,nSrcSize-1);
}
void SetQuestHeader(string idQuest)
{
ref mainCh = GetMainCharacter();
if(!CheckAttribute(mainCh,"QuestInfo."+idQuest))
{
object refNewAttr;
refNewAttr.(idQuest).Complete = false;
refNewAttr.(idQuest).Text = "";
aref refOldAttr; makearef(refOldAttr,mainCh.QuestInfo);
string qName;
aref curQ, newQ,oldQ;
for(int i=0; i<GetAttributesNum(refOldAttr); i++)
{
curQ = GetAttributeN(refOldAttr,i);
qName = GetAttributeName(curQ);
refNewAttr.(qName) = "";
makearef(newQ,refNewAttr.(qName));
makearef(oldQ,refOldAttr.(qName));
CopyAttributes(newQ,oldQ);
}
CopyAttributes(refOldAttr,&refNewAttr);
}
}
// 1.03 patch this and its use below
string GetQuestBookData()
{
return makeint(GetHour())+":"+makeint(GetMinute()) + " "+GetDataDay()+"."+GetDataMonth()+"."+GetDataYear();
}
void AddQuestRecord(string idQuest,string idText)
{
if(CheckAttribute(GetMainCharacter(),"QuestInfo."+idQuest)==false)
{
SetQuestHeader(idQuest);
}
ref mc = GetMainCharacter();
if( CheckAttribute(mc,"QuestInfo."+idQuest+".Text") && mc.QuestInfo.(idQuest).Text!="")
{
aref questRef; makearef(questRef,mc.QuestInfo.(idQuest));
if( !CheckQuestRecord(questRef,idText) )
{
string tmpStr = "@"+GetQuestBookData()+"@"+idText+","+questRef.Text;
questRef.Text = tmpStr;
Log_SetStringToLog(XI_ConvertString("Logbook Update"));
AddMsgToCharacter(mc,MSGICON_LOGBOOK);
PlayStereoSound("notebook");
}
}
else
{
mc.QuestInfo.(idQuest).Text="@"+GetQuestBookData()+"@"+idText;
Log_SetStringToLog(XI_ConvertString("Logbook Update"));
AddMsgToCharacter(mc,MSGICON_LOGBOOK);
PlayStereoSound("notebook");
}
}*/
<b>Line 264 has been changed: In b13_beta1 its now:</b>
if(postWaitYear+postWaitMonth+postWaitDay>0) { AddDataToCurrent(postWaitYear,postWaitMonth,postWaitDay, true); } // NK 05-04-17 give adddata a bool
<b>Line 716 has this new line inserted in the b13_beta1 version:</b>
pchar.basetime = 1.0; // NK basetime 05-04-25
<b>Line 971 has been changed in the b13_beta1 version to:</b>
SendMessage(&fader, "ls",FADER_PICTURE,"loading\" + LanguageGetLanguage() + "\sea.tga");
<b>Line 1013 has been changed in the b13_beta1 version to:</b>
for(int i=0; i<CHARACTERS_QUANTITY; i++) // NK 05-04-05 use CHARACTERS_QUANTITY
<b>Line 1087(the end of the 12.1(full) version) has this chunk of commented out code added in the b13_beta1 version:</b>
// KK -->
bool StoreOfficers(string idCharacter)
{
int idxCh = GetCharacterIndex(idCharacter);
if(idxCh==-1) return false;
ref refCh = GetCharacter(idxCh);
if(CheckAttribute(refCh,"Fellows.Old.Officers")) return false;
string sTmp;
aref arTmp;
int i, indx;
makearef(arTmp,refCh.Fellows.Old.Officers);
for(i=1; i<4; i++)
{
indx = GetOfficersIndex(refCh,i);
if(indx==-1) continue;
sTmp = "id"+i;
arTmp.(sTmp) = indx;
RemoveOfficersIndex(refCh, indx);
ChangeCharacterAddress(&characters[indx], "none", "");
}
return true;
}
bool RestoreOfficers(string idCharacter)
{
int idxCh = GetCharacterIndex(idCharacter);
if(idxCh==-1) return false;
ref refCh = GetCharacter(idxCh);
if(!CheckAttribute(refCh,"Fellows.Old.Officers")) return false;
int i,idx;
aref arTmp,arCur;
makearef(arTmp,refCh.Fellows.Old.Officers);
for(i=0; i<GetAttributesNum(arTmp); i++)
{
arCur = GetAttributeN(arTmp,i);
idx = sti(GetAttributeValue(arCur));
if(idx==-1) continue;
SetOfficersIndex(refCh,-1,idx);
}
DeleteAttribute(refCh,"Fellows.Old.Officers");
if (!CheckAttribute(refCh,"Fellows.Old.Passengers"))
DeleteAttribute(refCh,"Fellows.Old");
return true;
}
bool GiveShipCommandToOfficer(string idCharacter, int idx)
{
int idxCh = GetCharacterIndex(idCharacter);
if(idxCh==-1) return false;
ref refCh = GetCharacter(idxCh);
if(idx==-1) return false;
if(CheckAttribute(refCh,"Fellows.Old.Passengers")) return false;
string sTmp;
aref arTmp;
makearef(arTmp,refCh.Fellows.Old.Passengers);
sTmp = "id0";
arTmp.(sTmp) = idx;
RemovePassenger(refCh,GetCharacter(idx));
ChangeCharacterAddress(GetCharacter(idx),"none","");
return true;
}
bool TakeShipCommandFromOfficer(string idCharacter)
{
int idxCh = GetCharacterIndex(idCharacter);
if(idxCh==-1) return false;
ref refCh = GetCharacter(idxCh);
if(!CheckAttribute(refCh,"Fellows.Old.Passengers")) return false;
int idx;
aref arTmp,arCur;
makearef(arTmp,refCh.Fellows.Old.Passengers);
arCur = GetAttributeN(arTmp,0);
idx = sti(GetAttributeValue(arCur));
AddPassenger(refCh,GetCharacter(idx),false);
DeleteAttribute(refCh,"Fellows.Old.Passengers");
if (!CheckAttribute(refCh,"Fellows.Old.Officers"))
DeleteAttribute(refCh,"Fellows.Old");
return true;
}
// <-- KK
And thats all the differences in the Quests.c files between 12.1(full) that doesnt lock me out of greenford and the b13_beta1 that does. any ideas what could be causing this effect?
I know there are other quest related files to look at, and i'll get around to those if someone would point me in the right directions. Sadly i have no idea(very little at most) what the code means, but i can take note of the changes from the version without this bug(12.1(full)) and our current b13 where it seems to have been introduced. I have a hunch that the other kind of 'locked out' bug effects(like the not entering worldmap after capturing the Osieau, and other locked out of location bugs) will probably all be part of the same problem. If we can find it and fix it it would be great!