• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Request new function at Quests (cpp)

Dankoo

Active Member
Joined
Sep 4, 2010
Messages
1,007
Reaction score
27
It would be awesome if we could modify sources so quests.xml work like this?

LUA:
<mission name="Paw and Fur: Hydras" storageid="14021" startvalue="0" endvalue="2000">
			<missionstate fromid="0" toid "1999" description="You already hunted |STORAGE:14021|/2000 hydras."/>
			<missionstate id="2000" description="You killed 2000 hydras. Report back to Grizzly Adams."/>
			<missionstate id="2001" description="You killed 2000 hydras. You can restart that task."/>
		</mission>

Fromid, toid... like actions.xml, know?

Here's the source code for Quests.xml:

[cpp]bool Quests::parseQuestNode(xmlNodePtr p, bool checkDuplicate)
{
if(xmlStrcmp(p->name, (const xmlChar*)"quest"))
return false;

int32_t intValue;
std::string strValue;

uint32_t id = m_lastId;
if(readXMLInteger(p, "id", intValue) && id > 0)
{
id = intValue;
if(id > m_lastId)
m_lastId = id;
}[/cpp]

And here are some examples of script that uses fromid toid script:

actions.xml
[cpp]else if(readXMLString(p, "fromid", strValue) && readXMLString(p, "toid", endValue))
{
IntegerVec intVector = vectorAtoi(explodeString(strValue, ";")), endVector = vectorAtoi(explodeString(endValue, ";"));
if(intVector[0] && endVector[0] && intVector.size() == endVector.size())
{
int32_t tmp = 0;
for(size_t i = 0, size = intVector.size(); i < size; ++i)
{
tmp = intVector;
while(intVector <= endVector)
{
if(useItemMap.find(intVector) != useItemMap.end())
{
if(!override)
{
std::clog << "[Warning - Actions::registerEvent] Duplicate registered item with id: " << intVector <<
", in fromid: " << tmp << " and toid: " << endVector << std::endl;
intVector++;
continue;
}
else
delete useItemMap[intVector];
}

useItemMap[intVector++] = new Action(action);
}
}
}
else
std::clog << "[Warning - Actions::registerEvent] Malformed entry (from item: \"" << strValue <<
"\", to item: \"" << endValue << "\")" << std::endl;
}[/cpp]

movements.xml
[cpp]if(readXMLString(p, "fromid", strValue) && readXMLString(p, "toid", endStrValue))
{
intVector = vectorAtoi(explodeString(strValue, ";"));
endIntVector = vectorAtoi(explodeString(endStrValue, ";"));
if(intVector[0] && endIntVector[0] && intVector.size() == endIntVector.size())
{
for(size_t i = 0, size = intVector.size(); i < size; ++i)
{
bool equip = moveEvent->getEventType() == MOVE_EVENT_EQUIP;
addEvent(moveEvent, intVector, m_itemIdMap, override);
if(equip)
{
ItemType& it = Item::items.getItemType(intVector);
it.wieldInfo = moveEvent->getWieldInfo();
it.minReqLevel = moveEvent->getReqLevel();
it.minReqMagicLevel = moveEvent->getReqMagLv();
it.vocationString = moveEvent->getVocationString();
}

while(intVector < endIntVector)
{
addEvent(new MoveEvent(moveEvent), ++intVector, m_itemIdMap, override);
if(equip)
{
ItemType& tit = Item::items.getItemType(intVector);
tit.wieldInfo = moveEvent->getWieldInfo();
tit.minReqLevel = moveEvent->getReqLevel();
tit.minReqMagicLevel = moveEvent->getReqMagLv();
tit.vocationString = moveEvent->getVocationString();
}
}
}
}
else
std::clog << "[Warning - MoveEvents::registerEvent] Malformed entry (from item: \"" << strValue << "\", to item: \"" << endStrValue << "\")" << std::endl;
}[/cpp]

items.xml
[cpp]if(readXMLInteger(itemNode, "id", intValue))
parseItemNode(itemNode, intValue);
else if(readXMLString(itemNode, "fromid", strValue) && readXMLString(itemNode, "toid", endValue))
{
intVector = vectorAtoi(explodeString(strValue, ";"));
endVector = vectorAtoi(explodeString(endValue, ";"));
if(intVector[0] && endVector[0] && intVector.size() == endVector.size())
{
size_t size = intVector.size();
for(size_t i = 0; i < size; ++i)
{
parseItemNode(itemNode, intVector);
while(intVector < endVector)
parseItemNode(itemNode, ++intVector);
}
}
else
std::clog << "[Warning - Items::loadFromXml] Malformed entry (from: \"" << strValue << "\", to: \"" << endValue << "\")" << std::endl;
}
else
std::clog << "[Warning - Items::loadFromXml] No itemid found" << std::endl;
}[/cpp]

Can someone merge some of the functions of these scripts so quests.xml works with fromid toid?

Thanks in advance. ^_^
 
no. use a different storage for storing total kills, something like 14121, or a different storage for showing missions in quest log
 
That's a possibility, but it's better do the right thing, we can also apply this fix to be implemented in TFS project and stuff, to come with the new revs... This is a gap in quest log that must be filled, and don't seems very hard to do, for someone who have the cpp knowledge... I always help ppl with what I know in lua and stuff, cpp I'm still crawling

PS: 666th post :s
 
*-*

Manatee-Face-bump.gif
 
Last edited:
It was implemented in some new revision of TFS 0.4.

Ok, it seems REV 4289 made by Dalkon with comment "Bug fix"

He changed quests.cpp, but I don't think he implemented this feature, I can't find evidences of it on quests.cpp

I think he basically implemented "startstorageid", giving it the same atributes as "storageid" :P
 
Back
Top