From: Anders R. <ma...@us...> - 2006-02-03 22:52:14
|
Update of /cvsroot/planeshift/planeshift/src/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21128/src/server Modified Files: questmanager.cpp Log Message: - Added command "NoRepeat" and option to substep command "... NoRepeat" to quest scripts. By using NoRepeat every response in that substep will be protected agains being repeated. This should be applied to quest steps that give users stuff. Index: questmanager.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/questmanager.cpp,v retrieving revision 1.82 retrieving revision 1.83 diff -C2 -d -r1.82 -r1.83 *** questmanager.cpp 27 Jan 2006 18:17:50 -0000 1.82 --- questmanager.cpp 3 Feb 2006 22:52:06 -0000 1.83 *************** *** 103,114 **** int last_response_id=-1,next_to_last_response_id=-1; size_t which_trigger=0; ! int step_count=0; csString current_npc; csString response_text,error_text; NpcResponse *last_response,*error_response; bool quest_assigned_already = false; ! csString requireop; psQuest *mainQuest = CacheManager::GetSingleton().GetQuestByID(quest_id); ! psQuest *quest = mainQuest; --- 103,115 ---- int last_response_id=-1,next_to_last_response_id=-1; size_t which_trigger=0; ! int step_count=1; // Main quest is step 1 csString current_npc; csString response_text,error_text; NpcResponse *last_response,*error_response; bool quest_assigned_already = false; ! csString response_requireop; // Accumulate prerequisites for next response ! csString substep_requireop; // Accumulate prerequisites for current substep psQuest *mainQuest = CacheManager::GetSingleton().GetQuestByID(quest_id); ! psQuest *quest = mainQuest; // Substep is main step until substep is defined. *************** *** 176,180 **** { current_npc = npc_name; - // NO MORE: step_count++; // Switching NPCs is how the quest substep changes. next_to_last_response_id = last_response_id = -1; // When you switch NPCs, the prior responses must be reset also. } --- 177,180 ---- *************** *** 209,212 **** --- 209,220 ---- // First is the quest needed to be assigned or not csString op = "<pre>"; + csString post = "</pre>"; + + if (substep_requireop || response_requireop) + { + op.Append("<and>"); + post = "</and></pre>"; + } + if (quest_assigned_already) { *************** *** 220,224 **** op.AppendFmt("<not><assigned quest=\"%s\" /></not>", mainQuest->GetName()); } ! op.Append("</pre>"); // Will insert the new op in and new "and" list if not pressent allready in the script. --- 228,245 ---- op.AppendFmt("<not><assigned quest=\"%s\" /></not>", mainQuest->GetName()); } ! ! if (substep_requireop) { ! op.Append(substep_requireop); ! } ! ! if (response_requireop) { ! op.Append(response_requireop); ! ! // Response require op only valid for one response. ! response_requireop.Free(); ! } ! ! op.Append(post); ! // Will insert the new op in and new "and" list if not pressent allready in the script. *************** *** 233,257 **** } - - // Add require step if present - if (requireop) { - op = "<pre>"; - op.Append(requireop); - op.Append("</pre>"); - - // Will insert the new op in and new "and" list if not pressent allready in the script. - if (!last_response->ParsePrerequisiteScript(op,false)) // Append at end of list - { - Error2("Could not append '%s' to prerequisite script!",op.GetData()); - return false; - } - else - { - Debug2( LOG_QUESTS, "Parsed %s successfully.",op.GetData() ); - } - - // Require step only valid for one response. - requireop.Free(); - } } else --- 254,257 ---- *************** *** 304,324 **** } } ! else // command { ! Debug2( LOG_QUESTS, "Got command '%s'", block.GetData() ); ! if (block == "...") // Reset priors and changes substep ! { ! // generate a sub step quest for the next block ! csString newquestname; ! newquestname.Format("%s Step %d",mainQuest->GetName(),step_count+2); ! Debug2( LOG_QUESTS, "Quest <%s> is getting added dynamically.",newquestname.GetData()); ! quest = CacheManager::GetSingleton().AddDynamicQuest(newquestname, mainQuest, step_count+2); ! quest_id = quest->GetID(); ! next_to_last_response_id = last_response_id = -1; ! step_count++; // increment substep count ! continue; } csString op; --- 304,332 ---- } } ! else if (!strncmp(block,"...",3)) // New substep. Syntax: "... [NoRepeat]" { ! WordArray words(block); ! // generate a sub step quest for the next block ! step_count++; // increment substep count ! csString newquestname; ! newquestname.Format("%s Step %d",mainQuest->GetName(),step_count); ! Debug2( LOG_QUESTS, "Quest <%s> is getting added dynamically.",newquestname.GetData()); ! quest = CacheManager::GetSingleton().AddDynamicQuest(newquestname, mainQuest, step_count); ! quest_id = quest->GetID(); ! ! next_to_last_response_id = last_response_id = -1; ! substep_requireop.Free(); ! // Check if this is a non repeatable substep. ! // Note: NoRepeat can either be an option to ... or a separate command. ! if (words[1] == "NoRepeat") ! { ! substep_requireop.AppendFmt("<not><completed quest=\"%s\" /></not>", quest->GetName() ); } + } + else // command + { + Debug2( LOG_QUESTS, "Got command '%s'", block.GetData() ); csString op; *************** *** 330,334 **** csArray<csString> commands; ! // Loop through and find all dot separated commands. size_t dot = block.Find("."); size_t l = block.Length(); --- 338,342 ---- csArray<csString> commands; ! // Loop through and find all dot separated commands. size_t dot = block.Find("."); size_t l = block.Length(); *************** *** 415,419 **** else if (!strncmp(block,"Require completion of",21)) { csString questname = block.Slice(21,block.Length()-1).Trim(); ! requireop.AppendFmt("<completed quest=\"%s\" />", questname.GetData() ); } else if (!strncmp(block,"Run script",10)) { --- 423,430 ---- else if (!strncmp(block,"Require completion of",21)) { csString questname = block.Slice(21,block.Length()-1).Trim(); ! response_requireop.AppendFmt("<completed quest=\"%s\" />", questname.GetData() ); ! } ! else if (!strncmp(block,"NoRepeat",21)) { ! substep_requireop.AppendFmt("<not><completed quest=\"%s\" /></not>", quest->GetName() ); } else if (!strncmp(block,"Run script",10)) { |