Bem vim trazer essa função aqui pra vocês é bem util pra quem está afim de criar um otserver completo!
Vá até quests.cpp e procure por.
std::string Mission::getDescription(Player* player)
Depois de achar, substitua por isso.
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."; }
Pronto depois só compilar.
Aqui está um exemplo de como adicionar novas quests no arquivo.xml
<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>
Creditos:
Beeki ( por trazer )
QuaS ( OTland )
@Edit
testei somente no tfs 0.4 e no 0.3.6 pl1