diff options
author | Clyne Sullivan <tullivan99@gmail.com> | 2016-02-10 08:48:49 -0500 |
---|---|---|
committer | Clyne Sullivan <tullivan99@gmail.com> | 2016-02-10 08:48:49 -0500 |
commit | 3033594b89f23e65b6152daa6610f991307f2f67 (patch) | |
tree | 920a7c1b35946210683cdd1146cd0afeb7e24b7d /src/Quest.cpp | |
parent | 1382f79d57060dc38f6c45fd4fc865e0e565f90b (diff) |
quests, inventory good
Diffstat (limited to 'src/Quest.cpp')
-rw-r--r-- | src/Quest.cpp | 54 |
1 files changed, 46 insertions, 8 deletions
diff --git a/src/Quest.cpp b/src/Quest.cpp index ac18021..535afc5 100644 --- a/src/Quest.cpp +++ b/src/Quest.cpp @@ -4,21 +4,59 @@ extern Player *player;
-int QuestHandler::assign(const char *t){
- return strcmp(t,"h");
+int QuestHandler::assign(std::string title,std::string desc,std::string req){
+ Quest tmp;
+ char *tok;
+
+ tmp.title = title;
+ tmp.desc = desc;
+
+ std::unique_ptr<char[]> buf (new char[req.size()]);
+
+ strcpy(buf.get(),req.c_str());
+ tok = strtok(buf.get(),"\n\r\t,");
+ tmp.need.push_back({"\0",0});
+
+ while(tok){
+ if(tmp.need.back().name != "\0"){
+ tmp.need.back().n = atoi(tok);
+ tmp.need.push_back({"\0",0});
+ }else
+ tmp.need.back().name = tok;
+
+ tok = strtok(NULL,"\n\r\t,");
+ }
+
+ tmp.need.pop_back();
+ current.push_back(tmp);
+
+ return 0;
}
-int QuestHandler::drop(const char *t){
- return strcmp(t,"h");
+int QuestHandler::drop(std::string title){
+ for(unsigned int i=0;i<current.size();i++){
+ if(current[i].title == title){
+ current.erase(current.begin()+i);
+ return 0;
+ }
+ }
+ return -1;
}
int QuestHandler::finish(std::string t){
for(unsigned int i=0;i<current.size();i++){
if(current[i].title == t){
- if(!player->inv->takeItem(current[i].need.back(),1)){
- current.erase(current.begin()+i);
- return 1;
- }else return 0;
+ for(auto &n : current[i].need){
+ if(player->inv->hasItem(n.name) < n.n)
+ return 0;
+ }
+
+ for(auto &n : current[i].need){
+ player->inv->takeItem(n.name,n.n);
+ }
+
+ current.erase(current.begin()+i);
+ return 1;
}
}
return 0;
|