diff options
author | Clyne Sullivan <tullivan99@gmail.com> | 2016-03-29 08:48:52 -0400 |
---|---|---|
committer | Clyne Sullivan <tullivan99@gmail.com> | 2016-03-29 08:48:52 -0400 |
commit | a9a9777190086bd2ce2aa54e20a1101509614463 (patch) | |
tree | dfd754e45f2d8fc4cf955470681c39c502cde1b4 /src/quest.cpp | |
parent | 82c178d797b9a23c31d7dad1cc8cac29d27c6eb1 (diff) |
began reworking indoors
Diffstat (limited to 'src/quest.cpp')
-rw-r--r-- | src/quest.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/quest.cpp b/src/quest.cpp new file mode 100644 index 0000000..ba35c40 --- /dev/null +++ b/src/quest.cpp @@ -0,0 +1,69 @@ +#include <algorithm>
+
+#include <quest.h>
+#include <entities.h>
+
+extern Player *player;
+
+int QuestHandler::assign(std::string title,std::string desc,std::string req){
+ Quest tmp;
+ char *tok;
+
+ tmp.title = title;
+ tmp.desc = desc;
+
+ tok = strtok( &req[0], "\n\r\t," );
+ tmp.need.emplace_back( "", 0 );
+
+ while ( tok ) {
+ if ( !tmp.need.back().first.empty() ) {
+ tmp.need.back().second = atoi( tok );
+ tmp.need.emplace_back( "", 0 );
+ } else
+ tmp.need.back().first = tok;
+
+ tok = strtok( NULL, "\n\r\t," );
+ }
+
+ tmp.need.pop_back();
+ current.push_back( tmp );
+
+ return 0;
+}
+
+int QuestHandler::drop(std::string title){
+ current.erase( std::remove_if( current.begin(),
+ current.end(),
+ [&](Quest q){ return q.title == title; }),
+ current.end() );
+
+ return 0;
+}
+
+int QuestHandler::finish(std::string t){
+ for ( auto c = current.begin(); c != current.end(); c++ ) {
+ if ( (*c).title == t ) {
+ for ( auto &n : (*c).need ) {
+ if ( player->inv->hasItem( n.first ) < n.second )
+ return 0;
+ }
+
+ for ( auto &n : (*c).need )
+ player->inv->takeItem( n.first, n.second );
+
+ current.erase( c );
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+bool QuestHandler::hasQuest(std::string t){
+ for ( auto &c : current ) {
+ if ( c.title == t )
+ return true;
+ }
+
+ return false;
+}
|