From: <wel...@us...> - 2009-02-09 20:02:50
|
Revision: 2999 http://planeshift.svn.sourceforge.net/planeshift/?rev=2999&view=rev Author: weltall2 Date: 2009-02-09 20:02:46 +0000 (Mon, 09 Feb 2009) Log Message: ----------- Added an advisor point quest prerequisite Modified Paths: -------------- trunk/src/server/bulkobjects/psquest.cpp trunk/src/server/bulkobjects/psquestprereqops.cpp trunk/src/server/bulkobjects/psquestprereqops.h Modified: trunk/src/server/bulkobjects/psquest.cpp =================================================================== --- trunk/src/server/bulkobjects/psquest.cpp 2009-02-09 20:00:50 UTC (rev 2998) +++ trunk/src/server/bulkobjects/psquest.cpp 2009-02-09 20:02:46 UTC (rev 2999) @@ -1,7 +1,7 @@ /* * psquest.cpp * -// * Copyright (C) 2003 Atomic Blue (in...@pl..., http://www.atomicblue.org) +// * Copyright (C) 2003 Atomic Blue (in...@pl..., http://www.atomicblue.org) * * * This program is free software; you can redistribute it and/or @@ -53,7 +53,7 @@ quest_lockout_time = 0; quest_last_activated = 0; prerequisite = NULL; - + active = true; } @@ -108,7 +108,7 @@ infinitePlayerLockout = false; player_lockout_time = lockout_time; } - + quest_lockout_time = row.GetInt("quest_lockout_time"); return true; @@ -127,7 +127,7 @@ while ( iter->HasNext() ) { csRef<iDocumentNode> node = iter->Next(); - + if ( node->GetType() != CS_NODE_ELEMENT ) continue; @@ -138,7 +138,7 @@ break; } - } + } else if ( strcmp( topNode->GetValue(), "completed" ) == 0 ) { if (topNode->GetAttributeValue("quest")) @@ -204,29 +204,29 @@ topNode->GetAttributeValue("quest")); return false; } - } + } else if ( strcmp( topNode->GetValue(), "and" ) == 0 ) { csRef<psQuestPrereqOpList> list; list.AttachNew(new psQuestPrereqOpAnd()); prerequisite = list; - + csRef<iDocumentNodeIterator> iter = topNode->GetNodes(); while ( iter->HasNext() ) { csRef<iDocumentNode> node = iter->Next(); - + if (node->GetType() != CS_NODE_ELEMENT) continue; csRef<psQuestPrereqOp> op; - + if (!LoadPrerequisiteXML(node, self, op)) { return false; } - + if (op) { list->Push(op); @@ -240,23 +240,23 @@ csRef<psQuestPrereqOpList> list; list.AttachNew(new psQuestPrereqOpOr()); prerequisite = list; - + csRef<iDocumentNodeIterator> iter = topNode->GetNodes(); while ( iter->HasNext() ) { csRef<iDocumentNode> node = iter->Next(); - + if ( node->GetType() != CS_NODE_ELEMENT ) continue; csRef<psQuestPrereqOp> op; - + if (!LoadPrerequisiteXML(node, self, op)) { return false; } - + if (op) { list->Push(op); @@ -270,23 +270,23 @@ csRef<psQuestPrereqOpList> list; list.AttachNew(new psQuestPrereqOpXor()); prerequisite = list; - + csRef<iDocumentNodeIterator> iter = topNode->GetNodes(); while ( iter->HasNext() ) { csRef<iDocumentNode> node = iter->Next(); - + if ( node->GetType() != CS_NODE_ELEMENT ) continue; csRef<psQuestPrereqOp> op; - + if (!LoadPrerequisiteXML(node, self, op)) { return false; } - + if (op) { list->Push(op); @@ -298,26 +298,26 @@ else if ( strcmp( topNode->GetValue(), "require" ) == 0 ) { int min = -1,max = -1; - if (topNode->GetAttributeValue("min")) + if (topNode->GetAttributeValue("min")) min = topNode->GetAttributeValueAsInt("min"); - if (topNode->GetAttributeValue("max")) + if (topNode->GetAttributeValue("max")) max = topNode->GetAttributeValueAsInt("max"); csRef<psQuestPrereqOpList> list; list.AttachNew(new psQuestPrereqOpRequire(min,max)); prerequisite = list; - + csRef<iDocumentNodeIterator> iter = topNode->GetNodes(); while ( iter->HasNext() ) { csRef<iDocumentNode> node = iter->Next(); - + if ( node->GetType() != CS_NODE_ELEMENT ) continue; csRef<psQuestPrereqOp> op; - + if (!LoadPrerequisiteXML(node, self, op)) { return false; @@ -336,7 +336,7 @@ Error1("No name given for faction prerequisite operation"); return false; } - + Faction * faction = CacheManager::GetSingleton().GetFaction(name); if (!faction) { @@ -359,7 +359,7 @@ Error1("No name given for activemagic prerequisite operation"); return false; } - + prerequisite.AttachNew(new psQuestPrereqOpActiveMagic(name)); } else if ( strcmp( topNode->GetValue(), "race" ) == 0 ) @@ -370,7 +370,7 @@ Error1("No race name given for race prerequisite operation"); return false; } - + prerequisite.AttachNew(new psQuestPrereqOpRace(name)); } else if ( strcmp( topNode->GetValue(), "gender" ) == 0 ) @@ -381,7 +381,7 @@ Error1("No type given for gender prerequisite operation"); return false; } - + prerequisite.AttachNew(new psQuestPrereqOpGender(type)); } else if ( strcmp( topNode->GetValue(), "guild" ) == 0 ) @@ -392,9 +392,25 @@ Error1("No type given for guild prerequisite operation"); return false; } - + prerequisite.AttachNew(new psQuestPrereqOpGuild(type)); } + else if ( strcmp( topNode->GetValue(), "advisorpoints" ) == 0 ) + { + int min = topNode->GetAttributeValueAsInt("min"); + + int max = topNode->GetAttributeValueAsInt("max"); + + csString type = topNode->GetAttributeValue("type"); + + if (type.IsEmpty()) + { + Error1("No type given for advisorpoints prerequisite operation"); + return false; + } + + prerequisite.AttachNew(new psQuestPrereqOpAdvisorPoints(min,max,type)); + } else if ( strcmp( topNode->GetValue(), "timeofday" ) == 0 ) { int min = topNode->GetAttributeValueAsInt("min"); @@ -410,8 +426,14 @@ int max = topNode->GetAttributeValueAsInt("max"); - csString type = topNode->GetAttributeValue("type"); + csString type = topNode->GetAttributeValue("type"); + if (type.IsEmpty()) + { + Error1("No type given for onlinetime prerequisite operation"); + return false; + } + prerequisite.AttachNew(new psQuestPrereqOpTimeOnline(min,max,type)); } @@ -422,7 +444,7 @@ while ( iter->HasNext() ) { csRef<iDocumentNode> node = iter->Next(); - + if ( node->GetType() != CS_NODE_ELEMENT ) continue; @@ -437,7 +459,7 @@ prerequisite = list; break; } - } + } else if ( strcmp( topNode->GetValue(), "skill" ) == 0 ) { csString name = topNode->GetAttributeValue("name"); @@ -446,7 +468,7 @@ Error1("No name given for skill prerequisite operation"); return false; } - + psSkillInfo * skill = CacheManager::GetSingleton().GetSkillByName( name ); if (!skill) { @@ -496,7 +518,7 @@ Error3("Could not find <pre> tag in prerequisite script '%s' for quest '%s'!", script.GetData(),(self?self->GetName():"(null)")); return false; - } + } return true; } @@ -515,7 +537,7 @@ Error1("Failed to load prerequisite XML!"); return false; } - + if (prerequisite) { prerequisiteStr.Empty(); @@ -536,11 +558,11 @@ return false; } - if (op) + if (op) { return AddPrerequisite(op); } - + return false; } Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-09 20:00:50 UTC (rev 2998) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-09 20:02:46 UTC (rev 2999) @@ -1,7 +1,7 @@ /* * psquestprereqopts.cpp * - * Copyright (C) 2005 Atomic Blue (in...@pl..., http://www.atomicblue.org) + * Copyright (C) 2005 Atomic Blue (in...@pl..., http://www.atomicblue.org) * * * This program is free software; you can redistribute it and/or @@ -76,10 +76,10 @@ // Check if all prereqs are valid for (size_t i = 0; i < prereqlist.GetSize(); i++) { - if (!prereqlist[i]->Check(character)) + if (!prereqlist[i]->Check(character)) { return false; - } + } } return true; @@ -104,7 +104,7 @@ for (size_t i = 0; i < prereqlist.GetSize(); i++) { copy->Push(prereqlist[i]->Copy()); - } + } return csPtr<psQuestPrereqOp>(copy); } @@ -119,10 +119,10 @@ // Check if any of the prereqs are valid for (size_t i = 0; i < prereqlist.GetSize(); i++) { - if (prereqlist[i]->Check(character)) + if (prereqlist[i]->Check(character)) { return true; - } + } } return false; @@ -147,7 +147,7 @@ for (size_t i = 0; i < prereqlist.GetSize(); i++) { copy->Push(prereqlist[i]->Copy()); - } + } return csPtr<psQuestPrereqOp>(copy); } @@ -169,12 +169,12 @@ int count=0; for (size_t i = 0; i < prereqlist.GetSize(); i++) { - if (prereqlist[i]->Check(character)) + if (prereqlist[i]->Check(character)) { count++; - } + } } - // Verify that the appropiate numbers of prereqs was counted. + // Verify that the appropiate numbers of prereqs was counted. return ((min == -1 || count >= min) && (max == -1 || count <= max)); } @@ -186,12 +186,12 @@ { script.AppendFmt(" min=\"%d\"",min); } - + if (max != -1) { script.AppendFmt(" max=\"%d\"",max); } - + script.Append(">"); for (size_t i = 0; i < prereqlist.GetSize(); i++) { @@ -208,7 +208,7 @@ for (size_t i = 0; i < prereqlist.GetSize(); i++) { copy->Push(prereqlist[i]->Copy()); - } + } return csPtr<psQuestPrereqOp>(copy); } @@ -230,7 +230,7 @@ if (prereqlist.GetSize()) { script.Append(prereqlist[0]->GetScriptOp()); - } + } script.Append("</not>"); return script; } @@ -265,7 +265,7 @@ csString psQuestPrereqOpQuestCompleted::GetScriptOp() { csString script; - + script.AppendFmt("<completed quest=\"%s\"/>",quest->GetName()); return script; @@ -296,7 +296,7 @@ csString psQuestPrereqOpQuestAssigned::GetScriptOp() { csString script; - + script.AppendFmt("<assigned quest=\"%s\"/>",quest->GetName()); return script; @@ -329,17 +329,17 @@ csString psQuestPrereqOpQuestCompletedCategory::GetScriptOp() { csString script; - + script.AppendFmt("<completed category=\"%s\"",category.GetDataSafe()); if (min != -1) { script.AppendFmt(" min=\"%d\"",min); } - + if (max != -1) { script.AppendFmt(" max=\"%d\"",max); - } + } script.Append("/>"); return script; @@ -361,17 +361,17 @@ return true; if(max) - { - // If value is max, make sure we're below it + { + // If value is max, make sure we're below it return !character->CheckFaction(faction,value); - } + } return character->CheckFaction(faction,value); } csString psQuestPrereqOpFaction::GetScriptOp() { csString script; - + script.AppendFmt("<faction name=\"%s\" value=\"%d\" max=\"%d\"/>",faction->name.GetData(),value,max); return script; @@ -395,14 +395,14 @@ if (character->GetActor()) { return character->GetActor()->IsMagicCategoryActive(activeMagic); - } + } return false; } csString psQuestPrereqOpActiveMagic::GetScriptOp() { csString script; - + script.Format("<activemagic name=\"%s\"/>", activeMagic.GetData()); return script; @@ -426,14 +426,14 @@ if (character->GetRaceInfo()) { return (character->GetRaceInfo()->GetRace() == race); - } + } return false; } csString psQuestPrereqOpRace::GetScriptOp() { csString script; - + script.Format("<race name=\"%s\"/>", race.GetData()); return script; @@ -457,14 +457,14 @@ if (character->GetRaceInfo()) { return (character->GetRaceInfo()->GetGender() == gender); - } + } return false; } csString psQuestPrereqOpGender::GetScriptOp() { csString script; - + script.Format("<gender type=\"%s\"/>", gender.GetData()); return script; @@ -504,7 +504,7 @@ csString psQuestPrereqOpGuild::GetScriptOp() { csString script; - + script.Format("<guild type=\"%s\"/>", guildtype.GetData()); return script; @@ -531,12 +531,13 @@ return (character->GetTotalOnlineTime() < maxTime); if(type == "both") return (character->GetTotalOnlineTime() > minTime && character->GetTotalOnlineTime() < maxTime); + return false; } csString psQuestPrereqOpTimeOnline::GetScriptOp() { csString script; - + script.Format("<onlinetime min=\"%d\" max=\"%d\" type=\"%s\"/>", minTime, maxTime, type.GetDataSafe()); return script; @@ -551,6 +552,45 @@ /////////////////////////////////////////////////////////////////////////////////////////// +bool psQuestPrereqOpAdvisorPoints::Check(psCharacter * character) +{ + //Requirements are always valid for quest testers + if(character->GetActor()) + { + if(character->GetActor()->questtester) + return true; + if(character->GetActor()->GetClient()) + { + if(type == "min") + return (character->GetActor()->GetClient()->GetAdvisorPoints() > minPoints); + if(type == "max") + return (character->GetActor()->GetClient()->GetAdvisorPoints() < maxPoints); + if(type == "both") + return (character->GetActor()->GetClient()->GetAdvisorPoints() > minPoints && + character->GetActor()->GetClient()->GetAdvisorPoints() < maxPoints); + } + } + return false; +} + +csString psQuestPrereqOpAdvisorPoints::GetScriptOp() +{ + csString script; + + script.Format("<advisorpoints min=\"%d\" max=\"%d\" type=\"%s\"/>", minPoints, maxPoints, type.GetDataSafe()); + + return script; +} + +csPtr<psQuestPrereqOp> psQuestPrereqOpAdvisorPoints::Copy() +{ + csRef<psQuestPrereqOpAdvisorPoints> copy; + copy.AttachNew(new psQuestPrereqOpAdvisorPoints(minPoints, maxPoints, type)); + return csPtr<psQuestPrereqOp>(copy); +} + +/////////////////////////////////////////////////////////////////////////////////////////// + bool psQuestPrereqOpTimeOfDay::Check(psCharacter * character) { //Requirements are always valid for quest testers @@ -559,10 +599,10 @@ int currTime = psserver->GetWeatherManager()->GetGameTODHour(); - if (minTime <= maxTime) + if (minTime <= maxTime) { return (currTime <= maxTime) && (currTime >= minTime); // quests during the day - } + } return (currTime >= maxTime) || (currTime <= minTime); // quests overnight } @@ -570,7 +610,7 @@ csString psQuestPrereqOpTimeOfDay::GetScriptOp() { csString script; - + script.Format("<timeofday min=\"%d\" max=\"%d\"/>", minTime, maxTime); return script; @@ -620,7 +660,7 @@ for (size_t i = 0; i < prereqlist.GetSize(); i++) { copy->Push(prereqlist[i]->Copy()); - } + } return csPtr<psQuestPrereqOp>(copy); } /////////////////////////////////////////////////////////////////////////////////////////// @@ -634,20 +674,20 @@ unsigned int skill_val = character->Skills().GetSkillRank(skill->id); if(max && skill_val > max) - { + { return false; - } + } if(min && skill_val < min) - { + { return false; - } + } return true; } csString psQuestPrereqOpSkill::GetScriptOp() { csString script; - + script.AppendFmt("<skill name=\"%s\"", skill->name.GetData()); if(min) { Modified: trunk/src/server/bulkobjects/psquestprereqops.h =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-09 20:00:50 UTC (rev 2998) +++ trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-09 20:02:46 UTC (rev 2999) @@ -1,7 +1,7 @@ /* * psquest.h * - * Copyright (C) 2005 Atomic Blue (in...@pl..., http://www.atomicblue.org) + * Copyright (C) 2005 Atomic Blue (in...@pl..., http://www.atomicblue.org) * * * This program is free software; you can redistribute it and/or @@ -42,7 +42,7 @@ /** * Pure virtual base quest prerequisite operator class * - * This base class define the needed functions for every + * This base class define the needed functions for every * prerequisite operator. */ class psQuestPrereqOp : public csRefCount @@ -55,7 +55,7 @@ virtual ~psQuestPrereqOp() {}; /** - * Check for valid prerequisite + * Check for valid prerequisite * * Override this function to generate a test for any prerequisite. * @@ -96,7 +96,7 @@ }; /** - * Basis list prerequisite operator. + * Basis list prerequisite operator. * * Define basic operations for operations needing any number of * prerequisites to be complete. Like an and operator with any numbers @@ -114,7 +114,7 @@ /** * Destructor for the list prerequisite operator. * - * Will delete any prerequisite pushed on to the list + * Will delete any prerequisite pushed on to the list * of child prerequisites. */ virtual ~psQuestPrereqOpList() {} @@ -122,7 +122,7 @@ /** * Push a new child prerequisite onto the child list. * - * Add another prerequisite operator to the list of childs + * Add another prerequisite operator to the list of childs * for this list prerequisite. * * @param prereqOp The prerequisite operator to be appended to the list. @@ -132,19 +132,19 @@ /** * Insert a new child prerequisite onto the child list. * - * Add another prerequisite operator to the list of childs + * Add another prerequisite operator to the list of childs * for this list prerequisite. * * @param n Insert the \c prereqOp before prerequisite \c n * @param prereqOp The prerequisite operator to be inserted to the list. */ - virtual void Insert(size_t n, csRef<psQuestPrereqOp> prereqOp); + virtual void Insert(size_t n, csRef<psQuestPrereqOp> prereqOp); }; /** * And Prerequisite operator. - * + * * A multi term and operator. Every prerequisite have to be true * for this operator to be valid. */ @@ -156,7 +156,7 @@ * Destructor for the and prerequisite operator. */ virtual ~psQuestPrereqOpAnd() {} - + /** * Check if all child prerequisites are true * @@ -191,7 +191,7 @@ /** * Or prerequisite operator. - * + * * A multi term or operator. One prerequisite have to be true * for this operator to be valid. */ @@ -237,7 +237,7 @@ /** * Require prerequisite operator. - * + * * A multi term require operator. The given minimum and/or maximum of * childs have to be completed for this prerequisite to be true. */ @@ -260,7 +260,7 @@ * Destructor for the require prerequisite operator. */ virtual ~psQuestPrereqOpRequire() {} - + /** * Check if a number of prerequisites are true. Limited by * a min and a max number. If any of thise are -1 the limit @@ -277,7 +277,7 @@ /** * Convert the prerequisite operator to a xml string * - * Convert the operator into the xml string: + * Convert the operator into the xml string: * <require [min="min"] [max="max"]><child1>...<childN></require> * * @return XML string for the prerequisite operator. @@ -297,7 +297,7 @@ /** * Not prerequisite operator. - * + * * Invert the result of the one child. */ class psQuestPrereqOpNot: public psQuestPrereqOpList @@ -322,7 +322,7 @@ /** * Convert the prerequisite operator to a xml string * - * Convert the operator into the xml string: + * Convert the operator into the xml string: * <not><child></not> * * @return XML string for the prerequisite operator. @@ -446,7 +446,7 @@ /** * Convert the prerequisite operator to a xml string * - * Convert the operator into the xml string: + * Convert the operator into the xml string: * <assigned quest="quest name"/> * * @return XML string for the prerequisite operator. @@ -583,7 +583,7 @@ /** * Convert the prerequisite operator to a xml string * - * Convert the operator into the xml string: + * Convert the operator into the xml string: * <faction name="faction name" value="faction value"/> * * @return XML string for the prerequisite operator. @@ -633,7 +633,7 @@ /** * Convert the prerequisite operator to a xml string * - * Convert the operator into the xml string: + * Convert the operator into the xml string: * <activemagic name="-activemagic"/> * * @return XML string for the prerequisite operator. @@ -683,7 +683,7 @@ /** * Convert the prerequisite operator to a xml string * - * Convert the operator into the xml string: + * Convert the operator into the xml string: * <activemagic name="-activemagic"/> * * @return XML string for the prerequisite operator. @@ -712,7 +712,7 @@ csString gender; public: - + /** * Construct a gender operator * @@ -733,7 +733,7 @@ /** * Convert the prerequisite operator to a xml string * - * Convert the operator into the xml string: + * Convert the operator into the xml string: * <activemagic name="-activemagic"/> * * @return XML string for the prerequisite operator. @@ -762,7 +762,7 @@ csString guildtype; public: - + /** * Construct a guild operator * @@ -783,7 +783,7 @@ /** * Convert the prerequisite operator to a xml string * - * Convert the operator into the xml string: + * Convert the operator into the xml string: * <activemagic name="-activemagic"/> * * @return XML string for the prerequisite operator. @@ -802,6 +802,59 @@ }; /** + * advisor points prerequisite operator + * + * The advisorpoints must be beetwen maxPoints and minPoints. + */ +class psQuestPrereqOpAdvisorPoints : public psQuestPrereqOp +{ + protected: + int minPoints, maxPoints; + csString type; + + public: + + /** + * Construct an advisor points operator + * + * @param minPoints Minimal advisor points + * @param maxPoints Maximal advisor points + * @param type Type of the check + */ + psQuestPrereqOpAdvisorPoints(int minPoints, int maxPoints, csString type):minPoints(minPoints),maxPoints(maxPoints),type(type){}; + + virtual ~psQuestPrereqOpAdvisorPoints() {} + + /** + * Check if within the advisor points range + * + * @param character The character that are checking for a prerequisite + * @return True if in the valid range + */ + virtual bool Check(psCharacter * character); + + /** + * Convert the prerequisite operator to a xml string + * + * Convert the operator into the xml string: + * <advisorpoints min="-min" max="-max" type="min/max/both"/> + * + * @return XML string for the prerequisite operator. + */ + virtual csString GetScriptOp(); + + /** + * Copy the prerequisite operator + * + * Override this function to return a copy of the prerequisite + * operator. + * + * @return Copy of the prerequisite operator. + */ + virtual csPtr<psQuestPrereqOp> Copy(); +}; + +/** * Time online time prerequisite operator * * The time must be between mintime and maxtime. @@ -836,7 +889,7 @@ /** * Convert the prerequisite operator to a xml string * - * Convert the operator into the xml string: + * Convert the operator into the xml string: * <onlinetime min="-min" max="-max" type="min/max/both"/> * * @return XML string for the prerequisite operator. @@ -887,7 +940,7 @@ /** * Convert the prerequisite operator to a xml string * - * Convert the operator into the xml string: + * Convert the operator into the xml string: * <timeofday min="-min" max="-max"/> * * @return XML string for the prerequisite operator. @@ -907,7 +960,7 @@ /** * Xor prerequisite operator. - * + * * A multi term or operator. Value of XORs between prerequisites * must be true. */ @@ -994,7 +1047,7 @@ /** * Convert the prerequisite operator to a xml string * - * Convert the operator into the xml string: + * Convert the operator into the xml string: * <skill name="skill name" min="0" max="0"/> * * @return XML string for the prerequisite operator. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |