From: <wel...@us...> - 2009-02-05 22:43:52
|
Revision: 2980 http://planeshift.svn.sourceforge.net/planeshift/?rev=2980&view=rev Author: weltall2 Date: 2009-02-05 22:43:49 +0000 (Thu, 05 Feb 2009) Log Message: ----------- Added gender and race prereqs ops 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-05 20:24:58 UTC (rev 2979) +++ trunk/src/server/bulkobjects/psquest.cpp 2009-02-05 22:43:49 UTC (rev 2980) @@ -362,6 +362,28 @@ prerequisite.AttachNew(new psQuestPrereqOpActiveMagic(name)); } + else if ( strcmp( topNode->GetValue(), "race" ) == 0 ) + { + csString name = topNode->GetAttributeValue("name"); + if (name.IsEmpty()) + { + Error1("No race name given for race prerequisite operation"); + return false; + } + + prerequisite.AttachNew(new psQuestPrereqOpRace(name)); + } + else if ( strcmp( topNode->GetValue(), "gender" ) == 0 ) + { + csString type = topNode->GetAttributeValue("type"); + if (type.IsEmpty()) + { + Error1("No type given for gender prerequisite operation"); + return false; + } + + prerequisite.AttachNew(new psQuestPrereqOpGender(type)); + } else if ( strcmp( topNode->GetValue(), "timeofday" ) == 0 ) { int min = topNode->GetAttributeValueAsInt("min"); Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-05 20:24:58 UTC (rev 2979) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-05 22:43:49 UTC (rev 2980) @@ -38,6 +38,7 @@ #include "psquest.h" #include "weathermanager.h" #include "cachemanager.h" +#include "psraceinfo.h" /////////////////////////////////////////////////////////////////////////////////////////// @@ -415,6 +416,68 @@ /////////////////////////////////////////////////////////////////////////////////////////// +bool psQuestPrereqOpRace::Check(psCharacter * character) +{ + //Requirements are always valid for quest testers + if(character->GetActor() && character->GetActor()->questtester) + return true; + + if (character->GetRaceInfo()) + { + return (character->GetRaceInfo()->GetRace() == race); + } + return false; +} + +csString psQuestPrereqOpRace::GetScriptOp() +{ + csString script; + + script.Format("<race name=\"%s\"/>", race.GetData()); + + return script; +} + +csPtr<psQuestPrereqOp> psQuestPrereqOpRace::Copy() +{ + csRef<psQuestPrereqOpRace> copy; + copy.AttachNew(new psQuestPrereqOpRace(race)); + return csPtr<psQuestPrereqOp>(copy); +} + +/////////////////////////////////////////////////////////////////////////////////////////// + +bool psQuestPrereqOpGender::Check(psCharacter * character) +{ + //Requirements are always valid for quest testers + if(character->GetActor() && character->GetActor()->questtester) + return true; + + if (character->raceinfo) + { + return (character->GetRaceInfo()->GetGender() == gender); + } + return false; +} + +csString psQuestPrereqOpGender::GetScriptOp() +{ + csString script; + + script.Format("<gender type=\"%s\"/>", gender.GetData()); + + return script; +} + +csPtr<psQuestPrereqOp> psQuestPrereqOpGender::Copy() +{ + csRef<psQuestPrereqOpGender> copy; + copy.AttachNew(new psQuestPrereqOpGender(gender)); + return csPtr<psQuestPrereqOp>(copy); +} + +/////////////////////////////////////////////////////////////////////////////////////////// + bool psQuestPrereqOpTimeOfDay::Check(psCharacter * character) { //Requirements are always valid for quest testers Modified: trunk/src/server/bulkobjects/psquestprereqops.h =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-05 20:24:58 UTC (rev 2979) +++ trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-05 22:43:49 UTC (rev 2980) @@ -652,6 +652,106 @@ }; /** + * race prerequisite operator + * + * The actor must be of a certain race. + */ +class psQuestPrereqOpRace : public psQuestPrereqOp +{ + protected: + csString race; + + public: + + /** + * Construct a race operator + * + * @param gender The name of the race the actor is required to be + */ + psQuestPrereqOpRace(const char *race):race(race){}; + + virtual ~psQuestPrereqOpRace() {} + + /** + * Check if the character is of the specific race + * + * @param character The character that are checking for a prerequisite + * @return True if the race is the one we are looking for. + */ + virtual bool Check(psCharacter * character); + + /** + * Convert the prerequisite operator to a xml string + * + * Convert the operator into the xml string: + * <activemagic name="-activemagic"/> + * + * @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(); +}; + +/** + * Gender prerequisite operator + * + * The actor must be of a certain gender. + */ +class psQuestPrereqOpGender : public psQuestPrereqOp +{ + protected: + csString gender; + + public: + + /** + * Construct a gender operator + * + * @param gender The sex the character must be + */ + psQuestPrereqOpGender(const char *gender):gender(gender){}; + + virtual ~psQuestPrereqOpGender() {} + + /** + * Check if the character is of the specified gender + * + * @param character The character that are checking for a prerequisite + * @return True if the sex is the one we are looking for. + */ + virtual bool Check(psCharacter * character); + + /** + * Convert the prerequisite operator to a xml string + * + * Convert the operator into the xml string: + * <activemagic name="-activemagic"/> + * + * @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 of day prerequisite operator * * The time must be between mintime and maxtime. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-02-06 11:12:20
|
Revision: 2983 http://planeshift.svn.sourceforge.net/planeshift/?rev=2983&view=rev Author: weltall2 Date: 2009-02-06 11:12:16 +0000 (Fri, 06 Feb 2009) Log Message: ----------- Added a guild questprereqop. Now it's possible to add as prerequisite if the character is in a guild or not and if he/she/it is check if the guild is private or not 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-06 09:50:36 UTC (rev 2982) +++ trunk/src/server/bulkobjects/psquest.cpp 2009-02-06 11:12:16 UTC (rev 2983) @@ -384,6 +384,17 @@ prerequisite.AttachNew(new psQuestPrereqOpGender(type)); } + else if ( strcmp( topNode->GetValue(), "guild" ) == 0 ) + { + csString type = topNode->GetAttributeValue("type"); + if (type.IsEmpty()) + { + Error1("No type given for guild prerequisite operation"); + return false; + } + + prerequisite.AttachNew(new psQuestPrereqOpGuild(type)); + } else if ( strcmp( topNode->GetValue(), "timeofday" ) == 0 ) { int min = topNode->GetAttributeValueAsInt("min"); Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-06 09:50:36 UTC (rev 2982) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-06 11:12:16 UTC (rev 2983) @@ -39,6 +39,7 @@ #include "weathermanager.h" #include "cachemanager.h" #include "psraceinfo.h" +#include "psguildinfo.h" /////////////////////////////////////////////////////////////////////////////////////////// @@ -453,7 +454,7 @@ if(character->GetActor() && character->GetActor()->questtester) return true; - if (character->raceinfo) + if (character->GetRaceInfo()) { return (character->GetRaceInfo()->GetGender() == gender); } @@ -478,6 +479,46 @@ /////////////////////////////////////////////////////////////////////////////////////////// +bool psQuestPrereqOpGuild::Check(psCharacter * character) +{ + //Requirements are always valid for quest testers + if(character->GetActor() && character->GetActor()->questtester) + return true; + + if (!character->GetGuild()) //the player isn't in a guild + { + return (guildtype == "none"); //it was what we where looking for? + } + else + { + if(guildtype == "both") //no need to check for the case it's in a guild + return true; + if(character->GetGuild()->IsSecret()) + return (guildtype == "secret"); + else + return (guildtype == "public"); + } + return false; +} + +csString psQuestPrereqOpGuild::GetScriptOp() +{ + csString script; + + script.Format("<guild type=\"%s\"/>", guildtype.GetData()); + + return script; +} + +csPtr<psQuestPrereqOp> psQuestPrereqOpGuild::Copy() +{ + csRef<psQuestPrereqOpGuild> copy; + copy.AttachNew(new psQuestPrereqOpGuild(guildtype)); + return csPtr<psQuestPrereqOp>(copy); +} + +/////////////////////////////////////////////////////////////////////////////////////////// + bool psQuestPrereqOpTimeOfDay::Check(psCharacter * character) { //Requirements are always valid for quest testers Modified: trunk/src/server/bulkobjects/psquestprereqops.h =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-06 09:50:36 UTC (rev 2982) +++ trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-06 11:12:16 UTC (rev 2983) @@ -726,7 +726,7 @@ * Check if the character is of the specified gender * * @param character The character that are checking for a prerequisite - * @return True if the sex is the one we are looking for. + * @return True if the gender is the one we are looking for. */ virtual bool Check(psCharacter * character); @@ -752,6 +752,56 @@ }; /** + * Guild prerequisite operator + * + * The actor must be in a certain type of guild or none. + */ +class psQuestPrereqOpGuild : public psQuestPrereqOp +{ + protected: + csString guildtype; + + public: + + /** + * Construct a guild operator + * + * @param guildtype The type of guild the character must be + */ + psQuestPrereqOpGuild(const char *guildtype):guildtype(guildtype){}; + + virtual ~psQuestPrereqOpGuild() {} + + /** + * Check if the character is in a specified type of guild + * + * @param character The character that are checking for a prerequisite + * @return True if the character is in the guild type we are looking for. + */ + virtual bool Check(psCharacter * character); + + /** + * Convert the prerequisite operator to a xml string + * + * Convert the operator into the xml string: + * <activemagic name="-activemagic"/> + * + * @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 of day prerequisite operator * * The time must be between mintime and maxtime. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-02-08 19:42:21
|
Revision: 2992 http://planeshift.svn.sourceforge.net/planeshift/?rev=2992&view=rev Author: weltall2 Date: 2009-02-08 19:42:17 +0000 (Sun, 08 Feb 2009) Log Message: ----------- added an online time quest prerequisite operator 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-08 17:32:32 UTC (rev 2991) +++ trunk/src/server/bulkobjects/psquest.cpp 2009-02-08 19:42:17 UTC (rev 2992) @@ -404,6 +404,17 @@ prerequisite.AttachNew(new psQuestPrereqOpTimeOfDay(min,max)); } + else if ( strcmp( topNode->GetValue(), "onlinetime" ) == 0 ) + { + int min = topNode->GetAttributeValueAsInt("min"); + + int max = topNode->GetAttributeValueAsInt("max"); + + csString type = topNode->GetAttributeValue("type"); + + prerequisite.AttachNew(new psQuestPrereqOpTimeOnline(min,max,type)); + + } else if ( strcmp( topNode->GetValue(), "not" ) == 0 ) { csRef<iDocumentNodeIterator> iter = topNode->GetNodes(); Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-08 17:32:32 UTC (rev 2991) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-08 19:42:17 UTC (rev 2992) @@ -493,9 +493,9 @@ { if(guildtype == "both") //no need to check for the case it's in a guild return true; - if(character->GetGuild()->IsSecret()) + if(character->GetGuild()->IsSecret()) //the guild is secret return (guildtype == "secret"); - else + else //the guild is public return (guildtype == "public"); } return false; @@ -519,6 +519,38 @@ /////////////////////////////////////////////////////////////////////////////////////////// +bool psQuestPrereqOpTimeOnline::Check(psCharacter * character) +{ + //Requirements are always valid for quest testers + if(character->GetActor() && character->GetActor()->questtester) + return true; + + if(type == "min") + return (character->GetTotalOnlineTime() > minTime); + if(type == "max") + return (character->GetTotalOnlineTime() < maxTime); + if(type == "both") + return (character->GetTotalOnlineTime() > minTime && character->GetTotalOnlineTime() < maxTime); +} + +csString psQuestPrereqOpTimeOnline::GetScriptOp() +{ + csString script; + + script.Format("<onlinetime min=\"%d\" max=\"%d\" type=\"%s\"/>", minTime, maxTime, type.GetDataSafe()); + + return script; +} + +csPtr<psQuestPrereqOp> psQuestPrereqOpTimeOnline::Copy() +{ + csRef<psQuestPrereqOpTimeOnline> copy; + copy.AttachNew(new psQuestPrereqOpTimeOnline(minTime, maxTime, type)); + return csPtr<psQuestPrereqOp>(copy); +} + +/////////////////////////////////////////////////////////////////////////////////////////// + bool psQuestPrereqOpTimeOfDay::Check(psCharacter * character) { //Requirements are always valid for quest testers Modified: trunk/src/server/bulkobjects/psquestprereqops.h =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-08 17:32:32 UTC (rev 2991) +++ trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-08 19:42:17 UTC (rev 2992) @@ -802,6 +802,59 @@ }; /** + * Time online time prerequisite operator + * + * The time must be between mintime and maxtime. + */ +class psQuestPrereqOpTimeOnline : public psQuestPrereqOp +{ + protected: + int minTime, maxTime; + csString type; + + public: + + /** + * Construct an online time operator + * + * @param minTime Minimal time online + * @param maxTime Maximal time online + * @param type Type of the check + */ + psQuestPrereqOpTimeOnline(int minTime, int maxTime, csString type):minTime(minTime),maxTime(maxTime),type(type){}; + + virtual ~psQuestPrereqOpTimeOnline() {} + + /** + * Check if within the time 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: + * <onlinetime 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 of day prerequisite operator * * The time must be between mintime and maxtime. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
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. |
From: <wel...@us...> - 2009-02-13 11:15:21
|
Revision: 3027 http://planeshift.svn.sourceforge.net/planeshift/?rev=3027&view=rev Author: weltall2 Date: 2009-02-13 11:15:17 +0000 (Fri, 13 Feb 2009) Log Message: ----------- Added a marriage quest prerequisite operator eg: <marriage status="yes"> It will return if the character is married or not 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-11 14:42:58 UTC (rev 3026) +++ trunk/src/server/bulkobjects/psquest.cpp 2009-02-13 11:15:17 UTC (rev 3027) @@ -364,6 +364,7 @@ } else if ( strcmp( topNode->GetValue(), "race" ) == 0 ) { + printf("a\n"); csString name = topNode->GetAttributeValue("name"); if (name.IsEmpty()) { @@ -374,7 +375,7 @@ prerequisite.AttachNew(new psQuestPrereqOpRace(name)); } else if ( strcmp( topNode->GetValue(), "gender" ) == 0 ) - { + {printf("b\n"); csString type = topNode->GetAttributeValue("type"); if (type.IsEmpty()) { @@ -395,6 +396,17 @@ prerequisite.AttachNew(new psQuestPrereqOpGuild(type)); } + else if ( strcmp( topNode->GetValue(), "marriage" ) == 0 ) + { + csString type = topNode->GetAttributeValue("status"); + if (type.IsEmpty()) + { + Error1("No status given for marriage prerequisite operation"); + return false; + } + + prerequisite.AttachNew(new psQuestPrereqOpMarriage(type)); + } else if ( strcmp( topNode->GetValue(), "advisorpoints" ) == 0 ) { int min = topNode->GetAttributeValueAsInt("min"); Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-11 14:42:58 UTC (rev 3026) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-13 11:15:17 UTC (rev 3027) @@ -519,6 +519,41 @@ /////////////////////////////////////////////////////////////////////////////////////////// +bool psQuestPrereqOpMarriage::Check(psCharacter * character) +{ + //Requirements are always valid for quest testers + if(character->GetActor() && character->GetActor()->questtester) + return true; + + if (character->GetIsMarried()) //the player is married? + { + return (status == "yes"); //it was what we where looking for? + } + else + { + return (status == "no"); + } + return false; +} + +csString psQuestPrereqOpMarriage::GetScriptOp() +{ + csString script; + + script.Format("<marriage status=\"%s\"/>", status.GetData()); + + return script; +} + +csPtr<psQuestPrereqOp> psQuestPrereqOpMarriage::Copy() +{ + csRef<psQuestPrereqOpMarriage> copy; + copy.AttachNew(new psQuestPrereqOpMarriage(status)); + return csPtr<psQuestPrereqOp>(copy); +} + +/////////////////////////////////////////////////////////////////////////////////////////// + bool psQuestPrereqOpTimeOnline::Check(psCharacter * character) { //Requirements are always valid for quest testers Modified: trunk/src/server/bulkobjects/psquestprereqops.h =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-11 14:42:58 UTC (rev 3026) +++ trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-13 11:15:17 UTC (rev 3027) @@ -802,6 +802,56 @@ }; /** + * Marriage prerequisite operator + * + * The actor must be married or not. + */ +class psQuestPrereqOpMarriage : public psQuestPrereqOp +{ + protected: + csString status; + + public: + + /** + * Construct a marriage operator + * + * @param status The type of guild the character must be + */ + psQuestPrereqOpMarriage(const char *status):status(status){}; + + virtual ~psQuestPrereqOpMarriage() {} + + /** + * Check if the character is married or not + * + * @param character The character that are checking for a prerequisite + * @return True if the character is married or not. + */ + virtual bool Check(psCharacter * character); + + /** + * Convert the prerequisite operator to a xml string + * + * Convert the operator into the xml string: + * <marriage status="yes/no"/> + * + * @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(); +}; + +/** * advisor points prerequisite operator * * The advisorpoints must be beetwen maxPoints and minPoints. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-02-14 09:41:13
|
Revision: 3029 http://planeshift.svn.sourceforge.net/planeshift/?rev=3029&view=rev Author: weltall2 Date: 2009-02-14 09:41:11 +0000 (Sat, 14 Feb 2009) Log Message: ----------- reworked marriage in order to be easier to use. now it's <married /> and to invert it just use not like <not><married /></not> 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-13 11:16:37 UTC (rev 3028) +++ trunk/src/server/bulkobjects/psquest.cpp 2009-02-14 09:41:11 UTC (rev 3029) @@ -396,16 +396,9 @@ prerequisite.AttachNew(new psQuestPrereqOpGuild(type)); } - else if ( strcmp( topNode->GetValue(), "marriage" ) == 0 ) + else if ( strcmp( topNode->GetValue(), "married" ) == 0 ) //wrap in <not></not> to reverse { - csString type = topNode->GetAttributeValue("status"); - if (type.IsEmpty()) - { - Error1("No status given for marriage prerequisite operation"); - return false; - } - - prerequisite.AttachNew(new psQuestPrereqOpMarriage(type)); + prerequisite.AttachNew(new psQuestPrereqOpMarriage); } else if ( strcmp( topNode->GetValue(), "advisorpoints" ) == 0 ) { Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-13 11:16:37 UTC (rev 3028) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-14 09:41:11 UTC (rev 3029) @@ -525,14 +525,8 @@ if(character->GetActor() && character->GetActor()->questtester) return true; - if (character->GetIsMarried()) //the player is married? - { - return (status == "yes"); //it was what we where looking for? - } - else - { - return (status == "no"); - } + return character->GetIsMarried(); //is the character married? + return false; } @@ -540,7 +534,7 @@ { csString script; - script.Format("<marriage status=\"%s\"/>", status.GetData()); + script.Format("<married/>"); return script; } @@ -548,7 +542,7 @@ csPtr<psQuestPrereqOp> psQuestPrereqOpMarriage::Copy() { csRef<psQuestPrereqOpMarriage> copy; - copy.AttachNew(new psQuestPrereqOpMarriage(status)); + copy.AttachNew(new psQuestPrereqOpMarriage()); return csPtr<psQuestPrereqOp>(copy); } Modified: trunk/src/server/bulkobjects/psquestprereqops.h =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-13 11:16:37 UTC (rev 3028) +++ trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-14 09:41:11 UTC (rev 3029) @@ -808,9 +808,6 @@ */ class psQuestPrereqOpMarriage : public psQuestPrereqOp { - protected: - csString status; - public: /** @@ -818,7 +815,7 @@ * * @param status The type of guild the character must be */ - psQuestPrereqOpMarriage(const char *status):status(status){}; + psQuestPrereqOpMarriage() {}; virtual ~psQuestPrereqOpMarriage() {} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-02-15 13:16:18
|
Revision: 3031 http://planeshift.svn.sourceforge.net/planeshift/?rev=3031&view=rev Author: weltall2 Date: 2009-02-15 13:16:15 +0000 (Sun, 15 Feb 2009) Log Message: ----------- Added a knownspell prerequisite operator like <knownspell spell="Darkness" /> 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-14 09:43:11 UTC (rev 3030) +++ trunk/src/server/bulkobjects/psquest.cpp 2009-02-15 13:16:15 UTC (rev 3031) @@ -364,7 +364,6 @@ } else if ( strcmp( topNode->GetValue(), "race" ) == 0 ) { - printf("a\n"); csString name = topNode->GetAttributeValue("name"); if (name.IsEmpty()) { @@ -375,7 +374,7 @@ prerequisite.AttachNew(new psQuestPrereqOpRace(name)); } else if ( strcmp( topNode->GetValue(), "gender" ) == 0 ) - {printf("b\n"); + { csString type = topNode->GetAttributeValue("type"); if (type.IsEmpty()) { @@ -385,6 +384,17 @@ prerequisite.AttachNew(new psQuestPrereqOpGender(type)); } + else if ( strcmp( topNode->GetValue(), "knownspell" ) == 0 ) + { + csString spell = topNode->GetAttributeValue("spell"); + if (spell.IsEmpty()) + { + Error1("No spell given for kwownspell prerequisite operation"); + return false; + } + + prerequisite.AttachNew(new psQuestPrereqOpKnownSpell(spell)); + } else if ( strcmp( topNode->GetValue(), "guild" ) == 0 ) { csString type = topNode->GetAttributeValue("type"); Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-14 09:43:11 UTC (rev 3030) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-15 13:16:15 UTC (rev 3031) @@ -479,6 +479,37 @@ /////////////////////////////////////////////////////////////////////////////////////////// +bool psQuestPrereqOpKnownSpell::Check(psCharacter * character) +{ + //Requirements are always valid for quest testers + if(character->GetActor() && character->GetActor()->questtester) + return true; + + if (character) + { + return (character->GetSpellByName(spell)); + } + return false; +} + +csString psQuestPrereqOpKnownSpell::GetScriptOp() +{ + csString script; + + script.Format("<knownspell spell=\"%s\"/>", spell.GetData()); + + return script; +} + +csPtr<psQuestPrereqOp> psQuestPrereqOpKnownSpell::Copy() +{ + csRef<psQuestPrereqOpKnownSpell> copy; + copy.AttachNew(new psQuestPrereqOpKnownSpell(spell)); + return csPtr<psQuestPrereqOp>(copy); +} + +/////////////////////////////////////////////////////////////////////////////////////////// + bool psQuestPrereqOpGuild::Check(psCharacter * character) { //Requirements are always valid for quest testers Modified: trunk/src/server/bulkobjects/psquestprereqops.h =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-14 09:43:11 UTC (rev 3030) +++ trunk/src/server/bulkobjects/psquestprereqops.h 2009-02-15 13:16:15 UTC (rev 3031) @@ -752,6 +752,56 @@ }; /** + * Spell knownledge prerequisite operator + * + * The actor must know a certain spell. + */ +class psQuestPrereqOpKnownSpell : public psQuestPrereqOp +{ + protected: + csString spell; + + public: + + /** + * Construct a Spell Known operator + * + * @param spell The spell the character must know + */ + psQuestPrereqOpKnownSpell(const char *spell):spell(spell){}; + + virtual ~psQuestPrereqOpKnownSpell() {} + + /** + * Check if the character known the specified spell. + * + * @param character The character that are checking for a prerequisite + * @return True if the spell we are looking for is known. + */ + virtual bool Check(psCharacter * character); + + /** + * Convert the prerequisite operator to a xml string + * + * Convert the operator into the xml string: + * <knownspell spell="Spell Name"/> + * + * @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(); +}; + +/** * Guild prerequisite operator * * The actor must be in a certain type of guild or none. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-02-24 17:50:38
|
Revision: 3110 http://planeshift.svn.sourceforge.net/planeshift/?rev=3110&view=rev Author: weltall2 Date: 2009-02-24 17:50:35 +0000 (Tue, 24 Feb 2009) Log Message: ----------- fixed a bug with broken quest consistency while using quest tester Modified Paths: -------------- trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/psquestprereqops.cpp Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2009-02-24 14:11:29 UTC (rev 3109) +++ trunk/src/server/bulkobjects/dictionary.cpp 2009-02-24 17:50:35 UTC (rev 3110) @@ -1073,8 +1073,11 @@ if (resp->quest || resp->prerequisite) { // Check if all prerequisites are true, and available(no lockout) - if ((!resp->prerequisite || client->GetCharacterData()->CheckResponsePrerequisite(resp)) && - (!resp->quest || (resp->quest->Active() && client->GetCharacterData()->CheckQuestAvailable(resp->quest,npc->GetPID())))) + if ( ((!resp->prerequisite || client->GetCharacterData()->CheckResponsePrerequisite(resp) ) && //checks if prerequisites are in order + (!resp->quest || (resp->quest->Active() && client->GetCharacterData()->CheckQuestAvailable(resp->quest,npc->GetPID())))) //checks if the player can get the quest + /*overrides the above while mantaining quest consistency in case of questtester */ + ||(client->GetCharacterData()->GetActor() && client->GetCharacterData()->GetActor()->questtester && + (!resp->quest || !resp->quest->GetParentQuest()))) { Debug2(LOG_QUESTS,client->GetClientNum(),"Pushing quest response: %d\n",resp->id); // This is a available response that is connected to a available quest Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-24 14:11:29 UTC (rev 3109) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-02-24 17:50:35 UTC (rev 3110) @@ -69,10 +69,6 @@ bool psQuestPrereqOpAnd::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - // Check if all prereqs are valid for (size_t i = 0; i < prereqlist.GetSize(); i++) { @@ -112,10 +108,6 @@ bool psQuestPrereqOpOr::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - // Check if any of the prereqs are valid for (size_t i = 0; i < prereqlist.GetSize(); i++) { @@ -161,10 +153,6 @@ bool psQuestPrereqOpRequire::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - // Count the number of prereqs that is valid. int count=0; for (size_t i = 0; i < prereqlist.GetSize(); i++) @@ -216,10 +204,6 @@ bool psQuestPrereqOpNot::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - return (prereqlist.GetSize() && !prereqlist[0]->Check(character)); } @@ -253,10 +237,6 @@ bool psQuestPrereqOpQuestCompleted::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - if (quest == NULL) quest = CacheManager::GetSingleton().GetQuestByName(name); return character->CheckQuestCompleted(quest); @@ -286,10 +266,6 @@ bool psQuestPrereqOpQuestAssigned::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - return character->CheckQuestAssigned(quest); } @@ -313,10 +289,6 @@ bool psQuestPrereqOpQuestCompletedCategory::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - int count = character->NumberOfQuestsCompleted(category); Debug5(LOG_QUESTS, character->GetPID().Unbox(), "Check for category %s in range %d <= %d <= %d", @@ -356,10 +328,6 @@ bool psQuestPrereqOpFaction::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - if(max) { // If value is max, make sure we're below it @@ -388,10 +356,6 @@ bool psQuestPrereqOpActiveMagic::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - if (character->GetActor()) { return character->GetActor()->IsMagicCategoryActive(activeMagic); @@ -419,10 +383,6 @@ bool psQuestPrereqOpRace::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - if (character->GetRaceInfo()) { return ((csString)character->GetRaceInfo()->GetRace() == race); @@ -450,10 +410,6 @@ bool psQuestPrereqOpGender::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - if (character->GetRaceInfo()) { return ((csString)character->GetRaceInfo()->GetGender() == gender); @@ -481,10 +437,6 @@ bool psQuestPrereqOpKnownSpell::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - if (character) { return (character->GetSpellByName(spell) != NULL); @@ -512,10 +464,6 @@ bool psQuestPrereqOpGuild::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - if (!character->GetGuild()) //the player isn't in a guild { return (guildtype == "none"); //it was what we where looking for? @@ -552,10 +500,6 @@ bool psQuestPrereqOpMarriage::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - return character->GetIsMarried(); //is the character married? return false; @@ -581,10 +525,6 @@ bool psQuestPrereqOpTimeOnline::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - if(type == "min") return (character->GetTotalOnlineTime() > minTime); if(type == "max") @@ -653,10 +593,6 @@ bool psQuestPrereqOpTimeOfDay::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - int currTime = psserver->GetWeatherManager()->GetGameTODHour(); if (minTime <= maxTime) @@ -687,10 +623,6 @@ bool psQuestPrereqOpXor::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - // Check if any of the prereqs are valid bool flag = 0; for (size_t i = 0; i < prereqlist.GetSize(); i++) @@ -727,10 +659,6 @@ bool psQuestPrereqOpSkill::Check(psCharacter * character) { - //Requirements are always valid for quest testers - if(character->GetActor() && character->GetActor()->questtester) - return true; - unsigned int skill_val = character->Skills().GetSkillRank(skill->id); if(max && skill_val > max) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-03-10 00:54:14
|
Revision: 3165 http://planeshift.svn.sourceforge.net/planeshift/?rev=3165&view=rev Author: kougaro Date: 2009-03-10 00:54:11 +0000 (Tue, 10 Mar 2009) Log Message: ----------- Fix PS#2799 - Server crash when uploading character, patch by Lanarel. Plus some comments formatted for doxygen Modified Paths: -------------- trunk/src/server/bulkobjects/servervitals.cpp trunk/src/server/bulkobjects/servervitals.h Modified: trunk/src/server/bulkobjects/servervitals.cpp =================================================================== --- trunk/src/server/bulkobjects/servervitals.cpp 2009-03-09 21:30:18 UTC (rev 3164) +++ trunk/src/server/bulkobjects/servervitals.cpp 2009-03-10 00:54:11 UTC (rev 3165) @@ -51,6 +51,12 @@ vitals[VITAL_PYSSTAMINA].max.Initialize(&statsDirty, DIRTY_VITAL_PYSSTAMINA_MAX); vitals[VITAL_MENSTAMINA].drRate.Initialize(&statsDirty, DIRTY_VITAL_MENSTAMINA_RATE); vitals[VITAL_MENSTAMINA].max.Initialize(&statsDirty, DIRTY_VITAL_MENSTAMINA_MAX); + + //initialize values to a safe value: + vitals[VITAL_HITPOINTS].value = 0; + vitals[VITAL_MANA].value = 0; + vitals[VITAL_PYSSTAMINA].value = 0; + vitals[VITAL_MENSTAMINA].value = 0; vitals[VITAL_HITPOINTS].drRate.SetBase(HP_REGEN_RATE); vitals[VITAL_MANA].drRate.SetBase(MANA_REGEN_RATE); Modified: trunk/src/server/bulkobjects/servervitals.h =================================================================== --- trunk/src/server/bulkobjects/servervitals.h 2009-03-09 21:30:18 UTC (rev 3164) +++ trunk/src/server/bulkobjects/servervitals.h 2009-03-10 00:54:11 UTC (rev 3165) @@ -39,7 +39,7 @@ class MsgEntry; class psCharacter; -// Buffables for vitals, which automatically update the dirty flag as necessary. +/// Buffables for vitals, which automatically update the dirty flag as necessary. class VitalBuffable : public Buffable<float> { public: @@ -57,8 +57,8 @@ *statsDirty |= dirtyFlag; } - int dirtyFlag; //< The bit value we should set when this becomes dirty. - unsigned int *statsDirty; //< Pointer to the psServerVitals dirty bitfield. + int dirtyFlag; ///< The bit value we should set when this becomes dirty. + unsigned int *statsDirty; ///< Pointer to the psServerVitals dirty bitfield. }; /// A character vital (such as HP or Mana) - server side. @@ -108,7 +108,7 @@ /// @see PS_DIRTY_VITALS unsigned int statsDirty; unsigned char version; - psCharacter *character; //< the character whose vitals we manage + psCharacter *character; ///< the character whose vitals we manage }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2009-03-24 05:10:16
|
Revision: 3293 http://planeshift.svn.sourceforge.net/planeshift/?rev=3293&view=rev Author: kennygraunke Date: 2009-03-24 05:10:13 +0000 (Tue, 24 Mar 2009) Log Message: ----------- - Remove old KFactor variable which isn't used anymore. Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2009-03-24 04:07:06 UTC (rev 3292) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2009-03-24 05:10:13 UTC (rev 3293) @@ -149,7 +149,6 @@ timeconnected = 0; startTimeThisSession = csGetTicks(); - KFactor = 0.0; spellCasting = NULL; // transformation = NULL; Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2009-03-24 04:07:06 UTC (rev 3292) +++ trunk/src/server/bulkobjects/pscharacter.h 2009-03-24 05:10:13 UTC (rev 3293) @@ -651,7 +651,6 @@ unsigned int advantage_bitfield[PSCHARACTER_ADVANTAGE_32BIT_BITFIELDS]; - float KFactor; psSpellCastGameEvent *spellCasting; ///< Hold a pointer to the game event ///< for the spell currently cast. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-03-27 16:52:20
|
Revision: 3332 http://planeshift.svn.sourceforge.net/planeshift/?rev=3332&view=rev Author: weltall2 Date: 2009-03-27 16:52:09 +0000 (Fri, 27 Mar 2009) Log Message: ----------- completed the item prereqops. The name of the item is the one players can see (so a renamed item will miss the check if the renamed name won't be used in the op) Modified Paths: -------------- trunk/src/server/bulkobjects/pscharinventory.cpp trunk/src/server/bulkobjects/pscharinventory.h trunk/src/server/bulkobjects/psquestprereqops.cpp Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2009-03-27 15:27:49 UTC (rev 3331) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2009-03-27 16:52:09 UTC (rev 3332) @@ -828,6 +828,17 @@ return NULL; } +bool psCharacterInventory::hasItemName(csString & itemname, bool includeBulk) +{ + for (size_t i=1; i < inventory.GetSize(); i++) + { + if (inventory[i].item && (csString)inventory[i].item->GetName() == itemname && + (includeBulk || inventory[i].item->GetLocInParent(true) < PSCHARACTER_SLOT_BULK1)) + return true; + } + return false; +} + psItem *psCharacterInventory::RemoveItemIndex(size_t itemIndex, int count) { psItem* currentItem = inventory[itemIndex].item; Modified: trunk/src/server/bulkobjects/pscharinventory.h =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.h 2009-03-27 15:27:49 UTC (rev 3331) +++ trunk/src/server/bulkobjects/pscharinventory.h 2009-03-27 16:52:09 UTC (rev 3332) @@ -212,6 +212,13 @@ * @return The item in the given slot. NULL if no item was found. */ psItem* GetItem(psItem *container, INVENTORY_SLOT_NUMBER slot); + + /** Check if the item of a certain name is in the character inventory. + * @param itemname The name of the item to search for. + * @param includeBulk searches for the item only in the equipment if true. + * @return The item in the given slot. NULL if no item was found. + */ + bool hasItemName(csString & itemname, bool includeBulk); /** Get an item that is in the equipment inventory. * @param slot The slot in which we want to retrive the item ( if any ). Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-03-27 15:27:49 UTC (rev 3331) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-03-27 16:52:09 UTC (rev 3332) @@ -356,12 +356,7 @@ bool psQuestPrereqOpItem::Check(psCharacter * character) { - - if (character->GetActor()) - { - return true; - } - return false; + return character->Inventory().hasItemName(itemName, includeInventory); } csString psQuestPrereqOpItem::GetScriptOp() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-05-13 07:20:06
|
Revision: 3671 http://planeshift.svn.sourceforge.net/planeshift/?rev=3671&view=rev Author: weltall2 Date: 2009-05-13 07:19:47 +0000 (Wed, 13 May 2009) Log Message: ----------- missing code Modified Paths: -------------- trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/bulkobjects/psitem.h Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2009-05-13 07:17:13 UTC (rev 3670) +++ trunk/src/server/bulkobjects/psitem.cpp 2009-05-13 07:19:47 UTC (rev 3671) @@ -1512,6 +1512,11 @@ return current_stats->GetIsAmmo(); } +bool psItem::GetIsArmor() +{ + return current_stats->GetIsArmor(); +} + bool psItem::GetIsShield() { return current_stats->GetIsShield(); Modified: trunk/src/server/bulkobjects/psitem.h =================================================================== --- trunk/src/server/bulkobjects/psitem.h 2009-05-13 07:17:13 UTC (rev 3670) +++ trunk/src/server/bulkobjects/psitem.h 2009-05-13 07:19:47 UTC (rev 3671) @@ -661,6 +661,7 @@ bool GetIsMeleeWeapon(); bool GetIsRangeWeapon(); bool GetIsAmmo(); + bool GetIsArmor(); bool GetIsShield(); bool GetIsContainer(); bool GetIsTrap(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2009-05-15 09:29:07
|
Revision: 3694 http://planeshift.svn.sourceforge.net/planeshift/?rev=3694&view=rev Author: kennygraunke Date: 2009-05-15 09:26:26 +0000 (Fri, 15 May 2009) Log Message: ----------- - Removed some dead code from psCharacter. - Made MathScripts static to avoid wasting memory. Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2009-05-15 00:30:03 UTC (rev 3693) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2009-05-15 09:26:26 UTC (rev 3694) @@ -79,14 +79,16 @@ const char *psCharacter::characterTypeName[] = { "player", "npc", "pet" }; +MathScript *psCharacter::maxRealmScript = NULL; +MathScript *psCharacter::staminaCalc = NULL; +MathScript *psCharacter::expSkillCalc = NULL; //----------------------------------------------------------------------------- + // Definition of the itempool for psCharacter(s) PoolAllocator<psCharacter> psCharacter::characterpool; -const char * psCharacter::player_mode_to_str[] = - {"unknown","peace","combat","spell casting","working","dead","sitting","carrying too much","exhausted", "defeated", "statued" }; void *psCharacter::operator new(size_t allocSize) { @@ -161,16 +163,7 @@ faction_standings.Clear(); player_mode = PSCHARACTER_MODE_PEACE; - lastError = "None"; - staminaCalc = psserver->GetMathScriptEngine()->FindScript("StaminaBase"); - if( !staminaCalc) - Warning1(LOG_CHARACTER, "Can't find math script StaminaBase!"); - - expSkillCalc = psserver->GetMathScriptEngine()->FindScript("Calculate Skill Experience"); - if( !expSkillCalc) - Warning1(LOG_CHARACTER, "Calculate Skill Experience"); - lastResponse = -1; banker = false; @@ -211,6 +204,37 @@ bool psCharacter::Load(iResultRow& row) { + // Load the math scripts + if (!staminaCalc) + { + staminaCalc = psserver->GetMathScriptEngine()->FindScript("StaminaBase"); + if (!staminaCalc) + { + Error1("Can't find math script StaminaBase!"); + return false; + } + } + + if (!expSkillCalc) + { + expSkillCalc = psserver->GetMathScriptEngine()->FindScript("Calculate Skill Experience"); + if (!expSkillCalc) + { + Error1("Can't find 'Calculate Skill Experience' math script."); + return false; + } + } + + if (!maxRealmScript) + { + maxRealmScript = psserver->GetMathScriptEngine()->FindScript("MaxRealm"); + if (!maxRealmScript) + { + Error1("Can't find math script MaxRealm!"); + return false; + } + } + // TODO: Link in account ID? csTicks start = csGetTicks(); pid = row.GetInt("id"); @@ -489,14 +513,6 @@ // Load the kill exp kill_exp = row.GetUInt32("kill_exp"); - // Load the math script - maxRealmScript = psserver->GetMathScriptEngine()->FindScript("MaxRealm"); - if ( !maxRealmScript ) - { - Warning1(LOG_CHARACTER, "Can't find math script MaxRealm!"); - return false; - } - // Load if the character/npc is a banker if(row.GetInt("banker") == 1) banker = true; @@ -1194,6 +1210,7 @@ const char * psCharacter::GetModeStr() { + static const char *player_mode_to_str[] = {"unknown","peace","combat","spell casting","working","dead","sitting","carrying too much","exhausted", "defeated", "statued" }; return player_mode_to_str[player_mode]; } @@ -1840,13 +1857,9 @@ GetPStaminaRate().SetBase(GetPStaminaRate().Base()-6.0*(100-factor)/100); GetMStaminaRate().SetBase(GetMStaminaRate().Base()-6.0*(100-factor)/100); } + void psCharacter::CalculateMaxStamina() { - if(!staminaCalc) - { - CPrintf(CON_ERROR, "Called CalculateMaxStamina without mathscript!!!!"); - return; - } MathEnvironment env; // Set all the skills vars env.Define("STR", attributes[PSITEMSTATS_STAT_STRENGTH].Current()); Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2009-05-15 00:30:03 UTC (rev 3693) +++ trunk/src/server/bulkobjects/pscharacter.h 2009-05-15 09:26:26 UTC (rev 3694) @@ -136,8 +136,7 @@ #define PSCHARACTER_ADVANTAGE_32BIT_BITFIELDS (PSCHARACTER_ADVANTAGE_COUNT-1)/32+1 -// Remember to update the translation table player_mode_to_str when -// adding new modes. +// Remember to update the translation table in GetModeStr when adding modes. enum PSCHARACTER_MODE { PSCHARACTER_MODE_UNKNOWN = 0, @@ -592,7 +591,6 @@ psRaceInfo *raceinfo; PSCHARACTER_MODE player_mode; - static const char * player_mode_to_str[]; Stance combat_stance; const Stance& getStance(csString name); csString faction_standings; @@ -641,13 +639,6 @@ virtual void *RecoverObject() { return this; } ///< Turn iCachedObject ptr into psCharacter virtual void DeleteSelf() { delete this; } ///< Delete must come from inside object to handle operator::delete overrides. - - struct st_bank - { - psItem *bulk[PSCHARACTER_BANK_BULK_COUNT]; - psMoney money; - } bank; - struct st_location { psSectorInfo *loc_sector; @@ -721,7 +712,7 @@ unsigned int GetCharType() const { return characterType; } void SetCharType(unsigned int v) { CS_ASSERT(v < PSCHARACTER_TYPE_COUNT); characterType = v; } - const char *GetCharTypeName() { return psCharacter::characterTypeName[ characterType ]; } + const char *GetCharTypeName() { return characterTypeName[characterType]; } void SetLastLoginTime( const char* last_login = NULL, bool save = true); csString GetLastLoginTime() const { return lastlogintime; } @@ -1126,10 +1117,6 @@ void CalculateEquipmentModifiers(); float GetStatModifier(PSITEMSTATS_STAT attrib); - csString& GetLastError() { return lastError; } - - csString lastError; - // State information for merchants csRef<psMerchantInfo> merchantInfo; bool tradingStopped; @@ -1154,12 +1141,10 @@ Multiplier attackModifier; ///< Attack value is multiplied by this Multiplier defenseModifier; ///< Defense value is multiplied by this - MathScript* powerScript, *maxRealmScript; ///< The PowerLevel math script + static MathScript *maxRealmScript; + static MathScript *staminaCalc; ///< The stamina calc script + static MathScript *expSkillCalc; ///< The exp calc script to assign experience on skill ranking - MathScript* staminaCalc; ///< The stamina calc script - MathScript* expSkillCalc; ///< The exp calc script to assign experience on skill ranking - - protected: csString lastlogintime;///< String value copied from the database containing the last login time This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2009-05-15 23:23:37
|
Revision: 3698 http://planeshift.svn.sourceforge.net/planeshift/?rev=3698&view=rev Author: Khakilord Date: 2009-05-15 23:23:30 +0000 (Fri, 15 May 2009) Log Message: ----------- Fixed issue in red black tree comparing npc triggers. Modified Paths: -------------- trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/dictionary.h Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2009-05-15 21:42:54 UTC (rev 3697) +++ trunk/src/server/bulkobjects/dictionary.cpp 2009-05-15 23:23:30 UTC (rev 3698) @@ -1120,14 +1120,14 @@ return availableResponseList[0]; } -bool NpcTrigger::operator==(NpcTrigger& other) const +bool NpcTrigger::operator==(const NpcTrigger& other) const { return (area==other.area && trigger==other.trigger && priorresponseID==other.priorresponseID); }; -bool NpcTrigger::operator<(NpcTrigger& other) const +bool NpcTrigger::operator<(const NpcTrigger& other) const { if (strcmp(area,other.area)<0) return true; Modified: trunk/src/server/bulkobjects/dictionary.h =================================================================== --- trunk/src/server/bulkobjects/dictionary.h 2009-05-15 21:42:54 UTC (rev 3697) +++ trunk/src/server/bulkobjects/dictionary.h 2009-05-15 23:23:30 UTC (rev 3698) @@ -234,6 +234,16 @@ } }; +template<> +class csComparator<NpcTrigger* , NpcTrigger*> +{ +public: + static int Compare(NpcTrigger* const &r1, NpcTrigger* const &r2) + { + return csComparator<NpcTrigger, NpcTrigger>::Compare(*r1, *r2); + } +}; + class NpcTrigger { public: @@ -254,10 +264,10 @@ int GetRandomResponse( const csArray<int> &availableResponseList); /// Compare two triggers. Used when searching for triggers. - bool operator==(NpcTrigger& other) const; + bool operator==(const NpcTrigger& other) const; /// Compare two triggers. Used when searching for triggers. - bool operator<(NpcTrigger& other) const; + bool operator<(const NpcTrigger& other) const; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-05-20 02:35:23
|
Revision: 3747 http://planeshift.svn.sourceforge.net/planeshift/?rev=3747&view=rev Author: kougaro Date: 2009-05-20 02:35:14 +0000 (Wed, 20 May 2009) Log Message: ----------- Fixed the /drop command, plus a few comments improvements Modified Paths: -------------- trunk/src/server/bulkobjects/pscharinventory.cpp trunk/src/server/bulkobjects/pscharinventory.h Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2009-05-20 02:26:47 UTC (rev 3746) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2009-05-20 02:35:14 UTC (rev 3747) @@ -1254,7 +1254,7 @@ return items; } -psItem* psCharacterInventory::StackNumberItems(const char * itemname, int count, bool container) +psItem* psCharacterInventory::StackNumberItems(const csString & itemname, int count, bool container) { psItem* stackItem = NULL; @@ -1262,7 +1262,7 @@ unsigned int i; for (i = 1; i<inventory.GetSize(); i++) { - if (inventory[i].item->GetName() == itemname && !(inventory[i].item->IsInUse()) && + if (itemname.CompareNoCase(inventory[i].item->GetName()) && !(inventory[i].item->IsInUse()) && (container || (inventory[i].item->GetLocInParent(true) < PSCHARACTER_SLOT_BULK_END) )) { stackItem = inventory[i].item; @@ -1275,7 +1275,7 @@ for (unsigned int j = i+1;count > stackItem->GetStackCount() && j < inventory.GetSize(); j++) { - if (inventory[j].item->GetName() == itemname && !(inventory[j].item->IsInUse()) && + if (itemname.CompareNoCase(inventory[i].item->GetName()) && !(inventory[j].item->IsInUse()) && (container || (inventory[i].item->GetLocInParent(true) < PSCHARACTER_SLOT_BULK_END) )) { psItem* stackedItem = inventory[j].item; Modified: trunk/src/server/bulkobjects/pscharinventory.h =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.h 2009-05-20 02:26:47 UTC (rev 3746) +++ trunk/src/server/bulkobjects/pscharinventory.h 2009-05-20 02:35:14 UTC (rev 3747) @@ -65,11 +65,12 @@ //----------------------------------------------------------------------------- +/// used by psCharacter::CreateGlyphList() struct glyphSlotInfo { psItemStats * glyphType; - int purifyStatus; /* possible values are: 0=not purified 1=purifying 2=purified */ -}; // used by psCharacter::CreateGlyphList() + int purifyStatus; ///< possible values are: 0=not purified 1=purifying 2=purified +}; //----------------------------------------------------------------------------- @@ -87,7 +88,7 @@ class psCharacterInventoryItem { friend class psCharacterInventory; - psItem *item; /// must be ptr for polymorphism + psItem *item; ///< must be ptr for polymorphism public: psCharacterInventoryItem(psItem *it) { @@ -95,8 +96,8 @@ exchangeOfferSlot = -1; exchangeStackCount = 0; } - int exchangeOfferSlot; /// Slot in exchange offer window on client - int exchangeStackCount; /// count of items being offered, subset of stack in *item + int exchangeOfferSlot; ///< Slot in exchange offer window on client + int exchangeStackCount; ///< count of items being offered, subset of stack in *item psItem *GetItem() { return item; } // read-only, cannot clear }; @@ -325,7 +326,13 @@ */ csArray<psItem*> GetItemsInCategory(psItemCategory * category); - psItem* StackNumberItems(const char * itemname, int count, bool container); + /** Iterates over the inventory, stacking items + * @param itemname Name of the item to be stacked + * @param count quantity up to which items should be stacked + * @param decide whether to look into containers in the inventory + * @return The pointer to the stacked item, or NULL if nothing is found + */ + psItem* StackNumberItems(const csString & itemname, int count, bool container); size_t GetContainedItemCount(psItem *container); @@ -350,7 +357,7 @@ /// Get the inventory cache handler psInventoryCacheServer * GetInventoryCacheServer (void) { return &inventoryCacheServer; } - // Check if the character has a list of required purified glyphs. + /// Check if the character has a list of required purified glyphs. bool HasPurifiedGlyphs(const glyphList_t glyphsToCheck); /// Make an array of types of glyphs in the inventory - prefer purified. @@ -379,12 +386,14 @@ */ INVENTORY_SLOT_NUMBER FindFreeEquipSlot(psItem* itemToPlace); - /// Return a count of items in the base inventory array. - /// This should be used only for debug output. + /** Return a count of items in the base inventory array. + * This should be used only for debug output. + */ size_t GetInventoryIndexCount() { return inventory.GetSize(); } - /// Return the psItem at the inventory index specified - /// This should be used only for debug output + /** Return the psItem at the inventory index specified + *This should be used only for debug output + */ psItem *GetInventoryIndexItem(size_t which) { return inventory[which].item; } /// Returns the exchange info and the item in the index specified This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-06-20 15:43:13
|
Revision: 3852 http://planeshift.svn.sourceforge.net/planeshift/?rev=3852&view=rev Author: weltall2 Date: 2009-06-20 15:42:11 +0000 (Sat, 20 Jun 2009) Log Message: ----------- added a trait prerequisite <trait name="name of the trait" location="Name of location" /> 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-06-20 10:30:52 UTC (rev 3851) +++ trunk/src/server/bulkobjects/psquest.cpp 2009-06-20 15:42:11 UTC (rev 3852) @@ -404,6 +404,23 @@ prerequisite.AttachNew(new psQuestPrereqOpKnownSpell(spell)); } + else if ( strcmp( topNode->GetValue(), "trait" ) == 0 ) + { + csString name = topNode->GetAttributeValue("name"); + if (name.IsEmpty()) + { + Error1("No name given for trait prerequisite operation"); + return false; + } + csString location = topNode->GetAttributeValue("name"); + if (location.IsEmpty()) + { + Error1("No location given for trait prerequisite operation"); + return false; + } + + prerequisite.AttachNew(new psQuestPrereqOpTrait(name, location)); + } else if ( strcmp( topNode->GetValue(), "guild" ) == 0 ) { csString type = topNode->GetAttributeValue("type"); Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-06-20 10:30:52 UTC (rev 3851) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-06-20 15:42:11 UTC (rev 3852) @@ -40,6 +40,7 @@ #include "cachemanager.h" #include "psraceinfo.h" #include "psguildinfo.h" +#include "pstrait.h" /////////////////////////////////////////////////////////////////////////////////////////// @@ -412,6 +413,37 @@ /////////////////////////////////////////////////////////////////////////////////////////// +bool psQuestPrereqOpTrait::Check(psCharacter * character) +{ + if (character->GetActor()) + { + psTrait* TraitToCheck = character->GetTraitForLocation(TraitLocation); + if(TraitToCheck) + { + return TraitToCheck->name == TraitName; + } + } + return false; +} + +csString psQuestPrereqOpTrait::GetScriptOp() +{ + csString script; + + script.Format("<trait name=\"%s\" location=\"%s\"/>", TraitName.GetData(), psTrait::locationString[(int)TraitLocation]); + + return script; +} + +csPtr<psQuestPrereqOp> psQuestPrereqOpTrait::Copy() +{ + csRef<psQuestPrereqOpTrait> copy; + copy.AttachNew(new psQuestPrereqOpTrait(TraitName, psTrait::locationString[(int)TraitLocation])); + return csPtr<psQuestPrereqOp>(copy); +} + +/////////////////////////////////////////////////////////////////////////////////////////// + bool psQuestPrereqOpRace::Check(psCharacter * character) { if (character->GetRaceInfo()) Modified: trunk/src/server/bulkobjects/psquestprereqops.h =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.h 2009-06-20 10:30:52 UTC (rev 3851) +++ trunk/src/server/bulkobjects/psquestprereqops.h 2009-06-20 15:42:11 UTC (rev 3852) @@ -30,6 +30,8 @@ // Project Includes //============================================================================= +#include "pstrait.h" + //============================================================================= // Local Includes //============================================================================= @@ -707,6 +709,69 @@ }; /** + * Trait prerequisite operator + * + * The actor must have a certain Trait in a certain position. + */ +class psQuestPrereqOpTrait : public psQuestPrereqOp +{ + protected: + csString TraitName; + PSTRAIT_LOCATION TraitLocation; + + public: + + /** + * Construct a Trait operator + * + * @param activeMagic The name of the magic that's required to be active + */ + psQuestPrereqOpTrait(const char *TraitName, csString TraitLocationString):TraitName(TraitName) + { + for(int position = PSTRAIT_LOCATION_NONE; position < PSTRAIT_LOCATION_COUNT; position++) + { + if ((csString)psTrait::locationString[position] == TraitLocationString) + { + TraitLocation = (PSTRAIT_LOCATION) position; + break; + } + } + // TraitLocation = (PSTRAIT_LOCATION)1; + + }; + + virtual ~psQuestPrereqOpTrait() {} + + /** + * Check if the specified trait is present + * + * @param character The character that are checking for a prerequisite + * @return True if the trait is present. + */ + virtual bool Check(psCharacter * character); + + /** + * Convert the prerequisite operator to a xml string + * + * Convert the operator into the xml string: + * <activemagic name="-activemagic"/> + * + * @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(); +}; + +/** * race prerequisite operator * * The actor must be of a certain race. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-07-16 23:51:59
|
Revision: 4037 http://planeshift.svn.sourceforge.net/planeshift/?rev=4037&view=rev Author: kougaro Date: 2009-07-16 23:51:55 +0000 (Thu, 16 Jul 2009) Log Message: ----------- Fix to PS#2443 - Wrong Stacking Behavior Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/psitem.cpp Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2009-07-16 22:34:38 UTC (rev 4036) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2009-07-16 23:51:55 UTC (rev 4037) @@ -1247,6 +1247,9 @@ // already have a pointer. Plus, well get NULL and crash if it isn't... inventory.RemoveItemID(item->GetUID()); + if(guarded) //if we want to guard the item assign the guarding pid + item->SetGuardingCharacterID(pid); + gemObject* obj = EntityManager::GetSingleton().MoveItemToWorld(item, location.worldInstance, location.loc_sector, suggestedPos.x, suggestedPos.y, suggestedPos.z, @@ -1256,8 +1259,6 @@ { // Assign new object to replace the original object item = obj->GetItem(); - if(guarded) //if we want to guard the item assign the guarding pid - item->SetGuardingCharacterID(pid); } psMoney money; Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2009-07-16 22:34:38 UTC (rev 4036) +++ trunk/src/server/bulkobjects/psitem.cpp 2009-07-16 23:51:55 UTC (rev 4037) @@ -1325,7 +1325,9 @@ return false; } - if (GetGuardingCharacterID() != otheritem->GetGuardingCharacterID()) + // if both are non null and different + if (GetGuardingCharacterID() != otheritem->GetGuardingCharacterID() && + GetGuardingCharacterID() != 0 && otheritem->GetGuardingCharacterID() != 0) return false; // TODO: Check effects @@ -1476,6 +1478,10 @@ if (owning_character) owning_character->Inventory().UpdateEncumbrance(); + // if this item has no guarding character, and the other has one, keep it + if(GetGuardingCharacterID() == 0) + SetGuardingCharacterID(stackme->GetGuardingCharacterID()); + // Average charges int newCharges = (GetCharges()*GetStackCount() + stackme->GetCharges()*stackme->GetStackCount())/newStackCount; SetCharges(newCharges); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-07-23 18:31:15
|
Revision: 4107 http://planeshift.svn.sourceforge.net/planeshift/?rev=4107&view=rev Author: weltall2 Date: 2009-07-23 18:31:10 +0000 (Thu, 23 Jul 2009) Log Message: ----------- made the stamina regen ratio function use math scripts. the needed data in the svn db will be added later Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2009-07-23 17:39:10 UTC (rev 4106) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2009-07-23 18:31:10 UTC (rev 4107) @@ -81,9 +81,13 @@ const char *psCharacter::characterTypeName[] = { "player", "npc", "pet", "mount" }; -MathScript *psCharacter::maxRealmScript = NULL; -MathScript *psCharacter::staminaCalc = NULL; -MathScript *psCharacter::expSkillCalc = NULL; +MathScript *psCharacter::maxRealmScript = NULL; +MathScript *psCharacter::staminaCalc = NULL; +MathScript *psCharacter::expSkillCalc = NULL; +MathScript *psCharacter::staminaRatioWalk = NULL; +MathScript *psCharacter::staminaRatioStand = NULL; +MathScript *psCharacter::staminaRatioSit = NULL; +MathScript *psCharacter::staminaRatioWork = NULL; //----------------------------------------------------------------------------- @@ -207,6 +211,46 @@ } } + if (!staminaRatioWalk) + { + staminaRatioWalk = psserver->GetMathScriptEngine()->FindScript("StaminaRatioWalk"); + if (!staminaRatioWalk) + { + Error1("Can't find math script StaminaRatioWalk!"); + return false; + } + } + + if (!staminaRatioStand) + { + staminaRatioStand = psserver->GetMathScriptEngine()->FindScript("StaminaRatioStand"); + if (!staminaRatioStand) + { + Error1("Can't find math script StaminaRatioStand!"); + return false; + } + } + + if (!staminaRatioSit) + { + staminaRatioSit = psserver->GetMathScriptEngine()->FindScript("StaminaRatioSit"); + if (!staminaRatioSit) + { + Error1("Can't find math script StaminaRatioSit!"); + return false; + } + } + + if (!staminaRatioWork) + { + staminaRatioWork = psserver->GetMathScriptEngine()->FindScript("StaminaRatioWork"); + if (!staminaRatioWork) + { + Error1("Can't find math script StaminaRatioWork!"); + return false; + } + } + if (!expSkillCalc) { expSkillCalc = psserver->GetMathScriptEngine()->FindScript("Calculate Skill Experience"); @@ -1657,20 +1701,60 @@ void psCharacter::SetStaminaRegenerationWalk(bool physical,bool mental) { - if(physical) GetPStaminaRate().SetBase(GetMaxPStamina().Current()/100 * GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_PHYSICAL_WALK]); - if(mental) GetMStaminaRate().SetBase(GetMaxMStamina().Current()/100 * GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_MENTAL_WALK]); + MathEnvironment env; + env.Define("Character", this); + env.Define("BaseRegenPhysical", GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_PHYSICAL_WALK]); + env.Define("BaseRegenMental", GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_MENTAL_WALK]); + + staminaCalc->Evaluate(&env); + + MathVar *ratePhy = env.Lookup("PStaminaRate"); + MathVar *rateMen = env.Lookup("MStaminaRate"); + + if(physical && ratePhy) GetPStaminaRate().SetBase(ratePhy->GetValue()); + if(mental && rateMen) GetMStaminaRate().SetBase(rateMen->GetValue()); + + //if(physical) GetPStaminaRate().SetBase(GetMaxPStamina().Current()/100 * GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_PHYSICAL_WALK]); + //if(mental) GetMStaminaRate().SetBase(GetMaxMStamina().Current()/100 * GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_MENTAL_WALK]); } void psCharacter::SetStaminaRegenerationSitting() { - GetPStaminaRate().SetBase(GetMaxPStamina().Current() * 0.015 * GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_PHYSICAL_STILL]); - GetMStaminaRate().SetBase(GetMaxMStamina().Current() * 0.015 * GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_MENTAL_STILL]); + MathEnvironment env; + env.Define("Character", this); + env.Define("BaseRegenPhysical", GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_PHYSICAL_STILL]); + env.Define("BaseRegenMental", GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_MENTAL_STILL]); + + staminaCalc->Evaluate(&env); + + MathVar *ratePhy = env.Lookup("PStaminaRate"); + MathVar *rateMen = env.Lookup("MStaminaRate"); + + if(ratePhy) GetPStaminaRate().SetBase(ratePhy->GetValue()); + if(rateMen) GetMStaminaRate().SetBase(rateMen->GetValue()); + + //GetPStaminaRate().SetBase(GetMaxPStamina().Current() * 0.015 * GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_PHYSICAL_STILL]); + //GetMStaminaRate().SetBase(GetMaxMStamina().Current() * 0.015 * GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_MENTAL_STILL]); } void psCharacter::SetStaminaRegenerationStill(bool physical,bool mental) { - if(physical) GetPStaminaRate().SetBase(GetMaxPStamina().Current()/100 * GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_PHYSICAL_STILL]); - if(mental) GetMStaminaRate().SetBase(GetMaxMStamina().Current()/100 * GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_MENTAL_STILL]); + + MathEnvironment env; + env.Define("Character", this); + env.Define("BaseRegenPhysical", GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_PHYSICAL_STILL]); + env.Define("BaseRegenMental", GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_MENTAL_STILL]); + + staminaCalc->Evaluate(&env); + + MathVar *ratePhy = env.Lookup("PStaminaRate"); + MathVar *rateMen = env.Lookup("MStaminaRate"); + + if(physical && ratePhy) GetPStaminaRate().SetBase(ratePhy->GetValue()); + if(mental && rateMen) GetMStaminaRate().SetBase(rateMen->GetValue()); + + //if(physical) GetPStaminaRate().SetBase(GetMaxPStamina().Current()/100 * GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_PHYSICAL_STILL]); + //if(mental) GetMStaminaRate().SetBase(GetMaxMStamina().Current()/100 * GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_MENTAL_STILL]); } void psCharacter::SetStaminaRegenerationWork(int skill) @@ -1679,13 +1763,29 @@ if (actor->nevertired) return; + MathEnvironment env; + env.Define("Character", this); + env.Define("BaseRegenPhysical", GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_PHYSICAL_STILL]); + env.Define("BaseRegenMental", GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_MENTAL_STILL]); + // Need real formula for this. Shouldn't be hard coded anyway. // Stamina drain needs to be set depending on the complexity of the task. psSkillInfo* skillInfo = CacheManager::GetSingleton().GetSkillByID(skill); //if skill is none (-1) we set zero here int factor = skillInfo? skillInfo->mental_factor : 100; - GetPStaminaRate().SetBase(GetPStaminaRate().Base()-6.0*(100-factor)/100); - GetMStaminaRate().SetBase(GetMStaminaRate().Base()-6.0*(100-factor)/100); + + env.Define("SkillMentalFactor", factor); + + staminaCalc->Evaluate(&env); + + MathVar *ratePhy = env.Lookup("PStaminaRate"); + MathVar *rateMen = env.Lookup("MStaminaRate"); + + if(ratePhy) GetPStaminaRate().SetBase(ratePhy->GetValue()); + if(rateMen) GetMStaminaRate().SetBase(rateMen->GetValue()); + + //GetPStaminaRate().SetBase(GetPStaminaRate().Base()-6.0*(100-factor)/100); + //GetMStaminaRate().SetBase(GetMStaminaRate().Base()-6.0*(100-factor)/100); } void psCharacter::CalculateMaxStamina() Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2009-07-23 17:39:10 UTC (rev 4106) +++ trunk/src/server/bulkobjects/pscharacter.h 2009-07-23 18:31:10 UTC (rev 4107) @@ -1129,6 +1129,10 @@ static MathScript *maxRealmScript; static MathScript *staminaCalc; ///< The stamina calc script static MathScript *expSkillCalc; ///< The exp calc script to assign experience on skill ranking + static MathScript *staminaRatioWalk; ///< The stamina regen ration while walking script + static MathScript *staminaRatioStand;///< The stamina regen ration while standing script + static MathScript *staminaRatioSit; ///< The stamina regen ration while sitting script + static MathScript *staminaRatioWork; ///< The stamina regen ration while working script protected: csString lastlogintime;///< String value copied from the database containing the last login time This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-07-23 18:37:20
|
Revision: 4108 http://planeshift.svn.sourceforge.net/planeshift/?rev=4108&view=rev Author: weltall2 Date: 2009-07-23 18:37:18 +0000 (Thu, 23 Jul 2009) Log Message: ----------- forgot one thing Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2009-07-23 18:31:10 UTC (rev 4107) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2009-07-23 18:37:18 UTC (rev 4108) @@ -85,7 +85,7 @@ MathScript *psCharacter::staminaCalc = NULL; MathScript *psCharacter::expSkillCalc = NULL; MathScript *psCharacter::staminaRatioWalk = NULL; -MathScript *psCharacter::staminaRatioStand = NULL; +MathScript *psCharacter::staminaRatioStill = NULL; MathScript *psCharacter::staminaRatioSit = NULL; MathScript *psCharacter::staminaRatioWork = NULL; @@ -1706,7 +1706,7 @@ env.Define("BaseRegenPhysical", GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_PHYSICAL_WALK]); env.Define("BaseRegenMental", GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_MENTAL_WALK]); - staminaCalc->Evaluate(&env); + staminaRatioWalk->Evaluate(&env); MathVar *ratePhy = env.Lookup("PStaminaRate"); MathVar *rateMen = env.Lookup("MStaminaRate"); @@ -1725,7 +1725,7 @@ env.Define("BaseRegenPhysical", GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_PHYSICAL_STILL]); env.Define("BaseRegenMental", GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_MENTAL_STILL]); - staminaCalc->Evaluate(&env); + staminaRatioSit->Evaluate(&env); MathVar *ratePhy = env.Lookup("PStaminaRate"); MathVar *rateMen = env.Lookup("MStaminaRate"); @@ -1745,7 +1745,7 @@ env.Define("BaseRegenPhysical", GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_PHYSICAL_STILL]); env.Define("BaseRegenMental", GetRaceInfo()->baseRegen[PSRACEINFO_STAMINA_MENTAL_STILL]); - staminaCalc->Evaluate(&env); + staminaRatioStill->Evaluate(&env); MathVar *ratePhy = env.Lookup("PStaminaRate"); MathVar *rateMen = env.Lookup("MStaminaRate"); @@ -1776,7 +1776,7 @@ env.Define("SkillMentalFactor", factor); - staminaCalc->Evaluate(&env); + staminaRatioWork->Evaluate(&env); MathVar *ratePhy = env.Lookup("PStaminaRate"); MathVar *rateMen = env.Lookup("MStaminaRate"); Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2009-07-23 18:31:10 UTC (rev 4107) +++ trunk/src/server/bulkobjects/pscharacter.h 2009-07-23 18:37:18 UTC (rev 4108) @@ -1130,7 +1130,7 @@ static MathScript *staminaCalc; ///< The stamina calc script static MathScript *expSkillCalc; ///< The exp calc script to assign experience on skill ranking static MathScript *staminaRatioWalk; ///< The stamina regen ration while walking script - static MathScript *staminaRatioStand;///< The stamina regen ration while standing script + static MathScript *staminaRatioStill;///< The stamina regen ration while standing script static MathScript *staminaRatioSit; ///< The stamina regen ration while sitting script static MathScript *staminaRatioWork; ///< The stamina regen ration while working script This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-07-27 23:48:59
|
Revision: 4142 http://planeshift.svn.sourceforge.net/planeshift/?rev=4142&view=rev Author: Vengeance2001 Date: 2009-07-27 23:48:50 +0000 (Mon, 27 Jul 2009) Log Message: ----------- Improved error messages a bit in character loading. Fixed FS1720, allowing people to give any combination of coins to match a certain number of tria expected by an npc. The npc must be expecting tria. (It doesn't do "any to any" conversion, just to tria.) Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/psnpcdialog.cpp Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2009-07-27 21:34:14 UTC (rev 4141) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2009-07-27 23:48:50 UTC (rev 4142) @@ -206,7 +206,7 @@ staminaCalc = psserver->GetMathScriptEngine()->FindScript("StaminaBase"); if (!staminaCalc) { - Error1("Can't find math script StaminaBase!"); + Error1("Can't find math script StaminaBase! Character loading failed."); return false; } } @@ -216,7 +216,7 @@ staminaRatioWalk = psserver->GetMathScriptEngine()->FindScript("StaminaRatioWalk"); if (!staminaRatioWalk) { - Error1("Can't find math script StaminaRatioWalk!"); + Error1("Can't find math script StaminaRatioWalk! Character loading failed."); return false; } } @@ -226,7 +226,7 @@ staminaRatioStill = psserver->GetMathScriptEngine()->FindScript("StaminaRatioStill"); if (!staminaRatioStill) { - Error1("Can't find math script StaminaRatioStill!"); + Error1("Can't find math script StaminaRatioStill! Character loading failed."); return false; } } @@ -236,7 +236,7 @@ staminaRatioSit = psserver->GetMathScriptEngine()->FindScript("StaminaRatioSit"); if (!staminaRatioSit) { - Error1("Can't find math script StaminaRatioSit!"); + Error1("Can't find math script StaminaRatioSit! Character loading failed."); return false; } } @@ -246,7 +246,7 @@ staminaRatioWork = psserver->GetMathScriptEngine()->FindScript("StaminaRatioWork"); if (!staminaRatioWork) { - Error1("Can't find math script StaminaRatioWork!"); + Error1("Can't find math script StaminaRatioWork! Character loading failed."); return false; } } @@ -256,7 +256,7 @@ expSkillCalc = psserver->GetMathScriptEngine()->FindScript("Calculate Skill Experience"); if (!expSkillCalc) { - Error1("Can't find 'Calculate Skill Experience' math script."); + Error1("Can't find 'Calculate Skill Experience' math script. Character loading failed."); return false; } } @@ -266,7 +266,7 @@ maxRealmScript = psserver->GetMathScriptEngine()->FindScript("MaxRealm"); if (!maxRealmScript) { - Error1("Can't find math script MaxRealm!"); + Error1("Can't find math script MaxRealm! Character loading failed."); return false; } } @@ -284,7 +284,7 @@ psRaceInfo *raceinfo = CacheManager::GetSingleton().GetRaceInfoByID(raceid); if (!raceinfo) { - Error3("Character ID %s has unknown race id %s.",row["id"],row["racegender_id"]); + Error3("Character ID %s has unknown race id %s. Character loading failed.",row["id"],row["racegender_id"]); return false; } SetRaceInfo(raceinfo); @@ -339,7 +339,7 @@ if (!LoadSkills(use_id)) { - Error2("Cannot load skills for Character %s.", ShowID(pid)); + Error2("Cannot load skills for Character %s. Character loading failed.", ShowID(pid)); return false; } @@ -423,7 +423,7 @@ if (!LoadTraits(use_id)) { - Error2("Cannot load traits for Character %s.", ShowID(pid)); + Error2("Cannot load traits for Character %s. Character loading failed.", ShowID(pid)); return false; } @@ -436,7 +436,7 @@ } if (!LoadAdvantages(use_id)) { - Error2("Cannot load advantages for Character %s.", ShowID(pid)); + Error2("Cannot load advantages for Character %s. Character loading failed.", ShowID(pid)); return false; } @@ -452,13 +452,13 @@ { if (!LoadQuestAssignments()) { - Error2("Cannot load quest assignments for Character %s.", ShowID(pid)); + Error2("Cannot load quest assignments for Character %s. Character loading failed.", ShowID(pid)); return false; } if (!LoadGMEvents()) { - Error2("Cannot load GM Events for Character %s.", ShowID(pid)); + Error2("Cannot load GM Events for Character %s. Character loading failed.", ShowID(pid)); return false; } @@ -477,7 +477,7 @@ // from the master npc. if (!inventory.Load(use_id)) { - Error2("Cannot load character specific items for Character %s.", ShowID(pid)); + Error2("Cannot load character specific items for Character %s. Character loading failed.", ShowID(pid)); return false; } } @@ -535,7 +535,7 @@ } if (!LoadSpells(use_id)) { - Error2("Cannot load spells for Character %s.", ShowID(pid)); + Error2("Cannot load spells for Character %s. Character loading failed.", ShowID(pid)); return false; } Modified: trunk/src/server/bulkobjects/psnpcdialog.cpp =================================================================== --- trunk/src/server/bulkobjects/psnpcdialog.cpp 2009-07-27 21:34:14 UTC (rev 4141) +++ trunk/src/server/bulkobjects/psnpcdialog.cpp 2009-07-27 23:48:50 UTC (rev 4142) @@ -388,7 +388,8 @@ if (currentClient && !resp && TestedWithoutLastResponse) { //set general last response to -1 so it is not tested again later on - currentClient->GetCharacterData()->SetLastResponse(-1); + //currentClient->GetCharacterData()->SetLastResponse(-1); + // I commented out the above because searching unsuccessfully should not have the side effect of blowing away the last valid response. KWF } return resp; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-08-05 09:50:45
|
Revision: 4185 http://planeshift.svn.sourceforge.net/planeshift/?rev=4185&view=rev Author: weltall2 Date: 2009-08-05 09:50:38 +0000 (Wed, 05 Aug 2009) Log Message: ----------- Added a setmoney method working with basestats and taking an amount as parameter Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2009-08-05 06:31:14 UTC (rev 4184) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2009-08-05 09:50:38 UTC (rev 4185) @@ -1507,7 +1507,7 @@ /// Check to see if the item is a money item and treat as a special case. if ( itemdata->GetBaseStats()->GetFlags() & PSITEMSTATS_FLAG_TRIA ) money.AdjustTrias( itemdata->GetStackCount() ); - + if ( itemdata->GetBaseStats()->GetFlags() & PSITEMSTATS_FLAG_HEXA ) money.AdjustHexas( itemdata->GetStackCount() ); @@ -1521,8 +1521,24 @@ SaveMoney(false); } +void psCharacter::SetMoney(psItemStats* MoneyObject, int amount) +{ + /// Check to see if the item is a money item and treat as a special case. + if ( MoneyObject->GetFlags() & PSITEMSTATS_FLAG_TRIA ) + money.AdjustTrias(amount); + if ( MoneyObject->GetFlags() & PSITEMSTATS_FLAG_HEXA ) + money.AdjustHexas(amount); + if ( MoneyObject->GetFlags() & PSITEMSTATS_FLAG_OCTA ) + money.AdjustOctas(amount); + + if ( MoneyObject->GetFlags() & PSITEMSTATS_FLAG_CIRCLE ) + money.AdjustCircles(amount); + + SaveMoney(false); +} + void psCharacter::AdjustMoney(psMoney m, bool bank) { psMoney *mon; Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2009-08-05 06:31:14 UTC (rev 4184) +++ trunk/src/server/bulkobjects/pscharacter.h 2009-08-05 09:50:38 UTC (rev 4185) @@ -570,6 +570,15 @@ * @param moneyObject The money object that was just picked up. */ void SetMoney( psItem *& moneyObject ); + + /** @brief Add a certain amount of a money object to the current wallet based on the baseitem data. + * + * This is used to give rewards in gmeventmanager for now. + * + * @param MoneyObject The money base object which was rewarded. + * @param amount The amount of the base object which was rewarded. + */ + void SetMoney(psItemStats* MoneyObject, int amount) void AdjustMoney(psMoney m, bool bank); void SaveMoney(bool bank); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-08-25 18:45:14
|
Revision: 4254 http://planeshift.svn.sourceforge.net/planeshift/?rev=4254&view=rev Author: weltall2 Date: 2009-08-25 18:45:07 +0000 (Tue, 25 Aug 2009) Log Message: ----------- better to put this void if we have to return NULL Modified Paths: -------------- trunk/src/server/bulkobjects/psguildinfo.cpp trunk/src/server/bulkobjects/psguildinfo.h Modified: trunk/src/server/bulkobjects/psguildinfo.cpp =================================================================== --- trunk/src/server/bulkobjects/psguildinfo.cpp 2009-08-25 18:10:45 UTC (rev 4253) +++ trunk/src/server/bulkobjects/psguildinfo.cpp 2009-08-25 18:45:07 UTC (rev 4254) @@ -258,7 +258,7 @@ return NULL; } -psGuildLevel *psGuildInfo::Connect(psCharacter *player) +void psGuildInfo::Connect(psCharacter *player) { for (size_t i=0; i<members.GetSize(); i++) { @@ -268,7 +268,6 @@ members[i]->actor = player; } } - return NULL; } void psGuildInfo::Disconnect(psCharacter *player) Modified: trunk/src/server/bulkobjects/psguildinfo.h =================================================================== --- trunk/src/server/bulkobjects/psguildinfo.h 2009-08-25 18:10:45 UTC (rev 4253) +++ trunk/src/server/bulkobjects/psguildinfo.h 2009-08-25 18:45:07 UTC (rev 4254) @@ -157,8 +157,8 @@ bool InsertNew(PID leader_char_id); bool RemoveGuild(); - psGuildLevel *Connect(psCharacter *player); ///< Find existing and set actor - void Disconnect(psCharacter *player); ///< Find actor, remove and check for delete if last one + void Connect(psCharacter *player); ///< Find existing and set actor + void Disconnect(psCharacter *player); ///< Find actor, remove and check for delete if last one psGuildMember *FindMember(const char *name); psGuildMember *FindMember(PID char_id); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-08-31 21:26:13
|
Revision: 4295 http://planeshift.svn.sourceforge.net/planeshift/?rev=4295&view=rev Author: weltall2 Date: 2009-08-31 21:26:06 +0000 (Mon, 31 Aug 2009) Log Message: ----------- Finally fixed the last login time issue with guildinfo cache Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/psguildinfo.cpp trunk/src/server/bulkobjects/psguildinfo.h Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2009-08-31 20:06:30 UTC (rev 4294) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2009-08-31 21:26:06 UTC (rev 4295) @@ -804,6 +804,8 @@ } this->lastlogintime = timeStr; + + guildinfo->UpdateLastLogin(this); if ( save ) { Modified: trunk/src/server/bulkobjects/psguildinfo.cpp =================================================================== --- trunk/src/server/bulkobjects/psguildinfo.cpp 2009-08-31 20:06:30 UTC (rev 4294) +++ trunk/src/server/bulkobjects/psguildinfo.cpp 2009-08-31 21:26:06 UTC (rev 4295) @@ -260,13 +260,13 @@ void psGuildInfo::Connect(psCharacter *player) { + printf("a\n"); for (size_t i=0; i<members.GetSize(); i++) { if (members[i]->char_id == player->GetPID()) { player->SetGuild(this); members[i]->actor = player; - members[i]->last_login = player->GetLastLoginTime(); } } } @@ -285,6 +285,19 @@ } } +void psGuildInfo::UpdateLastLogin(psCharacter *player) +{ + //updates last login informations for this member + for (size_t i=0; i<members.GetSize(); i++) + { + if (members[i]->actor == player) + { + members[i]->last_login = player->GetLastLoginTime(); + break; + } + } +} + bool psGuildInfo::AddNewMember(psCharacter *player, int level) { if (player->GetGuild()) Modified: trunk/src/server/bulkobjects/psguildinfo.h =================================================================== --- trunk/src/server/bulkobjects/psguildinfo.h 2009-08-31 20:06:30 UTC (rev 4294) +++ trunk/src/server/bulkobjects/psguildinfo.h 2009-08-31 21:26:06 UTC (rev 4295) @@ -159,6 +159,7 @@ void Connect(psCharacter *player); ///< Find existing and set actor void Disconnect(psCharacter *player); ///< Find actor, remove and check for delete if last one + void UpdateLastLogin(psCharacter *player);///< Updates the last login informations for this player psGuildMember *FindMember(const char *name); psGuildMember *FindMember(PID char_id); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-09-02 16:56:09
|
Revision: 4305 http://planeshift.svn.sourceforge.net/planeshift/?rev=4305&view=rev Author: weltall2 Date: 2009-09-02 16:56:01 +0000 (Wed, 02 Sep 2009) Log Message: ----------- merged $npc substitution used in voice file names to the substitutekeywords function and made use of it even to substitute parts of the voice filename so additional keywords can be used there (like $time, $playerrace or $sir) Modified Paths: -------------- trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/psnpcdialog.cpp Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2009-09-01 19:31:55 UTC (rev 4304) +++ trunk/src/server/bulkobjects/dictionary.cpp 2009-09-02 16:56:01 UTC (rev 4305) @@ -1447,9 +1447,9 @@ } else if(voiceNumber >= 0) //if it's >= 0. we have to run a voice, else -1 and -2 means we have nothing to do { - //substituites $npc with the npcname + //substituites $keywords csString voiceFile = this->GetVoiceFile(voiceNumber); - voiceFile.ReplaceAll("$npc", target->GetName()); + target->GetNPCDialogPtr()->SubstituteKeywords(player->GetClient(),voiceFile); //executes the voice file psserver->GetChatManager()->SendMultipleAudioFileHashes(player->GetClient(), voiceFile); Modified: trunk/src/server/bulkobjects/psnpcdialog.cpp =================================================================== --- trunk/src/server/bulkobjects/psnpcdialog.cpp 2009-09-01 19:31:55 UTC (rev 4304) +++ trunk/src/server/bulkobjects/psnpcdialog.cpp 2009-09-02 16:56:01 UTC (rev 4305) @@ -520,6 +520,13 @@ Error4("Failed to replace substring %s in %s with %s",word.GetData(),response.GetData(),timestr.GetData()); } } + else if (word == "$npc") + { + if(response.ReplaceSubString(word,self->GetName())) + { + Error4("Failed to replace substring %s in %s with %s",word.GetData(),response.GetData(),player->GetName()); + } + } where = response.FindSubString(dollarsign,where+1); } resp = response; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-09-05 13:42:33
|
Revision: 4312 http://planeshift.svn.sourceforge.net/planeshift/?rev=4312&view=rev Author: weltall2 Date: 2009-09-05 13:42:25 +0000 (Sat, 05 Sep 2009) Log Message: ----------- added a guild name prereq op 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-09-05 10:27:19 UTC (rev 4311) +++ trunk/src/server/bulkobjects/psquest.cpp 2009-09-05 13:42:25 UTC (rev 4312) @@ -428,8 +428,10 @@ Error1("No type given for guild prerequisite operation"); return false; } + + csString name = topNode->GetAttributeValue("name"); - prerequisite.AttachNew(new psQuestPrereqOpGuild(type)); + prerequisite.AttachNew(new psQuestPrereqOpGuild(type, name)); } else if ( strcmp( topNode->GetValue(), "married" ) == 0 ) //wrap in <not></not> to reverse { Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-09-05 10:27:19 UTC (rev 4311) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-09-05 13:42:25 UTC (rev 4312) @@ -533,6 +533,8 @@ } else { + if(character->GetGuild()->GetName() != GuildName) //first check the name, if any + return false; if(guildtype == "both") //no need to check for the case it's in a guild return true; if(character->GetGuild()->IsSecret()) //the guild is secret @@ -547,7 +549,12 @@ { csString script; - script.Format("<guild type=\"%s\"/>", guildtype.GetData()); + script.Format("<guild type=\"%s\"", guildtype.GetData()); + if(GuildName.Length()) + { + script.AppendFmt("name=\"%s\"", GuildName.GetData()); + } + script += "/>"; return script; } @@ -555,7 +562,7 @@ csPtr<psQuestPrereqOp> psQuestPrereqOpGuild::Copy() { csRef<psQuestPrereqOpGuild> copy; - copy.AttachNew(new psQuestPrereqOpGuild(guildtype)); + copy.AttachNew(new psQuestPrereqOpGuild(guildtype, GuildName)); return csPtr<psQuestPrereqOp>(copy); } Modified: trunk/src/server/bulkobjects/psquestprereqops.h =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.h 2009-09-05 10:27:19 UTC (rev 4311) +++ trunk/src/server/bulkobjects/psquestprereqops.h 2009-09-05 13:42:25 UTC (rev 4312) @@ -930,6 +930,7 @@ { protected: csString guildtype; + csString GuildName; public: @@ -938,7 +939,7 @@ * * @param guildtype The type of guild the character must be */ - psQuestPrereqOpGuild(const char *guildtype):guildtype(guildtype){}; + psQuestPrereqOpGuild(const char *guildtype, const char *GuildName):guildtype(guildtype),GuildName(GuildName){}; virtual ~psQuestPrereqOpGuild() {} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |