From: <ken...@us...> - 2009-01-27 09:31:33
|
Revision: 2957 http://planeshift.svn.sourceforge.net/planeshift/?rev=2957&view=rev Author: kennygraunke Date: 2009-01-27 09:31:27 +0000 (Tue, 27 Jan 2009) Log Message: ----------- Implemented StatsOp (imperative mode) and add a temporary fix for character saving. Fixed bugs in StatsAOp (applied mode). Modified Paths: -------------- personal/Kayden/src/server/bulkobjects/pscharacterloader.cpp personal/Kayden/src/server/scripting.cpp Modified: personal/Kayden/src/server/bulkobjects/pscharacterloader.cpp =================================================================== --- personal/Kayden/src/server/bulkobjects/pscharacterloader.cpp 2009-01-27 08:06:28 UTC (rev 2956) +++ personal/Kayden/src/server/bulkobjects/pscharacterloader.cpp 2009-01-27 09:31:27 UTC (rev 2957) @@ -776,7 +776,7 @@ targetUpdate->AddField("faction_standings", csv.GetData()); // TODO: ActiveSpells - //targetUpdate->AddField("progression_script", scriptStr); + targetUpdate->AddField("progression_script", ""); targetUpdate->AddField("time_connected_sec", chardata->GetTotalOnlineTime()); targetUpdate->AddField("experience_points", chardata->GetExperiencePoints()); // Save W Modified: personal/Kayden/src/server/scripting.cpp =================================================================== --- personal/Kayden/src/server/scripting.cpp 2009-01-27 08:06:28 UTC (rev 2956) +++ personal/Kayden/src/server/scripting.cpp 2009-01-27 09:31:27 UTC (rev 2957) @@ -118,7 +118,6 @@ bool Load(iDocumentNode *node) { csString type(node->GetValue()); - PSITEMSTATS_STAT stat; if (type == "agi") stat = PSITEMSTATS_STAT_AGILITY; else if (type == "end") @@ -134,7 +133,7 @@ else return false; - return true; + return Applied1::Load(node); } void Run(const MathEnvironment *env, gemActor *target, ActiveSpell *asp) @@ -142,7 +141,9 @@ int val = (int) value->Evaluate(env); CharStat & buffable = target->GetCharacterData()->Stats()[stat]; buffable.Buff(asp, val); - asp->Add(buffable, "<agi value=\"%d\"/>", val); + + const char *strs[] = {"str", "agi", "end", "int", "wil", "cha"}; + asp->Add(buffable, "<%s value=\"%d\"/>", strs[stat], val); } protected: @@ -614,11 +615,54 @@ //---------------------------------------------------------------------------- +class StatsOp : public Imperative2 +{ +public: + StatsOp() : Imperative2() { } + virtual ~StatsOp() { } + + bool Load(iDocumentNode *node) + { + csString type(node->GetValue()); + printf("StatsOp::Load<%s>...\n", type.GetDataSafe()); + if (type == "agi") + stat = PSITEMSTATS_STAT_AGILITY; + else if (type == "end") + stat = PSITEMSTATS_STAT_ENDURANCE; + else if (type == "str") + stat = PSITEMSTATS_STAT_STRENGTH; + else if (type == "cha") + stat = PSITEMSTATS_STAT_CHARISMA; + else if (type == "int") + stat = PSITEMSTATS_STAT_INTELLIGENCE; + else if (type == "wil") + stat = PSITEMSTATS_STAT_WILL; + else + return false; + + return Imperative2::Load(node); + } + + void Run(const MathEnvironment *env) + { + psCharacter *c = GetCharacter(env, aim); + int val = (int) value->Evaluate(env); + CharStat & buffable = c->Stats()[stat]; + buffable.SetBase(buffable.Base() + val); + } + +protected: + PSITEMSTATS_STAT stat; //< which stat we're actually buffing +}; + +//---------------------------------------------------------------------------- + class ExpOp : public Imperative2 { public: ExpOp() : Imperative2() { } virtual ~ExpOp() { } + // AllocateKillDamage blah. void Run(const MathEnvironment *env) { @@ -713,8 +757,7 @@ } else if (elem == "agi" || elem == "end" || elem == "str" || elem == "cha" || elem == "int" || elem == "wil") { - printf("TODO: implement imperative stats\n"); - continue; + op = new StatsOp; } else if (elem == "skill") { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |