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:
68
lib/map.cpp
68
lib/map.cpp
@ -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)
|
||||
|
Reference in New Issue
Block a user