From: <wel...@us...> - 2012-12-09 22:24:50
|
Revision: 8499 http://planeshift.svn.sourceforge.net/planeshift/?rev=8499&view=rev Author: weltall2 Date: 2012-12-09 22:24:44 +0000 (Sun, 09 Dec 2012) Log Message: ----------- added additional error reporting Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2012-12-09 17:30:17 UTC (rev 8498) +++ trunk/src/server/scripting.cpp 2012-12-09 22:24:44 UTC (rev 8499) @@ -2857,6 +2857,7 @@ } else { + Error3("Operation >%s< failed loading in script >%s<", elem.GetData(), name); delete op; return NULL; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2013-09-14 22:22:26
|
Revision: 8799 http://sourceforge.net/p/planeshift/code/8799 Author: lpancallo Date: 2013-09-14 22:22:23 +0000 (Sat, 14 Sep 2013) Log Message: ----------- Send message of mechanism activated to all players in proxylist. Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2013-09-14 18:41:50 UTC (rev 8798) +++ trunk/src/server/scripting.cpp 2013-09-14 22:22:23 UTC (rev 8799) @@ -52,6 +52,7 @@ #include "events.h" #include "gem.h" #include "psserver.h" +#include "psproxlist.h" //============================================================================ // Convenience Functions @@ -2804,12 +2805,25 @@ gemActor* actor = GetActor(env, aim); + // send message to client about mechanism activated if(actor && actor->GetClientID()) { psMechanismActivateMessage msg(actor->GetClientID(), mesh.GetData(), move.GetData(), rot.GetData()); msg.SendMessage(); Debug1(LOG_ACTIONLOCATION,0,"Running MechanismMsgOp - SENT message to client"); } + + // send message to all players in range + csArray<PublishDestination> proxList = actor->GetProxList()->GetClients(); + for(size_t i = 0; i < proxList.GetSize(); i++) + { + if(actor->GetClientID() == proxList[i].client) + { + continue; + } + psMechanismActivateMessage msg(proxList[i].client, mesh.GetData(), move.GetData(), rot.GetData()); + msg.SendMessage(); + } } protected: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2013-11-13 18:58:40
|
Revision: 8975 http://sourceforge.net/p/planeshift/code/8975 Author: magodra Date: 2013-11-13 18:58:37 +0000 (Wed, 13 Nov 2013) Log Message: ----------- - Fixed use comment for createfamiliar operations. Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2013-11-13 17:43:00 UTC (rev 8974) +++ trunk/src/server/scripting.cpp 2013-11-13 18:58:37 UTC (rev 8975) @@ -2669,10 +2669,10 @@ * Create familiar for actor. * * Syntax: - * <createfamiliar aim="Actor"/> + * <createfamiliar aim="Actor" masterId="masterId" /> * Examples: * Create a familiar near actor and send message: - * <createfamiliar aim="Actor"/><msg text="Your new familiar appears nearby."/> + * <createfamiliar aim="Actor" masterId="1001"/><msg text="Your new familiar appears nearby."/> */ class CreateFamiliarOp : public Imperative1 { @@ -2698,12 +2698,6 @@ return; } - /*if (actor->GetCharacterData()->GetFamiliarID() != 0) - { - psserver->SendSystemInfo(actor->GetClientID(), "You already have a familiar, please take care of it."); - return; - }*/ - gemNPC* familiar = entityManager->CreateFamiliar(actor, masterPID); if(!familiar) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2013-12-21 21:23:30
|
Revision: 9092 http://sourceforge.net/p/planeshift/code/9092 Author: lpancallo Date: 2013-12-21 21:23:27 +0000 (Sat, 21 Dec 2013) Log Message: ----------- changed atk/def to float Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2013-12-21 21:05:14 UTC (rev 9091) +++ trunk/src/server/scripting.cpp 2013-12-21 21:23:27 UTC (rev 9092) @@ -425,8 +425,8 @@ { csString descr = type; MathEnvironment env; - int val = (int)value->Evaluate(&env); - descr.AppendFmt(": %d\n",val); + float val = value->Evaluate(&env); + descr.AppendFmt(": %0.2f\n",val); return descr; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2013-12-22 02:39:32
|
Revision: 9097 http://sourceforge.net/p/planeshift/code/9097 Author: magodra Date: 2013-12-22 02:39:30 +0000 (Sun, 22 Dec 2013) Log Message: ----------- Fixed missing check after dynamic cast. Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2013-12-22 02:27:05 UTC (rev 9096) +++ trunk/src/server/scripting.cpp 2013-12-22 02:39:30 UTC (rev 9097) @@ -681,7 +681,7 @@ return; } gemActor* caster = dynamic_cast<gemActor*>(var->GetObject()); - if(!var) + if(!caster) { return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ral...@us...> - 2014-04-11 23:58:07
|
Revision: 9409 http://sourceforge.net/p/planeshift/code/9409 Author: ralphcampbell Date: 2014-04-11 23:58:03 +0000 (Fri, 11 Apr 2014) Log Message: ----------- Fix CID 1139483 Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2014-04-11 23:53:22 UTC (rev 9408) +++ trunk/src/server/scripting.cpp 2014-04-11 23:58:03 UTC (rev 9409) @@ -371,7 +371,7 @@ class SkillAOp : public Applied2 { public: - SkillAOp(CacheManager* cachemanager) : Applied2() + SkillAOp(CacheManager* cachemanager) : Applied2(), skill(PSSKILL_NONE) { this->cachemanager = cachemanager; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ral...@us...> - 2014-04-12 05:39:07
|
Revision: 9431 http://sourceforge.net/p/planeshift/code/9431 Author: ralphcampbell Date: 2014-04-12 05:39:03 +0000 (Sat, 12 Apr 2014) Log Message: ----------- Fix CID 1139147 Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2014-04-12 05:17:12 UTC (rev 9430) +++ trunk/src/server/scripting.cpp 2014-04-12 05:39:03 UTC (rev 9431) @@ -1076,7 +1076,7 @@ // Applicative script implementation (progression script applied mode) //============================================================================ -ApplicativeScript::ApplicativeScript() : duration(NULL) +ApplicativeScript::ApplicativeScript() : type(BUFF), duration(NULL) { } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ral...@us...> - 2014-04-12 05:47:06
|
Revision: 9432 http://sourceforge.net/p/planeshift/code/9432 Author: ralphcampbell Date: 2014-04-12 05:47:04 +0000 (Sat, 12 Apr 2014) Log Message: ----------- Fix CID 1139143 Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2014-04-12 05:39:03 UTC (rev 9431) +++ trunk/src/server/scripting.cpp 2014-04-12 05:47:04 UTC (rev 9432) @@ -1333,6 +1333,7 @@ { this->entitymanager = entitymanager; this->cachemanager = cachemanager; + aps = NULL; } virtual ~ApplyOp() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ral...@us...> - 2014-04-12 22:04:16
|
Revision: 9442 http://sourceforge.net/p/planeshift/code/9442 Author: ralphcampbell Date: 2014-04-12 22:04:14 +0000 (Sat, 12 Apr 2014) Log Message: ----------- Fix CID 1138760 Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2014-04-12 21:58:34 UTC (rev 9441) +++ trunk/src/server/scripting.cpp 2014-04-12 22:04:14 UTC (rev 9442) @@ -466,12 +466,13 @@ void Run(MathEnvironment* env, gemActor* target, ActiveSpell* asp) { - Multiplier* mod = NULL; + Multiplier* mod; if(type == "atk") mod = &target->GetCharacterData()->AttackModifier(); else if(type == "def") mod = &target->GetCharacterData()->DefenseModifier(); - CS_ASSERT(mod); + else + return; float val = value->Evaluate(env); mod->Buff(asp, val); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ral...@us...> - 2014-04-12 22:06:17
|
Revision: 9443 http://sourceforge.net/p/planeshift/code/9443 Author: ralphcampbell Date: 2014-04-12 22:06:13 +0000 (Sat, 12 Apr 2014) Log Message: ----------- Fix CID 1138759 Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2014-04-12 22:04:14 UTC (rev 9442) +++ trunk/src/server/scripting.cpp 2014-04-12 22:06:13 UTC (rev 9443) @@ -2999,7 +2999,7 @@ gemActor* actor = GetActor(env, aim); if(!actor || !actor->GetClientID()) { - Error2("Error: <tutorialmsg/> needs a valid client for actor '%s'.\n", actor? "null" : actor->GetName()); + Error2("Error: <tutorialmsg/> needs a valid client for actor '%s'.\n", !actor ? "null" : actor->GetName()); return; } //removing 1 to have correspondance with numbering 5 -> 1005 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ral...@us...> - 2014-04-12 22:09:49
|
Revision: 9444 http://sourceforge.net/p/planeshift/code/9444 Author: ralphcampbell Date: 2014-04-12 22:09:47 +0000 (Sat, 12 Apr 2014) Log Message: ----------- Fix CID 1138758 Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2014-04-12 22:06:13 UTC (rev 9443) +++ trunk/src/server/scripting.cpp 2014-04-12 22:09:47 UTC (rev 9444) @@ -3068,9 +3068,10 @@ Debug3(LOG_ACTIONLOCATION,0,"MechanismMsgOp Run with move variable: %s and rot variable: %s", move.GetData(), rot.GetData()); gemActor* actor = GetActor(env, aim); + if(!actor || !actor->GetClientID()) + return; // send message to client about mechanism activated - if(actor && actor->GetClientID()) { psMechanismActivateMessage msg(actor->GetClientID(), mesh.GetData(), move.GetData(), rot.GetData()); msg.SendMessage(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ral...@us...> - 2014-04-12 22:15:26
|
Revision: 9445 http://sourceforge.net/p/planeshift/code/9445 Author: ralphcampbell Date: 2014-04-12 22:15:23 +0000 (Sat, 12 Apr 2014) Log Message: ----------- Fix CID 1138757 Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2014-04-12 22:09:47 UTC (rev 9444) +++ trunk/src/server/scripting.cpp 2014-04-12 22:15:23 UTC (rev 9445) @@ -3063,8 +3063,8 @@ Error1("MechanismMsgOp Run needs at least one between move and rot parameters"); return; } - move = moveVar->GetString(); - rot = rotVar->GetString(); + move = moveVar ? moveVar->GetString() : ""; + rot = rotVar ? rotVar->GetString() : ""; Debug3(LOG_ACTIONLOCATION,0,"MechanismMsgOp Run with move variable: %s and rot variable: %s", move.GetData(), rot.GetData()); gemActor* actor = GetActor(env, aim); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2014-08-31 19:42:39
|
Revision: 9551 http://sourceforge.net/p/planeshift/code/9551 Author: lpancallo Date: 2014-08-31 19:42:31 +0000 (Sun, 31 Aug 2014) Log Message: ----------- removed commented lines Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2014-08-31 19:13:14 UTC (rev 9550) +++ trunk/src/server/scripting.cpp 2014-08-31 19:42:31 UTC (rev 9551) @@ -1451,10 +1451,8 @@ virtual const csString GetDescription(MathEnvironment* inner) { - //MathEnvironment inner(outer); - bindings->Evaluate(inner); - //return body->GetDescription( inner); - return ""; + bindings->Evaluate(inner); + return ""; } bool Load(iDocumentNode* node) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ral...@us...> - 2014-11-29 16:34:37
|
Revision: 9663 http://sourceforge.net/p/planeshift/code/9663 Author: ralphcampbell Date: 2014-11-29 16:34:29 +0000 (Sat, 29 Nov 2014) Log Message: ----------- Fix variable value passing from <let> to <variableset> in progression scripts. Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2014-11-29 16:16:17 UTC (rev 9662) +++ trunk/src/server/scripting.cpp 2014-11-29 16:34:29 UTC (rev 9663) @@ -1531,7 +1531,7 @@ return ""; } /** - * loads new bindingd from the let head and from the body a sub xml script + * loads new bindings from the let head and from the body a sub xml script * @param node that is a let block */ bool Load(iDocumentNode* node) @@ -2506,7 +2506,7 @@ varName = variableName; if(valueVar) - varValue = valueVar->GetString(); + varValue = valueVar->ToString(); else //if the variable was not found try getting the value associated directly (not in <let>) varValue = variableValue; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ral...@us...> - 2014-12-07 07:14:37
|
Revision: 9669 http://sourceforge.net/p/planeshift/code/9669 Author: ralphcampbell Date: 2014-12-07 07:14:29 +0000 (Sun, 07 Dec 2014) Log Message: ----------- Added an ApplicativeScript <if> operator. Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2014-12-05 19:40:42 UTC (rev 9668) +++ trunk/src/server/scripting.cpp 2014-12-07 07:14:29 UTC (rev 9669) @@ -1097,6 +1097,103 @@ MathScript* bindings; /// an embedded MathScript containing new bindings }; +static bool ParseAOps(EntityManager* entitymanager, CacheManager* cachemanager, iDocumentNode* top, csPDelArray<AppliedOp>& ops); + +/** + * IfAOp - a way to evaluate MathScript stuff and create new bindings: + * + * The attribute t is evaluated as a boolean expression and its + * result is used to decide which branch (then / else) is to be + * executed. + * + * - Example: + * @code + * <if t="Roll < 40"> + * <then>...</then> + * <else>...</else> + * </if> + * @endcode + * + * The "then" branch is required, but an "else" branch is optional. + * + */ +class IfAOp : public AppliedOp +{ +public: + IfAOp(EntityManager* entitymanager, CacheManager* cachemanager) : + AppliedOp(), + entitymanager(entitymanager), + cachemanager(cachemanager), + condition(NULL) + { + } + + /// deletes the branches and the condition object + virtual ~IfAOp() + { + delete condition; + } + + bool Load(iDocumentNode* node) + { + condition = MathExpression::Create(node->GetAttributeValue("t")); + csRef<iDocumentNode> thenNode = node->GetNode("then"); + csRef<iDocumentNode> elseNode = node->GetNode("else"); + + if(!thenNode) + { + Error1("Missing <then> in <if>."); + return false; + } + + if(!ParseAOps(entitymanager, cachemanager, thenNode, then_ops)) + { + return false; + } + + if(elseNode && + !ParseAOps(entitymanager, cachemanager, elseNode, else_ops)) + { + return false; + } + + return condition != NULL; + } + + virtual void Run(MathEnvironment* env, gemActor* target, ActiveSpell* asp) + { + csPDelArray<AppliedOp>::Iterator it = + condition->Evaluate(env) != 0.0 ? + then_ops.GetIterator() : else_ops.GetIterator(); + while(it.HasNext()) + { + AppliedOp* op = it.Next(); + op->Run(env, target, asp); + } + } + + virtual const csString GetDescription(MathEnvironment* env) + { + csString descr; + csPDelArray<AppliedOp>::Iterator it = + condition->Evaluate(env) != 0.0 ? + then_ops.GetIterator() : else_ops.GetIterator(); + while(it.HasNext()) + { + AppliedOp* op = it.Next(); + descr.Append(op->GetDescription(env)); + } + return descr; + } + +protected: + csPDelArray<AppliedOp> then_ops; + csPDelArray<AppliedOp> else_ops; + MathExpression* condition; /// an embedded MathExpression - should result in a boolean + EntityManager* entitymanager; + CacheManager* cachemanager; +}; + //============================================================================ // Applicative script implementation (progression script applied mode) //============================================================================ @@ -1153,30 +1250,8 @@ return Create(entitymanager, cachemanager, top, type, top->GetAttributeValue("name"), top->GetAttributeValue("duration")); } -ApplicativeScript* ApplicativeScript::Create(EntityManager* entitymanager, CacheManager* cachemanager, iDocumentNode* top, SPELL_TYPE type, const char* name, const char* duration) +static bool ParseAOps(EntityManager* entitymanager, CacheManager* cachemanager, iDocumentNode* top, csPDelArray<AppliedOp>& ops) { - CS_ASSERT(name); - ApplicativeScript* script = new ApplicativeScript; - if(!script) - return NULL; - - script->aim = top->GetAttributeValue("aim"); - script->name = name; - script->type = type; - if( top->GetAttributeValue("image")!=NULL ) - { - script->image = top->GetAttributeValue("image"); - } - - if(duration) - script->duration = MathExpression::Create(duration); - - if(script->aim.IsEmpty() || script->name.IsEmpty() || (duration && !script->duration)) - { - delete script; - return NULL; - } - csRef<iDocumentNodeIterator> it = top->GetNodes(); while(it->HasNext()) { @@ -1268,25 +1343,56 @@ { op = new LetAOp; } + else if(elem == "if") + { + op = new IfAOp(entitymanager, cachemanager); + } else { // complain (shouldn't happen - script should've been validated against the schema) Error2("Unknown operation >%s< - validate against the schema!", elem.GetData()); - delete script; - return NULL; + return false; } if(op->Load(node)) { - script->ops.Push(op); + ops.Push(op); } else { delete op; - delete script; - return NULL; + return false; } } + return true; +} + +ApplicativeScript* ApplicativeScript::Create(EntityManager* entitymanager, CacheManager* cachemanager, iDocumentNode* top, SPELL_TYPE type, const char* name, const char* duration) +{ + CS_ASSERT(name); + ApplicativeScript* script = new ApplicativeScript; + if(!script) + return NULL; + + script->aim = top->GetAttributeValue("aim"); + script->name = name; + script->type = type; + if( top->GetAttributeValue("image")!=NULL ) + { + script->image = top->GetAttributeValue("image"); + } + + if(duration) + script->duration = MathExpression::Create(duration); + + if(script->aim.IsEmpty() || script->name.IsEmpty() || (duration && !script->duration)) + { + delete script; + return NULL; + } + + ParseAOps(entitymanager, cachemanager, top, script->ops); + return script; } @@ -1563,7 +1669,7 @@ /** * IfOp - conditional control flow, based on MathScript. * - * The attribute t is evaluated as a boolean expression and it's + * The attribute t is evaluated as a boolean expression and its * result is used to decide which branch (then / else) is to be * executed. * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ral...@us...> - 2015-01-12 07:37:40
|
Revision: 9695 http://sourceforge.net/p/planeshift/code/9695 Author: ralphcampbell Date: 2015-01-12 07:37:37 +0000 (Mon, 12 Jan 2015) Log Message: ----------- Change IfAOp() constructor initialization order to fix gcc compiler warning. Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2015-01-12 07:34:25 UTC (rev 9694) +++ trunk/src/server/scripting.cpp 2015-01-12 07:37:37 UTC (rev 9695) @@ -1122,9 +1122,9 @@ public: IfAOp(EntityManager* entitymanager, CacheManager* cachemanager) : AppliedOp(), + condition(NULL), entitymanager(entitymanager), - cachemanager(cachemanager), - condition(NULL) + cachemanager(cachemanager) { } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rav...@us...> - 2016-04-05 17:50:49
|
Revision: 9889 http://sourceforge.net/p/planeshift/code/9889 Author: ravna-ps Date: 2016-04-05 17:50:48 +0000 (Tue, 05 Apr 2016) Log Message: ----------- Progression events can now accept variables (set by <let> or others) as name in <apply> commands Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2016-04-03 14:33:51 UTC (rev 9888) +++ trunk/src/server/scripting.cpp 2016-04-05 17:50:48 UTC (rev 9889) @@ -1432,8 +1432,17 @@ gemActor* target = GetActor(env, aim); CS_ASSERT(target); + // Attempt to find the name in the math event (might be set by <let>) + MathVar* nameVar = env->Lookup(name); + csString varName; + + if (nameVar) // if found, use it. + varName = nameVar->GetString(); + else //if the variable was not found, take it at face value. (not in <let>) + varName = name; + csTicks dticks = duration ? (csTicks) duration->Evaluate(env) : 0; - ActiveSpell* asp = new ActiveSpell(name, type, dticks, image); + ActiveSpell* asp = new ActiveSpell(varName, type, dticks, image); csPDelArray<AppliedOp>::Iterator it = ops.GetIterator(); while(it.HasNext()) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rav...@us...> - 2016-04-11 18:33:50
|
Revision: 9890 http://sourceforge.net/p/planeshift/code/9890 Author: ravna-ps Date: 2016-04-11 18:33:47 +0000 (Mon, 11 Apr 2016) Log Message: ----------- Progression events can now accept variables (set by <let> or others) in skill names inside <apply> tags. Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2016-04-05 17:50:48 UTC (rev 9889) +++ trunk/src/server/scripting.cpp 2016-04-11 18:33:47 UTC (rev 9890) @@ -396,13 +396,6 @@ bool Load(iDocumentNode* node) { skillname = node->GetAttributeValue("name"); - psSkillInfo* info = cachemanager->GetSkillByName(skillname); - if(!info) - { - Error2("Found <skill name=\"%s\">, but no such skill exists.", node->GetAttributeValue("name")); - return false; - } - skill = info->id; return Applied1::Load(node); } @@ -422,11 +415,26 @@ void Run(MathEnvironment* env, gemActor* target, ActiveSpell* asp) { + MathVar* nameVar = env->Lookup(skillname); + if (nameVar) + { + skillname = nameVar->GetString(); + } + //else: nothing changes, we use skillname as plain text. + + psSkillInfo* info = cachemanager->GetSkillByName(skillname); + if (!info) + { + Error2("Found <skill name=\"%s\">, but no such skill exists.", skillname.GetDataSafe()); + return; + } + skill = info->id; + int val = (int) value->Evaluate(env); SkillRank &buffable = target->GetCharacterData()->GetSkillRank(skill); buffable.Buff(asp, val); - asp->Add(buffable, "<skill name=\"%s\" value=\"%d\"/>", name.GetData(), val); + asp->Add(buffable, "<skill name=\"%s\" value=\"%d\"/>", skillname.GetData(), val); } protected: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rav...@us...> - 2016-04-11 20:49:52
|
Revision: 9891 http://sourceforge.net/p/planeshift/code/9891 Author: ravna-ps Date: 2016-04-11 20:49:50 +0000 (Mon, 11 Apr 2016) Log Message: ----------- Fixed a case where skill name could possibly get re-interpreted. Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2016-04-11 18:33:47 UTC (rev 9890) +++ trunk/src/server/scripting.cpp 2016-04-11 20:49:50 UTC (rev 9891) @@ -416,25 +416,27 @@ void Run(MathEnvironment* env, gemActor* target, ActiveSpell* asp) { MathVar* nameVar = env->Lookup(skillname); + csString varName; + if (nameVar) - { - skillname = nameVar->GetString(); - } - //else: nothing changes, we use skillname as plain text. + varName = nameVar->GetString(); + else //if the variable was not found try getting the value associated directly (not in <let>) + varName = skillname; - psSkillInfo* info = cachemanager->GetSkillByName(skillname); + psSkillInfo* info = cachemanager->GetSkillByName(varName); + if (!info) { - Error2("Found <skill name=\"%s\">, but no such skill exists.", skillname.GetDataSafe()); + Error2("Found <skill name=\"%s\">, but no such skill exists.", varName.GetDataSafe()); return; } + skill = info->id; - int val = (int) value->Evaluate(env); SkillRank &buffable = target->GetCharacterData()->GetSkillRank(skill); buffable.Buff(asp, val); - asp->Add(buffable, "<skill name=\"%s\" value=\"%d\"/>", skillname.GetData(), val); + asp->Add(buffable, "<skill name=\"%s\" value=\"%d\"/>", varName.GetData(), val); } protected: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rav...@us...> - 2016-04-11 21:19:38
|
Revision: 9892 http://sourceforge.net/p/planeshift/code/9892 Author: ravna-ps Date: 2016-04-11 21:19:36 +0000 (Mon, 11 Apr 2016) Log Message: ----------- Added various checks and warnings to determine if an operation is using a valid aim. Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2016-04-11 20:49:50 UTC (rev 9891) +++ trunk/src/server/scripting.cpp 2016-04-11 21:19:36 UTC (rev 9892) @@ -1440,6 +1440,11 @@ { // TODO: Handle non-actor targets... gemActor* target = GetActor(env, aim); + if (!target) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return NULL; + } CS_ASSERT(target); // Attempt to find the name in the math event (might be set by <let>) @@ -1813,6 +1818,11 @@ virtual void Run(MathEnvironment* env) { gemActor* actor = GetActor(env, aim); + if (!actor) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } if(actor && actor->GetClientID()) { @@ -1866,6 +1876,11 @@ virtual void Run(MathEnvironment* env) { gemNPC* npc = GetNPC(env, aim); + if (!npc) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } if(npc) { @@ -1949,6 +1964,11 @@ virtual void Run(MathEnvironment* env) { gemActor* actor = GetActor(env, aim); + if (!actor) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } CS_ASSERT(actor); // Find which potentially cancellable spells are actually active @@ -2207,6 +2227,11 @@ void Run(MathEnvironment* env) { gemObject* obj = GetObject(env, aim); + if (!obj) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } psserver->GetEventManager()->Push(new psEntityEvent(entitymanager, psEntityEvent::DESTROY, obj)); } protected: @@ -2331,6 +2356,11 @@ void Run(MathEnvironment* env) { gemActor* actor = GetActor(env, aim); + if (!actor) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } //holds the value calculated of the delay in case it's needed int32_t loadDelayInt = 0; //holds the value calculated of the origin point of the anim @@ -2431,6 +2461,11 @@ void Run(MathEnvironment* env) { psCharacter* c = GetCharacter(env, aim); + if (!c) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } float val = value->Evaluate(env); if(vital == "mana") c->AdjustMana(val); @@ -2473,6 +2508,11 @@ void Run(MathEnvironment* env) { gemActor* target = GetActor(env, aim); + if (!target) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } gemActor* atk = GetActor(env, attacker); // may be NULL float val = value->Evaluate(env); @@ -2534,6 +2574,11 @@ void Run(MathEnvironment* env) { psCharacter* c = GetCharacter(env, aim); + if (!c) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } int val = (int) value->Evaluate(env); PSSKILL skill = statToSkill(stat); if (skill != PSSKILL_NONE) @@ -2584,6 +2629,11 @@ { Faction* currentFaction = faction; psCharacter* c = GetCharacter(env, aim); + if (!c) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } int val = (int) value->Evaluate(env); //we didn't find a valid faction name during load: it means it's a variable. if(!currentFaction) @@ -2647,6 +2697,11 @@ void Run(MathEnvironment* env) { psCharacter* c = GetCharacter(env, aim); + if (!c) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } //evaluate the variables so we can get it's value MathVar* nameVar = env->Lookup(variableName); MathVar* valueVar = env->Lookup(variableValue); @@ -2697,6 +2752,11 @@ void Run(MathEnvironment* env) { psCharacter* c = GetCharacter(env, aim); + if (!c) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } //evaluate the variables so we can get it's value MathVar* nameVar = env->Lookup(variableName); csString varName; @@ -2740,6 +2800,11 @@ void Run(MathEnvironment* env) { psCharacter* c = GetCharacter(env, aim); + if (!c) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } //evaluate the variables so we can get it's value MathVar* nameVar = env->Lookup(skillName); @@ -2838,6 +2903,11 @@ void Run(MathEnvironment* env) { psCharacter* chr = GetCharacter(env, aim); + if (!chr) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } // Parse the string into an XML document. // <category attribute="Type|Lifecycle|AttackTool|AttackType|..." name="" value="" /> @@ -2947,6 +3017,11 @@ { // Get character data psCharacter* c = GetCharacter(env, aim); + if (!c) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } // Returns the next inactive entrance action location psActionLocation* actionLocation = psserver->GetActionManager()->FindAvailableEntrances(sector); @@ -3078,6 +3153,11 @@ { // Get character data psCharacter* c = GetCharacter(env, aim); + if (!c) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } switch(function) { @@ -3329,6 +3409,11 @@ void Run(MathEnvironment* env) { gemActor* actor = GetActor(env, aim); + if (!actor) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } if(!actor->GetClientID()) { Error2("Error: <createfamiliar/> needs a valid client for actor '%s'.\n", actor->GetName()); @@ -3448,7 +3533,10 @@ gemActor* actor = GetActor(env, aim); if(!actor || !actor->GetClientID()) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); return; + } // send message to client about mechanism activated { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rav...@us...> - 2016-04-12 14:29:17
|
Revision: 9893 http://sourceforge.net/p/planeshift/code/9893 Author: ravna-ps Date: 2016-04-12 14:29:15 +0000 (Tue, 12 Apr 2016) Log Message: ----------- Fixed a constructor call and a comment. Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2016-04-11 21:19:36 UTC (rev 9892) +++ trunk/src/server/scripting.cpp 2016-04-12 14:29:15 UTC (rev 9893) @@ -396,7 +396,7 @@ bool Load(iDocumentNode* node) { skillname = node->GetAttributeValue("name"); - return Applied1::Load(node); + return Applied2::Load(node); } virtual const csString GetDescription(MathEnvironment* env) @@ -442,7 +442,7 @@ protected: PSSKILL skill; CacheManager* cachemanager; - csString skillname; /// < used for description + csString skillname; /// < used for description and for run(). }; //---------------------------------------------------------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rav...@us...> - 2016-04-12 22:09:44
|
Revision: 9894 http://sourceforge.net/p/planeshift/code/9894 Author: ravna-ps Date: 2016-04-12 22:09:41 +0000 (Tue, 12 Apr 2016) Log Message: ----------- Progression events can now set traits using <trait aim="Target" name="Face 1" /> . Any traits that cannot be applied to the targets race/gender are ignored. Changes are permanent. Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2016-04-12 14:29:15 UTC (rev 9893) +++ trunk/src/server/scripting.cpp 2016-04-12 22:09:41 UTC (rev 9894) @@ -41,6 +41,7 @@ #include "rpgrules/factions.h" #include "bulkobjects/pstrait.h" #include "bulkobjects/activespell.h" +#include "bulkobjects/psRaceInfo.h" //============================================================================= // Application Includes @@ -2836,6 +2837,83 @@ //---------------------------------------------------------------------------- /** +* TraitOp - imperative skills. +* +* \<trait aim="Target" name="traitX" /\> (sets traitX on actor.) +* +* This is a permanent change. +*/ +class TraitOp : public ImperativeAim +{ +public: + TraitOp(CacheManager* cachemanager) : ImperativeAim() + { + this->cachemanager = cachemanager; + } + virtual ~TraitOp() { } + + bool Load(iDocumentNode* node) + { + traitName = node->GetAttributeValue("name"); + return ImperativeAim::Load(node); + } + + void Run(MathEnvironment* env) + { + gemActor* actor = GetActor(env, aim); + psCharacter* c = GetCharacter(env, aim); + gemObject* obj = GetObject(env, aim); + if (!c || !actor || !obj) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } + + //evaluate the variables so we can get it's value + MathVar* nameVar = env->Lookup(traitName); + csString varName; + + if (nameVar) + varName = nameVar->GetString(); + else //if the variable was not found try getting the value associated directly (not in <let>) + varName = traitName; + + CacheManager::TraitIterator ti = psserver->GetCacheManager()->GetTraitIterator(); + while (ti.HasNext()) + { + psTrait* currTrait = ti.Next(); + if (currTrait->gender == c->GetRaceInfo()->gender && + currTrait->race == c->GetRaceInfo()->race && + currTrait->name.CompareNoCase(traitName)) + { + c->SetTraitForLocation(currTrait->location, currTrait); + + csString str("<traits>"); + do + { + str.Append(currTrait->ToXML()); + currTrait = currTrait->next_trait; + } while (currTrait); + str.Append("</traits>"); + + psTraitChangeMessage message(obj->GetClient()->GetClientNum(), c->GetActor()->GetEID(), str); + message.Multicast(c->GetActor()->GetMulticastClients(), 0, PROX_LIST_ANY_RANGE); + //update everything needed for bgloader to pick changes correctly. + obj->UpdateProxList(true); + + psserver->SendSystemOK(obj->GetClient()->GetClientNum(), "Trait successfully changed"); + return; + } + } + } +protected: + CacheManager* cachemanager; + csString traitName; +}; + +//---------------------------------------------------------------------------- + +/** * ExpOp - grant experience points. * * \<exp aim="Actor" value="200" notify="false" /\> @@ -3687,6 +3765,10 @@ { op = new SkillOp(cachemanager); } + else if (elem == "trait") + { + op = new TraitOp(cachemanager); + } else if(elem == "faction") { op = new FactionOp(cachemanager); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rav...@us...> - 2016-04-19 12:37:52
|
Revision: 9898 http://sourceforge.net/p/planeshift/code/9898 Author: ravna-ps Date: 2016-04-19 12:37:50 +0000 (Tue, 19 Apr 2016) Log Message: ----------- Changed the trait command in progression events to only change the trait if the target is not morphed or has its race changed in any other way. Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2016-04-15 16:18:26 UTC (rev 9897) +++ trunk/src/server/scripting.cpp 2016-04-19 12:37:50 UTC (rev 9898) @@ -2869,6 +2869,12 @@ return; } + // we do not want to set traits on any morphed/etc player, because the trait are tried to the player, not the overrridable race. + if (c->GetOverridableRace().Base() != c->GetOverridableRace().Current()) + { + return; + } + //evaluate the variables so we can get it's value MathVar* nameVar = env->Lookup(traitName); csString varName; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rav...@us...> - 2016-04-19 14:10:32
|
Revision: 9900 http://sourceforge.net/p/planeshift/code/9900 Author: ravna-ps Date: 2016-04-19 14:10:29 +0000 (Tue, 19 Apr 2016) Log Message: ----------- Added an animation tag to progression events. Usage: <animation aim="Target" name="attack" /> Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2016-04-19 14:09:43 UTC (rev 9899) +++ trunk/src/server/scripting.cpp 2016-04-19 14:10:29 UTC (rev 9900) @@ -2920,6 +2920,58 @@ //---------------------------------------------------------------------------- /** +* AnimationOp - imperative skills. +* +* \<animation aim="Target" name="animationX" /\> (runs animationX on actor, runs once.) +* +* This is a run once animation. Animation is not validated, only client knows if it has the animation. If it does not exist, nothing happens. +*/ +class AnimationOp : public ImperativeAim +{ +public: + AnimationOp(CacheManager* cachemanager) : ImperativeAim() + { + this->cachemanager = cachemanager; + } + virtual ~AnimationOp() { } + + bool Load(iDocumentNode* node) + { + animationName = node->GetAttributeValue("name"); + return ImperativeAim::Load(node); + } + + void Run(MathEnvironment* env) + { + gemActor* actor = GetActor(env, aim); + psCharacter* c = GetCharacter(env, aim); + gemObject* obj = GetObject(env, aim); + if (!c || !actor || !obj) + { + Error2("Invalid Aim >%s< - check if you mixed up Actor and Target", aim.GetData()); + return; + } + + //evaluate the variables so we can get it's value + MathVar* nameVar = env->Lookup(animationName); + csString varName; + + if (nameVar) + varName = nameVar->GetString(); + else //if the variable was not found try getting the value associated directly (not in <let>) + varName = animationName; + + psUserActionMessage msg(actor->GetClientID(), actor->GetEID(), varName); + msg.Multicast(actor->GetMulticastClients(), 0, PROX_LIST_ANY_RANGE); + } +protected: + CacheManager* cachemanager; + csString animationName; +}; + +//---------------------------------------------------------------------------- + +/** * ExpOp - grant experience points. * * \<exp aim="Actor" value="200" notify="false" /\> @@ -3775,6 +3827,10 @@ { op = new TraitOp(cachemanager); } + else if (elem == "animation") + { + op = new AnimationOp(cachemanager); + } else if(elem == "faction") { op = new FactionOp(cachemanager); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rav...@us...> - 2016-05-03 18:22:27
|
Revision: 9926 http://sourceforge.net/p/planeshift/code/9926 Author: ravna-ps Date: 2016-05-03 18:22:24 +0000 (Tue, 03 May 2016) Log Message: ----------- Fixed a bug that caused the trait tag not to use variables in progression events. Modified Paths: -------------- trunk/src/server/scripting.cpp Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2016-05-02 19:51:20 UTC (rev 9925) +++ trunk/src/server/scripting.cpp 2016-05-03 18:22:24 UTC (rev 9926) @@ -2890,7 +2890,7 @@ psTrait* currTrait = ti.Next(); if (currTrait->gender == c->GetRaceInfo()->gender && currTrait->race == c->GetRaceInfo()->race && - currTrait->name.CompareNoCase(traitName)) + currTrait->name.CompareNoCase(varName)) { c->SetTraitForLocation(currTrait->location, currTrait); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |