• 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!

[C++] Quest Description

Xtr3m3

Member
Joined
May 14, 2009
Messages
131
Reaction score
11
Hi guys,

Please, look this:
https://github.com/otland/forgottenserver/blob/master/src/quests.cpp#L26-L65

It's possible to implements this code below?:
Code:
std::string Mission::getDescription(Player* player)
{
    std::string value;
    int32_t find_storage;
    player->getStorage(storageId, value);
    if(state.size())
    {
        std::string ret = state;
        while((find_storage=ret.find("|STORAGE:"))>-1)
        {
              int32_t parsing_storage = find_storage+9;
              std::string temp;
              while((int) ret[parsing_storage] != (int)'|')
              {
                   temp += ret[parsing_storage];
                   parsing_storage++;
              }
              parsing_storage -=find_storage-1;
              player->getStorage(atoi(temp.c_str()), temp);
              ret.replace(find_storage, parsing_storage, temp);
        }
        replaceString(ret, "|STATE|", value);
        return ret;
    }
    if(atoi(value.c_str()) >= endValue)
    {
        std::string ret = states.rbegin()->second;
        while((find_storage=ret.find("|STORAGE:"))>-1)
        {
              int32_t parsing_storage = find_storage+9;
              std::string temp;
              while((int) ret[parsing_storage] != (int)'|')
              {
                   temp += ret[parsing_storage];
                   parsing_storage++;
              }
              parsing_storage -=find_storage-1;
              player->getStorage(atoi(temp.c_str()), temp);
              ret.replace(find_storage, parsing_storage, temp);
        }
        replaceString(ret, "|STATE|", value);
        return ret;
    }
    for(int32_t i = endValue; i >= startValue; --i)
    {
        player->getStorage(storageId, value);
        if(atoi(value.c_str()) != i)
            continue;
        std::string ret = states[i - startValue];
        while((find_storage=ret.find("|STORAGE:"))>-1)
        {
              int32_t parsing_storage = find_storage+9;
              std::string temp;
              while((int) ret[parsing_storage] != (int)'|')
              {
                   temp += ret[parsing_storage];
                   parsing_storage++;
              }
              parsing_storage -=find_storage-1;
              player->getStorage(atoi(temp.c_str()), temp);
              ret.replace(find_storage, parsing_storage, temp);
        }
        replaceString(ret, "|STATE|", value);
        return ret;
    }
    return "Couldn't retrieve any mission description, please report to a gamemaster.";
}

Why?
With this implementation is possivel using differents storages for missions, example:
Code:
<mission name="The head of Kiper" storageid="1001" startvalue="1" endvalue="3">
    <missionstate id="0" description="Kill Rotworms to summon a Kiper!! You've killed already |STORAGE:1002|/50 Rotworms and |STORAGE:1500|/2 Carrion Rotworms."/>
    <missionstate id="1" description="Give his head to Talaturen!"/>
    <missionstate id="2" description="Take the medal you got from Talaturen to Ruly!"/>
</mission>

Thanks a lot.
 
Last edited:
Back
Top