1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-06-17 00:07:41 +02:00

Quests will now be handled as object member instead of inheritance. Enabled quest objects for AI.

This commit is contained in:
DjWarmonger
2012-09-16 13:34:01 +00:00
parent 5118386cb4
commit 554a98dbd7
7 changed files with 134 additions and 102 deletions

View File

@ -567,18 +567,18 @@ int Mapa::loadSeerHut( const ui8 * bufor, int i, CGObjectInstance *& nobj )
int artID = bufor[i]; ++i;
if (artID != 255) //not none quest
{
hut->m5arts.push_back (artID);
hut->missionType = CQuest::MISSION_ART;
hut->quest.m5arts.push_back (artID);
hut->quest.missionType = CQuest::MISSION_ART;
}
else
{
hut->missionType = CQuest::MISSION_NONE; //no mission
hut->quest.missionType = CQuest::MISSION_NONE; //no mission
}
hut->lastDay = -1; //no timeout
hut->isCustomFirst = hut->isCustomNext = hut->isCustomComplete = false;
hut->quest.lastDay = -1; //no timeout
hut->quest.isCustomFirst = hut->quest.isCustomNext = hut->quest.isCustomComplete = false;
}
if (hut->missionType)
if (hut->quest.missionType)
{
ui8 rewardType = bufor[i]; ++i;
hut->rewardType = rewardType;
@ -1461,7 +1461,7 @@ void Mapa::readObjects( const ui8 * bufor, int &i)
case 83: //seer's hut
{
i = loadSeerHut(bufor, i, nobj);
addQuest (dynamic_cast<CQuest *>(nobj));
addQuest (dynamic_cast<IQuestObject *>(nobj));
break;
}
case 113: //witch hut
@ -1722,7 +1722,7 @@ void Mapa::readObjects( const ui8 * bufor, int &i)
CGQuestGuard *guard = new CGQuestGuard();
nobj = guard;
loadQuest(guard, bufor, i);
addQuest (dynamic_cast <CQuest *>(guard));
addQuest (dynamic_cast <IQuestObject *>(guard));
break;
}
case 28: //faerie ring
@ -1803,13 +1803,13 @@ void Mapa::readObjects( const ui8 * bufor, int &i)
case 9: //Border Guard
{
nobj = new CGBorderGuard();
addQuest (dynamic_cast<CQuest *>(nobj));
addQuest (dynamic_cast<IQuestObject *>(nobj));
break;
}
case 212: //Border Gate
{
nobj = new CGBorderGate();
addQuest (dynamic_cast<CQuest *>(nobj));
addQuest (dynamic_cast<IQuestObject *>(nobj));
break;
}
case 27: case 37: //Eye and Hut of Magi
@ -1945,20 +1945,20 @@ bool Mapa::isInTheMap(const int3 &pos) const
else return true;
}
void Mapa::loadQuest(CQuest * guard, const ui8 * bufor, int & i)
void Mapa::loadQuest(IQuestObject * guard, const ui8 * bufor, int & i)
{
guard->missionType = bufor[i]; ++i;
guard->quest.missionType = bufor[i]; ++i;
//int len1, len2, len3;
switch(guard->missionType)
switch(guard->quest.missionType)
{
case 0:
return;
case 2:
{
guard->m2stats.resize(4);
guard->quest.m2stats.resize(4);
for(int x=0; x<4; x++)
{
guard->m2stats[x] = bufor[i++];
guard->quest.m2stats[x] = bufor[i++];
}
}
break;
@ -1966,7 +1966,7 @@ void Mapa::loadQuest(CQuest * guard, const ui8 * bufor, int & i)
case 3:
case 4:
{
guard->m13489val = read_le_u32(bufor + i); i+=4;
guard->quest.m13489val = read_le_u32(bufor + i); i+=4;
break;
}
case 5:
@ -1975,7 +1975,7 @@ void Mapa::loadQuest(CQuest * guard, const ui8 * bufor, int & i)
for(int yy=0; yy<artNumber; ++yy)
{
int artid = read_le_u16(bufor + i); i+=2;
guard->m5arts.push_back(artid);
guard->quest.m5arts.push_back(artid);
allowedArtifact[artid] = false; //these are unavailable for random generation
}
break;
@ -1983,20 +1983,20 @@ void Mapa::loadQuest(CQuest * guard, const ui8 * bufor, int & i)
case 6:
{
int typeNumber = bufor[i]; ++i;
guard->m6creatures.resize(typeNumber);
guard->quest.m6creatures.resize(typeNumber);
for(int hh=0; hh<typeNumber; ++hh)
{
guard->m6creatures[hh].type = VLC->creh->creatures[read_le_u16(bufor + i)]; i+=2;
guard->m6creatures[hh].count = read_le_u16(bufor + i); i+=2;
guard->quest.m6creatures[hh].type = VLC->creh->creatures[read_le_u16(bufor + i)]; i+=2;
guard->quest.m6creatures[hh].count = read_le_u16(bufor + i); i+=2;
}
break;
}
case 7:
{
guard->m7resources.resize(7);
guard->quest.m7resources.resize(7);
for(int x=0; x<7; x++)
{
guard->m7resources[x] = read_le_u32(bufor + i);
guard->quest.m7resources[x] = read_le_u32(bufor + i);
i+=4;
}
break;
@ -2004,7 +2004,7 @@ void Mapa::loadQuest(CQuest * guard, const ui8 * bufor, int & i)
case 8:
case 9:
{
guard->m13489val = bufor[i]; ++i;
guard->quest.m13489val = bufor[i]; ++i;
break;
}
}
@ -2013,18 +2013,18 @@ void Mapa::loadQuest(CQuest * guard, const ui8 * bufor, int & i)
int limit = read_le_u32(bufor + i); i+=4;
if(limit == ((int)0xffffffff))
{
guard->lastDay = -1;
guard->quest.lastDay = -1;
}
else
{
guard->lastDay = limit;
guard->quest.lastDay = limit;
}
guard->firstVisitText = readString(bufor,i);
guard->nextVisitText = readString(bufor,i);
guard->completedText = readString(bufor,i);
guard->isCustomFirst = guard->firstVisitText.size() > 0;
guard->isCustomNext = guard->nextVisitText.size() > 0;
guard->isCustomComplete = guard->completedText.size() > 0;
guard->quest.firstVisitText = readString(bufor,i);
guard->quest.nextVisitText = readString(bufor,i);
guard->quest.completedText = readString(bufor,i);
guard->quest.isCustomFirst = guard->quest.firstVisitText.size() > 0;
guard->quest.isCustomNext = guard->quest.nextVisitText.size() > 0;
guard->quest.isCustomComplete = guard->quest.completedText.size() > 0;
}
TerrainTile & Mapa::getTile( const int3 & tile )
@ -2070,10 +2070,10 @@ void Mapa::addNewArtifactInstance( CArtifactInstance *art )
artInstances.push_back(art);
}
void Mapa::addQuest (CQuest *quest)
void Mapa::addQuest (IQuestObject *obj)
{
quest->qid = quests.size();
quests.push_back(quest);
obj->quest.qid = quests.size();
quests.push_back(&obj->quest);
}
bool Mapa::loadArtifactToSlot(CGHeroInstance *h, int slot, const ui8 * bufor, int &i)